Custom Pricing works in two different ways depending on which method is used. When using the Variant method, Custom Pricing works by creating an app variant for the selected product to represent the discounted price. If the customer is eligible, this variant is added to the cart instead of the products regular-priced variant. When using the Draft Order method, inventory works consistently with Shopify. This article is only relevant to the Variant method.
By default, the Draft Orders method is supplied on new installs of Custom Pricing, for detailed information on the different methods, visit Discount Methods in Custom Pricing. To switch, visit Switch Discount Methods in Custom Pricing.
With the Variant method, the customer pricing variants don't have their own inventory, they share the inventory of the regular variant that it's created from. As long as the regular variant is in stock, the customer pricing variant will be listed as "n/a", which is technically in stock at an unlimited amount.
If the product has inventory tracking enabled, when a customer pricing variant is purchased, the app will reduce the inventory of the regular variant. When the regular variant is out of stock, the inventory of the customer pricing variant will be changed to 0.
If you add inventory to the regular variant and you want the customer pricing variant to be listed as "in stock", you would Manually Sync Inventory. This will cause the app to go through the customer pricing variants and list them as back in stock if the regular variant has inventory.
Shopify doesn't allow variants created from an app to be created at a specific stock quantity, so when the app variants are created they always have a value as "n/a", regardless if the variant that they're created from is out of stock. To have those variants listed as out of stock if the regular variant is out of stock, you'd need to Manually Sync Inventory. It's a good idea to do this whenever a customer pricing group is updated or you create a new group.
Custom Pricing handles inventory within the limitations of the Shopify Framework. Because of this, there is the potential for an item to be oversold, but it will only happen once.
If only the base item is being purchased, inventory is being counted toward that variant inventory. Generally, if they are trying to buy more than what is available, the checkout page would state that there isn't enough inventory and will reduce the quantity of the product.
When eligible for special pricing, the customer is purchasing the customer pricing variant, the one where the inventory is N/A. Within Shopify, N/A means that the inventory is unlimited and not being tracked. Because that variant is technically in stock, Shopify's inventory validation doesn't kick in.
After the sale, the app does a little bit of magic, reducing the base variant inventory by the quantity purchased. Once the base variant has been reduced to zero, the customer pricing variant will switch from N/A to zero, making the product unavailable for purchase. So until this occurs the customer pricing variant is able to be purchased.
To better illustrate this, suppose a t-shirt has 3 in stock. When looking at the product within Shopify, it would look like this:
- shirt - 3 in stock
- shirt (wholesale) - N/A
If the first customer buys the shirt and nothing else, inventory is reduced as normal. The 3 now becomes 2.
The next customer logs into their wholesale tagged customer account and buys 2 of the shirt. What they are actually purchasing is 2 of the customer pricing variant (the N/A variant one). After the sale, the base variant is reduced by 2, down to zero. As the base variant is now zero, the customer pricing variant is automatically switched from N/A to zero until stock is re-added.
If instead of 2, the second customer purchases 3 shirts, the same process happens. Order proceeds through as they are purchasing the N/A variant that does not track inventory. After the sale, the base variant is reduced from 2 down to -1. The customer pricing variant is also switched from N/A to zero, preventing any further items from being purchased.
There are a couple workarounds. Something simple is showing the base inventory quantity on the product page, informing the customer how much is on hand. This doesn't prevent overselling, but the customer would know up-front what is available. Preventing overselling, even on customer pricing variants, could be done with some custom, theme-specific enhancements.