Module: SpreeCmCommissioner::Orders::GenerateCommissionsDecorator

Defined in:
app/services/spree_cm_commissioner/orders/generate_commissions_decorator.rb

Instance Method Summary collapse

Instance Method Details

#commission_amount(line_item) ⇒ Object

return default line item commission amount spree_vpago have different construction of commision. if they define, should follow them.



25
26
27
28
29
# File 'app/services/spree_cm_commissioner/orders/generate_commissions_decorator.rb', line 25

def commission_amount(line_item)
  return line_item.commission_amount if line_item.respond_to?(:commission_amount)

  line_item.pre_tax_amount * line_item.commission_rate / 100.0
end

#generate_commissions_group_by_vendor_ids(order) ⇒ Object



16
17
18
19
20
# File 'app/services/spree_cm_commissioner/orders/generate_commissions_decorator.rb', line 16

def generate_commissions_group_by_vendor_ids(order)
  order.line_items.each_with_object(Hash.new(0)) do |line_item, commissions|
    commissions[line_item.vendor_id] += commission_amount(line_item) if line_item.vendor_id.present?
  end
end

#generate_order_commissions(order:) ⇒ Object

override



5
6
7
8
9
10
11
12
13
14
# File 'app/services/spree_cm_commissioner/orders/generate_commissions_decorator.rb', line 5

def generate_order_commissions(order:)
  return failure(order) unless order.state == 'complete'

  vendor_commissions = generate_commissions_group_by_vendor_ids(order)
  vendor_commissions.each do |vendor_id, amount|
    order.commissions.find_or_create_by!(vendor_id: vendor_id) { |commission| commission.amount = amount }
  end

  success(order: order)
end