[FIX] contract: multi-company assignment notification

Steps to reproduce the problem:

1. Log in as Mitchell Admin.
2. Create contract CNT-A for company CMP-A, assigned to Marc Demo.
3. Create contract CNT-B for company CMP-B, assigned to Marc Demo.
4. Run cron to create recurring invoices.

Actual results:

- Odoo sends automated assignment emails to Marc Demo, which indicate the name of the company activated for `__system__` user whlie the cron was being executed.

Expected results after this patch:

- Odoo sends automated assignment emails to Marc Demo, which indicate the invoice company.

@Tecnativa TT24657
This commit is contained in:
Jairo Llopis
2020-07-28 10:30:40 +02:00
committed by Pedro M. Baeza
parent 1c6bfdb391
commit 4e570bd46f
6 changed files with 32 additions and 2 deletions

View File

@@ -74,6 +74,7 @@ Known issues / Roadmap
======================
* Recover states and others functional fields in Contracts.
* Remove ``models/ir_ui_view.py`` in v13, where the workaround it contains is supported upstream.
Bug Tracker
===========

View File

@@ -13,3 +13,4 @@ from . import contract_tag
from . import res_company
from . import res_config_settings
from . import contract_terminate_reason
from . import ir_ui_view

View File

@@ -546,8 +546,15 @@ class ContractContract(models.Model):
if not date_ref:
date_ref = fields.Date.context_today(self)
domain = self._get_contracts_to_invoice_domain(date_ref)
contracts_to_invoice = self.search(domain)
return contracts_to_invoice._recurring_create_invoice(date_ref)
invoices = self.env["account.invoice"]
# Invoice by companies, so assignation emails get correct context
companies_to_invoice = self.read_group(domain, ["company_id"], ["company_id"])
for row in companies_to_invoice:
contracts_to_invoice = self.search(row["__domain"]).with_context(
allowed_company_ids=[row["company_id"][0]]
)
invoices |= contracts_to_invoice._recurring_create_invoice(date_ref)
return invoices
@api.multi
def action_terminate_contract(self):

View File

@@ -0,0 +1,19 @@
# Copyright 2020 Tecnativa - Jairo Llopis
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import api, models
class IrUiView(models.Model):
_inherit = "ir.ui.view"
@api.model
def _prepare_qcontext(self):
"""Patch context to use fw-compatible v13 company."""
# TODO Delete this method in v13; it's upstream there
result = super()._prepare_qcontext()
if self.env.context.get("allowed_company_ids"):
result["res_company"] = self.env["res.company"].browse(
self.env.context["allowed_company_ids"][0]
).sudo()
return result

View File

@@ -1 +1,2 @@
* Recover states and others functional fields in Contracts.
* Remove ``models/ir_ui_view.py`` in v13, where the workaround it contains is supported upstream.

View File

@@ -425,6 +425,7 @@ To use it, just select the template on the contract and fields will be filled au
<h1><a class="toc-backref" href="#id3">Known issues / Roadmap</a></h1>
<ul class="simple">
<li>Recover states and others functional fields in Contracts.</li>
<li>Remove <tt class="docutils literal">models/ir_ui_view.py</tt> in v13, where the workaround it contains is supported upstream.</li>
</ul>
</div>
<div class="section" id="bug-tracker">