-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix Spree::Shipment#item_cost for split shipments #18
base: main
Are you sure you want to change the base?
Conversation
@@ -141,6 +141,26 @@ | |||
it 'should equal line items final amount with tax' do | |||
expect(shipment.item_cost).to eql(11.0) | |||
end | |||
|
|||
context 'whit more shipments for the same line_item' do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Small typo in here, should be with
instead of whit
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@DanielePalombo thank you for the fix! 👏 🎉
I left a comment, only a minor suggestion.
core/app/models/spree/shipment.rb
Outdated
@@ -186,7 +186,7 @@ def inventory_units_for_item(line_item, variant = nil) | |||
end | |||
|
|||
def item_cost | |||
line_items.map(&:total).sum | |||
manifest.map { |m| (m.line_item.price + (m.line_item.adjustment_total / m.line_item.quantity)) * m.quantity }.sum |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I confess it was hard for me to understand this line. I think that expanding the block to multiple lines and adding a temporary variable may improve understandability also for other people that don't have much confidence with this part of Solidus, something like this:
manifest.map do |m|
adjusted_cost = m.line_item.price + m.line_item.adjustment_total / m.line_item.quantity
adjusted_cost * m.quantity
end.sum
`manifest` method returns Spree::ShippingManifest#items, this commit is going to rename it to `shipping_manifest_items`. I also refactored it to use the memoize shipping_manifest method.
`manifest` method returns Spree::ShippingManifest#items, this commit is going to rename it to `shipping_manifest_items`. I also refactored it to use the memoize shipping_manifest method.
This commit is going to rename the method `manifest_for_order` to `shipping_manifest_for_order` I also refactored it to use the memoized `shipping_manifest` method.
c416047
to
8f7e971
Compare
This commit is going to add `item_cost` calculation, all these item costs will be summed.
8f7e971
to
1d321f2
Compare
@DanielePalombo what about submitting this PR on Solidus main repo? |
I would like to submit it, But there are some failing tests. I'll work on it next Friday! |
This PR is going to fix the bug reported here solidusio#2919.
Now when shipment is split, it creates two shipment but associated
line_item has quantity 2 which is resulting in incorrect item_cost
because it is taken from line_item not from shipment.
Shipment manifest know the right quantity for every shipment, use it to
calculate the item_cost as sum of
(single_line item + weighted adjustment per line item) * quantity