/** * @param Campaign $campaign * @return array */ public function getSummarizedStatistic(Campaign $campaign) { $today = new \DateTime('now', new \DateTimeZone('UTC')); $qb = $this->_em->createQueryBuilder()->from('OroTrackingBundle:TrackingEvent', 'trackingEvent')->select(['trackingEvent.name', 'IDENTITY(trackingEvent.website) as websiteId', 'COUNT(trackingEvent.id) as visitCount', 'DATE(trackingEvent.loggedAt) as loggedAtDate'])->andWhere('trackingEvent.code = :trackingEventCode')->andWhere('DATE(trackingEvent.loggedAt) < DATE(:today)')->setParameter('trackingEventCode', $campaign->getCode())->setParameter('today', $today)->groupBy('trackingEvent.name, trackingEvent.website, loggedAtDate'); if ($campaign->getReportRefreshDate()) { $qb->andWhere('DATE(trackingEvent.loggedAt) > DATE(:since)')->setParameter('since', $campaign->getReportRefreshDate()); } return $qb->getQuery()->getArrayResult(); }
/** * @param string $period * @param Campaign $campaign * @return array * * @Route("/plot/{period}/{campaign}", name="orocrm_campaign_event_plot") * @AclAncestor("orocrm_campaign_view") * @Template */ public function plotAction($period, Campaign $campaign) { $supportedPeriods = [Campaign::PERIOD_HOURLY, Campaign::PERIOD_DAILY, Campaign::PERIOD_MONTHLY]; if (!in_array($period, $supportedPeriods)) { throw new \InvalidArgumentException(sprintf('Supported periods are: %s. %s given', implode(', ', $supportedPeriods), $period)); } $gridName = sprintf('campaign-tracking-detailed-report-%s-grid', $period); if ($period !== Campaign::PERIOD_HOURLY) { $gridName .= self::PRECALCULATED_SUFFIX; } $gridParameters = ['code' => $campaign->getCode(), PagerInterface::PAGER_ROOT_PARAM => [PagerInterface::DISABLED_PARAM => true]]; $datagrid = $this->get('oro_datagrid.datagrid.manager')->getDatagridByRequestParams($gridName, $gridParameters); $chartName = 'campaign_line_chart'; $chartView = $this->get('oro_chart.view_builder')->setDataGrid($datagrid)->setOptions(array_merge_recursive(['name' => $chartName, 'default_settings' => ['period' => $period]], $this->get('oro_chart.config_provider')->getChartConfig($chartName)))->getView(); return ['chartView' => $chartView]; }