Do you approve another purchase order because a project appears under budget, then find that arriving invoices push it beyond the limit? The difference starts with one figure: the cost already recorded plus purchases you have approved but have not yet been invoiced.
Odoo’s analytic budgets bring those two parts together: posted journal items and confirmed, unbilled purchase orders allocated to the project 1. At ToDoOps, we start with decisions like this: what must the manager see before approval, and what do finance and procurement need to act on it?
See the Odoo solution and our services on the homepage for an overview, then use the example below to identify what your projects need.
What is the difference between budget, recorded expense, commitment, and cash in construction accounting software?
Four terms get used as if they were one in project meetings. Separating them is the basis for the decision:
- Budget: the approved limit for the project or one of its lines.
- Recorded expense (Achieved in a cost budget): what has actually been posted in the accounting entries.
- Commitment (Committed): Achieved plus confirmed purchase orders whose invoices have not yet arrived.
- Cash: what has left the bank or cashbox, on its own timing according to payment terms.
The manager needs to see the commitment before signing. Finance follows cash to prepare liquidity. Procurement needs to know what is left before negotiating with the next supplier.
For broader industry context, McKinsey reported on 27 February 2017 that global construction productivity had grown about 1% a year over the previous two decades, against 2.8% for the wider economy 2. That is historical global context; your decision today should use time and costs measured in your own projects. The example below shows how visibility of commitments can support approval.
What does this look like in a project with a 100,000 SAR budget?
- Budget: 100,000 SAR.
- Achieved (posted entries): 40,000 SAR.
- Confirmed purchase order, invoice not yet received: 20,000 SAR.
- Committed: 60,000 SAR, which includes the 40,000 already Achieved.
- Remaining against Committed: 40,000 SAR.
Do not add 40,000 and 60,000 and call it 100,000 spent, because the first amount sits inside the second. These are hypothetical figures illustrating a budget; bank payments are followed separately by their due dates. The manager sees the commitment before adding another order, finance prepares the payment, and procurement has a clear basis for reviewing quantity and price.
For a preliminary estimate of an Odoo project for your company based on inputs you choose, use our time, potential savings and implementation-cost calculators. They estimate impact and budget from your inputs, separately from this project-budget example.
How does Odoo link project cost to budgets and analytic entries?
An analytic budget shows Achieved from posted journal items and Committed, which includes Achieved plus confirmed, unbilled purchase orders. The project profitability report brings together revenue and costs linked to the project and its analytic account according to each record’s status. In that report, purchase-order costs appear when the vendor bill is posted. We therefore use budget commitments alongside profitability rather than treat the reports as interchangeable 1.
First, choose the level you need to monitor: project, phase or work package. Set up the analytic accounts and allocations accordingly, then configure how purchasing and inventory operations feed material costs into the correct records. That connection gives finance a figure they can explain.
When the owner asks why a work package costs more, the accountant can trace the records and the buyer can review outstanding orders. Instead of compiling another spreadsheet for the meeting, the team can discuss what to do: amend an order, review a supplier or change the timing.
Odoo 19 also includes a Saudi Arabia localization. We review what is needed from it alongside the accounting and invoicing setup, within the project scope (Odoo 19).
Does Odoo suit general contracting, finishing, MEP, and maintenance companies?
It suits them to the extent they run on one cycle: project, then purchase orders and subcontractors, then cost, then invoice. What differs between activities is the shape of the analytic accounts:
- General contracting: many work packages and subcontractors, so the budget is split by package to show which purchase order consumes which line.
- Finishing: repeated material purchases spread across sites or units, so linking to the site or unit is the key to reading the numbers.
- MEP: electrical, mechanical, and plumbing systems overlap on the same site, so cost is separated by system while the project stays the single frame.
- Maintenance: visits and spare parts are charged to a contract or site rather than a project that ends.
To see which Odoo applications are available, browse the applications articles, and for the sectors, see the industries page.
How do we handle progress certificates, variations, and retention in Odoo?
We start from the contract document: the payment schedule, the retention percentage, and how variation orders are approved. Then we review how this is arranged in Odoo at the project and invoice level.
The Saudi localization chapter in Odoo 19 documents retention handling 1, and how well your contract flow and invoice format fit it is settled within the project scope. Scheduling in Primavera and BIM models are discussed as a separate requirement when needed.
Does the approach differ between small and large contractors?
Monshaat classifies a business by the higher of its employee category and its revenue category (Monshaat). The table shows the four categories with hypothetical company examples. They are examples, not averages:
| Category | Employees | Annual revenue | Hypothetical example |
|---|---|---|---|
| Micro | 1–5 | up to 3M SAR | 5 employees, 1.2M SAR |
| Small | 6–49 | over 3M to 40M SAR | 25 employees, 12M SAR |
| Medium | 50–249 | over 40M to 200M SAR | 120 employees, 90M SAR |
| Large | 250+ | over 200M SAR | 400 employees, 300M SAR |
We apply the same proportions as the 100,000 SAR example to a hypothetical project budget for each category, so they are easy to compare (amounts in SAR):
| Category | Project budget | Achieved | Confirmed, unbilled orders | Committed (includes Achieved) | Remaining |
|---|---|---|---|---|---|
| Micro | 50,000 | 20,000 | 10,000 | 30,000 | 20,000 |
| Small | 500,000 | 200,000 | 100,000 | 300,000 | 200,000 |
| Medium | 5,000,000 | 2,000,000 | 1,000,000 | 3,000,000 | 2,000,000 |
| Large | 20,000,000 | 8,000,000 | 4,000,000 | 12,000,000 | 8,000,000 |
The classification places a company in context and does not set the system’s price. Price follows the scope of work, the applications, and the data, as explained in the Odoo pricing guide for Saudi Arabia.
How can I try a connected Odoo sales and inventory workflow?
You can try the idea yourself with Try Odoo Interactively. It is a guided sales and inventory simulation with fictional data. Your construction documents and project stages are reviewed within the project scope. It shows how a document moves from an order to a stock movement to an invoice, and how the stages of the cycle connect. For another sales-and-inventory example, read Odoo retail solutions for the Saudi market.
How do you start an Odoo project for a construction company with ToDoOps?
We begin with an introductory session on your main projects, how materials are purchased, and how payments are settled. The scope becomes clear from there. ToDoOps services, according to what is agreed, include:
- Understanding the business and defining the scope, applications, and data.
- Configuration.
- Training and testing.
- Planning the transition.
- Support within what is agreed.
You can find an overview of the company and its services on the home page.
Frequently asked questions about Odoo for construction
Does Odoo show the commitment before the supplier invoice arrives?
Yes. Committed in analytic budgets adds confirmed purchase orders that have not been invoiced to the posted entries, so the commitment shows before the invoice does (Odoo 19).
Is the remaining budget the same as available cash?
No. Remaining compares the budget with Committed, while cash follows bank movements and payment dates.
Must every purchase order be linked to the project for its cost to appear?
Cost appears in a project’s figures when it is tied to the project’s analytic records. So we agree with the procurement team how the project or work package is selected when an order is created.
Can a small company start with a limited scope in Odoo?
Yes. After understanding your business, we agree on the applications that serve your first question, then define the data needed for configuration.
What data do we need to start setting up Odoo for construction?
Usually contract documents, the project list with budget breakdowns, the supplier and subcontractor list, and the chart of accounts. The exact requirements are settled when the scope is defined.
What is the next step for your company?
If you want to learn more before any conversation, the best place is the ToDoOps home page. To discuss your project directly, contact us and choose the contact method that suits you there. You can also use our calculators to estimate impact and Odoo budget using your own figures. Bring the project you want to start with and a decision that is difficult to make today. That gives the conversation a practical purpose.
References
McKinsey & Company, “Reinventing construction through a productivity revolution,” original page. Presents global construction productivity growth against the wider economy over the two decades before 2017, used here as historical context.
Odoo 19 documentation: Project profitability, Budgets (analytic), and Saudi Arabia localization, including Retention. Describes how costs link to a project’s analytic records and how Committed is derived from posted journal items and confirmed, unbilled purchase orders.
Monshaat (Small and Medium Enterprises General Authority), SMEs definition. Defines business categories by full-time employee count and annual revenue, with the higher category applying.
