Tiles are sold by the square meter, delivered in boxes and counted in the warehouse in yet another unit. Odoo keeps one product in several units, reserves the order, checks the load volume and tracks receivables. Tax documents and the waybill are connected separately.
The range is wide, orders are bulky, and the customer often works by project site. Excel and a paper ledger break down at this scale.
Odoo S.A. lists the “Hardware Store” industry package in the Apps Store (technical name hardware_shop; present in versions 17.0 through 20.0). The page describes it as being for stores with a broad range: plumbing, tools, garden, carpentry, electrical and household goods. According to the description, the package combines POS, inventory, sales, purchase, accounting, contacts, employees, a dashboard, barcodes and documents; the mandatory dependencies are Contacts, Knowledge, Discuss, Invoicing, Inventory, Sales, Point of Sale and Purchase. The package requires Odoo Enterprise and is available on Odoo Online, Odoo.sh and your own server. The page states that accounting is not preinstalled, warehouse settings stay simple and country localization is not included.
Odoo's Hardware Store industry page lists POS, inventory, invoicing, planning, purchase and eCommerce. Unit of measure, packaging, business-customer terms and customer receivables are not mentioned there. These are exactly the parts at the core of wholesale building materials trade and delivery to project sites, so we describe them separately below.
Odoo has other packages for building contractors (General Contractor, Property Developer): they are for project-site and estimate work, not for trade. Building contractor page →
The core is sales and inventory. The rest tie them to the POS, purchasing, delivery and accounting. Which apps are needed is determined at the diagnostic.
Quotation, order, advance payment, price list, delivery and invoice.
Multiple warehouses, reservation, picking, delivery, packaging, stock count.
Store counter: cash, card, customer account, shift.
Supplier order, minimum stock rule, purchase unit.
Invoice, payment terms, receivables and reminders, bank reconciliation.
Scanner for receiving and counting, packaging barcode. Included in Enterprise.
Your own trucks and their weight and volume limits; used in delivery planning.
Catalog, stock levels, ordering for business and individual customers.
A ready-configured database for a store. Requires Enterprise.
Tiles are counted in the warehouse in square meters, sold to the customer in boxes, and at the POS rung up by the box or by the piece. According to Odoo's documentation, this requires enabling “Units of Measure & Packagings” in the Inventory settings. Three units sit in three places: the inventory unit (stock is counted in it), the sales unit (the Packagings field on the product's Sales tab) and the purchase unit (the Purchase tab). Odoo performs the conversion between units itself: if a sales order is in a different unit, the quantity is converted to the inventory unit at delivery.
Packaging is product-specific: it is defined by a name, the quantity inside and a unit of measure (a hypothetical example: one box is 1.44 m²), and it can also be given a barcode. If the unit you need is not in the table, a new one is created on the Units & Packagings page, with a name and its equivalent in another unit. The product category's Logistics section has a “Reserve Packagings” field. “Reserve Only Full Packagings” reserves only whole packages, while “Reserve Partial Packagings” also reserves partially. According to what is new in Odoo 20, packaging-specific pricing in sales has also been added.
Rounding the quantity on a sales line to a whole box is not described in the documentation. For a product like tile, we test this on a test database and, if needed, cover it with a rule.
Each step leaves a document in Odoo, so the manager, warehouse clerk, driver and accountant all look at the same order.
The customer provides a product list or the site area. The manager builds the quotation with the sales unit and packaging.
The quotation becomes an order. The advance payment and payment terms (due date, staged payment) are set here.
The warehouse reserves goods in whole packages or partially. A purchase order is opened for the missing part (depending on the rule and route).
The warehouse clerk picks the order and brings it to the loading point. A large order is split into several deliveries.
The truck is recorded as a delivery method; the maximum weight and volume limit is checked. The site address is stored on the customer record as a separate delivery address.
The invoice is issued for the order or for the delivered quantity (depending on the policy). The electronic invoice in the tax system and the waybill are connected separately.
The due date is tracked against the payment terms; reminder stages start on overdue invoices.
Returned goods are processed with a credit note and a stock movement. Management sees revenue and receivables by product group, customer and delivery.
The example is hypothetical, without figures. A foreman orders tile, adhesive and profiles for a site. Part of the adhesive is out of stock.
Units, packaging, inventory and receivables tracking are in the standard setup. Rounding, tax documents and IKPU (MXIK) are separate work. The data follows the Odoo 19 and 20 documentation; if your version differs, we check it at the diagnostic.
| Goal | In standard Odoo | Extra work (BUline) |
|---|---|---|
| One product, several units (m², box, pcs) | Available: inventory, sales (packaging) and purchase units, automatic conversion | Building the catalog with units and packaging, checking on import |
| Whole-package reservation | Available: “Reserve Only Full Packagings” on the category, or partial reservation | Deciding which mode is needed in which category |
| Rounding quantity to a whole box | Not described in the documentation | A test, and if needed a rule or Studio |
| Variants and batches (color, size, shade) | Available: product variants and batch (lot) tracking | Variant structure, the procedure for recording the batch number at receiving |
| Delivery method and load limit | Available: delivery methods, maximum weight and volume. Dispatch management needs the Fleet and Mapbox integration (19.0 documentation) | Truck capacity, product weight and volume fields, route |
| Delivery to a project site (several addresses for one customer) | Available: separate delivery addresses on the customer record | Fields for the site name and the responsible person (foreman) |
| Receivables control and payment terms | Available: payment terms, reminder stages, an aged receivables report. The customer account limit at the POS only warns. Blocking by limit on an order is not confirmed in the documentation | The limit rule and the approving person (outside the POS) |
| Price lists for wholesale, foremen and the store | Available: price lists and discounts; in Odoo 20, packaging-specific pricing | Customer groups and rules |
| Electronic invoice and waybill | No: the Odoo documentation does not mention a connection to an Uzbekistan operator | Choosing an operator, fields. Electronic documents and tax |
| IKPU (MXIK) code in the product form | No: not mentioned in the localization documentation | A field on the record, and a check of the 11-digit base code on import |
| Fiscal receipt (online or virtual cash register) | No: the Odoo documentation does not mention a connection to an Uzbekistan fiscal module | Connecting to a cash register device from the registry. POS page |
In building materials, credit sales are the norm. What matters is to move them out of the ledger and run them with a document and a due date.
The following has been checked against official sources. What applies to your product range, we list in writing during the diagnostic.
Each connection is assessed and built separately. We do not promise that a “ready-made connector exists.”
Reports are not copied into a separate spreadsheet: they are built from the order, warehouse and accounting documents in the same database.
The stages follow the general BUline Method. The timeline is agreed in writing after the diagnostic. Implementation process →
We study the catalog and units of measure, the warehouse structure, the delivery method, the debt policy, the current cash register device and the document flow. Result: a business requirements document (BRD).
We confirm the unit and packaging structure, the warehouse and delivery scheme, the debt rules, the document integrations and the hosting type.
The catalog is imported, and unit conversion and reservation are tested. Then a real pilot with one warehouse or one customer group.
Managers, warehouse staff, cashiers, driver-forwarders and accountants are trained by role; the practice runs on your own catalog. Guides and video lessons are provided.
After launch, 30 days of enhanced support, then agreed ongoing assistance. When the rules change, the document connection is checked again.
This list speeds up the diagnostic. We can start even if not everything is ready.
| Mistake | Consequence | How we prevent it |
|---|---|---|
| Creating a separate product for every size | The catalog and reports fragment | Design the variant and packaging structure at the start |
| Mixing the warehouse unit with the sales unit | Stock and sales do not match | Record the warehouse, sales and purchase unit for each product in writing |
| Relying on the POS warning to control the debt limit | A sale above the limit goes through | A rule and an approver at the order level |
| Uploading products without an MXIK code | An error on the receipt and the invoice | Code validation on import |
For shops, yes: Odoo S.A. publishes a “Hardware Store” package. It requires Enterprise and is also available in Odoo Online. Units and packaging, corporate customer terms, and debt and delivery limits are not mentioned on the page; they are built separately. The country localization is not part of the package.
Yes. The warehouse unit, the sales unit (package) and the purchase unit are set separately, and Odoo converts between them. Rounding to a whole box is not described in the documentation, so we test it in a test database.
In the product category you choose “Reserve Only Full Packagings” or “Reserve Partial Packagings”. The first mode reserves only whole packages, the second also partial ones.
Dispatch management compares the maximum weight and volume of the vehicle category with the weight and volume of the product. This requires the Fleet app, product data and a Mapbox integration for the route (19.0 documentation). If the data is incomplete, no calculation is produced.
Payment terms, reminders and a receivables report are in the standard. The customer account limit in POS only warns. Blocking by limit at the order level is not confirmed in the documentation: the rule and the approver are defined in the diagnostic.
The Odoo documentation does not mention a connection to an operator in Uzbekistan. The connection path depends on the operator's documentation and on how the ERI (e-signature) key is used. We confirm it in writing during the diagnostic. Electronic documents and tax →
The industry package is available in Odoo Online, but Online is not compatible with third-party and custom modules. If an electronic invoice module or a custom route with Mapbox is needed, Odoo.sh or your own server is chosen. Hosting types →
The Odoo license depends on the number of users and apps (terms on odoo.com). The scope of BUline's service depends on the number of warehouses and cash desks, the size of the catalog, apps, customization, integrations and training. The exact cost and timeline are given in a written proposal after the free diagnostic.
During the diagnostic, we review your processes and tell you where standard Odoo is enough and where configuration is needed — with an app list, edition and phases.