Skip to content

Support of Store Pickup for Multi Source Inventory

Maksym Novik edited this page Apr 4, 2020 · 25 revisions

Table of Contents

How does Store Pickup work from a Customer point of view

Customer places an order and waits to receive a "Ready for pickup" e-mail. (This is a separate e-mail from the order confirmation.) Bring his ID, credit card, and order number to the store and pick up the ordered items.

At the time when the order is being placed on the "Shipping" step, we introduce an ability to choose "Store Pickup" out of allowed shipping methods.

We apply an assumption that each order should be fulfilled just from the only pickup location (which is considered as shipping address).

**Note: if some need to specify different pickup locations per cart item(-s), internally that could lead to functionality similar to Multi-Shipping (or integration with Multi-Shipping) when several orders created, for each corresponding pickup location.

In MVP functionality it's proposed to avoid integration with Multi-Shipping and provide an ability to choose a single Store Pickup location from Drop-Down box:

When Customer chooses pickup location Magento as before creates reservations for global stock (not to specific Source).

**Note: Maybe makes sense to add extension attribute to Order object and specify Source which should be used to fulfill the order OR we can detect the Source checking whether Shipping address matches the addresses of our Sources.

**Note: If there are not enough Qty on specified Source to fulfill the Order, an internal transportation from other sources should be made to the selected one. Say, our "Salable Quantity" on "Custom Stock" is 10 for SKU-1. "Custom Stock" consists of three sources:

  • Source A, which contains 5 items of SKU-1
  • Source B, which contains 4 items of SKU-1
  • Source C, which contains 1 item of SKU-1

Altogether it gives us 5 + 4 + 1 = 10 If Customer has ordered 8 items of SKU-1 and chosen "Source A" for Store Pickup:

  • the system will create Reservation for -8 for SKU-1 on "Custom Stock" (not Source A)
  • merchant has to move 3 items of SKU-1 from Source B -> Source A to fulfill the order
  • when required 3 items are moved to Source A (so, the order is fulfillable) merchant initiate delivery of "Ready for pickup" e-mail, which notifies Customer that he can come to the store to grab all ordered items.

How does Store Pickup work from a Merchant point of view

A merchant should have the ability to specify which Sources support Store Pickup. To do so we have to introduce corresponding Extension Attribute for Source entity and provide an ability to specify one via both Admin UI on the Source editing page and Web APIs. Based on the attribute value (whether it set) we will add the corresponding Source to the Store Pickup Drop-Down list.

For orders placed with Store Pickup shipping method, we have to skip the Source Selection Algorithm step, as this information known in advance. But merchant has to be informed that there is not enough Qty to fulfill the order and internal shipping should be done to fulfill one, in the case when the selected source does not allocate all requested product Qty.

Grooming meeting notes

  • It was decided that the described mechanism is good enough for Store Pickup MVP implementation
  • Also we will add "Ready for Pickup" button to Order Admin page for orders created with Store Pickup method, click on this button will initiate email notification to customer if there are enough Qty on selected source to fulfill the order, if not merchant would be provided to use Source Selection algorithm to make Internal Transition (from Source B -> Source A in example above). Shipping address in this case is Selected Source (Source A).
  • This internal shipment should NOT lead to compensational reservations to be created.
  • Thinking in UX, it would be nice to customer choose if he will pickup product before fill the shipping address otherwise the customer will fill all shipping information that will be hide and replaced by store address.
  • If the customer chooses store pickup, the billing address should be always different from the shipping address.
  • It would be more accurate with Store Pickup support to call the step "Delivery Method" instead of "Shipping". Also would be a more applicable name for digital assets as well.
  • About the dropdown to choose the store, the suggestion is to be like: search field and each option should display the store address with pickup time window so the customer can search by store address or name for example

Race condition between orders

To prevent a race condition between orders. Which could happen in a next case:

The "Salable Quantity" on "Custom Stock" is 10 for SKU-1. "Custom Stock" consists of three sources:

  • Source A, which contains 5 items of SKU-1
  • Source B, which contains 4 items of SKU-1
  • Source C, which contains 1 item of SKU-1

Altogether it gives us 5 + 4 + 1 = 10 Now there are 2 Customers coming to the site to place orders:

  • Customer 1 orders 2 items of SKU-1 and choose a general delivery method (NOT Store Pickup)
  • Customer 2 orders 4 items of SKU-1 and choose as a delivery method Store Pickup

With current behaviour of Source Selection Algorithm it could happen that if Customer's 1 order would be processed first, the SSA may suggest to make Source deduction from "Source A" which will lead to insufficient Quantity of SKU-1 (5 - 2 < 4) to fulfill the order placed by Customer 2.

To prevent this situation it's proposed to apply a rule that Store Pickup orders have higher priority than others, and SSA should work not with Source Availability Quantity, but with Source Availability Quantity minus all store pickup ordered quantities. In the case above it means that SSA for Customer 1 order should take Order placed by Customer 2 into account even so Order 2 was placed later, and the inbound data for SSA would be:

  • Source A: 5 - 4 = 1 (subtract all store pickup items for this Source)
  • Source B: 4
  • Source C: 1

Video resources

Reading resources

UI Mockups

Mockups - https://magento.invisionapp.com/share/MGPPI7MRJYN#/screens/337877902

Shipping page:

GitHub Tickets

Label to find all In-Store Pickup related tickets - Store Pickup

MSI Documentation:

  1. Technical Vision. Catalog Inventory
  2. Installation Guide
  3. List of Inventory APIs and their legacy analogs
  4. MSI Roadmap
  5. Known Issues in Order Lifecycle
  6. MSI User Guide
  7. DevDocs Documentation
  8. User Stories
  9. User Scenarios:
  10. Technical Designs:
  11. Admin UI
  12. MFTF Extension Tests
  13. Weekly MSI Demos
  14. Tutorials
Clone this wiki locally