跳至内容
菜单
此问题已终结
5 回复
5376 查看

I made this code to compute the total quantity of the product but the answer is displaying in the view. how can i fix this?? any help please.. Stock.picking.out class...

Here's my code:

 def _get_total_quantity(self, cr, uid, ids, field_name, args, context=None):
        
        res ={}
        product_qty = {}
        total_quantity= {}
        qty = 0.00
    
        move_pool = self.pool.get('stock.move')

        for stock_move_picking in self.browse(cr,uid,ids,context=context):
            total_qty = move_pool.search(cr,uid,[('picking_id','=', stock_move_picking.id)],context = context)
            for picking in move_pool.browse(cr,uid,total_qty, context=context):
           qty = qty + picking.product_qty
            res[stock_move_picking.id] = {'total_quantity':qty}
        return res
    
    _columns = {
               'total_quantity':fields.function(_get_total_quantity, type='float', method=True,store=True, multi=True, string='Summation of Quantity', ),            
                 }
    
   

形象
丢弃
最佳答案

I think its due to store= True.

because store=True means it will take value from database.

And In database it will store when you create/Update in existing record.

First try without  store = True

But If you want forcefully store value in database then you should try below.

def _get_stock_move_picking_id( cr, uid, ids, context=None):

        ### logic to return id list of parent object.

def _get_total_quantity(self, cr, uid, ids, field_name, args, context=None):

          #Same logic what ever you done 

         res[stock_move_picking.id] = qty

return res               

'total_quantity':fields.function(total_quantity, method=True,string='tOtal Amount',

                                  store={
                                               'YOUR_LINE_OBJECT': (_get_stock_move_picking_id, ['product_qty'], 20),
                                              }),

 

形象
丢弃
编写者

thanks Piyush but it didn't work:(

最佳答案

Hello ,

your "total_quantity" field also put in stock.picking and check it.

 

形象
丢弃
编写者

thanks Nirav Jani finally it works.

最佳答案

Hi Alcaline,

I find this works for me. v7/v8/v9

import logging

_logger = logging.getLogger('WHATEVER U WANT')

_logger = logging.getLogger(__name__) ## Or FileName of your py.file

_logger.info("Testing: {0}{1}{2}".format(item1, item2, item3))

Now, Im not sure about all your other code, see doc's and check your

Def function & feilds.function are correct.

And test test test... Let us know how you go, & Good luck. 

形象
丢弃
编写者

thanks Vee

最佳答案

You define a function field with type float. So, change the following line

res[stock_move_picking.id] = {'total_quantity':qty}

to this one.

res[stock_move_picking.id] = qty

形象
丢弃
编写者

hi Ben I tried that one but it gives me an Error like this AttributeError: 'float' object has no attribute 'iteritems'. how to solve this one??

Try to set multi=False, in function field definition. I assume no other field is depend on the function.

编写者

there's no error occurred but still it doe not display the value of my answer.. i don't know what the problem.. thanks Ben

Hi, I see you update your post. While debugging, what is the value of qty?

编写者

the value of qty is the summation of Quantity/RSQ. I used this equation to call the value of qty and view to field 'total_quantity' res[stock_move_picking.id] = {'total_quantity':qty} Did i used the wrong equation or what?

Just wondering. It's hard to read other's code in limited context and awful format (provided by this forum).

最佳答案

Hi,

Please try this one

res[ids[0]] = qty

return res

形象
丢弃
编写者

got the same error too AttributeError: 'float' object has no attribute 'iteritems'