Improved a comment.
[timetracker.git] / WEB-INF / lib / ttInvoiceHelper.class.php
index aecafbd..b7d2cc2 100644 (file)
@@ -129,7 +129,7 @@ class ttInvoiceHelper {
     }
 
     // If we have expenses, we need to do a union with a separate query for expense items from tt_expense_items table.
-    if (in_array('ex', explode(',', $user->plugins))) { // if ex(penses) plugin is enabled
+    if ($user->isPluginEnabled('ex')) {
       $sql_for_expense_items = "select ei.date as date, 2 as type, u.name as user_name, p.name as project_name,
         null as task_name, ei.name as note,
         null as duration, ei.cost as cost from tt_expense_items ei
@@ -211,8 +211,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 +221,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 +299,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 +310,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'))
@@ -336,7 +348,7 @@ class ttInvoiceHelper {
     foreach($invoice_items as $item)
       $subtotal += $item['cost'];
     if ($tax_percent) {
-      $tax_expenses = in_array('et', explode(',', $user->plugins));
+      $tax_expenses = $user->isPluginEnabled('et');
       foreach($invoice_items as $item) {
         if ($item['type'] == 2 && !$tax_expenses)
           continue;
@@ -423,7 +435,9 @@ class ttInvoiceHelper {
     $body .= '</table>';
 
     // Output footer.
-    $body .= '<p style="text-align: center;">'.$i18n->getKey('form.mail.footer').'</p>';
+    if (!defined('REPORT_FOOTER') || !(REPORT_FOOTER == false))
+      $body .= '<p style="text-align: center;">'.$i18n->getKey('form.mail.footer').'</p>';
+
     // Finish creating email body.
     $body .= '</body></html>';