src/Controller/Admin/DashboardController.php line 197

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Controller\Admin;
  3. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use EADPlataforma\Entity\Configuration;
  7. use EADPlataforma\Entity\TransactionItem;
  8. use EADPlataforma\Entity\LessonLog;
  9. use EADPlataforma\Entity\LessonLogOrigin;
  10. use EADPlataforma\Entity\CourseCertificate;
  11. use EADPlataforma\Entity\Enrollment;
  12. use EADPlataforma\Entity\Commission;
  13. use EADPlataforma\Entity\Session;
  14. use EADPlataforma\Entity\User;
  15. use EADPlataforma\Entity\UserSubscription;
  16. use EADPlataforma\Entity\Eadmin\Banner;
  17. use EADPlataforma\Enum\AbstractEnum;
  18. use EADPlataforma\Enum\TransactionEnum;
  19. use EADPlataforma\Enum\TransactionItemEnum;
  20. use EADPlataforma\Enum\Eadmin\BannerEnum;
  21. use EADPlataforma\Enum\ErrorEnum;
  22. /**
  23.  * @Route(
  24.  *      path          = "/admin/dashboard",
  25.  *      schemes         = {"https","http"}
  26.  * )
  27.  * @Cache(
  28.  *      maxage          = "0",
  29.  *      smaxage         = "0",
  30.  *      expires         = "now",
  31.  *      public          = false
  32.  * )
  33.  */
  34. class DashboardController extends AbstractController {
  35.     public function getEntityClass(){
  36.         return Configuration::class;
  37.     }
  38.     /**
  39.      * @Route(
  40.      *      path          = "/general",
  41.      *      methods       = {"GET"}
  42.      * )
  43.      */
  44.     public function getDashboardGeneral(Request $request) {
  45.         
  46.         $permission $this->userPermissionUtil->getPermission("dashboard""see");
  47.         if($this->userPermissionUtil->isLow($permission)){
  48.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  49.         }
  50.         $userCommissionId null;
  51.         if($this->userPermissionUtil->isMiddle($permission)){
  52.             $userCommissionId $this->user->getId();
  53.         }
  54.         $this->requestUtil->setRequest($request)->setData();
  55.         $bannerRepository $this->emEadmin->getRepository(Banner::class);
  56.         $plan $this->configuration->getPlan();
  57.         $fileService $this->generalService->getService('FileService');
  58.         $data = (object)[
  59.             "configPercentInfo" => $this->configuration->getPercentConfigurationSchool(),
  60.             "planName" => ($plan $plan->getTitle() : null),
  61.             "diskPercent" => $fileService->getClientSpaceDisk()->diskPercent,
  62.             "banners" => $bannerRepository->findBanners(BannerEnum::DASHBOARD),
  63.         ];
  64.         return $this->eadResponse($data);
  65.     }
  66.     /**
  67.      * @Route(
  68.      *      path          = "/payments",
  69.      *      methods       = {"GET"}
  70.      * )
  71.      */
  72.     public function getDashboardPayments(Request $request) {
  73.         
  74.         $permission $this->userPermissionUtil->getPermission("dashboard""see");
  75.         if($this->userPermissionUtil->isLow($permission)){
  76.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  77.         }
  78.         $userCommissionId null;
  79.         if($this->userPermissionUtil->isMiddle($permission)){
  80.             $userCommissionId $this->user->getId();
  81.         }
  82.         $this->requestUtil->setRequest($request)->setData();
  83.         $period = (int)$this->requestUtil->getField('period');
  84.         $dateStart null;
  85.         $dateEnd null;
  86.         $data = [];
  87.         if($period != AbstractEnum::FILTER_PERIOD_All){
  88.             $dateTimeUtil $this->generalService->getUtil('DateTimeUtil');
  89.             $dates $dateTimeUtil->periodDate(
  90.                 $period
  91.                 $this->requestUtil->getField('dateStart'), 
  92.                 $this->requestUtil->getField('dateEnd')
  93.             );
  94.             $dateStart $dates->dateStart;
  95.             $dateEnd $dates->dateEnd;        
  96.         }
  97.         $transactionItemRepository $this->em->getRepository(TransactionItem::class);
  98.         $commissionRepository $this->em->getRepository(Commission::class);
  99.         $commissions = [];
  100.         if($this->userPermissionUtil->isHigh($permission)){
  101.             $commissions $commissionRepository->getComissionDash($dateStart$dateEnd);
  102.         }
  103.         $data = (object)[
  104.             "configPercentInfo" => $this->configuration->getPercentConfigurationSchool(),
  105.             "commissions" => $commissions
  106.         ];
  107.         $dataStatus = (object)[
  108.             "approved" => TransactionEnum::APPROVED,
  109.             "waiting" => TransactionEnum::WAITING,
  110.             "canceled" => TransactionEnum::CANCELED,
  111.         ];
  112.         $dataProduct = (object)[
  113.             "course" => TransactionItemEnum::COURSE,
  114.             "subscription" => TransactionItemEnum::SUBSCRIPTION,
  115.             "combo" => TransactionItemEnum::COMBO,
  116.             "period" => TransactionItemEnum::PERIOD,
  117.             "support" => TransactionItemEnum::SUPPORT,
  118.             "certificate" => TransactionItemEnum::CERTIFICATE,
  119.             //"live" => TransactionItemEnum::LIVE,
  120.             "charge" => TransactionItemEnum::CHARGE,
  121.         ];
  122.         foreach ($dataStatus as $key => $status) {
  123.             $data->{$key} = (object)[
  124.                 "number" => $transactionItemRepository->countTransactionItens(
  125.                     $status
  126.                     null,
  127.                     null
  128.                     $userCommissionId
  129.                     $dateStart
  130.                     $dateEnd
  131.                 ),
  132.                 "amount" => $transactionItemRepository->sumTransactionItens(
  133.                     $status
  134.                     null
  135.                     null
  136.                     $userCommissionId
  137.                     $dateStart
  138.                     $dateEnd
  139.                 ),
  140.             ];
  141.         }
  142.         foreach ($dataProduct as $key => $productType) {
  143.             $data->{$key} = (object)[
  144.                 "number" => $transactionItemRepository->countTransactionItens(
  145.                     TransactionEnum::APPROVED
  146.                     $productType
  147.                     null
  148.                     $userCommissionId
  149.                     $dateStart
  150.                     $dateEnd
  151.                 ),
  152.                 "amount" => $transactionItemRepository->sumTransactionItens(
  153.                     TransactionEnum::APPROVED
  154.                     $productType
  155.                     null
  156.                     $userCommissionId
  157.                     $dateStart
  158.                     $dateEnd
  159.                 ),
  160.             ];
  161.         }
  162.         return $this->eadResponse($data);
  163.     }
  164.     /**
  165.      * @Route(
  166.      *      path          = "/school",
  167.      *      methods       = {"GET"}
  168.      * )
  169.      */
  170.     public function getDashboardSchool(Request $request) {
  171.         $permission $this->userPermissionUtil->getPermission("dashboard""see");
  172.         if($this->userPermissionUtil->isLow($permission)){
  173.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  174.         }
  175.         $userCommissionId null;
  176.         if($this->userPermissionUtil->isMiddle($permission)){
  177.             $userCommissionId $this->user->getId();
  178.         }
  179.         $this->requestUtil->setRequest($request)->setData();
  180.         $period = (int)$this->requestUtil->getField('period');
  181.         $dateStart null;
  182.         $dateEnd null;
  183.         $data = [];
  184.         if($period != AbstractEnum::FILTER_PERIOD_All){
  185.             $dateTimeUtil $this->generalService->getUtil('DateTimeUtil');
  186.             $dates $dateTimeUtil->periodDate(
  187.                 $period
  188.                 $this->requestUtil->getField('dateStart'), 
  189.                 $this->requestUtil->getField('dateEnd')
  190.             );
  191.             $dateStart $dates->dateStart;
  192.             $dateEnd $dates->dateEnd;        
  193.         }
  194.         $userRepository $this->em->getRepository(User::class);
  195.         $sessionRepository $this->em->getRepository(Session::class);
  196.         $lessonLogOriginRepository $this->em->getRepository(LessonLogOrigin::class);
  197.         $uSRepository $this->em->getRepository(UserSubscription::class);
  198.         $enrollmentRepository $this->em->getRepository(Enrollment::class);
  199.         $courseCertificateRepository $this->em->getRepository(CourseCertificate::class);
  200.         $data = [
  201.             "userNewTotal" => $userRepository->getNewUsersNumber($dateStart$dateEnd),
  202.             "userActiveTotal" => $sessionRepository->getAllActiveUserSession($dateStart$dateEnd),
  203.             "enrollmentTotal" => $enrollmentRepository->getEnrollmentNumber(
  204.                 $dateStart,
  205.                 $dateEnd
  206.             ),
  207.             "lessonsCompleteTotal" => $lessonLogOriginRepository->countLessonLogOriginComplete(
  208.                 $dateStart,
  209.                 $dateEnd
  210.             ),
  211.             "certificateTotal" => $courseCertificateRepository->getCourseCertificateNumber(
  212.                 $dateStart,
  213.                 $dateEnd
  214.             ),
  215.             "userSubscriptionActiveTotal" => $uSRepository->getUserSubscriptionActiveNumber(
  216.                 $dateStart,
  217.                 $dateEnd
  218.             ),
  219.             "userSubscriptionCanceledTotal" => $uSRepository->getUserSubscriptionCanceledNumber(
  220.                 $dateStart,
  221.                 $dateEnd
  222.             ),
  223.         ];
  224.         return $this->eadResponse($data);
  225.     }
  226.     /**
  227.      * @Route(
  228.      *      path          = "/graph/payments",
  229.      *      methods       = {"GET"},
  230.      * )
  231.      */
  232.     public function getPaymentsGraph(Request $request) {
  233.         $permission $this->userPermissionUtil->getPermission("dashboard""see");
  234.         if($this->userPermissionUtil->isLow($permission)){
  235.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  236.         }
  237.         $userCommissionId null;
  238.         if($this->userPermissionUtil->isMiddle($permission)){
  239.             $userCommissionId $this->user->getId();
  240.         }
  241.         $this->requestUtil->setRequest($request)->setData();
  242.         $filterDateRegister = (int)$this->requestUtil->getField('filterDateRegister');
  243.         $period = (int)$this->requestUtil->getField('period');
  244.         $dateStart null;
  245.         $dateEnd null;
  246.         if($period != AbstractEnum::FILTER_PERIOD_All){
  247.             $dateTimeUtil $this->generalService->getUtil('DateTimeUtil');
  248.             $dates $dateTimeUtil->periodDate(
  249.                 $period
  250.                 $this->requestUtil->getField('dateStart'), 
  251.                 $this->requestUtil->getField('dateEnd')
  252.             );
  253.             $dateStart $dates->dateStart;
  254.             $dateEnd $dates->dateEnd;
  255.         }
  256.         $transactionItemRepository $this->em->getRepository(TransactionItem::class);
  257.         $data = [
  258.             "dataGraphNumber" => $transactionItemRepository->getTransactionItemGraphNumber(
  259.                 $dateStart
  260.                 $dateEnd
  261.                 $filterDateRegister,
  262.                 $userCommissionId
  263.             ),
  264.             "dataGraphValue" => $transactionItemRepository->getTransactionItemGraphValue(
  265.                 $dateStart
  266.                 $dateEnd
  267.                 $filterDateRegister,
  268.                 $userCommissionId
  269.             )
  270.         ];
  271.         return $this->eadResponse($data);
  272.     }
  273.     /**
  274.      * @Route(
  275.      *      path          = "/graph/school",
  276.      *      methods       = {"GET"},
  277.      * )
  278.      */
  279.     public function getGraphSchool(Request $request) {
  280.         $permission $this->userPermissionUtil->getPermission("dashboard""see");
  281.         if($this->userPermissionUtil->isLow($permission)){
  282.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  283.         }
  284.         $this->requestUtil->setRequest($request)->setData();
  285.         $filterDateRegister = (int)$this->requestUtil->getField('filterDateRegister');
  286.         $period = (int)$this->requestUtil->getField('period');
  287.         $dateStart null;
  288.         $dateEnd null;
  289.         if($period != AbstractEnum::FILTER_PERIOD_All){
  290.             $dateTimeUtil $this->generalService->getUtil('DateTimeUtil');
  291.             $dates $dateTimeUtil->periodDate(
  292.                 $period
  293.                 $this->requestUtil->getField('dateStart'), 
  294.                 $this->requestUtil->getField('dateEnd')
  295.             );
  296.             $dateStart $dates->dateStart;
  297.             $dateEnd $dates->dateEnd;
  298.         }
  299.         $userRepository $this->em->getRepository(User::class);
  300.         $sessionRepository $this->em->getRepository(Session::class);
  301.         $userSubscriptionRepository $this->em->getRepository(UserSubscription::class);
  302.         $dataGraphNewUser $userRepository->getNewUsersGraph(
  303.             $dateStart
  304.             $dateEnd
  305.             $filterDateRegister
  306.         );
  307.         
  308.         $dataGraphActiveUser $sessionRepository->getActiveUserGraph(
  309.             $dateStart
  310.             $dateEnd
  311.             $filterDateRegister
  312.         );
  313.         $seriesCategory = [];
  314.         foreach ($dataGraphNewUser as $key => $item) {
  315.             $item = (object)$item;
  316.             $seriesCategory[$item->date] = (object)[
  317.                 "new" => $item->total,
  318.                 "active" => 0,
  319.             ];
  320.         }
  321.         foreach ($dataGraphActiveUser as $key => $item) {
  322.             $item = (object)$item;
  323.             if(!empty($seriesCategory[$item->date])){
  324.                 $seriesCategory[$item->date]->active $item->total;
  325.             }else{
  326.                 $seriesCategory[$item->date] = (object)[
  327.                     "new" => 0,
  328.                     "active" => $item->total,
  329.                 ];
  330.             }
  331.         }
  332.         ksort($seriesCategorySORT_STRING);
  333.         $dataActive $userSubscriptionRepository->getUserSubscriptionGraphActive(
  334.             $dateStart
  335.             $dateEnd
  336.             $filterDateRegister
  337.         );
  338.         $dataReactivation $userSubscriptionRepository->getUserSubscriptionGraphReactivation(
  339.             $dateStart
  340.             $dateEnd
  341.             $filterDateRegister
  342.         );
  343.         $dataCanceled $userSubscriptionRepository->getUserSubscriptionGraphCanceled(
  344.             $dateStart
  345.             $dateEnd
  346.             $filterDateRegister
  347.         );
  348.         $dataGraphUserSubscription = [];
  349.         foreach ($dataActive as $key => $item) {
  350.             $item['active'] = (int)$item['active'];
  351.             $item['canceled'] = (int)$item['canceled'];
  352.             
  353.             $key_r $userSubscriptionRepository->searchPositionFromField(
  354.                 'date'
  355.                 $item['date'], 
  356.                 $dataReactivation
  357.             );
  358.             if(!empty($dataCanceled[$key_r])){
  359.                 $item['active'] = $item['active'] + $dataReactivation[$key_r]['active'];
  360.                 unset($dataReactivation[$key_r]);
  361.             }
  362.             $key_c $userSubscriptionRepository->searchPositionFromField(
  363.                 'date'
  364.                 $item['date'], 
  365.                 $dataCanceled
  366.             );
  367.             if(!empty($dataCanceled[$key_c])){
  368.                 $item['canceled'] = $item['canceled'] + $dataCanceled[$key_c]['canceled'];
  369.                 unset($dataCanceled[$key_c]);
  370.             }
  371.             $dataGraphUserSubscription[] = $item;
  372.         }
  373.         $dates = [];
  374.         $dataGraphUserSubscription array_merge(
  375.             $dataGraphUserSubscription
  376.             $dataReactivation
  377.             $dataCanceled
  378.         );
  379.         
  380.         foreach ($dataGraphUserSubscription as $key => $item) {
  381.             $dates[] = $item['date'];
  382.         }
  383.         array_multisort($datesSORT_ASC$dataGraphUserSubscription);
  384.         $data = [
  385.             "dataGraphUserSubscription" => $dataGraphUserSubscription,
  386.             "seriesCategory" => $seriesCategory
  387.         ];
  388.         return $this->eadResponse($data);
  389.     }
  390. }