-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Keep backorders when splitting part of variant to new shipment with same SL #5670
base: main
Are you sure you want to change the base?
Keep backorders when splitting part of variant to new shipment with same SL #5670
Conversation
8781d81
to
356feb9
Compare
Hey @spaghetticode, is this still a draft intentionally or can we start reviewing? |
@kennyadsl it should be good for review, I'm sorry for the confusion. |
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.
Left a couple of questions, thanks Andrea!
These are already overridden in all other first-level context blocks so it makes sense to move them in the single block that relies on these values.
Also, a couple of useless `let!` are removed (these records already exist).
The removed spec can be replaced by the shared example, which includes one further test so it slightly improves coverage.
This helps keeping things in sync just in the case that numbers change.
These specs don't really require a specific first level scenario, so we're first extracting them to a shared example, and with the following commit we're going to use it in other existing scenarios.
The existing scenario is reworked in order to expose an issue when moving a few items of a variant (not all of them) to a shipment with same stock location as the original one.
356feb9
to
2a82493
Compare
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.
Left a comment on the method name but it's not blocking, 👍
This is propedeutic for the following commit.
64f159c
to
9539dd4
Compare
When the quantifier is initialized with a stock location or its ID, the new method returns the positive amount of stock on hand or zero, if the stock for the variant is negative. Otherwise, it returns nil.
The backordered quantity count should differ depending on whether moving to the same or a different stock location. For this reason, the way we calculate `available_quantity` changes as follows: * when the stock location differs: the stock on hand at the new shipment stock location; * when the stock location is the same: the sum of the stock on hand at the shipment stock location plus the number of on_hand inventory items from the shipment The explicit `backordered_quantity` variable is introduced to track the number of backordered items for the target shipment. The value is calculated as follows: * when the stock location differs: the quantity to be moved minus the positive available quantity at the stock location; * when the stock location is the same: the shipment total quantity for the variant minus the positive available quantity at the stock location. Also, we start the process by moving backordered items first to to make sure no pending backordered item remains. If the backordered count decreased, we're going to leave a few to be later moved and transformed to on hand, while if the backordered count increased, we are going to move also some previously on hand items.
9539dd4
to
a1bb98e
Compare
@spaghetticode any chance to rebase this with latest main? |
Summary
Fixes #5669
When splitting a shipment to the same stock location, when not the whole quantity for the variant is moved it may happen, if there are backordered items, that these disappear (they become on hand).
This PR first reworks and adds further coverage to specs for the
Spree::FulfilmentChanger
service to expose the issue, then addresses it in the last commit.fix.mov
Checklist
Check out our PR guidelines for more details.
The following are mandatory for all PRs: