- One polo order, and where each step can live
- The same order as CMT and as full package
- Output of the merchandising workshop
- Five fit-gap rows, scored for the polo factory
- Bill of materials for one style: men's piqué polo, style P-2041
- Product category and unit setup for the polo
- Jeans: two size axes and the variant count
- Four rolls of the same "180 GSM" jersey
- Cutting 3,000 navy polos from three dye lots
- Why one average consumption fails
- The polo's operations, minutes and line capacity
- The polo order's approval calendar, worked back from ex-factory
- 2,000 printed T-shirts through two outside processors
- A quotation cost build for the polo (illustrative figures, USD per piece)
- Landed cost on the imported fabric
- The final inspection sample for 3,000 polos
- Packing 3,000 polos into cartons, one dye lot per carton
- Down payment, letter of credit and exchange difference
- A chargeback on an open-account shipment
- Migration template rows for the open polo order
- Test script: the polo order from sales order to cash
- Test script: shade split at cutting
- A training plan by role
- A cut-over plan, day by day
- One purchase request, from MerchandiserOS to Odoo and back
- The brand's view: landed cost of 3,000 polos into its warehouse
- The buying agent's view: commission on the polo order
- The polo order with operations on top
Part 1Before you start
1Who Odoo fits
Odoo is a practical choice for small and mid-size apparel businesses that want one system for sales, purchasing, stock, manufacturing and accounts, and that have a partner or in-house developer. It handles colour and size through product variants, has a working subcontracting flow, and lets you grow module by module.
It suits a factory that is ready to standardise its office processes and accept Odoo's way of doing sales orders, purchase orders, receipts and invoices. It suits a factory less well if the owner expects the ERP to replace the merchandisers' tracking sheets, the IE department's minute studies and the quality team's inspection reports in one move. Those are the parts of this guide where Odoo needs the most design work, custom code or a separate system.
Signs Odoo is a good choice
Odoo tends to work when the factory wants one ledger and has the people to maintain it.
- The business wants one ledger, one stock value and one set of purchase and sales documents, and today it has several.
- A partner with manufacturing experience is available, or the factory has at least one developer who can maintain custom modules through upgrades.
- Style counts per season are in the hundreds, and colour-size combinations can be controlled with the variant settings in section 11.
- Local e-invoicing is supported by an Odoo localisation for your country, or the partner has a plan for it (section 22).
Signs to slow down
Slow down when the expectations placed on Odoo belong to a planning, floor or development system.
- The factory expects Odoo to plan sewing lines hour by hour. Odoo's work orders are not a line-balancing tool (section 15).
- Buyers require EDI, compliance labels and portal uploads, and nobody has scoped them.
- Most of the order book is sampling and development. That work happens before any Odoo product exists.
- The go-live date falls inside peak season.
2Why no ERP fits apparel on its own
No general ERP fits apparel out of the box, because an ERP is built around a known item with one bill of materials, while a garment order starts as a style that is quoted, sampled and approved before any item exists. This is not an Odoo weakness. SAP, NetSuite, Dynamics 365 and every general ERP meet the same wall, which is why fashion add-ons and fashion-specific systems exist, and why even they leave much of the work outside. The same wall stands in front of brands and buying agents, whose styles, samples and approvals also come long before any purchase order (section 35).
An ERP is built around the transaction: a known item, a fixed bill of materials, a price, a receipt, an invoice. It is right to be strict about that, because strictness keeps the books correct. A garment order does not start there.
Forcing an ERP to do all of this means heavy customisation in the one system that most needs to stay standard. Every upgrade gets harder, the ledger fills with data finance never reads, and the merchandisers keep their spreadsheets anyway. The durable answer is to give the ERP the books and give the operations to a system built for them. Section 3 summarises that model and section 39 shows it in full.
One polo order, and where each step can live
A buyer sends a tech pack for 3,000 men's piqué polos in navy, five sizes, ex-factory 15 December. Follow the order and ask, at each step, whether a general ERP has a natural home for it.
| Step | What happens | Natural home in a general ERP? |
|---|---|---|
| Tech pack arrives | Measurements by size, construction, artwork, trims list | No. There is no item yet |
| Costing and quote | Fabric use from a marker, CM from operation minutes, quote at USD 4.26 FOB | No. The quote comes before the item |
| Lab dips, strike-off, fit sample | Three lab dip rounds before navy is approved | No. These are approvals of the product |
| Order confirmed | Size breakdown 300 / 750 / 900 / 750 / 300 | Yes: the sales order |
| Fabric and trims bought | 925 kg of jersey, rib, buttons, labels, polybags | Yes: purchase orders |
| Fabric received | Three dye lots, rolls of different width and weight | Partly. Lots yes, shade and roll width no |
| PP sample, cutting, sewing | Cut by dye lot, 18 minutes per polo, output by line by hour | Partly. The work order yes, the floor no |
| Embroidery at a subcontractor | Panels out, 1% loss, panels back | Partly. One step works, a chain is hard |
| Final AQL inspection | General level II, AQL 2.5, sample of 125 pieces | No native sampling tables |
| Shipping and invoice | Cartons, packing list, commercial invoice | Yes: delivery and invoice |
Four of ten steps have a natural home. The other six are where the order is actually won or lost.
3The recommended architecture, in short
Before discovery starts, agree which system owns which part of the business. Our recommendation is a split along the line in Example 1: Odoo keeps the books, and an operations system built for apparel runs everything from the style to the shipment.
| Area | Owned by | Why there |
|---|---|---|
| Style, tech pack, samples and approvals, quotation costing | Operations layer | This work happens before an Odoo product exists, and it changes daily |
| Buyer orders, procurement planning, production planning, shop floor, quality, logistics | Operations layer | It needs sizes, dye lots, minutes, inspections and dates in one place |
| Shop-floor capture | The operations layer's floor screens, or a floor system such as Garment.io connected to it | Operators need a simple screen, not an office form |
| Accounts, payables and receivables, invoicing, payments, stock value, tax and e-invoicing | Odoo | This is the legal and financial record, and Odoo does it well as standard |
With this split, the Odoo project stays close to standard: fewer custom modules, cleaner upgrades and a shorter project. The rest of this guide still explains how to bend Odoo toward garment production, because some factories choose to do that, and because a consultant needs to know what each choice costs. Where an area moves out of Odoo under the recommended model, the section ends with a short note. Section 39 describes the model in full, department by department.
4Business types, and what each needs from Odoo
"Apparel manufacturer" covers very different businesses. The business type decides who owns the material, what is invoiced, and which parts of Odoo carry weight. Settle it in the first discovery meeting, because a factory often runs two types at once, for example full package for one buyer and CMT for another.
| Type | What it does | What it needs from Odoo | Where it struggles |
|---|---|---|---|
| CMT (cut, make, trim) | Sews buyer-supplied fabric and often trims; sells labour | Buyer-owned stock held apart at no value, material reconciliation per order, service invoicing, labour costing from minutes | Disputes over fabric loss; Odoo stock value must not include the buyer's fabric |
| Full-package (FOB) factory | Buys all materials, makes, ships; sells the garment | Everything: variants, size-dependent BoMs, purchasing, lots, landed cost, subcontracting, down payments and LC-backed sales, multi-currency | The largest scope and the most custom work; the riskiest type to implement |
| Textile mill (knitting, weaving, dyeing) | Turns yarn into fabric | Process manufacturing: yarn count and blend, dye recipes, batch genealogy, weight units, lab dips, GSM and width per batch, by-products | Batch and recipe logic goes beyond a garment BoM; weight-based units throughout |
| Hosiery and knit-to-shape | Knits socks, tights or sweaters directly from yarn | Yarn BoM by weight, singles to pairs to packs, pairing, toe closing and boarding as stages, few broad sizes | The unit design (singles, pairs, packs) is the main trap |
| Brand or wholesaler | Designs and sells; factories make for it on FOB or CMT terms | Purchase orders to factories with variants, landed cost into its warehouse, vendor bills and payments, wholesale sales with grid entry, credit notes for chargebacks; EDI with retailers through a connector | Sampling, T&A and inspections happen at many factories, outside Odoo's reach |
| Buying agent or buying house | Places and follows orders across factories for buyers; earns commission | Commission invoiced to the buyer as a service line, payments, multi-currency; no stock and no payable for the goods | The real work (T&A, samples, inspections, documents) is not transactional |
| Own-label retailer | Develops garments under its own label and buys them from factories for its stores | The brand's buying side: purchase orders, landed cost into the distribution centre, vendor bills | Development and factory follow-up; store operations sit in retail systems |
The list above is general implementation practice. Treat it as a starting point for the discovery questions in section 6, not as a scope. Brands, buying agents and own-label retailers have their own part of this guide, starting at section 35.
The same order as CMT and as full package
Suppose the buyer offers the polo order two ways. As full package, the factory buys everything and sells at USD 4.26 FOB. As CMT, the buyer ships the fabric (the same three dye lots, 2,880 m in total) and the factory charges for making only, at an illustrative USD 1.60 a piece.
| Question | Full package | CMT |
|---|---|---|
| Who buys the fabric | The factory, on an Odoo purchase order | The buyer; no purchase order in Odoo |
| How the fabric enters Odoo | A receipt that raises stock value and a payable | A receipt into a location kept out of the factory's stock value, or tracked outside Odoo's valuation; design this explicitly |
| Invoice to the buyer | 3,000 × 4.26 = USD 12,780.00 | 3,000 × 1.60 = USD 4,800.00 |
| Material reconciliation | Internal: fabric used against the BoM | External: 2,880 m received, 2,856 m used, 24 m returned to the buyer or accounted for |
| Main risk | Under-buying fabric (Example 10) | Being charged for fabric the factory cannot account for |
The 2,856 m used and the 24 m left come from the cut plan in Example 9. In CMT, that plan is the evidence the factory shows the buyer, so it must be recorded per dye lot, not as one total.
Part 2Discovery
5Who should be on an Odoo apparel project team?
An apparel Odoo project needs one decision owner for every design question, and most of those owners sit in the factory, not in IT. The partner configures and builds; the factory decides how styles, units, lots, costs and inspections work.
The table lists the roles we see on projects that go well. One person can hold several roles in a small factory. What matters is that every question in the fit-gap has a named person who can say yes.
| Role | Usually | Decides |
|---|---|---|
| Sponsor | Owner or managing director | Scope, budget, go-live window, what stays outside Odoo, disputes between departments |
| Factory project lead | A senior manager with time freed for the project | Day-to-day priorities, test sign-off, readiness for cut-over |
| Merchandising head | Head of merchandising | Style and variant model, size scales, season rules, order entry, T&A ownership |
| Development and sampling lead | Sampling room head or technical manager | Sample types, approval rounds, where tech packs and revisions live |
| Production manager | Factory or production manager | Manufacturing order level, routings, work centers, subcontract steps, floor capture |
| Industrial engineer | IE manager | Operation minutes (SMV), line capacity, efficiency assumptions |
| CAD and marker lead | CAD room head | Consumption per size, marker efficiency, cutting loss |
| Stores head | Fabric and trims store manager | Units of purchase and issue, lot and roll rules, locations, receiving checks |
| Quality manager | QA manager | Inspection types and points, sampling plans, who may override a failed inspection |
| Shipping and commercial lead | Shipping or commercial manager | Packing rules, carton labels, export documents, LC document requirements |
| Finance head | CFO or chief accountant | Chart of accounts, costing method, landed cost, currencies, down payments, chargebacks, tax |
| Key users | One or two per department | Test scripts, training of colleagues, first-line support after go-live |
| Partner functional consultant | Odoo partner | How a decision is configured in Odoo; flags what needs custom code |
| Partner developer | Odoo partner or in-house | Custom modules, integrations, migration scripts |
Rules that keep decisions moving
Most delays in apparel projects come from decisions nobody owns. Four rules prevent them.
- One owner per decision. "Merchandising and finance will agree" produces no decision. Write one name against each fit-gap line.
- Decide in writing. Keep a decision log with the date, the owner, the option chosen and the options rejected. Discovery findings, design choices and change requests all go in it.
- The sponsor settles scope, not configuration. The sponsor decides whether T&A lives in Odoo or elsewhere. The merchandising head decides how it works.
- Key users are released from part of their day. A key user who is also running peak-season orders will not test properly.
6What should discovery workshops for an apparel factory cover?
Discovery for an apparel factory is one workshop per department, each walking a real, recent order from start to finish and asking where the data comes from, who changes it and what goes wrong. Use the factory's own orders, not a demo database. The polo order in this guide is the kind of order to bring.
Each workshop produces three things: the current flow as it really runs (including the spreadsheets), a list of findings mapped to the fit-gap lines in section 7, and a list of decisions with an owner. The question lists below are a starting set; add the factory's own.
Merchandising
Merchandising questions establish how orders arrive, change and are tracked.
- How does an order arrive: buyer PO by email, portal, EDI? What fields does it carry, and how often is it amended after confirmation?
- How are sizes and colours broken down, and do buyers order in ratio packs?
- What quantity tolerance do buyers allow, and how is a short or over shipment agreed?
- Is one buyer order split into several deliveries, each with its own date and destination?
- Where is the T&A calendar kept, who updates it, and who looks at it each morning?
- Which season and style numbering does each buyer use, and does the factory keep its own?
Development and sampling
Development questions establish what happens before an order exists.
- Which sample types does each buyer require, and in what order?
- How are sample rounds recorded: sent date, courier, comments, verdict?
- Where do tech packs live, and how is a revision after PP approval handled?
- Who prepares the quotation cost, from what inputs, and how many versions does a quote go through?
Purchasing and stores
Stores questions establish units, lots and what is measured at receipt.
- In which unit is each material bought, stocked and issued? Which suppliers invoice in a different unit from the one they deliver in?
- What is checked at receipt: weight, width, GSM, shade, shrinkage, four-point inspection? Who records it and where?
- How are dye lots and rolls labelled, and can the store find every roll of one lot today?
- Which materials are nominated by the buyer or supplied by the buyer?
- What happens to leftover fabric and trims after an order ships?
Cutting, production and subcontracting
Production questions establish the level of control and how output is counted.
- At what level is production controlled: per order, per style-colour, per delivery, per cut?
- How is the cut plan made per dye lot, and who checks that lots are not mixed?
- How is output counted today: per line per hour, per operator, at end of line?
- Which processes go outside (print, embroidery, wash, CMT) and how are pieces counted out and back?
- How are rejects, repairs and second-quality pieces recorded?
Industrial engineering and planning
IE questions establish where minutes and capacity come from.
- Are operation minutes (SMV) studied per style, taken from a library, or estimated?
- How is line capacity planned across the season, including subcontractors?
- What efficiency figure is used for planning, and how is actual efficiency measured?
Quality
Quality questions establish inspections, buyer standards and who may release a failed lot.
- Which inspections run: incoming fabric, cutting, inline, end of line, pre-final, final, measurement?
- Which buyers set their own AQL levels, and where are their quality manuals kept?
- Who may release a lot that failed inspection, and is that decision logged?
- Which lab tests and certificates are required per order?
Shipping
Shipping questions establish packing rules and documents per buyer.
- How are cartons packed: solid size, assorted, ratio? What carton labels does each buyer require?
- Which export documents are prepared per shipment, and who checks them against the letter of credit?
- Does any buyer require an advance shipping notice?
Finance
Finance questions establish currencies, payment terms, import costing and tax.
- Which currencies are used for sales, purchases and wages? How are exchange differences booked today?
- How are buyers paid: letter of credit, down payment, open account? Which buyers deduct chargebacks?
- How is imported material costed: are freight, duty and clearing added to the material cost?
- Is the factory in a free zone or under a temporary-admission regime, and what reports does that require?
- Which e-invoicing and tax reporting rules apply?
Output of the merchandising workshop
The team walked the polo order from the buyer's PO to the booking of the shipment. The findings sheet looked like this.
| # | Finding | Fit-gap line | Decision needed | Owner |
|---|---|---|---|---|
| M1 | The buyer PO arrives as a PDF; sizes are keyed by hand into a spreadsheet, then again into the costing sheet | 41 | Where the order is entered once, and who enters it | Merchandising head |
| M2 | The buyer allows ±3% quantity; nobody records it, so shipping asks each time | 43 | Where the tolerance is held and who checks it before shipment | Merchandising head |
| M3 | Three lab dip rounds were tracked in one merchandiser's email | 10 | Where approval rounds are recorded | Development lead |
| M4 | The spec changed after the fit sample; production cut from the earlier sheet on a previous order | 8 | How the approved spec version is fixed for an order | Development lead |
| M5 | Fabric was ordered on the base-size consumption on a previous order and ran short | 12 | Where size-dependent consumption is calculated | CAD lead |
| M6 | The T&A lives in a shared spreadsheet with no dependencies | 36 | Where T&A lives; in Odoo, custom, or in an operations system | Sponsor |
Four of the six findings (M3, M4, M5, M6) sit on fit-gap lines where Odoo has no standard answer. That is the moment to decide the architecture question in section 3, before anyone designs a custom module.
7The apparel fit-gap checklist for Odoo: 52 lines
A fit-gap checklist lists every requirement an apparel business has and records, line by line, whether Odoo meets it as standard, meets it with configuration, needs custom code, or is better handled outside Odoo. The 52 lines below cover product, BoM and costing, materials, production, quality, sales and shipping, and finance.
The answers are our assessment of Odoo 17 to 19 for a typical full-package garment factory. Where a line depends on the Enterprise edition, it says so. Confirm each line against your version and your partner's modules before you sign a scope.
Key: Standard works as delivered · Configure settings, fields or light Studio work · Custom build a code module or third-party app · Operations layer better run in an apparel operations system and passed to Odoo
| # | Requirement | Odoo answer | Notes |
|---|---|---|---|
| Product | |||
| 1 | Style master with a colour-size variant matrix | Standard | Product template with attributes; variant creation mode per attribute (section 11) |
| 2 | Size scales per product category | Configure | One size attribute per scale (alpha, numeric, waist, inseam), assigned per template |
| 3 | Season or collection, and style reuse across seasons | Configure | A tag or custom field; rules for reusing a style number with a new cost need design |
| 4 | Carry-over styles with a new price or BoM | Configure | New BoM version; engineering change orders with BoM revisions need PLM (Enterprise) |
| 5 | Prepacks and ratio packs | Custom build | A kit BoM can sell a pack as one unit; assorted cartons and pack-level packing lists need custom work |
| 6 | Pairs and multi-packs (hosiery, gloves) | Configure | A pair unit and kits for multi-packs; knitting in singles and pairing as a stage need design |
| 7 | Buyer's own style and colour codes | Configure | Custom fields per product or per order line |
| 8 | Tech-pack revision linked to the order | Operations layer | PLM (Enterprise) revises BoMs, not tech packs |
| 9 | Points of measure with tolerance per size | Operations layer | No native measurement-spec object |
| 10 | Sample types and rounds with buyer approval | Operations layer | No native object; projects, helpdesk or custom (section 16) |
| BoM and costing | |||
| 11 | BoM lines that apply by colour or size | Standard | "Apply on Variants" on components and operations |
| 12 | Size-graded fabric consumption | Custom build | A line per size group, generated from a consumption table; or calculated outside |
| 13 | Wastage and shrinkage held separately | Custom build | A BoM line holds one quantity; separate factors need fields and logic |
| 14 | Trims that change by colourway | Standard | "Apply on Variants" |
| 15 | Pre-costing with many elements and currencies | Operations layer | Happens before the product exists |
| 16 | Standard against actual cost per order | Configure | Standard cost per category is standard; quote-against-actual by order needs reporting or an operations system |
| 17 | Labour cost from operation minutes | Configure | Operation duration × work-center cost per hour (section 15) |
| 18 | Landed cost on receipts | Standard | Split by quantity, weight, volume, equal or current cost; AVCO or FIFO categories only |
| 19 | Quote versions and approval | Operations layer | Odoo quotations price existing products; the cost build comes first |
| Materials | |||
| 20 | Purchase, stock and issue units with per-lot conversion | Custom build | kg to m crosses unit categories in 17 and 18; Odoo 19 reworked units (section 12) |
| 21 | GSM and width per lot or roll | Custom build | Custom lot fields; or recorded in an operations system at receipt |
| 22 | Roll tracking | Configure | Serial per roll, or a package per roll |
| 23 | Dye lot and shade | Configure | Lot as dye lot; shade group needs a custom field |
| 24 | Four-point fabric inspection | Custom build | A quality worksheet (Enterprise) can hold a form; defect points per roll need design |
| 25 | Quality hold and quarantine | Configure | Three-step receipts with a Quality Control location; control points (Enterprise) |
| 26 | Buyer-supplied (consigned) stock | Configure | Needs a deliberate design so it stays out of stock value; check the options in your version |
| 27 | Reserved against free stock | Standard | Reservation on transfers |
| 28 | Leftovers and stock-lot disposal | Configure | A leftover product category and a sales flow |
| Production | |||
| 29 | Work orders per style-colour or delivery | Configure | Manufacturing orders per variant; grouping by delivery is a design choice |
| 30 | Cut orders, lay plans, marker efficiency | Custom build | Usually a CAD system plus custom cut orders |
| 31 | Bundles and bundle tickets | Custom build | A shop-floor system or custom module |
| 32 | WIP by stage and line | Operations layer | Work-order status shows the step, not the line or the bundle |
| 33 | Graded output (first quality, seconds, rejects) | Operations layer | Produced is not the same as shippable |
| 34 | Subcontract out and back with loss | Standard | One step as standard; chained processors need intermediate products or custom work |
| 35 | Capacity by line from minutes | Operations layer | Work centers have working hours and efficiency; line loading across a season does not |
| 36 | T&A with a critical path | Operations layer | No native T&A object |
| Quality | |||
| 37 | Inline and end-of-line capture | Configure | Quality checks on work orders and Shop Floor (Enterprise); operator-level capture is limited |
| 38 | Final AQL to ISO 2859-1 at the buyer's level | Custom build | Control points sample by percentage or period, not by ISO tables (section 19) |
| 39 | Logged override of a failed inspection | Custom build | Design who may release and how it is recorded |
| 40 | Lab tests and certificates per order | Configure | Attachments on the order or a custom document type |
| Sales and shipping | |||
| 41 | Grid order entry by colour and size | Standard | On sales quotations and orders; purchase grids come from third-party apps |
| 42 | Several deliveries per order | Configure | Separate lines or orders per drop; decide before migration |
| 43 | Over and under-shipment tolerance | Custom build | A field and a check before delivery validation |
| 44 | Carton packing and labels (SSCC) | Configure | Packages are standard; buyer label formats and SSCC numbers are custom |
| 45 | EDI 850, 855, 856, 810 | Custom build | Connector or EDI provider |
| 46 | Buyer label and ASN rules | Custom build | Per buyer |
| Finance | |||
| 47 | Multi-currency and exchange differences | Standard | Period-end revaluation of open items: check your version and localisation |
| 48 | Letter of credit terms and document checking | Custom build | No native LC object |
| 49 | Advances and down payments | Standard | Percentage or fixed amount on sales orders |
| 50 | Reason-coded chargebacks | Configure | Write-off accounts or tags per reason; reason codes may need a custom field |
| 51 | Profitability per order | Configure | Analytic tagging per order is the common approach; design it with finance |
| 52 | E-invoicing per country | Standard | Where Odoo has a localisation (Egypt ETA is documented); check other countries (section 22) |
Counted from this table, 10 of the 52 lines are standard, 19 need configuration, 14 need custom code and 9 are better run outside Odoo. That count is our assessment for a typical full-package factory, not a survey. A CMT factory drops most of the costing and material lines; a mill adds process lines this list does not cover.
Five fit-gap rows, scored for the polo factory
A fit-gap row is only useful with evidence, a decision and an owner. These five rows come from the workshops in Example 3.
| # | Requirement | Evidence from the factory | Decision | Owner |
|---|---|---|---|---|
| 12 | Size-graded consumption | Fabric under-bought on the base size (Example 10) | Consumption per size calculated outside Odoo; purchase quantity passed in | CAD lead |
| 21 | GSM and width per roll | Four rolls of "180 GSM" held 1.9 m less than the fixed factor said (Example 8) | Measured at receipt per roll; Odoo holds the lot | Stores head |
| 23 | Dye lot and shade | Shade complaint on a previous order | Lot as dye lot in Odoo, mandatory on every receipt and issue | Stores head |
| 38 | Final AQL | Buyer manual requires general level II, AQL 2.5 major | Inspection run outside Odoo; pass or fail gates the delivery | QA manager |
| 49 | Down payments | Buyer pays 30% in advance on this programme | Standard Odoo down payment invoice | Finance head |
8Odoo Enterprise vs Community for manufacturing, and where to host it
Odoo Community includes the Manufacturing (MRP) app, but Shop Floor, Quality, PLM, Barcode and Studio are Enterprise-only on Odoo's editions page, so most garment factories that run production in Odoo need Enterprise. Choose the edition and the hosting after the fit-gap, not before it: several features a sewing floor depends on are in Enterprise, and most apparel projects need custom modules that Odoo Online cannot run. Odoo's own editions page is the reference; confirm each line there before you quote it to a client.
| What an apparel project needs | Where it sits |
|---|---|
| Product variants, BoMs, manufacturing orders, work centers, subcontracting, lots | Available in Community |
| Barcode scanning in the warehouse and on the floor | Enterprise (Barcode app) |
| Quality control points and checks | Enterprise (Quality) |
| Shop Floor tablet screen for work orders (with the Manufacturing control panel and scheduling) | Enterprise |
| Maintenance | Both editions |
| Engineering change orders on BoMs | Enterprise (PLM) |
| Studio for no-code fields and automations | Enterprise |
A factory that chooses Community to save licence cost usually rebuilds barcode, quality and shop-floor capture itself, or buys them from a third party. Put that cost in the comparison.
Which hosting option suits an apparel project?
Odoo.sh or on-premise suits most apparel projects, because they allow custom modules; Odoo Online suits a project that keeps Odoo close to standard.
| Hosting | What Odoo's documentation says | For apparel |
|---|---|---|
| Odoo Online | Not compatible with non-standard apps; custom modules cannot be installed | Rarely viable once the fit-gap shows custom modules. Studio changes remain possible on Enterprise |
| Odoo.sh | Supports custom code through Git-based deployment, with the chance to test before production | The usual choice for a partner-led project with custom modules |
| On-premise | Full customisation; the organisation manages its own infrastructure | Full control, and full responsibility for servers, backups and upgrades |
If you follow the recommended architecture, the Odoo side may stay standard enough for Odoo Online. That depends on what the integration needs: an API connection works from outside, while a file exchange run by a scheduled job inside Odoo is custom code. Check before choosing.
How much does Odoo cost for a garment factory?
The cost of Odoo for a garment factory depends on the edition, the plan, the number of users, the hosting and, above all, the partner work and custom modules the fit-gap calls for; licence fees are usually the smaller and more predictable part. Odoo publishes its current prices on its pricing page; we do not repeat them here because they change.
| Cost driver | What decides it |
|---|---|
| Edition | Community is open source and free to download; Enterprise is a licensed subscription (Odoo editions page) |
| Plan | Odoo's pricing page lists One App Free, Standard and Custom plans. At the time of checking, Studio, multi-company and external API access are listed under Custom, and Odoo.sh and on-premise hosting are available with Custom |
| Users | Priced per user per month, with cheaper light-user licences listed; count office users, not floor operators who never log in |
| Hosting | Odoo Online is included in Standard; Odoo.sh hosting is charged on top; on-premise means your own servers and staff |
| Partner implementation | Discovery, configuration, migration, testing, training and hypercare; scales with the number of custom-build lines in the fit-gap |
| Custom modules | Build once, then port at every Odoo upgrade; the recurring cost most budgets miss |
| Integrations | EDI, PLM, shop floor, banks, e-invoicing; each needs build and upkeep |
The fastest way to lower the total is to shrink the custom-build column. Every line moved to standard Odoo or to an operations system is a module nobody has to port.
Questions to settle with the partner
Settle these with the partner before signing, because each changes the cost and the upgrade path.
- Which Enterprise apps does the fit-gap actually need, and for how many users?
- Which custom modules are planned, who owns their code, and who ports them at each upgrade?
- Is there a staging copy for testing each release against real data?
- Which Odoo version will go live, and when will the next upgrade be due?
9Odoo vs ERPNext for garment manufacturing
Odoo and ERPNext both model a style as a template with colour and size variants and both support subcontracting; Odoo offers more manufacturing apps (Quality, PLM, Shop Floor) in its paid Enterprise edition, while ERPNext is fully open source but has needed a BOM per variant for subcontracting (a fix was merged in September 2026; check your release). Neither covers sampling, T&A, size-graded consumption or AQL for apparel out of the box. ERPNext is an open-source ERP built on the Frappe framework.
| Aspect | Odoo (17, 18, 19) | ERPNext |
|---|---|---|
| Licensing model | Community open source; Enterprise a licensed subscription | Open source under GPL-3.0 (GitHub repository) |
| Variants | Product template with attributes; Instantly, Dynamically or Never creation per attribute; variant grid on sales orders | Item templates with variants by attribute |
| Subcontracting | Basic, resupply and dropship workflows on a subcontracting BoM | Subcontracting orders; an open GitHub issue (#54715) reports the order does not fall back to the template BOM, so each variant needs its own BOM. Version 16 notes list subcontracting-inward improvements |
| Manufacturing depth | BoMs incl. multilevel, work centers, work orders, by-products; Quality, PLM with ECOs and Shop Floor in Enterprise | BOM, work order, job card; version 16 adds job-card production tracking; an open GitHub issue (#41950) discusses manufacturing with large variant counts |
| Lots | Lots and serials; operation types control lot creation and reuse | Batches and serials through the Serial and Batch Bundle |
| Landed cost | Landed costs on receipts, five split methods | Landed Cost Voucher |
| Apparel gaps | kg to metre across unit categories (17, 18), size consumption, dye lot attributes, AQL, sampling, T&A | BOM per variant, no documented roll or dye lot model (not verified), sampling, T&A, AQL |
| API | XML-RPC and JSON-RPC (deprecated in 19); JSON-2 API from 19; webhooks from automation rules since 17 | REST API generated per document type; token authentication with an API key and secret; webhooks per document type |
Which should a garment factory choose?
Choose on the fit-gap, the partner and local compliance, not on the product name. From practice, Odoo tends to suit a factory that wants Enterprise apps for quality and shop floor and a large partner network; ERPNext tends to suit a factory with in-house developers that values an open-source licence. In both, the parts of this guide marked custom build remain custom build, and in both, customisations must be carried through each upgrade.
ERPNext facts from its documentation and GitHub (see sources). Items marked "not verified" were not found in ERPNext's documentation; demo them.
Part 3Design, area by area
10How should product categories and materials be set up in Odoo for apparel?
Set up Odoo product categories by how each material is bought, stocked, costed and tracked: fabrics, yarns, trims, packaging, subcontract services and finished garments each get their own category, because the category carries the costing method and the stock accounts. Apparel is not one product type. The garment category decides the size system, the main material, the unit it is bought in and the processes it goes through. Set Odoo's product categories and attribute sets from this, not from the chart of accounts alone.
| Category | Main material | Size system | What changes the setup |
|---|---|---|---|
| Woven tops and bottoms | Woven fabric, m or yd | Alpha (S–XXL) or numeric | Fabric width drives the marker; collars and cuffs need interlining |
| Knit tops, polos, fleece | Knit fabric, bought in kg | Alpha | GSM and width per roll; rib and collar trims sized per garment size |
| Denim | Woven denim, weight in oz/yd² | Waist × inseam, two axes | Washing changes shade and size, so shrinkage and wash are part of the spec; washing is usually subcontracted |
| Knitwear and sweaters | Yarn, in kg | Alpha | No fabric stage; consumption is yarn weight per size and machine gauge |
| Hosiery and socks | Yarn, in kg | Few broad sizes, e.g. 39–42 | Knitted in singles, sold in pairs and multi-packs; pairing and boarding are stages of their own |
| Intimates | Knit and lace, many small components | Band × cup | Wires, hooks, elastics and moulded cups make long bills of materials |
| Outerwear | Woven shell, lining, padding by weight | Alpha | Many trims per garment; padding bought by weight |
| Home textiles | Woven or knit, by m | Flat dimensions in cm | No garment sizes; products sold as sets, such as a duvet cover with pillowcases |
Materials, and how each is bought and used
Each material has its own purchase unit, usage unit and receipt checks, and the Odoo setup must follow them.
| Material | Bought in | Used in | Track at receipt |
|---|---|---|---|
| Woven fabric | m or yd | m | Composition, width, weight, shade and dye lot, shrinkage |
| Knit fabric | kg | m | GSM, open or tubular width, composition, shade and dye lot, shrinkage |
| Yarn | kg, on cones | kg or g | Count and system (Ne, Nm, denier), ply, composition, shade |
| Sewing thread | Cones | Metres per garment | Ticket number, colour matched to each shade |
| Trims: zips, buttons, labels, hangtags | Pieces, dozens, gross (144) | Pieces | Size and colour per colourway; often from a supplier the buyer nominates |
| Packaging: polybags, tissue, cartons | Pieces | Pieces | Carton dimensions, buyer-specific printing |
| Buyer-supplied material (CMT) | Received, not bought | As above | Owned by the buyer: hold it apart at zero value and reconcile what was used |
In Odoo, give fabrics, yarns, trims, packaging, finished garments and subcontract services their own product categories, because the category carries the costing method and the stock accounts. Put lot tracking on fabric and yarn; most trims do not need it.
Bill of materials for one style: men's piqué polo, style P-2041
| Component | Material | Bought in | Per piece (size L) | Varies by |
|---|---|---|---|---|
| Body | Cotton piqué 180 GSM, 1.80 m open width | kg | 0.95 m | Size, colour |
| Collar and cuffs | Flat-knit rib collar and cuffs | pieces | 1 set | Size, colour |
| Buttons | 4-hole polyester, 15 mm | gross (144) | 3 pcs | Colour |
| Sewing thread | Polyester core-spun, tkt 120 | cones | 165 m | Colour |
| Main label | Woven, buyer-nominated supplier | pieces | 1 pc | None |
| Size and care label | Printed satin | pieces | 1 pc | Size |
| Embroidery | Chest logo, subcontracted | service | 1 pc | Colour |
| Polybag | Recycled LDPE, with warning print | pieces | 1 pc | None |
Eight lines, three units of purchase, and four lines that change with size or colour. In Odoo, the body fabric lives in a Fabric category with lot tracking and AVCO; buttons and labels in Trims without lots; embroidery in Subcontract services; the polo in Finished garments at standard cost.
What each category carries in Odoo
In Odoo, the costing method (Standard, AVCO or FIFO) and the inventory valuation (Automated or Manual) are set on the product category, under Inventory ‣ Configuration ‣ Product Categories in the Odoo 18 documentation. Lot tracking is set per product, and units per product. Two documented rules shape the category design for apparel:
- Landed costs apply only to AVCO or FIFO categories. Odoo's landed-cost documentation states that products receiving landed costs must belong to a category with a costing method of AVCO or FIFO. Keep imported fabric and trims out of Standard categories if you want freight and clearing added to their cost.
- Units convert only inside a unit category in Odoo 17 and 18. Buying buttons by the gross and issuing them by the piece works, because both are counts. Buying jersey in kilograms and cutting in metres does not (section 12).
Product category and unit setup for the polo
One setup that follows the rules above. The units column describes Odoo 17 and 18; Odoo 19 changed how units work, so check it on that version.
| Category | Costing | Valuation | Tracking | Purchase unit | Stock unit | Route |
|---|---|---|---|---|---|---|
| Fabric / Knit | AVCO | Automated | By lots (lot = dye lot) | kg | kg | Buy |
| Fabric / Woven | AVCO | Automated | By lots | m | m | Buy |
| Trims / Rib collars and cuffs | AVCO | Automated | By lots, to match the body dye lot | sets | sets | Buy |
| Trims / Buttons | AVCO | Automated | None | gross (144) | pieces | Buy |
| Trims / Labels and thread | AVCO | Automated | None | pieces, cones | pieces, cones | Buy |
| Packaging | AVCO | Automated | None | pieces | pieces | Buy |
| Subcontract services | Service products; no stock | pieces | n/a | Buy | ||
| Landed-cost services | Service products flagged "Is a Landed Cost" on the Purchase tab | units | n/a | Buy | ||
| Finished garments | Standard | Automated | None, or lots per production batch | n/a | pieces | Manufacture |
| Buyer-supplied material | Held apart from stock value; design with finance | n/a | as received | None | ||
Buttons: the order needs 3 per piece, 9,000 in all. With a 5% allowance the factory buys 9,450 pieces, which is 9,450 ÷ 144 = 65.6 gross, so the purchase order says 66 gross (9,504 pieces). Gross and pieces sit in the same unit category, so Odoo converts between them without custom work.
With operations on top: the style, its bill of materials by category and its consumption are built in the operations layer. Odoo still needs the categories and costing methods above, because it holds stock value and the payables.
11How do you set up size and colour variants in Odoo for apparel?
Model the style as the product template and each colour, size and (where it applies) fit or inseam as an attribute; the variants are the combinations. In the Odoo 18 documentation, variants are switched on under Sales ‣ Configuration ‣ Settings ‣ Product Catalog, and attributes are managed under Sales ‣ Configuration ‣ Attributes. Each attribute has its own creation mode:
| Variant creation | What happens | Use it for |
|---|---|---|
| Instantly | Every combination is created as soon as the values are added | Small, stable ranges |
| Dynamically | A variant is created only when that combination is ordered | Wide size ranges where many combinations are never sold |
| Never | The value is informational; no variant is created | Descriptive attributes that do not change stock or cost |
Do the arithmetic before choosing. Ten colours, twelve sizes and three inseams give 360 variants for one style. On Instantly, a season of 80 styles fills the product list with close to 29,000 records.
Lock the attribute set before go-live. Adding an attribute to a template that already has variants disrupts the existing variants, and users report archived and recreated records on Odoo's forum. The change a merchandiser thinks is small, adding "fit" to an existing style, becomes a data-migration task.
For order entry, Odoo Sales offers a variant grid: a colour by size quantity matrix on quotations and sales orders, for products with at least two variants. Grid entry on purchase orders is not documented as a core feature; third-party modules exist on the Odoo Apps store.
Naming and codes
Agree a code pattern before the first import, for example P2041-NVY-L for style, colour and size, and hold the buyer's own style number in a separate field. Keep the Odoo internal reference short and stable, because users edit it and integrations must never rely on it (section 34). Keep one size attribute per size scale, so an "S" on a polo and an "S" on a bra band never share a value by accident.
Jeans: two size axes and the variant count
A five-pocket jean in three washes, waist 28 to 40 in even sizes (7 values) and inseam 30, 32 and 34 (3 values).
| Design | Variants per style | Across 40 styles | Effect |
|---|---|---|---|
| Style as template; wash, waist and inseam as attributes, all Instantly | 63 | 2,520 | Every combination exists before anything sells |
| Same, with waist and inseam on Dynamically | only those ordered | typically far fewer | Planning before the first order sees nothing |
| Style-wash as template; waist and inseam as attributes | 21 | 2,520 across 120 templates | Each wash costs and prices on its own |
The third design gives the same variant count but splits it where the business already splits it: each wash has its own fabric treatment, cost and often its own buyer price. Choose the template level from how the factory costs and sells, then choose creation modes.
With operations on top: styles, colourways and size breakdowns live in the operations layer, and Odoo only needs the finished-goods items that are actually sold and invoiced. The variant count in Odoo drops to what ships.
12How do you convert kilograms to metres for fabric in Odoo?
Odoo cannot convert fabric kilograms to metres as standard in versions 17 and 18, because kilograms and metres sit in different unit categories and Odoo converts only inside a category. Knitted fabric is usually bought by weight and cut by length. The conversion depends on the fabric's weight per square metre (GSM) and its width, so it differs for every fabric and often for every roll.
GSM means grams per square metre: the weight of one square metre of the fabric. A 180 GSM jersey weighs 180 g per square metre.
180 GSM jersey, 1.80 m open width → 1000 ÷ (180 × 1.80) = 3.09 m per kg
220 GSM fleece, 1.60 m open width → 1000 ÷ (220 × 1.60) = 2.84 m per kg
Odoo 17 and 18 group units into categories, and conversion works only inside a category. Kilograms (weight) and metres (length) are in different categories, so there is no built-in conversion between them. The usual answers are a conversion factor held on each fabric, or buying and consuming in the same unit. Never use one factor for all fabrics. In the Odoo 18 documentation, units are enabled under Inventory ‣ Configuration ‣ Settings, categories are managed under Inventory ‣ Configuration ‣ UoM Categories, and the product form carries a separate Purchase UoM.
Odoo 19 reworked units of measure: categories and the separate purchase unit are gone, and packagings are merged into units. Anything you design or integrate around units must name the version it was built for.
Three workable designs
There are three workable ways to hold knit fabric in Odoo 17 and 18, each with a trade-off.
| Design | How it works | Trade-off |
|---|---|---|
| Buy, stock and issue in kg | Cutting receives kg; metres are worked out on the cutting floor | Simple and accurate in stock value; the BoM is in kg, so size consumption must be converted to kg per size |
| Buy in kg, stock in m, fixed factor per fabric | A custom field per fabric product holds m per kg | Easy to read in metres; wrong whenever a roll differs from the nominal GSM and width |
| Buy in kg, record GSM and width per roll, convert per lot | Custom lot fields and a conversion at receipt or issue | Accurate; needs custom code and discipline at receipt |
Four rolls of the same "180 GSM" jersey
The purchase order says 180 GSM, 1.80 m. The rolls that arrive are close, not equal.
| Roll | kg | Measured GSM | Width (m) | m per kg | Metres |
|---|---|---|---|---|---|
| R-101 | 25.0 | 176 | 1.82 | 3.122 | 78.0 |
| R-102 | 24.6 | 184 | 1.78 | 3.053 | 75.1 |
| R-103 | 25.3 | 181 | 1.80 | 3.069 | 77.7 |
| R-104 | 24.8 | 188 | 1.76 | 3.022 | 75.0 |
| Total | 99.7 | 305.8 |
A fixed factor of 3.086 m per kg (180 GSM × 1.80 m) says these rolls hold 307.7 m. They hold 305.8 m. On the full polo order of 925 kg the gap is about 17 m, which is 18 size-L polos that the stock report says you can cut and the cutting table says you cannot. Record measured GSM and width per roll at receipt, and convert per roll.
With operations on top: the operations layer records a measured lot record per receipt (GSM, width, shrinkage) and works consumption in the unit the cutting room uses. Odoo can stay in the purchase unit, kilograms, for stock value and payables.
13How do you track dye lots and fabric rolls in Odoo?
Track fabric by lot in Odoo and use each lot as one dye lot, then make the lot mandatory on every receipt and every issue to cutting. A dye lot is a batch of fabric dyed together; fabric from two dye lots can differ slightly in shade, so pieces cut from two lots show a colour difference once sewn into one garment. Cutting must stay within one lot. Track fabric by lot and use the lot as the dye lot. Make the lot mandatory when fabric is issued to cutting, and refuse mixed lots on one cut.
In the Odoo 18 documentation, lots are enabled under Inventory ‣ Configuration ‣ Settings ‣ Traceability (Lots & Serial Numbers), and each product is set to track "By Lots" on its General Information tab. Each operation type has two lot switches: Create New lets users create lots on that operation, and Use Existing ones restricts them to lots that already exist. For fabric, allow new lots on receipts and allow only existing lots on issues to production.
Tracking each roll is a design choice: a serial number per roll gives roll-level issue and return, a package per roll keeps the lot as the unit. Shade group, actual width and actual GSM per roll are not standard lot fields and need custom fields.
A shade band is a set of approved shade references for one fabric colour, used to judge whether a new lot is close enough to the standard. Buyers often allow shade groups within the band (for example A, B and C), and a garment must stay within one group. Odoo has no shade band object; it is a custom field on the lot or a record in another system.
Cutting 3,000 navy polos from three dye lots
The order needs 2,856 m. The mill ships 933 kg, 8 kg over the 925 kg ordered and within its delivery tolerance, as 2,880 m in three dye lots: A 1,210 m, B 1,030 m, C 640 m. Rule: every garment's panels come from one lot, and bundles from different lots never meet on a line.
| Lot | Cut from it | Metres used | Left |
|---|---|---|---|
| A (1,210 m) | XXL 300 · XL 750 · M 23 · S 87 | 1,186.6 | 23.4 |
| B (1,030 m) | L 900 · S 213 | 1,029.7 | 0.3 |
| C (640 m) | M 727 | 639.8 | 0.2 |
| Total | 3,000 pieces | 2,856 | 24 |
Sizes M and S span two lots, which is fine as long as the bundles stay apart and each carton is packed from one lot. The ERP needs to know the lot on every issue to cutting. The cut plan itself is operations work.
With operations on top: shade bands per fabric, the measured lot record and the incoming inspection that carries the dye lot sit in the operations layer. Odoo still holds the lot on receipts and issues, so stock value and traceability stay correct.
14How do you handle size-dependent fabric consumption in Odoo BoMs?
Odoo holds one quantity per BoM line, so fabric that grows with size needs either a line per size, each limited to its variants with "Apply on Variants", or a separate BoM per size group; generate those lines from a consumption table rather than typing them. One BoM per style works well for components that change by colour. Each BoM line has an Apply on Variants setting; left blank, the line applies to every variant, so red thread can be limited to red garments.
Fabric consumption is harder, because it grows with size. An XL uses more fabric than an S. Odoo expresses this with a BoM line per size group or separate BoMs, and with 12 sizes that is a lot of lines to maintain. Projects that go well generate those lines from a consumption table (base size, grading per size, marker efficiency) instead of typing them.
The same variant rule applies to operations and by-products. Odoo's documentation on manufacturing with variants says the principle used for components also applies when configuring operations, and a Consumed in Operation field decides at which operation a component is used. A hand-embroidery step that only the navy colourway needs can be limited to navy variants.
A BoM of type Kit is exploded at delivery. It suits sets and ratio packs sold as one unit, not garments you manufacture.
Marker efficiency is the share of the fabric in a cutting marker that ends up in garment pieces; the rest is waste between the pieces. Shrinkage is the fabric the garment loses in washing or finishing, planned into the pattern. Keep the two apart: they come from different people (CAD and lab), change for different reasons, and are argued about with different suppliers.
Why one average consumption fails
Body fabric per polo, from the marker: S 0.82 m, M 0.88 m, L 0.95 m, XL 1.02 m, XXL 1.10 m.
| Size | Pieces | m per piece | Metres |
|---|---|---|---|
| S | 300 | 0.82 | 246 |
| M | 750 | 0.88 | 660 |
| L | 900 | 0.95 | 855 |
| XL | 750 | 1.02 | 765 |
| XXL | 300 | 1.10 | 330 |
| By size | 3,000 | 2,856 | |
| Base size M for all | 3,000 | 0.88 | 2,640 |
Using the base size for every size under-buys by 216 m, or 7.6%. That is roughly 227 size-L polos with no fabric, found out on the cutting table three weeks before shipment, with a mill lead time longer than that. The size breakdown of the order matters as much as the consumption: the same style with a heavier XL and XXL mix needs more again.
With operations on top: the consumption engine (marker efficiency, shrinkage, woven construction) and the net-to-buy across the order book run in the operations layer, which passes the purchase quantity to Odoo. Odoo does not need size-graded BoM lines.
15How do you model cutting, sewing and finishing with Odoo work centers?
Model cutting, sewing, finishing and packing as Odoo work centers, and list the garment's operations with their minutes on the BoM's Operations tab; this gives work orders and a labour cost, but it does not balance a sewing line. A work center in Odoo is a place where operations run, with its own working hours, efficiency and cost per hour.
In the Odoo 18 documentation, work orders are switched on under Manufacturing ‣ Configuration ‣ Settings (Work Orders), and work centers are created under Manufacturing ‣ Configuration ‣ Work Centers. A work center carries working hours, a Time Efficiency multiplier, a Capacity (units processed at the same time), an OEE Target, a Cost per hour, setup and cleanup times, alternative work centers and allowed employees. Operations are added on the BoM's Operations tab, each assigned to a work center.
What an operation duration means in a garment factory
SMV (standard minute value) is the time a trained operator needs for one operation at a normal pace, including allowances. A polo has 15 to 25 sewing operations. You can list each one as an Odoo operation, or group them into a few steps per department. Grouping keeps work orders manageable; listing every operation gives a detailed cost but floods the work-order list.
| Question | What Odoo gives | What stays outside |
|---|---|---|
| How much labour is in one polo? | Operation durations and cost per hour | The minute study itself |
| How many polos can line 3 sew this week? | Working hours and efficiency on the work center | Line balancing across 25 operators, absenteeism, learning curves |
| Where is bundle 214? | The work order's step | Bundle tracking and operator output |
| Which line takes which order in week 47? | Work-order scheduling on the work center | Seasonal line loading across lines and subcontractors |
The polo's operations, minutes and line capacity
The 18 minutes in Example 1 are the sum of these operations, grouped into three work centers.
| Work center | Operation | Minutes |
|---|---|---|
| Cutting | Spread, cut, number and bundle | 1.20 |
| Sewing line | Shoulder join | 0.90 |
| Sewing line | Placket | 3.10 |
| Sewing line | Collar attach | 2.20 |
| Sewing line | Sleeve attach | 1.80 |
| Sewing line | Side seam and sleeve close | 1.60 |
| Sewing line | Cuff attach | 1.40 |
| Sewing line | Bottom hem | 1.00 |
| Sewing line | Buttonholes and buttons | 1.50 |
| Finishing | Thread trim and inspection | 1.20 |
| Finishing | Press | 1.00 |
| Finishing | Fold, tag and bag | 1.10 |
| Total | Cutting 1.20 · sewing 13.50 · finishing 3.30 | 18.00 |
7,200 ÷ 13.50 sewing minutes = 533 polos a day
3,000 ÷ 533.3 = 5.6 line-days of sewing
Labour cost at USD 4.20 an hour (0.07 a minute): 18 × 0.07 = USD 1.26 a polo
Set each operation's duration to its minutes and the work-center cost per hour to USD 4.20, and Odoo's expected labour cost for the order is 3,000 × 18 min = 54,000 min = 900 hours × 4.20 = USD 3,780, which is 1.26 a piece: the CM line in Example 14. The 5.6 line-days and the choice of line come from planning, not from the work order. The sewing window in Example 12 is three weeks because the line is shared with other orders.
With operations on top: the planning heat-map (lines and subcontractors, 52 weeks), production orders with job cards per department and the WIP board run in the operations layer. Odoo receives material issues for stock value and does not need work orders at all.
16Where do sampling, approvals and the T&A calendar live in an Odoo project?
Odoo has no object for garment samples, buyer approvals or a T&A calendar, so an Odoo project must build them as custom work, borrow another app for them, or keep them in an operations system. Before a single bulk garment is cut, the buyer approves the product in stages. Each stage can take several rounds, and each approval unlocks the next step of the order. Miss one, and the factory is ordering fabric or cutting on a spec the buyer has not agreed.
A PP (pre-production) sample is a garment made in the actual bulk fabric and trims, which the buyer approves as the reference that bulk production must match. A T&A (time and action) calendar is the list of an order's milestones, each with a planned date worked back from the ex-factory date, an actual date and an owner.
| Sample or approval | What it decides | What waits for it |
|---|---|---|
| Proto / development sample | The look and the construction | Costing and the quote |
| Lab dip | The shade, within tolerance under the buyer's light source | Bulk fabric dyeing |
| Strike-off | Print or embroidery artwork, colours and placement | Bulk printing or embroidery |
| Trims approval | Buttons, zips, labels and hangtags | The bulk trims order |
| Fit sample | Measurements and fit on the buyer's model | Pattern correction |
| Size set | Grading across every size | The production marker |
| PP (pre-production) sample | The reference bulk must match | Cutting |
| TOP (top of production) | That the first bulk pieces match the PP sample | The rest of the run |
| Shipment sample | The reference for any claim after delivery | Shipping |
Every round has a sent date, a courier and tracking number, the pieces sent, the buyer's comments and a verdict: approved, approved with comments, or rejected. The T&A calendar hangs on these dates.
Odoo has no object for this. Teams build it from project tasks, helpdesk tickets or a custom module, and more often it lives in email. The typical failure is bulk fabric ordered, or cutting started, on the strength of an approval nobody can find.
What a custom sampling module must hold
If the project builds sampling inside Odoo, the module needs a small set of records that link to the style and the order. The list below is the minimum we would design.
- A sample request per style and colourway, with its type (lab dip, strike-off, fit, size set, PP, TOP, shipment).
- Rounds under each request: sent date, courier, tracking number, pieces sent, buyer comments, verdict, verdict date, who recorded it.
- A link from the approved round to the spec version it approved, so a later revision cannot silently replace it.
- A block on the next step: bulk dyeing waits for the lab dip, cutting waits for the PP sample.
- T&A milestones that take their actual dates from the rounds instead of from someone typing them.
The polo order's approval calendar, worked back from ex-factory
| Date | Milestone | If it slips |
|---|---|---|
| 1 Oct | Order confirmed | |
| 8 Oct | Lab dip round 1 sent; round 2 on 13 Oct | Bulk dyeing cannot start |
| 17 Oct | Lab dip round 3 approved | Each extra round costs about 5 days |
| 20 Oct | Bulk fabric dyeing starts | |
| 24 Oct | Embroidery strike-off approved | Embroidery cannot be booked |
| 7 Nov | PP sample sent in bulk fabric | |
| 10 Nov | Bulk fabric in-house | Cutting waits |
| 14 Nov | PP sample approved, with comments | Cutting cannot start |
| 17 Nov | Cutting starts | |
| 20 Nov to 10 Dec | Sewing; TOP sample from the first bulk pieces | |
| 12 Dec | Final AQL inspection | Shipment held |
| 15 Dec | Ex-factory |
Three lab dip rounds instead of two pushed dyeing back five days, and the order absorbed it only because cutting had slack before the PP approval. That is the kind of question a merchandiser answers every morning, and it needs approvals, dates and dependencies in one place.
With operations on top: dev approvals (lab dip, strike-off, sample, shipping mark) with rounds, courier details and the buyer's verdict, the T&A calendar with its critical path, and the PP approval that locks the style version for the order all live in the operations layer. Odoo needs none of it.
17How does Odoo subcontracting work for CMT, washing, printing and embroidery?
Odoo subcontracting sends components to an outside processor on a purchase order and receives the finished item back, consuming the components on receipt; it fits one outside step well and a chain of processors less well. In the Odoo 18 documentation it is switched on in the Odoo Manufacturing (MRP) app under Manufacturing ‣ Configuration ‣ Settings (Subcontracting, under Operations), and a BoM of type Subcontracting names one or more subcontractors.
CMT (cut, make, trim) means the factory sews garments from fabric the buyer supplies and charges only for the labour; in subcontracting, the same term describes a factory that sends cut panels to another unit to be sewn. Job work is the South Asian term for the same arrangement.
Basic, resupply and dropship subcontracting
Odoo documents three subcontracting workflows, and the difference is who supplies the components.
| Workflow | Who supplies the components | Garment use |
|---|---|---|
| Basic | The subcontractor; the BoM needs no components | Buying finished garments or a full-package service from another factory |
| Resupply | You send them from your own stock | Sending cut panels to a printer, embroiderer or sewing unit |
| Dropship to subcontractor | Your supplier ships straight to the subcontractor | A mill delivering fabric directly to a CMT unit or a garment washer |
The resupply flow runs like this:
- A subcontracting BoM names the subcontractor.
- Confirming the purchase order to that subcontractor creates the receipt, and a resupply order that sends the components out.
- Components move to the subcontractor's location when the resupply is validated.
- Receiving the finished goods consumes those components.
Garments often visit several processors: cut panels to a printer, then to a sewing unit, then to a wash. Each step becomes its own intermediate product and subcontracting BoM, or custom work. Modelled as one step, the factory loses sight of where its goods are between processors.
2,000 printed T-shirts through two outside processors
| Step | Where | Out | Back | Note |
|---|---|---|---|---|
| Cut front panels | Factory | 2,020 | 1% print allowance on top of 2,000 | |
| Screen print | Printer A | 2,020 | 2,008 | 12 rejected for misregistration |
| Sew | Factory | 2,008 | 2,003 | 5 panels damaged in sewing |
| Garment wash | Washer B | 2,003 | 2,001 | 2 lost in wash |
| Ready to pack | 2,001 | 1 spare over the order |
In Odoo this is two subcontracting BoMs with an intermediate product between them, so the printed panel and the washed garment each exist as stock. Modelled as one step, the 12 misprints and the 2 wash losses have nowhere to be recorded, and the factory argues about them with the printer from memory.
Subcontractor tracking a factory expects
A factory expects to see, per processor, what went out, what came back, what was lost and whether the loss is inside the agreed allowance. Odoo shows stock at the subcontractor's location; the allowance, the reject reasons and the balance per order are design work or a report to build.
With operations on top: subcontract steps sit on the production order in the operations layer, and subcontractors appear on the planning heat-map beside the factory's own lines. Odoo receives the subcontractor's purchase order and the payable.
18How do you cost a garment in Odoo, and where does the garment costing sheet live?
Odoo costs stock by product category (Standard, AVCO or FIFO) and adds freight and duty to receipts with landed costs, but the garment costing sheet used to quote a buyer is built before any Odoo product exists and usually lives outside Odoo. A garment costing sheet lists fabric, trims, making, washing, testing, freight, finance cost and margin per piece, and adds up to the price quoted to the buyer.
- Costing method is set per product category: Standard, Average (AVCO) or FIFO. Standard is common for finished garments; AVCO or FIFO for fabric and trims.
- Landed costs spread freight, duty and clearing over receipts, by quantity, weight, volume, equal share or current cost. Use them for imported fabric, including under temporary-admission and free-zone regimes.
- Multi-currency and exchange differences are native, which suits selling in USD or EUR while paying costs locally.
- Down payments on sales orders are native, by percentage or fixed amount.
Pre-costing a style for a quote (fabric, trims, CM, washing, testing, freight, finance cost, commission, margin) is usually done before an Odoo product exists, so it tends to live outside Odoo.
A quotation cost build for the polo (illustrative figures, USD per piece)
| Line | How it is worked out | USD |
|---|---|---|
| Body fabric | 0.31 kg at 4.20 per kg, plus 6% cutting loss | 1.38 |
| Collar and cuffs | 1 set | 0.25 |
| Trims | Buttons, thread, labels, polybag | 0.32 |
| Embroidery | Subcontractor price per logo | 0.18 |
| CM (cut and make) | 18 minutes at 0.07 per minute | 1.26 |
| Testing | Buyer's lab tests spread over the order | 0.10 |
| Factory overhead | 12% of CM | 0.15 |
| Freight to port and export documents | 0.12 | |
| Finance cost | 3% while waiting for payment | 0.11 |
| Margin | 10% | 0.39 |
| FOB price | 4.26 |
Every line except the last is an estimate made before the order exists. After production, the same lines come back as actuals: the real fabric used, the real minutes from the floor, the real embroidery rejects. The factory learns whether the order made money only if the quote and the actuals sit side by side.
How do you configure landed costs in Odoo for imported fabric and customs duties?
Switch on Landed Costs in Odoo Inventory, create each import charge as a service product marked as a landed cost, and apply the charges to the fabric receipt with a split method per charge. A landed cost is any cost of bringing goods to the factory beyond the supplier's price: freight, insurance, customs duty, clearing and bank charges.
In the Odoo 18 documentation, the setting is under Inventory ‣ Configuration ‣ Settings, in the Valuation section (Landed Costs). Landed-cost products must be of type Service, with Is a Landed Cost ticked on the Purchase tab. The products that receive the cost must sit in a category costed by AVCO or FIFO. The documented split methods are Equal, By Quantity, By Current Cost, By Weight and By Volume.
Choose the split per charge. Sea freight follows weight or volume; clearing and bank charges usually follow value; a duty charged per kilogram follows weight. For a factory in a free zone or under temporary admission, duty may be zero or suspended, and the rules for what must be reported are local. Agree them with the customs broker and finance before configuring.
Landed cost on the imported fabric
The polo's navy jersey and its rib collars and cuffs arrive in one shipment. Duty is zero because the factory imports under temporary admission. All prices are illustrative.
| Receipt line | Quantity | Weight (kg) | Value (USD) |
|---|---|---|---|
| Navy jersey 180 GSM | 925 kg | 925.0 | 3,885.00 |
| Rib collar and cuff sets | 3,060 sets | 76.5 | 765.00 |
| Total | 1,001.5 | 4,650.00 |
| Charge | USD | Split | Jersey | Rib sets |
|---|---|---|---|---|
| Sea freight | 420.00 | By Weight | 387.92 | 32.08 |
| Clearing and port | 180.00 | By Current Cost | 150.39 | 29.61 |
| LC bank charges | 95.00 | By Current Cost | 79.37 | 15.63 |
| Total landed costs | 695.00 | 617.68 | 77.32 |
Value share of jersey = 3,885 ÷ 4,650 = 83.55%
Clearing to jersey = 180 × 0.8355 = 150.39 · bank charges = 95 × 0.8355 = 79.37
Jersey landed = 3,885.00 + 617.68 = 4,502.68 → 4,502.68 ÷ 925 = USD 4.87 per kg
Rib landed = 765.00 + 77.32 = 842.32 → 842.32 ÷ 3,060 = USD 0.28 per set
The fabric line in Example 14 was priced at the mill price of USD 4.20 a kg. At the landed USD 4.87, the same line becomes 0.31 × 4.87 × 1.06 = USD 1.60, which is 0.22 more per polo and USD 660 on the order. The 10% margin of 0.39 would shrink to 0.17. Quote on landed material cost, not on the supplier's price.
With operations on top: the cost engine (fabric, trims, decoration, CMT, overhead, margin to FOB, with landed cost and dated exchange rates), the standard cost sheet and quotations with approval thresholds run in the operations layer. Odoo holds the landed cost that actually hit the receipts, for stock value.
19Can Odoo run quality control and AQL inspection for garments?
Odoo Quality (an Enterprise app) creates pass-fail, measurement and instruction checks on receipts, work orders and deliveries, but it does not contain ISO 2859-1 sampling tables, so AQL inspection needs custom work or a separate system. AQL (acceptance quality limit) inspection checks a random sample drawn from a lot and accepts or rejects the whole lot according to how many defects the sample contains.
In the Odoo 18 documentation, control points are created under Quality ‣ Quality Control ‣ Control Points. A control point targets an operation (such as a receipt, a delivery or a manufacturing operation) and products or product categories. Its frequency is All, Randomly (a percentage) or Periodically; its check types include Instructions, Pass-Fail, Measure, Take a Picture, Register Production, Worksheet and Spreadsheet. With Multi-Step Routes on, a warehouse can receive in three steps (input, then quality, then stock), which creates a Quality Control location for goods on hold.
Quality control at cutting, stitching, dyeing and printing
A garment factory inspects at each stage where a defect is cheaper to catch than at the end. Dyeing and printing usually happen at a dye house or printer outside the factory, so those checks land on the receipt of the goods coming back.
| Inspection | When | What it checks | Odoo fit |
|---|---|---|---|
| Incoming fabric | At receipt from the mill or dye house | Shade against the shade band, GSM, width, shrinkage, four-point defects | Control point on the receipt; four-point scoring and shade groups need custom fields |
| Incoming trims | At receipt | Colour, size, count against the approved trims card | Pass-fail control point |
| Printed or embroidered panels | On return from the processor | Placement, registration, colour against the strike-off | Control point on the subcontract receipt |
| Cutting | After cutting, before bundling | Pattern accuracy, notches, shade within the bundle | Check on the cutting operation |
| Inline (stitching) | During sewing | Operation-level defects, found early | Checks on work orders; operator-level capture is limited |
| End of line | As garments leave the line | Every garment, graded pass, repair or reject | Limited; grading is custom |
| Measurement | End of line and final | Points of measure against tolerance per size | Measure checks exist; size-by-size tolerance tables need design |
| DUPRO | Once a share of the order is packed | Early warning before final | Custom |
| Final AQL | When the order is packed | Sample per ISO 2859-1 at the buyer's level | Custom (sampling tables) |
An Odoo random frequency of 4.17% gives about the same number of pieces as the final sample in Example 16 for this one lot size. It is not an AQL plan: under ISO 2859-1 the sample size comes from the lot-size band and the inspection level, and the lot is accepted or rejected against fixed acceptance numbers.
The final inspection sample for 3,000 polos
The buyer's quality manual asks for ISO 2859-1, single sampling, normal inspection, general inspection level II, AQL 2.5 for major defects and 4.0 for minor defects.
| Step | Lookup | Result |
|---|---|---|
| Lot size | 3,000 pieces falls in the band 1,201 to 3,200 | Band 1,201–3,200 |
| Code letter | That band at general level II | K |
| Sample size | Code letter K | 125 pieces |
| Major defects, AQL 2.5 | Sample of 125 | Accept at 7 or fewer, reject at 8 |
| Minor defects, AQL 4.0 | Sample of 125 | Accept at 10 or fewer, reject at 11 |
If the inspector finds 8 major defects, the lot fails even if minor defects are well inside their limit. What happens next (re-inspection after 100% checking, or a release decided by the buyer) must be recorded with the person who decided. Many buyers also accept zero critical defects; take that from the buyer's manual.
Acceptance numbers as published in ISO 2859-1 Table II-A, reproduced in common AQL references (see sources).
With operations on top: typed inspections (incoming, cutting, PP, DUPRO, final AQL, pre-shipment, measurement), the AQL engine on ISO 2859-1 at the buyer's level, CAPA, needle and metal control and quality grades (only first-quality pieces count as shippable) run in the operations layer. Odoo sees the delivery only once it is cleared.
20How do you handle cartons, packing lists and shipping documents in Odoo?
Odoo Inventory packs goods into packages on a transfer and prints delivery documents, but assorted and ratio cartons, buyer carton labels and pack-level packing lists usually need custom work. A package in Odoo is a physical container holding one or more products; in the Odoo 18 documentation, packages are switched on under Inventory ‣ Configuration ‣ Settings (Operations), and the Put in Pack button places the items of a transfer into a new package.
Documents a garment shipment needs
An export shipment of garments carries a standard set of documents, and a letter of credit may require each to match exactly.
| Document | Built from | Odoo fit |
|---|---|---|
| Packing list by carton | Carton number, size and colour content, lot, weights, dimensions | Packages give the content; buyer layouts are custom reports |
| Carton labels | Buyer's label rules, often with an SSCC barcode | Custom |
| Commercial invoice | The sales invoice with incoterm, marks and numbers | Invoice with a custom export layout |
| Certificate of origin | Issued by a chamber or authority | Outside Odoo; attach the copy |
| Advance shipping notice (ASN) | Carton-level content sent to the buyer before arrival | EDI connector or portal upload |
| Bill of lading or air waybill | Issued by the carrier or forwarder | Outside Odoo; attach the copy |
Packing 3,000 polos into cartons, one dye lot per carton
The buyer wants solid-size cartons of 10 pieces. Following the cut plan in Example 9, each carton must hold a single dye lot.
| Size and lot | Pieces | Full cartons of 10 | Part carton |
|---|---|---|---|
| S, lot A | 87 | 8 | 1 of 7 |
| S, lot B | 213 | 21 | 1 of 3 |
| M, lot A | 23 | 2 | 1 of 3 |
| M, lot C | 727 | 72 | 1 of 7 |
| L, lot B | 900 | 90 | none |
| XL, lot A | 750 | 75 | none |
| XXL, lot A | 300 | 30 | none |
| Total | 3,000 | 298 | 4 (20 pieces) |
298 full cartons hold 2,980 pieces and four part cartons hold the other 20, so the shipment is 302 cartons instead of the 300 a size-only plan predicts. The buyer must accept part cartons, or accept mixing lots in them. Agree it before packing starts, and make sure the packing list shows the lot per carton.
With operations on top: shipments per delivery, packing and cartonisation, and ship clearance against the buyer's terms run in the operations layer. Odoo receives the dispatch and raises the customer invoice.
21How does Odoo handle multi-currency, letters of credit, down payments and chargebacks?
Odoo Accounting handles foreign currencies, exchange differences and down payments as standard; letters of credit and reason-coded chargebacks need design, because Odoo has no letter-of-credit object. Garment exporters usually sell in USD or EUR, buy some materials abroad and pay wages locally, so every order touches at least two currencies.
Multi-currency and exchange differences
Currencies are activated in Odoo Accounting and exchange differences are booked automatically when a payment settles an invoice at a different rate. In the Odoo 18 documentation, currencies are activated under Accounting ‣ Configuration ‣ Currencies, automatic rate updates are set under Accounting ‣ Configuration ‣ Settings (Currencies), and the exchange-difference journal and gain and loss accounts under Accounting ‣ Configuration ‣ Settings (Default Accounts). The multi-currency page describes realised differences; for period-end revaluation of open balances, check your version and localisation.
Down payments
A down payment in Odoo is an invoice for part of a confirmed sales order, later deducted from the final invoice. In the Odoo 18 documentation, it is created from the confirmed order with Create Invoice, choosing Down payment (percentage) or Down payment (fixed amount). A down-payment account can be set on the product category.
Letters of credit
A letter of credit is a bank's promise to pay the exporter when documents that match the credit's terms are presented. Under ICC's UCP 600 rules, which most credits follow, documents must be presented within 21 calendar days after the shipment date unless the credit says otherwise, and never after the credit expires. Odoo has no LC object: the credit number, amount, latest shipment date, expiry, presentation period and required documents need custom fields or a custom model, and a check before shipment that the documents will match.
Down payment, letter of credit and exchange difference
The polo order is worth 3,000 × USD 4.26 = USD 12,780.00. The buyer pays 30% in advance by transfer and the balance under a sight letter of credit. The factory's books are in EGP. Exchange rates are illustrative.
| Step | In Odoo | USD | EGP |
|---|---|---|---|
| Order confirmed, 1 Oct | Sales order, 3,000 polos at 4.26 | 12,780.00 | |
| Down payment invoice | Create Invoice ‣ Down payment (percentage), 30% | 3,834.00 | |
| Down payment received | Payment against the down-payment invoice | 3,834.00 | |
| Shipment, 15 Dec | Final invoice; the down payment is deducted | 8,946.00 | at 48.80 = 436,564.80 |
| LC documents presented | Custom LC record: presentation within 21 days of shipment | ||
| LC paid | Payment of the balance | 8,946.00 | at 49.10 = 439,248.60 |
| Exchange difference | Booked automatically to the gain account | 2,683.80 |
Balance = 12,780.00 − 3,834.00 = 8,946.00
Gain = 8,946.00 × (49.10 − 48.80) = 8,946.00 × 0.30 = EGP 2,683.80
The bank's negotiation charges are a separate expense entry. What Odoo does not do as standard is warn the shipping team that the credit expires, or that the latest shipment date is close; that is the custom part.
Chargebacks
A chargeback is an amount a buyer deducts from a payment for a claimed failure: a late shipment, a wrong carton label, a missing or wrong advance shipping notice. It arrives as a short payment. Record the shortfall against a chargeback account, one account or analytic tag per reason, and keep the buyer's deduction notice attached. Without reason codes, nobody can tell whether the factory loses money to labels or to lateness.
A chargeback on an open-account shipment
Suppose the same balance of USD 8,946.00 were shipped to a retailer on open account instead of against a letter of credit. The retailer pays short.
| Deduction | Reason given | USD |
|---|---|---|
| Carton label error | 2 cartons with wrong size label, 50 per carton | 100.00 |
| Late ASN | 1% of the invoice | 89.46 |
| Total deducted | 189.46 |
Received = 8,946.00 − 189.46 = 8,756.54
In Odoo, register the payment of 8,756.54 and leave 189.46 open, then write it off to "Chargebacks: labelling" (100.00) and "Chargebacks: ASN" (89.46). If the factory disputes the label claim with carton photos, the 100.00 stays open under dispute instead of being written off.
With operations on top: finance stays in Odoo in full. The operations layer sends the orders, deliveries and purchase requests that the invoices and payables are built on; no money amounts travel through its ERP API.
22Does Odoo support e-invoicing and localisation for garment exporting countries?
Odoo publishes fiscal localisations per country, and for Egypt it documents integration with the Egyptian Tax Authority's e-invoicing system; for every other country, check Odoo's localisation page and a local partner before assuming compliance. E-invoicing rules change often, so treat any statement older than the current tax year with care.
Egypt (ETA e-invoicing)
Odoo's Egypt page documents two modules: Egypt - Accounting and Egyptian E-invoice Integration, compliant with the Egyptian Tax Authority (ETA) e-invoicing requirements and available from Odoo 15.0. Setup, per the Odoo 18 documentation:
- Register the system on the ETA portal to receive a Client ID and Client Secret, and enter them under Accounting ‣ Configuration ‣ Settings (ETA E-Invoicing Settings).
- Complete the company's tax ID and address, the branch with its ETA activity code, customer tax details, and product barcodes and units.
- Give each person who signs invoices a USB signing key.
- Install a local proxy (the Odoo installer's IoT option) to bridge the USB key and the database, then link the key in Accounting.
The page does not state which edition includes the e-invoicing integration; confirm with Odoo or your partner.
Other garment-exporting countries
Turkey, Pakistan, Bangladesh, India, Vietnam, Morocco, Tunisia and others each have their own invoicing, VAT and export-incentive rules. We have not verified Odoo's coverage for them in this guide. Check Odoo's fiscal localisation list for your version, ask the partner which statutory reports they have delivered before, and test an e-invoice end to end in staging before go-live.
Factories in free zones or under temporary admission often report the import and re-export of materials to customs. Odoo stock moves carry the quantities, but the report format is local and usually custom.
Part 4Build
23In what order should you configure Odoo for a garment factory?
Configure Odoo for a garment factory from the ledger outward: company, currencies and taxes first, then units, variants and lots, then product categories and costing, then warehouses and routes, then manufacturing, subcontracting and quality, and only then the products themselves. Each step depends on the one before it; loading products before units and categories are final means reloading them.
The menu paths below come from the Odoo 18 documentation. Odoo 17 and 19 are close, but labels move between versions, and Odoo 19 changed units of measure. Check each path on the version you deploy.
| # | Configure | Where (Odoo 18 documentation) | Why at this point |
|---|---|---|---|
| 1 | Install Sales, Purchase, Inventory, Manufacturing (MRP) and Accounting; add Quality, PLM and Barcode on Enterprise if the fit-gap needs them | Apps | Settings for each app appear only once it is installed |
| 2 | Company, fiscal localisation, chart of accounts, taxes | Accounting settings; the localisation package for the country | Every later document posts to these accounts |
| 3 | Currencies and automatic rates | Accounting ‣ Configuration ‣ Currencies; Accounting ‣ Configuration ‣ Settings (Currencies) | Foreign-currency suppliers and buyers need active currencies |
| 4 | Exchange-difference journal and accounts | Accounting ‣ Configuration ‣ Settings (Default Accounts) | Before the first foreign payment |
| 5 | Units of measure | Inventory ‣ Configuration ‣ Settings (Units of Measure); Inventory ‣ Configuration ‣ UoM Categories | Products carry their units from creation; changing later is painful |
| 6 | Variants and attributes | Sales ‣ Configuration ‣ Settings ‣ Product Catalog (Variants); Sales ‣ Configuration ‣ Attributes | Lock the attribute set and creation modes before any style is loaded |
| 7 | Lots and serial numbers | Inventory ‣ Configuration ‣ Settings ‣ Traceability (Lots & Serial Numbers) | Fabric products must be created with lot tracking |
| 8 | Packages | Inventory ‣ Configuration ‣ Settings (Operations: Packages) | Cartons and rolls-as-packages |
| 9 | Multi-step routes and three-step receipts | Inventory ‣ Configuration ‣ Settings (Warehouse: Multi-Step Routes); Inventory ‣ Configuration ‣ Warehouses | Creates the input and quality control locations for fabric on hold |
| 10 | Product categories with costing method and valuation | Inventory ‣ Configuration ‣ Product Categories | The category decides stock accounts and costing |
| 11 | Landed costs | Inventory ‣ Configuration ‣ Settings (Valuation: Landed Costs) | Import charges need service products flagged "Is a Landed Cost" |
| 12 | Lot rules per operation type | Inventory ‣ Configuration ‣ Operations Types (Create New / Use Existing ones) | New lots at receipt, existing lots only at issue |
| 13 | Work orders and work centers | Manufacturing ‣ Configuration ‣ Settings (Work Orders); Manufacturing ‣ Configuration ‣ Work Centers | Operations on BoMs need work centers |
| 14 | By-products | Manufacturing ‣ Configuration ‣ Settings (Operations: By-Products) | Only if the factory values offcuts or mill by-products |
| 15 | Subcontracting | Manufacturing ‣ Configuration ‣ Settings (Operations: Subcontracting) | Subcontracting BoMs appear only once it is on |
| 16 | Quality control points | Quality ‣ Quality Control ‣ Control Points (Enterprise) | Points reference operations and product categories that now exist |
| 17 | E-invoicing (Egypt example) | Accounting ‣ Configuration ‣ Settings (ETA E-Invoicing Settings) | Needs products with barcodes and units from the steps above |
| 18 | Master data: partners, materials, styles, BoMs | Import on each list, using templates with External IDs | Last, so every record lands on final settings |
Two product-level switches complete the setup. A product that is made in the factory needs the Manufacture route on its Inventory tab, and a fabric needs "By Lots" in its tracking field. Both are easier to set in the import file than by hand.
24Which custom Odoo modules does an apparel implementation usually need?
An apparel Odoo implementation that keeps operations inside Odoo usually needs between a handful and a dozen custom modules, covering fabric units, lot attributes, size consumption, cutting control, packs, sampling, AQL, letters of credit and buyer documents. The list below is from implementation practice; the names are descriptive, not real packages. Look for maintained modules on the Odoo Apps store or from the Odoo Community Association before writing your own, and check each one against your version.
| Module | Purpose | Fit-gap lines | Needed with operations on top? |
|---|---|---|---|
| Fabric units | kg-to-metre conversion per lot, from measured GSM and width | 20 | No; the conversion happens in the operations layer |
| Lot attributes | GSM, width, shade group, shrinkage and roll length on the lot | 21, 22, 23 | No |
| Size consumption | Generates BoM lines per size from a consumption table | 12, 13 | No |
| Cut control | Refuses mixed lots on one cut; cut orders and bundles | 23, 30, 31 | No |
| Ratio packs and cartons | Assorted cartons, pack-level packing lists, carton labels | 5, 44, 46 | No for packing; buyer label printing may still sit in Odoo if the dispatch is printed there |
| Sampling and approvals | Sample requests, rounds, verdicts, T&A links | 10, 36 | No |
| Chained subcontracting | Balance per processor, loss allowance, reject reasons | 34 | No |
| AQL inspection | ISO 2859-1 sample sizes and acceptance numbers, logged overrides | 38, 39 | No |
| Quantity tolerance | Over and under-shipment check before a delivery is validated | 43 | No; ship clearance happens in the operations layer |
| Letters of credit | LC terms, dates, document checklist, expiry warnings | 48 | Yes; LC is a finance record |
| Chargeback reasons | Reason codes on deductions, dispute status | 50 | Yes |
| EDI connector | 850, 855, 856, 810 with each retailer | 45 | Depends on which system the buyer's EDI must reach |
| Export documents | Commercial invoice and packing-list layouts per buyer | 44 | Yes for the invoice |
| Local statutory reports | Free-zone or temporary-admission reports, local tax | 52 | Yes |
Every module in the table is code someone must port at each Odoo upgrade. That is the real cost of keeping operations inside Odoo, and it recurs.
25Should you use Odoo Studio or custom modules for apparel changes?
Use Odoo Studio for simple fields, views and automations on your own records, and write business logic such as unit conversion, size consumption and AQL as version-controlled modules. Studio is an Enterprise tool for building fields, views and automation rules without code.
| Change | Studio | Module |
|---|---|---|
| Add "buyer style number" to the product and the sales order | Yes | Either |
| Show GSM and width on the receipt screen | Yes, for display | If a calculation depends on them |
| Convert kg to metres per lot | No | Yes |
| Generate size BoM lines from a table | No | Yes |
| Refuse mixed lots on a cut | An automation can warn | Yes, to enforce it |
| Send a webhook when a PO is confirmed | Yes (automation rule) | Either |
| AQL sample size and verdict | No | Yes |
From practice: Studio changes on core models such as the sales order, the stock move and the BoM make upgrades harder, because they are not reviewed and versioned like code. Keep a register of every Studio change, with its owner and reason, and move anything that holds logic into a module.
26Which systems does an Odoo apparel implementation integrate with?
An Odoo apparel implementation typically connects to a PLM or tech-pack system, a shop-floor system, EDI with retailers, banks, and an operations layer; each connection needs one owner per field and links stored on permanent ids. The table shows the usual source of truth for each kind of record, based on general practice.
| Record | Source of truth | Goes to Odoo as |
|---|---|---|
| Style, spec, points of measure, revisions | PLM or operations layer | The finished-goods item, once released |
| Pre-cost and quote | Operations layer | Nothing, or a standard cost once the order is confirmed |
| Buyer order | Operations layer, or EDI into the ERP | The sales order |
| Material requirements | Operations layer | Purchase requests that become Odoo purchase orders |
| Receipts, stock, lots | Odoo, with measurements from the operations layer | Receipts and stock moves |
| Cut, bundle, WIP, operator output | Shop-floor system or operations layer | Material issues, summarised |
| Quality results | Operations layer or quality system | Only the clearance to ship |
| Shipment, invoice | Odoo for the invoice; operations layer for the shipment | Delivery and customer invoice |
| Payments, LC, chargebacks | Odoo | Native |
Rules for every connection
Four rules prevent most integration faults. They apply whether the other side is a PLM, a floor system or an operations layer.
- Link on Odoo's integer id or an external ID, never on an order reference or product code a user can edit.
- One writer per field. If two systems can change the same quantity, one of them is wrong without knowing it.
- Show disagreements to a person. When the other system says something different, put it on a review list; never overwrite silently.
- Make receivers safe to call twice, so a retried message does not create a second purchase order.
Odoo's API choice depends on the version; section 34 covers it. Odoo's pricing page lists external API access under its Custom plan at the time of checking; confirm what your subscription includes before designing an API integration, and consider a file exchange if it is not included.
Part 5Data migration
27How do you migrate apparel data into Odoo?
Migrate only open and active apparel data into Odoo (active styles, open orders, open purchase orders and stock by lot), load it in dependency order with External IDs, and have each department head sign off the loaded figures. History stays in the old system or an archive. Odoo's import tool accepts CSV and Excel files, offers templates for common records, and uses the External ID column so that re-importing the same file updates records instead of duplicating them.
Load order
Each object depends on the ones above it. Load and check each level before starting the next.
| # | Object | Scope | Signed off by |
|---|---|---|---|
| 1 | Chart of accounts, taxes, opening balances plan | Current | Finance head |
| 2 | Units, attributes and attribute values | Final design | Merchandising head, stores head |
| 3 | Product categories | Final design | Finance head |
| 4 | Customers and suppliers | Active in the last two seasons | Merchandising head, purchasing |
| 5 | Materials (fabrics, yarns, trims, packaging) | Used in active styles or in stock | Stores head |
| 6 | Styles and variants | Active and carry-over only | Merchandising head |
| 7 | Work centers and BoMs | Styles with open orders | Production manager, CAD lead |
| 8 | Open stock by lot and location | Counted at cut-off | Stores head, finance head |
| 9 | Open purchase orders | Undelivered quantities only | Purchasing |
| 10 | Open sales orders | Undelivered quantities only | Merchandising head |
| 11 | Open manufacturing orders or WIP | Decide: reload, or finish in the old way | Production manager |
| 12 | Open receivables and payables | Per invoice, at cut-off | Finance head |
The cut-off rule
A cut-off rule states the exact moment after which every transaction is entered in Odoo and not in the old system. Write it as a date and time, name what happens to documents in flight (a truck at the gate, an inspection half done), and stop receiving into the old system at that moment. Stock is counted at the cut-off and loaded as it was counted, not as the old system said.
Cleansing
Clean data before it is loaded, never after. The usual work in an apparel migration is listed below.
- Merge duplicate suppliers and materials ("Navy Jersey 180", "Jersey 180 NVY").
- Retire styles with no order in two seasons.
- Give every fabric one purchase unit, and every roll in stock its lot.
- Map old size labels to the new attribute values, one scale at a time.
- Split any "open" order line that is already partly delivered into delivered and open quantities.
Migration template rows for the open polo order
The cut-off is 18:00 on 31 October and Odoo goes live on 1 November. The polo order is confirmed, the fabric is ordered but not yet received, and the buttons are in stock.
Variants (product variant import, one row per size):
External ID,Product Template,Size,Internal Reference,Sales Price p2041_nvy_s,Men's piqué polo P-2041 Navy,S,P2041-NVY-S,4.26 p2041_nvy_m,Men's piqué polo P-2041 Navy,M,P2041-NVY-M,4.26 p2041_nvy_l,Men's piqué polo P-2041 Navy,L,P2041-NVY-L,4.26 p2041_nvy_xl,Men's piqué polo P-2041 Navy,XL,P2041-NVY-XL,4.26 p2041_nvy_xxl,Men's piqué polo P-2041 Navy,XXL,P2041-NVY-XXL,4.26
Open sales order lines:
Order,Product,Quantity,Unit Price,Subtotal SO-P2041,p2041_nvy_s,300,4.26,1278.00 SO-P2041,p2041_nvy_m,750,4.26,3195.00 SO-P2041,p2041_nvy_l,900,4.26,3834.00 SO-P2041,p2041_nvy_xl,750,4.26,3195.00 SO-P2041,p2041_nvy_xxl,300,4.26,1278.00
Open purchase order and stock:
Open PO: P00457, navy jersey 180 GSM, 925 kg ordered, 0 kg received Stock: buttons 15 mm navy, 9,504 pcs, location WH/Stock, no lot
Column names here are illustrative; take the exact headers from the import template your Odoo version offers. The order total must match the confirmed buyer order to the cent, and the merchandising head signs that it does.
Sign-off
Each owner signs a one-page check of their data: record counts against the old system, totals (stock value, open order value, open payables) and five records picked at random and checked on screen. A migration with no signatures is a migration nobody owns when the first figure is wrong.
Part 6Testing
28How should you test an Odoo apparel implementation end to end?
Test an Odoo apparel implementation with end-to-end scenarios that follow one real order from the buyer's PO to cash, run by the factory's key users on migrated data, each step with an expected result written down before the test starts. Testing screens one by one proves the configuration works; only end-to-end scenarios prove the business works.
The 13 scenarios below cover the flows where apparel projects usually break. Run each at least twice: once by the partner to find faults, once by the key users to accept the result.
| # | Scenario | What it proves | Expected result, in short |
|---|---|---|---|
| T1 | FOB order to payment | The whole chain works | Order, purchase, receipt, production, delivery, invoice and payment all reconcile to the order value (Example 21) |
| T2 | CMT order with buyer fabric | Consigned stock stays out of stock value | Fabric received and issued with no change in stock value; the service invoice carries only CM |
| T3 | Prepack order | Packs, pieces and cartons agree | Buyer orders packs, production makes pieces, the packing list shows packs per carton |
| T4 | Shade split in cutting | Dye lots are never mixed | A cut mixing two lots is refused; leftover per lot matches the cut plan (Example 22) |
| T5 | Subcontract embroidery with loss | Out, back and loss reconcile | Panels out, good panels back, rejects recorded with a reason, balance zero |
| T6 | Short shipment within tolerance | Tolerance is applied and invoicing follows the shipped quantity | Shipment accepted, no backorder, invoice on shipped pieces |
| T7 | Over-shipment | The upper limit is enforced | Above the tolerance, the delivery is blocked or needs a named approval |
| T8 | Seconds sale | Second-quality pieces are valued and sold apart | Seconds move to their own product or location and sell at their own price |
| T9 | LC discrepancy | Document checks catch a mismatch | A late shipment date against the LC is flagged before documents are presented |
| T10 | Chargeback | Deductions are coded | A short payment is split by reason and posted to the chargeback accounts (Example 19) |
| T11 | Mid-season spec revision | The approved version is protected | A new BoM version applies to new orders only; the open order keeps its approved version |
| T12 | Cancelled order with committed materials | Committed stock is visible | Fabric already bought shows as free stock with its cost; open purchase orders are listed for decision |
| T13 | FX at month-end | Currency figures close correctly | Realised differences posted; open foreign balances handled as the finance head decided |
Test script: the polo order from sales order to cash
Scenario T1, run on the staging copy with migrated master data. Figures are the ones used throughout this guide.
| Step | Action | Expected result |
|---|---|---|
| 1 | Enter the sales order with the variant grid: S 300, M 750, L 900, XL 750, XXL 300 at 4.26 | 5 lines, 3,000 pieces, USD 12,780.00 |
| 2 | Create a 30% down-payment invoice and register the payment | Invoice USD 3,834.00, paid |
| 3 | Confirm purchase order P00457 for 925 kg navy jersey | Receipt created for 925 kg |
| 4 | Receive 925 kg in three lots A, B, C | Receipt refused without a lot on every line; three lots in stock |
| 5 | Apply the landed costs from Example 15 | Jersey valued at USD 4,502.68 (4.87 per kg) |
| 6 | Create the manufacturing orders and issue fabric by lot | Issue refused without a lot; only existing lots offered |
| 7 | Record production of 3,000 pieces | Finished stock 3,000 at standard cost |
| 8 | Pack and validate the delivery | 302 packages; delivery done for 3,000 |
| 9 | Create the final invoice | USD 12,780.00 less the 3,834.00 down payment = 8,946.00 due |
| 10 | Register the payment at a different exchange rate | Invoice paid; exchange difference posted to the gain or loss account |
| 11 | Run the order's profitability report | Revenue, material and labour cost appear against this order's analytic tag |
Steps 4 and 6 depend on the lot rules per operation type. Step 11 depends on how finance designed analytic tagging.
Test script: shade split at cutting
Scenario T4, using the three dye lots and the cut plan from Example 9.
| Step | Action | Expected result |
|---|---|---|
| 1 | Issue lot A to the cut for XXL 300, XL 750, M 23, S 87 | Issue accepted; lot A shown on the cut |
| 2 | Try to add fabric from lot B to the same cut | Refused, with a message naming both lots |
| 3 | Issue lot B to a new cut for L 900 and S 213 | Accepted |
| 4 | Issue lot C to a new cut for M 727 | Accepted |
| 5 | Return the remaining fabric per lot | Leftover matches the cut plan: A 23.4 m, B 0.3 m, C 0.2 m, each converted with its own lot's factor |
| 6 | Pack size S | Two groups of cartons (lot A 87, lot B 213); no carton holds both lots |
Step 2 needs the cut-control rule from section 24 or an operations layer; standard Odoo lets a user pick any available lot.
Test script: subcontract embroidery with loss
Scenario T5 proves that panels sent out, panels returned and panels lost add up. The polo's chest logo is embroidered outside, with a 1% allowance.
| Step | Action | Expected result |
|---|---|---|
| 1 | Confirm the subcontract PO for 3,000 embroidered fronts | A resupply order for 3,030 cut fronts (3,000 plus 1%) |
| 2 | Validate the resupply | 3,030 fronts at the embroiderer's location |
| 3 | Receive 3,004 good fronts and 26 rejects | 3,004 embroidered fronts in stock; 26 recorded as scrap with the reason "thread break" or "misplacement" |
| 4 | Check the balance at the embroiderer | 0 fronts left; 26 rejects inside the allowance of 30 |
| 5 | Receive the embroiderer's bill | Billed for 3,000 good pieces, as the PO says |
Test script: short shipment within tolerance
Scenario T6 proves that a short shipment inside the buyer's tolerance is invoiced on what shipped. The buyer allows ±3%; the factory ships 2,940 pieces, 30 short in M and 30 short in L.
| Step | Action | Expected result |
|---|---|---|
| 1 | Validate the delivery for 2,940 of 3,000 | Short by 60 pieces, which is 2.0%; inside the 3% tolerance |
| 2 | Choose not to keep a backorder | No open delivery remains for the 60 pieces |
| 3 | Create the final invoice | 2,940 × 4.26 = USD 12,524.40, less the 3,834.00 down payment = 8,690.40 due |
| 4 | Repeat with 2,900 pieces | Short by 3.3%; delivery blocked or needs a named approval |
Step 4 of T6 needs the tolerance check from section 24; standard Odoo has no quantity-tolerance field on a sales order.
Part 7Training, go-live and hypercare
29How should you train a garment factory's staff on Odoo?
Train each role only on the screens and scenarios it will use, in the local language, on the factory's own styles and orders, and have key users teach their colleagues. A merchandiser does not need the accounting menus, and a floor supervisor needs one screen that works, not an introduction to Odoo.
Train close to go-live, so that what people learn is still fresh, but not so close that there is no time to repeat a session. Keep each session short and practical: people learn by entering an order they recognise.
A training plan by role
An example plan for the polo factory. Hours are practice, not a standard; adjust them to the team and the scope.
| Role | What they learn | Hours | Pass when they can |
|---|---|---|---|
| Merchandisers | Sales orders with the variant grid, order changes, delivery status | 6 | Enter the polo order from the buyer PO without help |
| Purchasing | Purchase orders, units, vendor bills, landed costs | 6 | Buy 925 kg of jersey and apply the import charges |
| Stores | Receipts with lots, issues to production, returns, counts | 8 | Receive three dye lots and issue each to its cut |
| Production planners | Manufacturing orders, work orders, subcontracting | 6 | Run the embroidery resupply and receipt |
| Quality | Quality checks and holds (Enterprise) | 4 | Hold a lot in quality control and release it |
| Shipping | Packing, packages, delivery documents | 4 | Pack by lot and print the packing list |
| Finance | Invoices, down payments, payments, exchange differences, reports | 10 | Take the polo order from down payment to closed |
| Key users | All of the above for their area, plus first-line support | 16 | Teach their team and log issues correctly |
Floor operators and supervisors are trained on whatever captures floor output. If that is a kiosk or scanner screen, the training is minutes, not hours; if it is Odoo's office forms, expect the data never to arrive.
30What does an Odoo cut-over plan look like for a garment factory?
An Odoo cut-over plan is a day-by-day list of the steps that move the factory from the old system to Odoo: freeze, final loads, stock count, opening balances, checks and the first live transactions, each with an owner and a go or no-go point. Rehearse it once in full on a copy before the real weekend.
A cut-over plan, day by day
The polo factory goes live on 1 November, before the polo fabric arrives on 10 November and cutting starts on 17 November. A template, to adapt.
| Day | Date | Steps | Owner |
|---|---|---|---|
| T−10 | 22 Oct | Rehearsal load complete; open issues reviewed; go or no-go for the plan | Factory project lead |
| T−7 | 25 Oct | Master data frozen in the old system; final load of partners, materials, styles, BoMs | Merchandising head, stores head |
| T−3 | 29 Oct | Open purchase and sales orders extracted and checked against source documents | Purchasing, merchandising |
| T−1 | 31 Oct | Cut-off at 18:00: no more receipts or issues in the old system; physical count of fabric by lot and roll, trims and finished goods | Stores head |
| T0 | 1 Nov, morning | Load counted stock by lot, open orders and open receivables and payables; owners sign totals | All owners, finance head |
| T0 | 1 Nov, noon | Go or no-go by the sponsor on the signed checks | Sponsor |
| T0 | 1 Nov, afternoon | First live transactions: one receipt, one issue, one sales order, one invoice | Key users |
| T+1 | 2 Nov | Daily issue meeting starts; partner on site | Factory project lead |
| T+9 | 10 Nov | Polo fabric received in Odoo with lots: the first real test of the lot rules | Stores head |
The fall-back decision belongs at the noon go or no-go: if the counted stock and the open orders do not reconcile, the factory keeps working in the old system for another week rather than going live on figures nobody trusts.
31When should a garment factory go live on Odoo, and how long is hypercare?
Go live between seasons, in the lowest-volume weeks and before a new wave of cutting starts, and keep the partner in close support until at least the first month-end close is done in Odoo. Hypercare is the period right after go-live when the project team stays on hand to fix issues daily.
- Timing. Avoid the weeks before a main shipment window, the month-end of the financial year, and any audit. A go-live in peak season turns every small fault into a missed shipment.
- Parallel running. A short, bounded parallel run of the books can help finance compare figures. Running the whole factory in two systems rarely works, because people keep using the one they trust.
- Duration. Practitioners commonly plan hypercare of four to eight weeks. That range is judgement, not a measured standard; the rule that matters is that nobody leaves before the first month-end close in Odoo is complete.
- Issue log. Keep one list: date, who, what happened, severity, owner, status. Review it daily in the first two weeks.
- Exit criteria. Hypercare ends when the month-end closes on time, no issue blocks shipping or invoicing, and key users handle first-line questions without the partner.
Part 8Risks
32What are the most common mistakes when implementing Odoo for apparel?
The most common mistakes in apparel Odoo projects are variant explosion, one kg-to-metre factor for every fabric, one average consumption for all sizes, dye lots not enforced at cutting, and Community chosen when Enterprise features were needed. The list below comes from implementation practice, not from Odoo's documentation.
- Variant explosion.Too many attributes on Instantly, or attributes added after go-live.
- One conversion factor for all fabrics.Stock value looks right while the cutting room runs short.
- All sizes on one fabric quantity.Large sizes run short and small sizes leave surplus.
- Dye lots not enforced at issue.Shade differences are found at final inspection instead of at cutting.
- The manufacturing order used as the production plan.Line balancing, operation times and bundle flow need their own place.
- Ratio cartons and buyer packing lists underestimated.Assorted cartons are not a native concept.
- Community chosen, Enterprise features needed.Barcode, quality and shop-floor screens are rebuilt at a higher cost.
- Heavy Studio changes on core models.Every version upgrade gets harder.
- Multi-step subcontracting modelled as one step.Goods disappear between processors.
- Version mixing around Odoo 19 units.A unit design or integration written for 17 or 18 is deployed on 19, where unit categories and the purchase unit are gone.
- External API access not checked against the plan.An integration is designed before anyone confirms the subscription includes API access.
The 15 general failure modes, and how each shows up in Odoo
Apparel ERP projects fail in the same fifteen ways whatever the ERP. The table maps each one to where it appears in an Odoo project and how to prevent it.
| # | Symptom | Root cause | How it shows in Odoo | Prevention |
|---|---|---|---|---|
| 1 | SKU swamp | Every variant created as an independent item | Tens of thousands of product.product records on Instantly | Style as template; Dynamically or a style-colour template (section 11) |
| 2 | Large sizes short of fabric | Average consumption | One BoM quantity for all sizes | Size-graded consumption (section 14) |
| 3 | kg and m never reconcile | Fixed conversion | One factor per product, or none | Per-lot conversion from GSM and width (section 12) |
| 4 | Shade mixing | No shade rule at issue | Any lot can be picked for a manufacturing order | Lot as dye lot, existing lots only at issue, cut control (section 13) |
| 5 | Costing illusion | Quote, standard and actual not linked | Standard cost on the garment, no quote to compare | Keep the quote beside the actuals per order (section 18) |
| 6 | Buyer fabric counted as owned | CMT fabric received like a purchase | Stock value includes the buyer's fabric | A deliberate consigned-stock design (section 4) |
| 7 | Goods lost at subcontractors | Out and back not linked | One subcontract step for a chain of processors | Intermediate products per step (section 17) |
| 8 | Produced is not shippable | No output grading | Every produced piece counts as finished stock | Grade output; ship on first quality only (section 19) |
| 9 | Spec drift | Revision not linked to the order | BoM edited while an order is open | Versioned BoMs; the approved version fixed per order |
| 10 | Excel shadow system | No T&A or order view | Merchandisers keep their sheets | Provide the view, in Odoo or an operations layer (section 16) |
| 11 | Chargeback leakage | No reason codes | Short payments written off to one account | Reason-coded write-offs (section 21) |
| 12 | LC discrepancies | LC terms not linked to the shipment | No LC object | LC record and a document check before presenting |
| 13 | Floor data never arrives | Office screens on the floor | Supervisors asked to fill in work orders | Kiosk, scanner or a floor system (section 15) |
| 14 | Big-bang in peak season | A plan-driven date | Go-live during a shipment window | Go live between seasons, with a rehearsed cut-over (section 30) |
| 15 | Migrated garbage | Legacy loaded as it was | Duplicates in partners and materials | Cleanse first; owners sign off (section 27) |
33What must be decided before an Odoo apparel go-live?
Decide the variant model, the unit design for every fabric, the lot rules, the costing method per category, the hosting, and which system owns sampling, T&A and floor capture before go-live, because each is expensive to change once transactions exist. The full list:
- The attribute set per product category, and the variant creation mode of each attribute.
- Style as the template, or style-colour as the template with size as the only attribute.
- The unit design for every fabric and yarn, and how kg-to-metre is converted.
- Lot, serial or package for rolls; which lot fields are mandatory at receipt.
- Lot rules per operation type: new lots at receipt, existing lots only at issue.
- Costing method per product category, and which categories take landed costs.
- Hosting: Odoo Online allows no custom Python modules, Odoo.sh allows custom modules through Git, on-premise gives full control and full upgrade responsibility. Apparel projects almost always need custom modules.
- What stays in Studio and what is written as a version-controlled module.
- Which system owns sampling, T&A, planning, floor capture and quality: Odoo, custom modules or an operations layer.
- How buyer-supplied fabric is held so it never enters stock value.
- The quantity tolerance rule and who may approve a shipment outside it.
- How profitability per order is tagged.
- Whether the subscription includes the API access the integrations need.
Part 9Integration and API
34Which Odoo API should an apparel integration use, by version?
Build new integrations for Odoo 19 and later on the JSON-2 API, and keep an XML-RPC or JSON-RPC adapter for customers still on Odoo 17 and 18. The version decides the endpoint, the authentication and even some field names.
| Odoo version | API to build on | Notes |
|---|---|---|
| 17, 18 | XML-RPC / JSON-RPC | /xmlrpc/2/object, execute_kw with search_read, create, write |
| 19 and later | JSON-2 API | POST /json/2/<model>/<method>, API key sent as a bearer token |
Odoo 19 deprecates XML-RPC and JSON-RPC, and Odoo has announced their removal in Odoo 22 and Odoo Online 21.1. Build new integrations on JSON-2 where the customer runs 19, and keep an RPC adapter for customers on 17 and 18.
- Log in as a dedicated integration user with an API key and only the access groups it needs.
- Link records by Odoo's integer
idor an external ID. Never by the order reference or product code, which users can edit. - Pin field names per version. Fields are renamed between versions and a field map written for 17 can break on 19.
- Push and pull. Since Odoo 17, automation rules can send a webhook notification. Polling on
write_datestays the dependable baseline, so make the receiving side safe to call twice.
Core models an operations system reads and writes: res.partner, product.template, product.product, sale.order, purchase.order, stock.picking, stock.lot, mrp.production, mrp.bom, account.move.
Before building, confirm the customer's plan includes external API access; Odoo's pricing page lists it under the Custom plan at the time of checking. Where it does not, a scheduled file exchange is the alternative.
One purchase request, from MerchandiserOS to Odoo and back
- In MerchandiserOS, request
PR-1042for 925 kg of navy jersey is approved. - Odoo's integration job collects it:
GET /api/v1/erp/documentsreturns the request with quantities, units and the supplier code. - Odoo creates purchase order
P00457(record id 457) and confirms it. - Odoo sends the answer back:
POST /api/v1/erp/po-status
Idempotency-Key: odoo-po-457-confirm
{"rows": [{"request_ref": "PR-1042",
"erp_po_id": "457",
"erp_po_number": "P00457",
"status": "Purchase Order",
"date": "2026-10-21"}]}
- A person in MerchandiserOS approves it on the ERP review list. The request now shows "Odoo PO P00457, open".
- Odoo reads the decision back from
GET /api/v1/erp/proposals/{id}.
The link is stored on Odoo's record id 457, not on the text P00457, so renaming the PO in Odoo breaks nothing. No price travels in this exchange.
Part 10If you don't manufacture
35If you don't manufacture: brands, buying agents and own-label retailers
This part is for businesses that design, source or sell garments while factories make them: brands and wholesalers, buying agents and buying houses, and retailers developing their own label. They need Odoo for purchasing, landed cost, selling and the books, and they can skip most of the manufacturing setup in Parts 3 and 4.
The polo order in this guide looks different from their side of the table. The factory sees 3,000 polos to make. A brand sees 3,000 polos to buy at USD 4.26 FOB, bring into its warehouse and sell to retailers. A buying agent sees an order it placed for a client, which it must follow through samples, production and inspection, and on which it earns a commission. Neither of them cuts fabric, so neither needs size-graded BoMs, work centers or dye-lot rules at cutting. Both still meet the wall described in section 2, because their hardest work also happens before and around the transaction.
| Business | What it does | What it records in Odoo | What it never does in Odoo |
|---|---|---|---|
| Brand or wholesaler | Designs and sells under its own name; factories make for it on FOB or CMT terms | Purchase orders to factories, receipts into its warehouse, landed cost, vendor bills and payments, wholesale sales orders, invoices, credit notes | Make garments; it owns no sewing line |
| Buying agent or buying house | Sources and follows orders for overseas buyers across many factories; earns a commission | Commission invoices, expenses, payments, multi-currency | Hold stock or owe the factory for the goods |
| Own-label retailer | Develops garments under its own label and buys them from factories for its stores or website | The buying side, like a brand: purchase orders, landed cost, receipts into the distribution centre, vendor bills | Make garments; store operations sit in retail systems |
One distinction decides the whole Odoo design for these businesses: whether the business takes ownership of the goods. A brand and an own-label retailer do, so they need stock, landed cost and payables. A buying agent does not, so for the agent Odoo is an invoicing and accounting system and little else. When people search for an "ERP for fashion brands" or an "ERP for clothing brands", they usually mean the first case; "buying house ERP" and "sourcing agent software" usually mean the second, where the real need is order follow-up across factories.
36Which Odoo apps does a fashion brand or buying agent need, and which can it skip?
A brand needs Odoo Purchase, Inventory, Sales and Accounting; a buying agent usually needs only Sales or Invoicing and Accounting; neither needs work centers, routings or the manufacturing setup a factory builds. The table is our recommendation from implementation practice; confirm the plan and edition against the pricing page before quoting.
| Odoo app | Brand or own-label retailer | Buying agent |
|---|---|---|
| Purchase | Yes: purchase orders to factories, one line per variant | No; the buyer places the order with the factory |
| Inventory | Yes: receipts into the warehouse, landed costs, stock value | No; the agent holds no stock |
| Sales | Yes: wholesale orders with variant grid entry | Optional: a commission can be invoiced from a sales order or straight from Accounting |
| Accounting | Yes: vendor bills, payments, multi-currency, credit notes | Yes: commission invoices, payments, exchange differences |
| Manufacturing (MRP) | Only if the brand supplies fabric to a CMT factory and uses subcontracting; otherwise skip | Skip |
| Work centers, routings, work orders, Shop Floor | Skip | Skip |
| Quality | Usually skip; inspections happen at the factory (section 37) | Skip |
Buying from factories on FOB and CMT terms
A brand buying finished garments on FOB terms raises an Odoo purchase order to the factory for the finished style, one line per colour and size variant, and pays the factory's vendor bill. The style and its variants are set up exactly as in section 11, but the product carries the Buy route instead of Manufacture. Odoo documents grid entry on sales orders; on purchase orders it is not documented as a core feature, and third-party apps add it, so a brand ordering 25 sizes and colours per style should test how its buyers will key a purchase order.
An Incoterm, such as FOB, can be set on invoices and vendor bills in the Other Info tab, with an Incoterm location, per Odoo 18's Incoterms page. The Incoterm tells finance who pays the freight and insurance after the goods leave the factory, which decides which landed costs the brand must add.
When the brand buys the fabric itself and pays a factory only to cut and sew (CMT), the brand's fabric goes to the factory and garments come back. In Odoo that is the resupply or dropship subcontracting flow from section 17, which is part of the Manufacturing app: install it for the subcontracting BoM and leave work centers and routings off. Where the factory ships straight to a retailer, Odoo's documented dropship route turns a sales order into a request for quotation to the vendor, so the goods never enter the brand's warehouse.
Brands commonly pay a factory a deposit before production. Odoo's documented down-payment flow is on the sales side (section 21); how a deposit to a factory is recorded and later matched to the vendor bill is a design point for finance. Import letters of credit opened for a factory need the same custom record as the export credits in section 21, because Odoo has no letter-of-credit object.
How do fashion brands calculate landed cost in Odoo?
A brand calculates landed cost in Odoo the same way a factory does for fabric: each import charge is a Service product flagged "Is a Landed Cost", applied to the receipt of the garments with a split method, and the garment's product category must use AVCO or FIFO. The documented split methods are Equal, By Quantity, By Current Cost, By Weight and By Volume (section 18).
The difference for a brand is the category. A factory usually holds finished garments at standard cost, but landed costs apply only to AVCO or FIFO categories, so a brand that imports garments should put them in an AVCO or FIFO category from the start.
The brand's view: landed cost of 3,000 polos into its warehouse
The brand buys the polo order from the factory at USD 4.26 FOB and ships it to its own warehouse. Freight, duty and clearing rates are illustrative; take the real duty from your tariff line and your customs broker.
| Line | Basis (illustrative) | Split method | USD |
|---|---|---|---|
| Purchase order, 3,000 polos | 3,000 × 4.26 FOB | 12,780.00 | |
| Sea freight and insurance | The order's share of a shared container | By Volume | 540.00 |
| Import duty | 12% of the FOB value | By Current Cost | 1,533.60 |
| Customs clearing and brokerage | Per entry | By Current Cost | 180.00 |
| Haulage from port to warehouse | Per truck | By Volume | 150.00 |
| Landed cost of the order | 15,183.60 |
Landed charges = 540.00 + 1,533.60 + 180.00 + 150.00 = 2,403.60
Landed cost = 12,780.00 + 2,403.60 = 15,183.60
Per polo = 15,183.60 ÷ 3,000 = 5.0612 → USD 5.06
Uplift on FOB = 2,403.60 ÷ 12,780.00 = 18.8%
Because every size costs the same 4.26, each split method gives every polo the same share, 2,403.60 ÷ 3,000 = 0.8012. By size, the receipt takes S 300 × 0.8012 = 240.36, M 750 × 0.8012 = 600.90, L 900 × 0.8012 = 721.08, XL 600.90 and XXL 240.36, which adds back to 2,403.60. The split methods matter once a container carries several styles.
Margin on FOB = 11.00 − 4.26 = 6.74 = 61.3%
Margin on landed cost = 11.00 − 5.0612 = 5.94 = 54.0%
A brand that prices from the FOB price overstates its margin by more than seven points on this order. Odoo carries the right cost into stock value only if the landed costs are applied to the receipt before the first sale.
Selling wholesale to retailers
A brand sells wholesale on Odoo sales orders, and the variant grid lets a sales team key a retailer's order by colour and size on one screen (section 11).
Large retailers usually trade by EDI: the purchase order (850), the advance ship notice (856) and the invoice (810). We did not find retail EDI among the standard apps in Odoo's documentation. Plan for a third-party connector or an EDI provider, and check that it supports your Odoo version and each retailer's rules.
Retailers also deduct chargebacks for late delivery, label errors or a wrong ship notice. Record each accepted deduction as a credit note against the invoice: in Odoo 18, the Credit Note button on a posted customer invoice opens a dialog with a Reason field, which is where the chargeback reason goes. Use one fixed list of reasons, so that finance can see whether the brand loses money to lateness, labels or ship notices. A deduction the brand disputes stays open on the invoice until it is settled.
Can Odoo handle a buying agent's commission?
Yes. A buying agent invoices its commission in Odoo as a service product on a customer invoice to the buyer, with no stock, no receipt and no vendor bill for the goods. Create a service product such as "Buying commission" in an income account, invoice it in the buyer's currency, and let multi-currency book any exchange difference when the buyer pays.
Commission is often earned on the shipped value. Agree the basis with each buyer and write it into the invoice description. Some agents are paid by the factory instead of the buyer; then the same service invoice goes to the factory. Either way, the agent never owes the factory for the goods, so Odoo holds no payable for them.
The buying agent's view: commission on the polo order
A buying agent placed the polo order with the factory for its client, the brand. The agent's commission is an illustrative 5% of the FOB value, invoiced to the buyer after shipment.
| Line on the agent's invoice | Quantity | Unit price | USD |
|---|---|---|---|
| Buying commission, style P-2041, 3,000 pcs at FOB 4.26, 5% | 1 | 639.00 | 639.00 |
| Invoice total | 639.00 |
If commission is on shipped value and 2,940 pcs ship (scenario T6):
2,940 × 4.26 × 0.05 = 12,524.40 × 0.05 = USD 626.22
In the agent's Odoo there is one customer invoice and one payment. There is no purchase order, no receipt, no stock and no payable to the factory. The 12,780.00 of goods passes between the brand and the factory and never touches the agent's books. Everything that earned the 639.00 (the lab dips, the PP approval, the inspection, the shipment follow-up) happened outside Odoo.
37What does Odoo handle poorly for brands and buying agents?
Odoo handles the transactions of a brand or agent well, and handles poorly the work that decides whether those transactions go right: development and sampling with many factories, T&A across factories, following production that happens elsewhere, inspections at the vendor, and one status for each order across many factories and buyers. These gaps are larger for a brand than for a factory, because none of this work happens in the brand's own building.
| Need | Why it matters for a brand or agent | What Odoo offers |
|---|---|---|
| Development and sampling with many factories | One style is sampled at two or three factories before the order is placed; lab dips and fit samples go back and forth with each | No sample or approval object (section 16); projects, helpdesk or custom work |
| T&A across factories | Forty orders at twelve factories, each with its own lab dip, PP and ex-factory dates | No T&A object; a spreadsheet or a custom module |
| Following production elsewhere | The brand needs to know cutting has started and how many pieces are sewn, at a factory it does not run | The purchase order shows ordered and received; nothing between |
| Inspections at the vendor | Final AQL happens at the factory, often by the brand's own QC or a third party, before the goods are released | Quality checks attach to the brand's own receipts, which arrive weeks after the inspection that mattered (section 19) |
| One status per order | A merchandiser answers "where is it?" for every order, every day, across factories and buyers | Separate purchase orders, receipts and invoices; the status lives in someone's spreadsheet |
From practice, this is why many brands and buying houses keep Odoo lean and run order follow-up in a separate tool. It is the same answer as for a factory: the ERP keeps the books, and a system built for the work runs the work.
38How does MerchandiserOS fit a brand or buying agent on Odoo?
MerchandiserOS runs a brand's or buying agent's development, samples and approvals, T&A, the orders placed with factories, sourcing, the planning view across subcontracted factories, quality inspections and shipping follow-up, while Odoo keeps the books. It is the same split as for a factory (section 39), seen from the buying side, and it suits private label sourcing as much as a brand's own collection.
MerchandiserOS offers workspace set-ups for a Brand and a Buying agent alongside the factory set-ups, so the screens start from how that business works.
| Area | Runs in MerchandiserOS | Recorded in Odoo |
|---|---|---|
| Development | Styles with versions, tech pack sections, graded measurements with tolerances, colourways and lab dips, the bill of materials by category | The finished item, once it is bought or sold |
| Samples and approvals | Lab dip, strike-off, sample and shipping-mark approvals, round by round, with parcel and courier details and the buyer's verdict | Nothing |
| Costing and quotations | The cost build to FOB with landed cost and dated exchange rates, quotations and approval gates | Nothing until an order exists |
| Orders with factories | Buyer POs as parent records, orders with size-by-colour breakdown, tolerance band and per-shipment deliveries; purchase requests and purchase orders to suppliers | The purchase order as a financial record, the vendor bill and the payment |
| T&A and planning | T&A with the critical path; the planning heat-map across lines and subcontracted factories | Nothing |
| Quality | Typed inspections, including final AQL on ISO 2859-1 at the buyer's level, and CAPA | Nothing; the goods are released or held |
| Shipping follow-up | Shipments per delivery and ship clearance against the buyer's terms | The receipt, the landed costs, the invoice and the credit notes |
| Commission (agents) | The orders the commission is earned on | The commission invoice and the payment |
The two connect the same way as for a factory: through the MerchandiserOS ERP API or a file exchange. A person approves every change that comes back from Odoo, and money amounts stay in Odoo. Retail back-office work (stores, point of sale, allocation to stores and open-to-buy planning) is outside MerchandiserOS's scope. A retailer keeps that in its retail systems, and MerchandiserOS covers the sourcing and follow-up up to the goods leaving the factory.
Part 11The recommended model
39The operations layer: what runs on top of Odoo
The simplest way to run a garment factory on Odoo is to let Odoo keep the books and run operations, from style to shipment, in a system built for apparel. Parts 3 to 7 of this guide show what it takes to bend Odoo toward garment production instead. This is the model we recommend: let Odoo do what it does best, the books, and give the factory's operations to a system built for them.
The polo order with operations on top
| Step | In MerchandiserOS | What Odoo sees |
|---|---|---|
| Tech pack and quote | Style P-2041, graded measurements, cost build at 4.26 FOB | Nothing yet |
| Samples | Three lab dip rounds, strike-off, PP approved 14 Nov and locked to spec version 3 | Nothing |
| Order | 3,000 pieces by size, T&A calendar to 15 Dec | Sales order for invoicing |
| Procurement | 925 kg jersey, trims, embroidery; receipts measured per roll and dye lot | Purchase orders, receipts, payables |
| Planning and production | Line booked, cut by dye lot, job cards by department | Material issued, for stock value |
| Shop floor | Output per line per hour, on MerchandiserOS floor screens or from Garment.io | Nothing |
| Quality | Final AQL at level II, 2.5: 125 pieces inspected; only first-quality pieces ready to ship | Nothing |
| Logistics | Cartons packed by lot, ship clearance against the buyer's terms | Delivery and customer invoice |
| After shipment | Quote against actuals for fabric, minutes and rejects | Payment received, reported back |
Who does what
Each area has one home. MerchandiserOS runs the work; Odoo records the financial result.
| Area | Runs in MerchandiserOS | Recorded in Odoo |
|---|---|---|
| Style | Tech pack, versions, graded measurements with tolerances, colourways, bill of materials by category, fabric and yarn specs, consumption from marker efficiency and shrinkage | The finished-goods item, once released |
| Samples and approvals | Lab dips, strike-offs, trims, fit, size set and PP samples, round by round with courier and buyer verdict; an approved PP sample locks the spec version the order is built to | — |
| Quotation | Cost build (fabric, trims, CM, washing, testing, freight, landed cost, margin) and the quote to the buyer | Nothing until an order exists |
| Orders | Buyer POs, size-by-colour breakdown, ratio packs, quantity tolerance, delivery drops, T&A calendar | The sales order, for invoicing |
| Procurement | Material requirements across the order book, purchase requests, supplier POs, receiving with shade and lot measurements | The financial purchase order, the payable, stock value |
| Planning | Line and subcontractor capacity, production orders, the critical path from ship date back | — |
| Production | Job cards by department, material issue and return, WIP by stage, subcontract steps | Material movements, for stock value |
| Shop floor | MerchandiserOS floor screens, or Garment.io feeding output and actual minutes in | — |
| Quality | Inspections from incoming fabric to final AQL on ISO 2859-1 at the buyer's level; only first-quality pieces count as shippable | — |
| Logistics | Shipments per delivery, packing and cartons, ship clearance against the buyer's terms | The dispatch and the customer invoice |
A day in the life, department by department
With operations on top, each department works in the tool built for its job, and finance works in Odoo. This is what a normal day looks like on the polo order.
| Department | What they do in MerchandiserOS | What reaches Odoo |
|---|---|---|
| Merchandising | Records the buyer PO as the parent record, the order with its size-by-colour breakdown and tolerance band, moves the quantity from provisional to confirmed, splits deliveries per shipment and watches the T&A critical path | The sales order, once confirmed |
| Development | Keeps style P-2041 with its versions, tech pack sections and graded points of measure; logs each lab dip and strike-off round with courier details and the buyer's verdict; the approved PP round locks the style version for the order | Nothing |
| Costing | Builds the cost from fabric to FOB with landed cost and dated exchange rates, keeps the standard cost sheet, sends the quotation through approval gates with thresholds | Nothing until the order exists |
| Purchasing and stores | Runs net-to-buy across the order book, raises purchase requests, receives against the purchase order, records the measured lot (GSM, width, shrinkage) and judges it against the shade band, issues and returns material; suppliers carry their qualification | Purchase requests become Odoo purchase orders; receipts and issues for stock value |
| Planning | Loads lines and subcontractors on the 52-week heat-map, opens production orders with job cards per department | Nothing |
| Production floor | Captures output on kiosk floor screens and follows the WIP board; or reads output and actual minutes from Garment.io | Nothing |
| Quality | Runs incoming, cutting, PP, DUPRO, measurement and final AQL inspections on ISO 2859-1 at the buyer's level, raises CAPA, keeps needle and metal control, grades output so only first quality ships | Nothing; the shipment is cleared or held |
| Shipping | Packs and cartonises per delivery, clears the shipment against the buyer's terms | The dispatch, from which the invoice is raised |
| Finance | Works in Odoo: invoices, payables, payments, stock value, tax and e-invoicing | Odoo is the record; PO numbers, payment dates and invoice status go back |
What changes in the Odoo project
With operations on top, the hard parts of this chapter mostly move out of Odoo. You no longer need variant-heavy BoMs, size-graded consumption, shade control at cutting or multi-step subcontracting inside Odoo. Odoo keeps accounting, purchasing as the financial record, invoicing, payments, stock value and local tax. The project is smaller, the upgrade path stays clean, and the factory's floor and merchandising teams work in a tool built for their day.
Measured against the custom modules in section 24, the Odoo project no longer needs to build:
- Fabric units and lot attributes (GSM, width, shade group per roll).
- Size-consumption generators for BoMs.
- Cut control, cut orders and bundles.
- Ratio packs, cartonisation and quantity-tolerance checks.
- Sampling, approvals and T&A.
- Chained subcontracting with loss allowances.
- AQL inspection and logged overrides.
What stays in the Odoo project: finance design, letters of credit, chargeback reasons, local statutory reports, e-invoicing and the connection to the operations layer.
How they connect
Odoo and MerchandiserOS connect through the MerchandiserOS ERP API or a file exchange, and the shop floor connects through MerchandiserOS.
- Odoo ↔ MerchandiserOS. Odoo collects purchase requests and sales orders from MerchandiserOS and sends back its purchase-order numbers, payment dates and invoice status through the MerchandiserOS ERP API. A person approves every change from Odoo before it lands, and money amounts stay in Odoo. A file exchange does the same job with no programming.
- Shop floor. Factories without a floor system use MerchandiserOS's own floor screens. Factories running Garment.io keep it: MerchandiserOS integrates with Garment.io, sending orders and styles to the floor and reading output and actual minutes back.
·Frequently asked questions about Odoo for garment manufacturing
These are the questions consultants and factory managers ask most often about Odoo for apparel. Each answer stands on its own.
How do I manage sizes and colours in Odoo?
Turn on Variants in the Odoo Sales settings, create a Colour attribute and a Size attribute, and add them to each style's product template on its Attributes & Variants tab; Odoo then treats each colour-size combination as a variant. Use one size attribute per size scale, so alpha sizes, waist sizes and cup sizes never share values. Set the variant creation mode per attribute to control how many variants exist, and lock the attribute set before go-live, because adding an attribute later disrupts existing variants.
What is the difference between Odoo's "Instantly" and "Dynamically" variant creation, and which should a garment factory use?
"Instantly" creates every colour-size combination as soon as the values are added, while "Dynamically" creates a variant only when that combination is added to a sales order. A garment factory with wide size ranges should usually choose "Dynamically" for sizes, or make the style-colour the template, because "Instantly" with 10 colours, 12 sizes and 3 inseams creates 360 variants per style. The trade-off is that a variant created dynamically does not exist for planning or stock before its first order.
How does subcontracting work in Odoo: basic vs resupply?
In basic subcontracting the subcontractor supplies everything and the subcontracting BoM needs no components; in resupply subcontracting you send the components, such as cut panels, from your own stock. In resupply, confirming the purchase order to the subcontractor creates a receipt and a resupply order that sends the components to the subcontractor's location, and receiving the finished goods consumes them. Odoo also documents a third workflow, dropship to subcontractor, where your supplier ships components straight to the subcontractor. The feature is switched on under Manufacturing ‣ Configuration ‣ Settings.
How do I configure landed costs in Odoo for imported fabric?
Enable Landed Costs under Inventory ‣ Configuration ‣ Settings (Valuation), create freight, clearing, duty and bank charges as Service products with "Is a Landed Cost" ticked, and apply them to the fabric receipt with a split method: Equal, By Quantity, By Current Cost, By Weight or By Volume. The fabric's product category must use AVCO or FIFO costing. In this guide's worked example, USD 695 of import charges raised navy jersey from USD 4.20 to USD 4.87 per kg, which is why a garment quote should be priced on landed material cost.
Can Odoo track fabric by lot or batch number?
Yes. Enable Lots & Serial Numbers in the Odoo Inventory settings, set each fabric to track "By Lots", and treat each lot as one dye lot so that cutting never mixes shades. Each operation type can allow new lots (at receipt) or only existing lots (at issue to production). Roll-level details such as measured GSM, width and shade group are not standard lot fields and need custom fields or another system.
Is Odoo good for a clothing or fashion manufacturing business?
Odoo is a good fit for small and mid-size clothing manufacturers that want one system for sales, purchasing, stock, manufacturing and accounting and have a capable partner or developer. It handles colour-size variants, lots, subcontracting, landed cost, down payments and multi-currency as standard. Tech packs, sampling approvals, T&A calendars, size-graded fabric consumption, shop-floor capture and AQL inspection need custom modules or a separate operations system.
What is a size/colour matrix and does Odoo support matrix order entry?
A size/colour matrix is a grid with colours on one axis and sizes on the other, into which the quantity for each combination is typed. Odoo Sales supports matrix (grid) entry on quotations and sales orders for products with at least two variants. Grid entry on purchase orders is not documented as a core feature; third-party apps on the Odoo Apps store add it.
How many BOM levels does Odoo support for a multi-component garment style?
Odoo supports multilevel BoMs, in which a sub-assembly such as an embroidered front panel has its own BoM and is a component of the garment's BoM, and its documentation does not state a limit on the number of levels. Odoo recommends building multilevel BoMs from the bottom up and triggering sub-assembly orders with reordering rules, or with the Replenish on Order (MTO) and Manufacture routes. In practice, garments rarely need more than a few levels: fabric, cut or printed panel, garment and pack.
Which Odoo manufacturing features are Enterprise-only vs Community?
On Odoo's editions page, the Manufacturing (MRP) app and Maintenance are in both editions, while Shop Floor (with the manufacturing control panel and scheduling), PLM, Quality, Barcode and Studio are Enterprise-only. Community still covers BoMs, manufacturing orders, work centers, subcontracting, variants and lots. Check the editions page for your version before quoting a client.
How do I set up units of measure (kg, metre, dozen, pair) in Odoo?
In Odoo 17 and 18, enable Units of Measure in the Inventory settings and group units into categories; Odoo converts only within a category, so a dozen or a gross converts to pieces, and a pair can be set up as a count unit, but kilograms and metres cannot convert to each other. For knit fabric bought in kilograms and cut in metres, use a factor per fabric or per lot from the formula metres per kg = 1000 ÷ (GSM × width in metres). Odoo 19 removed unit categories and the separate purchase unit, so check any unit design on that version.
Does Odoo support quality checks at each production stage (cutting, stitching, dyeing)?
Yes, with the Odoo Quality app (Enterprise): quality control points can be attached to receipts, deliveries and specific manufacturing operations such as cutting or stitching, with pass-fail, measure, instruction, picture and worksheet checks. Dyeing and printing usually happen at an outside dye house or printer, so those checks sit on the receipt of the goods coming back. Odoo Quality samples by percentage or period and does not include ISO 2859-1 AQL tables, which need custom work.
How much does Odoo cost for a garment manufacturing company?
The cost depends on the edition, the plan, the number of users, the hosting, and the partner work and custom modules the project needs; Odoo publishes its licence prices at odoo.com/pricing. At the time of checking, Odoo's Custom plan is the one that lists Studio, multi-company and external API access, and Odoo.sh hosting is charged separately. In our experience, implementation and the upkeep of custom modules through upgrades weigh more in an apparel budget than licences.
Odoo vs ERPNext: which is better for garment manufacturing?
Neither is better for every factory. Odoo offers Quality, PLM and Shop Floor in its Enterprise edition, while ERPNext is open source under GPL-3.0 but, has needed a BOM per variant for subcontracting (a fix was merged on GitHub in September 2026, so check whether your release includes it). Both handle style templates with variants, subcontracting, lots and landed cost, and neither covers sampling, T&A, size-graded consumption or AQL out of the box, so choose on the fit-gap, the partner and local compliance.
Can Odoo handle custom or made-to-measure sizes as a variant?
Partly. An attribute value can be marked "Is custom value", which lets the customer type their own specification for that value on the order. Odoo's documentation describes this as a way to capture the specification; it does not describe it changing the BoM or fabric consumption, so made-to-measure garments whose measurements must drive the cut usually need a custom module or a separate system.
What Odoo modules does a garment factory need to start?
A garment factory running production in Odoo starts with Sales, Purchase, Inventory, Manufacturing (MRP) and Accounting, plus its country's fiscal localisation, and adds Quality, Barcode and PLM (Enterprise) when the fit-gap calls for them. If an operations system runs style, production and quality, Odoo can start with Accounting, Sales, Purchase and Inventory, because production and quality are handled outside it.
Is Odoo good for a clothing brand that outsources production?
Yes, for the books and the buying cycle. Odoo covers purchase orders to factories with colour-size variants, landed costs on receipts, vendor bills, multi-currency, wholesale sales orders with grid entry and credit notes for chargebacks, and a brand can skip work centers and routings. It handles poorly the work around those transactions: sampling with many factories, T&A across factories, following production elsewhere and inspections at the vendor, which usually run in a separate operations system.
Can Odoo handle a buying agent's commission?
Yes. A buying agent invoices its commission as a service product on a customer invoice to the buyer, with no stock, no receipt and no payable for the goods. In this guide's example, 5% of an FOB order of 3,000 polos at USD 4.26 is 3,000 × 4.26 × 0.05 = USD 639.00, invoiced as one service line. Agree with each buyer whether commission is earned on the ordered or the shipped value.
What Odoo apps does a fashion brand need if it does not manufacture?
A brand that does not manufacture needs Purchase, Inventory, Sales and Accounting, plus its country's fiscal localisation; a buying agent usually needs only Sales or Invoicing and Accounting. It can skip work centers, routings, work orders and Shop Floor, and needs the Manufacturing app only if it supplies fabric to a CMT factory through subcontracting. Retail EDI needs a third-party connector or an EDI provider.
How do fashion brands calculate landed cost in Odoo?
Create freight, duty, clearing and haulage as Service products with "Is a Landed Cost" ticked, apply them to the receipt of the garments with a split method (Equal, By Quantity, By Current Cost, By Weight or By Volume), and keep the garments in an AVCO or FIFO product category, because landed costs apply only to those categories. In this guide's illustrative example, USD 2,403.60 of charges on 3,000 polos bought at USD 4.26 FOB gives a landed cost of USD 5.06 per polo.
·Glossary of apparel and Odoo terms
Short definitions of the apparel and Odoo terms used in this guide.
- AQL
- Acceptance quality limit: an inspection method that checks a random sample from a lot and accepts or rejects the lot on the number of defects found, using ISO 2859-1 tables.
- AVCO
- Average cost: an Odoo costing method that values stock at the running average of receipts.
- BoM
- Bill of materials: the list of components and quantities to make one product. In Odoo, it can also list operations and by-products.
- CM, CMT
- Cut and make, or cut, make and trim: the labour charge for making a garment, and a factory model where the buyer supplies the fabric and the factory charges only for making.
- Colourway
- One colour version of a style, with its own fabric shade and trims.
- Cut-over
- The planned switch from the old system to Odoo, around a fixed cut-off moment.
- Down payment
- An invoice for part of a confirmed sales order, deducted from the final invoice.
- DUPRO
- During-production inspection, done once part of the order is packed.
- Dye lot
- A batch of fabric dyed together; pieces from different dye lots can differ in shade and must not be mixed in one garment.
- ECO
- Engineering change order: Odoo PLM's record for revising a BoM through approval stages.
- Ex-factory
- The date goods leave the factory for shipment.
- External ID
- An import key in Odoo that lets the same file be imported again to update records instead of duplicating them.
- FIFO
- First in, first out: an Odoo costing method that values stock at the cost of the oldest receipts first.
- FOB
- Free on board: the price of goods loaded at the port of shipment; in garment trade, the usual quoted price per piece.
- GSM
- Grams per square metre: the weight of fabric.
- Hypercare
- The period after go-live when the project team fixes issues daily.
- Lab dip
- A small dyed fabric sample sent to the buyer to approve a shade before bulk dyeing.
- Landed cost
- Every cost of bringing goods to the factory beyond the supplier's price: freight, insurance, duty, clearing, bank charges.
- Letter of credit (LC)
- A bank's promise to pay an exporter when documents matching the credit's terms are presented.
- Marker efficiency
- The share of fabric in a cutting marker that ends up in garment pieces.
- MO
- Manufacturing order: Odoo's order to make a quantity of a product from its BoM.
- POM
- Points of measure: the garment measurements in a tech pack, with a tolerance per size.
- PP sample
- Pre-production sample: a garment in bulk fabric and trims that the buyer approves as the reference for production.
- Product template, variant
- In Odoo, the template is the style; each variant is one combination of attribute values, such as navy, size L.
- Ratio pack
- A pack or carton holding sizes in a fixed ratio, for example 1 S, 2 M, 2 L, 1 XL.
- Shade band
- A set of approved shade references for a fabric colour, used to judge each new lot.
- SMV
- Standard minute value: the time a trained operator needs for one operation at a normal pace.
- Size/colour matrix
- A grid of colours by sizes used to enter or show order quantities for each combination.
- Strike-off
- A sample of a print or embroidery on the actual fabric, approved before bulk.
- T&A calendar
- Time and action calendar: an order's milestones with planned dates worked back from ex-factory, actual dates and owners.
- TOP sample
- Top of production: the first bulk pieces, checked against the PP sample.
- UCP 600
- The ICC's rules for documentary credits, which most letters of credit follow.
- Work center
- In Odoo, a place where operations run, with working hours, efficiency and cost per hour.
·Checklists: an Odoo apparel implementation on one page
The checklists below repeat the decisions and checks from each part of this guide, in project order.
Discovery
Discovery is complete when every item below is ticked.
- Business type settled for each buyer: CMT, full package, or both.
- One decision owner named for each area.
- One workshop per department, walking a real recent order.
- All 52 fit-gap lines answered with evidence, decision and owner.
- Architecture decided: what Odoo owns, what runs in an operations layer.
- Edition, plan, hosting and API access confirmed against the fit-gap.
Design
Design is complete when every item below is decided and written down.
- Product categories with costing method and valuation; landed-cost categories on AVCO or FIFO.
- Attribute set and creation modes locked; code pattern agreed.
- Unit design per fabric and yarn, for the exact Odoo version.
- Lot as dye lot; lot rules per operation type; roll design chosen.
- Size consumption source decided.
- Work centers, operations and minutes; what stays in planning outside Odoo.
- Subcontract chains modelled step by step.
- Inspection points, AQL plan source and override rights.
- Carton rules and buyer documents per buyer.
- Currencies, down payments, LC records, chargeback reasons, e-invoicing.
Build, data and testing
Build, migration and testing are complete when every item below is proven on the go-live version.
- Configuration done in dependency order, on the go-live version.
- Custom modules listed with owners and upgrade plan; Studio changes registered.
- Integrations link on permanent ids, with one writer per field.
- Migration loaded in order, with a cut-off rule and signed totals.
- All 13 end-to-end scenarios passed by key users.
Go-live
Go-live is ready when every item below is in place.
- Training done per role, on the factory's own orders.
- Cut-over rehearsed once in full.
- Go-live date between seasons, away from year-end and audits.
- Go or no-go point and fall-back defined.
- Hypercare runs at least until the first month-end close in Odoo.
·Sources
Odoo documentation pages were checked on 26 September 2026 against the version named. Menu paths are from the Odoo 18 documentation unless stated.
- Odoo 18 documentation, Product variants — odoo.com
- Odoo 18 documentation, Order product variants (grid entry) — odoo.com
- Odoo 18 documentation, Manufacturing with product variants — odoo.com
- Odoo 18 documentation, Multilevel BoMs — odoo.com
- Odoo 18 documentation, Configure a manufacturing product — odoo.com
- Odoo 18 documentation, Work centers — odoo.com
- Odoo 18 documentation, By-products — odoo.com
- Odoo 18 documentation, Subcontracting (enabling) — odoo.com
- Odoo 18 documentation, Basic subcontracting — odoo.com
- Odoo 18 documentation, Subcontracting resupply — odoo.com
- Odoo 18 documentation, Shop Floor overview — odoo.com
- Odoo 18 documentation, Engineering change orders (PLM) — odoo.com
- Odoo 18 documentation, Units of measure — odoo.com
- Odoo 19 documentation, Units of measure — odoo.com
- Odoo 18 documentation, Lot numbers — odoo.com
- Odoo 18 documentation, Packages — odoo.com
- Odoo 18 documentation, Three-step receipts — odoo.com
- Odoo 18 documentation, Using inventory valuation — odoo.com
- Odoo 18 documentation, Landed costs — odoo.com
- Odoo 18 documentation, Quality control points — odoo.com
- Odoo 18 documentation, Down payments — odoo.com
- Odoo 18 documentation, Multi-currency system — odoo.com
- Odoo 18 documentation, Credit notes and refunds (Credit Note button, Reason field) — odoo.com
- Odoo 18 documentation, Incoterms on invoices and bills — odoo.com
- Odoo 18 documentation, Dropshipping — odoo.com
- Odoo 18 documentation, Egypt fiscal localisation — odoo.com
- Odoo 18 documentation, Export and import data — odoo.com
- Odoo 18 documentation, Hosting — odoo.com
- Odoo 19 documentation, External JSON-2 API — odoo.com
- Odoo 19 documentation, External RPC API (deprecation) — odoo.com
- Odoo 17 documentation, Automation rules and webhooks — odoo.com
- Odoo editions (Community and Enterprise comparison) — odoo.com
- Odoo pricing — odoo.com
- Odoo forum, variants recreated when an attribute is added — odoo.com
- ISO 2859-1, Sampling procedures for inspection by attributes — iso.org
- AQL tables and acceptance numbers — qima.com · tetrainspection.com · inspection levels: qualityinspection.org
- UCP 600, documentary credits — uscib.org · tradefinanceglobal.com
- EDI transaction sets — 1edisource.com · celigo.com
- ERPNext repository and licence — github.com
- ERPNext item variants — docs.frappe.io
- ERPNext issue #54715, subcontracting and template BOM — github.com · issue #41950, manufacturing with many variants — github.com
- ERPNext version 16 — frappe.io · Landed Cost Voucher — docs.frappe.io
- Frappe REST API and token authentication — docs.frappe.io · docs.frappe.io
Corrections. Odoo changes between versions, and a menu path or a feature boundary can move in a single release. If you find a statement here that your version contradicts, report a correction with the version and the page you checked; we correct the guide and note the change and its date at the top of this section. We re-check the Odoo facts in this chapter at least once a year and after each major Odoo release.
Odoo is a trademark of Odoo S.A., used here only to name the product. This guide is not endorsed by Odoo S.A. ERPNext and Frappe are trademarks of their owners. Garment.io is named because MerchandiserOS integrates with it; this guide is not endorsed by Garment.io.