src/Controller/ChartController.php line 162

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Config;
  4. use App\Entity\AffiliateTags;
  5. use App\Entity\AppInfo;
  6. use App\Entity\ChartsCache;
  7. use App\Entity\Tune\OfferInfo;
  8. use App\Entity\SourceTags;
  9. use App\Entity\Tag;
  10. use App\Services\AffiliateHasofferAPI;
  11. use App\Services\Alerts;
  12. use App\Services\Aws\ElasticCache;
  13. use App\Services\Aws\S3;
  14. use App\Services\BrandHasofferAPI;
  15. use App\Services\ChartComponents;
  16. use App\Services\Common;
  17. use App\Services\FinancialToolsComponents;
  18. use App\Services\ImpressionsApis;
  19. use App\Services\Metrics24APICalls;
  20. use App\Services\MmpComponents;
  21. use App\Services\MysqlQueries;
  22. use App\Services\OkrComponents;
  23. use App\Services\UsersComponents;
  24. use Doctrine\Persistence\ManagerRegistry;
  25. use Mmoreram\GearmanBundle\Service\GearmanClientInterface;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Component\HttpFoundation\JsonResponse;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. /**
  32.  *
  33.  * Charts related routes with endpoint /api/chart/{route}
  34.  *
  35.  * @Route("/api/chart", name="api_charts", host="%main_subdomain%")
  36.  */
  37. class ChartController extends AbstractController
  38. {
  39.     private $commonCalls;
  40.     private $doctrine;
  41.     private $mysqlQueries;
  42.     private $financialToolsComponents;
  43.     private $alerts;
  44.     private $brandHasofferApi;
  45.     private $mmpComponents;
  46.     private $affiliateHasofferAPI;
  47.     private $usersComponents;
  48.     private $elasticCache;
  49.     private $projectDir;
  50.     private $s3;
  51.     private $impressionsApis;
  52.     private $metrics24APICalls;
  53.     private $gearmanClientInterface;
  54.     private $okrComponents;
  55.     public function __construct(
  56.         Common $commonCalls,
  57.         ManagerRegistry $doctrine,
  58.         MysqlQueries $mysqlQueries,
  59.         FinancialToolsComponents $financialToolsComponents,
  60.         Alerts $alerts,
  61.         BrandHasofferApi $brandHasofferApi,
  62.         MmpComponents $mmpComponents,
  63.         AffiliateHasofferAPI $affiliateHasofferAPI,
  64.         UsersComponents $usersComponents,
  65.         ElasticCache $elasticCache,
  66.         S3 $s3,
  67.         ImpressionsApis $impressionsApis,
  68.         Metrics24APICalls $metrics24APICalls,
  69.         GearmanClientInterface $gearmanClientInterface,
  70.         OkrComponents $okrComponents,
  71.         string $projectDir
  72.     ) {
  73.         $this->commonCalls $commonCalls;
  74.         $this->doctrine $doctrine;
  75.         $this->mysqlQueries $mysqlQueries;
  76.         $this->financialToolsComponents $financialToolsComponents;
  77.         $this->alerts $alerts;
  78.         $this->brandHasofferApi $brandHasofferApi;
  79.         $this->mmpComponents $mmpComponents;
  80.         $this->affiliateHasofferAPI $affiliateHasofferAPI;
  81.         $this->usersComponents $usersComponents;
  82.         $this->elasticCache $elasticCache;
  83.         $this->s3 $s3;
  84.         $this->impressionsApis $impressionsApis;
  85.         $this->metrics24APICalls $metrics24APICalls;
  86.         $this->gearmanClientInterface $gearmanClientInterface;
  87.         $this->okrComponents $okrComponents;
  88.         $this->projectDir $projectDir;
  89.     }
  90.     /**
  91.      * @Route("/offer-cr-profit/{offerId}", name="offer_cr_profit_get", methods={"GET"})
  92.      */
  93.     public function getOfferCrProfitAction(Request $request$offerIdCommon $commonCallsBrandHasofferApi $brandHasofferApi)
  94.     {
  95.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  96.         $dateEnd date('Y-m-d'strtotime($request->query->get('dateEnd')));
  97.         $tuneAccount $request->query->get('tuneAccount') ?? Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE;
  98.         $affiliateList $commonCalls->getAffiliateListByStatusWithKeys($tuneAccount);
  99.         $hoData $brandHasofferApi->getOfferCrProfit($offerId$dateStart$dateEnd$tuneAccount)['response']['data']['data'];
  100.         $crProfitData = [['id''Conversions''Clicks''Affiliate''Profit']];
  101.         if (!empty($hoData)) {
  102.             foreach ($hoData as $key => $value) {
  103.                 $affiliate array_key_exists($value['Stat']['affiliate_id'], $affiliateList) ? $affiliateList[$value['Stat']['affiliate_id']]['id'] . ' ' $affiliateList[$value['Stat']['affiliate_id']]['name'] : $value['Stat']['affiliate_id'];
  104.                 $crProfitData[] = [
  105.                     $value['Stat']['affiliate_id'],
  106.                     (int)$value['Stat']['conversions'],
  107.                     (int)$value['Stat']['clicks'],
  108.                     $affiliate,
  109.                     (int)$value['Stat']['profit']
  110.                 ];
  111.             }
  112.         } else {
  113.             $crProfitData[] = [];
  114.         }
  115.         return new JsonResponse($crProfitData);
  116.     }
  117.     /**
  118.      * @Route("/offer-profit-payout-revenue/{offerId}", name="offer_profit_payout_revenue_get", methods={"GET"})
  119.      */
  120.     public function getOfferProfitPayoutRevenueAction(Request $request$offerIdBrandHasofferApi $brandHasofferApi)
  121.     {
  122.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  123.         $dateEnd date('Y-m-d'strtotime($request->query->get('dateEnd')));
  124.         $tuneAccount $request->query->get('tuneAccount') ?? Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE;
  125.         $hoData $brandHasofferApi->getOfferProfitPayoutRevenue($offerId$dateStart$dateEnd$tuneAccount)['response']['data']['data'];
  126.         $finalData = [['Datetime''Profit''Payout''Revenue']];
  127.         if (!empty($hoData)) {
  128.             foreach ($hoData as $key => $value) {
  129.                 $finalData[] = [
  130.                     $value['Stat']['date'] . ' ' $value['Stat']['hour'] . ":00",
  131.                     (int)$value['Stat']['profit'],
  132.                     (int)$value['Stat']['payout'],
  133.                     (int)$value['Stat']['revenue']
  134.                 ];
  135.             }
  136.         } else {
  137.             $finalData[] = [];
  138.         }
  139.         return new JsonResponse($finalData);
  140.     }
  141.     /**
  142.      * @Route("/correlation-stats", name="correlation_stats", methods={"GET"})
  143.      */
  144.     public function getCorrelationStatsAction(Request $requestChartComponents $chartComponents)
  145.     {
  146.         $sortBy $request->query->get('sortBy');
  147.         $limit $request->query->get('limit');
  148.         $type $request->query->get('type');
  149.         $category $request->query->get('category');
  150.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  151.         $dateEnd date('Y-m-d'strtotime($request->query->get('dateEnd')));
  152.         $pullFromCache $request->query->get('pullFromCache');
  153.         $sortType Config::DASHBOARD_PAGINATION_DEFAULT_SORT_TYPE;
  154.         $eventTimestampFrom strtotime($dateStart);
  155.         $eventTimeStampTo strtotime($dateEnd);
  156.         try {
  157.             $data $chartComponents->getCorrelationMmpChartData(
  158.                 $eventTimestampFrom,
  159.                 $eventTimeStampTo,
  160.                 $sortBy,
  161.                 $sortType,
  162.                 $limit,
  163.                 $type,
  164.                 $category,
  165.                 (bool) $pullFromCache
  166.             );
  167.             return new JsonResponse([
  168.                 'data' => $data,
  169.             ], Config::HTTP_STATUS_CODE_OK);
  170.         } catch (\Exception $e) {
  171.             return new JsonResponse([
  172.                 'success' => false,
  173.                 'message' => 'Error retrieving dashboard data: ' $e->getMessage()
  174.             ], 500);
  175.         }
  176.     }
  177.     /**
  178.      * @Route("/os-share", name="os_share", methods={"GET"})
  179.      */
  180.     public function getOsShareAction(Request $requestChartComponents $chartComponents)
  181.     {
  182.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  183.         $dateEnd date('Y-m-d'strtotime($request->query->get('dateEnd')));
  184.         $minClicks 100;
  185.         $pullFromCache $request->query->get('pullFromCache');
  186.         $finalArr $chartComponents->getOsShareChart($dateStart$dateEnd$minClicks$pullFromCache);
  187.         return new JsonResponse($finalArr);
  188.     }
  189.     /**
  190.      * @Route("/geo-chart", name="get_geo_chart", methods={"GET"})
  191.      */
  192.     public function geoChartAction(Request $requestChartComponents $chartComponents)
  193.     {
  194.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  195.         $dateEnd date('Y-m-d'strtotime($request->query->get('dateEnd')));
  196.         $selectType $request->query->get('selectType');
  197.         $pullFromCache $request->query->get('pullFromCache');
  198.         $finalArr $chartComponents->getGeoChart($dateStart$dateEnd$selectType$pullFromCache);
  199.         return new JsonResponse($finalArr);
  200.     }
  201.     /**
  202.      * @Route("/geo-chart-offers", name="get_geo_chart_offers", methods={"GET"})
  203.      */
  204.     public function geoChartOffersAction(Request $requestChartComponents $chartComponents)
  205.     {
  206.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  207.         $dateEnd date('Y-m-d'strtotime("+1 day"strtotime($request->query->get('dateEnd'))));
  208.         $selectType $request->query->get('selectType');
  209.         $geo $request->query->get('geo');
  210.         $pullFromCache $request->query->get('pullFromCache');
  211.         $sortType Config::DASHBOARD_PAGINATION_DEFAULT_SORT_TYPE;
  212.         $eventTimestampFrom strtotime($dateStart);
  213.         $eventTimeStampTo strtotime($dateEnd);
  214.         $filters['geos'] = [$geo];
  215.         $data $chartComponents->getTopTwoOffersData(
  216.             $eventTimestampFrom,
  217.             $eventTimeStampTo,
  218.             $selectType,
  219.             $sortType,
  220.             (bool) $pullFromCache,
  221.             null,
  222.             $filters,
  223.         );
  224.         return new JsonResponse($data);
  225.     }
  226.     /**
  227.      * @Route("/column-chart", name="get_column_chart_by_advertiser", methods={"GET"})
  228.      */
  229.     public function getColumnChartAdvertiserAction(Request $requestChartComponents $chartComponents)
  230.     {
  231.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  232.         $dateEnd date('Y-m-d'strtotime("+1 day"strtotime($request->query->get('dateEnd'))));
  233.         $limit 5;
  234.         $chartBy $request->query->get('chartBy');
  235.         $statType $request->query->get('statType');
  236.         $pullFromCache $request->query->get('pullFromCache');
  237.         $finalArr $chartComponents->getColumnChartForDashboard($dateStart$dateEnd$limit$chartBy$statType$pullFromCache);
  238.         return new JsonResponse($finalArr);
  239.     }
  240.     /**
  241.      * @Route("/dashboard-chart-data", name="dashboard-chart-data", methods={"GET"})
  242.      */
  243.     public function getAllDashboardChartData(Request $requestChartComponents $chartComponents): JsonResponse
  244.     {
  245.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  246.         $dateEnd date('Y-m-d'strtotime($request->query->get('dateEnd')));
  247.         $sortBy $request->query->get('sortBy');
  248.         $pullFromCache $request->query->get('pullFromCache');
  249.         $sortType Config::DASHBOARD_PAGINATION_DEFAULT_SORT_TYPE;
  250.         $eventTimestampFrom strtotime($dateStart);
  251.         $eventTimeStampTo strtotime($dateEnd);
  252.         try {
  253.             $data $chartComponents->getDashboardData(
  254.                 $eventTimestampFrom,
  255.                 $eventTimeStampTo,
  256.                 $sortBy,
  257.                 $sortType,
  258.                 (bool) $pullFromCache
  259.             );
  260.             return new JsonResponse([
  261.                 'response' => [
  262.                     'success' => true,
  263.                     'httpStatus' => Config::HTTP_STATUS_CODE_OK,
  264.                     'data' => $data,
  265.                     'error' => null
  266.                 ]
  267.             ], Config::HTTP_STATUS_CODE_OK);
  268.         } catch (\Exception $e) {
  269.             return new JsonResponse([
  270.                 'success' => false,
  271.                 'message' => 'Error retrieving dashboard data: ' $e->getMessage()
  272.             ], 500);
  273.         }
  274.     }
  275.     /** 
  276.      * @Route("/okr", methods={"GET"})
  277.      */
  278.     public function getOkrChartsAction(Request $requestOkrComponents $okrComponents): JsonResponse
  279.     {
  280.         $dateStart date('Y-m-d'strtotime($request->query->get('dateStart')));
  281.         $dateEnd date('Y-m-d'strtotime($request->query->get('dateEnd')));
  282.         $usersWorkingUnderMe $this->okrComponents->applicableAccountManagerEmailIdsToUser($this->getUser());
  283.         if (in_array($this->getUser()->getEmail(), $usersWorkingUnderMe) && sizeof($usersWorkingUnderMe) === 1) {
  284.             $usersWorkingUnderMe = [];
  285.         }
  286.         $isAccountManager $isTeamLead $isAdmin false;
  287.         if (in_array(Config::ROLE_ADMIN$this->getUser()->getRoles())) {
  288.             $isAdmin true;
  289.         } else if (sizeof($usersWorkingUnderMe) > 0) {
  290.             $isTeamLead true;
  291.         } else if (in_array(Config::ROLE_ACCOUNT_MANAGER$this->getUser()->getRoles())) {
  292.             $isAccountManager true;
  293.         }
  294.         $reportData = [];
  295.         $reportData2 = [];
  296.         $data2 = [];
  297.         $title $title2 "";
  298.         if ($isAdmin) {
  299.             $data $this->okrComponents->getReportData($dateStart$dateEnd, [], [], [
  300.                 'mobuppsTeam' => 1,
  301.                 'revenue' => 1,
  302.                 'globalReportRevenue' => 1,
  303.             ], $this->getUser());
  304.             foreach ($data as $key => $value) {
  305.                 $value['identifer'] = $value['mobuppsTeam'];
  306.                 $reportData[] = $value;
  307.             }
  308.             $title "Team Level OKR";
  309.         } else if ($isTeamLead) {
  310.             $data $this->okrComponents->getReportData($dateStart$dateEnd, [], [], [
  311.                 'advertiserManagerName' => 1,
  312.                 'revenue' => 1,
  313.                 'globalReportRevenue' => 1,
  314.             ], $this->getUser());
  315.             foreach ($data as $key => $value) {
  316.                 $value['identifer'] = $value['advertiserManagerName'];
  317.                 $reportData[] = $value;
  318.             }
  319.             $title "Advertiser Manager Level OKR";
  320.             $data2 $this->okrComponents->getReportData($dateStart$dateEnd, [], [], [
  321.                 'advertiserName' => 1,
  322.                 'advertiserId' => 1,
  323.                 'revenue' => 1,
  324.                 'globalReportRevenue' => 1,
  325.             ], $this->getUser());
  326.             foreach ($data2 as $key => $value) {
  327.                 $value['identifer'] = $value['advertiserId'] . ' - ' $value['advertiserName'];
  328.                 $reportData2[] = $value;
  329.             }
  330.             $title2 "Advertiser Level OKR";
  331.         } else if ($isAccountManager) {
  332.             $data $this->okrComponents->getReportData($dateStart$dateEnd, [], [], [
  333.                 'advertiserName' => 1,
  334.                 'revenue' => 1,
  335.                 'globalReportRevenue' => 1,
  336.             ], $this->getUser());
  337.             foreach ($data as $key => $value) {
  338.                 $value['identifer'] = $value['advertiserName'];
  339.                 $reportData[] = $value;
  340.             }
  341.             $title2 "Advertiser Level OKR";
  342.         }
  343.         $xAxisIdentifiers = [];
  344.         $finalRevenue = [];
  345.         $plannedRevenue = [];
  346.         $finalRevenueSum 0;
  347.         $plannedRevenueSum 0;
  348.         array_multisort(array_column($reportData'revenue'), 3$reportData);
  349.         foreach ($reportData as $key => $value) {
  350.             $xAxisIdentifiers[] = $value['identifer'];
  351.             $finalRevenue[] = $value['finalRevenue'] ?? 0;
  352.             $plannedRevenue[] = $value['revenue'];
  353.             $finalRevenueSum += $value['finalRevenue'] ?? 0;
  354.             $plannedRevenueSum += $value['revenue'];
  355.         }
  356.         $showBarChart2 false;
  357.         $xAxis2Identifiers = [];
  358.         $finalRevenue2 = [];
  359.         $plannedRevenue2 = [];
  360.         array_multisort(array_column($reportData2'revenue'), 3$reportData2);
  361.         foreach ($reportData2 as $key => $value) {
  362.             $xAxis2Identifiers[] = $value['identifer'];
  363.             $finalRevenue2[] = $value['finalRevenue'] ?? 0;
  364.             $plannedRevenue2[] = $value['revenue'];
  365.             $showBarChart2 true;
  366.         }
  367.         $percentage $plannedRevenueSum $finalRevenueSum $plannedRevenueSum 0;
  368.         $finalArr = [];
  369.         if (
  370.             in_array(Config::ROLE_ADMIN$this->getUser()->getRoles()) ||
  371.             $finalRevenueSum ||
  372.             $plannedRevenueSum 0
  373.         ) {
  374.             $finalArr = [
  375.                 'barChart1Options' => [
  376.                     'xAxisIdentifiers' => $xAxisIdentifiers,
  377.                     'finalRevenue' => $finalRevenue,
  378.                     'plannedRevenue' => $plannedRevenue,
  379.                     'title' => $title,
  380.                 ],
  381.                 'progressChartOptions' => [
  382.                     'percentage' => round($percentageprecision2),
  383.                     'finalRevenue' => $finalRevenueSum,
  384.                 ],
  385.             ];
  386.             if ($showBarChart2) {
  387.                 $finalArr['barChart2Options'] = [
  388.                     'xAxisIdentifiers' => $xAxis2Identifiers,
  389.                     'finalRevenue' => $finalRevenue2,
  390.                     'plannedRevenue' => $plannedRevenue2,
  391.                     'title' => $title2,
  392.                 ];
  393.             }
  394.         }
  395.         return new JsonResponse($finalArr);
  396.     }
  397. }