How to Create a Wholesale Invoice with Multiple Colours and Sizes
A step-by-step guide to billing several colour-size SKUs together, entering a different quantity and price for each type, and saving the invoice with current-stock protection.
A clothing or footwear wholesaler rarely sells only one size of one colour. A retailer may take Red / M, Red / L, Blue / M and Blue / L from the same design, with a different quantity or negotiated price for every type.
My Local Shops handles this as one quick product-selection workflow but several exact invoice lines. The billing user finds the common product once, opens its list of SKUs, enters quantity and price beside every required colour-size type, and adds them together.
This guide explains that complete workflow in Order Manager and Staff Bill, including GST details, out-of-stock types, scanning, custom items and the final stock check.
What the grouped wholesale picker solves
Consider a Mickey Mouse printed T-shirt with:
- three colours: red, green and blue;
- three sizes: small, medium and large; and
- three pieces sold from every combination.
The buyer receives 27 pieces across nine exact types. The bill still needs nine SKU lines because Red / S stock is different from Blue / L stock. However, the billing person should not have to search for the same T-shirt nine times.
The grouped product picker gives both benefits:
| Billing experience | Saved business record |
|---|---|
| Search the common design once | Keep a separate line for every selected SKU |
| See all colours and sizes together | Reduce stock from each exact type |
| Enter several quantities on one screen | Preserve the quantity sold per colour and size |
| Prefill each SKU's saved selling price | Save the final negotiated price on each line |
| Add all selected types together | Produce one invoice with the correct total pieces |
The workflow is designed for real wholesale entry, while the saved data stays exact enough for inventory, profit and later returns.
Before adding products
Start a new invoice in Order Manager or Staff Bill and confirm the business information at the top of the form.
1. Confirm the billing location
The selected shop or godown determines which stock is available for the invoice. A Blue / M SKU may have 100 pieces at one shop and none at another, so availability is always checked for the invoice's location.
In Order Manager, the owner works under their own seller account and can use the permitted business locations. In Staff Bill, the staff member bills on behalf of the linked owner and assigned shop context. Staff do not receive access to the owner's private cost, profit or report information merely because they can create a bill.
2. Select the Bill To party
Choose the customer responsible for the invoice. Party search and selection remain inside the current seller's business data; users cannot search or select another subscriber's parties.
If the goods must be delivered to a different address, complete the available Ship To flow before saving. Order Manager and Staff Bill have role-appropriate party and address screens, so the surrounding form is not assumed to be identical even though the grouped product-entry workflow is shared.
3. Choose GST or non-GST billing
Use Generate GST bill when the invoice should carry GST and the selected seller location is eligible. A GST bill needs valid item tax details. A non-GST bill does not show or calculate GST-only fields.
The seller remains responsible for choosing the appropriate bill type and tax classification.
Open the Add products sheet
Tap Add in the Items section. The product sheet provides three practical routes:
- search or browse an inventory product;
- scan an exact SKU barcode; or
- use Item not in inventory for a genuine custom line.
The normal product list does not show every SKU as a separate search result. It shows one grouped result from product_listings for the common product. A result may display:
- product name;
- item code when available;
- number of types;
- selling-price range; and
- common thumbnail.
For example, Argentina Football Jersey 2026 · Item code 6109-AR · 3 types appears once instead of occupying three rows for S, M and L.
Browse and search are server-side and location-aware
The initial list loads a page of up to 20 grouped products that are active and currently marked in stock at the selected invoice location. Scrolling near the end loads the next page instead of downloading the seller's complete catalogue.
Search is submitted deliberately rather than querying Firestore on every keystroke. It can match the beginning of the product name, item code or base SKU. Results still remain restricted to:
- the current owner;
- active grouped products; and
- products available at the selected billing location.
This matters when a business accumulates hundreds or thousands of products. A staff member can type the item code used in the shop instead of scrolling through the full history.
Open one product to see every exact SKU
Tap the grouped product. The variant sheet opens with:
- the common product photo;
- product name;
- item code when present;
- common GST information for the group when GST billing is active; and
- one list card for every active colour-size SKU.
Each SKU card can show its own:
- image;
- colour and size label;
- full SKU;
- available quantity at this shop;
- quantity field; and
- selling-price field.
The list format avoids a dense spreadsheet-style grid. A new staff member can treat each card as one physical type: check the photo and colour-size, then enter how many pieces and at what price.
HSN and GST apply to all selected types
For a GST invoice, HSN and GST appear once above the SKU list because variants of one product normally share the same tax classification.
The two values have independent lock states:
- if a saved HSN exists, it is displayed in a locked state until Edit is intentionally tapped;
- if a saved GST rate exists, it is independently locked until Edit is tapped;
- if HSN is missing, its field opens for entry;
- if GST is missing, the app may suggest a rate but keeps the rate editable; and
- locking or editing one value does not accidentally unlock the other.
A GST line requires a valid 4–8 digit HSN. The billing user should verify both HSN and GST rate instead of assuming that a suggestion is tax advice.
When the invoice is non-GST, this tax card is not shown. The billing screen stays focused on product, quantity and price without unnecessary GST language.
Enter quantity and price for each colour-size type
Only enter a quantity for the types being sold. A zero or blank quantity means that SKU will not be added.
Suppose the customer orders:
| Type | Available | Quantity | Price each |
|---|---|---|---|
| Red / S | 80 | 3 | ₹240 |
| Red / M | 65 | 3 | ₹245 |
| Red / L | 40 | 3 | ₹250 |
| Blue / S | 70 | 6 | ₹235 |
| Blue / M | 55 | 6 | ₹240 |
The selection represents five types and 21 pieces. The bottom action updates to:
Add 5 types · 21 pieces
Here, types means selected SKUs, not total pieces. This distinction is useful in wholesale clothing and footwear because one design can contain many sellable types.
Price is prefilled, not silently forced
Every SKU can have its own saved selling price. The app prefills that price to save time, but the billing person can enter the price agreed with the customer before adding the line.
This is important in a negotiated wholesale sale. If a staff member convinces a buyer to pay more, the system should not silently force an older price. Likewise, a deliberate discount can be entered on the relevant type without changing unrelated variants.
The final price entered on the invoice line is preserved with that invoice. A later inventory price change should not rewrite the historical bill.
What happens when a type is out of stock
An out-of-stock SKU remains visible so the billing user understands that the colour-size exists. It shows a clear Out of stock status, while quantity and price entry for that row are disabled.
This is more informative than hiding the type. The staff member can tell the customer that Blue / XL exists in the catalogue but cannot be billed from the selected shop at that moment.
The message is deliberately compact. It does not cover the card with a heavy overlay or hide the photo and SKU details.
What happens if quantity exceeds availability
Assume four SKUs each receive quantity 100, but one of them has only 98 available. Tapping the add button does not add the valid three and silently ignore the invalid one.
Instead, the sheet:
- keeps the selection open;
- places
Only 98 available. Reduce the quantity.below the affected SKU fields; - nudges that card visually;
- gives haptic feedback; and
- scrolls the invalid row into view when necessary.
The user corrects that one quantity and submits again. This keeps the error next to the field that caused it, which is easier for a billing-counter worker than a general error at the top of a long list.
Accidental swipe-down dismissal is disabled
Entering quantities and negotiated prices for several SKUs takes effort. The variant sheet therefore cannot be dismissed by a swipe-down gesture or the Android back action while it is active.
It closes through an intentional action:
- tap Add selected types after completing valid lines; or
- tap the close icon at the top to leave without adding them.
This prevents a forceful upward scroll from being mistaken for sheet dismissal and losing the user's entries.
Add more products without reopening the catalogue
After valid types are added, the app returns to the existing Add products sheet instead of dismissing the complete picker.
The user can immediately:
- open another result;
- continue using the current search result;
- clear the search and browse;
- add a custom item; or
- tap Done after all products are selected.
If the retailer is buying five related products returned by item-code search, the billing person does not need to reopen Add, download the first page and type the same query after every product. This saves both staff time and repeated catalogue reads.
Can the same SKU be added twice?
Once an inventory SKU is already in the draft, its row is marked Already added when that grouped product is reopened. The row is disabled instead of creating a duplicate line accidentally.
To change an existing line, return to the invoice item list and edit that line. The editor uses the remaining stock cap appropriately so the existing reserved draft quantity is not incorrectly counted twice.
Scan when the exact SKU is already in hand
Grouped selection is best when a customer takes several colours and sizes from one design. Barcode scanning is faster when the physical piece or packet is already at the counter and only one exact SKU must be identified.
The scanner reads the SKU encoded in the Code 128 label, verifies that the product belongs to the current seller, is active and has stock at the invoice location, then opens quantity and price confirmation for that exact type.
Both routes create the same kind of inventory-linked invoice line. Read the complete barcode, label printing and SKU scanning guide for scanner behaviour and label setup.
Use a custom line only for an item outside inventory
Item not in inventory allows a legitimate one-off product or service to be added without pretending it is an existing SKU.
A custom line can carry its own name, item code, quantity, price and applicable tax information. It does not reduce an inventory product because it has no linked product document.
For normal stocked goods, always use the grouped picker or scanner. That connection is what allows the invoice save to update the correct stock and preserve SKU history.
Review the invoice before payment
After products are selected, the main invoice form shows each SKU as a separate line. Review:
- product and exact SKU identity;
- item code where available;
- quantity and unit price;
- HSN and GST rate on a GST invoice;
- taxable value and tax components;
- subtotal and grand total; and
- Bill To, Ship To and billing location information.
For a non-GST bill, GST-specific words and fields are omitted rather than displaying zero-value tax noise.
Tap Review & save only after the bill matches the physical order. The next step records whether the sale is paid in full, paid partially or placed on full credit. The payment and settlement workflow is covered separately because it affects outstanding and reports.
Final stock is checked again while saving
The available number shown in the picker is useful for entry, but it is not a permanent reservation. Another device may sell or adjust the same SKU before the first user saves.
Example:
- available Blue / M stock is 10;
- Owner A and Staff B both open invoice creation;
- Owner A selects 7 pieces;
- Staff B selects 6 pieces from the earlier visible quantity;
- Owner A saves first, leaving 3;
- Staff B then tries to save 6.
The invoice service reads the latest product documents inside a Firestore transaction. Staff B's save cannot reduce stock below zero using the stale screen value. Firestore retries when a document changed during the transaction, and the invoice is created only when every linked line still has sufficient stock.
This is why the system validates twice:
- the variant sheet gives an immediate, understandable correction during entry; and
- the final transaction protects data when multiple phones write at nearly the same time.
An invoice is not partially saved with only some inventory lines deducted. The stock changes, invoice record and related summary updates are handled as one protected operation.
Why the grouped workflow also reduces Firebase usage
The older style of treating every SKU as a catalogue row creates unnecessary reads and repeated work.
The current flow is more efficient:
- read one paginated
product_listingsdocument per common product shown; - open only the selected listing;
- read the exact member product documents for its variants;
- add several lines in one visit; and
- read those selected product documents again only when final transactional correctness requires it.
If one product has five SKUs, the list still needs one grouped listing row, not five search results. If the user selects all five, the app reads those five exact product records because their current location stock, image and individual price genuinely matter.
This is a useful cost boundary: avoid downloading the entire SKU catalogue, but do not remove reads required to bill and protect the exact selected stock.
Order Manager and Staff Bill: what is shared and what is different
Both apps use the same wholesale product-entry principles:
- paginated grouped product search;
- one list of colour-size SKU cards;
- individual quantity and price entry;
- common HSN and GST controls;
- out-of-stock and over-quantity feedback;
- barcode and custom-item routes; and
- concurrency-safe final stock updates.
Their authority is intentionally different.
| Order Manager | Staff Bill |
|---|---|
| Used by the owner | Used by an approved billing staff member |
| Works directly under the owner's account | Bills only for its linked owner and permitted location |
| Can access owner business views such as cost, profit and reports | Does not expose the owner's cost, profit or reports |
| Owner controls party, invoice and follow-up decisions | Staff focuses on creating operational bills and recording payment information |
The shared UI keeps staff training simple, while data access remains appropriate to each role.
Practical checklist before saving
- Confirm the correct shop or godown.
- Select the correct Bill To party.
- Add Ship To information when delivery differs.
- Choose GST or non-GST intentionally.
- Search the common product by name or item code.
- Verify the product header and common item code.
- Check each colour-size photo and SKU.
- Enter quantity only on sold types.
- Confirm the negotiated price for every selected SKU.
- Resolve any out-of-stock or over-quantity warning.
- Verify HSN and GST rate when creating a GST invoice.
- Review every line, total and payment choice before saving.
Frequently asked questions
Does one product with nine variants become one invoice line?
No. The selection experience is grouped, but every selected SKU becomes a separate invoice line. This preserves exact colour-size stock and price history.
Can different sizes have different prices?
Yes. Price is prefilled separately for each SKU and can be deliberately changed before adding it.
Can I add five variants together?
Yes. Enter quantity for all five rows and use the button showing the selected type and piece counts.
Why can I still see an out-of-stock size?
It tells the user that the type exists but is unavailable at the selected shop. Its entry fields remain disabled.
Does adding a variant reserve its stock?
It reserves the quantity only within the current draft so the same SKU is not added twice. It does not lock stock for other phones. Final Firestore transaction validation protects the actual save.
What if another person sells the stock first?
The latest stock is read again during invoice saving. The later invoice must be corrected if enough stock no longer remains.
Can staff see the owner's purchase cost or profit?
No. Staff Bill supports billing without exposing sensitive owner cost, profit and report data.
Should I use scan or Add products?
Use scan for one exact labelled SKU in hand. Use the grouped Add products flow when entering several colours or sizes from one design.
Can I create a non-GST invoice?
Yes. Select the non-GST bill behaviour before saving. GST-only fields and calculations are then omitted.
Where can I learn the full GST calculation?
Read how GST and non-GST wholesale invoices work with multiple variants for HSN, CGST/SGST, IGST and tax examples.
One search, several exact lines, protected stock
The My Local Shops wholesale invoice workflow is intentionally simple at the counter: find one design, enter the required colours and sizes, and add them together. Underneath that simple action, the system keeps each SKU, quantity, price, tax value and location stock distinct.
That combination gives a garment or footwear wholesaler fast entry without sacrificing the accuracy needed for inventory, invoices, outstanding, profit and reports.
