Ujjvala Collins (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-bug-805407-uco into 
lp:openobject-addons.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  Bug #805407 in OpenERP Addons: "Point of sale"
  https://bugs.launchpad.net/openobject-addons/+bug/805407

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-805407-uco/+merge/69067

[FIX] point_of_sale:
-------------------------------
* Corrected set to draft functionality as said in the bug. (lp:805407)
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-805407-uco/+merge/69067
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-bug-805407-uco.
=== modified file 'point_of_sale/point_of_sale.py'
--- point_of_sale/point_of_sale.py	2011-07-08 09:22:32 +0000
+++ point_of_sale/point_of_sale.py	2011-07-25 11:01:34 +0000
@@ -411,23 +411,30 @@
                             old_line.write({'product_qty': old_line.product_qty - qty_to_del}, context=context)
                     # add qty to new picking:
                     line.write({'product_qty': qty_to_del}, context=context)
+                elif qty_to_del < 0: # product qty has been modified (customer took greater than the ordered quantity):
+                    # add qty to new picking:
+                    line.write({'product_qty': -qty_to_del}, context=context)
                 else: # product hasn't changed (customer took it without any change):
                     # delete this product from new picking:
                     line.unlink(context=context)
             else:
                 # delete it in the new picking:
                 line.unlink(context=context)
+        return new_picking_id
 
     def create_picking(self, cr, uid, ids, context=None):
         """Create a picking for each order and validate it."""
         picking_obj = self.pool.get('stock.picking')
         property_obj = self.pool.get("ir.property")
         move_obj = self.pool.get('stock.move')
+        wf_service = netsvc.LocalService("workflow")
         pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.out')
         orders = self.browse(cr, uid, ids, context=context)
         partner_obj = self.pool.get('res.partner')
         for order in orders:
             addr = order.partner_id and partner_obj.address_get(cr, uid, [order.partner_id.id], ['delivery']) or {}
+            diff_dict = {}
+            flag = False
             if not order.picking_id:
                 new = True
                 picking_id = picking_obj.create(cr, uid, {
@@ -448,16 +455,30 @@
                 picking_obj.write(cr, uid, [picking_id], {'auto_picking': True}, context=context)
                 picking = picking_obj.browse(cr, uid, [picking_id], context=context)[0]
                 new = False
+                flag = True
 
                 # split the picking (if product quantity has changed):
                 diff_dict = self._get_qty_differences(orders, picking)
                 if diff_dict:
-                    self._split_picking(cr, uid, ids, context, picking, diff_dict)
-
+                    picking_id = self._split_picking(cr, uid, ids, context, picking, diff_dict)
+                # create new picking if a product is added 
+                line_ids = [m.product_id.id for m in order.lines]
+                second_line_ids = [m.product_id.id for m in picking.move_lines]
+                if len(line_ids) > len(second_line_ids):
+                    diff_dict.clear()
+                    new = True
+                    diff = [x for x in line_ids if x not in second_line_ids]
+                    for line in order.lines:
+                        for i in range(len(diff)):
+                            diff_dict[diff[i]] = (False, line.qty)
+                    if picking_id == order.picking_id.id:
+                        picking_id = self._split_picking(cr, uid, ids, context, picking, diff_dict)
             if new:
                 for line in order.lines:
                     if line.product_id and line.product_id.type == 'service':
                         continue
+                    if not diff_dict.get(line.product_id.id) and flag:
+                        continue
                     prop_ids = property_obj.search(cr, uid, [('name', '=', 'property_stock_customer')], context=context)
                     val = property_obj.browse(cr, uid, prop_ids[0], context=context).value_reference
                     cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w WHERE w.lot_stock_id = s.id AND w.id = %s", (order.shop_id.warehouse_id.id, ))
@@ -481,10 +502,10 @@
                             'location_dest_id': stock_dest_id,
                             'prodlot_id': line.prodlot_id and line.prodlot_id.id or False
                         }, context=context)
-
-            wf_service = netsvc.LocalService("workflow")
-            wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
-            picking_obj.force_assign(cr, uid, [picking_id], context)
+            
+            if not flag:
+                wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
+                picking_obj.force_assign(cr, uid, [picking_id], context)
         return True
 
     def set_to_draft(self, cr, uid, ids, *args):

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to