summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorVictor Feyens <vfe@odoo.com>2020-03-10 13:27:18 +0000
committerVictor Feyens <vfe@odoo.com>2020-03-31 10:44:41 +0000
commit0d52f9c379e6b837bbcfc121cda40d1ecc3599e8 (patch)
tree2b4b73a235f5935c3d990a8fa14183975caa88d3 /addons
parent79e79d0fd05c3ce22e007eb187e69a28bc6db7ca (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')
-rw-r--r--addons/sale_management/models/__init__.py1
-rw-r--r--addons/sale_management/models/res_company.py15
-rw-r--r--addons/sale_management/models/res_config_settings.py16
-rw-r--r--addons/sale_management/models/sale_order.py9
-rw-r--r--addons/sale_management/models/sale_order_template.py6
-rw-r--r--addons/sale_management/views/res_config_settings_views.xml4
-rw-r--r--addons/sale_quotation_builder/data/sale_order_template_data.xml2
-rw-r--r--addons/sale_quotation_builder/models/__init__.py2
-rw-r--r--addons/sale_quotation_builder/models/res_company.py17
-rw-r--r--addons/sale_quotation_builder/models/res_config_settings.py16
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)