Repository
odoo/odoo · module folder
Module version
0.1.0
Category
Sales/Sales
Folder size
2.3 MB
License
LGPL-3
Application
No
Auto-installable
Yes
Website
None
Last tracking update
2026-08-15 22:44:19
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Raphael Collet, Odoo Translation Bot, Aaron Bohy, Arnold Moyaux, Julien Castiaux, Victor Feyens, Julien Mougenot, svs-odoo, Carlos Lopez, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Romain Estievenart, william-andre, Audric Onockx (auon), Abdelouahab (abla), Renaud Thiry, Vincent Larcin, damr, alsh-odoo, Mylyna Hy, Gaetan Vanden Bergh (gavb), Victor Piryns (pivi), Thomas Becquevort (thbe), Levi Siuzdak (sile), Dylan Kiss (dyki), Julien Alardot (jual), Xavier Bol (xbo), Brieuc-brd, micheledic, rajh-odoo, Youssef Bashandy, bary, Ethan Vincent, Maxime de Neuville, suth-odoo, Mohamed GadAlrab, kcv-odoo, Louis Gobert, nihp-odoo, Hussein Ebrahim(hyhe), Mohammad Abdulmoneim, Pierre Pulinckx (PIPU), Maira Salazar (srma), st-yes, David Vidal, Mohammad Abdulmoneim (abdu), djameltouati, Pierre Pulinckx, Bastien PIERRE, Michaël Mattiello, K Theja (kthe), bona-odoo, Krzysztof Magusiak (krma), Omar (OSAH), mjvi-odoo, pajo, K Theja (kthe@odoo.com), Dirk Douglas, agbr-odoo, Yash Pathak, sawer, Dhwani Patel, Kai Chang (kacha), oumaima-aarabe, assh-odoo, Maxime de Neuville (mane), maap-odoo, damrOdoo, Joe Wesnofske, dhtr-odoo, Abdelouahab Laaroussi (abla), Matt Marcha, njor-odoo, nikhil, niyp-odoo, Dhruvkumar Nagar, makb-odoo, Ryan (rygea)
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
crm_project_create, hotel, project_mrp_sale, project_sale_expense, project_task_customer_ref, sale_order_update_timesheet_price, sale_project_copy_tasks, sale_project_stock, sale_project_stock_account, sale_purchase_project, sale_timesheet
Description
Allows to create task from your sales order
=============================================
This module allows to generate a project/task from sales orders.

Code Analysis

Views touched (31)
XML IDNameModelTypeStatus
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 form Inherits product.product_normal_form_view
product_template_form_view_inherit_sale_project product.template.sale.project.form product.template form Inherits sale.product_template_form_view
product_template_form_view_invoice_policy_inherit_sale_project product.template.inherit.sale.projectform product.template form Inherits sale.product_template_form_view
project_milestone_view_form project.milestone.view.form.inherit project.milestone form Inherits project.project_milestone_view_form
project_milestone_view_kanban_inherit_sale_project project.milestone.view.kanban.inherit project.milestone kanban Inherits project.project_milestone_view_kanban
project_milestone_view_tree project.milestone.view.list.inherit project.milestone list Inherits project.project_milestone_view_tree
project_project_view_form_simplified_inherit project.project.view.form.simplified.inherit project.project form Inherits project.project_project_view_form_simplified
project_project_view_form_simplified_template project.project.create.wizard.form project.template.create.wizard form Inherits project.project_project_view_form_simplified_template
project_project_view_inherit_project_filter project.project.select.inherit.project project.project Inherits project.view_project_project_filter
project_project_view_tree_inherit_sale_project project.project.list.inherit.sale.project project.project list Inherits project.view_project
project_sharing_inherit_project_task_view_form project.task.view.inherit project.task form Inherits project.project_sharing_project_task_view_form
project_sharing_inherit_project_task_view_tree project.task.view.list.inherit project.task list Inherits project.project_sharing_project_task_view_tree
project_task_view_search project.task.search.inherit project.task search Inherits project.view_task_search_form_project_base
project_task_view_tree_main_base project.task.main.list.inherit project.task list Inherits project.project_task_view_tree_main_base
project_templates_view_list project.project.template.list project.project list 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 form 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 form Inherits project.project_project_view_form_simplified_template
task_type_edit_inherit_sale_project project.task.type.form.inherit.sale_project project.task.type form Inherits project.task_type_edit
view_edit_project_inherit_form project.project.view.inherit project.project form Inherits project.edit_project
view_order_form_inherit_sale_project sale.order.form.sale.project sale.order form 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 form Inherits sale.view_order_form
view_sale_project_inherit_form project.task.view.inherit project.task form Inherits project.view_task_form2
view_sale_project_quick_create_task_form project.task.view.inherit project.task form Inherits project.quick_create_task_form
view_sales_order_filter_inherit_sale_project sale.order.list.select.inherit.sale_project sale.order list Inherits sale.view_sales_order_filter
view_task_form_res_partner project.task.form.res.partner.inherit.sale_project project.task form Inherits project.view_task_form_res_partner
view_task_tree2_inherit_sale_project project.task.form.inherit.sale.project project.task form Inherits project.project_task_view_tree_base
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (16)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, vals)

New fields (6)
  • 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'
Public methods (1)
  • write(self, vals)

New fields (7)
  • 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'
Public methods (1)
  • action_view_sale_order(self)

New fields (13)
  • allow_billable Boolean
    args: 'Billable'
  • 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'
Public methods (15)
  • 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)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • 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)

New fields (8)
  • 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'
Public methods (6)
  • TASK_PORTAL_READABLE_FIELDS(self)
    @property
  • action_project_sharing_view_so(self)
  • action_view_so(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • show_rating_active Boolean
    compute='_compute_show_rating_active' export_string_translation=False
Public methods (0)

No public methods.

New fields (3)
  • allow_billable Boolean
    related='template_id.allow_billable'
  • partner_id Many2one → res.partner
    args: 'res.partner'
  • role_to_users_ids One2many
    compute='_compute_role_to_users_ids' readonly=False store=True
Public methods (2)
  • action_create_project_from_so(self)
    Create a project either from template or directly if no template is set.
  • action_open_template_view(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (0)

No public methods.

New fields (13)
  • 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'
Public methods (8)
  • action_confirm(self)
  • action_create_project(self)
  • action_view_milestone(self)
  • action_view_project_ids(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • get_first_service_line(self)
  • write(self, vals)

New fields (4)
  • 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'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • project_id Many2one → project.project
    comodel_name='project.project' readonly=True
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…