From e794bf8294b41badaf0dee41d20c364372fd02b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 23 Jan 2022 12:54:56 +0100 Subject: [PATCH] Ensure to set correct company context when calling today issue11046 review370421002 --- opportunity.py | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/opportunity.py b/opportunity.py index dac430a368..b449c0f429 100644 --- a/opportunity.py +++ b/opportunity.py @@ -2,6 +2,7 @@ # this repository contains the full copyright notices and license terms. "Sales extension for managing leads and opportunities" import datetime +from itertools import groupby from sql import Literal, Null from sql.aggregate import Count, Max, Sum @@ -384,7 +385,8 @@ class SaleOpportunity( def is_forecast(self): pool = Pool() Date = pool.get('ir.date') - today = Date.today() + with Transaction().set_context(company=self.company.id): + today = Date.today() return self.end_date or datetime.date.max > today @classmethod @@ -392,29 +394,44 @@ class SaleOpportunity( def won(cls, opportunities): pool = Pool() Date = pool.get('ir.date') - cls.write([o for o in opportunities if o.is_forecast], { - 'end_date': Date.today(), - 'state': 'won', - }) + for company, c_opportunities in groupby( + opportunities, key=lambda o: o.company): + with Transaction().set_context(company=company.id): + today = Date.today() + cls.write([o for o in c_opportunities if o.is_forecast], { + 'end_date': today, + 'state': 'won', + }) @classmethod @ModelView.button @Workflow.transition('lost') def lost(cls, opportunities): - Date = Pool().get('ir.date') - cls.write([o for o in opportunities if o.is_forecast], { - 'end_date': Date.today(), - 'state': 'lost', - }) + pool = Pool() + Date = pool.get('ir.date') + for company, c_opportunities in groupby( + opportunities, key=lambda o: o.company): + with Transaction().set_context(company=company.id): + today = Date.today() + cls.write([o for o in c_opportunities if o.is_forecast], { + 'end_date': today, + 'state': 'lost', + }) @classmethod @ModelView.button @Workflow.transition('cancelled') def cancel(cls, opportunities): - Date = Pool().get('ir.date') - cls.write([o for o in opportunities if o.is_forecast], { - 'end_date': Date.today(), - }) + pool = Pool() + Date = pool.get('ir.date') + for company, c_opportunities in groupby( + opportunities, key=lambda o: o.company): + with Transaction().set_context(company=company.id): + today = Date.today() + cls.write([o for o in c_opportunities if o.is_forecast], { + 'end_date': today, + 'state': 'cancelled', + }) @staticmethod def _sale_won_states():