Ejemplo n.º 1
0
 /**
  * @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();
 }
 /**
  * {@inheritdoc}
  */
 public function getConvertedValue(array $widgetConfig, $value = null, array $config = [], array $options = [])
 {
     if (is_null($value) || $value['value']['start'] === null && $value['value']['end'] === null) {
         list($start, $end) = $this->dateHelper->getDateTimeInterval('P1M');
         $type = AbstractDateFilterType::TYPE_BETWEEN;
     } else {
         list($startValue, $endValue, $type) = $this->getPeriodValues($value);
         $start = $startValue instanceof DateTime ? $startValue : $this->dateCompiler->compile($startValue);
         $start->setTime(0, 0, 0);
         $end = $endValue instanceof DateTime ? $endValue : $this->dateCompiler->compile($endValue);
         $end->setTime(23, 59, 59);
     }
     return ['start' => $start, 'end' => $end, 'type' => $type];
 }
Ejemplo n.º 3
0
 /**
  * @dataProvider getRevenueOverTimeChartViewDataProvider
  */
 public function testGetRevenueOverTimeChartView($sourceData, $expectedArrayData, $expectedOptions, $chartConfig)
 {
     $from = new DateTime('2015-05-10');
     $to = new DateTime('2015-05-15');
     $previousFrom = new DateTime('2015-05-05');
     $previousTo = new DateTime('2015-05-10');
     $this->dateHelper->expects($this->any())->method('getFormatStrings')->willReturn(['viewType' => 'day']);
     $this->dateHelper->expects($this->once())->method('getPeriod')->willReturnCallback(function ($dateRange) {
         return [$dateRange['start'], $dateRange['end']];
     });
     $this->dateHelper->expects($this->once())->method('convertToCurrentPeriod')->will($this->returnValue($expectedArrayData['2015-05-10 - 2015-05-15']));
     $this->dateHelper->expects($this->once())->method('combinePreviousDataWithCurrentPeriod')->will($this->returnValue($expectedArrayData['2015-05-05 - 2015-05-10']));
     $this->dateTimeFormatter->expects($this->exactly(4))->method('formatDate')->will($this->onConsecutiveCalls('2015-05-05', '2015-05-10', '2015-05-10', '2015-05-15'));
     $orderRepository = $this->getMockBuilder('OroCRM\\Bundle\\MagentoBundle\\Entity\\Repository\\OrderRepository')->disableOriginalConstructor()->getMock();
     $orderRepository->expects($this->at(0))->method('getRevenueOverTime')->with($this->aclHelper, $this->dateHelper, $from, $to)->will($this->returnValue($sourceData[0]));
     $orderRepository->expects($this->at(1))->method('getRevenueOverTime')->with($this->aclHelper, $this->dateHelper, $previousFrom, $previousTo)->will($this->returnValue($sourceData[1]));
     $this->registry->expects($this->any())->method('getRepository')->with('OroCRMMagentoBundle:Order')->will($this->returnValue($orderRepository));
     $chartView = $this->getMockBuilder('Oro\\Bundle\\ChartBundle\\Model\\ChartView')->disableOriginalConstructor()->getMock();
     $chartViewBuilder = $this->getMockBuilder('Oro\\Bundle\\ChartBundle\\Model\\ChartViewBuilder')->disableOriginalConstructor()->getMock();
     $chartViewBuilder->expects($this->once())->method('setOptions')->with($expectedOptions)->will($this->returnSelf());
     $chartViewBuilder->expects($this->once())->method('setArrayData')->with($expectedArrayData)->will($this->returnSelf());
     $chartViewBuilder->expects($this->once())->method('getView')->will($this->returnValue($chartView));
     $this->configProvider->expects($this->once())->method('getChartConfig')->with('revenue_over_time_chart')->will($this->returnValue($chartConfig));
     $this->assertEquals($chartView, $this->dataProvider->getRevenueOverTimeChartView($chartViewBuilder, ['start' => $from, 'end' => $to]));
 }
Ejemplo n.º 4
0
 /**
  * Returns data grouped by created_at, data_channel_id
  *
  * @param AclHelper  $aclHelper
  * @param DateHelper $dateHelper
  * @param \DateTime  $dateFrom
  * @param \DateTime  $dateTo
  * @param array      $ids Filter by channel ids
  *
  * @return array
  */
 public function getGroupedByChannelArray(AclHelper $aclHelper, DateHelper $dateHelper, \DateTime $dateFrom, \DateTime $dateTo = null, $ids = [])
 {
     $qb = $this->createQueryBuilder('c');
     $qb->select('COUNT(c) as cnt', 'IDENTITY(c.dataChannel) as channelId');
     $dateHelper->addDatePartsSelect($dateFrom, $dateTo, $qb, 'c.createdAt');
     if ($dateTo) {
         $qb->andWhere($qb->expr()->between('c.createdAt', ':dateFrom', ':dateTo'))->setParameter('dateTo', $dateTo);
     } else {
         $qb->andWhere('c.createdAt > :dateFrom');
     }
     $qb->setParameter('dateFrom', $dateFrom);
     $qb->addGroupBy('c.dataChannel');
     if ($ids) {
         $qb->andWhere($qb->expr()->in('c.dataChannel', ':channelIds'))->setParameter('channelIds', $ids);
     }
     return $aclHelper->apply($qb)->getArrayResult();
 }
Ejemplo n.º 5
0
 public function testCombinePreviousDataWithCurrentPeriod()
 {
     $previousFrom = new DateTime('2015-05-05');
     $previousTo = new DateTime('2015-05-10');
     $data = [['yearCreated' => '2015', 'monthCreated' => '05', 'dayCreated' => '07', 'cnt' => 5]];
     $expectedData = [['date' => '2015-05-10'], ['date' => '2015-05-11'], ['date' => '2015-05-12', 'count' => 5], ['date' => '2015-05-13'], ['date' => '2015-05-14'], ['date' => '2015-05-15']];
     $actualData = $this->helper->combinePreviousDataWithCurrentPeriod($previousFrom, $previousTo, $data, 'cnt', 'count');
     $this->assertEquals($expectedData, $actualData);
 }
Ejemplo n.º 6
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);
 }
Ejemplo n.º 7
0
 /**
  * @param AclHelper $aclHelper
  * @param DateHelper $dateHelper
  * @param DateTime $from
  * @param DateTime|null $to
  *
  * @return array
  */
 public function getRevenueOverTime(AclHelper $aclHelper, DateHelper $dateHelper, DateTime $from, DateTime $to = null)
 {
     $from = clone $from;
     $to = clone $to;
     $qb = $this->createQueryBuilder('o')->select('SUM(
                 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 amount');
     $dateHelper->addDatePartsSelect($from, $to, $qb, 'o.createdAt');
     if ($to) {
         $qb->andWhere($qb->expr()->between('o.createdAt', ':from', ':to'))->setParameter('to', $to);
     } else {
         $qb->andWhere('o.createdAt > :from');
     }
     $qb->setParameter('from', $from);
     $this->applyActiveChannelLimitation($qb);
     return $aclHelper->apply($qb)->getResult();
 }
Ejemplo n.º 8
0
 /**
  * @dataProvider combinePreviousDataWithCurrentPeriodDataProvider
  */
 public function testCombinePreviousDataWithCurrentPeriod($previousFrom, $previousTo, $data, $expectedData)
 {
     $actualData = $this->helper->combinePreviousDataWithCurrentPeriod($previousFrom, $previousTo, $data, 'cnt', 'count');
     $this->assertEquals($expectedData, $actualData);
 }
Ejemplo n.º 9
0
 /**
  * @dataProvider getPreviousDateTimeIntervalDataProvider
  *
  * @param Datetime $from
  * @param Datetime $to
  * @param Datetime $expectedStart
  * @param Datetime $expectedEnd
  */
 public function testGetPreviousDateTimeInterval(\Datetime $from, \Datetime $to, \Datetime $expectedStart, \Datetime $expectedEnd)
 {
     list($start, $end) = $this->helper->getPreviousDateTimeInterval($from, $to);
     $this->assertEquals($start, $expectedStart);
     $this->assertEquals($end, $expectedEnd);
 }