diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 0064dc4bf0a..748b1278cc1 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -1162,6 +1162,7 @@ class stock_picking(osv.osv):
complete, too_many, too_few = [], [], []
move_product_qty = {}
prodlot_ids = {}
+ product_uoms = {}
product_avail = {}
for move in pick.move_lines:
if move.state in ('done', 'cancel'):
@@ -1174,6 +1175,7 @@ class stock_picking(osv.osv):
product_currency = partial_data.get('product_currency',False)
prodlot_id = partial_data.get('prodlot_id')
prodlot_ids[move.id] = prodlot_id
+ product_uoms[move.id] = product_uom
if move.product_qty == product_qty:
complete.append(move)
elif move.product_qty > product_qty:
@@ -1232,7 +1234,7 @@ class stock_picking(osv.osv):
'state': 'assigned',
'move_dest_id': False,
'price_unit': move.price_unit,
- 'product_uom':product_uom,
+ 'product_uom':product_uoms[move.id],
}
prodlot_id = prodlot_ids[move.id]
if prodlot_id:
@@ -1248,7 +1250,7 @@ class stock_picking(osv.osv):
if new_picking:
move_obj.write(cr, uid, [c.id for c in complete], {'picking_id': new_picking})
for move in complete:
- defaults = {'product_uom': product_uom}
+ defaults = {'product_uom': product_uoms[move.id]}
if prodlot_ids.get(move.id):
defaults.update({'prodlot_id': prodlot_ids[move.id]})
move_obj.write(cr, uid, move.id, defaults)
@@ -1257,7 +1259,7 @@ class stock_picking(osv.osv):
defaults = {
'product_qty' : product_qty,
'product_uos_qty': product_qty, #TODO: put correct uos_qty
- 'product_uom': product_uom
+ 'product_uom': product_uoms[move.id]
}
prodlot_id = prodlot_ids.get(move.id)
if prodlot_ids.get(move.id):
diff --git a/addons/stock/wizard/stock_partial_move.py b/addons/stock/wizard/stock_partial_move.py
index 2f0959f247a..72c151c8ddf 100644
--- a/addons/stock/wizard/stock_partial_move.py
+++ b/addons/stock/wizard/stock_partial_move.py
@@ -25,6 +25,17 @@ import time
class stock_partial_move_memory_out(osv.osv_memory):
+
+ def _tracking(self, cursor, user, ids, name, arg, context=None):
+ res = {}
+ for tracklot in self.browse(cursor, user, ids, context=context):
+ tracking = False
+ if (tracklot.move_id.picking_id.type == 'in' and tracklot.product_id.track_incoming == True) or \
+ (tracklot.move_id.picking_id.type == 'out' and tracklot.product_id.track_outgoing == True):
+ tracking = True
+ res[tracklot.id] = tracking
+ return res
+
_name = "stock.move.memory.out"
_rec_name = 'product_id'
_columns = {
@@ -36,7 +47,7 @@ class stock_partial_move_memory_out(osv.osv_memory):
'wizard_id' : fields.many2one('stock.partial.move', string="Wizard"),
'cost' : fields.float("Cost", help="Unit Cost for this product line"),
'currency' : fields.many2one('res.currency', string="Currency", help="Currency in which Unit cost is expressed"),
- 'tracking': fields.related('product_id', 'track_production', type='boolean', relation='product.product', string='Tracking'),
+ 'tracking': fields.function(_tracking, method=True, string='Tracking', type='boolean'),
}
class stock_partial_move_memory_in(osv.osv_memory):
diff --git a/addons/stock/wizard/stock_partial_move_view.xml b/addons/stock/wizard/stock_partial_move_view.xml
index 0647c2ba76c..02dd63fe5dd 100644
--- a/addons/stock/wizard/stock_partial_move_view.xml
+++ b/addons/stock/wizard/stock_partial_move_view.xml
@@ -30,7 +30,7 @@
-
+
@@ -64,7 +64,7 @@
-
+
diff --git a/addons/stock/wizard/stock_partial_picking.py b/addons/stock/wizard/stock_partial_picking.py
index 4fd6030269d..e03af945604 100644
--- a/addons/stock/wizard/stock_partial_picking.py
+++ b/addons/stock/wizard/stock_partial_picking.py
@@ -142,6 +142,7 @@ class stock_partial_picking(osv.osv_memory):
@return: A dictionary which of fields with values.
"""
pick_obj = self.pool.get('stock.picking')
+ uom_obj = self.pool.get('product.uom')
picking_ids = context.get('active_ids', False)
partial = self.browse(cr, uid, ids[0], context=context)
@@ -152,10 +153,14 @@ class stock_partial_picking(osv.osv_memory):
for pick in pick_obj.browse(cr, uid, picking_ids, context=context):
picking_type = self.get_picking_type(cr, uid, pick, context=context)
moves_list = picking_type == 'in' and partial.product_moves_in or partial.product_moves_out
-
+ picking_qty = 0.0
+ partial_qty = 0.0
+ for get_qty in pick.move_lines:
+ picking_qty += get_qty.product_qty
for move in moves_list:
+ partial_qty += uom_obj._compute_qty(cr, uid, move.product_uom.id, move.quantity, move.product_id.uom_id.id)
if move.product_uom.category_id.id <> move.product_id.uom_id.category_id.id:
- raise osv.except_osv(_('Error !'), _('Product UoM category %s must be same with Product Default UoM Category %s!.') % (move.product_uom.category_id.name,move.product_id.uom_id.category_id.name,))
+ raise osv.except_osv(_('Error !'), _('You are selected product uom category %s not same with picking product uom Category %s!.') % (move.product_uom.category_id.name,move.product_id.uom_id.category_id.name,))
partial_datas['move%s' % (move.move_id.id)] = {
'product_id': move.id,
'product_qty': move.quantity,
@@ -167,6 +172,8 @@ class stock_partial_picking(osv.osv_memory):
'product_price' : move.cost,
'product_currency': move.currency.id,
})
+ if picking_qty < partial_qty:
+ raise osv.except_osv(_('Error !'), _('You cannot select Quantity %s more then Picking Quantity %s.') % (partial_qty, picking_qty,))
pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
return {'type': 'ir.actions.act_window_close'}