Skip to content
This repository was archived by the owner on Feb 23, 2020. It is now read-only.

Commit 50407db

Browse files
committed
Merge quantity of units when serializing shipment.items
Currently when receiving that shipment back via a webhook from wombat the extention would complain about a diff in the items. e.g. The received shipment items do not match with the shipment, diff: [{:sku=>"123", :quantity=>1}, {:sku=>"123", :quantity=>1}] Before: items: [{ product_id: 1, quantity: 1 }, { product_id: 1, quantity: 1 }] Now: items: [{ product_id: 1, quantity: 2 }]
1 parent 465bbee commit 50407db

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

app/serializers/spree/wombat/inventory_unit_serializer.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ def quantity
1010
end
1111

1212
def price
13-
object.line_item.price.round(2).to_f
13+
price = object.respond_to?(:price) ? object.price : object.line_item.price
14+
price.round(2).to_f
1415
end
1516

1617
def product_id

app/serializers/spree/wombat/shipment_serializer.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,14 @@ def updated_at
7171

7272
def items
7373
i = []
74-
object.inventory_units.each do |inventory_unit|
75-
i << InventoryUnitSerializer.new(inventory_unit, root: false)
74+
object.inventory_units.group_by(&:line_item).each do |line_item, units|
75+
line = LineItem.new do |line|
76+
line.quantity = units.count
77+
line.variant = line_item.variant
78+
line.price = line_item.price
79+
end
80+
81+
i << InventoryUnitSerializer.new(line, root: false)
7682
end
7783
i
7884
end

spec/serializers/spree/wombat/shipment_serializer_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,30 @@ module Wombat
77
let(:shipment) { create(:shipment, address: create(:address), order: create(:order_with_line_items)) }
88
let(:serialized_shipment) { JSON.parse (ShipmentSerializer.new(shipment, root: false).to_json) }
99

10+
it "merge inventory into a single shipment item when needed" do
11+
variant = Variant.new sku: "wom"
12+
line = LineItem.new variant: variant
13+
inventories = 2.times.map {
14+
InventoryUnit.new line_item: line, variant: variant
15+
}
16+
17+
shipment = Shipment.new
18+
shipment.inventory_units = inventories
19+
20+
serialized = ShipmentSerializer.new(shipment, root: false)
21+
expect(serialized.items.first.quantity).to eq 2
22+
23+
other_variant = Variant.new sku: "other wom"
24+
other_line = LineItem.new variant: other_variant
25+
inventories.push InventoryUnit.new(line_item: other_line, variant: other_variant)
26+
27+
shipment = Shipment.new
28+
shipment.inventory_units = inventories
29+
30+
serialized = ShipmentSerializer.new(shipment, root: false)
31+
expect(serialized.items.last.quantity).to eq 1
32+
end
33+
1034
it "serializes the number as id" do
1135
expect(serialized_shipment["id"]).to eql shipment.number
1236
end

0 commit comments

Comments
 (0)