Done for res.partner.bank, res.company and board models. Some override may have been ignored because heavily linked to business code (like company in stock). See merge commit for more details. Task ID-2330149 COM PR odoo/odoo#61246 ENT PR odoo/enterprise#14561
68 lines
3.0 KiB
Python
68 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# 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(ResCompany, self).create(vals_list)
|
|
ProductPricelist = self.env['product.pricelist']
|
|
for new_company in companies:
|
|
pricelist = ProductPricelist.search([
|
|
('currency_id', '=', new_company.currency_id.id),
|
|
('company_id', '=', False)
|
|
], limit=1)
|
|
if not pricelist:
|
|
params = {'currency': new_company.currency_id.name}
|
|
pricelist = ProductPricelist.create({
|
|
'name': _("Default %(currency)s pricelist") % params,
|
|
'currency_id': new_company.currency_id.id,
|
|
})
|
|
self.env['ir.property']._set_default(
|
|
'property_product_pricelist',
|
|
'res.partner',
|
|
pricelist,
|
|
new_company,
|
|
)
|
|
return companies
|
|
|
|
def write(self, values):
|
|
# When we modify the currency of the company, we reflect the change on the list0 pricelist, if
|
|
# that pricelist is not used by another company. Otherwise, we create a new pricelist for the
|
|
# given currency.
|
|
ProductPricelist = self.env['product.pricelist']
|
|
currency_id = values.get('currency_id')
|
|
main_pricelist = self.env.ref('product.list0', False)
|
|
if currency_id and main_pricelist:
|
|
nb_companies = self.search_count([])
|
|
for company in self:
|
|
existing_pricelist = ProductPricelist.search(
|
|
[('company_id', 'in', (False, company.id)),
|
|
('currency_id', 'in', (currency_id, company.currency_id.id))])
|
|
if existing_pricelist and any(currency_id == x.currency_id.id for x in existing_pricelist):
|
|
continue
|
|
if currency_id == company.currency_id.id:
|
|
continue
|
|
currency_match = main_pricelist.currency_id == company.currency_id
|
|
company_match = (main_pricelist.company_id == company or
|
|
(main_pricelist.company_id.id is False and nb_companies == 1))
|
|
if currency_match and company_match:
|
|
main_pricelist.write({'currency_id': currency_id})
|
|
else:
|
|
params = {'currency': self.env['res.currency'].browse(currency_id).name}
|
|
pricelist = ProductPricelist.create({
|
|
'name': _("Default %(currency)s pricelist") % params,
|
|
'currency_id': currency_id,
|
|
})
|
|
self.env['ir.property']._set_default(
|
|
'property_product_pricelist',
|
|
'res.partner',
|
|
pricelist,
|
|
company,
|
|
)
|
|
return super(ResCompany, self).write(values)
|