/** * @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(); }
/** * @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); }