diff --git a/addons/sale_management/models/__init__.py b/addons/sale_management/models/__init__.py index d4ea9bb0f8f..7671a85a429 100644 --- a/addons/sale_management/models/__init__.py +++ b/addons/sale_management/models/__init__.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import digest +from . import res_company from . import res_config_settings from . import sale_order from . import sale_order_template diff --git a/addons/sale_management/models/res_company.py b/addons/sale_management/models/res_company.py new file mode 100644 index 00000000000..ea9e139ecbe --- /dev/null +++ b/addons/sale_management/models/res_company.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + _check_company_auto = True + + sale_order_template_id = fields.Many2one( + "sale.order.template", string="Default Sale Template", + domain="['|', ('company_id', '=', False), ('company_id', '=', id)]", + check_company=True, + ) diff --git a/addons/sale_management/models/res_config_settings.py b/addons/sale_management/models/res_config_settings.py index 2abc29f1d05..51875383df7 100644 --- a/addons/sale_management/models/res_config_settings.py +++ b/addons/sale_management/models/res_config_settings.py @@ -7,12 +7,22 @@ from odoo import fields, models, api class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' - group_sale_order_template = fields.Boolean("Quotation Templates", implied_group='sale_management.group_sale_order_template') - default_sale_order_template_id = fields.Many2one('sale.order.template', default_model='sale.order', string='Default Template') + group_sale_order_template = fields.Boolean( + "Quotation Templates", implied_group='sale_management.group_sale_order_template') + company_so_template_id = fields.Many2one( + related="company_id.sale_order_template_id", string="Default Template", readonly=False, + domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]") module_sale_quotation_builder = fields.Boolean("Quotation Builder") @api.onchange('group_sale_order_template') def _onchange_group_sale_order_template(self): if not self.group_sale_order_template: self.module_sale_quotation_builder = False - self.default_sale_order_template_id = False + + def execute(self): + if not self.group_sale_order_template: + self.company_so_template_id = None + self.env['res.company'].sudo().search([]).write({ + 'sale_order_template_id': False, + }) + return super(ResConfigSettings, self).execute() diff --git a/addons/sale_management/models/sale_order.py b/addons/sale_management/models/sale_order.py index 35c5eda5756..a625011cac9 100644 --- a/addons/sale_management/models/sale_order.py +++ b/addons/sale_management/models/sale_order.py @@ -10,6 +10,15 @@ from odoo.exceptions import UserError, ValidationError class SaleOrder(models.Model): _inherit = 'sale.order' + @api.model + def default_get(self, fields_list): + default_vals = super(SaleOrder, self).default_get(fields_list) + if "sale_order_template_id" in fields_list and not default_vals.get("sale_order_template_id"): + company_id = default_vals.get('company_id', False) + company = self.env["res.company"].browse(company_id) if company_id else self.env.company + default_vals['sale_order_template_id'] = company.sale_order_template_id.id + return default_vals + sale_order_template_id = fields.Many2one( 'sale.order.template', 'Quotation Template', readonly=True, check_company=True, diff --git a/addons/sale_management/models/sale_order_template.py b/addons/sale_management/models/sale_order_template.py index 23a9a297faf..8538b75518a 100644 --- a/addons/sale_management/models/sale_order_template.py +++ b/addons/sale_management/models/sale_order_template.py @@ -53,10 +53,8 @@ class SaleOrderTemplate(models.Model): def write(self, vals): if 'active' in vals and not vals.get('active'): - template_id = self.env['ir.default'].get('sale.order', 'sale_order_template_id') - for template in self: - if template_id and template_id == template.id: - raise UserError(_('Before archiving "%s" please select another default template in the settings.') % template.name) + companies = self.env['res.company'].sudo().search([('sale_order_template_id', 'in', self.ids)]) + companies.sale_order_template_id = None result = super(SaleOrderTemplate, self).write(vals) self._update_product_translations() return result diff --git a/addons/sale_management/views/res_config_settings_views.xml b/addons/sale_management/views/res_config_settings_views.xml index 0b608b2bf32..3bc308edb1d 100644 --- a/addons/sale_management/views/res_config_settings_views.xml +++ b/addons/sale_management/views/res_config_settings_views.xml @@ -20,8 +20,8 @@
-