diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 68450edd6d0..5c02ccae976 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -124,10 +124,10 @@ class stock_location(osv.osv): c['location'] = id product = self.pool.get('product.product').read(cr, uid, r['product_id'], [field_to_read], context=c) # Compute the amount_unit in right currency - + context['currency_id']=self.pool.get('res.users').browse(cr,uid,uid).company_id.currency_id.id amount_unit=self.pool.get('product.product').browse(cr,uid,r['product_id']).price_get(pricetype.field, context)[r['product_id']] - + final_value += (product[field_to_read] * amount_unit) return final_value @@ -229,7 +229,7 @@ class stock_location(osv.osv): price_type_id=self.pool.get('res.users').browse(cr,uid,uid).company_id.property_valuation_price_type.id pricetype=self.pool.get('product.price.type').browse(cr,uid,price_type_id) context['currency_id']=self.pool.get('res.users').browse(cr,uid,uid).company_id.currency_id.id - + if not product_ids: product_ids = product_obj.search(cr, uid, []) @@ -260,10 +260,10 @@ class stock_location(osv.osv): continue product = products_by_id[product_id] quantity_total += qty[product_id] - + # Compute based on pricetype # Choose the right filed standard_price to read - amount_unit=product.price_get(pricetype.field, context)[product.id] + amount_unit=product.price_get(pricetype.field, context)[product.id] price = qty[product_id] * amount_unit # price = qty[product_id] * product.standard_price @@ -649,45 +649,48 @@ class stock_picking(osv.osv): context=context) return True - def get_currency_id(self, cursor, user, picking): + def get_currency_id(self, cr, uid, picking): return False - def _get_payment_term(self, cursor, user, picking): + def _get_payment_term(self, cr, uid, picking): '''Return {'contact': address, 'invoice': address} for invoice''' partner_obj = self.pool.get('res.partner') partner = picking.address_id.partner_id return partner.property_payment_term and partner.property_payment_term.id or False - def _get_address_invoice(self, cursor, user, picking): + def _get_address_invoice(self, cr, uid, picking): '''Return {'contact': address, 'invoice': address} for invoice''' partner_obj = self.pool.get('res.partner') partner = picking.address_id.partner_id - return partner_obj.address_get(cursor, user, [partner.id], + return partner_obj.address_get(cr, uid, [partner.id], ['contact', 'invoice']) - def _get_comment_invoice(self, cursor, user, picking): + def _get_comment_invoice(self, cr, uid, picking): '''Return comment string for invoice''' return picking.note or '' - def _get_price_unit_invoice(self, cursor, user, move_line, type): + def _get_price_unit_invoice(self, cr, uid, move_line, type, context=None): '''Return the price unit for the move line''' + if context is None: + context = {} + if type in ('in_invoice', 'in_refund'): # Take the user company and pricetype - price_type_id=self.pool.get('res.users').browse(cr,users,users).company_id.property_valuation_price_type.id - pricetype=self.pool.get('product.price.type').browse(cr,uid,price_type_id) - context['currency_id']=move_line.company_id.currency_id.id - - amount_unit=move_line.product_id.price_get(pricetype.field, context)[move_line.product_id.id] + price_type_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.property_valuation_price_type.id + pricetype = self.pool.get('product.price.type').browse(cr, uid, price_type_id) + context['currency_id'] = move_line.company_id.currency_id.id + + amount_unit = move_line.product_id.price_get(pricetype.field, context)[move_line.product_id.id] return amount_unit else: return move_line.product_id.list_price - def _get_discount_invoice(self, cursor, user, move_line): + def _get_discount_invoice(self, cr, uid, move_line): '''Return the discount for the move line''' return 0.0 - def _get_taxes_invoice(self, cursor, user, move_line, type): + def _get_taxes_invoice(self, cr, uid, move_line, type): '''Return taxes ids for the move line''' if type in ('in_invoice', 'in_refund'): taxes = move_line.product_id.supplier_taxes_id @@ -696,34 +699,37 @@ class stock_picking(osv.osv): if move_line.picking_id and move_line.picking_id.address_id and move_line.picking_id.address_id.partner_id: return self.pool.get('account.fiscal.position').map_tax( - cursor, - user, + cr, + uid, move_line.picking_id.address_id.partner_id.property_account_position, taxes ) else: return map(lambda x: x.id, taxes) - def _get_account_analytic_invoice(self, cursor, user, picking, move_line): + def _get_account_analytic_invoice(self, cr, uid, picking, move_line): return False - def _invoice_line_hook(self, cursor, user, move_line, invoice_line_id): + def _invoice_line_hook(self, cr, uid, move_line, invoice_line_id): '''Call after the creation of the invoice line''' return - def _invoice_hook(self, cursor, user, picking, invoice_id): + def _invoice_hook(self, cr, uid, picking, invoice_id): '''Call after the creation of the invoice''' return - def action_invoice_create(self, cursor, user, ids, journal_id=False, + def action_invoice_create(self, cr, uid, ids, journal_id=False, group=False, type='out_invoice', context=None): '''Return ids of created invoices for the pickings''' + if context is None: + context = {} + invoice_obj = self.pool.get('account.invoice') invoice_line_obj = self.pool.get('account.invoice.line') invoices_group = {} res = {} - for picking in self.browse(cursor, user, ids, context=context): + for picking in self.browse(cr, uid, ids, context=context): if picking.invoice_state != '2binvoiced': continue payment_term_id = False @@ -734,24 +740,24 @@ class stock_picking(osv.osv): if type in ('out_invoice', 'out_refund'): account_id = partner.property_account_receivable.id - payment_term_id = self._get_payment_term(cursor, user, picking) + payment_term_id = self._get_payment_term(cr, uid, picking) else: account_id = partner.property_account_payable.id address_contact_id, address_invoice_id = \ - self._get_address_invoice(cursor, user, picking).values() + self._get_address_invoice(cr, uid, picking).values() - comment = self._get_comment_invoice(cursor, user, picking) + comment = self._get_comment_invoice(cr, uid, picking) if group and partner.id in invoices_group: invoice_id = invoices_group[partner.id] - invoice = invoice_obj.browse(cursor, user, invoice_id) + invoice = invoice_obj.browse(cr, uid, invoice_id) invoice_vals = { 'name': (invoice.name or '') + ', ' + (picking.name or ''), 'origin': (invoice.origin or '') + ', ' + (picking.name or '') + (picking.origin and (':' + picking.origin) or ''), 'comment': (comment and (invoice.comment and invoice.comment+"\n"+comment or comment)) or (invoice.comment and invoice.comment or ''), 'date_invoice':context.get('date_inv',False) } - invoice_obj.write(cursor, user, [invoice_id], invoice_vals, context=context) + invoice_obj.write(cr, uid, [invoice_id], invoice_vals, context=context) else: invoice_vals = { 'name': picking.name, @@ -767,12 +773,12 @@ class stock_picking(osv.osv): 'date_invoice': context.get('date_inv',False), 'company_id': picking.company_id.id, } - cur_id = self.get_currency_id(cursor, user, picking) + cur_id = self.get_currency_id(cr, uid, picking) if cur_id: invoice_vals['currency_id'] = cur_id if journal_id: invoice_vals['journal_id'] = journal_id - invoice_id = invoice_obj.create(cursor, user, invoice_vals, + invoice_id = invoice_obj.create(cr, uid, invoice_vals, context=context) invoices_group[partner.id] = invoice_id res[picking.id] = invoice_id @@ -798,26 +804,25 @@ class stock_picking(osv.osv): account_id = move_line.product_id.categ_id.\ property_account_expense_categ.id - price_unit = self._get_price_unit_invoice(cursor, user, + price_unit = self._get_price_unit_invoice(cr, uid, move_line, type) - discount = self._get_discount_invoice(cursor, user, move_line) - tax_ids = self._get_taxes_invoice(cursor, user, move_line, type) - account_analytic_id = self._get_account_analytic_invoice(cursor, - user, picking, move_line) + discount = self._get_discount_invoice(cr, uid, move_line) + tax_ids = self._get_taxes_invoice(cr, uid, move_line, type) + account_analytic_id = self._get_account_analytic_invoice(cr, uid, picking, move_line) #set UoS if it's a sale and the picking doesn't have one uos_id = move_line.product_uos and move_line.product_uos.id or False if not uos_id and type in ('out_invoice', 'out_refund'): uos_id = move_line.product_uom.id - account_id = self.pool.get('account.fiscal.position').map_account(cursor, user, partner.property_account_position, account_id) + account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, partner.property_account_position, account_id) notes = False if move_line.sale_line_id: notes = move_line.sale_line_id.notes elif move_line.purchase_line_id: notes = move_line.purchase_line_id.notes - invoice_line_id = invoice_line_obj.create(cursor, user, { + invoice_line_id = invoice_line_obj.create(cr, uid, { 'name': name, 'origin': origin, 'invoice_id': invoice_id, @@ -831,15 +836,15 @@ class stock_picking(osv.osv): 'account_analytic_id': account_analytic_id, 'note': notes, }, context=context) - self._invoice_line_hook(cursor, user, move_line, invoice_line_id) + self._invoice_line_hook(cr, uid, move_line, invoice_line_id) - invoice_obj.button_compute(cursor, user, [invoice_id], context=context, + invoice_obj.button_compute(cr, uid, [invoice_id], context=context, set_total=(type in ('in_invoice', 'in_refund'))) - self.write(cursor, user, [picking.id], { + self.write(cr, uid, [picking.id], { 'invoice_state': 'invoiced', }, context=context) - self._invoice_hook(cursor, user, picking, invoice_id) - self.write(cursor, user, res.keys(), { + self._invoice_hook(cr, uid, picking, invoice_id) + self.write(cr, uid, res.keys(), { 'invoice_state': 'invoiced', }, context=context) return res @@ -867,7 +872,7 @@ class stock_picking(osv.osv): def do_partial(self, cr, uid, ids, partial_datas, context={}): """ - @ partial_datas : dict. contain details of partial picking + @ partial_datas : dict. contain details of partial picking like partner_id, address_id, delivery_date, delivery moves with product_id, product_qty, uom """ res = {} @@ -892,11 +897,11 @@ class stock_picking(osv.osv): for move in pick.move_lines: if move.state in ('done', 'cancel'): continue - partial_data = partial_datas.get('move%s'%(move.id), False) + partial_data = partial_datas.get('move%s'%(move.id), False) assert partial_data, _('Do not Found Partial data of Stock Move Line :%s' %(move.id)) product_qty = partial_data.get('product_qty',0.0) move_product_qty[move.id] = product_qty - product_uom = partial_data.get('product_uom',False) + product_uom = partial_data.get('product_uom',False) product_price = partial_data.get('product_price',0.0) product_currency = partial_data.get('product_currency',False) if move.product_qty == product_qty: @@ -909,8 +914,8 @@ class stock_picking(osv.osv): # Average price computation if (pick.type == 'in') and (move.product_id.cost_method == 'average'): product = product_obj.browse(cr, uid, move.product_id.id) - user = users_obj.browse(cr, uid, uid) - context['currency_id'] = move.company_id.currency_id.id + user = users_obj.browse(cr, uid, uid) + context['currency_id'] = move.company_id.currency_id.id qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id) pricetype = False if user.company_id.property_valuation_price_type: @@ -919,7 +924,7 @@ class stock_picking(osv.osv): new_price = currency_obj.compute(cr, uid, product_currency, user.company_id.currency_id.id, product_price) new_price = uom_obj._compute_price(cr, uid, product_uom, new_price, - product.uom_id.id) + product.uom_id.id) if product.qty_available <= 0: new_std_price = new_price else: @@ -927,13 +932,13 @@ class stock_picking(osv.osv): amount_unit = product.price_get(pricetype.field, context)[product.id] new_std_price = ((amount_unit * product.qty_available)\ + (new_price * qty))/(product.qty_available + qty) - + # Write the field according to price type field product_obj.write(cr, uid, [product.id], {pricetype.field: new_std_price}) move_obj.write(cr, uid, [move.id], {'price_unit': new_price}) - + for move in too_few: product_qty = move_product_qty[move.id] if not new_picking: @@ -945,22 +950,22 @@ class stock_picking(osv.osv): 'state':'draft', }) if product_qty != 0: - + new_obj = move_obj.copy(cr, uid, move.id, { 'product_qty' : product_qty, 'product_uos_qty': product_qty, #TODO: put correct uos_qty - 'picking_id' : new_picking, + 'picking_id' : new_picking, 'state': 'assigned', - 'move_dest_id': False, + 'move_dest_id': False, 'price_unit': move.price_unit, }) - + move_obj.write(cr, uid, [move.id], { 'product_qty' : move.product_qty - product_qty, 'product_uos_qty':move.product_qty - product_qty, #TODO: put correct uos_qty - + }) if new_picking: @@ -982,7 +987,7 @@ class stock_picking(osv.osv): 'product_uos_qty': product_qty #TODO: put correct uos_qty }) - # At first we confirm the new picking (if necessary) + # At first we confirm the new picking (if necessary) if new_picking: wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr) # Then we finish the good picking @@ -994,18 +999,18 @@ class stock_picking(osv.osv): delivered_pack_id = new_picking else: self.action_move(cr, uid, [pick.id]) - wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr) + wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr) delivered_pack_id = pick.id - delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context) + delivered_pack = self.browse(cr, uid, delivered_pack_id, context=context) delivery_id = delivery_obj.create(cr, uid, { - 'name': delivered_pack.name, + 'name': delivered_pack.name, 'partner_id': partner_id, 'address_id': address_id, 'date': delivery_date, - 'picking_id' : pick.id, - 'move_delivered' : [(6,0, map(lambda x:x.id, delivered_pack.move_lines))] - }, context=context) + 'picking_id' : pick.id, + 'move_delivered' : [(6,0, map(lambda x:x.id, delivered_pack.move_lines))] + }, context=context) res[pick.id] = {'delivered_picking': delivered_pack.id or False} return res @@ -1106,21 +1111,21 @@ class stock_production_lot_revision(osv.osv): } stock_production_lot_revision() - + class stock_delivery(osv.osv): - + """ Tracability of partialdeliveries """ - + _name = "stock.delivery" _description = "Delivery" _columns = { - 'name': fields.char('Name', size=60, required=True), + 'name': fields.char('Name', size=60, required=True), 'date': fields.datetime('Date', required=True), 'partner_id': fields.many2one('res.partner', 'Partner', required=True), 'address_id': fields.many2one('res.partner.address', 'Address', required=True), 'move_delivered':fields.one2many('stock.move', 'delivered_id', 'Move Delivered'), 'picking_id': fields.many2one('stock.picking', 'Picking list'), - + } stock_delivery() # ---------------------------------------------------- @@ -1207,7 +1212,7 @@ class stock_move(osv.osv): 'origin': fields.related('picking_id','origin',type='char', size=64, relation="stock.picking", string="Origin"), 'move_stock_return_history': fields.many2many('stock.move', 'stock_move_return_history', 'move_id', 'return_move_id', 'Move Return History',readonly=True), 'delivered_id': fields.many2one('stock.delivery', 'Product delivered'), - 'scraped': fields.boolean('Scraped'), + 'scraped': fields.boolean('Scraped'), } _constraints = [ (_check_tracking, @@ -1449,7 +1454,7 @@ class stock_move(osv.osv): if done: count += len(done) self.write(cr, uid, done, {'state': 'assigned'}) - + if count: for pick_id in pickings: wf_service = netsvc.LocalService("workflow") @@ -1482,8 +1487,8 @@ class stock_move(osv.osv): for id in ids: wf_service.trg_trigger(uid, 'stock.move', id, cr) #self.action_cancel(cr,uid, ids2, context) - return True - + return True + def action_done(self, cr, uid, ids, context=None): track_flag = False picking_ids = [] @@ -1562,7 +1567,7 @@ class stock_move(osv.osv): amount_unit=move.product_id.price_get(pricetype.field, context)[move.product_id.id] amount=amount_unit * q or 1.0 # amount = q * move.product_id.standard_price - + partner_id = False if move.picking_id: partner_id = move.picking_id.address_id and (move.picking_id.address_id.partner_id and move.picking_id.address_id.partner_id.id or False) or False @@ -1608,7 +1613,7 @@ class stock_move(osv.osv): raise osv.except_osv(_('UserError'), _('You can only delete draft moves.')) return super(stock_move, self).unlink( - cr, uid, ids, context=context) + cr, uid, ids, context=context) def _create_lot(self, cr, uid, ids, product_id, prefix=False): prodlot_obj = self.pool.get('stock.production.lot') @@ -1617,18 +1622,18 @@ class stock_move(osv.osv): if not sequence: raise osv.except_osv(_('Error!'), _('No production sequence defined')) prodlot_id = prodlot_obj.create(cr, uid, {'name': sequence, 'prefix': prefix}, {'product_id': product_id}) - prodlot = prodlot_obj.browse(cr, uid, prodlot_id) + prodlot = prodlot_obj.browse(cr, uid, prodlot_id) ref = ','.join(map(lambda x:str(x),ids)) if prodlot.ref: - ref = '%s, %s' % (prodlot.ref, ref) + ref = '%s, %s' % (prodlot.ref, ref) prodlot_obj.write(cr, uid, [prodlot_id], {'ref': ref}) return prodlot_id def action_scrap(self, cr, uid, ids, quantity, location_id, context=None): ''' - Move the scrap/damaged product into scrap location - + Move the scrap/damaged product into scrap location + @ param cr: the database cursor @ param uid: the user id @ param ids: ids of stock move object to be scraped @@ -1637,30 +1642,30 @@ class stock_move(osv.osv): @ param context: context arguments @ return: Scraped lines - ''' + ''' if quantity <= 0: raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !')) - res = [] - for move in self.browse(cr, uid, ids, context=context): + res = [] + for move in self.browse(cr, uid, ids, context=context): move_qty = move.product_qty uos_qty = quantity / move_qty * move.product_uos_qty default_val = { - 'product_qty': quantity, - 'product_uos_qty': uos_qty, - 'state': move.state, - 'scraped' : True, + 'product_qty': quantity, + 'product_uos_qty': uos_qty, + 'state': move.state, + 'scraped' : True, 'location_dest_id': location_id } new_move = self.copy(cr, uid, move.id, default_val) #self.write(cr, uid, [new_move], {'move_history_ids':[(4,move.id)]}) #TODO : to track scrap moves - res += [new_move] + res += [new_move] self.action_done(cr, uid, res) return res def action_split(self, cr, uid, ids, quantity, split_by_qty=1, prefix=False, with_lot=True, context=None): ''' Split Stock Move lines into production lot which specified split by quantity. - + @ param cr: the database cursor @ param uid: the user id @ param ids: ids of stock move object to be splited @@ -1670,14 +1675,14 @@ class stock_move(osv.osv): @ param context: context arguments @ return: splited move lines - ''' + ''' if quantity <= 0: raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !')) res = [] - for move in self.browse(cr, uid, ids): + for move in self.browse(cr, uid, ids): if split_by_qty <= 0 or quantity == 0: return res @@ -1689,8 +1694,8 @@ class stock_move(osv.osv): update_val = { 'product_qty': split_by_qty, 'product_uos_qty': uos_qty, - } - for idx in range(int(quantity//split_by_qty)): + } + for idx in range(int(quantity//split_by_qty)): if not idx and move.product_qty<=quantity: current_move = move.id else: @@ -1700,66 +1705,66 @@ class stock_move(osv.osv): update_val['prodlot_id'] = self._create_lot(cr, uid, [current_move], move.product_id.id) self.write(cr, uid, [current_move], update_val) - - - if quantity_rest > 0: - idx = int(quantity//split_by_qty) + + + if quantity_rest > 0: + idx = int(quantity//split_by_qty) update_val['product_qty'] = quantity_rest - update_val['product_uos_qty'] = uos_qty_rest - if not idx and move.product_qty<=quantity: - current_move = move.id + update_val['product_uos_qty'] = uos_qty_rest + if not idx and move.product_qty<=quantity: + current_move = move.id else: - current_move = self.copy(cr, uid, move.id, {'state': move.state}) - + current_move = self.copy(cr, uid, move.id, {'state': move.state}) + res.append(current_move) - - - if with_lot: + + + if with_lot: update_val['prodlot_id'] = self._create_lot(cr, uid, [current_move], move.product_id.id) self.write(cr, uid, [current_move], update_val) - return res + return res - def action_consume(self, cr, uid, ids, quantity, location_id=False, context=None): + def action_consume(self, cr, uid, ids, quantity, location_id=False, context=None): ''' Consumed product with specific quatity from specific source location - + @ param cr: the database cursor @ param uid: the user id @ param ids: ids of stock move object to be consumed @ param quantity : specify consume quantity - @ param location_id : specify source location + @ param location_id : specify source location @ param context: context arguments @ return: Consumed lines - ''' + ''' if not context: context = {} - + if quantity <= 0: raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !')) - res = [] - for move in self.browse(cr, uid, ids, context=context): + res = [] + for move in self.browse(cr, uid, ids, context=context): move_qty = move.product_qty quantity_rest = move.product_qty - quantity_rest -= quantity - uos_qty_rest = quantity_rest / move_qty * move.product_uos_qty + quantity_rest -= quantity + uos_qty_rest = quantity_rest / move_qty * move.product_uos_qty if quantity_rest <= 0: - quantity_rest = 0 + quantity_rest = 0 uos_qty_rest = 0 quantity = move.product_qty - + uos_qty = quantity / move_qty * move.product_uos_qty - if quantity_rest > 0: + if quantity_rest > 0: default_val = { - 'product_qty': quantity, - 'product_uos_qty': uos_qty, - 'state': move.state, + 'product_qty': quantity, + 'product_uos_qty': uos_qty, + 'state': move.state, 'location_id': location_id - } + } if move.product_id.track_production and location_id: # IF product has checked track for production lot, move lines will be split by 1 res += self.action_split(cr, uid, [move.id], quantity, split_by_qty=1, context=context) @@ -1767,33 +1772,33 @@ class stock_move(osv.osv): current_move = self.copy(cr, uid, move.id, default_val) res += [current_move] - update_val = {} + update_val = {} update_val['product_qty'] = quantity_rest - update_val['product_uos_qty'] = uos_qty_rest - self.write(cr, uid, [move.id], update_val) + update_val['product_uos_qty'] = uos_qty_rest + self.write(cr, uid, [move.id], update_val) - else: - quantity_rest = quantity + else: + quantity_rest = quantity uos_qty_rest = uos_qty - + if move.product_id.track_production and location_id: res += self.split_lines(cr, uid, [move.id], quantity_rest, split_by_qty=1, context=context) - else: - res += [move.id] + else: + res += [move.id] update_val = { 'product_qty' : quantity_rest, 'product_uos_qty' : uos_qty_rest, 'location_id': location_id - } + } self.write(cr, uid, [move.id], update_val) - self.action_done(cr, uid, res) - return res - + self.action_done(cr, uid, res) + return res + def do_partial(self, cr, uid, ids, partial_datas, context={}): """ - @ partial_datas : dict. contain details of partial picking + @ partial_datas : dict. contain details of partial picking like partner_id, address_id, delivery_date, delivery moves with product_id, product_qty, uom """ res = {} @@ -1809,7 +1814,7 @@ class stock_move(osv.osv): partner_id = partial_datas.get('partner_id', False) address_id = partial_datas.get('address_id', False) delivery_date = partial_datas.get('delivery_date', False) - + new_moves = [] complete, too_many, too_few = [], [], [] @@ -1817,11 +1822,11 @@ class stock_move(osv.osv): for move in self.browse(cr, uid, ids, context=context): if move.state in ('done', 'cancel'): continue - partial_data = partial_datas.get('move%s'%(move.id), False) + partial_data = partial_datas.get('move%s'%(move.id), False) assert partial_data, _('Do not Found Partial data of Stock Move Line :%s' %(move.id)) product_qty = partial_data.get('product_qty',0.0) move_product_qty[move.id] = product_qty - product_uom = partial_data.get('product_uom',False) + product_uom = partial_data.get('product_uom',False) product_price = partial_data.get('product_price',0.0) product_currency = partial_data.get('product_currency',False) if move.product_qty == product_qty: @@ -1834,8 +1839,8 @@ class stock_move(osv.osv): # Average price computation if (move.picking_id.type == 'in') and (move.product_id.cost_method == 'average'): product = product_obj.browse(cr, uid, move.product_id.id) - user = users_obj.browse(cr, uid, uid) - context['currency_id'] = move.company_id.currency_id.id + user = users_obj.browse(cr, uid, uid) + context['currency_id'] = move.company_id.currency_id.id qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id) pricetype = False if user.company_id.property_valuation_price_type: @@ -1844,7 +1849,7 @@ class stock_move(osv.osv): new_price = currency_obj.compute(cr, uid, product_currency, user.company_id.currency_id.id, product_price) new_price = uom_obj._compute_price(cr, uid, product_uom, new_price, - product.uom_id.id) + product.uom_id.id) if product.qty_available <= 0: new_std_price = new_price else: @@ -1852,14 +1857,14 @@ class stock_move(osv.osv): amount_unit = product.price_get(pricetype.field, context)[product.id] new_std_price = ((amount_unit * product.qty_available)\ + (new_price * qty))/(product.qty_available + qty) - + # Write the field according to price type field product_obj.write(cr, uid, [product.id], {pricetype.field: new_std_price}) self.write(cr, uid, [move.id], {'price_unit': new_price}) - for move in too_few: - product_qty = move_product_qty[move.id] + for move in too_few: + product_qty = move_product_qty[move.id] if product_qty != 0: new_move = self.copy(cr, uid, move.id, { @@ -1877,35 +1882,35 @@ class stock_move(osv.osv): 'product_uos_qty':move.product_qty - product_qty, }) - + for move in too_many: self.write(cr, uid, move.id, { 'product_qty': product_qty, 'product_uos_qty': product_qty }) - complete.append(move) + complete.append(move) for move in complete: self.action_done(cr, uid, [move.id]) # TOCHECK : Done picking if all moves are done cr.execute(""" - SELECT move.id FROM stock_picking pick - RIGHT JOIN stock_move move ON move.picking_id = pick.id AND move.state = %s + SELECT move.id FROM stock_picking pick + RIGHT JOIN stock_move move ON move.picking_id = pick.id AND move.state = %s WHERE pick.id = %s""", ('done', move.picking_id.id)) - res = cr.fetchall() - if len(res) == len(move.picking_id.move_lines): - picking_obj.action_move(cr, uid, [move.picking_id.id]) - wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr) - - ref = {} + res = cr.fetchall() + if len(res) == len(move.picking_id.move_lines): + picking_obj.action_move(cr, uid, [move.picking_id.id]) + wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr) + + ref = {} done_move_ids = [] - for move in complete: - done_move_ids.append(move.id) - if move.picking_id.id not in ref: - delivery_id = delivery_obj.create(cr, uid, { + for move in complete: + done_move_ids.append(move.id) + if move.picking_id.id not in ref: + delivery_id = delivery_obj.create(cr, uid, { 'partner_id': partner_id, 'address_id': address_id, 'date': delivery_date, @@ -1938,8 +1943,8 @@ class stock_inventory(osv.osv): 'state': lambda *a: 'draft', 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c) } - - + + def _inventory_line_hook(self, cr, uid, inventory_line, move_vals): '''Creates a stock move from an inventory line''' return self.pool.get('stock.move').create(cr, uid, move_vals) @@ -1950,7 +1955,7 @@ class stock_inventory(osv.osv): move_line = [] for line in inv.inventory_line_id: pid = line.product_id.id - + # price = line.product_id.standard_price or 0.0 amount = self.pool.get('stock.location')._product_get(cr, uid, line.location_id.id, [pid], {'uom': line.product_uom.id})[pid] change = line.product_qty - amount @@ -2050,7 +2055,7 @@ class stock_warehouse(osv.osv): _defaults = { 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c), } -stock_warehouse() +stock_warehouse() # Move wizard :