[IMP] sale_management: default template by company.

closes odoo/odoo#41499

Related: odoo/upgrade#854
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
Victor Feyens
2020-03-31 10:44:41 +00:00
parent 79e79d0fd0
commit 0d52f9c379
10 changed files with 61 additions and 27 deletions
@@ -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
@@ -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,
)
@@ -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()
@@ -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,
@@ -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
@@ -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"/>
@@ -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>
@@ -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
@@ -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
@@ -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)