diff --git a/contract/models/abstract_contract_line.py b/contract/models/abstract_contract_line.py index a7c603367..5d2598a65 100644 --- a/contract/models/abstract_contract_line.py +++ b/contract/models/abstract_contract_line.py @@ -191,12 +191,18 @@ class ContractAbstractContractLine(models.AbstractModel): """ for line in self: if line.automatic_price: + pricelist = ( + line.contract_id.pricelist_id or + line.contract_id.partner_id.with_context( + force_company=line.contract_id.company_id.id, + ).property_product_pricelist + ) product = line.product_id.with_context( quantity=line.env.context.get( 'contract_line_qty', line.quantity, ), - pricelist=line.contract_id.pricelist_id.id, + pricelist=pricelist.id, partner=line.contract_id.partner_id.id, date=line.env.context.get( 'old_date', fields.Date.context_today(line) diff --git a/contract/models/contract.py b/contract/models/contract.py index a9199ba83..12ef80668 100644 --- a/contract/models/contract.py +++ b/contract/models/contract.py @@ -33,7 +33,8 @@ class ContractContract(models.Model): ondelete='restrict', ) currency_id = fields.Many2one( - related="company_id.currency_id", + compute="_compute_currency_id", + comodel_name="res.currency", string="Currency", readonly=True, ) @@ -147,6 +148,24 @@ class ContractContract(models.Model): ) return invoices + @api.depends("pricelist_id", "partner_id", "journal_id", "company_id") + def _compute_currency_id(self): + for rec in self: + currency = self.env['res.currency'] + if any(rec.contract_line_ids.mapped('automatic_price')): + # Use pricelist currency + currency = ( + rec.pricelist_id.currency_id or + rec.partner_id.with_context( + force_company=rec.company_id.id, + ).property_product_pricelist.currency_id + ) + rec.currency_id = ( + currency.id or + rec.journal_id.currency_id.id or + rec.company_id.currency_id.id + ) + @api.multi def _compute_invoice_count(self): for rec in self: @@ -299,11 +318,6 @@ class ContractContract(models.Model): _("Please define a %s journal for the company '%s'.") % (self.contract_type, self.company_id.name or '') ) - currency = ( - self.pricelist_id.currency_id - or self.partner_id.property_product_pricelist.currency_id - or self.company_id.currency_id - ) invoice_type = 'out_invoice' if self.contract_type == 'purchase': invoice_type = 'in_invoice' @@ -318,7 +332,7 @@ class ContractContract(models.Model): invoice_vals = vinvoice._convert_to_write(vinvoice._cache) invoice_vals.update({ 'name': self.code, - 'currency_id': currency.id, + 'currency_id': self.currency_id.id, 'date_invoice': date_invoice, 'journal_id': journal.id, 'origin': self.name, diff --git a/contract/views/contract.xml b/contract/views/contract.xml index f90da91db..c29928019 100644 --- a/contract/views/contract.xml +++ b/contract/views/contract.xml @@ -178,8 +178,6 @@ options="{'no_create': True}" groups="base.group_multi_company"/>