Witamy!
Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.
Aktualizacja wartości pola
Panowie,
W chwili wybrania produktu, odczytuję ilości z tabeli i chciałbym tę odczytaną ilość wpisać do pola 'current_stock' a res.update({'current_stock': cstock[0][0]}) nie chce mi tego zrobić.
Oto metoda:
def onchange_product_id(self, cr, uid, ids, prod_id=False, loc_id=False, loc_dest_id=False, partner_id=False, context=None):
res = super(stock_move, self).onchange_product_id(cr, uid, ids, prod_id=prod_id, loc_id=loc_id, loc_dest_id=loc_dest_id, partner_id=partner_id)
if prod_id == False:
prod_id = 0
location_list = []
static_loc = 8
locations = []
cr.execute(""" select sum(qty) from stock_quant where product_id = %s and location_id != 7;""" %(prod_id))
cstock = cr.fetchall()
res.update({'current_stock': cstock[0][0]})
quant_obj = self.pool.get('stock.quant')
quant_ids = quant_obj.search(cr,uid, [('product_id','=',prod_id)])
location_list.append(static_loc)
for quant_data in quant_obj.browse(cr, uid, quant_ids, context=context):
location_list.append(quant_data.location_id.id)
quant_data.write({'locations':quant_data[0]})
res.update({'domain':{'location_id':[('id','in',location_list)]}})
return res
Lokalizacje wpisuje wzorowo a ilości nie ..
co zrobiłem źle ?
Faktycznie, umknęło mi. Dodałem pole 'current_stock': fields.function(_get_current_stock, type='integer', string='Currently in stock'), do przechowywania ilości w czasie wyświetlania produktu i ewentualnie do umieszczenia w szablonie email. Wiem, że mogę użyć równie dobrze pola istniejącego np available_qty ale ponieważ się uczę ..... to takie dziwne rzeczy robię ;) A tu metoda do tego pola:
def _get_current_stock(self, cr, uid, ids, field_name, arg, context=None): res = {} in_stock = 0 product_id = 0 for obj in self.browse(cr, uid, ids, context=context): # zbieram ilość z tabeli stock_quant dla wybranego produktu ze wszystkich lokalizacji oprócz 'produkcja' cr.execute(""" select sum(qty) from stock_quant where product_id = %s and location_id != 7;""" %(obj.product_id.id)) in_stock = cr.fetchall() if in_stock is None: in_stock = 0# sprawdzam czy nie jest typu Nonetype i jeśli jest zmieniam na '0', w przeciwnym wypadku wywala błąd res = int(in_stock[0][0])# i tu pojawia się właściwa wartość print '== res =========================================================================' print ' ', res # która wyświetlana jest tutaj :) return res # ale nie przekazuje do pola 'current_stock' które pozostaje 'puste'Co zrobiłem źle ?
Twoja odpowiedź
Spróbuj dać znacząca odpowiedź. Jeśli chcesz wypowiedzieć się na temat pytania lub odpowiedzi, po prostu użyj narzędzia komentowania. Proszę pamiętać, że zawsze można zrewidować swoją odpowiedź - nie ma potrzeby odpowiadać na to samo pytanie dwa razy. Także prosimy, nie zapomnij zagłosować - to naprawdę pomaga wybrać najlepsze pytania i odpowiedzi!
Bądź na bieżąco
O tym forum
Narzędzia do pytań
Statystyki
Spytał/a: 25.01.2016, 14:58 |
Oglądano: 2135 razy |
Ostatnia aktualizacja: 26.01.2016, 21:29 |
Nie podajesz skąd się wzięło pole current_stock, do którego wstawiasz wartość i którego nie ma w standardzie!. Najlepiej użyj loggera aby zbadać jaka faktycznie wartość jest pobrana z bazy i podstawiana.