How to Set Up Fixed-Price Billing in Odoo 19: Complete Guide
Managing project-based services becomes more efficient with the Fixed-Price Billing feature in Odoo 19. This functionality allows businesses to create predefined project contracts with a fixed sales value, ensuring accurate invoicing and better financial control throughout the project lifecycle. Using the Project and Sales modules, organizations can link service products, sales orders, tasks, milestones, and customer invoices within a centralized workflow. Odoo 19 helps streamline project tracking by automating invoice generation based on project progress while maintaining clear visibility into profitability, timesheets, and resource allocation. This step by step beginner guide covers everything you need to configure fixed-price project billing in Odoo 19.
What You'll Learn:
- How to create and configure a project for fixed-price billing
- How to create a service product with prepaid invoicing policy
- How to create a quotation and confirm the sales order
- How to generate a prepaid customer invoice
- How to record timesheets and track allocated hours
- How to handle additional billable hours through upselling
Prerequisites
Before setting up fixed-price billing in Odoo 19, ensure the following modules are installed and activated on your Odoo instance:
| Module | Purpose |
|---|---|
| Project | Manage project tasks, activities, timesheets, and billing configuration |
| Sales | Create service products, quotations, and manage sales orders |
| Accounting | Generate and manage customer invoices and payments |
| Timesheets | Record time spent on project tasks for billing and tracking |
Step 1: Create and Configure a Project
The first step is to create a project that will serve as the central workspace for managing tasks, activities, timesheets, and billing. Navigate to the Project module from the Odoo dashboard and click the New button to create a new project record.
Choose Project Creation Method
In Odoo 19, clicking New gives you two options: Create a new project from scratch or select a project template to use pre-configured settings. Choose the option that best fits your workflow requirements.
Configure Project Settings
Enter the project title in the Name field. Enable the Timesheets option to record time spent on project tasks. Activate the Billable feature to generate customer invoices based on timesheets and materials. Assign the related customer for streamlined billing management.
Set Up Email Alias (Optional)
Configure an email alias in the Create tasks by sending an email to field. Odoo will automatically generate project tasks whenever emails are received through the specified alias, enabling task creation directly from email communication.
Step 2: Create a Service Product with Fixed-Price Invoicing
After creating the project, the next step is to create a service product that will be used for billing. Navigate to the Sales module and open Products > Products. Click the New button to create a new product record.
Set Product Type and Name
Enter a descriptive name for the service product. Set the Product Type to Service. This ensures the product is treated as a service rather than a physical good in Odoo's billing and inventory workflows.
Configure Service Tracking
Set the Service Tracking option to Create a Task in Project or Create a Task and Project. This tells Odoo to automatically generate a project task when the sales order is confirmed. Once task creation is enabled, the Project field becomes available to select the target project.
Set Invoicing Policy to Prepaid/Fixed Price
Change the Invoicing Policy to Prepaid/Fixed Price. This configuration allows customer invoicing and payment registration before recording timesheets against the related project tasks. You can also optionally select a Task Template to create new tasks using a predefined template structure.
Important: Service Tracking Requirements
The Invoicing Policy field only appears when the Product Type is set to Service. If you set the Product Type to Consumable or Stockable, the prepaid/fixed price invoicing option will not be available. Always verify that Service Tracking is enabled to ensure automatic task creation on sales order confirmation.
Step 3: Create a Quotation and Confirm the Sales Order
With the project and service product configured, the next step is to create a quotation for the customer. Navigate to Sales > Orders > Quotations and click the New button to generate a new quotation record.
Fill in Quotation Details
Enter the customer details in the Customer field. Add the configured service product to the order lines and specify the quantity representing the allocated service hours. Complete any required sales information such as expected date and delivery terms.
Confirm the Sales Order
Click the Confirm button to validate the quotation and convert it into a confirmed sales order. After confirmation, the Tasks smart button becomes available on the sales order, providing direct access to the automatically generated project task linked to this sales order.
Step 4: Generate the Prepaid Customer Invoice
Since the Invoicing Policy is configured as Prepaid/Fixed Price, customer invoices can be generated immediately after sales order confirmation. This allows you to bill the customer upfront before any timesheets are recorded against the project tasks.
Open the Create Invoice Dialog
On the confirmed sales order, click the Create Invoice button. Choose the appropriate invoicing method based on your payment process: select Regular Invoice for full invoicing or Down Payment Invoice for partial upfront billing. Then click Create Draft Invoice to generate the draft customer invoice.
Review and Confirm the Invoice
In the draft invoice, the invoiced quantity is automatically populated based on the quantity defined in the confirmed sales order. Review the invoice details and click Confirm to validate the invoice. After confirmation, use the Pay button to register the customer payment against the invoice.
Example: Prepaid Invoice Flow
If you configure a service product with a quantity of 10 hours at $100 per hour and set Invoicing Policy to Prepaid/Fixed Price, Odoo generates an invoice for $1,000 immediately after sales order confirmation. The customer pays upfront, and timesheets are recorded later against the allocated 10 hours.
Step 5: Record Timesheets and Track Allocated Hours
Navigate back to the Project module and open the configured project either directly from the project dashboard or through the Tasks smart button available in the sales order. Inside the project, you will find the task that was automatically generated from the confirmed sales order.
Open the Project Task
From the project dashboard, locate the task linked to the sales order. The Allocated Time field displays the planned service duration defined in the sales order, which was used for the prepaid customer invoicing process. This value represents the total hours the customer has already paid for.
Record Timesheet Entries
Navigate to the Timesheets tab within the task form. Click Add a line to record time spent on the project activity. Enter the date, description of work performed, and the number of hours spent. Save the timesheet entry to update the recorded hours against the allocated time.
Monitor Time Remaining Indicators
When the recorded timesheet hours exceed the allocated service hours, Odoo automatically displays Time Remaining and Time Remaining on Sales Order indicators in red with negative values. This visual alert signals that the planned service time has been exceeded and additional billing may be required.
Step 6: Handle Additional Billable Hours via Upselling
Since the customer invoice has already been generated for the allocated prepaid service hours, any additional timesheet hours recorded beyond the planned duration require a new invoice. Odoo identifies these extra billable hours as an upselling opportunity that can be managed through the Orders to Upsell feature.
Access Orders to Upsell
Navigate to Sales > To Invoice > Orders to Upsell in the Odoo main menu. This section automatically displays sales orders that contain extra billable quantities beyond what was originally ordered and invoiced. The sales order with exceeded hours will appear in this list.
Review and Update Sales Order Quantities
Select the corresponding sales order to open the detailed order view. Analyze the Ordered Quantity, Delivered Quantity, and Invoiced Quantity for the service product. Update the Delivered Quantity to match the actual timesheet hours recorded. Save the changes to reflect the updated quantities.
Generate Invoice for Extra Hours
After updating the quantity, the Create Invoice button becomes available on the sales order. Click it to generate a new customer invoice for the additional billable hours. Create the invoice, confirm it, and process the payment to complete the billing for the extra services delivered.
Example: Upselling Workflow
If the original sales order had 10 hours at $100/hour (invoice for $1,000 already paid) and timesheets show 15 hours recorded, the Orders to Upsell list will show 5 extra delivered hours. After updating the Delivered Quantity to 15, you can create a second invoice for the additional $500.
Key Configuration Fields
| Field | Location | Description |
|---|---|---|
| Billable | Project Form | Enables customer invoice generation based on timesheets and materials |
| Service Tracking | Product Form | Determines how Odoo tracks service delivery (Create a Task, Create a Task and Project, or manual) |
| Invoicing Policy | Product Form | Controls when invoices are generated (Prepaid/Fixed Price, Order/Delivered Timesheet, or Milestones) |
| Allocated Time | Task Form | Planned service duration from sales order used for prepaid customer invoicing |
| Orders to Upsell | Sales > To Invoice | Lists sales orders with extra billable quantities beyond original invoicing |
Benefits of Fixed-Price Billing in Odoo 19
Upfront Revenue Recognition
Prepaid invoicing enables immediate revenue recognition at the start of the project, improving cash flow and reducing the risk of late payments or billing disputes after service delivery.
Automated Task Creation
Service products configured with Create a Task in Project automatically generate project tasks upon sales order confirmation, eliminating manual task creation and ensuring seamless project tracking.
Real-Time Hours Tracking
Timesheet integration provides real-time visibility into allocated vs. actual hours. Odoo automatically highlights when service hours are exceeded with red indicators, enabling proactive billing decisions.
Automated Upsell Detection
The Orders to Upsell feature automatically detects sales orders with additional billable quantities, simplifying the process of generating supplemental invoices for extra services delivered beyond the fixed-price contract.
Frequently Asked Questions
What is fixed-price billing in Odoo 19 Projects?
Fixed-price billing in Odoo 19 allows businesses to create predefined project contracts with a fixed sales value. Customers are invoiced upfront for the agreed service quantity before timesheets are recorded, ensuring accurate invoicing and better financial control throughout the project lifecycle.
How do I configure a service product for prepaid invoicing in Odoo 19?
Create a new product in the Sales module, set Product Type to Service, enable Create a Task in Project for service tracking, select the target project, and set Invoicing Policy to Prepaid/Fixed Price. This configuration allows customer invoicing before recording timesheets against project tasks.
What happens when timesheet hours exceed allocated hours in Odoo 19 fixed-price billing?
When recorded timesheet hours exceed the allocated service hours, Odoo displays Time Remaining and Time Remaining on Sales Order indicators in red with negative values. The additional hours become billable through the Orders to Upsell feature in Sales > To Invoice, allowing you to create extra invoices.
Can I create a project from a template in Odoo 19?
Yes, Odoo 19 introduced the ability to create projects using pre-configured project templates. When clicking the New button in the Project module, you can either create a new project from scratch or select a project template to create a new project with predefined settings.
How does Odoo 19 handle automatic task creation from sales orders?
When a service product is configured with the Create a Task in Project service tracking option, Odoo automatically generates a project task when the corresponding sales order is confirmed. The Tasks smart button becomes available on the sales order, providing direct access to the linked project task.
Need Help with Odoo Project Billing?
Our Odoo experts can help you configure fixed-price billing, set up project workflows, and optimize your invoicing processes with Odoo 19.
About the author
Head of Odoo Practice
Leads Braincuber's Odoo implementations across the US, India, and EU. Shipped 50+ Odoo deployments. Specializes in NetSuite and SAP Business One migrations.
