Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
5 Trả lời
5613 Lượt xem

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', ),            
                 }
    
   

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

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),
                                              }),

 

Ảnh đại diện
Huỷ bỏ
Tác giả

thanks Piyush but it didn't work:(

Câu trả lời hay nhất

Hello ,

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

 

Ảnh đại diện
Huỷ bỏ
Tác giả

thanks Nirav Jani finally it works.

Câu trả lời hay nhất

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. 

Ảnh đại diện
Huỷ bỏ
Tác giả

thanks Vee

Câu trả lời hay nhất

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

Ảnh đại diện
Huỷ bỏ
Tác giả

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.

Tác giả

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?

Tác giả

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).

Câu trả lời hay nhất

Hi,

Please try this one

res[ids[0]] = qty

return res

Ảnh đại diện
Huỷ bỏ
Tác giả

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