| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/8.0/sale_service_project |
| VERSION | |
| VERSION | 1.1.1 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Stéphane Bidoul (ACSONE), OCA Transbot, Sergio Teruel, oca-travis, Weblate, Antonio Espinosa, Sergio Incaser, sergio, sergio-incaser, Carlos Incaser |
| WEBSITE | |
| WEBSITE | http://www.tecnativa.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:11:22 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/project: - project_task_materials odoo/odoo: - project - base_setup - base - web_kanban - web - product - decimal_precision - report - analytic - board - resource - sale_service - procurement - sale - sales_team - web_kanban_sparkline - account_voucher - account - edi - email_template - procurement_jit - project_timesheet - hr_timesheet_sheet - hr_timesheet - hr - hr_attendance - hr_timesheet_invoice - account_analytic_analysis |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
invoice_form |
account.invoice.form | account.invoice | field | Inherits account.invoice_form |
product_task_materials_form_view |
product.task.materials.form | product.task.materials | form | New |
product_task_materials_tree_view |
product.task.materials.tree | product.task.materials | tree | New |
product_task_work_form_view |
product.task.work.form | product.task.work | form | New |
product_task_work_tree_view |
product.task.work.tree | product.task.work | tree | New |
report_invoice_document |
report_invoice_document | ir.ui.view | qweb | Inherits account.report_invoice_document |
report_saleorder_document |
report_saleorder_document | ir.ui.view | qweb | Inherits sale.report_saleorder_document |
view_order_form_service_project |
sale.order.form.service.project | sale.order | xpath | Inherits sale.view_order_form |
view_order_line_tree_task |
sale.order.line.tree.task | sale.order.line | field | Inherits sale.view_order_line_tree |
view_product_task_form |
product.form.view.inherit | product.template | field | Inherits sale_service.view_product_task_form |
view_project_kanban_task_hours |
project.project.kanban.inherited | project.project | field | Inherits project_timesheet.view_project_kanban_inherited |
view_sale_order_line_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_sale_service_inherit_form2 |
sale.service.form.view.inherit | project.task | field | Inherits project.view_task_form2 |
view_sale_service_project_order_filter |
sale.order.task.filter.inherit | sale.order | xpath | Inherits sale.view_sales_order_filter |
view_task_search_form_project_parent |
project.task.search.form.project.parent | project.task | field | Inherits project.view_task_search_form |
wiz_compute_task_price |
product.price.service.wizard.form | product.price.service.wizard | form | New |
No new fields.
Public methods (1)invoice_cost_create(self, data=None)
print_works
Boolean
default=True
string='Print materials and works'
No public methods.
sale_order_lines
Many2many → sale.order.line
column1='invoice_id'
column2='order_line_id'
comodel_name='sale.order.line'
readonly=True
relation='sale_order_line_invoice_rel'
string='Sale Order Lines'
task_materials_ids
Many2many → project.task.materials
column1='invoice_line_id'
column2='material_line_id'
comodel_name='project.task.materials'
readonly=True
string='Materials'
task_work_ids
Many2many → project.task.work
column1='invoice_line_id'
column2='work_line_id'
comodel_name='project.task.work'
readonly=True
string='Works'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('type', '=', 'service')]
string='Product'
uom_id
Many2one → product.uom
string='Unit of measure'
args: 'product.uom'
action_compute_price(self)
No new fields.
Public methods (1)action_compute_price(self)
material_id
Many2one → product.product
comodel_name='product.product'
required=True
string='Material'
product_id
Many2one → product.template
comodel_name='product.template'
ondelete='restrict'
string='Product'
quantity
Float
digits=dp.get_precision('Product Unit of Measure')
string='Quantity'
sequence
Integer
No public methods.
hours
Float
digits=dp.get_precision('Product Unit of Measure')
string='Hours'
name
Char
string='Name'
product_id
Many2one → product.template
comodel_name='product.template'
ondelete='restrict'
string='Product'
sequence
Integer
No public methods.
task_materials_ids
One2many → product.task.materials
comodel_name='product.task.materials'
inverse_name='product_id'
string='Materials'
task_work_ids
One2many → product.task.work
comodel_name='product.task.work'
inverse_name='product_id'
string='Task Works'
action_compute_price(self)
task_hours
Float
compute='_compute_task_hours'
store=True
No public methods.
all_invoiced
Boolean
compute='_compute_analytic_line_ids'
analytic_line_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
compute='_compute_analytic_line_ids'
invoice_exists
Boolean
compute='_compute_analytic_line_ids'
invoice_ids
One2many → account.invoice
comodel_name='account.invoice'
compute='_compute_analytic_line_ids'
is_closed
Boolean
compute='_compute_analytic_line_ids'
project_parent_id
Many2one
related='project_id.parent_id'
store=True
string='Project Parent'
sale_line_id
Many2one
index=True
action_create_invoice(self)
action_view_invoice(self)
has_task
Boolean
compute='_compute_tasks'
invoice_on_timesheets
Boolean
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
print_works
Boolean
default=True
string='Print materials and works'
task_closed
Boolean
compute='_compute_tasks'
task_ids
One2many → project.task
comodel_name='project.task'
compute='_compute_tasks'
string='Tasks'
action_view_task(self)
test_no_product(self, order)
auto_create_task
Boolean
readonly=True
related='product_id.auto_create_task'
compute_price
Boolean
detailed_materials
Boolean
string='Print Material Prices'
detailed_time
Boolean
string='Print Works Times'
task_closed
Boolean
compute='_compute_task_closed'
store=True
task_ids
One2many → project.task
comodel_name='project.task'
inverse_name='sale_line_id'
string='Tasks'
task_materials_amount
Float
compute='_compute_task_materials_amount'
digits=dp.get_precision('Account')
string='Material Amount'
task_materials_ids
One2many → sale.order.line.task.materials
comodel_name='sale.order.line.task.materials'
copy=True
inverse_name='order_line_id'
string='Materials'
task_work_amount
Float
compute='_compute_task_work_values'
digits=dp.get_precision('Account')
string='Work Amount'
task_work_hours
Float
compute='_compute_task_work_values'
digits=dp.get_precision('Product Unit of Measure')
string='Total Hours'
task_work_ids
One2many → sale.order.line.task.work
comodel_name='sale.order.line.task.work'
copy=True
inverse_name='order_line_id'
string='Works'
task_work_product_id
Many2one → product.product
comodel_name='product.product'
domain=[('type', '=', 'service')]
string='Work Price Product'
task_work_product_price
Float
compute='_compute_task_work_values'
digits=dp.get_precision('Product Price')
readonly=True
product_id_change(self, pricelist, product, qty=0, uom=False, qty_uos=0, uos=False, name='', partner_id=False, lang=False, update_tax=True, date_order=False, packaging=False, fiscal_position=False, flag=False)
order_line_id
Many2one → sale.order.line
comodel_name='sale.order.line'
string='Order Line'
price
Float
digits=dp.get_precision('Product Price')
product_id
Many2one → product.product
comodel_name='product.product'
string='Material'
quantity
Float
default=1.0
digits=dp.get_precision('Product Unit of Measure')
string='Quantity'
sequence
Integer
default=10
No public methods.
hours
Float
digits=dp.get_precision('Product Unit of Measure')
string='Hours'
name
Char
string='Name'
order_line_id
Many2one → sale.order.line
comodel_name='sale.order.line'
string='Order Line'
sequence
Integer
default=10
No public methods.