--- invoice.py.old 2011-04-07 16:48:22.572633673 +0200 +++ invoice.py 2011-04-07 21:48:39.187905000 +0200 @@ -1386,11 +1386,23 @@ else: taxes = res.supplier_taxes_id and res.supplier_taxes_id or (a and self.pool.get('account.account').browse(cr, uid, a, context=context).tax_ids or False) tax_id = fpos_obj.map_tax(cr, uid, fpos, taxes) + + + warning={} + currency_obj=self.pool.get('res.currency') + obj_price_type=self.pool.get('product.price.type') + price=0 if type in ('in_invoice', 'in_refund'): - result.update( {'price_unit': price_unit or res.standard_price,'invoice_line_tax_id': tax_id} ) + purchase_pricelist_id=part.property_product_pricelist_purchase.id + price,warning=self._invoice_price_get(cr,uid,purchase_pricelist_id,product,qty,partner_id,uom,currency_obj,obj_price_type,res,price_unit,currency_id,price=price,field="list_price") + #result.update( {'price_unit': price_unit or res.standard_price,'invoice_line_tax_id': tax_id} ) else: - result.update({'price_unit': res.list_price, 'invoice_line_tax_id': tax_id}) + sale_pricelist_id=part.property_product_pricelist.id + price,warning=self._invoice_price_get(cr,uid,sale_pricelist_id,product,qty,partner_id,uom,currency_obj,obj_price_type,res,price_unit,currency_id,price=price,field="standard_price") + #result.update({'price_unit': res.list_price, 'invoice_line_tax_id': tax_id}) + + result.update( {'price_unit': price,'invoice_line_tax_id': tax_id} ) result['name'] = res.partner_ref domain = {} @@ -1402,25 +1414,57 @@ domain = {'uos_id':[('category_id','=',res2 )]} result['categ_id'] = res.categ_id.id - res_final = {'value':result, 'domain':domain} + res_final = {'value':result, 'domain':domain, 'warning': warning} - if not company_id or not currency_id: - return res_final + #if not company_id or not currency_id: + # return res_final - company = self.pool.get('res.company').browse(cr, uid, company_id, context=context) - currency = self.pool.get('res.currency').browse(cr, uid, currency_id, context=context) + #company = self.pool.get('res.company').browse(cr, uid, company_id, context=context) + #currency = self.pool.get('res.currency').browse(cr, uid, currency_id, context=context) - if company.currency_id.id != currency.id: - new_price = res_final['value']['price_unit'] * currency.rate - res_final['value']['price_unit'] = new_price - - if uom: - uom = self.pool.get('product.uom').browse(cr, uid, uom, context=context) - if res.uom_id.category_id.id == uom.category_id.id: - new_price = res_final['value']['price_unit'] * uom.factor_inv - res_final['value']['price_unit'] = new_price + #if company.currency_id.id != currency.id: + # new_price = res_final['value']['price_unit'] * currency.rate + # res_final['value']['price_unit'] = new_price + + #if uom: + # uom = self.pool.get('product.uom').browse(cr, uid, uom, context=context) + # if res.uom_id.category_id.id == uom.category_id.id: + # new_price = res_final['value']['price_unit'] * uom.factor_inv + # res_final['value']['price_unit'] = new_price return res_final + def _invoice_price_get(self,cr,uid,pricelist_id,product,qty,partner_id,uom,currency_obj,obj_price_type,res,price_unit,currency_id,price=0,field="standard_price",warning={}): + if pricelist_id: + price = self.pool.get('product.pricelist').price_get(cr, uid, [pricelist_id], + product, qty or 1.0, partner_id, {'uom': uom,'date': time.strftime('%Y-%m-%d'),})[pricelist_id] + if price is False: + warning = { + 'title': 'No valid pricelist line found !', + 'message': + "Couldn't find a pricelist line matching this product and quantity.\n" + "You have to change either the product, the quantity or the pricelist." + } + + else: + currency_pricelist=self.pool.get('product.pricelist').browse(cr,uid,pricelist_id) + if currency_pricelist.currency_id.id != currency_id: + price=currency_obj.compute(cr,uid,currency_pricelist.currency_id.id,currency_id,price,round=True,context={}) + + + else: + obj_price_id=obj_price_type.search(cr,uid,[('field','=',field)]) + obj_price_currency=obj_price_type.browse(cr,uid, obj_price_id[0]) + price=price_unit or eval("res."+field) + if obj_price_currency.currency_id.id != currency_id: + price = currency_obj.compute(cr,uid,obj_price_currency.currency_id.id,currency_id,price,round=True,context={}) + + if uom: + uom = self.pool.get('product.uom').browse(cr, uid, uom) + if res.uom_id.category_id.id == uom.category_id.id: + price = price * uom.factor_inv + + return price,warning + def uos_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, currency_id=False, context=None): warning = {} res = self.product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, currency_id, context=context)