From 913eba1427598741fcfb8d1e53746923c1f9e0e4 Mon Sep 17 00:00:00 2001 From: Nik Okuntseff Date: Wed, 31 Oct 2018 17:08:48 +0000 Subject: [PATCH] Fixed date format in Totals only reports. --- WEB-INF/lib/ttReportHelper.class.php | 54 ++++++++++++++++++++-------- WEB-INF/templates/footer.tpl | 2 +- topdf.php | 2 +- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/WEB-INF/lib/ttReportHelper.class.php b/WEB-INF/lib/ttReportHelper.class.php index 3940a51b..7a4ba266 100644 --- a/WEB-INF/lib/ttReportHelper.class.php +++ b/WEB-INF/lib/ttReportHelper.class.php @@ -127,9 +127,7 @@ class ttReportHelper { $canViewReports = $user->can('view_reports') || $user->can('view_all_reports'); $isClient = $user->isClient(); - $no_grouping = ($options['group_by1'] == null || $options['group_by1'] == 'no_grouping') && - ($options['group_by2'] == null || $options['group_by2'] == 'no_grouping') && - ($options['group_by3'] == null || $options['group_by3'] == 'no_grouping'); + $grouping = ttReportHelper::grouping($options); $grouping_by_date = ($options['group_by1'] == 'date'|| $options['group_by2'] == 'date' || $options['group_by3'] == 'date'); $grouping_by_client = ($options['group_by1'] == 'client'|| $options['group_by2'] == 'client' || $options['group_by3'] == 'client'); $grouping_by_project = ($options['group_by1'] == 'project'|| $options['group_by2'] == 'project' || $options['group_by3'] == 'project'); @@ -311,14 +309,14 @@ class ttReportHelper { // Determine sort part. $sort_part = ' order by '; - if ($no_grouping) - $sort_part .= 'date'; - else { + if ($grouping) { $sort_part2 .= ($options['group_by1'] != null && $options['group_by1'] != 'no_grouping') ? ', '.$options['group_by1'] : ''; $sort_part2 .= ($options['group_by2'] != null && $options['group_by2'] != 'no_grouping') ? ', '.$options['group_by2'] : ''; $sort_part2 .= ($options['group_by3'] != null && $options['group_by3'] != 'no_grouping') ? ', '.$options['group_by3'] : ''; if (!$grouping_by_date) $sort_part2 .= ', date'; $sort_part .= ltrim($sort_part2, ', '); // Remove leading comma and space. + } else { + $sort_part .= 'date'; } if (($canViewReports || $isClient) && $options['users'] && !$grouping_by_user) $sort_part .= ', user, type'; @@ -349,7 +347,7 @@ class ttReportHelper { $val['expense'] = str_replace('.', $user->decimal_mark, $val['expense']); } - if (!$no_grouping) $val['grouped_by'] = ttReportHelper::makeGroupByKey($options, $val); + if ($grouping) $val['grouped_by'] = ttReportHelper::makeGroupByKey($options, $val); $val['date'] = ttDateToUserFormat($val['date']); $report_items[] = $val; @@ -476,14 +474,15 @@ class ttReportHelper { // $val['group_field'] = ttDateToUserFormat($val['group_field']); // } $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']); } - $subtotals[$val['group_field']] = array('name'=>$val['group_field'],'time'=>$time, 'units'=> $val['units'], 'cost'=>$val['cost'],'expenses'=>$val['expenses']); + $subtotals[$val['group_field']] = array('name'=>$rowLabel,'time'=>$time, 'units'=> $val['units'], 'cost'=>$val['cost'],'expenses'=>$val['expenses']); } else - $subtotals[$val['group_field']] = array('name'=>$val['group_field'],'time'=>$time, 'units'=> $val['units']); + $subtotals[$val['group_field']] = array('name'=>$rowLabel,'time'=>$time, 'units'=> $val['units']); } return $subtotals; @@ -1074,10 +1073,7 @@ class ttReportHelper { // makeGroupByPart builds a combined group by part for sql query for time items using group_by1, // group_by2, and group_by3 values passed in $options. static function makeGroupByPart($options) { - $no_grouping = ($options['group_by1'] == null || $options['group_by1'] == 'no_grouping') && - ($options['group_by2'] == null || $options['group_by2'] == 'no_grouping') && - ($options['group_by3'] == null || $options['group_by3'] == 'no_grouping'); - if ($no_grouping) return null; + if (!ttReportHelper::grouping($options)) return null; $group_by1 = $options['group_by1']; $group_by2 = $options['group_by2']; @@ -1411,7 +1407,7 @@ class ttReportHelper { return $group_by_fields; } - // grouping determines if we are grooping the project by either group_by1, + // grouping determines if we are grouping the report by either group_by1, // group_by2, or group_by3 values passed in $options. static function grouping($options) { $grouping = ($options['group_by1'] != null && $options['group_by1'] != 'no_grouping') || @@ -1426,6 +1422,16 @@ class ttReportHelper { return false; } + + // groupingBy determines if we are grouping a report by a value of $what + // ('user', 'project', etc.) by checking group_by1, group_by2, and group_by3 + // values passed in $options. + static function groupingBy($what, $options) { + $grouping = ($options['group_by1'] != null && $options['group_by1'] != $what) || + ($options['group_by2'] != null && $options['group_by2'] != $what) || + ($options['group_by3'] != null && $options['group_by3'] != $what); + return $grouping; + } // makeGroupByHeader builds a column header for a totals-only report using group_by1, // group_by2, and group_by3 values passed in $options. @@ -1471,4 +1477,24 @@ class ttReportHelper { $group_by_header = ltrim($group_by_header, ' -'); return $group_by_header; } + + // makeGroupByLabel builds a label for one row in a "Totals only" report of grouped by items. + // It does one thing: if we are grouping by date, the date format is converted for user. + static function makeGroupByLabel($key, $options) { + if (!ttReportHelper::groupingBy('date', $options)) + return $key; // No need to format. + + global $user; + if ($user->date_format == DB_DATEFORMAT) + return $key; // No need to format. + + $label = $key; + if (preg_match('/\d\d\d\d-\d\d-\d\d/', $key, $matches)) { + // Replace the first found match of a date in DB_DATEFORMAT. + // This is not entirely clean but better than nothing for a label in a row. + $userDate = ttDateToUserFormat($matches[0]); + $label = str_replace($matches[0], $userDate, $key); + } + return $label; + } } diff --git a/WEB-INF/templates/footer.tpl b/WEB-INF/templates/footer.tpl index bc3b468e..d8a4447f 100644 --- a/WEB-INF/templates/footer.tpl +++ b/WEB-INF/templates/footer.tpl @@ -12,7 +12,7 @@
-
 Anuko Time Tracker 1.18.03.4337 | Copyright © Anuko | +  Anuko Time Tracker 1.18.04.4338 | Copyright © Anuko | {$i18n.footer.credits} | {$i18n.footer.license} | {$i18n.footer.improve} diff --git a/topdf.php b/topdf.php index 0040c7be..23f29d50 100644 --- a/topdf.php +++ b/topdf.php @@ -66,7 +66,7 @@ $totals_only = ($bean->getAttribute('chtotalsonly') == '1'); $options = ttReportHelper::getReportOptions($bean); if (!$totals_only) $items = ttReportHelper::getItems($options); // Individual entries. -if ($totals_only || 'no_grouping' != $group_by1) +if ($totals_only || ttReportHelper::grouping($options)) $subtotals = ttReportHelper::getSubtotals($options); // Subtotals for groups of items. $totals = ttReportHelper::getTotals($options); // Totals for the entire report. -- 2.20.1