1414namespace Sylius \Component \Core \Dashboard ;
1515
1616use Doctrine \ORM \EntityManagerInterface ;
17+ use Doctrine \ORM \EntityRepository ;
1718use Sylius \Component \Core \Model \ChannelInterface ;
19+ use Sylius \Component \Core \OrderPaymentStates ;
1820use Sylius \Component \Core \Repository \OrderRepositoryInterface ;
1921
2022/**
@@ -25,7 +27,7 @@ final class SalesDataProvider implements SalesDataProviderInterface
2527 /** @var EntityManagerInterface */
2628 private $ entityManager ;
2729
28- /** @var OrderRepositoryInterface */
30+ /** @var OrderRepositoryInterface|EntityRepository */
2931 private $ orderRepository ;
3032
3133 public function __construct (EntityManagerInterface $ entityManager , OrderRepositoryInterface $ orderRepository )
@@ -41,15 +43,21 @@ public function getLastYearSalesSummary(ChannelInterface $channel): SalesSummary
4143 $ endDate = (new \DateTime ('last day of this month ' ));
4244 $ endDate ->setTime (23 , 59 , 59 );
4345
44- $ qb = $ this ->orderRepository ->createQueryBuilder ('so ' );
45- $ qb ->select ($ this ->getSelectStatement ())
46- ->where ($ qb ->expr ()->eq ('so.channel ' , ':channel ' ))
47- ->andWhere ('so.checkoutCompletedAt BETWEEN :startDate AND :endDate ' )
46+ /** @psalm-suppress PossiblyUndefinedMethod */
47+ $ queryBuilder = $ this ->orderRepository ->createQueryBuilder ('o ' )
48+ ->select ("DATE_FORMAT(o.checkoutCompletedAt, '%m.%y') AS date " )
49+ ->addSelect ("SUM(o.total) as total " )
50+ ->where ('o.channel = :channel ' )
51+ ->andWhere ('o.checkoutCompletedAt >= :startDate ' )
52+ ->andWhere ('o.checkoutCompletedAt <= :endDate ' )
53+ ->andWhere ('o.paymentState = :state ' )
4854 ->groupBy ('date ' )
4955 ->setParameter ('channel ' , $ channel )
5056 ->setParameter ('startDate ' , $ startDate )
51- ->setParameter ('endDate ' , $ endDate );
52- $ result = $ qb ->getQuery ()->getScalarResult ();
57+ ->setParameter ('endDate ' , $ endDate )
58+ ->setParameter ('state ' , OrderPaymentStates::STATE_PAID )
59+ ;
60+ $ result = $ queryBuilder ->getQuery ()->getScalarResult ();
5361
5462 $ data = [];
5563 foreach ($ result as $ item ) {
@@ -62,20 +70,4 @@ public function getLastYearSalesSummary(ChannelInterface $channel): SalesSummary
6270 $ data
6371 );
6472 }
65-
66- /**
67- * add DATE_FORMAT support for postgres by using
68- * DoctrineExtensions\Query\Postgresql\DateFormat in doctrine configuration
69- *
70- * @return string
71- */
72- private function getSelectStatement ()
73- {
74- $ dateFormat = '%m.%y ' ;
75- if ($ this ->entityManager ->getConnection ()->getDatabasePlatform ()->getName () == 'postgresql ' ) {
76- $ dateFormat = 'mm.yyyy ' ;
77- }
78-
79- return "DATE_FORMAT(so.checkoutCompletedAt, ' " . $ dateFormat . "') AS date, SUM(so.total) as total " ;
80- }
8173}
0 commit comments