diff options
| author | qdp-launchpad@tinyerp.com <> | 2011-01-25 15:18:33 +0100 |
|---|---|---|
| committer | qdp-launchpad@tinyerp.com <> | 2011-01-25 15:18:33 +0100 |
| commit | da2b68f725e3fe50a3d2ab4c8df1ca215eebc049 (patch) | |
| tree | d5321c1a3dc26e13bce8f29ade62170d703b56f4 | |
| parent | 0aa7654d6d1d54316e25d778df52a18d75add88e (diff) | |
[FIX] account: invoice analysis enhanced in order to avoid having crashes because of zero division (if a line has qtty = 0..)
bzr revid: qdp-launchpad@tinyerp.com-20110125141833-0ih3owdepldifts3
| -rw-r--r-- | addons/account/report/account_invoice_report.py | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/addons/account/report/account_invoice_report.py b/addons/account/report/account_invoice_report.py index e8da59bb165..9c7cf014e4d 100644 --- a/addons/account/report/account_invoice_report.py +++ b/addons/account/report/account_invoice_report.py @@ -121,18 +121,32 @@ class account_invoice_report(osv.osv): ai.amount_total * -1 else ai.amount_total - end)/(select count(l.id) from account_invoice_line as l - left join account_invoice as a ON (a.id=l.invoice_id) - where a.id=ai.id) /cr.rate as price_total_tax, + end) / (CASE WHEN + (select count(l.id) from account_invoice_line as l + left join account_invoice as a ON (a.id=l.invoice_id) + where a.id=ai.id) <> 0 + THEN + (select count(l.id) from account_invoice_line as l + left join account_invoice as a ON (a.id=l.invoice_id) + where a.id=ai.id) + ELSE 1 + END) / cr.rate as price_total_tax, (case when ai.type in ('out_refund','in_invoice') then sum(ail.quantity*ail.price_unit*-1) else sum(ail.quantity*ail.price_unit) - end)/(case when ai.type in ('out_refund','in_invoice') then - sum(ail.quantity/u.factor*-1) - else - sum(ail.quantity/u.factor) - end) / cr.rate as price_average, + end) / (CASE WHEN + (case when ai.type in ('out_refund','in_invoice') + then sum(ail.quantity/u.factor*-1) + else sum(ail.quantity/u.factor) end) <> 0 + THEN + (case when ai.type in ('out_refund','in_invoice') + then sum(ail.quantity/u.factor*-1) + else sum(ail.quantity/u.factor) end) + ELSE 1 + END) + / cr.rate as price_average, + cr.rate as currency_rate, sum((select extract(epoch from avg(date_trunc('day',aml.date_created)-date_trunc('day',l.create_date)))/(24*60*60)::decimal(16,2) from account_move_line as aml @@ -148,9 +162,16 @@ class account_invoice_report(osv.osv): ai.residual * -1 else ai.residual - end)/(select count(l.id) from account_invoice_line as l - left join account_invoice as a ON (a.id=l.invoice_id) - where a.id=ai.id) / cr.rate as residual + end)/ (CASE WHEN + (select count(l.id) from account_invoice_line as l + left join account_invoice as a ON (a.id=l.invoice_id) + where a.id=ai.id) <> 0 + THEN + (select count(l.id) from account_invoice_line as l + left join account_invoice as a ON (a.id=l.invoice_id) + where a.id=ai.id) + ELSE 1 + END) / cr.rate as residual from account_invoice_line as ail left join account_invoice as ai ON (ai.id=ail.invoice_id) left join product_template pt on (pt.id=ail.product_id) |
