- // Our query is different depending on tracking mode.
- if (MODE_TIME == $user->getTrackingMode()) {
- // In "time only" tracking mode there is a single user rate.
- $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.user_id = u.id and l.group_id = $group_id and l.org_id = $org_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";
-
- // When we have projects, rates are defined for each project in tt_user_project_binds table.
- $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.group_id = $group_id and l.org_id = $org_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.
- }
+ $sql = "select count(*) as num from tt_log".
+ " where status = 1 $client_part $project_part and timesheet_id is null".
+ " and date >= ".$mdb2->quote($start)." and date <= ".$mdb2->quote($end).
+ " and user_id = $user_id and group_id = $group_id and org_id = $org_id";