Sha256: 40c7633e198c4b4aa186faff09ad8725ef219df25a2889f39e5da0415dbe87e1

Contents?: true

Size: 1.8 KB

Versions: 4

Compression:

Stored size: 1.8 KB

Contents

#
# This class manages all the patron-related things we need to do after an order is placed
#
# * Create donation, purchase actions
# * Process memberships
# * Send confirmation emails if skip_email is true
#
# options can include:
#   :skip_actions. If set to true, no actions will be generated for this action
#   :skip_email.   If set to true, no email confirmation will be sent
#
class OrderProcessor < Struct.new(:order, :options)
  include ActionView::Helpers::TextHelper
  QUEUE = "order"

  def initialize(order, options = {})
    self.options  = options
    self.order    = order
  end

  def self.process(order, options = {})
    job = OrderProcessor.new(order, options)
    Delayed::Job.enqueue job, :queue => QUEUE
  end

  def perform
    ActiveRecord::Base.transaction do
      self.order.create_donation_actions unless skip_actions
      self.order.create_purchase_action  unless skip_actions
      process_memberships
    end

    begin
      generate_pdf
    rescue Exception => e
      Exceptional.context(:order_id => order.id)
      Exceptional.handle(e, "Could not generate PDF for order")
    end

    begin
      OrderMailer.confirmation_for(order).deliver unless skip_email
    rescue Exception => e
      Exceptional.context(:order_id => order.id)
      Exceptional.handle(e, "Could not send order confirmation for order")
    end
  end

  def skip_actions
    self.options[:skip_actions] == true
  end

  def skip_email
    self.options[:skip_email] == true
  end

  def process_memberships
    self.order.memberships.each do |membership_item|
      Member.for(membership_item.product)
    end
    self.order.create_membership_action
  end

  def generate_pdf
    pdf_generator = Orders::PdfGeneration.new(order)
    download_url = pdf_generator.generate
    order.pdf = URI.parse(download_url)
    order.save
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
artfully_ose-1.2.0.pre.19 app/models/job/order_processor.rb
artfully_ose-1.2.0.pre.18 app/models/job/order_processor.rb
artfully_ose-1.2.0.pre.17 app/models/job/order_processor.rb
artfully_ose-1.2.0.pre.16 app/models/job/order_processor.rb