From 8db7d9bcdbb269ea0334076cea1dcd6587b95688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 11 Oct 2016 18:10:02 +0200 Subject: [PATCH] Check period closed per company issue5934 review30611002 --- move.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/move.py b/move.py index 94e8e11099..2a95fab4ba 100644 --- a/move.py +++ b/move.py @@ -5,6 +5,7 @@ import operator from decimal import Decimal from functools import partial from collections import OrderedDict, defaultdict +from itertools import groupby from sql import Literal, Union, Column, Null from sql.aggregate import Sum @@ -514,19 +515,21 @@ class Move(Workflow, ModelSQL, ModelView): @classmethod def check_period_closed(cls, moves): Period = Pool().get('stock.period') - periods = Period.search([ - ('state', '=', 'closed'), - ], order=[('date', 'DESC')], limit=1) - if periods: - period, = periods - for move in moves: - date = (move.effective_date if move.effective_date - else move.planned_date) - if date and date < period.date: - cls.raise_user_error('period_closed', { - 'move': move.rec_name, - 'period': period.rec_name, - }) + for company, moves in groupby(moves, lambda m: m.company): + periods = Period.search([ + ('state', '=', 'closed'), + ('company', '=', company.id), + ], order=[('date', 'DESC')], limit=1) + if periods: + period, = periods + for move in moves: + date = (move.effective_date if move.effective_date + else move.planned_date) + if date and date < period.date: + cls.raise_user_error('period_closed', { + 'move': move.rec_name, + 'period': period.rec_name, + }) def get_rec_name(self, name): return ("%s%s %s"