/**
  * @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();
 }
Exemple #2
0
 /**
  * @param ChartViewBuilder $viewBuilder
  * @param array            $dateRange
  *
  * @return ChartView
  */
 public function getRevenueOverTimeChartView(ChartViewBuilder $viewBuilder, array $dateRange)
 {
     /* @var $from DateTime */
     /* @var $to DateTime */
     list($from, $to) = $this->dateHelper->getPeriod($dateRange, 'OroCRMMagentoBundle:Order', 'createdAt');
     $orderRepository = $this->getOrderRepository();
     $result = $orderRepository->getRevenueOverTime($this->aclHelper, $this->dateHelper, $from, $to);
     $items = $this->dateHelper->convertToCurrentPeriod($from, $to, $result, 'amount', 'amount');
     $previousFrom = $this->createPreviousFrom($from, $to);
     $previousResult = $orderRepository->getRevenueOverTime($this->aclHelper, $this->dateHelper, $previousFrom, $from);
     $previousItems = $this->dateHelper->combinePreviousDataWithCurrentPeriod($previousFrom, $from, $previousResult, 'amount', 'amount');
     $chartType = $this->dateHelper->getFormatStrings($from, $to)['viewType'];
     $data = [$this->createPeriodLabel($previousFrom, $from) => $previousItems, $this->createPeriodLabel($from, $to) => $items];
     return $this->createPeriodChartView($viewBuilder, 'revenue_over_time_chart', $chartType, $data);
 }