Merge lp:~openbig/bigconsulting/changes_in_mileston into lp:bigconsulting
- changes_in_mileston
- Merge into addons
Proposed by
gpa(OpenERP)
Status: | Superseded |
---|---|
Proposed branch: | lp:~openbig/bigconsulting/changes_in_mileston |
Merge into: | lp:bigconsulting |
Diff against target: |
475 lines (+144/-102) 4 files modified
account_invoice_cash_discount/account_invoice_cash_discount.py (+42/-29) account_invoice_cash_discount/wizard/account_pay_invoice.py (+63/-45) account_invoice_cash_discount/wizard/account_pay_invoice_view.xml (+1/-1) account_invoice_cash_discount/wizard/invoice_statement_payment.py (+38/-27) |
To merge this branch: | bzr merge lp:~openbig/bigconsulting/changes_in_mileston |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
openbig | Pending | ||
Review via email: mp+31279@code.launchpad.net |
This proposal supersedes a proposal from 2010-07-29.
This proposal has been superseded by a proposal from 2010-07-29.
Commit message
Description of the change
changes in milestone1 and milestone2 functionality to calculate tax and discount
To post a comment you must log in.
- 63. By gpa(OpenERP)
-
changes in calculation of ratio
Unmerged revisions
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'account_invoice_cash_discount/account_invoice_cash_discount.py' |
2 | --- account_invoice_cash_discount/account_invoice_cash_discount.py 2010-07-27 14:33:57 +0000 |
3 | +++ account_invoice_cash_discount/account_invoice_cash_discount.py 2010-07-29 13:49:39 +0000 |
4 | @@ -317,24 +317,30 @@ |
5 | if amount_discount>0.0: |
6 | for line in invoice.invoice_line: |
7 | if line.invoice_line_tax_id: |
8 | - for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, amount_discount, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
9 | - tax_amount = tax['amount'] |
10 | - tax_total_amount += tax['amount'] |
11 | - tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])]) |
12 | + total_tax_amount = 0.0 |
13 | + for tax_id in line.invoice_line_tax_id: |
14 | + tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context) |
15 | + tax_amt = amount_discount * tax_data.amount |
16 | + tax_real_amt = tax_amt / (1 + tax_data.amount) |
17 | + total_tax_amount += tax_real_amt |
18 | + tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)]) |
19 | + |
20 | for tax_id in tax_invoice_id: |
21 | tax_value = invoice_tax_obj.browse(cr, uid, tax_id) |
22 | tax_account_id = tax_value.account_id.id |
23 | + tax_code_id = tax_value.tax_code_id.id |
24 | + |
25 | l3 = { |
26 | - 'debit': direction * tax_amount<0 and - direction * tax_amount, |
27 | - 'credit': direction * tax_amount>0 and direction * tax_amount, |
28 | + 'debit': direction * tax_real_amt<0 and - direction * tax_real_amt, |
29 | + 'credit': direction * tax_real_amt>0 and direction * tax_real_amt, |
30 | 'account_id': tax_account_id, |
31 | 'partner_id': invoice.partner_id.id, |
32 | 'ref':ref, |
33 | 'date': date, |
34 | 'currency_id':currency_id, |
35 | 'amount_currency':amount_currency and direction * amount_currency or 0.0, |
36 | - 'tax_code_id':tax_value.tax_code_id.id, |
37 | - 'tax_amount':tax_amount, |
38 | + 'tax_code_id':tax_code_id, |
39 | + 'tax_amount':tax_real_amt, |
40 | } |
41 | l3['name'] = name |
42 | lines.append((0, 0, l3)) |
43 | @@ -358,41 +364,49 @@ |
44 | 'tax_amount':move_line_data.tax_amount, |
45 | } |
46 | lines.append((0, 0, l4)) |
47 | - |
48 | else: |
49 | if amount_discount>0: |
50 | account_id = False |
51 | if 'account_id' in context and context['account_id']: |
52 | account_id = context['account_id'] |
53 | -# if tax_total_amount>0: |
54 | -# amount_discount = (amount_discount - tax_total_amount) |
55 | -# else: |
56 | -# amount_discount = amount_discount |
57 | + |
58 | for line in invoice.invoice_line: |
59 | line_tax_amount = 0.0 |
60 | tax_amount = 0.0 |
61 | discount = 0.0 |
62 | - for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, line.price_subtotal, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
63 | + for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, line.price_subtotal/line.quantity, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
64 | line_tax_amount = tax['amount'] |
65 | |
66 | line_total = line.price_subtotal + line_tax_amount |
67 | invoice_res_amount = invoice.amount_total |
68 | line_ratio = line_total / invoice_res_amount |
69 | |
70 | - discount = amount_discount * line_ratio |
71 | - |
72 | - for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, amount_discount, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
73 | - tax_amount = tax['amount'] |
74 | - |
75 | + discount_ratio = amount_discount * line_ratio |
76 | + total_tax_amount = 0.0 |
77 | + |
78 | + for tax_id in line.invoice_line_tax_id: |
79 | + tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context) |
80 | + tax_amt = discount_ratio * tax_data.amount |
81 | + tax_real_amt = tax_amt / (1 + tax_data.amount) |
82 | + total_tax_amount += tax_real_amt |
83 | + |
84 | + tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)]) |
85 | + for tax_id in tax_invoice_id: |
86 | + tax_value = invoice_tax_obj.browse(cr, uid, tax_id) |
87 | + tax_account_id = tax_value.account_id.id |
88 | + base_code_id = tax_value.base_code_id.id |
89 | + |
90 | l4 = { |
91 | - 'debit': direction * (discount - tax_amount)<0 and - direction * (discount - tax_amount), |
92 | - 'credit': direction * (discount - tax_amount)>0 and direction * (discount - tax_amount), |
93 | + 'debit': direction * (discount - total_tax_amount)<0 and - direction * (discount - total_tax_amount), |
94 | + 'credit': direction * (discount - total_tax_amount)>0 and direction * (discount - total_tax_amount), |
95 | 'account_id': account_id, |
96 | 'partner_id': invoice.partner_id.id, |
97 | 'ref':ref, |
98 | 'date': date, |
99 | 'currency_id':currency_id, |
100 | 'amount_currency':amount_currency and direction * amount_currency or 0.0, |
101 | + 'tax_code_id':base_code_id, |
102 | + 'tax_amount':line.price_unit, |
103 | } |
104 | l4['name'] = name |
105 | lines.append((0, 0, l4)) |
106 | @@ -530,9 +544,9 @@ |
107 | amount = res_currency_obj.compute(cr, uid, st.currency.id, |
108 | company_currency_id, move.amount, context=context, |
109 | account=acc_cur) |
110 | - if move.reconcile_id and move.reconcile_id.line_new_ids: |
111 | - for newline in move.reconcile_id.line_new_ids: |
112 | - amount += newline.amount |
113 | +# if move.reconcile_id and move.reconcile_id.line_new_ids: |
114 | +# for newline in move.reconcile_id.line_new_ids: |
115 | +# amount += newline.amount |
116 | |
117 | val = { |
118 | 'name': move.name, |
119 | @@ -569,9 +583,10 @@ |
120 | val['amount_currency'] = amount_cur |
121 | |
122 | torec.append(account_move_line_obj.create(cr, uid, val , context=context)) |
123 | - |
124 | + newline_sum = 0.0 |
125 | if move.reconcile_id and move.reconcile_id.line_new_ids: |
126 | for newline in move.reconcile_id.line_new_ids: |
127 | + newline_sum += newline.amount |
128 | account_move_line_obj.create(cr, uid, { |
129 | 'name': newline.name or move.name, |
130 | 'date': move.date, |
131 | @@ -673,8 +688,6 @@ |
132 | 'amount_currency': amount_currency, |
133 | 'currency_id': currency_id, |
134 | }, context=context) |
135 | - else: |
136 | - continue |
137 | |
138 | account_move_line_obj.create(cr, uid, { |
139 | 'name': move.name, |
140 | @@ -683,8 +696,8 @@ |
141 | 'move_id': move_id, |
142 | 'partner_id': ((move.partner_id) and move.partner_id.id) or False, |
143 | 'account_id': account_id, |
144 | - 'credit': ((amount < 0) and -amount) or 0.0, |
145 | - 'debit': ((amount > 0) and amount) or 0.0, |
146 | + 'credit': (((amount-newline_sum) < 0) and -(amount-newline_sum)) or 0.0, |
147 | + 'debit': (((amount-newline_sum) > 0) and (amount-newline_sum)) or 0.0, |
148 | 'statement_id': st.id, |
149 | 'journal_id': st.journal_id.id, |
150 | 'period_id': st.period_id.id, |
151 | |
152 | === modified file 'account_invoice_cash_discount/wizard/account_pay_invoice.py' |
153 | --- account_invoice_cash_discount/wizard/account_pay_invoice.py 2010-07-27 14:33:57 +0000 |
154 | +++ account_invoice_cash_discount/wizard/account_pay_invoice.py 2010-07-29 13:49:39 +0000 |
155 | @@ -140,43 +140,42 @@ |
156 | discount_account_id = self._get_account(cr, uid, context=context) |
157 | if discount>0.0: |
158 | for line in invoice.invoice_line: |
159 | - tax_amount = 0.0 |
160 | + total_tax_amount = 0.0 |
161 | + ######## |
162 | line_tax_amount = 0.0 |
163 | - |
164 | - for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, line.price_subtotal, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
165 | - line_tax_amount = tax['amount'] |
166 | - |
167 | + for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, line.price_subtotal/line.quantity, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
168 | + line_tax_amount += tax['amount'] |
169 | line_total = line.price_subtotal + line_tax_amount |
170 | invoice_res_amount = invoice.amount_total |
171 | line_ratio = line_total / invoice_res_amount |
172 | + ##################################################### |
173 | + discount_pay = discount * line_ratio |
174 | |
175 | if line.invoice_line_tax_id: |
176 | - for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, discount, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
177 | - tax_amount = tax['amount'] |
178 | - tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])]) |
179 | + for tax_id in line.invoice_line_tax_id: |
180 | + tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context) |
181 | + tax_amt = discount_pay * tax_data.amount |
182 | + tax_real_amt = tax_amt / (1 + tax_data.amount) |
183 | + total_tax_amount += tax_real_amt |
184 | + tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)]) |
185 | for tax_id in tax_invoice_id: |
186 | tax_value = invoice_tax_obj.browse(cr, uid, tax_id) |
187 | - tax_account_id = tax_value.account_id.id |
188 | base_code_id = tax_value.base_code_id.id |
189 | - |
190 | - if invoice.company_id.currency_id.id<>invoice.currency_id.id: |
191 | - amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, tax_amount, context=context) |
192 | - |
193 | - discount_pay = discount * line_ratio |
194 | + |
195 | if invoice.company_id.currency_id.id<>invoice.currency_id.id: |
196 | - discount_amount = discount - tax_amount |
197 | + discount_amount = discount - tax_real_amt |
198 | amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, discount_amount, context=context) |
199 | - |
200 | + |
201 | l4 = { |
202 | - 'debit': direction * (discount_pay - tax_amount)<0 and - direction * (discount_pay - tax_amount), |
203 | - 'credit': direction * (discount_pay - tax_amount)>0 and direction * (discount_pay - tax_amount), |
204 | + 'debit': direction * (discount_pay - total_tax_amount)<0 and - direction * (discount_pay - total_tax_amount), |
205 | + 'credit': direction * (discount_pay - total_tax_amount)>0 and direction * (discount_pay - total_tax_amount), |
206 | 'account_id': discount_account_id, |
207 | 'date': date, |
208 | 'name':name, |
209 | 'currency_id':invoice.currency_id.id or False, |
210 | 'journal_id':invoice.journal_id.id, |
211 | 'tax_code_id':base_code_id, |
212 | - 'tax_amount':tax_amount, |
213 | + 'tax_amount':line.price_unit, |
214 | 'amount_currency':amount and direction * amount or 0.0, |
215 | 'analytic_account_id':line.account_analytic_id.id or False, |
216 | } |
217 | @@ -206,33 +205,47 @@ |
218 | line_ids = [] |
219 | |
220 | tax_code_id = False |
221 | + tax_account_id = False |
222 | discount = self._get_discount(cr, uid, context=context) |
223 | if discount>0.0: |
224 | for line in invoice.invoice_line: |
225 | - tax_amount = 0.0 |
226 | line_tax_amount = 0.0 |
227 | + total_tax_amount = 0.0 |
228 | + ############# Ratio##### |
229 | + for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, line.price_subtotal/line.quantity, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
230 | + line_tax_amount += tax['amount'] |
231 | + line_total = line.price_subtotal + line_tax_amount |
232 | + invoice_res_amount = invoice.amount_total |
233 | + line_ratio = line_total / invoice_res_amount |
234 | + ############# |
235 | + ### discount for the invoice line |
236 | + discount_pay = discount * line_ratio |
237 | + |
238 | if line.invoice_line_tax_id: |
239 | - for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, discount, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
240 | - tax_amount = tax['amount'] |
241 | - tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])]) |
242 | + for tax_id in line.invoice_line_tax_id: |
243 | + tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context) |
244 | + tax_amt = discount_pay * tax_data.amount |
245 | + tax_real_amt = tax_amt / (1 + tax_data.amount) |
246 | + total_tax_amount += tax_real_amt |
247 | + tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)]) |
248 | for tax_id in tax_invoice_id: |
249 | tax_value = invoice_tax_obj.browse(cr, uid, tax_id) |
250 | tax_account_id = tax_value.account_id.id |
251 | tax_code_id = tax_value.tax_code_id.id |
252 | - |
253 | + |
254 | if invoice.company_id.currency_id.id<>invoice.currency_id.id: |
255 | amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, tax_amount, context=context) |
256 | - |
257 | + |
258 | l3 = { |
259 | - 'debit': direction * tax_amount<0 and - direction * tax_amount, |
260 | - 'credit': direction * tax_amount>0 and direction * tax_amount, |
261 | + 'debit': direction * tax_real_amt<0 and - direction * tax_real_amt, |
262 | + 'credit': direction * tax_real_amt>0 and direction * tax_real_amt, |
263 | 'account_id': tax_account_id, |
264 | 'date': date, |
265 | 'journal_id':invoice.journal_id.id or False, |
266 | 'name':name, |
267 | 'currency_id':invoice.currency_id.id or False, |
268 | - 'tax_code_id':tax_value.tax_code_id.id, |
269 | - 'tax_amount':-tax_amount, |
270 | + 'tax_code_id':tax_code_id, |
271 | + 'tax_amount':(discount_pay-tax_real_amt), |
272 | 'amount_currency':amount and direction * amount or 0.0, |
273 | 'analytic_account_id':line.account_analytic_id.id or False, |
274 | } |
275 | @@ -311,22 +324,28 @@ |
276 | discount_account_id = False |
277 | tax_code_id = False |
278 | base_code_id = False |
279 | + tax_account_id = False |
280 | |
281 | for line in invoice.invoice_line: |
282 | tax_amount = 0.0 |
283 | line_tax_amount = 0.0 |
284 | - |
285 | + total_tax_amount = 0.0 |
286 | #####get the ratio of the line in the total invoice amount |
287 | - for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, line.price_subtotal, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
288 | + for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, line.price_subtotal/line.quantity, line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
289 | line_tax_amount = tax['amount'] |
290 | line_total = line.price_subtotal + line_tax_amount |
291 | invoice_res_amount = invoice.amount_total |
292 | line_ratio = line_total / invoice_res_amount |
293 | ########################### |
294 | + discount_pay = data['cash_amount'] * line_ratio |
295 | if line.invoice_line_tax_id: |
296 | - for tax in tax_obj.compute(cr, uid, line.invoice_line_tax_id, data['cash_amount'], line.quantity, invoice.address_invoice_id.id, line.product_id, invoice.partner_id): |
297 | - tax_amount = tax['amount'] |
298 | - tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])]) |
299 | + for tax_id in line.invoice_line_tax_id: |
300 | + tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context) |
301 | + tax_amt = discount_pay * tax_data.amount |
302 | + tax_real_amt = tax_amt / (1 + tax_data.amount) |
303 | + total_tax_amount += tax_real_amt |
304 | + |
305 | + tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)]) |
306 | for tax_id in tax_invoice_id: |
307 | tax_value = invoice_tax_obj.browse(cr, uid, tax_id) |
308 | tax_account_id = tax_value.account_id.id |
309 | @@ -337,15 +356,15 @@ |
310 | amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, tax_amount, context=context) |
311 | |
312 | l3 = { |
313 | - 'debit': direction * tax_amount<0 and - direction * tax_amount, |
314 | - 'credit': direction * tax_amount>0 and direction * tax_amount, |
315 | + 'debit': direction * tax_real_amt<0 and - direction * tax_real_amt, |
316 | + 'credit': direction * tax_real_amt>0 and direction * tax_real_amt, |
317 | 'account_id': tax_account_id, |
318 | 'date': date, |
319 | 'journal_id':data.get('journal_id',False) , |
320 | 'name':name, |
321 | 'currency_id':invoice.currency_id.id or False, |
322 | - 'tax_code_id':tax_value.tax_code_id.id, |
323 | - 'tax_amount':-tax_amount, |
324 | + 'tax_code_id':tax_code_id, |
325 | + 'tax_amount':(discount_pay-tax_real_amt), |
326 | 'amount_currency':amount and direction * amount or 0.0, |
327 | 'analytic_account_id':line.account_analytic_id.id or False, |
328 | } |
329 | @@ -368,21 +387,20 @@ |
330 | else: |
331 | discount_account_id = data['account_id'] |
332 | |
333 | - discount = data['cash_amount'] * line_ratio |
334 | if invoice.company_id.currency_id.id<>invoice.currency_id.id: |
335 | - discount_amount = discount - tax_amount |
336 | + discount_amount = discount_pay - tax_amount |
337 | amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, discount_amount, context=context) |
338 | - |
339 | + |
340 | l4 = { |
341 | - 'debit': direction * (discount - tax_amount)<0 and - direction * (discount - tax_amount), |
342 | - 'credit': direction * (discount - tax_amount)>0 and direction * (discount - tax_amount), |
343 | + 'debit': direction * (discount_pay - total_tax_amount)<0 and - direction * (discount_pay - total_tax_amount), |
344 | + 'credit': direction * (discount_pay - total_tax_amount)>0 and direction * (discount_pay - total_tax_amount), |
345 | 'account_id': discount_account_id, |
346 | 'date': date, |
347 | 'name':name, |
348 | 'currency_id':invoice.currency_id.id or False, |
349 | 'journal_id':data.get('journal_id',False), |
350 | 'tax_code_id':base_code_id, |
351 | - 'tax_amount':tax_amount, |
352 | + 'tax_amount':line.price_unit, |
353 | 'amount_currency':amount and direction * amount or 0.0, |
354 | 'analytic_account_id':line.account_analytic_id.id or False, |
355 | } |
356 | @@ -516,7 +534,7 @@ |
357 | debit+=payment.debit |
358 | credit+=payment.credit |
359 | amount_paid+=abs(debit-credit) |
360 | - |
361 | + |
362 | if data['cash_residual_amount'] == 0.0 or self.pool.get('res.currency').is_zero(cr, uid, invoice.company_id.currency_id, |
363 | (amount_paid - inv_amount_company_currency)): |
364 | return self.pay_and_reconcile(cr, uid, ids, context=context) |
365 | |
366 | === modified file 'account_invoice_cash_discount/wizard/account_pay_invoice_view.xml' |
367 | --- account_invoice_cash_discount/wizard/account_pay_invoice_view.xml 2010-07-26 12:24:39 +0000 |
368 | +++ account_invoice_cash_discount/wizard/account_pay_invoice_view.xml 2010-07-29 13:49:39 +0000 |
369 | @@ -76,7 +76,7 @@ |
370 | <field name="model">account.move.line.memory</field> |
371 | <field name="type">tree</field> |
372 | <field name="arch" type="xml"> |
373 | - <tree string="Account Move Line"> |
374 | + <tree string="Account Move Line" editable="bottom"> |
375 | <field name="date"/> |
376 | <field name="name"/> |
377 | <field name="account_id"/> |
378 | |
379 | === modified file 'account_invoice_cash_discount/wizard/invoice_statement_payment.py' |
380 | --- account_invoice_cash_discount/wizard/invoice_statement_payment.py 2010-07-23 11:30:07 +0000 |
381 | +++ account_invoice_cash_discount/wizard/invoice_statement_payment.py 2010-07-29 13:49:39 +0000 |
382 | @@ -138,47 +138,58 @@ |
383 | 'line_ids': [(6, 0, [line.id])] |
384 | }, context=context) |
385 | |
386 | - ######################################### Calculation for discount and taxes###### |
387 | + ######################################### Calculation for discount and taxes###### |
388 | if line.invoice.id: |
389 | |
390 | discount = 0.0 |
391 | account = False |
392 | - tax_total_amount = 0.0 |
393 | - total_discount = 0.0 |
394 | invoice = obj_inv.browse(cursor, user, line.invoice.id, context=context) |
395 | - |
396 | for invoice_line in invoice.invoice_line: |
397 | + line_tax_amount = 0.0 |
398 | + total_tax_amount = 0.0 |
399 | + #####get the ratio of the line in the total invoice amount |
400 | + for tax in tax_obj.compute(cursor, user, invoice_line.invoice_line_tax_id, invoice_line.price_subtotal/line.quantity, invoice_line.quantity, invoice.address_invoice_id.id, invoice_line.product_id, invoice.partner_id): |
401 | + line_tax_amount += tax['amount'] |
402 | + line_total = invoice_line.price_subtotal + line_tax_amount |
403 | + invoice_res_amount = invoice.amount_total |
404 | + line_ratio = line_total / invoice_res_amount |
405 | + ########################### |
406 | + amount = obj_inv._get_amount(cursor, user, [invoice.id] ,invoice.residual, invoice.payment_term.id, context=context) |
407 | + invoice_amount = amount['amount'] |
408 | + discount = obj_inv._get_payment(cursor, user, [invoice.id] , invoice_amount, invoice.payment_term.id, context=context) |
409 | + account = obj_inv._get_account(cursor, user, [invoice.id] , invoice.residual, invoice.payment_term.id, context=context) |
410 | + |
411 | + ### discount for the invoice line |
412 | + discount_pay = discount * line_ratio |
413 | if invoice_line.invoice_line_tax_id: |
414 | - amount_invoice_line = obj_inv._get_amount(cursor, user, [invoice.id] , invoice_line.price_subtotal, invoice.payment_term.id, context=context) |
415 | - line_amount = amount_invoice_line['amount'] |
416 | - discount = obj_inv._get_payment(cursor, user, [invoice.id] , line_amount, invoice.payment_term.id, context=context) |
417 | - account = obj_inv._get_account(cursor, user, [invoice.id] , invoice.residual, invoice.payment_term.id, context=context) |
418 | - |
419 | - tax_amount = 0.0 |
420 | - for tax in tax_obj.compute(cursor, user, invoice_line.invoice_line_tax_id, discount, invoice_line.quantity, invoice.address_invoice_id.id, invoice_line.product_id, invoice.partner_id): |
421 | - tax_amount = tax['amount'] |
422 | - tax_total_amount += tax['amount'] |
423 | - tax_invoice_id = invoice_tax_obj.search(cursor,user,[('invoice_id','=',invoice.id),('name','=',tax['name'])]) |
424 | + tax_real_amt = 0.0 |
425 | + tax_account_id = False |
426 | + for tax_id in invoice_line.invoice_line_tax_id: |
427 | + tax_data = tax_obj.browse(cursor, user, tax_id.id, context=context) |
428 | + tax_amt = discount_pay * tax_data.amount |
429 | + tax_real_amt = tax_amt / (1 + tax_data.amount) |
430 | + total_tax_amount += tax_real_amt |
431 | + |
432 | + tax_invoice_id = invoice_tax_obj.search(cursor, user,[('invoice_id','=',invoice.id),('name','=',tax_data.name)]) |
433 | for tax_id in tax_invoice_id: |
434 | tax_value = invoice_tax_obj.browse(cursor, user, tax_id) |
435 | tax_account_id = tax_value.account_id.id |
436 | - |
437 | - if tax_amount>0: |
438 | + tax_code_id = tax_value.tax_code_id.id |
439 | + if tax_real_amt>0: |
440 | statement_reconcile_line_obj.create(cursor, user, { |
441 | 'name': line.name, |
442 | - 'amount': tax_amount, |
443 | + 'amount': tax_real_amt, |
444 | 'account_id': tax_account_id, |
445 | 'line_id': reconcile_id, |
446 | }, context=context) |
447 | - |
448 | - if discount>0: |
449 | - total_discount += discount |
450 | - statement_reconcile_line_obj.create(cursor, user, { |
451 | - 'name': line.name, |
452 | - 'amount': discount - tax_amount, |
453 | - 'account_id': account, |
454 | - 'line_id': reconcile_id, |
455 | - }, context=context) |
456 | + if discount>0: |
457 | + discount = discount * line_ratio |
458 | + statement_reconcile_line_obj.create(cursor, user, { |
459 | + 'name': line.name, |
460 | + 'amount': discount - total_tax_amount, |
461 | + 'account_id': account, |
462 | + 'line_id': reconcile_id, |
463 | + }, context=context) |
464 | ########################################################################## |
465 | |
466 | if line.journal_id.type == 'sale': |
467 | @@ -190,7 +201,7 @@ |
468 | |
469 | statement_line_obj.create(cursor, user, { |
470 | 'name': line.name or '?', |
471 | - 'amount': amount, |
472 | + 'amount': invoice_amount, |
473 | 'type': type, |
474 | 'partner_id': line.partner_id.id, |
475 | 'account_id': line.account_id.id, |