X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=WEB-INF%2Flib%2FttInvoiceHelper.class.php;h=2784a7b91b8ebd04265225ddedcade6da6e43988;hb=294895b702e4c5cb5bfc87292c464bed201f296b;hp=b5a3c59ec831ee87cb83253281fd45fd37c61440;hpb=7ddf5c391598126ec473db7b25884ee0bd94f153;p=timetracker.git diff --git a/WEB-INF/lib/ttInvoiceHelper.class.php b/WEB-INF/lib/ttInvoiceHelper.class.php index b5a3c59e..2784a7b9 100644 --- a/WEB-INF/lib/ttInvoiceHelper.class.php +++ b/WEB-INF/lib/ttInvoiceHelper.class.php @@ -99,7 +99,6 @@ class ttInvoiceHelper { // The getInvoiceItems retrieves tt_log items associated with the invoice. static function getInvoiceItems($invoice_id) { global $user; - global $i18n; $mdb2 = getConnection(); // At this time only detailed invoice is supported. @@ -211,8 +210,8 @@ class ttInvoiceHelper { $sql = "select count(*) as num from tt_log l, tt_users u where l.status = 1 and l.client_id = $client_id and l.invoice_id is NULL and l.date >= ".$mdb2->quote($start)." and l.date <= ".$mdb2->quote($end)." - and l.billable * u.rate * time_to_sec(l.duration)/3600 > 0 - and l.user_id = u.id"; + and l.user_id = u.id + and l.billable = 1"; // l.billable * u.rate * time_to_sec(l.duration)/3600 > 0 // See explanation below. } else { // sql part for project id. if ($project_id) $project_part = " and l.project_id = $project_id"; @@ -221,8 +220,14 @@ class ttInvoiceHelper { $sql = "select count(*) as num from tt_log l, tt_user_project_binds upb where l.status = 1 and l.client_id = $client_id $project_part and l.invoice_id is NULL and l.date >= ".$mdb2->quote($start)." and l.date <= ".$mdb2->quote($end)." - and l.billable * upb.rate * time_to_sec(l.duration)/3600 > 0 - and upb.user_id = l.user_id and upb.project_id = l.project_id"; + and upb.user_id = l.user_id and upb.project_id = l.project_id + and l.billable = 1"; // l.billable * upb.rate * time_to_sec(l.duration)/3600 > 0 + // Users with a lot of clients and projects (Jaro) may forget to set user rates properly. + // Specifically, user rate may be set to 0 on a project, by mistake. This leads to error.no_invoiceable_items + // and increased support cost. Commenting out allows us to include 0 cost items in invoices so that + // the problem becomes obvious. + + // TODO: If the above turns out useful, rework the query to simplify it by removing left join. } $res = $mdb2->query($sql); if (!is_a($res, 'PEAR_Error')) { @@ -293,7 +298,7 @@ class ttInvoiceHelper { set l.invoice_id = $last_id where l.status = 1 and l.client_id = $client_id and l.invoice_id is NULL and l.date >= ".$mdb2->quote($start)." and l.date <= ".$mdb2->quote($end)." - and l.billable * u.rate * time_to_sec(l.duration)/3600 > 0"; + and l.billable = 1"; // l.billable * u.rate * time_to_sec(l.duration)/3600 > 0"; // See explanation below. } else { // sql part for project id. if ($project_id) $project_part = " and l.project_id = $project_id"; @@ -304,7 +309,13 @@ class ttInvoiceHelper { set l.invoice_id = $last_id where l.status = 1 and l.client_id = $client_id $project_part and l.invoice_id is NULL and l.date >= ".$mdb2->quote($start)." and l.date <= ".$mdb2->quote($end)." - and l.billable * upb.rate * time_to_sec(l.duration)/3600 > 0"; + and l.billable = 1"; // l.billable * upb.rate * time_to_sec(l.duration)/3600 > 0"; + // Users with a lot of clients and projects (Jaro) may forget to set user rates properly. + // Specifically, user rate may be set to 0 on a project, by mistake. This leads to error.no_invoiceable_items + // and increased support cost. Commenting out allows us to include 0 cost items in invoices so that + // the problem becomes obvious. + + // TODO: If the above turns out useful, rework the query to simplify it by removing left join. } $affected = $mdb2->exec($sql); if (is_a($affected, 'PEAR_Error')) @@ -423,7 +434,9 @@ class ttInvoiceHelper { $body .= ''; // Output footer. - $body .= '

'.$i18n->getKey('form.mail.footer').'

'; + if (!defined('REPORT_FOOTER') || !(REPORT_FOOTER == false)) + $body .= '

'.$i18n->getKey('form.mail.footer').'

'; + // Finish creating email body. $body .= '';