diff options
| author | Victor Feyens <vfe@odoo.com> | 2020-03-10 13:27:18 +0000 |
|---|---|---|
| committer | Victor Feyens <vfe@odoo.com> | 2020-03-31 10:44:41 +0000 |
| commit | 0d52f9c379e6b837bbcfc121cda40d1ecc3599e8 (patch) | |
| tree | 2b4b73a235f5935c3d990a8fa14183975caa88d3 /addons | |
| parent | 79e79d0fd05c3ce22e007eb187e69a28bc6db7ca (diff) | |
[IMP] sale_management: default template by company.
closes odoo/odoo#41499
Related: odoo/upgrade#854
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Diffstat (limited to 'addons')
10 files changed, 61 insertions, 27 deletions
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 @@ </div> <div class="content-group" attrs="{'invisible': [('group_sale_order_template', '=', False)]}"> <div class="mt16"> - <label for="default_sale_order_template_id" class="o_light_label"/> - <field name="default_sale_order_template_id" class="oe_inline"/> + <label for="company_so_template_id" class="o_light_label"/> + <field name="company_so_template_id" class="oe_inline"/> </div> <div class="mt8"> <button name="%(sale_management.sale_order_template_action)d" icon="fa-arrow-right" type="action" string="Quotation Templates" class="btn-link"/> diff --git a/addons/sale_quotation_builder/data/sale_order_template_data.xml b/addons/sale_quotation_builder/data/sale_order_template_data.xml index 8d22743e318..ba9e7609549 100644 --- a/addons/sale_quotation_builder/data/sale_order_template_data.xml +++ b/addons/sale_quotation_builder/data/sale_order_template_data.xml @@ -76,6 +76,6 @@ </field> </record> - <function model="res.config.settings" name="_set_default_sale_order_template_id_if_empty"/> + <function model="res.company" name="_set_default_sale_order_template_id_if_empty"/> </data> </odoo> diff --git a/addons/sale_quotation_builder/models/__init__.py b/addons/sale_quotation_builder/models/__init__.py index f6215511df1..88420748bfb 100644 --- a/addons/sale_quotation_builder/models/__init__.py +++ b/addons/sale_quotation_builder/models/__init__.py @@ -2,6 +2,6 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import product_template -from . import res_config_settings +from . import res_company from . import sale_order from . import sale_order_template diff --git a/addons/sale_quotation_builder/models/res_company.py b/addons/sale_quotation_builder/models/res_company.py new file mode 100644 index 00000000000..a6df079ec8a --- /dev/null +++ b/addons/sale_quotation_builder/models/res_company.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, api + + +class ResCompany(models.Model): + _inherit = 'res.company' + + @api.model + def _set_default_sale_order_template_id_if_empty(self): + template = self.env.ref('sale_quotation_builder.sale_order_template_default', raise_if_not_found=False) + if not template: + return + companies = self.sudo().search([]) + for company in companies: + company.sale_order_template_id = company.sale_order_template_id or template diff --git a/addons/sale_quotation_builder/models/res_config_settings.py b/addons/sale_quotation_builder/models/res_config_settings.py deleted file mode 100644 index 9e42e987a85..00000000000 --- a/addons/sale_quotation_builder/models/res_config_settings.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo import models, api - - -class ResConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' - - @api.model - def _set_default_sale_order_template_id_if_empty(self): - IrDefault = self.env['ir.default'] - if not IrDefault.get('sale.order', 'sale_order_template_id'): - template = self.env.ref('sale_quotation_builder.sale_order_template_default', raise_if_not_found=False) - if template and template.active: - IrDefault.set('sale.order', 'sale_order_template_id', template.id) |
