Files
odoo_source/addons/product/models/res_partner.py
T
norlinhenrik 47c60db4a0 [FIX] product: set the correct company in property
`set_multi` uses the company of the current user.
As the property is created in sudo, the company of the admin may be different
than the one of the current user.

Before this commit, setting a different pricelist on a partner when logged in a
different company than the admin, the change had no apparent effect (was
creating a property for the admin's company).

Set `force_company` in the context to always set the one on the current user.
set_multi ignores if the same as the global rule to avoid bloating the table.

Closes #14984
2017-01-16 11:55:07 +01:00

44 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models, api
class Partner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
property_product_pricelist = fields.Many2one(
'product.pricelist', 'Sale Pricelist', compute='_compute_product_pricelist',
inverse="_inverse_product_pricelist", company_dependent=False, # NOT A REAL PROPERTY
help="This pricelist will be used, instead of the default one, for sales to the current partner")
@api.multi
@api.depends('country_id')
def _compute_product_pricelist(self):
for p in self:
if not isinstance(p.id, models.NewId): # if not onchange
p.property_product_pricelist = self.env['product.pricelist']._get_partner_pricelist(p.id)
@api.one
def _inverse_product_pricelist(self):
pls = self.env['product.pricelist'].search(
[('country_group_ids.country_ids.code', '=', self.country_id and self.country_id.code or False)],
limit=1
)
default_for_country = pls and pls[0]
actual = self.env['ir.property'].get('property_product_pricelist', 'res.partner', 'res.partner,%s' % self.id)
# update at each change country, and so erase old pricelist
if self.property_product_pricelist or (actual and default_for_country and default_for_country.id != actual.id):
# keep the company of the current user before sudo
self.env['ir.property'].with_context(force_company=self.env.user.company_id.id).sudo().set_multi(
'property_product_pricelist',
self._name,
{self.id: self.property_product_pricelist or default_for_country.id},
default_value=default_for_country.id
)
def _commercial_fields(self):
return super(Partner, self)._commercial_fields() + ['property_product_pricelist']