MerchandiserOS

ERP guide/Odoo

ERP implementation guide · textile & apparel

How to Implement Odoo for Garment & Apparel Business (2026 Guide)

A full implementation guide for consultants, factory teams, fashion brands and buying agents: discovery, the 52-line fit-gap, design area by area, build, data migration, testing, go-live and the traps. It covers brands, buying agents and own-label retailers that don't manufacture, and explains why most apparel businesses get further by keeping Odoo for the books and running operations on top of it.

As of Odoo 17, 18 and 19 Last checked 26 Sep 2026 Published by MerchandiserOS
Who wrote this. This guide is published by MerchandiserOS, an operations platform for garment factories and brands that connects to ERPs, including Odoo, through a public API. It is independent implementation advice. We are not an Odoo partner and do not resell Odoo. Every Odoo-specific claim links to Odoo's own documentation and names the version it was checked against. Where a statement comes from implementation practice, the text says so. Sources · Report a correction
28 worked examples in this chapter, all following one order: 3,000 navy men's piqué polos, style P-2041, sizes S–XXL (300 / 750 / 900 / 750 / 300), ex-factory 15 December. Prices are illustrative.
  1. One polo order, and where each step can live
  2. The same order as CMT and as full package
  3. Output of the merchandising workshop
  4. Five fit-gap rows, scored for the polo factory
  5. Bill of materials for one style: men's piqué polo, style P-2041
  6. Product category and unit setup for the polo
  7. Jeans: two size axes and the variant count
  8. Four rolls of the same "180 GSM" jersey
  9. Cutting 3,000 navy polos from three dye lots
  10. Why one average consumption fails
  11. The polo's operations, minutes and line capacity
  12. The polo order's approval calendar, worked back from ex-factory
  13. 2,000 printed T-shirts through two outside processors
  14. A quotation cost build for the polo (illustrative figures, USD per piece)
  15. Landed cost on the imported fabric
  16. The final inspection sample for 3,000 polos
  17. Packing 3,000 polos into cartons, one dye lot per carton
  18. Down payment, letter of credit and exchange difference
  19. A chargeback on an open-account shipment
  20. Migration template rows for the open polo order
  21. Test script: the polo order from sales order to cash
  22. Test script: shade split at cutting
  23. A training plan by role
  24. A cut-over plan, day by day
  25. One purchase request, from MerchandiserOS to Odoo and back
  26. The brand's view: landed cost of 3,000 polos into its warehouse
  27. The buying agent's view: commission on the polo order
  28. 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.

Works wellVariant products, grid order entry on sales, lot tracking, single-step subcontracting, landed costs, multi-currency, down payments.
Needs design careSize-dependent fabric consumption, kg-to-metre conversion, variant counts, shade control at cutting.
Usually outside OdooTech packs, quotation costing, T&A, sample approvals, production planning, shop-floor capture, AQL. See section 39.

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.

What an ERP is built for
What an apparel order needs
An item that exists before it is sold
A style that is quoted, sampled and approved weeks before any item exists
One bill of materials per item
Fabric use that changes by size, trims that change by colour, a spec revised three times
Units that convert by a fixed factor
Fabric bought by kilogram and cut by metre, where the factor changes with every roll
Stock that is interchangeable
Dye lots that must never be mixed in one garment, and rolls with their own width and weight
Approvals of money: a PO, a payment
Approvals of product: lab dips, strike-offs, fit and PP samples, given by the buyer, round by round
Work inside one company
Work across mills, dye houses, printers, washers, CMT units, inspection agencies and forwarders
A daily or monthly close
A floor where the answer changes every hour

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.

Example 1

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.

StepWhat happensNatural home in a general ERP?
Tech pack arrivesMeasurements by size, construction, artwork, trims listNo. There is no item yet
Costing and quoteFabric use from a marker, CM from operation minutes, quote at USD 4.26 FOBNo. The quote comes before the item
Lab dips, strike-off, fit sampleThree lab dip rounds before navy is approvedNo. These are approvals of the product
Order confirmedSize breakdown 300 / 750 / 900 / 750 / 300Yes: the sales order
Fabric and trims bought925 kg of jersey, rib, buttons, labels, polybagsYes: purchase orders
Fabric receivedThree dye lots, rolls of different width and weightPartly. Lots yes, shade and roll width no
PP sample, cutting, sewingCut by dye lot, 18 minutes per polo, output by line by hourPartly. The work order yes, the floor no
Embroidery at a subcontractorPanels out, 1% loss, panels backPartly. One step works, a chain is hard
Final AQL inspectionGeneral level II, AQL 2.5, sample of 125 piecesNo native sampling tables
Shipping and invoiceCartons, packing list, commercial invoiceYes: 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.

AreaOwned byWhy there
Style, tech pack, samples and approvals, quotation costingOperations layerThis work happens before an Odoo product exists, and it changes daily
Buyer orders, procurement planning, production planning, shop floor, quality, logisticsOperations layerIt needs sizes, dye lots, minutes, inspections and dates in one place
Shop-floor captureThe operations layer's floor screens, or a floor system such as Garment.io connected to itOperators need a simple screen, not an office form
Accounts, payables and receivables, invoicing, payments, stock value, tax and e-invoicingOdooThis 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.

TypeWhat it doesWhat it needs from OdooWhere it struggles
CMT (cut, make, trim)Sews buyer-supplied fabric and often trims; sells labourBuyer-owned stock held apart at no value, material reconciliation per order, service invoicing, labour costing from minutesDisputes over fabric loss; Odoo stock value must not include the buyer's fabric
Full-package (FOB) factoryBuys all materials, makes, ships; sells the garmentEverything: variants, size-dependent BoMs, purchasing, lots, landed cost, subcontracting, down payments and LC-backed sales, multi-currencyThe largest scope and the most custom work; the riskiest type to implement
Textile mill (knitting, weaving, dyeing)Turns yarn into fabricProcess manufacturing: yarn count and blend, dye recipes, batch genealogy, weight units, lab dips, GSM and width per batch, by-productsBatch and recipe logic goes beyond a garment BoM; weight-based units throughout
Hosiery and knit-to-shapeKnits socks, tights or sweaters directly from yarnYarn BoM by weight, singles to pairs to packs, pairing, toe closing and boarding as stages, few broad sizesThe unit design (singles, pairs, packs) is the main trap
Brand or wholesalerDesigns and sells; factories make for it on FOB or CMT termsPurchase 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 connectorSampling, T&A and inspections happen at many factories, outside Odoo's reach
Buying agent or buying housePlaces and follows orders across factories for buyers; earns commissionCommission invoiced to the buyer as a service line, payments, multi-currency; no stock and no payable for the goodsThe real work (T&A, samples, inspections, documents) is not transactional
Own-label retailerDevelops garments under its own label and buys them from factories for its storesThe brand's buying side: purchase orders, landed cost into the distribution centre, vendor billsDevelopment 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.

Example 2

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.

QuestionFull packageCMT
Who buys the fabricThe factory, on an Odoo purchase orderThe buyer; no purchase order in Odoo
How the fabric enters OdooA receipt that raises stock value and a payableA receipt into a location kept out of the factory's stock value, or tracked outside Odoo's valuation; design this explicitly
Invoice to the buyer3,000 × 4.26 = USD 12,780.003,000 × 1.60 = USD 4,800.00
Material reconciliationInternal: fabric used against the BoMExternal: 2,880 m received, 2,856 m used, 24 m returned to the buyer or accounted for
Main riskUnder-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.

RoleUsuallyDecides
SponsorOwner or managing directorScope, budget, go-live window, what stays outside Odoo, disputes between departments
Factory project leadA senior manager with time freed for the projectDay-to-day priorities, test sign-off, readiness for cut-over
Merchandising headHead of merchandisingStyle and variant model, size scales, season rules, order entry, T&A ownership
Development and sampling leadSampling room head or technical managerSample types, approval rounds, where tech packs and revisions live
Production managerFactory or production managerManufacturing order level, routings, work centers, subcontract steps, floor capture
Industrial engineerIE managerOperation minutes (SMV), line capacity, efficiency assumptions
CAD and marker leadCAD room headConsumption per size, marker efficiency, cutting loss
Stores headFabric and trims store managerUnits of purchase and issue, lot and roll rules, locations, receiving checks
Quality managerQA managerInspection types and points, sampling plans, who may override a failed inspection
Shipping and commercial leadShipping or commercial managerPacking rules, carton labels, export documents, LC document requirements
Finance headCFO or chief accountantChart of accounts, costing method, landed cost, currencies, down payments, chargebacks, tax
Key usersOne or two per departmentTest scripts, training of colleagues, first-line support after go-live
Partner functional consultantOdoo partnerHow a decision is configured in Odoo; flags what needs custom code
Partner developerOdoo partner or in-houseCustom 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?
Example 3

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.

#FindingFit-gap lineDecision neededOwner
M1The buyer PO arrives as a PDF; sizes are keyed by hand into a spreadsheet, then again into the costing sheet41Where the order is entered once, and who enters itMerchandising head
M2The buyer allows ±3% quantity; nobody records it, so shipping asks each time43Where the tolerance is held and who checks it before shipmentMerchandising head
M3Three lab dip rounds were tracked in one merchandiser's email10Where approval rounds are recordedDevelopment lead
M4The spec changed after the fit sample; production cut from the earlier sheet on a previous order8How the approved spec version is fixed for an orderDevelopment lead
M5Fabric was ordered on the base-size consumption on a previous order and ran short12Where size-dependent consumption is calculatedCAD lead
M6The T&A lives in a shared spreadsheet with no dependencies36Where T&A lives; in Odoo, custom, or in an operations systemSponsor

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

#RequirementOdoo answerNotes
Product
1Style master with a colour-size variant matrixStandardProduct template with attributes; variant creation mode per attribute (section 11)
2Size scales per product categoryConfigureOne size attribute per scale (alpha, numeric, waist, inseam), assigned per template
3Season or collection, and style reuse across seasonsConfigureA tag or custom field; rules for reusing a style number with a new cost need design
4Carry-over styles with a new price or BoMConfigureNew BoM version; engineering change orders with BoM revisions need PLM (Enterprise)
5Prepacks and ratio packsCustom buildA kit BoM can sell a pack as one unit; assorted cartons and pack-level packing lists need custom work
6Pairs and multi-packs (hosiery, gloves)ConfigureA pair unit and kits for multi-packs; knitting in singles and pairing as a stage need design
7Buyer's own style and colour codesConfigureCustom fields per product or per order line
8Tech-pack revision linked to the orderOperations layerPLM (Enterprise) revises BoMs, not tech packs
9Points of measure with tolerance per sizeOperations layerNo native measurement-spec object
10Sample types and rounds with buyer approvalOperations layerNo native object; projects, helpdesk or custom (section 16)
BoM and costing
11BoM lines that apply by colour or sizeStandard"Apply on Variants" on components and operations
12Size-graded fabric consumptionCustom buildA line per size group, generated from a consumption table; or calculated outside
13Wastage and shrinkage held separatelyCustom buildA BoM line holds one quantity; separate factors need fields and logic
14Trims that change by colourwayStandard"Apply on Variants"
15Pre-costing with many elements and currenciesOperations layerHappens before the product exists
16Standard against actual cost per orderConfigureStandard cost per category is standard; quote-against-actual by order needs reporting or an operations system
17Labour cost from operation minutesConfigureOperation duration × work-center cost per hour (section 15)
18Landed cost on receiptsStandardSplit by quantity, weight, volume, equal or current cost; AVCO or FIFO categories only
19Quote versions and approvalOperations layerOdoo quotations price existing products; the cost build comes first
Materials
20Purchase, stock and issue units with per-lot conversionCustom buildkg to m crosses unit categories in 17 and 18; Odoo 19 reworked units (section 12)
21GSM and width per lot or rollCustom buildCustom lot fields; or recorded in an operations system at receipt
22Roll trackingConfigureSerial per roll, or a package per roll
23Dye lot and shadeConfigureLot as dye lot; shade group needs a custom field
24Four-point fabric inspectionCustom buildA quality worksheet (Enterprise) can hold a form; defect points per roll need design
25Quality hold and quarantineConfigureThree-step receipts with a Quality Control location; control points (Enterprise)
26Buyer-supplied (consigned) stockConfigureNeeds a deliberate design so it stays out of stock value; check the options in your version
27Reserved against free stockStandardReservation on transfers
28Leftovers and stock-lot disposalConfigureA leftover product category and a sales flow
Production
29Work orders per style-colour or deliveryConfigureManufacturing orders per variant; grouping by delivery is a design choice
30Cut orders, lay plans, marker efficiencyCustom buildUsually a CAD system plus custom cut orders
31Bundles and bundle ticketsCustom buildA shop-floor system or custom module
32WIP by stage and lineOperations layerWork-order status shows the step, not the line or the bundle
33Graded output (first quality, seconds, rejects)Operations layerProduced is not the same as shippable
34Subcontract out and back with lossStandardOne step as standard; chained processors need intermediate products or custom work
35Capacity by line from minutesOperations layerWork centers have working hours and efficiency; line loading across a season does not
36T&A with a critical pathOperations layerNo native T&A object
Quality
37Inline and end-of-line captureConfigureQuality checks on work orders and Shop Floor (Enterprise); operator-level capture is limited
38Final AQL to ISO 2859-1 at the buyer's levelCustom buildControl points sample by percentage or period, not by ISO tables (section 19)
39Logged override of a failed inspectionCustom buildDesign who may release and how it is recorded
40Lab tests and certificates per orderConfigureAttachments on the order or a custom document type
Sales and shipping
41Grid order entry by colour and sizeStandardOn sales quotations and orders; purchase grids come from third-party apps
42Several deliveries per orderConfigureSeparate lines or orders per drop; decide before migration
43Over and under-shipment toleranceCustom buildA field and a check before delivery validation
44Carton packing and labels (SSCC)ConfigurePackages are standard; buyer label formats and SSCC numbers are custom
45EDI 850, 855, 856, 810Custom buildConnector or EDI provider
46Buyer label and ASN rulesCustom buildPer buyer
Finance
47Multi-currency and exchange differencesStandardPeriod-end revaluation of open items: check your version and localisation
48Letter of credit terms and document checkingCustom buildNo native LC object
49Advances and down paymentsStandardPercentage or fixed amount on sales orders
50Reason-coded chargebacksConfigureWrite-off accounts or tags per reason; reason codes may need a custom field
51Profitability per orderConfigureAnalytic tagging per order is the common approach; design it with finance
52E-invoicing per countryStandardWhere 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.

Example 4

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.

#RequirementEvidence from the factoryDecisionOwner
12Size-graded consumptionFabric under-bought on the base size (Example 10)Consumption per size calculated outside Odoo; purchase quantity passed inCAD lead
21GSM and width per rollFour rolls of "180 GSM" held 1.9 m less than the fixed factor said (Example 8)Measured at receipt per roll; Odoo holds the lotStores head
23Dye lot and shadeShade complaint on a previous orderLot as dye lot in Odoo, mandatory on every receipt and issueStores head
38Final AQLBuyer manual requires general level II, AQL 2.5 majorInspection run outside Odoo; pass or fail gates the deliveryQA manager
49Down paymentsBuyer pays 30% in advance on this programmeStandard Odoo down payment invoiceFinance 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 needsWhere it sits
Product variants, BoMs, manufacturing orders, work centers, subcontracting, lotsAvailable in Community
Barcode scanning in the warehouse and on the floorEnterprise (Barcode app)
Quality control points and checksEnterprise (Quality)
Shop Floor tablet screen for work orders (with the Manufacturing control panel and scheduling)Enterprise
MaintenanceBoth editions
Engineering change orders on BoMsEnterprise (PLM)
Studio for no-code fields and automationsEnterprise

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.

HostingWhat Odoo's documentation saysFor apparel
Odoo OnlineNot compatible with non-standard apps; custom modules cannot be installedRarely viable once the fit-gap shows custom modules. Studio changes remain possible on Enterprise
Odoo.shSupports custom code through Git-based deployment, with the chance to test before productionThe usual choice for a partner-led project with custom modules
On-premiseFull customisation; the organisation manages its own infrastructureFull 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 driverWhat decides it
EditionCommunity is open source and free to download; Enterprise is a licensed subscription (Odoo editions page)
PlanOdoo'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
UsersPriced per user per month, with cheaper light-user licences listed; count office users, not floor operators who never log in
HostingOdoo Online is included in Standard; Odoo.sh hosting is charged on top; on-premise means your own servers and staff
Partner implementationDiscovery, configuration, migration, testing, training and hypercare; scales with the number of custom-build lines in the fit-gap
Custom modulesBuild once, then port at every Odoo upgrade; the recurring cost most budgets miss
IntegrationsEDI, 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.

AspectOdoo (17, 18, 19)ERPNext
Licensing modelCommunity open source; Enterprise a licensed subscriptionOpen source under GPL-3.0 (GitHub repository)
VariantsProduct template with attributes; Instantly, Dynamically or Never creation per attribute; variant grid on sales ordersItem templates with variants by attribute
SubcontractingBasic, resupply and dropship workflows on a subcontracting BoMSubcontracting 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 depthBoMs incl. multilevel, work centers, work orders, by-products; Quality, PLM with ECOs and Shop Floor in EnterpriseBOM, work order, job card; version 16 adds job-card production tracking; an open GitHub issue (#41950) discusses manufacturing with large variant counts
LotsLots and serials; operation types control lot creation and reuseBatches and serials through the Serial and Batch Bundle
Landed costLanded costs on receipts, five split methodsLanded Cost Voucher
Apparel gapskg to metre across unit categories (17, 18), size consumption, dye lot attributes, AQL, sampling, T&ABOM per variant, no documented roll or dye lot model (not verified), sampling, T&A, AQL
APIXML-RPC and JSON-RPC (deprecated in 19); JSON-2 API from 19; webhooks from automation rules since 17REST 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.

CategoryMain materialSize systemWhat changes the setup
Woven tops and bottomsWoven fabric, m or ydAlpha (S–XXL) or numericFabric width drives the marker; collars and cuffs need interlining
Knit tops, polos, fleeceKnit fabric, bought in kgAlphaGSM and width per roll; rib and collar trims sized per garment size
DenimWoven denim, weight in oz/yd²Waist × inseam, two axesWashing changes shade and size, so shrinkage and wash are part of the spec; washing is usually subcontracted
Knitwear and sweatersYarn, in kgAlphaNo fabric stage; consumption is yarn weight per size and machine gauge
Hosiery and socksYarn, in kgFew broad sizes, e.g. 39–42Knitted in singles, sold in pairs and multi-packs; pairing and boarding are stages of their own
IntimatesKnit and lace, many small componentsBand × cupWires, hooks, elastics and moulded cups make long bills of materials
OuterwearWoven shell, lining, padding by weightAlphaMany trims per garment; padding bought by weight
Home textilesWoven or knit, by mFlat dimensions in cmNo 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.

MaterialBought inUsed inTrack at receipt
Woven fabricm or ydmComposition, width, weight, shade and dye lot, shrinkage
Knit fabrickgmGSM, open or tubular width, composition, shade and dye lot, shrinkage
Yarnkg, on coneskg or gCount and system (Ne, Nm, denier), ply, composition, shade
Sewing threadConesMetres per garmentTicket number, colour matched to each shade
Trims: zips, buttons, labels, hangtagsPieces, dozens, gross (144)PiecesSize and colour per colourway; often from a supplier the buyer nominates
Packaging: polybags, tissue, cartonsPiecesPiecesCarton dimensions, buyer-specific printing
Buyer-supplied material (CMT)Received, not boughtAs aboveOwned 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.

ATMA
Learn the materials properly. ATMA, the merchandising academy from the MerchandiserOS team, has courses on fibres, yarns and fabrics, from GSM and yarn counts to shade and shrinkage. atma.courses
Example 5

Bill of materials for one style: men's piqué polo, style P-2041

ComponentMaterialBought inPer piece (size L)Varies by
BodyCotton piqué 180 GSM, 1.80 m open widthkg0.95 mSize, colour
Collar and cuffsFlat-knit rib collar and cuffspieces1 setSize, colour
Buttons4-hole polyester, 15 mmgross (144)3 pcsColour
Sewing threadPolyester core-spun, tkt 120cones165 mColour
Main labelWoven, buyer-nominated supplierpieces1 pcNone
Size and care labelPrinted satinpieces1 pcSize
EmbroideryChest logo, subcontractedservice1 pcColour
PolybagRecycled LDPE, with warning printpieces1 pcNone

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).
Example 6

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.

CategoryCostingValuationTrackingPurchase unitStock unitRoute
Fabric / KnitAVCOAutomatedBy lots (lot = dye lot)kgkgBuy
Fabric / WovenAVCOAutomatedBy lotsmmBuy
Trims / Rib collars and cuffsAVCOAutomatedBy lots, to match the body dye lotsetssetsBuy
Trims / ButtonsAVCOAutomatedNonegross (144)piecesBuy
Trims / Labels and threadAVCOAutomatedNonepieces, conespieces, conesBuy
PackagingAVCOAutomatedNonepiecespiecesBuy
Subcontract servicesService products; no stockpiecesn/aBuy
Landed-cost servicesService products flagged "Is a Landed Cost" on the Purchase tabunitsn/aBuy
Finished garmentsStandardAutomatedNone, or lots per production batchn/apiecesManufacture
Buyer-supplied materialHeld apart from stock value; design with financen/aas receivedNone

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 creationWhat happensUse it for
InstantlyEvery combination is created as soon as the values are addedSmall, stable ranges
DynamicallyA variant is created only when that combination is orderedWide size ranges where many combinations are never sold
NeverThe value is informational; no variant is createdDescriptive 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.

Example 7

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).

DesignVariants per styleAcross 40 stylesEffect
Style as template; wash, waist and inseam as attributes, all Instantly632,520Every combination exists before anything sells
Same, with waist and inseam on Dynamicallyonly those orderedtypically far fewerPlanning before the first order sees nothing
Style-wash as template; waist and inseam as attributes212,520 across 120 templatesEach 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.

metres per kg = 1000 ÷ (GSM × width in m)
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.

DesignHow it worksTrade-off
Buy, stock and issue in kgCutting receives kg; metres are worked out on the cutting floorSimple 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 fabricA custom field per fabric product holds m per kgEasy 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 lotCustom lot fields and a conversion at receipt or issueAccurate; needs custom code and discipline at receipt
Example 8

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.

RollkgMeasured GSMWidth (m)m per kgMetres
R-10125.01761.823.12278.0
R-10224.61841.783.05375.1
R-10325.31811.803.06977.7
R-10424.81881.763.02275.0
Total99.7305.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.

Example 9

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.

LotCut from itMetres usedLeft
A (1,210 m)XXL 300 · XL 750 · M 23 · S 871,186.623.4
B (1,030 m)L 900 · S 2131,029.70.3
C (640 m)M 727639.80.2
Total3,000 pieces2,85624

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.

Example 10

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.

SizePiecesm per pieceMetres
S3000.82246
M7500.88660
L9000.95855
XL7501.02765
XXL3001.10330
By size3,0002,856
Base size M for all3,0000.882,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.

QuestionWhat Odoo givesWhat stays outside
How much labour is in one polo?Operation durations and cost per hourThe minute study itself
How many polos can line 3 sew this week?Working hours and efficiency on the work centerLine balancing across 25 operators, absenteeism, learning curves
Where is bundle 214?The work order's stepBundle tracking and operator output
Which line takes which order in week 47?Work-order scheduling on the work centerSeasonal line loading across lines and subcontractors
Example 11

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 centerOperationMinutes
CuttingSpread, cut, number and bundle1.20
Sewing lineShoulder join0.90
Sewing linePlacket3.10
Sewing lineCollar attach2.20
Sewing lineSleeve attach1.80
Sewing lineSide seam and sleeve close1.60
Sewing lineCuff attach1.40
Sewing lineBottom hem1.00
Sewing lineButtonholes and buttons1.50
FinishingThread trim and inspection1.20
FinishingPress1.00
FinishingFold, tag and bag1.10
TotalCutting 1.20 · sewing 13.50 · finishing 3.3018.00
Line capacity: 25 operators × 480 min × 60% efficiency = 7,200 min a day
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 approvalWhat it decidesWhat waits for it
Proto / development sampleThe look and the constructionCosting and the quote
Lab dipThe shade, within tolerance under the buyer's light sourceBulk fabric dyeing
Strike-offPrint or embroidery artwork, colours and placementBulk printing or embroidery
Trims approvalButtons, zips, labels and hangtagsThe bulk trims order
Fit sampleMeasurements and fit on the buyer's modelPattern correction
Size setGrading across every sizeThe production marker
PP (pre-production) sampleThe reference bulk must matchCutting
TOP (top of production)That the first bulk pieces match the PP sampleThe rest of the run
Shipment sampleThe reference for any claim after deliveryShipping

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.
ATMA
Sampling, step by step. ATMA's courses walk through the sampling sequence, lab dips and PP meetings the way a merchandiser runs them. atma.courses
Example 12

The polo order's approval calendar, worked back from ex-factory

DateMilestoneIf it slips
1 OctOrder confirmed
8 OctLab dip round 1 sent; round 2 on 13 OctBulk dyeing cannot start
17 OctLab dip round 3 approvedEach extra round costs about 5 days
20 OctBulk fabric dyeing starts
24 OctEmbroidery strike-off approvedEmbroidery cannot be booked
7 NovPP sample sent in bulk fabric
10 NovBulk fabric in-houseCutting waits
14 NovPP sample approved, with commentsCutting cannot start
17 NovCutting starts
20 Nov to 10 DecSewing; TOP sample from the first bulk pieces
12 DecFinal AQL inspectionShipment held
15 DecEx-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.

WorkflowWho supplies the componentsGarment use
BasicThe subcontractor; the BoM needs no componentsBuying finished garments or a full-package service from another factory
ResupplyYou send them from your own stockSending cut panels to a printer, embroiderer or sewing unit
Dropship to subcontractorYour supplier ships straight to the subcontractorA mill delivering fabric directly to a CMT unit or a garment washer

The resupply flow runs like this:

  1. A subcontracting BoM names the subcontractor.
  2. Confirming the purchase order to that subcontractor creates the receipt, and a resupply order that sends the components out.
  3. Components move to the subcontractor's location when the resupply is validated.
  4. 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.

Example 13

2,000 printed T-shirts through two outside processors

StepWhereOutBackNote
Cut front panelsFactory2,0201% print allowance on top of 2,000
Screen printPrinter A2,0202,00812 rejected for misregistration
SewFactory2,0082,0035 panels damaged in sewing
Garment washWasher B2,0032,0012 lost in wash
Ready to pack2,0011 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.

ATMA
Costing a garment. ATMA, the merchandising academy from the MerchandiserOS team, teaches garment costing from fabric consumption and minutes to FOB and landed cost. atma.courses
Example 14

A quotation cost build for the polo (illustrative figures, USD per piece)

LineHow it is worked outUSD
Body fabric0.31 kg at 4.20 per kg, plus 6% cutting loss1.38
Collar and cuffs1 set0.25
TrimsButtons, thread, labels, polybag0.32
EmbroiderySubcontractor price per logo0.18
CM (cut and make)18 minutes at 0.07 per minute1.26
TestingBuyer's lab tests spread over the order0.10
Factory overhead12% of CM0.15
Freight to port and export documents0.12
Finance cost3% while waiting for payment0.11
Margin10%0.39
FOB price4.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.

Example 15

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 lineQuantityWeight (kg)Value (USD)
Navy jersey 180 GSM925 kg925.03,885.00
Rib collar and cuff sets3,060 sets76.5765.00
Total1,001.54,650.00
ChargeUSDSplitJerseyRib sets
Sea freight420.00By Weight387.9232.08
Clearing and port180.00By Current Cost150.3929.61
LC bank charges95.00By Current Cost79.3715.63
Total landed costs695.00617.6877.32
Freight to jersey = 420 × 925 ÷ 1,001.5 = 387.92
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.

InspectionWhenWhat it checksOdoo fit
Incoming fabricAt receipt from the mill or dye houseShade against the shade band, GSM, width, shrinkage, four-point defectsControl point on the receipt; four-point scoring and shade groups need custom fields
Incoming trimsAt receiptColour, size, count against the approved trims cardPass-fail control point
Printed or embroidered panelsOn return from the processorPlacement, registration, colour against the strike-offControl point on the subcontract receipt
CuttingAfter cutting, before bundlingPattern accuracy, notches, shade within the bundleCheck on the cutting operation
Inline (stitching)During sewingOperation-level defects, found earlyChecks on work orders; operator-level capture is limited
End of lineAs garments leave the lineEvery garment, graded pass, repair or rejectLimited; grading is custom
MeasurementEnd of line and finalPoints of measure against tolerance per sizeMeasure checks exist; size-by-size tolerance tables need design
DUPROOnce a share of the order is packedEarly warning before finalCustom
Final AQLWhen the order is packedSample per ISO 2859-1 at the buyer's levelCustom (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.

Example 16

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.

StepLookupResult
Lot size3,000 pieces falls in the band 1,201 to 3,200Band 1,201–3,200
Code letterThat band at general level IIK
Sample sizeCode letter K125 pieces
Major defects, AQL 2.5Sample of 125Accept at 7 or fewer, reject at 8
Minor defects, AQL 4.0Sample of 125Accept at 10 or fewer, reject at 11
Sample share = 125 ÷ 3,000 = 4.17% of the lot

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).

ATMA
Quality in a garment factory. ATMA covers inspection stages, AQL and how to read a buyer's quality manual. atma.courses

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.

DocumentBuilt fromOdoo fit
Packing list by cartonCarton number, size and colour content, lot, weights, dimensionsPackages give the content; buyer layouts are custom reports
Carton labelsBuyer's label rules, often with an SSCC barcodeCustom
Commercial invoiceThe sales invoice with incoterm, marks and numbersInvoice with a custom export layout
Certificate of originIssued by a chamber or authorityOutside Odoo; attach the copy
Advance shipping notice (ASN)Carton-level content sent to the buyer before arrivalEDI connector or portal upload
Bill of lading or air waybillIssued by the carrier or forwarderOutside Odoo; attach the copy
Example 17

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 lotPiecesFull cartons of 10Part carton
S, lot A8781 of 7
S, lot B213211 of 3
M, lot A2321 of 3
M, lot C727721 of 7
L, lot B90090none
XL, lot A75075none
XXL, lot A30030none
Total3,0002984 (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.

Example 18

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.

StepIn OdooUSDEGP
Order confirmed, 1 OctSales order, 3,000 polos at 4.2612,780.00
Down payment invoiceCreate Invoice ‣ Down payment (percentage), 30%3,834.00
Down payment receivedPayment against the down-payment invoice3,834.00
Shipment, 15 DecFinal invoice; the down payment is deducted8,946.00at 48.80 = 436,564.80
LC documents presentedCustom LC record: presentation within 21 days of shipment
LC paidPayment of the balance8,946.00at 49.10 = 439,248.60
Exchange differenceBooked automatically to the gain account2,683.80
Down payment = 12,780.00 × 30% = 3,834.00
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.

Example 19

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.

DeductionReason givenUSD
Carton label error2 cartons with wrong size label, 50 per carton100.00
Late ASN1% of the invoice89.46
Total deducted189.46
Late ASN = 8,946.00 × 1% = 89.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:

  1. 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).
  2. Complete the company's tax ID and address, the branch with its ETA activity code, customer tax details, and product barcodes and units.
  3. Give each person who signs invoices a USB signing key.
  4. 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.

#ConfigureWhere (Odoo 18 documentation)Why at this point
1Install Sales, Purchase, Inventory, Manufacturing (MRP) and Accounting; add Quality, PLM and Barcode on Enterprise if the fit-gap needs themAppsSettings for each app appear only once it is installed
2Company, fiscal localisation, chart of accounts, taxesAccounting settings; the localisation package for the countryEvery later document posts to these accounts
3Currencies and automatic ratesAccounting ‣ Configuration ‣ Currencies; Accounting ‣ Configuration ‣ Settings (Currencies)Foreign-currency suppliers and buyers need active currencies
4Exchange-difference journal and accountsAccounting ‣ Configuration ‣ Settings (Default Accounts)Before the first foreign payment
5Units of measureInventory ‣ Configuration ‣ Settings (Units of Measure); Inventory ‣ Configuration ‣ UoM CategoriesProducts carry their units from creation; changing later is painful
6Variants and attributesSales ‣ Configuration ‣ Settings ‣ Product Catalog (Variants); Sales ‣ Configuration ‣ AttributesLock the attribute set and creation modes before any style is loaded
7Lots and serial numbersInventory ‣ Configuration ‣ Settings ‣ Traceability (Lots & Serial Numbers)Fabric products must be created with lot tracking
8PackagesInventory ‣ Configuration ‣ Settings (Operations: Packages)Cartons and rolls-as-packages
9Multi-step routes and three-step receiptsInventory ‣ Configuration ‣ Settings (Warehouse: Multi-Step Routes); Inventory ‣ Configuration ‣ WarehousesCreates the input and quality control locations for fabric on hold
10Product categories with costing method and valuationInventory ‣ Configuration ‣ Product CategoriesThe category decides stock accounts and costing
11Landed costsInventory ‣ Configuration ‣ Settings (Valuation: Landed Costs)Import charges need service products flagged "Is a Landed Cost"
12Lot rules per operation typeInventory ‣ Configuration ‣ Operations Types (Create New / Use Existing ones)New lots at receipt, existing lots only at issue
13Work orders and work centersManufacturing ‣ Configuration ‣ Settings (Work Orders); Manufacturing ‣ Configuration ‣ Work CentersOperations on BoMs need work centers
14By-productsManufacturing ‣ Configuration ‣ Settings (Operations: By-Products)Only if the factory values offcuts or mill by-products
15SubcontractingManufacturing ‣ Configuration ‣ Settings (Operations: Subcontracting)Subcontracting BoMs appear only once it is on
16Quality control pointsQuality ‣ Quality Control ‣ Control Points (Enterprise)Points reference operations and product categories that now exist
17E-invoicing (Egypt example)Accounting ‣ Configuration ‣ Settings (ETA E-Invoicing Settings)Needs products with barcodes and units from the steps above
18Master data: partners, materials, styles, BoMsImport on each list, using templates with External IDsLast, 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.

ModulePurposeFit-gap linesNeeded with operations on top?
Fabric unitskg-to-metre conversion per lot, from measured GSM and width20No; the conversion happens in the operations layer
Lot attributesGSM, width, shade group, shrinkage and roll length on the lot21, 22, 23No
Size consumptionGenerates BoM lines per size from a consumption table12, 13No
Cut controlRefuses mixed lots on one cut; cut orders and bundles23, 30, 31No
Ratio packs and cartonsAssorted cartons, pack-level packing lists, carton labels5, 44, 46No for packing; buyer label printing may still sit in Odoo if the dispatch is printed there
Sampling and approvalsSample requests, rounds, verdicts, T&A links10, 36No
Chained subcontractingBalance per processor, loss allowance, reject reasons34No
AQL inspectionISO 2859-1 sample sizes and acceptance numbers, logged overrides38, 39No
Quantity toleranceOver and under-shipment check before a delivery is validated43No; ship clearance happens in the operations layer
Letters of creditLC terms, dates, document checklist, expiry warnings48Yes; LC is a finance record
Chargeback reasonsReason codes on deductions, dispute status50Yes
EDI connector850, 855, 856, 810 with each retailer45Depends on which system the buyer's EDI must reach
Export documentsCommercial invoice and packing-list layouts per buyer44Yes for the invoice
Local statutory reportsFree-zone or temporary-admission reports, local tax52Yes

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.

ChangeStudioModule
Add "buyer style number" to the product and the sales orderYesEither
Show GSM and width on the receipt screenYes, for displayIf a calculation depends on them
Convert kg to metres per lotNoYes
Generate size BoM lines from a tableNoYes
Refuse mixed lots on a cutAn automation can warnYes, to enforce it
Send a webhook when a PO is confirmedYes (automation rule)Either
AQL sample size and verdictNoYes

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.

RecordSource of truthGoes to Odoo as
Style, spec, points of measure, revisionsPLM or operations layerThe finished-goods item, once released
Pre-cost and quoteOperations layerNothing, or a standard cost once the order is confirmed
Buyer orderOperations layer, or EDI into the ERPThe sales order
Material requirementsOperations layerPurchase requests that become Odoo purchase orders
Receipts, stock, lotsOdoo, with measurements from the operations layerReceipts and stock moves
Cut, bundle, WIP, operator outputShop-floor system or operations layerMaterial issues, summarised
Quality resultsOperations layer or quality systemOnly the clearance to ship
Shipment, invoiceOdoo for the invoice; operations layer for the shipmentDelivery and customer invoice
Payments, LC, chargebacksOdooNative

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.

#ObjectScopeSigned off by
1Chart of accounts, taxes, opening balances planCurrentFinance head
2Units, attributes and attribute valuesFinal designMerchandising head, stores head
3Product categoriesFinal designFinance head
4Customers and suppliersActive in the last two seasonsMerchandising head, purchasing
5Materials (fabrics, yarns, trims, packaging)Used in active styles or in stockStores head
6Styles and variantsActive and carry-over onlyMerchandising head
7Work centers and BoMsStyles with open ordersProduction manager, CAD lead
8Open stock by lot and locationCounted at cut-offStores head, finance head
9Open purchase ordersUndelivered quantities onlyPurchasing
10Open sales ordersUndelivered quantities onlyMerchandising head
11Open manufacturing orders or WIPDecide: reload, or finish in the old wayProduction manager
12Open receivables and payablesPer invoice, at cut-offFinance 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.
Example 20

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
Sales order check: 1,278 + 3,195 + 3,834 + 3,195 + 1,278 = 12,780.00 = 3,000 × 4.26

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.

#ScenarioWhat it provesExpected result, in short
T1FOB order to paymentThe whole chain worksOrder, purchase, receipt, production, delivery, invoice and payment all reconcile to the order value (Example 21)
T2CMT order with buyer fabricConsigned stock stays out of stock valueFabric received and issued with no change in stock value; the service invoice carries only CM
T3Prepack orderPacks, pieces and cartons agreeBuyer orders packs, production makes pieces, the packing list shows packs per carton
T4Shade split in cuttingDye lots are never mixedA cut mixing two lots is refused; leftover per lot matches the cut plan (Example 22)
T5Subcontract embroidery with lossOut, back and loss reconcilePanels out, good panels back, rejects recorded with a reason, balance zero
T6Short shipment within toleranceTolerance is applied and invoicing follows the shipped quantityShipment accepted, no backorder, invoice on shipped pieces
T7Over-shipmentThe upper limit is enforcedAbove the tolerance, the delivery is blocked or needs a named approval
T8Seconds saleSecond-quality pieces are valued and sold apartSeconds move to their own product or location and sell at their own price
T9LC discrepancyDocument checks catch a mismatchA late shipment date against the LC is flagged before documents are presented
T10ChargebackDeductions are codedA short payment is split by reason and posted to the chargeback accounts (Example 19)
T11Mid-season spec revisionThe approved version is protectedA new BoM version applies to new orders only; the open order keeps its approved version
T12Cancelled order with committed materialsCommitted stock is visibleFabric already bought shows as free stock with its cost; open purchase orders are listed for decision
T13FX at month-endCurrency figures close correctlyRealised differences posted; open foreign balances handled as the finance head decided
Example 21

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.

StepActionExpected result
1Enter the sales order with the variant grid: S 300, M 750, L 900, XL 750, XXL 300 at 4.265 lines, 3,000 pieces, USD 12,780.00
2Create a 30% down-payment invoice and register the paymentInvoice USD 3,834.00, paid
3Confirm purchase order P00457 for 925 kg navy jerseyReceipt created for 925 kg
4Receive 925 kg in three lots A, B, CReceipt refused without a lot on every line; three lots in stock
5Apply the landed costs from Example 15Jersey valued at USD 4,502.68 (4.87 per kg)
6Create the manufacturing orders and issue fabric by lotIssue refused without a lot; only existing lots offered
7Record production of 3,000 piecesFinished stock 3,000 at standard cost
8Pack and validate the delivery302 packages; delivery done for 3,000
9Create the final invoiceUSD 12,780.00 less the 3,834.00 down payment = 8,946.00 due
10Register the payment at a different exchange rateInvoice paid; exchange difference posted to the gain or loss account
11Run the order's profitability reportRevenue, 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.

Example 22

Test script: shade split at cutting

Scenario T4, using the three dye lots and the cut plan from Example 9.

StepActionExpected result
1Issue lot A to the cut for XXL 300, XL 750, M 23, S 87Issue accepted; lot A shown on the cut
2Try to add fabric from lot B to the same cutRefused, with a message naming both lots
3Issue lot B to a new cut for L 900 and S 213Accepted
4Issue lot C to a new cut for M 727Accepted
5Return the remaining fabric per lotLeftover matches the cut plan: A 23.4 m, B 0.3 m, C 0.2 m, each converted with its own lot's factor
6Pack size STwo 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.

StepActionExpected result
1Confirm the subcontract PO for 3,000 embroidered frontsA resupply order for 3,030 cut fronts (3,000 plus 1%)
2Validate the resupply3,030 fronts at the embroiderer's location
3Receive 3,004 good fronts and 26 rejects3,004 embroidered fronts in stock; 26 recorded as scrap with the reason "thread break" or "misplacement"
4Check the balance at the embroiderer0 fronts left; 26 rejects inside the allowance of 30
5Receive the embroiderer's billBilled 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.

StepActionExpected result
1Validate the delivery for 2,940 of 3,000Short by 60 pieces, which is 2.0%; inside the 3% tolerance
2Choose not to keep a backorderNo open delivery remains for the 60 pieces
3Create the final invoice2,940 × 4.26 = USD 12,524.40, less the 3,834.00 down payment = 8,690.40 due
4Repeat with 2,900 piecesShort 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.

Example 23

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.

RoleWhat they learnHoursPass when they can
MerchandisersSales orders with the variant grid, order changes, delivery status6Enter the polo order from the buyer PO without help
PurchasingPurchase orders, units, vendor bills, landed costs6Buy 925 kg of jersey and apply the import charges
StoresReceipts with lots, issues to production, returns, counts8Receive three dye lots and issue each to its cut
Production plannersManufacturing orders, work orders, subcontracting6Run the embroidery resupply and receipt
QualityQuality checks and holds (Enterprise)4Hold a lot in quality control and release it
ShippingPacking, packages, delivery documents4Pack by lot and print the packing list
FinanceInvoices, down payments, payments, exchange differences, reports10Take the polo order from down payment to closed
Key usersAll of the above for their area, plus first-line support16Teach 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.

Example 24

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.

DayDateStepsOwner
T−1022 OctRehearsal load complete; open issues reviewed; go or no-go for the planFactory project lead
T−725 OctMaster data frozen in the old system; final load of partners, materials, styles, BoMsMerchandising head, stores head
T−329 OctOpen purchase and sales orders extracted and checked against source documentsPurchasing, merchandising
T−131 OctCut-off at 18:00: no more receipts or issues in the old system; physical count of fabric by lot and roll, trims and finished goodsStores head
T01 Nov, morningLoad counted stock by lot, open orders and open receivables and payables; owners sign totalsAll owners, finance head
T01 Nov, noonGo or no-go by the sponsor on the signed checksSponsor
T01 Nov, afternoonFirst live transactions: one receipt, one issue, one sales order, one invoiceKey users
T+12 NovDaily issue meeting starts; partner on siteFactory project lead
T+910 NovPolo fabric received in Odoo with lots: the first real test of the lot rulesStores 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.

  1. Variant explosion.Too many attributes on Instantly, or attributes added after go-live.
  2. One conversion factor for all fabrics.Stock value looks right while the cutting room runs short.
  3. All sizes on one fabric quantity.Large sizes run short and small sizes leave surplus.
  4. Dye lots not enforced at issue.Shade differences are found at final inspection instead of at cutting.
  5. The manufacturing order used as the production plan.Line balancing, operation times and bundle flow need their own place.
  6. Ratio cartons and buyer packing lists underestimated.Assorted cartons are not a native concept.
  7. Community chosen, Enterprise features needed.Barcode, quality and shop-floor screens are rebuilt at a higher cost.
  8. Heavy Studio changes on core models.Every version upgrade gets harder.
  9. Multi-step subcontracting modelled as one step.Goods disappear between processors.
  10. 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.
  11. 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.

#SymptomRoot causeHow it shows in OdooPrevention
1SKU swampEvery variant created as an independent itemTens of thousands of product.product records on InstantlyStyle as template; Dynamically or a style-colour template (section 11)
2Large sizes short of fabricAverage consumptionOne BoM quantity for all sizesSize-graded consumption (section 14)
3kg and m never reconcileFixed conversionOne factor per product, or nonePer-lot conversion from GSM and width (section 12)
4Shade mixingNo shade rule at issueAny lot can be picked for a manufacturing orderLot as dye lot, existing lots only at issue, cut control (section 13)
5Costing illusionQuote, standard and actual not linkedStandard cost on the garment, no quote to compareKeep the quote beside the actuals per order (section 18)
6Buyer fabric counted as ownedCMT fabric received like a purchaseStock value includes the buyer's fabricA deliberate consigned-stock design (section 4)
7Goods lost at subcontractorsOut and back not linkedOne subcontract step for a chain of processorsIntermediate products per step (section 17)
8Produced is not shippableNo output gradingEvery produced piece counts as finished stockGrade output; ship on first quality only (section 19)
9Spec driftRevision not linked to the orderBoM edited while an order is openVersioned BoMs; the approved version fixed per order
10Excel shadow systemNo T&A or order viewMerchandisers keep their sheetsProvide the view, in Odoo or an operations layer (section 16)
11Chargeback leakageNo reason codesShort payments written off to one accountReason-coded write-offs (section 21)
12LC discrepanciesLC terms not linked to the shipmentNo LC objectLC record and a document check before presenting
13Floor data never arrivesOffice screens on the floorSupervisors asked to fill in work ordersKiosk, scanner or a floor system (section 15)
14Big-bang in peak seasonA plan-driven dateGo-live during a shipment windowGo live between seasons, with a rehearsed cut-over (section 30)
15Migrated garbageLegacy loaded as it wasDuplicates in partners and materialsCleanse 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 versionAPI to build onNotes
17, 18XML-RPC / JSON-RPC/xmlrpc/2/object, execute_kw with search_read, create, write
19 and laterJSON-2 APIPOST /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 id or 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_date stays 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.

Example 25

One purchase request, from MerchandiserOS to Odoo and back

  1. In MerchandiserOS, request PR-1042 for 925 kg of navy jersey is approved.
  2. Odoo's integration job collects it: GET /api/v1/erp/documents returns the request with quantities, units and the supplier code.
  3. Odoo creates purchase order P00457 (record id 457) and confirms it.
  4. 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"}]}
  1. A person in MerchandiserOS approves it on the ERP review list. The request now shows "Odoo PO P00457, open".
  2. 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.

BusinessWhat it doesWhat it records in OdooWhat it never does in Odoo
Brand or wholesalerDesigns and sells under its own name; factories make for it on FOB or CMT termsPurchase orders to factories, receipts into its warehouse, landed cost, vendor bills and payments, wholesale sales orders, invoices, credit notesMake garments; it owns no sewing line
Buying agent or buying houseSources and follows orders for overseas buyers across many factories; earns a commissionCommission invoices, expenses, payments, multi-currencyHold stock or owe the factory for the goods
Own-label retailerDevelops garments under its own label and buys them from factories for its stores or websiteThe buying side, like a brand: purchase orders, landed cost, receipts into the distribution centre, vendor billsMake 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 appBrand or own-label retailerBuying agent
PurchaseYes: purchase orders to factories, one line per variantNo; the buyer places the order with the factory
InventoryYes: receipts into the warehouse, landed costs, stock valueNo; the agent holds no stock
SalesYes: wholesale orders with variant grid entryOptional: a commission can be invoiced from a sales order or straight from Accounting
AccountingYes: vendor bills, payments, multi-currency, credit notesYes: commission invoices, payments, exchange differences
Manufacturing (MRP)Only if the brand supplies fabric to a CMT factory and uses subcontracting; otherwise skipSkip
Work centers, routings, work orders, Shop FloorSkipSkip
QualityUsually 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.

Example 26

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.

LineBasis (illustrative)Split methodUSD
Purchase order, 3,000 polos3,000 × 4.26 FOB12,780.00
Sea freight and insuranceThe order's share of a shared containerBy Volume540.00
Import duty12% of the FOB valueBy Current Cost1,533.60
Customs clearing and brokeragePer entryBy Current Cost180.00
Haulage from port to warehousePer truckBy Volume150.00
Landed cost of the order15,183.60
Duty = 12,780.00 × 12% = 1,533.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.

Wholesale price to a retailer (illustrative) = 11.00
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.

Example 27

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 invoiceQuantityUnit priceUSD
Buying commission, style P-2041, 3,000 pcs at FOB 4.26, 5%1639.00639.00
Invoice total639.00
Commission = 3,000 × 4.26 × 0.05 = 12,780.00 × 0.05 = USD 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.

NeedWhy it matters for a brand or agentWhat Odoo offers
Development and sampling with many factoriesOne style is sampled at two or three factories before the order is placed; lab dips and fit samples go back and forth with eachNo sample or approval object (section 16); projects, helpdesk or custom work
T&A across factoriesForty orders at twelve factories, each with its own lab dip, PP and ex-factory datesNo T&A object; a spreadsheet or a custom module
Following production elsewhereThe brand needs to know cutting has started and how many pieces are sewn, at a factory it does not runThe purchase order shows ordered and received; nothing between
Inspections at the vendorFinal AQL happens at the factory, often by the brand's own QC or a third party, before the goods are releasedQuality checks attach to the brand's own receipts, which arrive weeks after the inspection that mattered (section 19)
One status per orderA merchandiser answers "where is it?" for every order, every day, across factories and buyersSeparate 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.

AreaRuns in MerchandiserOSRecorded in Odoo
DevelopmentStyles with versions, tech pack sections, graded measurements with tolerances, colourways and lab dips, the bill of materials by categoryThe finished item, once it is bought or sold
Samples and approvalsLab dip, strike-off, sample and shipping-mark approvals, round by round, with parcel and courier details and the buyer's verdictNothing
Costing and quotationsThe cost build to FOB with landed cost and dated exchange rates, quotations and approval gatesNothing until an order exists
Orders with factoriesBuyer POs as parent records, orders with size-by-colour breakdown, tolerance band and per-shipment deliveries; purchase requests and purchase orders to suppliersThe purchase order as a financial record, the vendor bill and the payment
T&A and planningT&A with the critical path; the planning heat-map across lines and subcontracted factoriesNothing
QualityTyped inspections, including final AQL on ISO 2859-1 at the buyer's level, and CAPANothing; the goods are released or held
Shipping follow-upShipments per delivery and ship clearance against the buyer's termsThe receipt, the landed costs, the invoice and the credit notes
Commission (agents)The orders the commission is earned onThe 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.

Example 28

The polo order with operations on top

StepIn MerchandiserOSWhat Odoo sees
Tech pack and quoteStyle P-2041, graded measurements, cost build at 4.26 FOBNothing yet
SamplesThree lab dip rounds, strike-off, PP approved 14 Nov and locked to spec version 3Nothing
Order3,000 pieces by size, T&A calendar to 15 DecSales order for invoicing
Procurement925 kg jersey, trims, embroidery; receipts measured per roll and dye lotPurchase orders, receipts, payables
Planning and productionLine booked, cut by dye lot, job cards by departmentMaterial issued, for stock value
Shop floorOutput per line per hour, on MerchandiserOS floor screens or from Garment.ioNothing
QualityFinal AQL at level II, 2.5: 125 pieces inspected; only first-quality pieces ready to shipNothing
LogisticsCartons packed by lot, ship clearance against the buyer's termsDelivery and customer invoice
After shipmentQuote against actuals for fabric, minutes and rejectsPayment received, reported back

Who does what

Each area has one home. MerchandiserOS runs the work; Odoo records the financial result.

AreaRuns in MerchandiserOSRecorded in Odoo
StyleTech pack, versions, graded measurements with tolerances, colourways, bill of materials by category, fabric and yarn specs, consumption from marker efficiency and shrinkageThe finished-goods item, once released
Samples and approvalsLab 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—
QuotationCost build (fabric, trims, CM, washing, testing, freight, landed cost, margin) and the quote to the buyerNothing until an order exists
OrdersBuyer POs, size-by-colour breakdown, ratio packs, quantity tolerance, delivery drops, T&A calendarThe sales order, for invoicing
ProcurementMaterial requirements across the order book, purchase requests, supplier POs, receiving with shade and lot measurementsThe financial purchase order, the payable, stock value
PlanningLine and subcontractor capacity, production orders, the critical path from ship date back—
ProductionJob cards by department, material issue and return, WIP by stage, subcontract stepsMaterial movements, for stock value
Shop floorMerchandiserOS floor screens, or Garment.io feeding output and actual minutes in—
QualityInspections from incoming fabric to final AQL on ISO 2859-1 at the buyer's level; only first-quality pieces count as shippable—
LogisticsShipments per delivery, packing and cartons, ship clearance against the buyer's termsThe 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.

DepartmentWhat they do in MerchandiserOSWhat reaches Odoo
MerchandisingRecords 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 pathThe sales order, once confirmed
DevelopmentKeeps 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 orderNothing
CostingBuilds 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 thresholdsNothing until the order exists
Purchasing and storesRuns 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 qualificationPurchase requests become Odoo purchase orders; receipts and issues for stock value
PlanningLoads lines and subcontractors on the 52-week heat-map, opens production orders with job cards per departmentNothing
Production floorCaptures output on kiosk floor screens and follows the WIP board; or reads output and actual minutes from Garment.ioNothing
QualityRuns 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 shipsNothing; the shipment is cleared or held
ShippingPacks and cartonises per delivery, clears the shipment against the buyer's termsThe dispatch, from which the invoice is raised
FinanceWorks in Odoo: invoices, payables, payments, stock value, tax and e-invoicingOdoo 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.
ATMA
Go deeper. For the merchandising behind all of this, from fibres and costing to sampling, quality and shipping, see the courses at ATMA, the academy from the MerchandiserOS team. atma.courses

·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

FREE
Download the Apparel ERP Implementation Checklist (Excel). The 52-point fit-gap, 17 decisions before go-live, 13 test scenarios and a 30-item go-live list, ready to take into your first workshop. Free to use and share. Download the checklist

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.

  1. Odoo 18 documentation, Product variants — odoo.com
  2. Odoo 18 documentation, Order product variants (grid entry) — odoo.com
  3. Odoo 18 documentation, Manufacturing with product variants — odoo.com
  4. Odoo 18 documentation, Multilevel BoMs — odoo.com
  5. Odoo 18 documentation, Configure a manufacturing product — odoo.com
  6. Odoo 18 documentation, Work centers — odoo.com
  7. Odoo 18 documentation, By-products — odoo.com
  8. Odoo 18 documentation, Subcontracting (enabling) — odoo.com
  9. Odoo 18 documentation, Basic subcontracting — odoo.com
  10. Odoo 18 documentation, Subcontracting resupply — odoo.com
  11. Odoo 18 documentation, Shop Floor overview — odoo.com
  12. Odoo 18 documentation, Engineering change orders (PLM) — odoo.com
  13. Odoo 18 documentation, Units of measure — odoo.com
  14. Odoo 19 documentation, Units of measure — odoo.com
  15. Odoo 18 documentation, Lot numbers — odoo.com
  16. Odoo 18 documentation, Packages — odoo.com
  17. Odoo 18 documentation, Three-step receipts — odoo.com
  18. Odoo 18 documentation, Using inventory valuation — odoo.com
  19. Odoo 18 documentation, Landed costs — odoo.com
  20. Odoo 18 documentation, Quality control points — odoo.com
  21. Odoo 18 documentation, Down payments — odoo.com
  22. Odoo 18 documentation, Multi-currency system — odoo.com
  23. Odoo 18 documentation, Credit notes and refunds (Credit Note button, Reason field) — odoo.com
  24. Odoo 18 documentation, Incoterms on invoices and bills — odoo.com
  25. Odoo 18 documentation, Dropshipping — odoo.com
  26. Odoo 18 documentation, Egypt fiscal localisation — odoo.com
  27. Odoo 18 documentation, Export and import data — odoo.com
  28. Odoo 18 documentation, Hosting — odoo.com
  29. Odoo 19 documentation, External JSON-2 API — odoo.com
  30. Odoo 19 documentation, External RPC API (deprecation) — odoo.com
  31. Odoo 17 documentation, Automation rules and webhooks — odoo.com
  32. Odoo editions (Community and Enterprise comparison) — odoo.com
  33. Odoo pricing — odoo.com
  34. Odoo forum, variants recreated when an attribute is added — odoo.com
  35. ISO 2859-1, Sampling procedures for inspection by attributes — iso.org
  36. AQL tables and acceptance numbers — qima.com · tetrainspection.com · inspection levels: qualityinspection.org
  37. UCP 600, documentary credits — uscib.org · tradefinanceglobal.com
  38. EDI transaction sets — 1edisource.com · celigo.com
  39. ERPNext repository and licence — github.com
  40. ERPNext item variants — docs.frappe.io
  41. ERPNext issue #54715, subcontracting and template BOM — github.com · issue #41950, manufacturing with many variants — github.com
  42. ERPNext version 16 — frappe.io · Landed Cost Voucher — docs.frappe.io
  43. 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.