[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:
@@ -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)
|
||||
Reference in New Issue
Block a user