Covers all questions related to inventory management, order fulfillment, and shipping.
I am attempting to test the new Fulfillment Order flow with my test store. The issue I am seeing is that the test orders always assign to the default location.
I have created a test product with SKU "ORANGES" and selected the App Location as the only location which can fulfill orders for that SKU. ORANGES has an On Hand quantity of 100,000.
The custom app has the following API access scopes.
write_orders, read_orders, read_third_party_fulfillment_orders, write_third_party_fulfillment_orders, write_assigned_fulfillment_orders, read_assigned_fulfillment_orders, write_fulfillments, read_fulfillments, write_merchant_managed_fulfillment_orders, read_merchant_managed_fulfillment_orders
There are three test locations. I have set the location priority so that the App Location is first, then the other two locations are secondary. Of the three test locations, only the App Location has rates under Shipping and Delivery.
I have configured the Bogus Gateway for payments. Other payment methods have been deactivated.
To be able to create an end-to-end test of Shopify with my internal systems, I am creating test orders through the API with a financial status of paid.
Orders created through API are treated differently than orders created by checkout. Are test orders created manually via checkout behaving the same way?
If you can send me your shop URL via private message, I can take a closer look in order to explain what you are seeing.
To learn more visit the Shopify Help Center or the Community Blog.
@RobZoneI can confirm the behavior @jonathanmterry is describing. It's in production and I would consider it a critical bug.
I will walk through some screenshots. I've redacted some information for the client's privacy.
Consider an order with two items.
The first item is stocked at a regular Shopify location:
The second item is stocked at our app location, which participates in fulfillment orders:
In Settings > Locations > View fulfillment priority, the app location is listed first:
Now, I've placed an order through the regular checkout containing the two items.
The expected result is that the order is placed, with one fulfillment order set to the app location, and with one fulfillment order to the Shopify location. In other words, the order should be split into two fulfillments.
Instead, the entire order is placed for the app location, even though we know it didn't have stock for one of the items:
It gets even better! Not only is the app location's inventory completely hosed:
But because we participate in fetch_stock.json and send a zero on the next hourly sync (because we have zero), Shopify magically moves the -1 Available to 1 On Hand, because I guess you don't want On Hand to go negative:
Thereby causing the client to blame us for sending a "1" even though we did no such thing.
It's all shockingly incorrect behavior from Shopify.
Won't you fix the issue?
After further research, the "Regular Shopify Location" did not have shipping rates turned on. This caused Shopify to allow the order during checkout, but then completely hose the inventory when the order was placed by assigning it to an incorrect location. Which is still a Shopify bug, but I doubt one that will ever be fixed. The workaround is to make sure all of the locations enabled for a product have shipping rates enabled.