OdooWiki OCA HUB

Sale Order Invoicing Finished Task

sale_order_invoicing_finished_task folder_open OCA/sale-workflow open_in_new
Sales License: AGPL-3

This module brings the possibility to indicate if a task is available to be invoiced or not, within the task itself. Moreover, even if the task is not finished yet, it can be set as invoiceable.

As an option, you can relate this control to a Project Stage ( project.task.type ). For example, if you want to assign 'Invoiceable' to Done stage always.

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

Adds an "Invoiceable" control on tasks so that service order lines linked to tasks can only be invoiced once the task is marked as invoiceable. It can also be automated through project stages.

This module adds an invoicing control based on tasks for services sold with timesheets.

On a service product, a new option "Invoicing control by task" appears when the product is tracked by a task (global project or project). When enabled, the related sales order line will not be invoiced until its task is marked as invoiceable.

On each task, a button in the top button box shows "Invoiceable" or "Not Invoiceable" and lets users switch the status. The button is only visible when the product of the linked sales order line uses this control. If the sales order line is cancelled, already invoiced, or its order is locked, the task cannot be created or modified with that link and an error is shown.

Project stages can also carry an "Invoiceable" flag. When a task moves to a stage marked as invoiceable, the task is automatically set to invoiceable (if the product uses the control and the task was not already invoiceable).

Behind the scenes, the invoice status and quantities to invoice of the sales order line are recalculated based on the invoiceable status of its tasks, and delivered quantities from timesheets are adjusted accordingly. This affects product.template, project.task, project.task.type and sale.order.line.

Depends on

sale_timesheet
Models and fields (4)
  • project.task · extends an existing modelinvoiceable, invoicing_finished_task
  • sale.order.line · extends an existing modeltask_ids (Tasks)
  • product.template · extends an existing modelinvoicing_finished_task (Invoicing control by task)
  • project.task.type · extends an existing modelinvoiceable

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 7 confirmed, 2 with no information of 9 versions.

Sources · Odoo 12.0

Confirmed on 2026-11-03 in branch 12.0 of OCA/sale-workflow.

terminal Installation and usage

OCA documentation · Odoo 18.0

To use this module, you need to:

  • Go to Sales \> Products \> Products and create a service product.
  • Within the product, choose your preferences under General Information tab, as follows:
  • From Create on Order select Task or Project & Task.
  • Tick off Invoicing control by task checkbox, and save.
  • Go to Sales \> Orders \> Orders and create a new one. Add a customer and the product you have created.
  • Confirm the sales order. It will create a new task on your selected project.
  • Go to the task and you will find a smartbutton named Not invoiceable. When you click on it, you will indicate that the task can be invoiced. If the product is configured with an invoicing policy "Timesheets on tasks", time spent on the task is used to compute the delivered quantity.
  • Optional: if you want to use project stages to control this, go to Project \> Configuration \> Task Stages, and in the stages that you consider are invoiceable, you have to set the Invoiceable field to true.

No verified information in OCA: Installation, Configuration.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.