]> wagnertech.de Git - timetracker.git/blobdiff - WEB-INF/lib/ttReportHelper.class.php
Some more refactoring.
[timetracker.git] / WEB-INF / lib / ttReportHelper.class.php
index 90a4a98c36f013e75462e92275ab58b495ba6deb..068ae9db62b71fc18a56d725fb002c71fd4b3132 100644 (file)
@@ -407,50 +407,44 @@ class ttReportHelper {
   // With expenses, it becomes a select with group by from a combined set of records obtained with "union all".
   static function getSubtotals($options) {
     global $user;
-
     $mdb2 = getConnection();
 
     $concat_part = ttReportHelper::makeConcatPart($options);
     $join_part = ttReportHelper::makeJoinPart($options);
+
+    // TODO: Consider moving this block out into a separate function.
+    $workUnits = $options['show_work_units'];
+    if ($workUnits) {
+      $unitTotalsOnly = $user->getConfigOption('unit_totals_only');
+      $firstUnitThreshold = $user->getConfigInt('1st_unit_threshold');
+      $minutesInUnit = $user->getConfigInt('minutes_in_unit', 15);
+      if ($unitTotalsOnly)
+        $work_unit_part = ", if (sum(l.billable * time_to_sec(l.duration)/60) < $firstUnitThreshold, 0, ceil(sum(l.billable * time_to_sec(l.duration)/60/$minutesInUnit))) as units";
+      else
+        $work_unit_part = ", sum(if(l.billable = 0 or time_to_sec(l.duration)/60 < $firstUnitThreshold, 0, ceil(time_to_sec(l.duration)/60/$minutesInUnit))) as units";
+    }
+    // End of TODO.
+
     $where = ttReportHelper::getWhere($options);
     $group_by_part = ttReportHelper::makeGroupByPart($options);
     if ($options['show_cost']) {
-      if (MODE_TIME == $user->tracking_mode) {
+      if (MODE_TIME == $user->getTrackingMode()) {
         if (!ttReportHelper::groupingBy('user', $options))
           $left_join = 'left join tt_users u on (l.user_id = u.id)';
-        $sql = "select $concat_part, sum(time_to_sec(l.duration)) as time";
-        if ($options['show_work_units']) {
-          if ($user->unit_totals_only)
-            $sql .= ", if (sum(l.billable * time_to_sec(l.duration)/60) < $user->first_unit_threshold, 0, ceil(sum(l.billable * time_to_sec(l.duration)/60/$user->minutes_in_unit))) as units";
-          else
-            $sql .= ", sum(if(l.billable = 0 or time_to_sec(l.duration)/60 < $user->first_unit_threshold, 0, ceil(time_to_sec(l.duration)/60/$user->minutes_in_unit))) as units";
-        }
+        $sql = "select $concat_part, sum(time_to_sec(l.duration)) as time".$work_unit_part;
         $sql .= ", sum(cast(l.billable * coalesce(u.rate, 0) * time_to_sec(l.duration)/3600 as decimal(10, 2))) as cost,
           null as expenses from tt_log l
           $join_part $left_join $where $group_by_part";
       } else {
         // If we are including cost and tracking projects, our query (the same as above) needs to join the tt_user_project_binds table.
-        $sql = "select $concat_part, sum(time_to_sec(l.duration)) as time";
-        if ($options['show_work_units']) {
-          if ($user->unit_totals_only)
-            $sql .= ", if (sum(l.billable * time_to_sec(l.duration)/60) < $user->first_unit_threshold, 0, ceil(sum(l.billable * time_to_sec(l.duration)/60/$user->minutes_in_unit))) as units";
-          else
-            $sql .= ", sum(if(l.billable = 0 or time_to_sec(l.duration)/60 < $user->first_unit_threshold, 0, ceil(time_to_sec(l.duration)/60/$user->minutes_in_unit))) as units";
-        }
+        $sql = "select $concat_part, sum(time_to_sec(l.duration)) as time".$work_unit_part;
         $sql .= ", sum(cast(l.billable * coalesce(upb.rate, 0) * time_to_sec(l.duration)/3600 as decimal(10,2))) as cost,
           null as expenses from tt_log l 
           $join_part
           left join tt_user_project_binds upb on (l.user_id = upb.user_id and l.project_id = upb.project_id) $where $group_by_part";
       }
     }  else {
-      // $sql = "select $group_field as group_field, sum(time_to_sec(l.duration)) as time";
-      $sql = "select $concat_part, sum(time_to_sec(l.duration)) as time";
-      if ($options['show_work_units']) {
-        if ($user->unit_totals_only)
-          $sql .= ", if (sum(l.billable * time_to_sec(l.duration)/60) < $user->first_unit_threshold, 0, ceil(sum(l.billable * time_to_sec(l.duration)/60/$user->minutes_in_unit))) as units";
-        else
-          $sql .= ", sum(if(l.billable = 0 or time_to_sec(l.duration)/60 < $user->first_unit_threshold, 0, ceil(time_to_sec(l.duration)/60/$user->minutes_in_unit))) as units";
-      }
+      $sql = "select $concat_part, sum(time_to_sec(l.duration)) as time".$work_unit_part;
       $sql .= ", null as expenses from tt_log l 
         $join_part $where $group_by_part";
     }
@@ -482,9 +476,10 @@ class ttReportHelper {
       $time = $val['time'] ? sec_to_time_fmt_hm($val['time']) : null;
       $rowLabel = ttReportHelper::makeGroupByLabel($val['group_field'], $options);
       if ($options['show_cost']) {
-        if ('.' != $user->decimal_mark) {
-          $val['cost'] = str_replace('.', $user->decimal_mark, $val['cost']);
-          $val['expenses'] = str_replace('.', $user->decimal_mark, $val['expenses']);
+        $decimalMark = $user->getDecimalMark();
+        if ('.' != $decimalMark) {
+          $val['cost'] = str_replace('.', $decimalMark, $val['cost']);
+          $val['expenses'] = str_replace('.', $decimalMark, $val['expenses']);
         }
         $subtotals[$val['group_field']] = array('name'=>$rowLabel,'user'=>$val['user'],'project'=>$val['project'],'task'=>$val['task'],'client'=>$val['client'],'cf_1'=>$val['cf_1'],'time'=>$time,'units'=> $val['units'],'cost'=>$val['cost'],'expenses'=>$val['expenses']);
       } else