Atik Agewan(OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-bug-794431-aag into 
lp:openobject-addons.

Requested reviews:
  Atik Agewan(OpenERP) (aag-openerp)
  qdp (OpenERP) (qdp)
  Rucha (Open ERP) (rpa-openerp)
Related bugs:
  Bug #794431 in OpenERP Addons: "sub_product results in wrong resulted 
quantity "
  https://bugs.launchpad.net/openobject-addons/+bug/794431

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-794431-aag/+merge/71830


Hello,
 
  mrp : Add new Function rest_qty_compute to compute rest_qty.
  mrp_subproducts : overwrite rest_qty_compute function.
  so when subproducts qty type is variable than it will compute true qty.

Thanks
  


-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-794431-aag/+merge/71830
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-bug-794431-aag.
=== modified file 'mrp/mrp.py'
--- mrp/mrp.py	2011-11-08 20:33:03 +0000
+++ mrp/mrp.py	2011-11-09 11:27:44 +0000
@@ -680,6 +680,25 @@
                 res = False
         return res
 
+    def _get_quantity_to_produce(self, cr, uid, production_id, move_id=None, context=None):       
+
+        """ Compute Production Qty of product.This method will be overwritten by mrp_subproduct.
+        @return: Dictionary of values.
+        """
+        if context is None:
+            context = {}
+            
+        production_obj = self.pool.get('mrp.production')
+        production_browse = production_obj.browse(cr, uid, production_id, context=context)
+        if context.get('product_qty',False):
+            product_qty = context['product_qty']
+            sub_qty = context['sub_qty']
+        else:
+            product_qty = production_browse.product_qty 
+            sub_qty = 1
+        res = {'product_qty': product_qty, 'sub_qty': sub_qty}
+        return res
+
     def action_produce(self, cr, uid, production_id, production_qty, production_mode, context=None):
         """ To produce final product based on production mode (consume/consume&produce).
         If Production mode is consume, all stock move lines of raw materials will be done/consumed.
@@ -693,7 +712,6 @@
         stock_mov_obj = self.pool.get('stock.move')
         production = self.browse(cr, uid, production_id, context=context)
 
-
         produced_qty = 0
         if production_mode == 'consume_produce':
             produced_qty = production_qty
@@ -748,11 +766,12 @@
 
             for produce_product in production.move_created_ids:
                 produced_qty = produced_products.get(produce_product.product_id.id, 0)
-                rest_qty = production.product_qty - produced_qty
+                get_qty = self._get_quantity_to_produce(cr, uid, production.id, produce_product.id, context=context)
+                rest_qty = get_qty['product_qty'] - produced_qty
                 if rest_qty <= production_qty:
                     production_qty = rest_qty
                 if rest_qty > 0 :
-                    stock_mov_obj.action_consume(cr, uid, [produce_product.id], production_qty, context=context)
+                    stock_mov_obj.action_consume(cr, uid, [produce_product.id], production_qty * get_qty['sub_qty'], context=context)
 
         for raw_product in production.move_lines2:
             new_parent_ids = []

=== modified file 'mrp/wizard/mrp_product_produce.py'
--- mrp/wizard/mrp_product_produce.py	2011-04-21 05:14:24 +0000
+++ mrp/wizard/mrp_product_produce.py	2011-11-09 11:27:44 +0000
@@ -49,8 +49,9 @@
                                 context['active_id'], context=context)
         done = 0.0
         for move in prod.move_created_ids2:
-            if not move.scrapped:
-                done += move.product_qty
+            if move.product_id == prod.product_id:
+                if not move.scrapped:
+                    done += move.product_qty
         return (prod.product_qty - done) or prod.product_qty
 
     _defaults = {

=== modified file 'mrp_subproduct/mrp_subproduct.py'
--- mrp_subproduct/mrp_subproduct.py	2011-01-14 00:11:01 +0000
+++ mrp_subproduct/mrp_subproduct.py	2011-11-09 11:27:44 +0000
@@ -29,11 +29,11 @@
         'product_id': fields.many2one('product.product', 'Product', required=True),
         'product_qty': fields.float('Product Qty', required=True),
         'product_uom': fields.many2one('product.uom', 'Product UOM', required=True),
-        'subproduct_type': fields.selection([('fixed','Fixed'),('variable','Variable')], 'Quantity Type', required=True),
+        'subproduct_type': fields.selection([('fixed','Fixed'),('variable','Variable')], 'Quantity Type', required=True, help="Production Type of Product"),
         'bom_id': fields.many2one('mrp.bom', 'BoM'),
     }
     _defaults={
-        'subproduct_type': lambda *args: 'fixed'
+        'subproduct_type': lambda *args: 'variable'
     }
 
     def onchange_product_id(self, cr, uid, ids, product_id, context=None):
@@ -97,5 +97,27 @@
                 self.pool.get('stock.move').create(cr, uid, data)
         return picking_id
 
+    def _get_quantity_to_produce(self, cr, uid, production_id, move_id=None, context=None):
+        
+        """ Compute Production Qty of product.This method is overwrite of mrp_production.
+        @return: Dictionary of values.
+        """
+        if context is None:
+            context = {}       
+        
+        sub_obj = self.pool.get('mrp.subproduct')
+        move_obj = self.pool.get('stock.move')
+        production_obj = self.pool.get('mrp.production')
+        production_browse = production_obj.browse(cr, uid, production_id, context)
+        move_browse = move_obj.browse(cr, uid, move_id, context)
+        sub_qty = 1
+        sub_id = sub_obj.search(cr, uid,[('product_id', '=', move_browse.product_id.id),('bom_id', '=', production_browse.bom_id.id)], context=context )
+        if sub_id:
+            sub_qty = sub_obj.browse(cr ,uid, sub_id[0], context=context).product_qty
+        context ['product_qty'] = production_browse.product_qty * sub_qty
+        context ['sub_qty'] = sub_qty
+        return super(mrp_production, self)._get_quantity_to_produce(cr, uid, production_id, move_id, context=context)
+
+
 mrp_production()
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

_______________________________________________
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