Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • How to Compute stock value and stock quantity in product stock in OpenERP

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 320
    Comment on it

    When we create the product(real and virtual) and computes the stock value and quantity of product in stock and validate than the product(real and virtual) is also maintained in the stock and updated in warehouse and also returns the dictionary of values in stock.

    Use this function given below

    def productvalue(self, cr, uid, ids, field_names, arg, context=None):
            prod_id = context and context.get('product_id', False)
            if not prod_id:
                return dict([(i, {}.fromkeys(field_names, 0.0)) for i in ids])
            product_product_obj = self.pool.get('product.product')
    
            cr.execute('select distinct product_id, location_id from stock_move where location_id in %s', (tuple(ids), ))
            dict1 = cr.dictfetchall()
            cr.execute('select distinct product_id, location_dest_id as location_id from stock_move where location_dest_id in %s', (tuple(ids), ))
            dict2 = cr.dictfetchall()
            res_products_by_location = sorted(dict1+dict2, key=itemgetter('location_id'))
            products_by_location = dict((k, [v['product_id'] for v in itr]) for k, itr in groupby(res_products_by_location, itemgetter('location_id')))
    
            result = dict([(i, {}.fromkeys(field_names, 0.0)) for i in ids])
            result.update(dict([(i, {}.fromkeys(field_names, 0.0)) for i in list(set([aaa['location_id'] for aaa in res_products_by_location]))]))
    
            currency_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
            currency_obj = self.pool.get('res.currency')
            currency = currency_obj.browse(cr, uid, currency_id, context=context)
            for loc_id, product_ids in products_by_location.items():
                if prod_id:
                    product_ids = [prod_id]
                c = (context or {}).copy()
                c['location'] = loc_id
                for prod in product_product_obj.browse(cr, uid, product_ids, context=c):
                    for f in field_names:
                        if f == 'stock_real':
                            if loc_id not in result:
                                result[loc_id] = {}
                            result[loc_id][f] += prod.qty_available
                        elif f == 'stock_virtual':
                            result[loc_id][f] += prod.virtual_available
                        elif f == 'stock_real_value':
                            amount = prod.qty_available * prod.standard_price
                            amount = currency_obj.round(cr, uid, currency, amount)
                            result[loc_id][f] += amount
                        elif f == 'stock_virtual_value':
                            amount = prod.virtual_available * prod.standard_price
                            amount = currency_obj.round(cr, uid, currency, amount)
                            result[loc_id][f] += amount
            return result

     

 0 Comment(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: