Reviewers: ,
Please review this at http://codereview.tryton.org/902002/
Affected files:
M trytond/modules/purchase/purchase.py
M trytond/modules/sale/sale.py
M trytond/modules/stock_lot/stock.py
Index: trytond/modules/purchase/purchase.py
===================================================================
--- a/trytond/modules/purchase/purchase.py
+++ b/trytond/modules/purchase/purchase.py
@@ -1766,24 +1766,22 @@
('purchase.line',)]
@classmethod
- def write(cls, moves, vals):
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(cls, moves):
pool = Pool()
Purchase = pool.get('purchase.purchase')
PurchaseLine = pool.get('purchase.line')
- super(Move, cls).write(moves, vals)
- if 'state' in vals and vals['state'] in ('cancel',):
- purchases = set()
- purchase_lines = PurchaseLine.search([
- ('moves', 'in', [m.id for m in moves]),
- ])
- if purchase_lines:
- for purchase_line in purchase_lines:
- purchases.add(purchase_line.purchase)
- if purchases:
- with Transaction().set_user(0, set_context=True):
- purchases = Purchase.browse([p.id for p in purchases])
- Purchase.process(purchases)
+ super(Move, cls).cancel(moves)
+ purchase_lines = PurchaseLine.search([
+ ('moves', 'in', [m.id for m in moves]),
+ ])
+ if purchase_lines:
+ purchase_ids = list(set(l.purchase.id for l in purchase_lines))
+ with Transaction().set_user(0, set_context=True):
+ purchases = Purchase.browse(purchase_ids)
+ Purchase.process(purchases)
@classmethod
def delete(cls, moves):
Index: trytond/modules/sale/sale.py
===================================================================
--- a/trytond/modules/sale/sale.py
+++ b/trytond/modules/sale/sale.py
@@ -1627,20 +1627,23 @@
return ''
@classmethod
- def write(cls, moves, vals):
+ @ModelView.button
+ @Workflow.transition('cancel')
+ def cancel(cls, moves):
pool = Pool()
Sale = pool.get('sale.sale')
SaleLine = pool.get('sale.line')
- super(Move, cls).write(moves, vals)
- if 'state' in vals and vals['state'] in ('cancel',):
- with Transaction().set_user(0, set_context=True):
- sale_lines = SaleLine.search([
- ('moves', 'in', [m.id for m in moves]),
- ])
- if sale_lines:
- sales = list(set(l.sale for l in sale_lines))
- Sale.process(sales)
+ super(Move, cls).cancel(moves)
+
+ with Transaction().set_user(0, set_context=True):
+ sale_lines = SaleLine.search([
+ ('moves', 'in', [m.id for m in moves]),
+ ])
+ if sale_lines:
+ sale_ids = list(set(l.sale.id for l in sale_lines))
+ sales = Sale.browse(sale_ids)
+ Sale.process(sales)
@classmethod
def delete(cls, moves):
Index: trytond/modules/stock_lot/stock.py
===================================================================
--- a/trytond/modules/stock_lot/stock.py
+++ b/trytond/modules/stock_lot/stock.py
@@ -42,27 +42,20 @@
'lot_required': 'Lot is required for move of
product "%s".',
})
- @classmethod
- def check_lot(cls, moves):
+ def check_lot(self):
"Check if lot is required"
- for move in moves:
- if (move.state == 'done'
- and move.internal_quantity
- and not move.lot
- and move.product.lot_is_required(
- move.from_location, move.to_location)):
- cls.raise_user_error('lot_required',
(move.product.rec_name,))
+ if (self.state == 'done'
+ and self.internal_quantity
+ and not self.lot
+ and self.product.lot_is_required(
+ self.from_location, self.to_location)):
+ self.raise_user_error('lot_required', self.product.rec_name)
@classmethod
- def create(cls, vlist):
- moves = super(Move, cls).create(vlist)
- cls.check_lot(moves)
- return moves
-
- @classmethod
- def write(cls, moves, values):
- super(Move, cls).write(moves, values)
- cls.check_lot(moves)
+ def validate(cls, moves):
+ super(Move, cls).validate(moves)
+ for move in moves:
+ move.check_lot()
class ShipmentIn: