diff --git a/src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/DateAggregator.php b/src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/DateAggregator.php index 6dda268e2..1c2f02d3b 100644 --- a/src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/DateAggregator.php +++ b/src/Bundle/ChillActivityBundle/Export/Aggregator/ACPAggregators/DateAggregator.php @@ -34,31 +34,26 @@ class DateAggregator implements AggregatorInterface public function getLabels($key, array $values, $data) { return function ($value) use ($data): string { + if ($value === '_header') { + return 'by '. $data['frequency']; + } switch ($data['frequency']) { case 'month': - if ($value === '_header') { - return 'by month'; - } $month = \DateTime::createFromFormat('!m', $value); - return - sprintf("%02d", $value) .'/'. - $month->format('F') // TODO translation ?!? - ; + return sprintf( + "%02d (%s)", + $value, + $month->format('M') + ); case 'week': - if ($value === '_header') { - return 'by week'; - } - return $this->translator->trans('for week') .' '. $value ; + //return $this->translator->trans('for week') .' '. $value ; case 'year': - if ($value === '_header') { - return 'by year'; - } - return $this->translator->trans('in year') .' '. $value ; + //return $this->translator->trans('in year') .' '. $value ; default: - throw new RuntimeException(sprintf('The value %s is not valid', $value)); + return $value; } }; } @@ -91,34 +86,24 @@ class DateAggregator implements AggregatorInterface public function alterQuery(QueryBuilder $qb, $data) { + $order = null; + switch ($data['frequency']) { case 'month': - $qb - //->addSelect("TO_CHAR(activity.date,'Mon') AS MON") - ->addSelect('EXTRACT(month FROM activity.date) AS date_aggregator') - //->orderBy('date_aggregator') - ; - break; + $fmt = 'MM'; break; case 'week': - $qb - ->addSelect("TO_CHAR(activity.date, 'IW') AS date_aggregator") - //->orderBy('date_aggregator') - ; - break; + $fmt = 'IW'; break; case 'year': - $qb - //->addSelect("TO_CHAR(activity.date, 'YYYY') AS date_aggregator") - ->addSelect('EXTRACT(year FROM activity.date) AS date_aggregator') - //->orderBy('date_aggregator', 'ASC') - ; - break; + $fmt = 'YYYY'; $order = 'DESC'; break; default: throw new RuntimeException(sprintf("The frequency data '%s' is invalid.", $data['frequency'])); } + $qb->addSelect(sprintf("TO_CHAR(activity.date, '%s') AS date_aggregator", $fmt)); + $groupBy = $qb->getDQLPart('groupBy'); if (!empty($groupBy)) { @@ -126,6 +111,14 @@ class DateAggregator implements AggregatorInterface } else { $qb->groupBy('date_aggregator'); } + + $orderBy = $qb->getDQLPart('orderBy'); + + if (!empty($orderBy)) { + $qb->addOrderBy('date_aggregator', $order); + } else { + $qb->orderBy('date_aggregator', $order); + } } public function applyOn(): string