Class: SpreeCmCommissioner::ConversionPreCalculator

Inherits:
BaseInteractor show all
Defined in:
app/interactors/spree_cm_commissioner/conversion_pre_calculator.rb

Instance Method Summary collapse

Instance Method Details

#callObject



5
6
7
8
9
# File 'app/interactors/spree_cm_commissioner/conversion_pre_calculator.rb', line 5

def call
  update_conversion
  reassign_guests_event_id
  refinalize_guests
end

#event_idObject



50
51
52
53
54
# File 'app/interactors/spree_cm_commissioner/conversion_pre_calculator.rb', line 50

def event_id
  return nil unless product_taxon.taxon&.event?

  context.event_id ||= product_taxon.taxon&.parent_id
end

#reassign_guests_event_idObject

reassign event_id if it’s wrong.



19
20
21
22
23
24
25
26
27
28
29
# File 'app/interactors/spree_cm_commissioner/conversion_pre_calculator.rb', line 19

def reassign_guests_event_id
  return if event_id.blank?

  SpreeCmCommissioner::Guest
    .where(line_item_id: product_taxon.line_items.pluck(:id))
    .where('event_id IS NULL OR event_id != ?', event_id)
    .find_each do |guest|
    guest.event_id = event_id
    guest.save!
  end
end

#refinalize_guestsObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/interactors/spree_cm_commissioner/conversion_pre_calculator.rb', line 31

def refinalize_guests
  return if event_id.blank?

  SpreeCmCommissioner::Guest
    .complete
    .where(event_id: event_id)
    .none_bib
    .find_each do |guest|
      result = SpreeCmCommissioner::Guests::Finalize.call(
        guest: guest,
        user: guest.line_item.order.user,
        event: guest.event,
        variant: guest.variant
      )

      result.success? || raise(ActiveRecord::RecordInvalid, guest)
    end
end

#revenueObject



60
61
62
# File 'app/interactors/spree_cm_commissioner/conversion_pre_calculator.rb', line 60

def revenue
  product_taxon.complete_line_items.map(&:amount).compact.sum
end

#total_countObject



56
57
58
# File 'app/interactors/spree_cm_commissioner/conversion_pre_calculator.rb', line 56

def total_count
  product_taxon.complete_line_items.pluck(:quantity).compact.sum
end

#update_conversionObject



11
12
13
14
15
16
# File 'app/interactors/spree_cm_commissioner/conversion_pre_calculator.rb', line 11

def update_conversion
  product_taxon.update(
    total_count: total_count,
    revenue: revenue
  )
end