Merge lp:~openbig/bigconsulting/changes_in_mileston into lp:bigconsulting

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
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.

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
=== modified file 'account_invoice_cash_discount/account_invoice_cash_discount.py'
--- account_invoice_cash_discount/account_invoice_cash_discount.py 2010-07-27 14:33:57 +0000
+++ account_invoice_cash_discount/account_invoice_cash_discount.py 2010-07-29 13:49:39 +0000
@@ -317,24 +317,30 @@
317 if amount_discount>0.0:317 if amount_discount>0.0:
318 for line in invoice.invoice_line:318 for line in invoice.invoice_line:
319 if line.invoice_line_tax_id:319 if line.invoice_line_tax_id:
320 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):320 total_tax_amount = 0.0
321 tax_amount = tax['amount']321 for tax_id in line.invoice_line_tax_id:
322 tax_total_amount += tax['amount']322 tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context)
323 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])])323 tax_amt = amount_discount * tax_data.amount
324 tax_real_amt = tax_amt / (1 + tax_data.amount)
325 total_tax_amount += tax_real_amt
326 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)])
327
324 for tax_id in tax_invoice_id:328 for tax_id in tax_invoice_id:
325 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)329 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)
326 tax_account_id = tax_value.account_id.id330 tax_account_id = tax_value.account_id.id
331 tax_code_id = tax_value.tax_code_id.id
332
327 l3 = {333 l3 = {
328 'debit': direction * tax_amount<0 and - direction * tax_amount,334 'debit': direction * tax_real_amt<0 and - direction * tax_real_amt,
329 'credit': direction * tax_amount>0 and direction * tax_amount,335 'credit': direction * tax_real_amt>0 and direction * tax_real_amt,
330 'account_id': tax_account_id,336 'account_id': tax_account_id,
331 'partner_id': invoice.partner_id.id,337 'partner_id': invoice.partner_id.id,
332 'ref':ref,338 'ref':ref,
333 'date': date,339 'date': date,
334 'currency_id':currency_id,340 'currency_id':currency_id,
335 'amount_currency':amount_currency and direction * amount_currency or 0.0,341 'amount_currency':amount_currency and direction * amount_currency or 0.0,
336 'tax_code_id':tax_value.tax_code_id.id,342 'tax_code_id':tax_code_id,
337 'tax_amount':tax_amount,343 'tax_amount':tax_real_amt,
338 }344 }
339 l3['name'] = name345 l3['name'] = name
340 lines.append((0, 0, l3))346 lines.append((0, 0, l3))
@@ -358,41 +364,49 @@
358 'tax_amount':move_line_data.tax_amount,364 'tax_amount':move_line_data.tax_amount,
359 }365 }
360 lines.append((0, 0, l4))366 lines.append((0, 0, l4))
361
362 else:367 else:
363 if amount_discount>0:368 if amount_discount>0:
364 account_id = False369 account_id = False
365 if 'account_id' in context and context['account_id']:370 if 'account_id' in context and context['account_id']:
366 account_id = context['account_id']371 account_id = context['account_id']
367# if tax_total_amount>0:372
368# amount_discount = (amount_discount - tax_total_amount)
369# else:
370# amount_discount = amount_discount
371 for line in invoice.invoice_line:373 for line in invoice.invoice_line:
372 line_tax_amount = 0.0374 line_tax_amount = 0.0
373 tax_amount = 0.0375 tax_amount = 0.0
374 discount = 0.0376 discount = 0.0
375 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): 377 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):
376 line_tax_amount = tax['amount']378 line_tax_amount = tax['amount']
377 379
378 line_total = line.price_subtotal + line_tax_amount380 line_total = line.price_subtotal + line_tax_amount
379 invoice_res_amount = invoice.amount_total381 invoice_res_amount = invoice.amount_total
380 line_ratio = line_total / invoice_res_amount382 line_ratio = line_total / invoice_res_amount
381 383
382 discount = amount_discount * line_ratio384 discount_ratio = amount_discount * line_ratio
383 385 total_tax_amount = 0.0
384 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): 386
385 tax_amount = tax['amount']387 for tax_id in line.invoice_line_tax_id:
386 388 tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context)
389 tax_amt = discount_ratio * tax_data.amount
390 tax_real_amt = tax_amt / (1 + tax_data.amount)
391 total_tax_amount += tax_real_amt
392
393 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)])
394 for tax_id in tax_invoice_id:
395 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)
396 tax_account_id = tax_value.account_id.id
397 base_code_id = tax_value.base_code_id.id
398
387 l4 = {399 l4 = {
388 'debit': direction * (discount - tax_amount)<0 and - direction * (discount - tax_amount),400 'debit': direction * (discount - total_tax_amount)<0 and - direction * (discount - total_tax_amount),
389 'credit': direction * (discount - tax_amount)>0 and direction * (discount - tax_amount),401 'credit': direction * (discount - total_tax_amount)>0 and direction * (discount - total_tax_amount),
390 'account_id': account_id,402 'account_id': account_id,
391 'partner_id': invoice.partner_id.id,403 'partner_id': invoice.partner_id.id,
392 'ref':ref,404 'ref':ref,
393 'date': date,405 'date': date,
394 'currency_id':currency_id,406 'currency_id':currency_id,
395 'amount_currency':amount_currency and direction * amount_currency or 0.0,407 'amount_currency':amount_currency and direction * amount_currency or 0.0,
408 'tax_code_id':base_code_id,
409 'tax_amount':line.price_unit,
396 }410 }
397 l4['name'] = name411 l4['name'] = name
398 lines.append((0, 0, l4))412 lines.append((0, 0, l4))
@@ -530,9 +544,9 @@
530 amount = res_currency_obj.compute(cr, uid, st.currency.id,544 amount = res_currency_obj.compute(cr, uid, st.currency.id,
531 company_currency_id, move.amount, context=context,545 company_currency_id, move.amount, context=context,
532 account=acc_cur)546 account=acc_cur)
533 if move.reconcile_id and move.reconcile_id.line_new_ids:547# if move.reconcile_id and move.reconcile_id.line_new_ids:
534 for newline in move.reconcile_id.line_new_ids:548# for newline in move.reconcile_id.line_new_ids:
535 amount += newline.amount549# amount += newline.amount
536550
537 val = {551 val = {
538 'name': move.name,552 'name': move.name,
@@ -569,9 +583,10 @@
569 val['amount_currency'] = amount_cur583 val['amount_currency'] = amount_cur
570584
571 torec.append(account_move_line_obj.create(cr, uid, val , context=context))585 torec.append(account_move_line_obj.create(cr, uid, val , context=context))
572586 newline_sum = 0.0
573 if move.reconcile_id and move.reconcile_id.line_new_ids:587 if move.reconcile_id and move.reconcile_id.line_new_ids:
574 for newline in move.reconcile_id.line_new_ids:588 for newline in move.reconcile_id.line_new_ids:
589 newline_sum += newline.amount
575 account_move_line_obj.create(cr, uid, {590 account_move_line_obj.create(cr, uid, {
576 'name': newline.name or move.name,591 'name': newline.name or move.name,
577 'date': move.date,592 'date': move.date,
@@ -673,8 +688,6 @@
673 'amount_currency': amount_currency,688 'amount_currency': amount_currency,
674 'currency_id': currency_id,689 'currency_id': currency_id,
675 }, context=context)690 }, context=context)
676 else:
677 continue
678691
679 account_move_line_obj.create(cr, uid, {692 account_move_line_obj.create(cr, uid, {
680 'name': move.name,693 'name': move.name,
@@ -683,8 +696,8 @@
683 'move_id': move_id,696 'move_id': move_id,
684 'partner_id': ((move.partner_id) and move.partner_id.id) or False,697 'partner_id': ((move.partner_id) and move.partner_id.id) or False,
685 'account_id': account_id,698 'account_id': account_id,
686 'credit': ((amount < 0) and -amount) or 0.0,699 'credit': (((amount-newline_sum) < 0) and -(amount-newline_sum)) or 0.0,
687 'debit': ((amount > 0) and amount) or 0.0,700 'debit': (((amount-newline_sum) > 0) and (amount-newline_sum)) or 0.0,
688 'statement_id': st.id,701 'statement_id': st.id,
689 'journal_id': st.journal_id.id,702 'journal_id': st.journal_id.id,
690 'period_id': st.period_id.id,703 'period_id': st.period_id.id,
691704
=== modified file 'account_invoice_cash_discount/wizard/account_pay_invoice.py'
--- account_invoice_cash_discount/wizard/account_pay_invoice.py 2010-07-27 14:33:57 +0000
+++ account_invoice_cash_discount/wizard/account_pay_invoice.py 2010-07-29 13:49:39 +0000
@@ -140,43 +140,42 @@
140 discount_account_id = self._get_account(cr, uid, context=context)140 discount_account_id = self._get_account(cr, uid, context=context)
141 if discount>0.0:141 if discount>0.0:
142 for line in invoice.invoice_line:142 for line in invoice.invoice_line:
143 tax_amount = 0.0143 total_tax_amount = 0.0
144 ########
144 line_tax_amount = 0.0145 line_tax_amount = 0.0
145 146 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):
146 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): 147 line_tax_amount += tax['amount']
147 line_tax_amount = tax['amount']
148
149 line_total = line.price_subtotal + line_tax_amount148 line_total = line.price_subtotal + line_tax_amount
150 invoice_res_amount = invoice.amount_total149 invoice_res_amount = invoice.amount_total
151 line_ratio = line_total / invoice_res_amount150 line_ratio = line_total / invoice_res_amount
151 #####################################################
152 discount_pay = discount * line_ratio
152 153
153 if line.invoice_line_tax_id:154 if line.invoice_line_tax_id:
154 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):155 for tax_id in line.invoice_line_tax_id:
155 tax_amount = tax['amount']156 tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context)
156 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])])157 tax_amt = discount_pay * tax_data.amount
158 tax_real_amt = tax_amt / (1 + tax_data.amount)
159 total_tax_amount += tax_real_amt
160 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)])
157 for tax_id in tax_invoice_id:161 for tax_id in tax_invoice_id:
158 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)162 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)
159 tax_account_id = tax_value.account_id.id
160 base_code_id = tax_value.base_code_id.id163 base_code_id = tax_value.base_code_id.id
161 164
162 if invoice.company_id.currency_id.id<>invoice.currency_id.id:
163 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, tax_amount, context=context)
164
165 discount_pay = discount * line_ratio
166 if invoice.company_id.currency_id.id<>invoice.currency_id.id:165 if invoice.company_id.currency_id.id<>invoice.currency_id.id:
167 discount_amount = discount - tax_amount166 discount_amount = discount - tax_real_amt
168 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, discount_amount, context=context)167 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, discount_amount, context=context)
169 168
170 l4 = {169 l4 = {
171 'debit': direction * (discount_pay - tax_amount)<0 and - direction * (discount_pay - tax_amount),170 'debit': direction * (discount_pay - total_tax_amount)<0 and - direction * (discount_pay - total_tax_amount),
172 'credit': direction * (discount_pay - tax_amount)>0 and direction * (discount_pay - tax_amount),171 'credit': direction * (discount_pay - total_tax_amount)>0 and direction * (discount_pay - total_tax_amount),
173 'account_id': discount_account_id,172 'account_id': discount_account_id,
174 'date': date,173 'date': date,
175 'name':name,174 'name':name,
176 'currency_id':invoice.currency_id.id or False,175 'currency_id':invoice.currency_id.id or False,
177 'journal_id':invoice.journal_id.id,176 'journal_id':invoice.journal_id.id,
178 'tax_code_id':base_code_id,177 'tax_code_id':base_code_id,
179 'tax_amount':tax_amount,178 'tax_amount':line.price_unit,
180 'amount_currency':amount and direction * amount or 0.0,179 'amount_currency':amount and direction * amount or 0.0,
181 'analytic_account_id':line.account_analytic_id.id or False,180 'analytic_account_id':line.account_analytic_id.id or False,
182 }181 }
@@ -206,33 +205,47 @@
206 line_ids = []205 line_ids = []
207206
208 tax_code_id = False207 tax_code_id = False
208 tax_account_id = False
209 discount = self._get_discount(cr, uid, context=context)209 discount = self._get_discount(cr, uid, context=context)
210 if discount>0.0:210 if discount>0.0:
211 for line in invoice.invoice_line:211 for line in invoice.invoice_line:
212 tax_amount = 0.0
213 line_tax_amount = 0.0212 line_tax_amount = 0.0
213 total_tax_amount = 0.0
214 ############# Ratio#####
215 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):
216 line_tax_amount += tax['amount']
217 line_total = line.price_subtotal + line_tax_amount
218 invoice_res_amount = invoice.amount_total
219 line_ratio = line_total / invoice_res_amount
220 #############
221 ### discount for the invoice line
222 discount_pay = discount * line_ratio
223
214 if line.invoice_line_tax_id:224 if line.invoice_line_tax_id:
215 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):225 for tax_id in line.invoice_line_tax_id:
216 tax_amount = tax['amount']226 tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context)
217 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])])227 tax_amt = discount_pay * tax_data.amount
228 tax_real_amt = tax_amt / (1 + tax_data.amount)
229 total_tax_amount += tax_real_amt
230 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)])
218 for tax_id in tax_invoice_id:231 for tax_id in tax_invoice_id:
219 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)232 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)
220 tax_account_id = tax_value.account_id.id233 tax_account_id = tax_value.account_id.id
221 tax_code_id = tax_value.tax_code_id.id234 tax_code_id = tax_value.tax_code_id.id
222 235
223 if invoice.company_id.currency_id.id<>invoice.currency_id.id:236 if invoice.company_id.currency_id.id<>invoice.currency_id.id:
224 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, tax_amount, context=context)237 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, tax_amount, context=context)
225 238
226 l3 = {239 l3 = {
227 'debit': direction * tax_amount<0 and - direction * tax_amount,240 'debit': direction * tax_real_amt<0 and - direction * tax_real_amt,
228 'credit': direction * tax_amount>0 and direction * tax_amount,241 'credit': direction * tax_real_amt>0 and direction * tax_real_amt,
229 'account_id': tax_account_id,242 'account_id': tax_account_id,
230 'date': date,243 'date': date,
231 'journal_id':invoice.journal_id.id or False,244 'journal_id':invoice.journal_id.id or False,
232 'name':name,245 'name':name,
233 'currency_id':invoice.currency_id.id or False,246 'currency_id':invoice.currency_id.id or False,
234 'tax_code_id':tax_value.tax_code_id.id,247 'tax_code_id':tax_code_id,
235 'tax_amount':-tax_amount,248 'tax_amount':(discount_pay-tax_real_amt),
236 'amount_currency':amount and direction * amount or 0.0,249 'amount_currency':amount and direction * amount or 0.0,
237 'analytic_account_id':line.account_analytic_id.id or False,250 'analytic_account_id':line.account_analytic_id.id or False,
238 }251 }
@@ -311,22 +324,28 @@
311 discount_account_id = False324 discount_account_id = False
312 tax_code_id = False325 tax_code_id = False
313 base_code_id = False326 base_code_id = False
327 tax_account_id = False
314 328
315 for line in invoice.invoice_line:329 for line in invoice.invoice_line:
316 tax_amount = 0.0330 tax_amount = 0.0
317 line_tax_amount = 0.0331 line_tax_amount = 0.0
318 332 total_tax_amount = 0.0
319 #####get the ratio of the line in the total invoice amount 333 #####get the ratio of the line in the total invoice amount
320 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): 334 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):
321 line_tax_amount = tax['amount']335 line_tax_amount = tax['amount']
322 line_total = line.price_subtotal + line_tax_amount336 line_total = line.price_subtotal + line_tax_amount
323 invoice_res_amount = invoice.amount_total337 invoice_res_amount = invoice.amount_total
324 line_ratio = line_total / invoice_res_amount338 line_ratio = line_total / invoice_res_amount
325 ###########################339 ###########################
340 discount_pay = data['cash_amount'] * line_ratio
326 if line.invoice_line_tax_id:341 if line.invoice_line_tax_id:
327 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):342 for tax_id in line.invoice_line_tax_id:
328 tax_amount = tax['amount']343 tax_data = tax_obj.browse(cr, uid, tax_id.id, context=context)
329 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax['name'])])344 tax_amt = discount_pay * tax_data.amount
345 tax_real_amt = tax_amt / (1 + tax_data.amount)
346 total_tax_amount += tax_real_amt
347
348 tax_invoice_id = invoice_tax_obj.search(cr,uid,[('invoice_id','=',invoice.id),('name','=',tax_data.name)])
330 for tax_id in tax_invoice_id:349 for tax_id in tax_invoice_id:
331 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)350 tax_value = invoice_tax_obj.browse(cr, uid, tax_id)
332 tax_account_id = tax_value.account_id.id351 tax_account_id = tax_value.account_id.id
@@ -337,15 +356,15 @@
337 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, tax_amount, context=context)356 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, tax_amount, context=context)
338 357
339 l3 = {358 l3 = {
340 'debit': direction * tax_amount<0 and - direction * tax_amount,359 'debit': direction * tax_real_amt<0 and - direction * tax_real_amt,
341 'credit': direction * tax_amount>0 and direction * tax_amount,360 'credit': direction * tax_real_amt>0 and direction * tax_real_amt,
342 'account_id': tax_account_id,361 'account_id': tax_account_id,
343 'date': date,362 'date': date,
344 'journal_id':data.get('journal_id',False) ,363 'journal_id':data.get('journal_id',False) ,
345 'name':name,364 'name':name,
346 'currency_id':invoice.currency_id.id or False,365 'currency_id':invoice.currency_id.id or False,
347 'tax_code_id':tax_value.tax_code_id.id,366 'tax_code_id':tax_code_id,
348 'tax_amount':-tax_amount,367 'tax_amount':(discount_pay-tax_real_amt),
349 'amount_currency':amount and direction * amount or 0.0,368 'amount_currency':amount and direction * amount or 0.0,
350 'analytic_account_id':line.account_analytic_id.id or False,369 'analytic_account_id':line.account_analytic_id.id or False,
351 }370 }
@@ -368,21 +387,20 @@
368 else:387 else:
369 discount_account_id = data['account_id']388 discount_account_id = data['account_id']
370 389
371 discount = data['cash_amount'] * line_ratio
372 if invoice.company_id.currency_id.id<>invoice.currency_id.id:390 if invoice.company_id.currency_id.id<>invoice.currency_id.id:
373 discount_amount = discount - tax_amount391 discount_amount = discount_pay - tax_amount
374 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, discount_amount, context=context)392 amount = cur_obj.compute(cr, uid, invoice.currency_id.id, invoice.company_id.currency_id.id, discount_amount, context=context)
375 393
376 l4 = {394 l4 = {
377 'debit': direction * (discount - tax_amount)<0 and - direction * (discount - tax_amount),395 'debit': direction * (discount_pay - total_tax_amount)<0 and - direction * (discount_pay - total_tax_amount),
378 'credit': direction * (discount - tax_amount)>0 and direction * (discount - tax_amount),396 'credit': direction * (discount_pay - total_tax_amount)>0 and direction * (discount_pay - total_tax_amount),
379 'account_id': discount_account_id,397 'account_id': discount_account_id,
380 'date': date,398 'date': date,
381 'name':name,399 'name':name,
382 'currency_id':invoice.currency_id.id or False,400 'currency_id':invoice.currency_id.id or False,
383 'journal_id':data.get('journal_id',False),401 'journal_id':data.get('journal_id',False),
384 'tax_code_id':base_code_id,402 'tax_code_id':base_code_id,
385 'tax_amount':tax_amount,403 'tax_amount':line.price_unit,
386 'amount_currency':amount and direction * amount or 0.0,404 'amount_currency':amount and direction * amount or 0.0,
387 'analytic_account_id':line.account_analytic_id.id or False,405 'analytic_account_id':line.account_analytic_id.id or False,
388 }406 }
@@ -516,7 +534,7 @@
516 debit+=payment.debit534 debit+=payment.debit
517 credit+=payment.credit535 credit+=payment.credit
518 amount_paid+=abs(debit-credit)536 amount_paid+=abs(debit-credit)
519 537
520 if data['cash_residual_amount'] == 0.0 or self.pool.get('res.currency').is_zero(cr, uid, invoice.company_id.currency_id,538 if data['cash_residual_amount'] == 0.0 or self.pool.get('res.currency').is_zero(cr, uid, invoice.company_id.currency_id,
521 (amount_paid - inv_amount_company_currency)):539 (amount_paid - inv_amount_company_currency)):
522 return self.pay_and_reconcile(cr, uid, ids, context=context)540 return self.pay_and_reconcile(cr, uid, ids, context=context)
523541
=== modified file 'account_invoice_cash_discount/wizard/account_pay_invoice_view.xml'
--- account_invoice_cash_discount/wizard/account_pay_invoice_view.xml 2010-07-26 12:24:39 +0000
+++ account_invoice_cash_discount/wizard/account_pay_invoice_view.xml 2010-07-29 13:49:39 +0000
@@ -76,7 +76,7 @@
76 <field name="model">account.move.line.memory</field>76 <field name="model">account.move.line.memory</field>
77 <field name="type">tree</field>77 <field name="type">tree</field>
78 <field name="arch" type="xml">78 <field name="arch" type="xml">
79 <tree string="Account Move Line">79 <tree string="Account Move Line" editable="bottom">
80 <field name="date"/>80 <field name="date"/>
81 <field name="name"/>81 <field name="name"/>
82 <field name="account_id"/>82 <field name="account_id"/>
8383
=== modified file 'account_invoice_cash_discount/wizard/invoice_statement_payment.py'
--- account_invoice_cash_discount/wizard/invoice_statement_payment.py 2010-07-23 11:30:07 +0000
+++ account_invoice_cash_discount/wizard/invoice_statement_payment.py 2010-07-29 13:49:39 +0000
@@ -138,47 +138,58 @@
138 'line_ids': [(6, 0, [line.id])]138 'line_ids': [(6, 0, [line.id])]
139 }, context=context)139 }, context=context)
140 140
141 ######################################### Calculation for discount and taxes######141 ######################################### Calculation for discount and taxes######
142 if line.invoice.id:142 if line.invoice.id:
143 143
144 discount = 0.0144 discount = 0.0
145 account = False145 account = False
146 tax_total_amount = 0.0
147 total_discount = 0.0
148 invoice = obj_inv.browse(cursor, user, line.invoice.id, context=context)146 invoice = obj_inv.browse(cursor, user, line.invoice.id, context=context)
149
150 for invoice_line in invoice.invoice_line:147 for invoice_line in invoice.invoice_line:
148 line_tax_amount = 0.0
149 total_tax_amount = 0.0
150 #####get the ratio of the line in the total invoice amount
151 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):
152 line_tax_amount += tax['amount']
153 line_total = invoice_line.price_subtotal + line_tax_amount
154 invoice_res_amount = invoice.amount_total
155 line_ratio = line_total / invoice_res_amount
156 ###########################
157 amount = obj_inv._get_amount(cursor, user, [invoice.id] ,invoice.residual, invoice.payment_term.id, context=context)
158 invoice_amount = amount['amount']
159 discount = obj_inv._get_payment(cursor, user, [invoice.id] , invoice_amount, invoice.payment_term.id, context=context)
160 account = obj_inv._get_account(cursor, user, [invoice.id] , invoice.residual, invoice.payment_term.id, context=context)
161
162 ### discount for the invoice line
163 discount_pay = discount * line_ratio
151 if invoice_line.invoice_line_tax_id:164 if invoice_line.invoice_line_tax_id:
152 amount_invoice_line = obj_inv._get_amount(cursor, user, [invoice.id] , invoice_line.price_subtotal, invoice.payment_term.id, context=context)165 tax_real_amt = 0.0
153 line_amount = amount_invoice_line['amount']166 tax_account_id = False
154 discount = obj_inv._get_payment(cursor, user, [invoice.id] , line_amount, invoice.payment_term.id, context=context)167 for tax_id in invoice_line.invoice_line_tax_id:
155 account = obj_inv._get_account(cursor, user, [invoice.id] , invoice.residual, invoice.payment_term.id, context=context)168 tax_data = tax_obj.browse(cursor, user, tax_id.id, context=context)
156169 tax_amt = discount_pay * tax_data.amount
157 tax_amount = 0.0 170 tax_real_amt = tax_amt / (1 + tax_data.amount)
158 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):171 total_tax_amount += tax_real_amt
159 tax_amount = tax['amount']172
160 tax_total_amount += tax['amount']173 tax_invoice_id = invoice_tax_obj.search(cursor, user,[('invoice_id','=',invoice.id),('name','=',tax_data.name)])
161 tax_invoice_id = invoice_tax_obj.search(cursor,user,[('invoice_id','=',invoice.id),('name','=',tax['name'])])
162 for tax_id in tax_invoice_id:174 for tax_id in tax_invoice_id:
163 tax_value = invoice_tax_obj.browse(cursor, user, tax_id)175 tax_value = invoice_tax_obj.browse(cursor, user, tax_id)
164 tax_account_id = tax_value.account_id.id176 tax_account_id = tax_value.account_id.id
165 177 tax_code_id = tax_value.tax_code_id.id
166 if tax_amount>0:178 if tax_real_amt>0:
167 statement_reconcile_line_obj.create(cursor, user, {179 statement_reconcile_line_obj.create(cursor, user, {
168 'name': line.name,180 'name': line.name,
169 'amount': tax_amount,181 'amount': tax_real_amt,
170 'account_id': tax_account_id,182 'account_id': tax_account_id,
171 'line_id': reconcile_id,183 'line_id': reconcile_id,
172 }, context=context)184 }, context=context)
173 185 if discount>0:
174 if discount>0:186 discount = discount * line_ratio
175 total_discount += discount 187 statement_reconcile_line_obj.create(cursor, user, {
176 statement_reconcile_line_obj.create(cursor, user, {188 'name': line.name,
177 'name': line.name,189 'amount': discount - total_tax_amount,
178 'amount': discount - tax_amount,190 'account_id': account,
179 'account_id': account,191 'line_id': reconcile_id,
180 'line_id': reconcile_id,192 }, context=context)
181 }, context=context)
182 ##########################################################################193 ##########################################################################
183 194
184 if line.journal_id.type == 'sale':195 if line.journal_id.type == 'sale':
@@ -190,7 +201,7 @@
190 201
191 statement_line_obj.create(cursor, user, {202 statement_line_obj.create(cursor, user, {
192 'name': line.name or '?',203 'name': line.name or '?',
193 'amount': amount,204 'amount': invoice_amount,
194 'type': type,205 'type': type,
195 'partner_id': line.partner_id.id,206 'partner_id': line.partner_id.id,
196 'account_id': line.account_id.id,207 'account_id': line.account_id.id,

Subscribers

People subscribed via source and target branches