Some refactoring of work units for subgroups.
authorNik Okuntseff <support@anuko.com>
Sat, 15 Dec 2018 13:41:44 +0000 (13:41 +0000)
committerNik Okuntseff <support@anuko.com>
Sat, 15 Dec 2018 13:41:44 +0000 (13:41 +0000)
WEB-INF/lib/ttConfigHelper.class.php
WEB-INF/lib/ttGroup.class.php
WEB-INF/lib/ttReportHelper.class.php
WEB-INF/lib/ttUser.class.php
WEB-INF/templates/footer.tpl

index 6790e21..33e94e5 100644 (file)
@@ -73,7 +73,7 @@ class ttConfigHelper {
   }
 
   // The getIntValue parses an integer value from the source config array.
-  function getIntValue($name) {
+  function getIntValue($name, $defaultVal = 0) {
     $name_with_colon = $name.':';
     $len = strlen($name_with_colon);
 
@@ -87,7 +87,7 @@ class ttConfigHelper {
         }
       }
     }
-    return false;
+    return $defaultVal;
   }
 
   // The setIntValue sets an integer value into config array.
index f85f909..f450a4e 100644 (file)
@@ -116,8 +116,6 @@ class ttGroup {
       if ($this->isPluginEnabled('wu')) {
         $minutes_in_unit = $config->getIntValue('minutes_in_unit');
         if ($minutes_in_unit) $this->minutes_in_unit = $minutes_in_unit;
-        $first_unit_threshold = $config->getIntValue('1st_unit_threshold');
-        if ($first_unit_threshold) $this->first_unit_threshold = $first_unit_threshold;
         $this->unit_totals_only = $config->getDefinedValue('unit_totals_only');
       }
       */
index 90a4a98..8e8b312 100644 (file)
@@ -407,7 +407,6 @@ 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);
@@ -415,15 +414,23 @@ class ttReportHelper {
     $where = ttReportHelper::getWhere($options);
     $group_by_part = ttReportHelper::makeGroupByPart($options);
     if ($options['show_cost']) {
-      if (MODE_TIME == $user->tracking_mode) {
+
+      $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 (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";
+        if ($workUnits) {
+          if ($unitTotalsOnly)
+            $sql .= ", 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
-            $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 .= ", sum(if(l.billable = 0 or time_to_sec(l.duration)/60 < $firstUnitThreshold, 0, ceil(time_to_sec(l.duration)/60/$minutesInUnit))) as units";
         }
         $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
@@ -431,11 +438,11 @@ class ttReportHelper {
       } 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";
+        if ($workUnits) {
+          if ($unitTotalsOnly)
+            $sql .= ", 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
-            $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 .= ", sum(if(l.billable = 0 or time_to_sec(l.duration)/60 < $firstUnitThreshold, 0, ceil(time_to_sec(l.duration)/60/$minutesInUnit))) as units";
         }
         $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 
@@ -445,11 +452,11 @@ class ttReportHelper {
     }  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";
+      if ($workUnits) {
+        if ($unitTotalsOnly)
+          $sql .= ", 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
-          $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 .= ", sum(if(l.billable = 0 or time_to_sec(l.duration)/60 < $firstUnitThreshold, 0, ceil(time_to_sec(l.duration)/60/$minutesInUnit))) as units";
       }
       $sql .= ", null as expenses from tt_log l 
         $join_part $where $group_by_part";
@@ -482,9 +489,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
index a95fa72..9de260b 100644 (file)
@@ -144,7 +144,7 @@ class ttUser {
       $this->allow_overlap = $config->getDefinedValue('allow_overlap');
       $this->future_entries = $config->getDefinedValue('future_entries');
       if ($this->isPluginEnabled('wu')) {
-        $minutes_in_unit = $config->getIntValue('minutes_in_unit');
+        $minutes_in_unit = $config->getIntValue('minutes_in_unit', 15);
         if ($minutes_in_unit) $this->minutes_in_unit = $minutes_in_unit;
         $first_unit_threshold = $config->getIntValue('1st_unit_threshold');
         if ($first_unit_threshold) $this->first_unit_threshold = $first_unit_threshold;
@@ -236,9 +236,9 @@ class ttUser {
   }
 
   // getConfigInt retruns an integer value defined in a group, or false.
-  function getConfigInt($name) {
+  function getConfigInt($name, $defaultVal) {
     $config = new ttConfigHelper($this->getConfig());
-    return $config->getIntValue($name);
+    return $config->getIntValue($name, $defaultVal);
   }
 
   // can - determines whether user has a right to do something.
index e94e90f..63b1c9c 100644 (file)
@@ -12,7 +12,7 @@
       <br>
       <table cellspacing="0" cellpadding="4" width="100%" border="0">
         <tr>
-          <td align="center">&nbsp;Anuko Time Tracker 1.18.31.4653 | Copyright &copy; <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
+          <td align="center">&nbsp;Anuko Time Tracker 1.18.31.4654 | Copyright &copy; <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
             <a href="https://www.anuko.com/lp/tt_4.htm" target="_blank">{$i18n.footer.credits}</a> |
             <a href="https://www.anuko.com/lp/tt_5.htm" target="_blank">{$i18n.footer.license}</a> |
             <a href="https://www.anuko.com/lp/tt_7.htm" target="_blank">{$i18n.footer.improve}</a>