| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_tasks_list_inherit |
portal_tasks_list_inherit | ir.ui.view | qweb | Inherits project.portal_tasks_list |
product_product_form_view_inherit_sale_project |
product.product.sale.project.form | product.product | field | Inherits product.product_normal_form_view |
product_template_form_view_inherit_sale_project |
product.template.sale.project.form | product.template | field | Inherits sale.product_template_form_view |
product_template_form_view_invoice_policy_inherit_sale_project |
product.template.inherit.sale.projectform | product.template | field | Inherits sale.product_template_form_view |
project_milestone_view_form |
project.milestone.view.form.inherit | project.milestone | xpath | Inherits project.project_milestone_view_form |
project_milestone_view_kanban_inherit_sale_project |
project.milestone.view.kanban.inherit | project.milestone | field | Inherits project.project_milestone_view_kanban |
project_milestone_view_tree |
project.milestone.view.list.inherit | project.milestone | xpath | Inherits project.project_milestone_view_tree |
project_project_view_form_simplified_inherit |
project.project.view.form.simplified.inherit | project.project | xpath | Inherits project.project_project_view_form_simplified |
project_project_view_form_simplified_template |
project.project.create.wizard.form | project.template.create.wizard | field | Inherits project.project_project_view_form_simplified_template |
project_project_view_inherit_project_filter |
project.project.select.inherit.project | project.project | xpath | Inherits project.view_project_project_filter |
project_project_view_tree_inherit_sale_project |
project.project.list.inherit.sale.project | project.project | xpath | Inherits project.view_project |
project_sharing_inherit_project_task_view_form |
project.task.view.inherit | project.task | div | Inherits project.project_sharing_project_task_view_form |
project_sharing_inherit_project_task_view_tree |
project.task.view.list.inherit | project.task | field | Inherits project.project_sharing_project_task_view_tree |
project_task_view_search |
project.task.search.inherit | project.task | field | Inherits project.view_task_search_form_project_base |
project_task_view_tree_main_base |
project.task.main.list.inherit | project.task | field | Inherits project.project_task_view_tree_main_base |
project_templates_view_list |
project.project.template.list | project.project | field | Inherits project.project_templates_view_list |
project_update_default_description |
project_update_default_description | ir.ui.view | qweb | Inherits project.project_update_default_description |
quick_create_task_form_res_partner |
project.task.form.quick_create.res.partner.inherit.sale_project | project.task | xpath | Inherits project.quick_create_task_form_res_partner |
sale_order_line_view_form_editable |
sale.order.line.view.form.editable | sale.order.line | form | Inherits sale.sale_order_line_view_form_readonly |
sale_project.milestone_deadline_inherit |
sale_project.milestone_deadline_inherit | ir.ui.view | qweb | Inherits project.milestone_deadline |
sale_project_view_form_simplified_template |
sale.project.create.wizard.form | project.template.create.wizard | field | Inherits project.project_project_view_form_simplified_template |
task_type_edit_inherit_sale_project |
project.task.type.form.inherit.sale_project | project.task.type | xpath | Inherits project.task_type_edit |
view_edit_project_inherit_form |
project.project.view.inherit | project.project | div | Inherits project.edit_project |
view_order_form_inherit_sale_project |
sale.order.form.sale.project | sale.order | button | Inherits sale.view_order_form |
view_order_line_tree_with_create |
sale.order.line.list.with.create | sale.order.line | list | Inherits sale.view_order_line_tree |
view_order_simple_form |
sale.order.form.from.task | sale.order | header | Inherits sale.view_order_form |
view_sale_project_inherit_form |
project.task.view.inherit | project.task | xpath | Inherits project.view_task_form2 |
view_sale_project_quick_create_task_form |
project.task.view.inherit | project.task | xpath | Inherits project.quick_create_task_form |
view_sales_order_filter_inherit_sale_project |
sale.order.list.select.inherit.sale_project | sale.order | field | Inherits sale.view_sales_order_filter |
view_task_form_res_partner |
project.task.form.res.partner.inherit.sale_project | project.task | xpath | Inherits project.view_task_form_res_partner |
view_task_tree2_inherit_sale_project |
project.task.form.inherit.sale.project | project.task | xpath | Inherits project.project_task_view_tree_base |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)write(self, vals)
project_id
Many2one → project.project
company_dependent=True
copy=True
domain='[("is_template", "=", False)]'
args: 'project.project', 'Project'
project_template_id
Many2one → project.project
company_dependent=True
copy=True
domain='[("is_template", "=", True)]'
args: 'project.project', 'Project Template'
service_policy
Selection
compute='_compute_service_policy'
compute_sudo=True
inverse='_inverse_service_policy'
string='Service Invoicing Policy'
tracking=True
args: '_selection_service_policy'
service_tracking
Selection
ondelete={'task_global_project': 'set default', 'task_in_project': 'set default', 'project_only': 'set default'}
selection_add=[('task_global_project', 'Task'), ('task_in_project', 'Project & Task'), ('project_only', 'Project')]
service_type
Selection
selection_add=[('milestones', 'Project Milestones')]
task_template_id
Many2one → project.task
company_dependent=True
compute='_compute_task_template'
copy=True
domain="[('is_template', '=', True), ('project_id', '=', project_id)]"
readonly=False
store=True
args: 'project.task', 'Task Template'
write(self, vals)
allow_billable
Boolean
export_string_translation=False
related='project_id.allow_billable'
product_uom_id
Many2one
export_string_translation=False
related='sale_line_id.product_uom_id'
product_uom_qty
Float
compute='_compute_product_uom_qty'
compute_sudo=True
readonly=False
args: 'Quantity'
project_partner_id
Many2one
export_string_translation=False
related='project_id.partner_id'
quantity_percentage
Float
compute='_compute_quantity_percentage'
help='Percentage of the ordered quantity that will automatically be delivered once the milestone is reached.'
store=True
args: 'Quantity (%)'
sale_line_display_name
Char
export_string_translation=False
related='sale_line_id.display_name'
args: 'Sale Line Display Name'
sale_line_id
Many2one → sale.order.line
default=_default_sale_line_id
domain="[('order_partner_id', '=?', project_partner_id), ('qty_delivered_method', '=', 'milestones')]"
help='Sales Order Item that will be updated once the milestone is reached.'
index='btree_not_null'
args: 'sale.order.line', 'Sales Order Item'
action_view_sale_order(self)
allow_billable
Boolean
display_sales_stat_buttons
Boolean
compute='_compute_display_sales_stat_buttons'
export_string_translation=False
has_any_so_to_invoice
Boolean
compute='_compute_has_any_so_to_invoice'
export_string_translation=False
args: 'Has SO to Invoice'
has_any_so_with_nothing_to_invoice
Boolean
compute='_compute_has_any_so_with_nothing_to_invoice'
export_string_translation=False
args: 'Has a SO with an invoice status of No'
invoice_count
Integer
compute='_compute_invoice_count'
export_string_translation=False
groups='account.group_account_readonly'
partner_id
Many2one
compute='_compute_partner_id'
readonly=False
store=True
reinvoiced_sale_order_id
Many2one → sale.order
copy=False
domain="[('partner_id', '=', partner_id)]"
groups='sales_team.group_sale_salesman'
help='Products added to stock pickings, whose operation type is configured to generate analytic costs, will be re-invoiced in this sales order if they are set up for it.'
index='btree_not_null'
string='Sales Order'
args: 'sale.order'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line_id'
copy=False
domain=<expr>
help='Sales order item that will be selected by default on the tasks and timesheets of this project, except if the employee set on the timesheets is explicitely linked to another sales order item on the project.\nIt can be modified on each task and timesheet entry individually if necessary.'
index='btree_not_null'
readonly=False
store=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_count
Integer
compute='_compute_sale_order_count'
export_string_translation=False
groups='sales_team.group_sale_salesman'
sale_order_id
Many2one
export_string_translation=False
related='sale_line_id.order_id'
sale_order_line_count
Integer
compute='_compute_sale_order_count'
export_string_translation=False
groups='sales_team.group_sale_salesman'
sale_order_state
Selection
export_string_translation=False
related='sale_order_id.state'
tracking=False
vendor_bill_count
Integer
compute_sudo=False
export_string_translation=False
groups='account.group_account_readonly'
related='account_id.vendor_bill_count'
action_create_invoice(self)
action_customer_preview(self)
action_get_list_view(self)
action_open_project_invoices(self)
action_open_project_vendor_bills(self)
action_profitability_items(self, section_name, domain=None, res_id=False)
action_view_sols(self)
action_view_sos(self)
action_view_tasks(self)
create(self, vals_list)
default_get(self, fields)
get_panel_data(self)
get_sale_items_data(self, offset=0, limit=None, with_action=True, section_id=None)
template_to_project_confirmation_callback(self, callbacks)
write(self, vals)
allow_billable
Boolean
related='project_id.allow_billable'
display_sale_order_button
Boolean
compute='_compute_display_sale_order_button'
string='Display Sales Order'
partner_id
Many2one
inverse='_inverse_partner_id'
project_sale_order_id
Many2one → sale.order
related='project_id.sale_order_id'
string="Project's sale order"
args: 'sale.order'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line'
context={'with_remaining_hours': True}
copy=True
domain=<expr>
help='Sales Order Item to which the time spent on this task will be added in order to be invoiced to your customer.\nBy default the sales order item set on the project will be selected. In the absence of one, the last prepaid sales order item that has time remaining will be used.\nRemove the sales order item in order to make this task non billable. You can also change or remove the sales order item of each timesheet entry individually.'
index='btree_not_null'
readonly=False
recursive=True
store=True
tracking=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_id
Many2one → sale.order
compute='_compute_sale_order_id'
group_expand='_group_expand_sales_order'
help='Sales order to which the task is linked.'
store=True
args: 'sale.order', 'Sales Order'
sale_order_state
Selection
related='sale_order_id.state'
tracking=False
task_to_invoice
Boolean
compute='_compute_task_to_invoice'
groups='sales_team.group_sale_salesman_all_leads'
search='_search_task_to_invoice'
args: 'To invoice'
TASK_PORTAL_READABLE_FIELDS(self)
action_project_sharing_view_so(self)
action_view_so(self)
create(self, vals_list)
default_get(self, fields)
write(self, vals)
No new fields.
Public methods (0)No public methods.
show_rating_active
Boolean
compute='_compute_show_rating_active'
export_string_translation=False
No public methods.
allow_billable
Boolean
related='template_id.allow_billable'
partner_id
Many2one → res.partner
role_to_users_ids
One2many
compute='_compute_role_to_users_ids'
readonly=False
store=True
action_create_project_from_so(self)
action_open_template_view(self)
No new fields.
Public methods (0)No public methods.
sale_line_id
Many2one → sale.order.line
readonly=True
string='Sales Order Item'
args: 'sale.order.line'
sale_order_id
Many2one → sale.order
readonly=True
string='Sales Order'
args: 'sale.order'
No public methods.
closed_task_count
Integer
compute='_compute_tasks_ids'
export_string_translation=False
groups='project.group_project_user'
completed_task_percentage
Float
compute='_compute_completed_task_percentage'
export_string_translation=False
groups='project.group_project_user'
is_product_milestone
Boolean
compute='_compute_is_product_milestone'
export_string_translation=False
milestone_count
Integer
compute='_compute_milestone_count'
export_string_translation=False
project_account_id
Many2one → account.analytic.account
related='project_id.account_id'
args: 'account.analytic.account'
project_count
Integer
compute='_compute_project_ids'
export_string_translation=False
groups='project.group_project_user'
string='Number of Projects'
project_id
Many2one → project.project
copy=False
domain=[('allow_billable', '=', True), ('is_template', '=', False)]
help='A task will be created for the project upon sales order confirmation. The analytic distribution of this project will also serve as a reference for newly created sales order items.'
index='btree_not_null'
args: 'project.project'
project_ids
Many2many → project.project
compute='_compute_project_ids'
copy=False
export_string_translation=False
groups='project.group_project_user,project.group_project_milestone'
string='Projects'
args: 'project.project'
show_create_project_button
Boolean
compute='_compute_show_project_and_task_button'
export_string_translation=False
groups='project.group_project_user'
show_project_button
Boolean
compute='_compute_show_project_and_task_button'
export_string_translation=False
groups='project.group_project_user'
tasks_count
Integer
compute='_compute_tasks_ids'
export_string_translation=False
groups='project.group_project_user'
string='Tasks'
tasks_ids
Many2many → project.task
compute='_compute_tasks_ids'
export_string_translation=False
groups='project.group_project_user'
search='_search_tasks_ids'
string='Tasks associated with this sale'
args: 'project.task'
visible_project
Boolean
compute='_compute_visible_project'
export_string_translation=False
readonly=True
args: 'Display project'
action_confirm(self)
action_create_project(self)
action_view_milestone(self)
action_view_project_ids(self)
create(self, vals_list)
default_get(self, fields)
get_first_service_line(self)
write(self, vals)
project_id
Many2one → project.project
copy=False
export_string_translation=False
index=True
args: 'project.project', 'Generated Project'
qty_delivered_method
Selection
selection_add=[('milestones', 'Milestones')]
reached_milestones_ids
One2many → project.milestone
domain=[('is_reached', '=', True)]
export_string_translation=False
string='Reached Milestones'
args: 'project.milestone', 'sale_line_id'
task_id
Many2one → project.task
copy=False
export_string_translation=False
index=True
args: 'project.task', 'Generated Task'
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields)
write(self, vals)
No new fields.
Public methods (0)No public methods.
project_id
Many2one → project.project
comodel_name='project.project'
readonly=True
No public methods.
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_tasks_list_inherit |
portal_tasks_list_inherit | ir.ui.view | qweb | Inherits project.portal_tasks_list |
product_template_form_view_invoice_policy_inherit_sale_project |
product.template.inherit.sale.projectform | product.template | field | Inherits sale.product_template_form_view |
project_milestone_view_form |
project.milestone.view.form.inherit | project.milestone | xpath | Inherits project.project_milestone_view_form |
project_milestone_view_tree |
project.milestone.view.list.inherit | project.milestone | xpath | Inherits project.project_milestone_view_tree |
project_project_view_form_simplified_inherit |
project.project.view.form.simplified.inherit | project.project | xpath | Inherits project.project_project_view_form_simplified |
project_project_view_inherit_project_filter |
project.project.select.inherit.project | project.project | xpath | Inherits project.view_project_project_filter |
project_project_view_tree_inherit_sale_project |
project.project.list.inherit.sale.project | project.project | xpath | Inherits project.view_project |
project_sharing_inherit_project_task_view_form |
project.task.view.inherit | project.task | div | Inherits project.project_sharing_project_task_view_form |
project_sharing_inherit_project_task_view_tree |
project.task.view.list.inherit | project.task | field | Inherits project.project_sharing_project_task_view_tree |
project_task_view_search |
project.task.search.inherit | project.task | field | Inherits project.view_task_search_form_project_base |
project_task_view_tree_main_base |
project.task.main.list.inherit | project.task | field | Inherits project.project_task_view_tree_main_base |
quick_create_task_form_res_partner |
project.task.form.quick_create.res.partner.inherit.sale_project | project.task | xpath | Inherits project.quick_create_task_form_res_partner |
sale_order_line_view_form_editable |
sale.order.line.view.form.editable | sale.order.line | form | Inherits sale.sale_order_line_view_form_readonly |
sale_project.milestone_deadline_inherit |
sale_project.milestone_deadline_inherit | ir.ui.view | qweb | Inherits project.milestone_deadline |
sale_project_milestone_view_tree |
project.milestone.view.list.inherit | project.milestone | xpath | Inherits sale_project.project_milestone_view_tree |
view_edit_project_inherit_form |
project.project.view.inherit | project.project | div | Inherits project.edit_project |
view_order_form_inherit_sale_project |
sale.order.form.sale.project | sale.order | xpath | Inherits sale.view_order_form |
view_order_line_tree_with_create |
sale.order.line.list.with.create | sale.order.line | list | Inherits sale.view_order_line_tree |
view_sale_project_inherit_form |
project.task.view.inherit | project.task | xpath | Inherits project.view_task_form2 |
view_sale_project_quick_create_task_form |
project.task.view.inherit | project.task | xpath | Inherits project.quick_create_task_form |
view_sales_order_filter_inherit_sale_project |
sale.order.list.select.inherit.sale_project | sale.order | field | Inherits sale.view_sales_order_filter |
view_task_form_res_partner |
project.task.form.res.partner.inherit.sale_project | project.task | xpath | Inherits project.view_task_form_res_partner |
view_task_tree2_inherit_sale_project |
project.task.form.inherit.sale.project | project.task | xpath | Inherits project.project_task_view_tree_base |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)write(self, vals)
project_id
Many2one → project.project
company_dependent=True
copy=True
args: 'project.project', 'Project'
project_template_id
Many2one → project.project
company_dependent=True
copy=True
args: 'project.project', 'Project Template'
service_policy
Selection
compute='_compute_service_policy'
compute_sudo=True
inverse='_inverse_service_policy'
string='Service Invoicing Policy'
tracking=True
args: '_selection_service_policy'
service_tracking
Selection
ondelete={'task_global_project': 'set default', 'task_in_project': 'set default', 'project_only': 'set default'}
selection_add=[('task_global_project', 'Task'), ('task_in_project', 'Project & Task'), ('project_only', 'Project')]
service_type
Selection
selection_add=[('milestones', 'Project Milestones')]
write(self, vals)
allow_billable
Boolean
export_string_translation=False
related='project_id.allow_billable'
product_uom
Many2one
export_string_translation=False
related='sale_line_id.product_uom'
product_uom_qty
Float
compute='_compute_product_uom_qty'
compute_sudo=True
readonly=False
args: 'Quantity'
project_partner_id
Many2one
export_string_translation=False
related='project_id.partner_id'
quantity_percentage
Float
compute='_compute_quantity_percentage'
help='Percentage of the ordered quantity that will automatically be delivered once the milestone is reached.'
store=True
args: 'Quantity (%)'
sale_line_display_name
Char
export_string_translation=False
related='sale_line_id.display_name'
args: 'Sale Line Display Name'
sale_line_id
Many2one → sale.order.line
default=_default_sale_line_id
domain="[('order_partner_id', '=?', project_partner_id), ('qty_delivered_method', '=', 'milestones')]"
help='Sales Order Item that will be updated once the milestone is reached.'
args: 'sale.order.line', 'Sales Order Item'
action_view_sale_order(self)
allow_billable
Boolean
display_sales_stat_buttons
Boolean
compute='_compute_display_sales_stat_buttons'
export_string_translation=False
has_any_so_to_invoice
Boolean
compute='_compute_has_any_so_to_invoice'
export_string_translation=False
args: 'Has SO to Invoice'
has_any_so_with_nothing_to_invoice
Boolean
compute='_compute_has_any_so_with_nothing_to_invoice'
export_string_translation=False
args: 'Has a SO with an invoice status of No'
invoice_count
Integer
compute='_compute_invoice_count'
export_string_translation=False
groups='account.group_account_readonly'
partner_id
Many2one
compute='_compute_partner_id'
readonly=False
store=True
reinvoiced_sale_order_id
Many2one → sale.order
copy=False
domain="[('partner_id', '=', partner_id)]"
groups='sales_team.group_sale_salesman'
help='Products added to stock pickings, whose operation type is configured to generate analytic costs, will be re-invoiced in this sales order if they are set up for it.'
index='btree_not_null'
string='Sales Order'
args: 'sale.order'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line_id'
copy=False
domain=<expr>
help='Sales order item that will be selected by default on the tasks and timesheets of this project, except if the employee set on the timesheets is explicitely linked to another sales order item on the project.\nIt can be modified on each task and timesheet entry individually if necessary.'
index='btree_not_null'
readonly=False
store=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_count
Integer
compute='_compute_sale_order_count'
export_string_translation=False
groups='sales_team.group_sale_salesman'
sale_order_id
Many2one
export_string_translation=False
related='sale_line_id.order_id'
sale_order_line_count
Integer
compute='_compute_sale_order_count'
export_string_translation=False
groups='sales_team.group_sale_salesman'
sale_order_state
Selection
export_string_translation=False
related='sale_order_id.state'
tracking=False
vendor_bill_count
Integer
export_string_translation=False
groups='account.group_account_readonly'
related='account_id.vendor_bill_count'
action_create_invoice(self)
action_customer_preview(self)
action_get_list_view(self)
action_open_project_invoices(self)
action_open_project_vendor_bills(self)
action_profitability_items(self, section_name, domain=None, res_id=False)
action_view_sols(self)
action_view_sos(self)
action_view_tasks(self)
create(self, vals_list)
get_panel_data(self)
get_sale_items_data(self, offset=0, limit=None, with_action=True, section_id=None)
write(self, vals)
allow_billable
Boolean
related='project_id.allow_billable'
display_sale_order_button
Boolean
compute='_compute_display_sale_order_button'
string='Display Sales Order'
partner_id
Many2one
inverse='_inverse_partner_id'
project_sale_order_id
Many2one → sale.order
related='project_id.sale_order_id'
string="Project's sale order"
args: 'sale.order'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line'
copy=True
domain=<expr>
help='Sales Order Item to which the time spent on this task will be added in order to be invoiced to your customer.\nBy default the sales order item set on the project will be selected. In the absence of one, the last prepaid sales order item that has time remaining will be used.\nRemove the sales order item in order to make this task non billable. You can also change or remove the sales order item of each timesheet entry individually.'
index='btree_not_null'
readonly=False
recursive=True
store=True
tracking=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_id
Many2one → sale.order
compute='_compute_sale_order_id'
group_expand='_group_expand_sales_order'
help='Sales order to which the task is linked.'
store=True
args: 'sale.order', 'Sales Order'
sale_order_state
Selection
related='sale_order_id.state'
tracking=False
task_to_invoice
Boolean
compute='_compute_task_to_invoice'
groups='sales_team.group_sale_salesman_all_leads'
search='_search_task_to_invoice'
args: 'To invoice'
SELF_READABLE_FIELDS(self)
action_project_sharing_view_so(self)
action_view_so(self)
create(self, vals_list)
write(self, vals)
No new fields.
Public methods (0)No public methods.
sale_line_id
Many2one → sale.order.line
readonly=True
string='Sales Order Item'
args: 'sale.order.line'
sale_order_id
Many2one → sale.order
readonly=True
string='Sales Order'
args: 'sale.order'
No public methods.
No new fields.
Public methods (1)set_values(self)
closed_task_count
Integer
compute='_compute_tasks_ids'
export_string_translation=False
completed_task_percentage
Float
compute='_compute_completed_task_percentage'
export_string_translation=False
is_product_milestone
Boolean
compute='_compute_is_product_milestone'
export_string_translation=False
milestone_count
Integer
compute='_compute_milestone_count'
export_string_translation=False
project_account_id
Many2one → account.analytic.account
related='project_id.account_id'
args: 'account.analytic.account'
project_count
Integer
compute='_compute_project_ids'
export_string_translation=False
groups='project.group_project_user'
string='Number of Projects'
project_id
Many2one → project.project
copy=False
domain=[('allow_billable', '=', True)]
help='A task will be created for the project upon sales order confirmation. The analytic distribution of this project will also serve as a reference for newly created sales order items.'
index='btree_not_null'
args: 'project.project'
project_ids
Many2many → project.project
compute='_compute_project_ids'
copy=False
export_string_translation=False
groups='project.group_project_user,project.group_project_milestone'
string='Projects'
args: 'project.project'
show_create_project_button
Boolean
compute='_compute_show_project_and_task_button'
export_string_translation=False
groups='project.group_project_user'
show_project_button
Boolean
compute='_compute_show_project_and_task_button'
export_string_translation=False
groups='project.group_project_user'
show_task_button
Boolean
compute='_compute_show_project_and_task_button'
export_string_translation=False
groups='project.group_project_user'
tasks_count
Integer
compute='_compute_tasks_ids'
export_string_translation=False
groups='project.group_project_user'
string='Tasks'
tasks_ids
Many2many → project.task
compute='_compute_tasks_ids'
export_string_translation=False
search='_search_tasks_ids'
string='Tasks associated with this sale'
args: 'project.task'
visible_project
Boolean
compute='_compute_visible_project'
export_string_translation=False
readonly=True
args: 'Display project'
action_create_project(self)
action_view_milestone(self)
action_view_project_ids(self)
action_view_task(self)
create(self, vals_list)
write(self, values)
project_id
Many2one → project.project
copy=False
export_string_translation=False
index=True
args: 'project.project', 'Generated Project'
qty_delivered_method
Selection
selection_add=[('milestones', 'Milestones')]
reached_milestones_ids
One2many → project.milestone
domain=[('is_reached', '=', True)]
export_string_translation=False
string='Reached Milestones'
args: 'project.milestone', 'sale_line_id'
task_id
Many2one → project.task
copy=False
export_string_translation=False
index=True
args: 'project.task', 'Generated Task'
copy_data(self, default=None)
create(self, vals_list)
default_get(self, fields)
name_create(self, name)
write(self, values)
No new fields.
Public methods (0)No public methods.
project_id
Many2one → project.project
comodel_name='project.project'
readonly=True
No public methods.
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_tasks_list_inherit |
portal_tasks_list_inherit | ir.ui.view | qweb | Inherits project.portal_tasks_list |
product_template_form_view_invoice_policy_inherit_sale_project |
product.template.inherit.sale.projectform | product.template | field | Inherits sale.product_template_form_view |
project_milestone_view_form |
project.milestone.view.form.inherit | project.milestone | xpath | Inherits project.project_milestone_view_form |
project_milestone_view_tree |
project.milestone.view.tree.inherit | project.milestone | xpath | Inherits project.project_milestone_view_tree |
project_project_view_form_simplified_inherit |
project.project.view.form.simplified.inherit | project.project | xpath | Inherits project.project_project_view_form_simplified |
project_project_view_inherit_project_filter |
project.project.select.inherit.project | project.project | xpath | Inherits project.view_project_project_filter |
project_project_view_tree_inherit_sale_project |
project.project.tree.inherit.sale.project | project.project | xpath | Inherits project.view_project |
project_sharing_inherit_project_task_view_form |
project.task.view.inherit | project.task | div | Inherits project.project_sharing_project_task_view_form |
project_task_view_search |
project.task.search.inherit | project.task | field | Inherits project.view_task_search_form_project_base |
project_task_view_tree_main_base |
project.task.main.tree.inherit | project.task | field | Inherits project.project_task_view_tree_main_base |
sale_order_line_view_form_editable |
sale.order.line.view.form.editable | sale.order.line | form | Inherits sale.sale_order_line_view_form_readonly |
sale_project_milestone_view_tree |
project.milestone.view.tree.inherit | project.milestone | xpath | Inherits sale_project.project_milestone_view_tree |
view_edit_project_inherit_form |
project.project.view.inherit | project.project | div | Inherits project.edit_project |
view_order_form_inherit_sale_project |
sale.order.form.sale.project | sale.order | button | Inherits sale.view_order_form |
view_order_line_tree_with_create |
sale.order.line.tree.with.create | sale.order.line | tree | Inherits sale.view_order_line_tree |
view_sale_project_inherit_form |
project.task.view.inherit | project.task | xpath | Inherits project.view_task_form2 |
view_sale_project_quick_create_task_form |
project.task.view.inherit | project.task | xpath | Inherits project.quick_create_task_form |
view_task_tree2_inherit_sale_project |
project.task.form.inherit.sale.project | project.task | xpath | Inherits project.project_task_view_tree_base |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)write(self, vals)
project_id
Many2one → project.project
company_dependent=True
args: 'project.project', 'Project'
project_template_id
Many2one → project.project
company_dependent=True
copy=True
args: 'project.project', 'Project Template'
service_policy
Selection
compute='_compute_service_policy'
compute_sudo=True
inverse='_inverse_service_policy'
string='Service Invoicing Policy'
args: '_selection_service_policy'
service_tracking
Selection
default='no'
help="On Sales order confirmation, this product can generate a project and/or task. From those, you can track the service you are selling.\n 'In sale order's project': Will use the sale order's configured project if defined or fallback to creating a new project based on the selected template."
selection=[('no', 'Nothing'), ('task_global_project', 'Task'), ('task_in_project', 'Project & Task'), ('project_only', 'Project')]
string='Create on Order'
service_type
Selection
selection_add=[('milestones', 'Project Milestones')]
write(self, vals)
allow_billable
Boolean
related='project_id.allow_billable'
product_uom
Many2one
related='sale_line_id.product_uom'
product_uom_qty
Float
compute='_compute_product_uom_qty'
compute_sudo=True
readonly=False
args: 'Quantity'
project_partner_id
Many2one
related='project_id.partner_id'
quantity_percentage
Float
compute='_compute_quantity_percentage'
help='Percentage of the ordered quantity that will automatically be delivered once the milestone is reached.'
store=True
args: 'Quantity (%)'
sale_line_display_name
Char
related='sale_line_id.display_name'
args: 'Sale Line Display Name'
sale_line_id
Many2one → sale.order.line
default=_default_sale_line_id
domain="[('order_partner_id', '=?', project_partner_id), ('qty_delivered_method', '=', 'milestones')]"
help='Sales Order Item that will be updated once the milestone is reached.'
args: 'sale.order.line', 'Sales Order Item'
action_view_sale_order(self)
allow_billable
Boolean
display_sales_stat_buttons
Boolean
compute='_compute_display_sales_stat_buttons'
has_any_so_to_invoice
Boolean
compute='_compute_has_any_so_to_invoice'
args: 'Has SO to Invoice'
has_any_so_with_nothing_to_invoice
Boolean
compute='_compute_has_any_so_with_nothing_to_invoice'
args: 'Has a SO with an invoice status of No'
invoice_count
Integer
compute='_compute_invoice_count'
groups='account.group_account_readonly'
partner_id
Many2one
compute='_compute_partner_id'
readonly=False
store=True
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line_id'
copy=False
domain=<expr>
help='Sales order item that will be selected by default on the tasks and timesheets of this project, except if the employee set on the timesheets is explicitely linked to another sales order item on the project.\nIt can be modified on each task and timesheet entry individually if necessary.'
index='btree_not_null'
readonly=False
store=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_count
Integer
compute='_compute_sale_order_count'
groups='sales_team.group_sale_salesman'
sale_order_id
Many2one
help='Sales order to which the project is linked.'
related='sale_line_id.order_id'
string='Sales Order'
sale_order_line_count
Integer
compute='_compute_sale_order_count'
groups='sales_team.group_sale_salesman'
vendor_bill_count
Integer
groups='account.group_account_readonly'
related='analytic_account_id.vendor_bill_count'
action_create_invoice(self)
action_get_list_view(self)
action_open_project_invoices(self)
action_open_project_vendor_bills(self)
action_profitability_items(self, section_name, domain=None, res_id=False)
action_project_sharing(self)
action_view_sols(self)
action_view_sos(self)
action_view_tasks(self)
create(self, vals_list)
get_panel_data(self)
get_sale_items_data(self, domain=None, offset=0, limit=None, with_action=True)
write(self, vals)
allow_billable
Boolean
related='project_id.allow_billable'
display_sale_order_button
Boolean
compute='_compute_display_sale_order_button'
string='Display Sales Order'
project_sale_order_id
Many2one → sale.order
related='project_id.sale_order_id'
string="Project's sale order"
args: 'sale.order'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line'
copy=True
domain=<expr>
help='Sales Order Item to which the time spent on this task will be added in order to be invoiced to your customer.\nBy default the sales order item set on the project will be selected. In the absence of one, the last prepaid sales order item that has time remaining will be used.\nRemove the sales order item in order to make this task non billable. You can also change or remove the sales order item of each timesheet entry individually.'
index='btree_not_null'
readonly=False
recursive=True
store=True
tracking=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_id
Many2one → sale.order
compute='_compute_sale_order_id'
group_expand='_group_expand_sales_order'
help='Sales order to which the task is linked.'
store=True
args: 'sale.order', 'Sales Order'
task_to_invoice
Boolean
compute='_compute_task_to_invoice'
groups='sales_team.group_sale_salesman_all_leads'
search='_search_task_to_invoice'
args: 'To invoice'
SELF_READABLE_FIELDS(self)
action_project_sharing_view_so(self)
action_view_so(self)
create(self, vals_list)
write(self, vals)
No new fields.
Public methods (0)No public methods.
sale_line_id
Many2one → sale.order.line
readonly=True
string='Sales Order Item'
args: 'sale.order.line'
sale_order_id
Many2one → sale.order
readonly=True
string='Sales Order'
args: 'sale.order'
No public methods.
No new fields.
Public methods (1)set_values(self)
is_product_milestone
Boolean
compute='_compute_is_product_milestone'
milestone_count
Integer
compute='_compute_milestone_count'
project_count
Integer
compute='_compute_project_ids'
groups='project.group_project_user'
string='Number of Projects'
project_id
Many2one → project.project
help='Select a non billable project on which tasks can be created.'
args: 'project.project', 'Project'
project_ids
Many2many → project.project
compute='_compute_project_ids'
copy=False
groups='project.group_project_user,project.group_project_milestone'
help='Projects used in this sales order.'
string='Projects'
args: 'project.project'
show_create_project_button
Boolean
compute='_compute_show_project_and_task_button'
groups='project.group_project_user'
show_project_button
Boolean
compute='_compute_show_project_and_task_button'
groups='project.group_project_user'
show_task_button
Boolean
compute='_compute_show_project_and_task_button'
groups='project.group_project_user'
tasks_count
Integer
compute='_compute_tasks_ids'
groups='project.group_project_user'
string='Tasks'
tasks_ids
Many2many → project.task
compute='_compute_tasks_ids'
search='_search_tasks_ids'
string='Tasks associated to this sale'
args: 'project.task'
visible_project
Boolean
compute='_compute_visible_project'
readonly=True
args: 'Display project'
action_create_project(self)
action_view_milestone(self)
action_view_project_ids(self)
action_view_task(self)
create(self, vals_list)
write(self, values)
project_id
Many2one → project.project
copy=False
index=True
args: 'project.project', 'Generated Project'
qty_delivered_method
Selection
selection_add=[('milestones', 'Milestones')]
reached_milestones_ids
One2many → project.milestone
domain=[('is_reached', '=', True)]
string='Reached Milestones'
args: 'project.milestone', 'sale_line_id'
task_id
Many2one → project.task
copy=False
index=True
args: 'project.task', 'Generated Task'
create(self, vals_list)
default_get(self, fields)
name_create(self, name)
write(self, values)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/16.0/sale_project |
| VERSION | |
| VERSION | 0.1.0 |
| CATEGORY | |
| CATEGORY | Hidden |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | Yes |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Aaron Bohy, GitHub, Barad Mahendra, Yannick Tivisse, Pierre Masereel, Romeo Fragomeli, Victor Feyens, Luis González, Achraf (abz), Nasreddin Boulif (bon), Touati Djamel (otd), Prakash Prajapati, Tiffany Chang (tic), Gorash, William Braeckman, Xavier BOL (xbo), momegahed, Nicolas (vin), Krzysztof Magusiak, Audric Onockx (auon), william, Yolann Sabaux, Abdelouahab (abla), Laurent Stukkens (LTU), gawa-odoo, Roy Le, Vincent Larcin, damr, Thomas Lefebvre (thle), Walid, Gurupreet Singh, Victor Piryns (pivi), Maruan Aguerdouh (magm), hupo-odoo, Kamlesh Pathekar, Cedric Prieels (cpr), Raouf, Kartik Chavda, Xavier Bol (xbo), Andrzej(pian), Nidhi Patel, Youssef Bashandy, Eteil Djoumatchoua(etdj), Maxime de Neuville, suth-odoo, Mohamed GadAlrab, Abderraouf Ghrissi (abgh), kcv-odoo, Martin Trigaux (mat), Adesh Jolhe (adjo), ampa-odoo, Rohitkumar (roku), Manushi Shah (mash), Antoine (anso), Panagiotis Kyriakou |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:53 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale_management - sale - sales_team - base - base_setup - web - bus - web_tour - account_payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - payment - utm - project - rating |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Allows to create task from your sales order ============================================= This module allows to generate a project/task from sales orders. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_tasks_list_inherit |
portal_tasks_list_inherit | ir.ui.view | qweb | Inherits project.portal_tasks_list |
product_template_form_view_invoice_policy_inherit_sale_project |
product.template.inherit.sale.projectform | product.template | field | Inherits sale.product_template_form_view |
project_milestone_view_form |
project.milestone.view.form.inherit | project.milestone | xpath | Inherits project.project_milestone_view_form |
project_milestone_view_tree |
project.milestone.view.tree.inherit | project.milestone | xpath | Inherits project.project_milestone_view_tree |
project_project_view_inherit_project_filter |
project.project.select.inherit.project | project.project | xpath | Inherits project.view_project_project_filter |
project_project_view_tree_inherit_sale_project |
project.project.tree.inherit.sale.project | project.project | xpath | Inherits project.view_project |
project_sharing_inherit_project_task_view_form |
project.task.view.inherit | project.task | div | Inherits project.project_sharing_project_task_view_form |
project_sharing_inherit_project_task_view_search |
project.task.search.inherit | project.task | xpath | Inherits project.project_sharing_project_task_view_search |
project_task_view_search |
project.task.search.inherit | project.task | xpath | Inherits project.view_task_search_form |
sale_project_milestone_view_tree |
project.milestone.view.tree.inherit | project.milestone | xpath | Inherits sale_project.project_milestone_view_tree |
view_edit_project_inherit_form |
project.project.view.inherit | project.project | xpath | Inherits project.edit_project |
view_order_form_inherit_sale_project |
sale.order.form.sale.project | sale.order | xpath | Inherits sale.view_order_form |
view_sale_project_inherit_form |
project.task.view.inherit | project.task | xpath | Inherits project.view_task_form2 |
view_task_project_user_search_inherited |
report.project.task.user.search.inherited | report.project.task.user | xpath | Inherits project.view_task_project_user_search |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)write(self, vals)
project_id
Many2one → project.project
company_dependent=True
domain="[('company_id', '=', current_company_id)]"
args: 'project.project', 'Project'
project_template_id
Many2one → project.project
company_dependent=True
copy=True
domain="[('company_id', '=', current_company_id)]"
args: 'project.project', 'Project Template'
service_policy
Selection
compute='_compute_service_policy'
compute_sudo=True
inverse='_inverse_service_policy'
string='Service Invoicing Policy'
args: '_selection_service_policy'
service_tracking
Selection
default='no'
help="On Sales order confirmation, this product can generate a project and/or task. From those, you can track the service you are selling.\n 'In sale order's project': Will use the sale order's configured project if defined or fallback to creating a new project based on the selected template."
selection=[('no', 'Nothing'), ('task_global_project', 'Task'), ('task_in_project', 'Project & Task'), ('project_only', 'Project')]
string='Create on Order'
service_type
Selection
selection_add=[('milestones', 'Project Milestones')]
write(self, vals)
allow_billable
Boolean
related='project_id.allow_billable'
project_partner_id
Many2one
related='project_id.partner_id'
quantity_percentage
Float
help='Percentage of the ordered quantity that will automatically be delivered once the milestone is reached.'
args: 'Quantity'
sale_line_id
Many2one → sale.order.line
domain="[('order_partner_id', '=?', project_partner_id), ('qty_delivered_method', '=', 'milestones')]"
help='Sales Order Item that will be updated once the milestone is reached.'
args: 'sale.order.line', 'Sales Order Item'
sale_line_name
Text
related='sale_line_id.name'
No public methods.
allow_billable
Boolean
has_any_so_to_invoice
Boolean
compute='_compute_has_any_so_to_invoice'
args: 'Has SO to Invoice'
has_any_so_with_nothing_to_invoice
Boolean
compute='_compute_has_any_so_with_nothing_to_invoice'
args: 'Has a SO with an invoice status of No'
invoice_count
Integer
compute='_compute_invoice_count'
groups='account.group_account_readonly'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line_id'
copy=False
domain=<expr>
help='Sales order item that will be selected by default on the tasks and timesheets of this project, except if the employee set on the timesheets is explicitely linked to another sales order item on the project.\nIt can be modified on each task and timesheet entry individually if necessary.'
index='btree_not_null'
readonly=False
store=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_count
Integer
compute='_compute_sale_order_count'
groups='sales_team.group_sale_salesman'
sale_order_id
Many2one
help='Sales order to which the project is linked.'
related='sale_line_id.order_id'
string='Sales Order'
vendor_bill_count
Integer
groups='account.group_account_readonly'
related='analytic_account_id.vendor_bill_count'
action_create_invoice(self)
action_get_list_view(self)
action_open_project_invoices(self)
action_open_project_vendor_bills(self)
action_profitability_items(self, section_name, domain=None, res_id=False)
action_view_sos(self)
get_panel_data(self)
get_sale_items_data(self, domain=None, offset=0, limit=None, with_action=True)
display_sale_order_button
Boolean
compute='_compute_display_sale_order_button'
string='Display Sales Order'
project_sale_order_id
Many2one → sale.order
related='project_id.sale_order_id'
string="Project's sale order"
args: 'sale.order'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line'
copy=True
domain=<expr>
help='Sales Order Item to which the time spent on this task will be added in order to be invoiced to your customer.\nBy default the sales order item set on the project will be selected. In the absence of one, the last prepaid sales order item that has time remaining will be used.\nRemove the sales order item in order to make this task non billable. You can also change or remove the sales order item of each timesheet entry individually.'
index='btree_not_null'
readonly=False
recursive=True
store=True
tracking=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_id
Many2one → sale.order
compute='_compute_sale_order_id'
help='Sales order to which the task is linked.'
store=True
args: 'sale.order', 'Sales Order'
task_to_invoice
Boolean
compute='_compute_task_to_invoice'
groups='sales_team.group_sale_salesman_all_leads'
search='_search_task_to_invoice'
args: 'To invoice'
SELF_READABLE_FIELDS(self)
action_project_sharing_view_so(self)
action_view_so(self)
No new fields.
Public methods (0)No public methods.
sale_line_id
Many2one → sale.order.line
readonly=True
string='Sales Order Item'
args: 'sale.order.line'
sale_order_id
Many2one → sale.order
readonly=True
string='Sales Order'
args: 'sale.order'
No public methods.
No new fields.
Public methods (1)set_values(self)
is_product_milestone
Boolean
compute='_compute_is_product_milestone'
milestone_count
Integer
compute='_compute_milestone_count'
project_count
Integer
compute='_compute_project_ids'
groups='project.group_project_user'
string='Number of Projects'
project_id
Many2one → project.project
help='Select a non billable project on which tasks can be created.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'project.project', 'Project'
project_ids
Many2many → project.project
compute='_compute_project_ids'
copy=False
groups='project.group_project_user'
help='Projects used in this sales order.'
string='Projects'
args: 'project.project'
tasks_count
Integer
compute='_compute_tasks_ids'
groups='project.group_project_user'
string='Tasks'
tasks_ids
Many2many → project.task
compute='_compute_tasks_ids'
search='_search_tasks_ids'
string='Tasks associated to this sale'
args: 'project.task'
visible_project
Boolean
compute='_compute_visible_project'
readonly=True
args: 'Display project'
action_view_milestone(self)
action_view_project_ids(self)
action_view_task(self)
write(self, values)
is_service
Boolean
compute='_compute_is_service'
compute_sudo=True
store=True
args: 'Is a Service'
project_id
Many2one → project.project
copy=False
index=True
args: 'project.project', 'Generated Project'
qty_delivered_method
Selection
selection_add=[('milestones', 'Milestones')]
reached_milestones_ids
One2many → project.milestone
domain=[('is_reached', '=', True)]
string='Reached Milestones'
args: 'project.milestone', 'sale_line_id'
task_id
Many2one → project.task
copy=False
index=True
args: 'project.task', 'Generated Task'
create(self, vals_list)
name_get(self)
write(self, values)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/15.0/sale_project |
| VERSION | |
| VERSION | 0.1.0 |
| CATEGORY | |
| CATEGORY | Hidden |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | Yes |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Francois, GitHub, Barad Mahendra, Yannick Tivisse, Pierre Masereel, Xavier-Do, Carlos Dauden, Victor Feyens, Florent de Labarre, Anh Thao Pham (pta), Ivan Yelizariev, Nasreddin Boulif (bon), Touati Djamel (otd), Prakash Prajapati, Kamesh Patel, Swapnesh Shah, Tiffany Chang (tic), jbm-odoo, William Braeckman, Kevin Baptiste, Xavier BOL (xbo), jdoutreloux, prro-odoo, Mitali Patel, william-andre, Audric Onockx (auon), Yolann Sabaux, Thibault Libioulle, Laurent Stukkens (LTU), Thomas Lefebvre (thle), Victor Piryns (pivi), Cedric Prieels (cpr), Andrzej(pian) |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:25:29 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale_management - sale - sales_team - base - base_setup - web - bus - web_tour - payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - utm - project - rating |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Allows to create task from your sales order ============================================= This module allows to generate a project/task from sales orders. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_tasks_list_inherit |
portal_tasks_list_inherit | ir.ui.view | qweb | Inherits project.portal_tasks_list |
product_template_form_view_invoice_policy_inherit_sale_project |
product.template.inherit.sale.projectform | product.template | field | Inherits sale.product_template_form_view_invoice_policy |
project_project_view_inherit_project_filter |
project.project.select.inherit.project | project.project | xpath | Inherits project.view_project_project_filter |
project_project_view_tree_inherit_sale_project |
project.project.tree.inherit.sale.project | project.project | xpath | Inherits project.view_project |
project_sharing_inherit_project_task_view_form |
project.task.view.inherit | project.task | div | Inherits project.project_sharing_project_task_view_form |
project_sharing_inherit_project_task_view_search |
project.task.search.inherit | project.task | xpath | Inherits project.project_sharing_project_task_view_search |
project_task_view_form_inherit_sale_line_editable |
project.task.form.inherit.sale.line.editable.salesman | project.task | xpath | Inherits view_sale_project_inherit_form |
project_task_view_search |
project.task.search.inherit | project.task | xpath | Inherits project.view_task_search_form |
view_edit_project_inherit_form |
project.project.view.inherit | project.project | xpath | Inherits project.edit_project |
view_order_form_inherit_sale_project |
sale.order.form.sale.project | sale.order | xpath | Inherits sale.view_order_form |
view_sale_project_inherit_form |
project.task.view.inherit | project.task | xpath | Inherits project.view_task_form2 |
view_task_project_user_search_inherited |
report.project.task.user.search.inherited | report.project.task.user | xpath | Inherits project.view_task_project_user_search |
No new fields.
Public methods (1)write(self, vals)
project_id
Many2one → project.project
company_dependent=True
domain="[('company_id', '=', current_company_id)]"
help='Select a billable project on which tasks can be created. This setting must be set for each company.'
args: 'project.project', 'Project'
project_template_id
Many2one → project.project
company_dependent=True
copy=True
domain="[('company_id', '=', current_company_id)]"
help='Select a billable project to be the skeleton of the new created project when selling the current product. Its stages and tasks will be duplicated.'
args: 'project.project', 'Project Template'
service_tracking
Selection
default='no'
help="On Sales order confirmation, this product can generate a project and/or task. From those, you can track the service you are selling.\n 'In sale order's project': Will use the sale order's configured project if defined or fallback to creating a new project based on the selected template."
selection=[('no', 'Nothing'), ('task_global_project', 'Task'), ('task_in_project', 'Project & Task'), ('project_only', 'Project')]
string='Create on Order'
write(self, vals)
has_any_so_to_invoice
Boolean
compute='_compute_has_any_so_to_invoice'
args: 'Has SO to Invoice'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line_id'
copy=False
domain="[('is_service', '=', True), ('is_expense', '=', False), ('state', 'in', ['sale', 'done']), ('order_partner_id', '=?', partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help="Sales order item to which the project is linked. Link the timesheet entry to the sales order item defined on the project. Only applies on tasks without sale order item defined, and if the employee is not in the 'Employee/Sales Order Item Mapping' of the project."
index=True
readonly=False
store=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_id
Many2one
help='Sales order to which the project is linked.'
related='sale_line_id.order_id'
string='Sales Order'
action_create_invoice(self)
action_view_so(self)
invoice_count
Integer
related='sale_order_id.invoice_count'
args: 'Number of invoices'
project_sale_order_id
Many2one → sale.order
related='project_id.sale_order_id'
string="Project's sale order"
args: 'sale.order'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line'
copy=False
domain="[('company_id', '=', company_id), ('is_service', '=', True), ('order_partner_id', 'child_of', commercial_partner_id), ('is_expense', '=', False), ('state', 'in', ['sale', 'done'])]"
help='Sales Order Item to which the time spent on this task will be added, in order to be invoiced to your customer.'
index=True
readonly=False
recursive=True
store=True
tracking=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_id
Many2one → sale.order
compute='_compute_sale_order_id'
help='Sales order to which the task is linked.'
store=True
args: 'sale.order', 'Sales Order'
task_to_invoice
Boolean
compute='_compute_task_to_invoice'
groups='sales_team.group_sale_salesman_all_leads'
search='_search_task_to_invoice'
args: 'To invoice'
SELF_READABLE_FIELDS(self)
action_view_so(self)
rating_get_partner_id(self)
No new fields.
Public methods (0)No public methods.
sale_order_id
Many2one → sale.order
readonly=True
string='Sales Order'
args: 'sale.order'
No public methods.
project_count
Integer
compute='_compute_project_ids'
groups='project.group_project_manager'
string='Number of Projects'
project_id
Many2one → project.project
help='Select a non billable project on which tasks can be created.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'project.project', 'Project'
project_ids
Many2many → project.project
compute='_compute_project_ids'
copy=False
groups='project.group_project_manager'
help='Projects used in this sales order.'
string='Projects'
args: 'project.project'
tasks_count
Integer
compute='_compute_tasks_ids'
groups='project.group_project_user'
string='Tasks'
tasks_ids
Many2many → project.task
compute='_compute_tasks_ids'
string='Tasks associated to this sale'
args: 'project.task'
visible_project
Boolean
compute='_compute_visible_project'
readonly=True
args: 'Display project'
action_view_project_ids(self)
action_view_task(self)
write(self, values)
is_service
Boolean
compute='_compute_is_service'
compute_sudo=True
help='Sales Order item should generate a task and/or a project, depending on the product settings.'
store=True
args: 'Is a Service'
project_id
Many2one → project.project
copy=False
help='Project generated by the sales order item'
index=True
args: 'project.project', 'Generated Project'
task_id
Many2one → project.task
copy=False
help='Task generated by the sales order item'
index=True
args: 'project.task', 'Generated Task'
create(self, vals_list)
write(self, values)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/14.0/sale_project |
| VERSION | |
| VERSION | 0.1.0 |
| CATEGORY | |
| CATEGORY | Hidden |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | Yes |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Olivier Dony, Nicolas Lempereur, Thibault Francois, Barad Mahendra, Yannick Tivisse, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), Florent de Labarre, Anh Thao Pham (pta), Ivan Yelizariev, Nasreddin Boulif (bon), Swapnesh Shah, jbm-odoo, Kevin Baptiste, Xavier BOL (xbo), jdoutreloux, prro-odoo, Audric Onockx (auon), Laurent Stukkens (LTU), Louis Wicket (wil) |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:14:30 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale_management - sale - sales_team - base - base_setup - web - bus - web_tour - payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - utm - project - rating |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Allows to create task from your sales order ============================================= This module allows to generate a project/task from sales orders. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_template_form_view_invoice_policy_inherit_sale_project |
product.template.inherit.sale.projectform | product.template | xpath | Inherits sale.product_template_form_view_invoice_policy |
project_project_view_tree_inherit_sale_project |
project.project.tree.inherit.sale.project | project.project | xpath | Inherits project.view_project |
project_task_view_form_inherit_sale_line_editable |
project.task.form.inherit.sale.line.editable.salesman | project.task | xpath | Inherits view_sale_project_inherit_form |
project_task_view_search |
project.task.search.inherit | project.task | xpath | Inherits project.view_task_search_form |
view_edit_project_inherit_form |
project.project.view.inherit | project.project | div | Inherits project.edit_project |
view_order_form_inherit_sale_project |
sale.order.form.sale.project | sale.order | xpath | Inherits sale.view_order_form |
view_sale_project_inherit_form |
project.task.view.inherit | project.task | div | Inherits project.view_task_form2 |
No new fields.
Public methods (0)No public methods.
project_id
Many2one → project.project
company_dependent=True
domain="[('company_id', '=', current_company_id)]"
help='Select a billable project on which tasks can be created. This setting must be set for each company.'
args: 'project.project', 'Project'
project_template_id
Many2one → project.project
company_dependent=True
copy=True
domain="[('company_id', '=', current_company_id)]"
help='Select a billable project to be the skeleton of the new created project when selling the current product. Its stages and tasks will be duplicated.'
args: 'project.project', 'Project Template'
service_tracking
Selection
default='no'
help="On Sales order confirmation, this product can generate a project and/or task. From those, you can track the service you are selling.\n 'In sale order's project': Will use the sale order's configured project if defined or fallback to creating a new project based on the selected template."
string='Service Tracking'
args: [('no', "Don't create task"), ('task_global_project', 'Create a task in an existing project'), ('task_in_project', "Create a task in sales order's project"), ('project_only', 'Create a new project but no task')]
No public methods.
sale_line_id
Many2one → sale.order.line
copy=False
domain="[('is_service', '=', True), ('is_expense', '=', False), ('order_id', '=', sale_order_id), ('state', 'in', ['sale', 'done']), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help="Sales order item to which the project is linked. Link the timesheet entry to the sales order item defined on the project. Only applies on tasks without sale order item defined, and if the employee is not in the 'Employee/Sales Order Item Mapping' of the project."
args: 'sale.order.line', 'Sales Order Item'
sale_order_id
Many2one → sale.order
copy=False
domain="[('order_line.product_id.type', '=', 'service'), ('partner_id', '=', partner_id), ('state', 'in', ['sale', 'done'])]"
help='Sales order to which the project is linked.'
args: 'sale.order', 'Sales Order'
action_view_so(self)
invoice_count
Integer
related='sale_order_id.invoice_count'
args: 'Number of invoices'
project_sale_order_id
Many2one → sale.order
related='project_id.sale_order_id'
string="Project's sale order"
args: 'sale.order'
sale_line_id
Many2one → sale.order.line
compute='_compute_sale_line'
copy=False
domain="[('company_id', '=', company_id), ('is_service', '=', True), ('order_partner_id', 'child_of', commercial_partner_id), ('is_expense', '=', False), ('state', 'in', ['sale', 'done']), ('order_id', '=?', project_sale_order_id)]"
help="Sales order item to which the project is linked. Link the timesheet entry to the sales order item defined on the project. Only applies on tasks without sale order item defined, and if the employee is not in the 'Employee/Sales Order Item Mapping' of the project."
readonly=False
store=True
args: 'sale.order.line', 'Sales Order Item'
sale_order_id
Many2one → sale.order
help='Sales order to which the task is linked.'
args: 'sale.order', 'Sales Order'
task_to_invoice
Boolean
compute='_compute_task_to_invoice'
groups='sales_team.group_sale_salesman_all_leads'
search='_search_task_to_invoice'
args: 'To invoice'
action_create_invoice(self)
action_view_so(self)
rating_get_partner_id(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
project_id
Many2one → project.project
help='Select a non billable project on which tasks can be created.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'project.project', 'Project'
project_ids
Many2many → project.project
compute='_compute_project_ids'
copy=False
groups='project.group_project_manager'
help='Projects used in this sales order.'
string='Projects'
args: 'project.project'
tasks_count
Integer
compute='_compute_tasks_ids'
groups='project.group_project_user'
string='Tasks'
tasks_ids
Many2many → project.task
compute='_compute_tasks_ids'
string='Tasks associated to this sale'
args: 'project.task'
visible_project
Boolean
compute='_compute_visible_project'
readonly=True
args: 'Display project'
action_view_project_ids(self)
action_view_task(self)
write(self, values)
is_service
Boolean
compute='_compute_is_service'
compute_sudo=True
help='Sales Order item should generate a task and/or a project, depending on the product settings.'
store=True
args: 'Is a Service'
project_id
Many2one → project.project
copy=False
help='Project generated by the sales order item'
index=True
args: 'project.project', 'Generated Project'
task_id
Many2one → project.task
copy=False
help='Task generated by the sales order item'
index=True
args: 'project.task', 'Generated Task'
create(self, vals_list)
write(self, values)