From 4031d4a5663a957453831711eaaaa4db2a30c81f Mon Sep 17 00:00:00 2001
From: ced <>
Date: Mon, 18 Dec 2006 14:10:01 +0000
Subject: [PATCH] STOCK: Fix workflow for stock
bzr revid: ced-f9a469bae79e6291c5d144d9603de21cce08c47f
---
addons/stock/stock.py | 12 ++++++++++++
addons/stock/stock_view.xml | 11 ++++++++---
addons/stock/stock_workflow.xml | 5 +++++
addons/stock/wizard/wizard_partial_picking.py | 19 ++++++++++++-------
4 files changed, 37 insertions(+), 10 deletions(-)
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index ec68207ce73..5467e6c1b61 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -388,6 +388,14 @@ class stock_picking(osv.osv):
wf_service.trg_write(uid, 'stock.picking', pick.id, cr)
return True
+ def cancel_assign(self, cr, uid, ids, *args):
+ wf_service = netsvc.LocalService("workflow")
+ for pick in self.browse(cr, uid, ids):
+ move_ids = [x.id for x in pick.move_lines]
+ self.pool.get('stock.move').cancel_assign(cr, uid, move_ids)
+ wf_service.trg_write(uid, 'stock.picking', pick.id, cr)
+ return True
+
def action_assign_wkf(self, cr, uid, ids):
self.write(cr, uid, ids, {'state':'assigned'})
return True
@@ -688,6 +696,10 @@ class stock_move(osv.osv):
self.write(cr, uid, ids, {'state' : 'assigned'})
return True
+ def cancel_assign(self, cr, uid, ids, context={}):
+ self.write(cr, uid, ids, {'state': 'confirmed'})
+ return True
+
#
# Duplicate stock.move
#
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 73d306735b0..6594ec9862d 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -461,17 +461,22 @@
+
+
+
+
-
+
-
-
+
+
+
diff --git a/addons/stock/stock_workflow.xml b/addons/stock/stock_workflow.xml
index 42cd5c3468c..4e7eda0f0c9 100644
--- a/addons/stock/stock_workflow.xml
+++ b/addons/stock/stock_workflow.xml
@@ -49,6 +49,11 @@
button_confirm
+
+
+
+ not test_assigned()
+
diff --git a/addons/stock/wizard/wizard_partial_picking.py b/addons/stock/wizard/wizard_partial_picking.py
index bc6704f920c..f8046ebe736 100644
--- a/addons/stock/wizard/wizard_partial_picking.py
+++ b/addons/stock/wizard/wizard_partial_picking.py
@@ -106,14 +106,15 @@ def _do_split(self, cr, uid, data, context):
price = data['form']['price%s' % move.id]
currency = data['form']['currency%s' % move.id]
- new_price = currency_obj.compute(cr, uid, currency, user.company_id.currency_id.id, price)
- new_std_price = ((product.standard_price * product.qty_available) + (new_price * qty))/(product.qty_available + qty)
- product_obj.write(cr, uid, [product.id], {'standard_price': new_std_price})
+ if qty > 0:
+ new_price = currency_obj.compute(cr, uid, currency, user.company_id.currency_id.id, price)
+ new_std_price = ((product.standard_price * product.qty_available) + (new_price * qty))/(product.qty_available + qty)
+ product_obj.write(cr, uid, [product.id], {'standard_price': new_std_price})
for move in too_few:
if not new_picking:
new_picking = pick_obj.copy(cr, uid, pick.id, {'name' : '%s (splitted)' % pick.name, 'move_lines' : [], 'state':'draft'})
- new_obj = move_obj.copy(cr, uid, move.id, {'product_qty' : data['form']['move%s' % move.id], 'product_uos_qty':data['form']['move%s' % move.id], 'picking_id' : new_picking, 'state': move.state, 'move_dest_id': False})
+ new_obj = move_obj.copy(cr, uid, move.id, {'product_qty' : data['form']['move%s' % move.id], 'product_uos_qty':data['form']['move%s' % move.id], 'picking_id' : new_picking, 'state': 'assigned', 'move_dest_id': False})
move_obj.write(cr, uid, [move.id], {'product_qty' : move.product_qty - data['form']['move%s' % move.id], 'product_uos_qty':move.product_qty - data['form']['move%s' % move.id]})
if new_picking:
@@ -126,9 +127,13 @@ def _do_split(self, cr, uid, data, context):
if new_picking:
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
# Then we finish the good picking
- picking_toclose = new_picking or pick.id
- pick_obj.action_move(cr, uid, [picking_toclose])
- wf_service.trg_validate(uid, 'stock.picking', picking_toclose, 'button_done', cr)
+ if new_picking:
+ pick_obj.action_move(cr, uid, [new_picking])
+ wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_done', cr)
+ wf_service.trg_write(uid, 'stock.picking', pick.id, cr)
+ else:
+ pick_obj.action_move(cr, uid, [pick.id])
+ wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr)
return {}
class partial_picking(wizard.interface):