TIP: You can type at any time to perform a new search.
Sales - Project
sale_project · odoo/odoo
Security findings
- Repository
- odoo/odoo · module folder
- Module version
- 0.1.0
- Category
- Sales/Sales
- Folder size
- 2.05 MB
- License
- LGPL-3
- Application
- No
- Auto-installable
- Yes
- Website
- None
- Last tracking update
- 2026-10-05 00:19:51
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Christophe Matthieu, Aaron Bohy, Géry Debongnie, Xavier-Do, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, Julien Mougenot, svs-odoo, Prakash Prajapati, Tiffany Chang (tic), Mathieu Duckerts-Antoine, Pierre Paridans, Romain Estievenart, william-andre, luvi, Renaud Thiry, Vincent Larcin, Victor Piryns (pivi), Thomas Becquevort (thbe), amdi-odoo, Dylan Kiss (dyki), Xavier Bol (xbo), Maxime de Neuville, suth-odoo, Tanguy Quéguineur, David Vidal, Pierre Pulinckx, Krzysztof Magusiak (krma), rida, kdes-odoo, pajo, sawer, Julien Launois (jula), adip-odoo, oumaima-aarabe, Nisarg (nipl), assh-odoo, Leila Kerroum Balaguer, Maxime de Neuville (mane), maap-odoo, Aurélien Bertrand, mibav-odoo, damrOdoo, abbhi-Odoo, Joe Wesnofske, dhtr-odoo, Abdelouahab Laaroussi (abla), alan-odoo, Martin Lefèvre (mlef), Julien Carion, Matt Marcha, njor-odoo, Abdullah (abye), niyp-odoo, makb-odoo, rusi-odoo, djhan, Ryan (rygea), Julien Piron, Jean Schoenlaub
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- crm_sale_project, project_mrp_sale, project_sale_expense, sale_project_margin, 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 (38)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_analytic_line_view_graph_for_single_project |
account.analytic.line.margins.pivot | account.analytic.line | pivot | Inherits account_analytic_line_view_graph_project_margin |
account_analytic_line_view_graph_project_margin |
account.analytic.line.margins.pivot | account.analytic.line | pivot | Inherits analytic.view_account_analytic_line_graph |
account_analytic_line_view_list_margins_no_group |
account.analytic.line.margins.no.group.list | account.analytic.line | tree | Inherits view_account_analytic_line_inherit_sale_project_tree |
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_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_card_inherit_sale_project |
project.project.card.inherit.sale.project | project.project | Inherits project.view_project_card | |
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 |
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_line_search |
sale_project.account.analytic.margins.search | account.analytic.line | search | Inherits account.view_account_analytic_line_filter_inherit_account |
sale_project_view_form_simplified_template |
sale.project.create.wizard.form | project.template.create.wizard | form | Inherits project.project_project_view_form_simplified_template |
sale_report_view_search |
sale.report.view.search.inherit.sale.project | sale.report | search | Inherits sale.view_order_product_search |
task_type_edit_inherit_sale_project |
project.task.type.form.inherit.sale_project | project.task.type | form | Inherits project.task_type_edit |
view_account_analytic_line_inherit_sale_project_pivot |
account.analytic.margins.pivot | account.analytic.line | pivot | Inherits account.view_account_analytic_line_pivot |
view_account_analytic_line_inherit_sale_project_pivot_single |
account.analytic.margins.pivot | account.analytic.line | pivot | Inherits account.view_account_analytic_line_pivot |
view_account_analytic_line_inherit_sale_project_tree |
account.analytic.margins.tree | account.analytic.line | tree | Inherits account.view_account_analytic_line_tree_inherit_account |
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 (15)
New fields (2)
-
billable_typeSelectioncompute='_compute_project_billable_type'compute_sudo=Truereadonly=Trueselection='_selection_billable_type'store=Truestring='Billable Type' -
category_reportSelectioncompute='_compute_category_report'compute_sudo=Truereadonly=Truestore=True args: [('revenues', 'Revenue'), ('costs', 'Costs')]
-
action_open_account_analytic_line_origine(self)
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_idMany2one → project.projectcompany_dependent=Truecopy=Truedomain='[("is_template", "=", False)]' args: 'project.project', 'Project' -
project_template_idMany2one → project.projectcompany_dependent=Truecopy=Truedomain='[("is_template", "=", True)]' args: 'project.project', 'Project Template' -
service_policySelectioncompute='_compute_service_policy'compute_sudo=Trueinverse='_inverse_service_policy'string='Service Invoicing Policy'tracking=True args: '_selection_service_policy' -
service_trackingSelectionondelete={'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_typeSelectionselection_add=[('milestones', 'Project Milestones')] -
task_template_idMany2one → project.taskcompany_dependent=Truecompute='_compute_task_template'copy=Truedomain="[('is_template', '=', True), '|', ('project_id', '=', project_id), ('project_id', '=', False)]"readonly=Falsestore=True args: 'project.task', 'Task Template'
-
write(self, vals)
New fields (7)
-
allow_billableBooleanexport_string_translation=Falserelated='project_id.allow_billable' -
product_uom_idMany2oneexport_string_translation=Falserelated='sale_line_id.product_uom_id' -
product_uom_qtyFloatcompute='_compute_product_uom_qty'compute_sudo=Truereadonly=False args: 'Quantity' -
project_partner_idMany2oneexport_string_translation=Falserelated='project_id.partner_id' -
quantity_percentageFloatcompute='_compute_quantity_percentage'copy=Truehelp='Percentage of the ordered quantity that will automatically be delivered once the milestone is reached.'readonly=Falsestore=True args: 'Quantity (%)' -
sale_line_display_nameCharexport_string_translation=Falserelated='sale_line_id.display_name' args: 'Sale Line Display Name' -
sale_line_idMany2one → sale.order.linedefault=_default_sale_line_iddomain="[('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)
New fields (17)
-
allow_billableBooleanargs: 'Billable' -
display_sales_stat_buttonsBooleancompute='_compute_display_sales_stat_buttons'export_string_translation=False -
has_any_so_to_invoiceBooleancompute='_compute_has_any_so_to_invoice'export_string_translation=False args: 'Has SO to Invoice' -
has_any_so_with_nothing_to_invoiceBooleancompute='_compute_has_any_so_with_nothing_to_invoice'export_string_translation=False args: 'Has a SO with an invoice status of No' -
invoice_countIntegercompute='_compute_invoice_count'export_string_translation=Falsegroups='account.group_account_readonly' -
partner_idMany2onecompute='_compute_partner_id'readonly=Falsestore=True -
real_costMonetarycompute='_compute_real_cost'export_string_translation=False -
real_cost_ratioFloatcompute='_compute_real_cost'export_string_translation=False -
reinvoiced_sale_order_idMany2one → sale.ordercopy=Falsedomain="['|', ('partner_id', '=', partner_id), ('partner_id.commercial_partner_id.id', 'parent_of', 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_idMany2one → sale.order.linecompute='_compute_sale_line_id'copy=Falsedomain=<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=Falsestore=True args: 'sale.order.line', 'Sales Order Item' -
sale_order_amount_totalMonetarycompute='_compute_sale_order_count'export_string_translation=Falsegroups='sales_team.group_sale_salesman' -
sale_order_countIntegercompute='_compute_sale_order_count'export_string_translation=Falsegroups='sales_team.group_sale_salesman' -
sale_order_idMany2oneexport_string_translation=Falserelated='sale_line_id.order_id' -
sale_order_line_countIntegercompute='_compute_sale_order_count'export_string_translation=Falsegroups='sales_team.group_sale_salesman' -
sale_order_stateSelectionexport_string_translation=Falserelated='sale_order_id.state'tracking=False -
sale_warning_textTextcompute='_compute_sale_warning_text'help='Warning for the partner as set by the user.' args: 'Project Warning' -
vendor_bill_countIntegercompute_sudo=Falseexport_string_translation=Falsegroups='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_real_margin(self) -
action_view_sols(self) -
action_view_sos(self) -
action_view_tasks(self) -
check_allow_billable_projects(self)return if the project is linked to product or sales order -
create(self, vals_list)@api.model_create_multi -
default_get(self, fields)@api.model -
template_to_project_confirmation_callback(self, callbacks) -
write(self, vals)
New fields (9)
-
allow_billableBooleanrelated='project_id.allow_billable' -
display_sale_order_buttonBooleancompute='_compute_display_sale_order_button'string='Display Sales Order' -
partner_idMany2oneinverse='_inverse_partner_id' -
project_sale_order_idMany2one → sale.orderrelated='project_id.sale_order_id'string="Project's sale order" args: 'sale.order' -
sale_line_idMany2one → sale.order.linecompute='_compute_sale_line'copy=Truedomain=<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=Falserecursive=Truestore=Truetracking=True args: 'sale.order.line', 'Sales Order Item' -
sale_order_idMany2one → sale.ordercompute='_compute_sale_order_id'group_expand='_group_expand_sales_order'help='Sales order to which the task is linked.'index='btree_not_null'store=True args: 'sale.order', 'Sales Order' -
sale_order_stateSelectionrelated='sale_order_id.state'tracking=False -
sale_warning_textTextcompute='_compute_sale_warning_text'help='Warning for the partner as set by the user.' args: 'Task Warning' -
task_to_invoiceBooleancompute='_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)@property -
action_project_sharing_view_so(self) -
action_view_so(self) -
default_get(self, fields)@api.model
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
show_rating_activeBooleancompute='_compute_show_rating_active'export_string_translation=False
No public methods.
New fields (4)
-
allow_billableBooleanrelated='template_id.allow_billable' -
partner_idMany2one → res.partnerargs: 'res.partner' -
role_to_users_idsOne2manycompute='_compute_role_to_users_ids'readonly=Falsestore=True -
sale_warning_textTextcompute='_compute_sale_warning_text'help='Warning for the partner as set by the user.' args: 'Project Template Warning'
-
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 (2)
-
sale_line_idMany2one → sale.order.linereadonly=Truestring='Sales Order Item' args: 'sale.order.line' -
sale_order_idMany2one → sale.orderreadonly=Truestring='Sales Order' args: 'sale.order'
No public methods.
New fields (14)
-
closed_task_countIntegercompute='_compute_tasks_ids'export_string_translation=Falsegroups='project.group_project_user' -
completed_task_percentageFloatcompute='_compute_completed_task_percentage'export_string_translation=Falsegroups='project.group_project_user' -
is_product_milestoneBooleancompute='_compute_is_product_milestone'export_string_translation=False -
milestone_countIntegercompute='_compute_milestone_count'export_string_translation=False -
project_account_idMany2one → account.analytic.accountrelated='project_id.account_id' args: 'account.analytic.account' -
project_countIntegercompute='_compute_project_ids'export_string_translation=Falsegroups='project.group_project_user'string='Number of Projects' -
project_idMany2one → project.projectcopy=Falsedomain=[('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_idsMany2many → project.projectcompute='_compute_project_ids'copy=Falseexport_string_translation=Falsegroups='project.group_project_user,project.group_project_milestone'string='Projects' args: 'project.project' -
project_requiredBooleancompute='_compute_project_required'string='Project Required' -
show_create_project_buttonBooleancompute='_compute_show_project_and_task_button'export_string_translation=Falsegroups='project.group_project_user' -
show_project_buttonBooleancompute='_compute_show_project_and_task_button'export_string_translation=Falsegroups='project.group_project_user' -
tasks_countIntegercompute='_compute_tasks_ids'export_string_translation=Falsegroups='project.group_project_user'string='Tasks' -
tasks_idsMany2many → project.taskcompute='_compute_tasks_ids'export_string_translation=Falsegroups='project.group_project_user'search='_search_tasks_ids'string='Tasks associated with this sale' args: 'project.task' -
visible_projectBooleancompute='_compute_visible_project'export_string_translation=Falsereadonly=True args: 'Display project'
-
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_idMany2one → project.projectcopy=Falseexport_string_translation=Falseindex=True args: 'project.project', 'Generated Project' -
qty_delivered_methodSelectionselection_add=[('milestones', 'Milestones')] -
reached_milestones_idsOne2many → project.milestonedomain=[('is_reached', '=', True)]export_string_translation=Falsestring='Reached Milestones' args: 'project.milestone', 'sale_line_id' -
task_idMany2one → project.taskcopy=Falseexport_string_translation=Falseindex=True args: 'project.task', 'Generated Task'
-
action_view_sale_order(self) -
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_idMany2one → project.projectcomodel_name='project.project'readonly=True
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…