[FIX] account_anglo_saxon: Price calculation
[odoo/odoo.git] / addons / account_anglo_saxon / invoice.py
index e475be4..784dd93 100644 (file)
@@ -25,11 +25,20 @@ from osv import fields, osv
 
 class account_invoice_line(osv.osv):
     _inherit = "account.invoice.line"
-
+    
     def move_line_get(self, cr, uid, invoice_id, context=None):
-        res = super(account_invoice_line, self).move_line_get(cr, uid, invoice_id, context)
-        inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id)
-        if inv.type in ('out_invoice', 'out_refund'):
+        res = super(account_invoice_line,self).move_line_get(cr, uid, invoice_id, context=context)
+        inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id, context=context)
+        company_currency = inv.company_id.currency_id.id
+        def get_price(cr, uid, inv, company_currency,i_line):
+            cur_obj = self.pool.get('res.currency')
+            if inv.currency_id.id != company_currency:
+                price = cur_obj.compute(cr, uid, company_currency, inv.currency_id.id, i_line.product_id.product_tmpl_id.standard_price * i_line.quantity, context={'date': inv.date_invoice})
+            else:
+                price = i_line.product_id.product_tmpl_id.standard_price * i_line.quantity
+            return price
+
+        if inv.type in ('out_invoice','out_refund'):
             for i_line in inv.invoice_line:
                 if i_line.product_id:
                     if inv.type == 'out_invoice':
@@ -56,27 +65,27 @@ class account_invoice_line(osv.osv):
                             'name': i_line.name[:64],
                             'price_unit':i_line.product_id.product_tmpl_id.standard_price,
                             'quantity':i_line.quantity,
-                            'price':i_line.product_id.product_tmpl_id.standard_price * i_line.quantity,
+                            'price':get_price(cr, uid, inv, company_currency, i_line),
                             'account_id':dacc,
                             'product_id':i_line.product_id.id,
                             'uos_id':i_line.uos_id.id,
                             'account_analytic_id':i_line.account_analytic_id.id,
                             'taxes':i_line.invoice_line_tax_id,
                             })
-
+                        
                         res.append({
                             'type':'src',
                             'name': i_line.name[:64],
                             'price_unit':i_line.product_id.product_tmpl_id.standard_price,
                             'quantity':i_line.quantity,
-                            'price':-1 * i_line.product_id.product_tmpl_id.standard_price * i_line.quantity,
+                            'price': -1 * get_price(cr, uid, inv, company_currency, i_line),
                             'account_id':cacc,
                             'product_id':i_line.product_id.id,
                             'uos_id':i_line.uos_id.id,
                             'account_analytic_id':i_line.account_analytic_id.id,
                             'taxes':i_line.invoice_line_tax_id,
                             })
-        elif inv.type in ('in_invoice', 'in_refund'):
+        elif inv.type in ('in_invoice','in_refund'):
             for i_line in inv.invoice_line:
                 if i_line.product_id:
                     if i_line.product_id.product_tmpl_id.type != 'service':
@@ -122,18 +131,18 @@ class account_invoice_line(osv.osv):
                                         'product_id':line['product_id'],
                                         'uos_id':line['uos_id'],
                                         'account_analytic_id':line['account_analytic_id'],
-                                        'taxes':line.get('taxes', []),
+                                        'taxes':line.get('taxes',[]),
                                         })
                         res += diff_res
-        return res
-
-    def product_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, context=None):
+        return res   
+    
+    def product_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):
         if not product:
-            return super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, context)
+            return super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, currency_id, context)
         else:
-            res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, context)
+            res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, address_invoice_id, currency_id, context)
 
-        if type in ('in_invoice', 'in_refund'):
+        if type in ('in_invoice','in_refund'):
             product_obj = self.pool.get('product.product').browse(cr, uid, product, context=context)
             if type == 'in_invoice':
                 oa = product_obj.product_tmpl_id.property_stock_account_input and product_obj.product_tmpl_id.property_stock_account_input.id
@@ -144,11 +153,11 @@ class account_invoice_line(osv.osv):
                 if not oa:
                     oa = product_obj.categ_id.property_stock_account_output_categ and product_obj.categ_id.property_stock_account_output_categ.id
             if oa:
-                fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id) or False
+                fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id, context=context) or False
                 a = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, oa)
-                res['value'].update({'account_id':a})
+                res['value'].update({'account_id':a})            
         return res
-
+         
 account_invoice_line()
 
 class account_invoice(osv.osv):
@@ -159,7 +168,7 @@ class account_invoice(osv.osv):
             inv_id = line['invoice_id']
             inv_obj = self.browse(cr, uid, inv_id[0])
             if inv_obj.type == 'in_invoice':
-                if line.get('product_id', False):
+                if line.get('product_id',False):
                     product_obj = self.pool.get('product.product').browse(cr, uid, line['product_id'][0])
                     oa = product_obj.product_tmpl_id.property_stock_account_output and product_obj.product_tmpl_id.property_stock_account_output.id
                     if not oa:
@@ -168,9 +177,9 @@ class account_invoice(osv.osv):
                         fpos = inv_obj.fiscal_position or False
                         a = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, oa)
                         account_data = self.pool.get('account.account').read(cr, uid, [a], ['name'])[0]
-                        line.update({'account_id': (account_data['id'], account_data['name'])})
-        res = super(account_invoice, self)._refund_cleanup_lines(cr, uid, lines)
+                        line.update({'account_id': (account_data['id'],account_data['name'])})
+        res = super(account_invoice,self)._refund_cleanup_lines(cr, uid, lines)
         return res
-
+    
 account_invoice()
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: