mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Create per-order adjustments with EnterpriseFeeApplicator
This commit is contained in:
@@ -1,15 +1,28 @@
|
||||
module OpenFoodNetwork
|
||||
class EnterpriseFeeApplicator < Struct.new(:enterprise_fee, :variant, :role)
|
||||
def create_line_item_adjustment(line_item)
|
||||
a = enterprise_fee.create_locked_adjustment(adjustment_label, line_item.order, line_item, true)
|
||||
a = enterprise_fee.create_locked_adjustment(line_item_adjustment_label, line_item.order, line_item, true)
|
||||
AdjustmentMetadata.create! adjustment: a, enterprise: enterprise_fee.enterprise, fee_name: enterprise_fee.name, fee_type: enterprise_fee.fee_type, enterprise_role: role
|
||||
end
|
||||
|
||||
def create_order_adjustment(order)
|
||||
a = enterprise_fee.create_locked_adjustment(order_adjustment_label, order, order, true)
|
||||
AdjustmentMetadata.create! adjustment: a, enterprise: enterprise_fee.enterprise, fee_name: enterprise_fee.name, fee_type: enterprise_fee.fee_type, enterprise_role: role
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def adjustment_label
|
||||
"#{variant.product.name} - #{enterprise_fee.fee_type} fee by #{role} #{enterprise_fee.enterprise.name}"
|
||||
def line_item_adjustment_label
|
||||
"#{variant.product.name} - #{base_adjustment_label}"
|
||||
end
|
||||
|
||||
def order_adjustment_label
|
||||
"Whole order - #{base_adjustment_label}"
|
||||
end
|
||||
|
||||
def base_adjustment_label
|
||||
"#{enterprise_fee.fee_type} fee by #{role} #{enterprise_fee.enterprise.name}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,7 +8,7 @@ module OpenFoodNetwork
|
||||
product = create(:simple_product)
|
||||
|
||||
efa = EnterpriseFeeApplicator.new enterprise_fee, product.master, 'role'
|
||||
efa.stub(:adjustment_label) { 'label' }
|
||||
efa.stub(:line_item_adjustment_label) { 'label' }
|
||||
efa.create_line_item_adjustment line_item
|
||||
|
||||
adjustment = Spree::Adjustment.last
|
||||
@@ -25,13 +25,45 @@ module OpenFoodNetwork
|
||||
md.enterprise_role.should == 'role'
|
||||
end
|
||||
|
||||
it "makes adjustment labels" do
|
||||
it "creates an adjustment for an order" do
|
||||
order = create(:order)
|
||||
#line_item = create(:line_item)
|
||||
enterprise_fee = create(:enterprise_fee)
|
||||
product = create(:simple_product)
|
||||
|
||||
efa = EnterpriseFeeApplicator.new enterprise_fee, nil, 'role'
|
||||
efa.stub(:order_adjustment_label) { 'label' }
|
||||
efa.create_order_adjustment order
|
||||
|
||||
adjustment = Spree::Adjustment.last
|
||||
adjustment.label.should == 'label'
|
||||
adjustment.adjustable.should == order
|
||||
adjustment.source.should == order
|
||||
adjustment.originator.should == enterprise_fee
|
||||
adjustment.should be_mandatory
|
||||
|
||||
md = adjustment.metadata
|
||||
md.enterprise.should == enterprise_fee.enterprise
|
||||
md.fee_name.should == enterprise_fee.name
|
||||
md.fee_type.should == enterprise_fee.fee_type
|
||||
md.enterprise_role.should == 'role'
|
||||
end
|
||||
|
||||
it "makes an adjustment label for a line item" do
|
||||
variant = double(:variant, product: double(:product, name: 'Bananas'))
|
||||
enterprise_fee = double(:enterprise_fee, fee_type: 'packing', enterprise: double(:enterprise, name: 'Ballantyne'))
|
||||
|
||||
efa = EnterpriseFeeApplicator.new enterprise_fee, variant, 'distributor'
|
||||
|
||||
efa.send(:adjustment_label).should == "Bananas - packing fee by distributor Ballantyne"
|
||||
efa.send(:line_item_adjustment_label).should == "Bananas - packing fee by distributor Ballantyne"
|
||||
end
|
||||
|
||||
it "makes an adjustment label for an order" do
|
||||
enterprise_fee = double(:enterprise_fee, fee_type: 'packing', enterprise: double(:enterprise, name: 'Ballantyne'))
|
||||
|
||||
efa = EnterpriseFeeApplicator.new enterprise_fee, nil, 'distributor'
|
||||
|
||||
efa.send(:order_adjustment_label).should == "Whole order - packing fee by distributor Ballantyne"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user