[MERGE] forward port of branch saas-3 up to fdc6271
[odoo/odoo.git] / addons / hr_expense / hr_expense.py
index 0129e5d..2a43380 100644 (file)
@@ -285,7 +285,6 @@ class hr_expense_expense(osv.osv):
             if not mres:
                 continue
             res.append(mres)
-            tax_code_found= False
             
             #Calculate tax according to default tax on product
             taxes = []
@@ -303,32 +302,28 @@ class hr_expense_expense(osv.osv):
                         a = product.categ_id.property_account_expense_categ.id
                     a = fpos_obj.map_account(cr, uid, fpos, a)
                     taxes = 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)
             if not taxes:
                 continue
+            tax_l = []
             #Calculating tax on the line and creating move?
             for tax in tax_obj.compute_all(cr, uid, taxes,
                     line.unit_amount ,
                     line.unit_quantity, line.product_id,
                     exp.user_id.partner_id)['taxes']:
                 tax_code_id = tax['base_code_id']
-                tax_amount = line.total_amount * tax['base_sign']
-                if tax_code_found:
-                    if not tax_code_id:
-                        continue
-                    res.append(self.move_line_get_item(cr, uid, line, context))
-                    res[-1]['price'] = 0.0
-                    res[-1]['account_analytic_id'] = False
-                elif not tax_code_id:
+                if not tax_code_id:
                     continue
-                tax_code_found = True
                 res[-1]['tax_code_id'] = tax_code_id
-                res[-1]['tax_amount'] = cur_obj.compute(cr, uid, exp.currency_id.id, company_currency, tax_amount, context={'date': exp.date_confirm})
                 ## 
                 is_price_include = tax_obj.read(cr,uid,tax['id'],['price_include'],context)['price_include']
                 if is_price_include:
                     ## We need to deduce the price for the tax
                     res[-1]['price'] = res[-1]['price']  - (tax['amount'] * tax['base_sign'] or 0.0)
+                    # tax amount countains base amount without the tax
+                    tax_amount = (line.total_amount - tax['amount']) * tax['base_sign']
+                else:
+                    tax_amount = line.total_amount * tax['base_sign']
+                res[-1]['tax_amount'] = cur_obj.compute(cr, uid, exp.currency_id.id, company_currency, tax_amount, context={'date': exp.date_confirm})
                 assoc_tax = {
                              'type':'tax',
                              'name':tax['name'],
@@ -339,7 +334,8 @@ class hr_expense_expense(osv.osv):
                              'tax_code_id': tax['tax_code_id'],
                              'tax_amount': tax['amount'] * tax['base_sign'],
                              }
-                res.append(assoc_tax)
+                tax_l.append(assoc_tax)
+            res += tax_l
         return res
 
     def move_line_get_item(self, cr, uid, line, context=None):