product/models/res_company.py

70 lines
2.6 KiB
Python
Raw Normal View History

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import _, api, models
class ResCompany(models.Model):
_inherit = "res.company"
@api.model_create_multi
def create(self, vals_list):
companies = super().create(vals_list)
companies._activate_or_create_pricelists()
return companies
def _activate_or_create_pricelists(self):
""" Manage the default pricelists for needed companies. """
if self.env.context.get('disable_company_pricelist_creation'):
return
if self.user_has_groups('product.group_product_pricelist'):
companies = self or self.env['res.company'].search([])
ProductPricelist = self.env['product.pricelist'].sudo()
# Activate existing default pricelists
default_pricelists_sudo = ProductPricelist.with_context(active_test=False).search(
[('item_ids', '=', False), ('company_id', 'in', companies.ids)]
).filtered(lambda pl: pl.currency_id == pl.company_id.currency_id)
default_pricelists_sudo.action_unarchive()
companies_without_pricelist = companies.filtered(
lambda c: c.id not in default_pricelists_sudo.company_id.ids
)
# Create missing default pricelists
ProductPricelist.create([
company._get_default_pricelist_vals() for company in companies_without_pricelist
])
def _get_default_pricelist_vals(self):
"""Add values to the default pricelist at company creation or activation of the pricelist
Note: self.ensure_one()
:rtype: dict
"""
self.ensure_one()
values = {}
values.update({
'name': _("Default %s pricelist", self.currency_id.name),
'currency_id': self.currency_id.id,
'company_id': self.id,
'sequence': 10,
})
return values
def write(self, vals):
"""Delay the automatic creation of pricelists post-company update.
This makes sure that the pricelist(s) automatically created are created with the right
currency.
"""
if not vals.get('currency_id'):
return super().write(vals)
enabled_pricelists = self.user_has_groups('product.group_product_pricelist')
res = super(
ResCompany, self.with_context(disable_company_pricelist_creation=True)
).write(vals)
if not enabled_pricelists and self.user_has_groups('product.group_product_pricelist'):
self.browse()._activate_or_create_pricelists()
return res