diff --git a/CHANGELOG b/CHANGELOG index 59df38ce8e..62c00e2429 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Warns when the warehouse of a purchase differs from its purchase requests + Version 4.6.0 - 2017-10-30 * Bug fixes (see mercurial logs for details) * Remove required on request origin diff --git a/purchase.py b/purchase.py index 2cb4e5118d..2177f895ad 100644 --- a/purchase.py +++ b/purchase.py @@ -32,6 +32,10 @@ class Purchase: 'delete_purchase_request': ('You can not delete the purchase' ' "%(purchase)s" because it is linked to at least one' ' purchase request.'), + 'warehouse_request_purchase_mismatch': ('The warehouse' + ' "%(purchase_warehouse)s" of purchase "%(purchase)s"' + ' is different of the warehouse "%(request_warehouse)s"' + ' of the linked purchase request.'), }) @classmethod @@ -50,6 +54,27 @@ class Purchase: 'purchase': purchase.rec_name, }) + @classmethod + @ModelView.button + @Workflow.transition('confirmed') + def confirm(cls, purchases): + for purchase in purchases: + purchase.check_request_warehouse() + super(Purchase, cls).confirm(purchases) + + def check_request_warehouse(self): + for line in self.lines: + for request in line.self_requests: + if request.warehouse != self.warehouse: + w_name = 'check_request_warehouse_%s_%s_%s' % ( + self.id, self.warehouse.id, request.warehouse.id) + self.raise_user_warning( + w_name, 'warehouse_request_self_mismatch', { + 'purchase': self.rec_name, + 'purchase_warehouse': self.warehouse.rec_name, + 'request_warehouse': request.warehouse.rec_name, + }) + @classmethod @ModelView.button @Workflow.transition('cancel')