diff --git a/api/src/Service/BarChartService.php b/api/src/Service/BarChartService.php index 67b6ffa103de1ce0f030d42acfdabf0a780fcca7..19789fa46ef7fcb9f1dd4e09c9480d1c79ad7372 100644 --- a/api/src/Service/BarChartService.php +++ b/api/src/Service/BarChartService.php @@ -13,13 +13,7 @@ class BarChartService public function __construct(EntityManagerInterface $entityManager) { - $this->entityManager = $entityManager; - $emConfig = $this->entityManager->getConfiguration(); - $emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Postgresql\Year'); - $emConfig->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\Query\Postgresql\Month'); - $emConfig->addCustomDatetimeFunction('DATE_FORMAT', 'DoctrineExtensions\Query\Postgresql\DateFormat'); - } public function getBarChartData(BarChartInput $input): array @@ -30,27 +24,18 @@ class BarChartService $queryBuilder = $this->entityManager->createQueryBuilder(); $output = []; - if($input->granularity == 'month'){ + if ($input->granularity == 'month') { $result = $queryBuilder - ->select( 'YEAR(s.date) as year', 'MONTH(s.date) as month' ,'COUNT(s.id) as occurrences') + ->select('YEAR(s.date) as year', 'MONTH(s.date) as month', 'COUNT(s.id) as occurrences') ->from(Sale::class, 's') ->where('s.date BETWEEN :start AND :end') - ->setParameter('start', $startDate->format('Y-m-d')) - ->setParameter('end', $endDate->format('Y-m-d')) - ->groupBy("year","month") - ->orderBy("year") + ->setParameter('start', $startDate) + ->setParameter('end', $endDate) + ->groupBy('year', 'month') + ->orderBy('year') ->getQuery() ->getResult(); - - foreach ($result as $row) { - $month = $row['month']; - $year = $row['year']; - $dateString = $year . '-' . str_pad($month, 2, '0', STR_PAD_LEFT); - $output[] = new BarChartOutput($dateString, (int)$row['occurrences']); - } - - } else - { + } else { switch ($input->granularity) { case 'day': $groupByExpression = 's.date'; @@ -65,23 +50,32 @@ class BarChartService default: throw new \InvalidArgumentException('Invalid granularity'); } + $result = $queryBuilder ->select("{$groupByExpression} as {$groupByAlias}", 'COUNT(s.id) as occurrences') ->from(Sale::class, 's') ->where('s.date BETWEEN :start AND :end') - ->setParameter('start', $startDate->format('Y-m-d')) - ->setParameter('end', $endDate->format('Y-m-d')) + ->setParameter('start', $startDate) + ->setParameter('end', $endDate) ->groupBy("{$groupByAlias}") ->orderBy("{$groupByAlias}") ->getQuery() ->getResult(); + } - foreach ($result as $row) { + foreach ($result as $row) { + if ($input->granularity == 'month') { + $month = $row['month']; + $year = $row['year']; + $dateString = $year . '-' . str_pad($month, 2, '0', STR_PAD_LEFT); + } else { $dateString = $row[$groupByAlias] instanceof \DateTimeInterface ? $row[$groupByAlias]->format($dateFormat) : $row[$groupByAlias]; - $output[] = new BarChartOutput($dateString, (int)$row['occurrences']); } + + $output[] = new BarChartOutput($dateString, (int)$row['occurrences']); } + return $output; } - } +