コード例 #1
0
ファイル: CustomerDataProvider.php プロジェクト: antrampa/crm
 /**
  * @param ChartViewBuilder $viewBuilder
  * @param array            $dateRange
  *
  * @return ChartView
  */
 public function getNewCustomerChartView(ChartViewBuilder $viewBuilder, $dateRange)
 {
     /** @var CustomerRepository $customerRepository */
     $customerRepository = $this->registry->getRepository('OroCRMMagentoBundle:Customer');
     /** @var ChannelRepository $channelRepository */
     $channelRepository = $this->registry->getRepository('OroCRMChannelBundle:Channel');
     list($past, $now) = $this->dateHelper->getPeriod($dateRange, 'OroCRMMagentoBundle:Customer', 'createdAt');
     $items = [];
     // get all integration channels
     $channels = $channelRepository->getAvailableChannelNames($this->aclHelper, ChannelType::TYPE);
     $channelIds = array_keys($channels);
     $dates = $this->dateHelper->getDatePeriod($past, $now);
     $data = $customerRepository->getGroupedByChannelArray($this->aclHelper, $this->dateHelper, $past, $now, $channelIds);
     foreach ($data as $row) {
         $key = $this->dateHelper->getKey($past, $now, $row);
         $channelId = (int) $row['channelId'];
         $channelName = $channels[$channelId]['name'];
         if (!isset($items[$channelName])) {
             $items[$channelName] = $dates;
         }
         if (isset($items[$channelName][$key])) {
             $items[$channelName][$key]['cnt'] = (int) $row['cnt'];
         }
     }
     // restore default keys
     foreach ($items as $channelName => $item) {
         $items[$channelName] = array_values($item);
     }
     $chartOptions = array_merge_recursive(['name' => 'multiline_chart'], $this->configProvider->getChartConfig('new_web_customers'));
     $chartType = $this->dateHelper->getFormatStrings($past, $now)['viewType'];
     $chartOptions['data_schema']['label']['type'] = $chartType;
     $chartOptions['data_schema']['label']['label'] = sprintf('oro.dashboard.chart.%s.label', $chartType);
     return $viewBuilder->setOptions($chartOptions)->setArrayData($items)->getView();
 }
コード例 #2
0
ファイル: OrderRepository.php プロジェクト: antrampa/crm
 /**
  * @param AclHelper  $aclHelper
  * @param \DateTime  $dateFrom
  * @param \DateTime  $dateTo
  * @param DateHelper $dateHelper
  * @return array
  */
 public function getAverageOrderAmount(AclHelper $aclHelper, \DateTime $dateFrom, \DateTime $dateTo, DateHelper $dateHelper)
 {
     /** @var EntityManager $entityManager */
     $entityManager = $this->getEntityManager();
     $channels = $entityManager->getRepository('OroCRMChannelBundle:Channel')->getAvailableChannelNames($aclHelper, ChannelType::TYPE);
     // execute data query
     $queryBuilder = $this->createQueryBuilder('o');
     $selectClause = '
         IDENTITY(o.dataChannel) AS dataChannelId,
         AVG(
             CASE WHEN o.subtotalAmount IS NOT NULL THEN o.subtotalAmount ELSE 0 END -
             CASE WHEN o.discountAmount IS NOT NULL THEN ABS(o.discountAmount) ELSE 0 END
         ) as averageOrderAmount';
     $dates = $dateHelper->getDatePeriod($dateFrom, $dateTo);
     $queryBuilder->select($selectClause)->andWhere($queryBuilder->expr()->between('o.createdAt', ':dateStart', ':dateEnd'))->setParameter('dateStart', $dateFrom)->setParameter('dateEnd', $dateTo)->groupBy('dataChannelId');
     $this->applyActiveChannelLimitation($queryBuilder);
     $dateHelper->addDatePartsSelect($dateFrom, $dateTo, $queryBuilder, 'o.createdAt');
     $amountStatistics = $aclHelper->apply($queryBuilder)->getArrayResult();
     $items = [];
     foreach ($amountStatistics as $row) {
         $key = $dateHelper->getKey($dateFrom, $dateTo, $row);
         $channelId = (int) $row['dataChannelId'];
         $channelName = $channels[$channelId]['name'];
         if (!isset($items[$channelName])) {
             $items[$channelName] = $dates;
         }
         $items[$channelName][$key]['amount'] = (double) $row['averageOrderAmount'];
     }
     // restore default keys
     foreach ($items as $channelName => $item) {
         $items[$channelName] = array_values($item);
     }
     return $items;
 }
コード例 #3
0
ファイル: DateHelperTest.php プロジェクト: Maksold/platform
 /**
  * @dataProvider datePeriodProvider
  */
 public function testGetDatePeriod($start, $end, $expects)
 {
     $start = new \DateTime($start, new \DateTimeZone('UTC'));
     $end = new \DateTime($end, new \DateTimeZone('UTC'));
     $this->assertEquals($expects, $this->helper->getDatePeriod($start, $end));
 }