Odoo can run a contracting company in Kuwait with standard apps for most of the work: Project for the jobs, Purchase for suppliers and subcontractors, Inventory for materials going to site, Fleet and Maintenance for vehicles and equipment, Timesheets for labour cost, and Accounting for the books and the project budgets. Two things are not standard: retention on progress claims, and moving project cost into a work-in-progress account. Both are handled with configuration or a small custom module. The rest is setting the apps up around how you price, buy and bill a job.
Projects, budgets and cost control
Each project in Odoo carries an analytic account, and every cost and revenue linked to the project lands on it: supplier and subcontractor bills, timesheets, materials sent to site, expenses and customer invoices. The project’s profitability panel shows revenue against cost by type, from the same entries finance posts, so the site and the accounts read the same numbers.
The budget sits in Accounting as an analytic budget, by project and, if you split the analytic plans that way, by cost type: materials, subcontract, labour, equipment. Once the budget is open, each line shows the budgeted amount, the achieved amount from posted entries, and the committed amount, which adds confirmed purchase orders not yet billed. When a buyer enters a purchase order that would take a project over its budget, Odoo highlights the line in red. Budgets need Enterprise, because they are part of the Accounting app.
Subcontractors
A subcontract is a purchase order to the subcontractor, with the scope as service lines and the order linked to the project. Set those services to bill on received quantities: the site engineer records the work done against each line, and the subcontractor’s bill is matched to what was recorded. Every purchase order and bill appears on the project, and its cost lands on the project’s analytic account.
Purchase can require a second approval for orders above an amount you set. Approval chains that depend on the project, the cost type or the budget left need configuration or a module.
Billing the client: progress claims, advances and retention
Enter the contract as a sales order linked to the project, with the bill of quantities as order lines grouped in sections. Each line is invoiced in one of two ways. By milestone: each milestone in the project carries a percentage of the line, and when the engineer marks it reached, that share can be invoiced. By measured quantity: the quantity done is entered on the order line, and each claim invoices what was added since the last one.
An advance payment is a down payment invoice, as a percentage or a fixed amount, deducted on later invoices. Odoo deducts it on the next regular invoice. If your contracts recover the advance as a share of each claim, the accountant adjusts the deduction on each draft invoice, or a small module calculates it.
Retention is not a standard field in Odoo, and there are two ways to handle it. The light one is a payment term that splits each invoice into installments, with the retained share due at the end of the defects liability period. The fuller one is a small custom module that posts retention to its own receivable and payable accounts, shows it on the claim, and releases it at handover. The same choice applies to retention you hold back from subcontractors.
Materials, equipment and labour
Materials to site. Since Odoo 18, a delivery from your store can be linked to a project. With analytic costs switched on for that operation type, validating the delivery posts the material cost to the project. Materials bought straight to site go on purchase orders linked to the project, so their bills land there too.
Vehicles and equipment. Fleet keeps each vehicle’s contracts, services, repairs and odometer readings, with a cost report by vehicle or driver. Maintenance tracks equipment such as generators, mixers and scaffolding, with preventive and corrective maintenance requests. Charging an excavator’s hours to the project it worked on is not standard: it needs a small module, or a monthly allocation entry to each project’s analytic account.
Labour. Timesheets record hours against the project and its tasks, and Odoo values them at each employee’s hourly cost on the project’s analytic account. Site workers do not need their own login: a foreman or site engineer with the right access enters and validates the crew’s hours. Set the hourly cost to include more than salary, such as housing, transport and residency fees, or the project margin will look better than it is.
Work in progress in the accounts
Standard Odoo posts project costs to expense accounts and tags them with the project’s analytic account. Contractors often also need the balance sheet to show work in progress: cost incurred on jobs not yet billed, or revenue recognized by stage of completion. Odoo does not ship a construction work-in-progress entry. It is done either with a month-end journal entry per project, prepared from the project’s analytic balance, or with a custom module that calculates and posts it. Agree the method with your auditor before go-live, because it decides how the project reports are built.
Which Odoo apps, and what needs a custom module
| Need | Odoo app | Standard or custom |
|---|---|---|
| Project budgets and cost control | Project, Accounting | Standard (budgets need Enterprise) |
| Subcontractor orders and bills | Purchase, Project | Standard |
| Progress claims to the client | Sales, Project milestones | Standard |
| Advance payment | Sales down payments | Standard; recovery per claim is a manual step or a small module |
| Retention | Accounting payment terms | Configuration, or a custom module |
| Materials to site | Inventory, Project | Standard from Odoo 18 |
| Vehicles and equipment | Fleet, Maintenance | Standard; equipment cost per project is custom |
| Labour cost | Timesheets, Employees, Payroll | Standard; Kuwaiti payroll rules are configured |
| Work in progress | Accounting | Month-end entries or a custom module |
| Progress claim document in Arabic | Accounting | Custom report |
Project, Purchase, Inventory, Fleet, Maintenance and Timesheets are in both editions of Odoo. The Accounting app with its budgets, and Payroll, are in Enterprise; Odoo Enterprise or Community explains the difference. Since Odoo 18, Odoo also publishes a General Contractor industry package for Enterprise, with construction products, quotation templates, project stages and document folders. It shortens the setup, but it adds no retention accounting, work-in-progress entries or progress claim report.
What is different in Kuwait
If your contracts, claims and invoices go out in Arabic, or in Arabic and English, Odoo’s GCC invoice module prints Arabic beside English on invoices and vendor bills. A progress claim showing the contract value, work done to date, previous claims, this claim, retention and advance recovery is a custom report, which we build in both languages. Amounts are in Kuwaiti dinars with three decimals, and there is no VAT line, since Kuwait has no VAT as of October 2026. If the group also works in Saudi Arabia or the UAE, those companies need VAT set up, and Saudi invoices need ZATCA e-invoicing.
Labour is the other Kuwaiti part. Odoo’s payroll localizations do not include Kuwait, so the rules are configured on the Payroll app: salary structures with allowances, PIFSS for Kuwaiti employees, end-of-service indemnity under the private-sector labour law, leave settlement, and the salary transfer file for your bank. Timesheets and payroll then work from the same employee records.
How IT Horizon sets it up
We start with workshops on how you price, buy, build and bill a job. From those we write a fixed scope: which apps, how budgets and claims are structured, what is standard and which modules are custom. We test on a copy of your data, from purchase order to progress claim, before cut-over, and stay close in the first weeks after go-live. Our ITH Suite already covers multi-level approvals and Kuwaiti payroll provisions on Odoo 20. How a rollout runs is on our implementation page, and the app itself on our Odoo Project page.
What to do next
- Pick one recent project and list its budget lines, subcontracts, claims and retention as they happened.
- Mark which needs in the table above you have, and how you handle each one today.
- Book a consultation and bring both. A consultant will tell you what Odoo covers as standard and what would be built.