Pass revenues in stats response

[MAILPOET-3069]
This commit is contained in:
Pavel Dohnal
2020-08-10 10:58:57 +02:00
committed by Veljko V
parent 24c5ff8cb1
commit 58eb27457c
4 changed files with 72 additions and 4 deletions

View File

@ -6,12 +6,25 @@ use MailPoet\Doctrine\Repository;
use MailPoet\Entities\StatisticsClickEntity;
use MailPoet\Entities\StatisticsNewsletterEntity;
use MailPoet\Entities\StatisticsOpenEntity;
use MailPoet\Entities\StatisticsWooCommercePurchaseEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Newsletter\Statistics\WooCommerceRevenue;
use MailPoet\WooCommerce\Helper as WCHelper;
use MailPoetVendor\Doctrine\ORM\EntityManager;
/**
* @extends Repository<SubscriberEntity>
*/
class SubscriberStatisticsRepository extends Repository {
/** @var WCHelper */
private $wcHelper;
public function __construct(EntityManager $entityManager, WCHelper $wcHelper) {
parent::__construct($entityManager);
$this->wcHelper = $wcHelper;
}
protected function getEntityClassName() {
return SubscriberEntity::class;
}
@ -20,7 +33,8 @@ class SubscriberStatisticsRepository extends Repository {
return new SubscriberStatistics(
$this->getStatisticsClickCount($subscriber),
$this->getStatisticsOpenCount($subscriber),
$this->getTotalSentCount($subscriber)
$this->getTotalSentCount($subscriber),
$this->getWooCommerceRevenue($subscriber)
);
}
@ -45,4 +59,29 @@ class SubscriberStatisticsRepository extends Repository {
->getQuery()
->getSingleScalarResult();
}
private function getWooCommerceRevenue(SubscriberEntity $subscriber) {
if (!$this->wcHelper->isWooCommerceActive()) {
return null;
}
$currency = $this->wcHelper->getWoocommerceCurrency();
$result = $this->entityManager
->createQueryBuilder()
->select('SUM(stats.orderPriceTotal) AS total, COUNT(stats.id) AS cnt')
->from(StatisticsWooCommercePurchaseEntity::class, 'stats')
->where('stats.subscriber = :subscriber')
->andWhere('stats.orderCurrency = :currency')
->setParameter('subscriber', $subscriber)
->setParameter('currency', $currency)
->getQuery()
->getSingleResult();
return new WooCommerceRevenue(
$currency,
(float)$result['total'],
(int)$result['cnt'],
$this->wcHelper
);
}
}