src/Controller/HomeController.php line 83

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Controller\HelperController;
  4. use App\Entity\Membership;
  5. use App\Entity\MembershipDocument;
  6. use App\Entity\MembershipStatusType;
  7. use App\Entity\MembershipSurvey;
  8. use App\Entity\MembershipTypeManager;
  9. use App\Entity\ProductDocument;
  10. use App\Entity\SurveyFieldsType;
  11. use App\ModelService\ConfigurationService;
  12. use App\ModelService\MembershipManagerService;
  13. use App\ModelService\MembershipService;
  14. use App\Service\CacheService;
  15. use App\Packages\GlobalEnv;
  16. use App\Packages\ModelUtil\TypeUtil;
  17. use App\Query\Filter;
  18. use App\Query\OrderCriterion;
  19. use App\Query\QueryData;
  20. use App\Service\AjaxService;
  21. use App\Service\Authentication\Authentication;
  22. use App\Service\ModelServiceManager;
  23. use App\Service\RecordLock\RecordLock;
  24. use App\Service\SessionService;
  25. use App\Service\UserService;
  26. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use Symfony\Component\HttpFoundation\Response;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Contracts\Translation\TranslatorInterface;
  31. class HomeController extends AbstractController
  32. {
  33.     const ACTION_VIEW 'view';
  34.     const TTL_CACHE_STATISTIC_DATA 60 60 24//1 GIORNO 
  35.     private $authentication;
  36.     private $ajaxService;
  37.     // private $eventStoreService;
  38.     private $modelServiceManager;
  39.     private $sessionService;
  40.     private $translator;
  41.     private $helperController;
  42.     private $recordLockService;
  43.     private $membershipService;
  44.     private $membershipManagerService;
  45.     //cache Service
  46.     private $cacheService;
  47.     public function __construct(
  48.         Authentication $authentication,
  49.         AjaxService $ajaxService,
  50.         ModelServiceManager $modelServiceManager,
  51.         SessionService $sessionService,
  52.         TranslatorInterface $translator,
  53.         RecordLock $recordLockService,
  54.         UserService $userService,
  55.         CacheService $cacheService,
  56.     ) {
  57.         $this->authentication $authentication;
  58.         $this->ajaxService $ajaxService;
  59.         $this->modelServiceManager $modelServiceManager;
  60.         $this->sessionService $sessionService;
  61.         $this->translator $translator;
  62.         // $this->eventStoreService = $this->modelServiceManager->getModelService('eventStore');
  63.         $this->documentService $this->modelServiceManager->getModelService('document');
  64.         $this->recordLockService $recordLockService;
  65.         $this->cacheService $cacheService;
  66.         $this->helperController = new HelperController(
  67.             $this->authentication,
  68.             $this->modelServiceManager,
  69.             $this->recordLockService,
  70.             $userService,
  71.         );
  72.     }
  73.     /**
  74.      * @Route("/", name="home", methods={"GET"})
  75.      */
  76.     public function index(Request $request)
  77.     {
  78.         // Legge dati autenticazione dalla queryString della request
  79.         $authToken $request->get('auth');
  80.         // Effettua autenticazione
  81.         // Se utente non autenticato, mostra apposita pagina di errore
  82.         $result $this->authentication->authenticate($authToken);
  83.         if (!$result) {
  84.             return $this->render('unauthenticated.html.twig');
  85.         } else {
  86.             $loggedUser $result;
  87.         }
  88.         if ($loggedUser["hasCompleteView"]) {
  89.             // Efettuo il caricamento in cache dei clienti di wp
  90.             //$this->userService->loadUsers();
  91.             $data = array();
  92.             $data['logged_user'] = $this->authentication->getLoggedUser();
  93.             if ($loggedUser["isAdmin"]) {
  94.                 $data['categoryExclusive'] = $this->getModelServiceConfiguration()->getCategoryExclusive();
  95.                 $data['categoryNutrition'] = $this->getModelServiceConfiguration()->getCategoryNutrition();
  96.                 $data['categoryBasic'] = $this->getModelServiceConfiguration()->getCategoryBasic();
  97.                 $data['categoryFocus'] = $this->getModelServiceConfiguration()->getCategoryFocus();
  98.                 $data['membershipUsers'] = $this->getModelCountsMemberships(true);
  99.                 $data['membershipBasicActiveUsers'] = $this->getModelCountMembershipsBasicFocus(true$data['categoryBasic']);
  100.                 $data['membershipBasicUsers'] = $this->getModelCountMembershipsBasicFocus(false$data['categoryBasic']);
  101.                 $data['membershipNutritionUsers'] = $this->getModelCountMembershipsAdvanced(true$data['categoryNutrition']);
  102.                 $data['membershipNutritionUsersPendingPayment'] = $this->getModelCountMembershipsInStatusX(MembershipStatusType::PENDING_PAYMENT$data['categoryNutrition']);
  103.                 $data['membershipNutritionUsersPendingTrainingCard'] = $this->getModelCountMembershipsInStatusX(MembershipStatusType::PENDING_TRAINING_CARD$data['categoryNutrition']);
  104.                 $data['membershipNutritionUsersInQueue'] = $this->getModelCountMembershipsInStatusX(MembershipStatusType::IN_QUEUE$data['categoryNutrition']);
  105.                 $entityKey CacheService::PREFIX_ENTITYTAG_STATISTIC_QUEUE;
  106.                 if ($this->getCacheService()->hasItem($entityKey)) {
  107.                     $dataResponse $this->getCacheService()->getItemValue($entityKey);
  108.                 } else {
  109.                     $averageDaysQueueAccess $this->getMembershipService()->getAverageDaysQueueAccessTime();
  110.                     $weekUnlockingFromQueue $this->getMembershipService()->getWeekUnlockingFromQueue();
  111.                     $weekUnlockingFromQueue '' $weekUnlockingFromQueue;
  112.                     $weekUnlockingFromQueue substr($weekUnlockingFromQueue04) . '-' substr($weekUnlockingFromQueue4);
  113.                     $dataResponse = array('averageDaysQueueAccess' => $averageDaysQueueAccess'weekUnlockingFromQueue' => $weekUnlockingFromQueue);
  114.                     $this->setCacheStatisticQueue($dataResponse);
  115.                 }
  116.                 $data['nuAverangeDaysToNutritionServiceAccess'] = $dataResponse["averageDaysQueueAccess"];
  117.                 $data['nuWeekUnlockingFromQueue'] = $dataResponse["weekUnlockingFromQueue"];
  118.                 $data["exportXlsInfo"] = true;
  119.             } else if ($loggedUser["isNutritionist"]) {
  120.                 $data['membershipAssignManagerMe'] = $this->getCountMyMembershipsAssigned(MembershipTypeManager::NUTRITIONIST$loggedUser["external_id"]);
  121.                 $data['membershipWaitingProgrammMe'] = $this->getCountMyMembershipsWaitingProgram(MembershipTypeManager::NUTRITIONIST$loggedUser["external_id"]);
  122.             } else if ($loggedUser["isNutritionistSupervisor"]) {
  123.                 $data['membershipAssignManager'] = $this->getCountMyMembershipsAssigned(MembershipTypeManager::NUTRITIONIST);
  124.                 $data['membershipWaitingProgramm'] = $this->getCountMyMembershipsWaitingProgram(MembershipTypeManager::NUTRITIONIST);
  125.             }
  126.             return $this->render('homeAdmin.html.twig'$data);
  127.         } else {
  128.             //recupero le membership by userId
  129.             $membershipsByUserId $this->getMembershipsByUserId($loggedUser['external_id']);
  130.             $data = array(
  131.                 'logged_user' => $loggedUser,
  132.                 'exclusiveMemberships' => $this->printExclusiveMemberships($membershipsByUserId),
  133.                 'nutritionMemberships' => $this->printNutritionMemberships($membershipsByUserId),
  134.                 'basicMemberships' => $this->printBasicMemberships($membershipsByUserId),
  135.             );
  136.             return $this->render('homeUser.html.twig'$data);
  137.         }
  138.     }
  139.     /**
  140.      * @Route("/logout", name="logout" , methods={"POST"})
  141.      */
  142.     public function logout()
  143.     {
  144.         $this->sessionService->invalidate();
  145.         return $this->render('sessionExpired.html.twig');
  146.     }
  147.     /**
  148.      * @Route("/survey/view", name="survey_view", methods={"POST"})
  149.      */
  150.     public function viewSurvey(Request $request)
  151.     {
  152.         // Imposta ajax service
  153.         $this->ajaxService->clearMessages();
  154.         // Controllo autenticazione e autorizzazioni
  155.         $loggedUser $this->authentication->getLoggedUser();
  156.         if (!$loggedUser) {
  157.             //authentication failed
  158.             $this->ajaxService->addMessageRedirect($this->generateUrl("home"));
  159.             return new Response(
  160.                 $this->ajaxService->getXmlResponse(),
  161.                 Response::HTTP_OK,
  162.                 array('content-type' => 'application/xml')
  163.             );
  164.         }
  165.         // load model
  166.         $modelKey 'membershipSurvey';
  167.         $modelId $request->get('rowId');
  168.         $model $this->modelServiceManager->getModelService($modelKey)->getById($modelId);
  169.         // // EventStore view operation
  170.         // $this->eventStoreService->addEventStore(
  171.         //     self::ACTION_VIEW,
  172.         //     $loggedUser['username'],
  173.         //     $this->translator->trans('infoViewModel', array('%modelKey%' => $modelKey)),
  174.         //     $model->getId()
  175.         // );
  176.         // Gestione risposta
  177.         $this->ajaxService->addMessageOpenDialog(
  178.             'row_detail',
  179.             'detail/membershipSummarySurvey.html.twig',
  180.             $modelKey,
  181.             self::ACTION_VIEW,
  182.             $this->createFormBuilder(array())->getForm(),
  183.             array(
  184.                 'modelPrintName' => $model->printName(),
  185.                 'rowId' => $model->getId(),
  186.                 'model' => $this->printSurveyQA($model),
  187.             )
  188.         );
  189.         return new Response(
  190.             $this->ajaxService->getXmlResponse(),
  191.             Response::HTTP_OK,
  192.             array('content-type' => 'application/xml')
  193.         );
  194.     }
  195.     /**
  196.      * @Route("/document/view", name="document_view")
  197.      */
  198.     public function viewDocument(Request $request)
  199.     {
  200.         return $this->render('unauthenticated.html.twig'); // TODO: view document
  201.     }
  202.     /**
  203.      * @Route("/exportExpiredNoRenewal/{productCategoryId}", name="export_expired_norenewal")
  204.      */
  205.     public function membershipExpiredWithoutRenewal($productCategoryIdRequest $req)
  206.     {
  207.         $categoryBasic $this->getModelServiceConfiguration()->getCategoryBasic();
  208.         if ($productCategoryId == $categoryBasic) {
  209.             $basicProductDurationDays $this->getModelServiceConfiguration()->getAdvProductDurationDays($categoryBasic);
  210.             $now1 = new \DateTime();
  211.             $now2 = new \DateTime();
  212.             $controlStartDate $now1->sub(new \DateInterval('P' $basicProductDurationDays 'D'));
  213.             $controlEndDate $now2->sub(new \DateInterval('P2D'));
  214.         }
  215.         $qd = new QueryData();
  216.         $qd->addFilter(new Filter('status'MembershipStatusType::EXPIREDFilter::OPERATOR_EQUAL));
  217.         $qd->addFilter(new Filter('productCategoryId'$productCategoryIdFilter::OPERATOR_EQUAL));
  218.         if ($productCategoryId == $categoryBasic) {
  219.             $qd->addFilter(new Filter('endDate'$controlStartDateFilter::OPERATOR_BIGGER_EQUAL));
  220.         }
  221.         $qd->addOrderCriterion(new OrderCriterion('statusDate'true));
  222.         $expiredMemberships $this->getMembershipService()->query($qd);
  223.         $expiredUserIds array_map(
  224.             function ($model) {
  225.                 return $model->getUserId();
  226.             },
  227.             $expiredMemberships
  228.         );
  229.         $expiredUserIds array_unique($expiredUserIds);
  230.         $qd = new QueryData();
  231.         $qd->addFilter(new Filter('userId'$expiredUserIdsFilter::OPERATOR_IN));
  232.         $qd->addFilter(new Filter('status'MembershipStatusType::ACTIVE_STATESFilter::OPERATOR_IN));
  233.         if ($productCategoryId != $categoryBasic) {
  234.             $qd->addFilter(new Filter('productCategoryId'$productCategoryIdFilter::OPERATOR_EQUAL));
  235.         }
  236.         if ($productCategoryId == $categoryBasic) {
  237.             $qd->addFilter(new Filter('purchaseDate'$controlStartDateFilter::OPERATOR_BIGGER_EQUAL));
  238.         }
  239.         $qd->addOrderCriterion(new OrderCriterion('statusDate'true));
  240.         $activeMemberships $this->getMembershipService()->query($qd);
  241.         $activeUserIds array_map(
  242.             function ($model) {
  243.                 return $model->getUserId();
  244.             },
  245.             $activeMemberships
  246.         );
  247.         $activeUserIds array_unique($activeUserIds);
  248.         $userIds array_diff($expiredUserIds$activeUserIds);
  249.         $dataTableResult = [];
  250.         foreach ($userIds as $userId) {
  251.             $item null;
  252.             $endDate "";
  253.             $monthPurchased "";
  254.             foreach ($expiredMemberships as $struct) {
  255.                 if ($userId == $struct->getUserId()) {
  256.                     $item $struct;
  257.                     break;
  258.                 }
  259.             }
  260.             if ($item != null) {
  261.                 $endDate $item->getEndDate()->format('Y-m-d H:i:s');
  262.                 $monthPurchased $item->getMonthPurchased();
  263.                 $productName $item->getProductName();
  264.             }
  265.             $userModel $this->helperController->getUserById($userId);
  266.             $userData = array($userModel['username'], $userModel['email'], $endDate$monthPurchased$productName);
  267.             array_push($dataTableResult$userData);
  268.         }
  269.         $header = array("username""email""endDate""monthPurchased""productName");
  270.         return $this->createResponseCsvFile($dataTableResult$header);
  271.     }
  272.     private function createResponseCsvFile($data$headers)
  273.     {
  274.         $csv $this->adaptCsv($data$headers);
  275.         //creazione file da scaricare
  276.         $this->ajaxService->addMessageDownloadFile(base64_encode($csv));
  277.         return new Response(
  278.             $this->ajaxService->getXmlResponse(),
  279.             Response::HTTP_OK,
  280.             array('content-type' => 'application/xml')
  281.         );
  282.     }
  283.     public function adaptCsv($data$headers)
  284.     {
  285.         //prepara il file risposta csv pronto per essere esportato
  286.         $handle fopen('php://temp''rw');
  287.         fputcsv($handle$headers';');
  288.         foreach ($data as $key => $value) {
  289.             //create fields
  290.             $fields = [];
  291.             foreach ($value as $i) {
  292.                 if ($this->helperController->is_html($i) == false) {
  293.                     $fields[] = $i;
  294.                 }
  295.             }
  296.             fputcsv($handle$fields';');
  297.         }
  298.         rewind($handle);
  299.         $csv stream_get_contents($handle);
  300.         fclose($handle);
  301.         return $csv;
  302.     }
  303.     private function getModelCountMembershipsInStatusX($status$categoryId null)
  304.     {
  305.         $queryData = new QueryData();
  306.         if ($status != null) {
  307.             $queryData->addFilter(new Filter('status'$statusFilter::OPERATOR_EQUAL));
  308.         }
  309.         if ($categoryId != null) {
  310.             $queryData->addFilter(new Filter('productCategoryId'$categoryIdFilter::OPERATOR_EQUAL));
  311.         }
  312.         return $this->getMembershipService()->count($queryData);
  313.     }
  314.     private function getModelCountsMemberships($notExpired)
  315.     {
  316.         $queryData = new QueryData();
  317.         if ($notExpired) {
  318.             $queryData->addFilter(new Filter('status'MembershipStatusType::ACTIVE_STATESFilter::OPERATOR_IN));
  319.         }
  320.         return $this->getMembershipService()->count($queryData);
  321.     }
  322.     private function getModelCountMembershipsExclusive($notExpiredAndNotInqueue)
  323.     {
  324.         $queryData = new QueryData();
  325.         $queryData->addFilter(new Filter('productCategoryId'$this->getModelServiceConfiguration()->getCategoryExclusive(), Filter::OPERATOR_EQUAL));
  326.         if ($notExpiredAndNotInqueue) {
  327.             $queryData->addFilter(new Filter('status'MembershipStatusType::ACTIVE_STATESFilter::OPERATOR_IN));
  328.         }
  329.         return $this->getMembershipService()->count($queryData);
  330.     }
  331.     private function getMembershipService(): MembershipService
  332.     {
  333.         if (!$this->membershipService) {
  334.             $this->membershipService $this->modelServiceManager->getModelService('membership');
  335.         }
  336.         return $this->membershipService;
  337.     }
  338.     private function getMembershipsByUserId($userId): array
  339.     {
  340.         $qd = new QueryData();
  341.         $qd->addFilter(new Filter('userId'$userIdFilter::OPERATOR_EQUAL));
  342.         $qd->addOrderCriterion(new OrderCriterion('creationDate'true));
  343.         return $this->getMembershipService()->query($qd);
  344.     }
  345.     private function printExclusiveMemberships($memberships): array
  346.     {
  347.         $result = array();
  348.         if (is_array($memberships) && count($memberships)) {
  349.             foreach ($memberships as $membership) {
  350.                 if ($membership->getProductCategoryId() == $this->getModelServiceConfiguration()->getCategoryExclusive()) {
  351.                     $result[] = array(
  352.                         'id' => $membership->getId(),
  353.                         'status' => $this->translator->trans('membership.status.' $membership->getStatus(), array(), 'models'),
  354.                         'productName' => $membership->getProductName(),
  355.                         'productCategoryId' => $membership->getProductCategoryId(),
  356.                         'monthPurchased' => $membership->getMonthPurchased(),
  357.                         'endDate' => TypeUtil::printDateTime($membership->getEndDate()),
  358.                         'months' => $this->printAdvancedMonths($membership),
  359.                         'isInactive' => $this->isInactive($membership),
  360.                     );
  361.                 }
  362.             }
  363.         }
  364.         return $result;
  365.     }
  366.     private function printNutritionMemberships($memberships): array
  367.     {
  368.         $result = array();
  369.         if (is_array($memberships) && count($memberships)) {
  370.             foreach ($memberships as $membership) {
  371.                 if ($membership->getProductCategoryId() == $this->getModelServiceConfiguration()->getCategoryNutrition()) {
  372.                     $result[] = array(
  373.                         'id' => $membership->getId(),
  374.                         'status' => $this->translator->trans('membership.status.' $membership->getStatus(), array(), 'models'),
  375.                         'productName' => $membership->getProductName(),
  376.                         'productCategoryId' => $membership->getProductCategoryId(),
  377.                         'monthPurchased' => $membership->getMonthPurchased(),
  378.                         'endDate' => TypeUtil::printDateTime($membership->getEndDate()),
  379.                         'months' => $this->printAdvancedMonths($membership),
  380.                         'isInactive' => $this->isInactive($membership),
  381.                     );
  382.                 }
  383.             }
  384.         }
  385.         return $result;
  386.     }
  387.     private function printBasicMemberships($memberships): array
  388.     {
  389.         $result = array();
  390.         if (is_array($memberships) && count($memberships)) {
  391.             foreach ($memberships as $membership) {
  392.                 if (
  393.                     $membership->getProductCategoryId() == $this->getModelServiceConfiguration()->getCategoryBasic() ||
  394.                     $membership->getProductCategoryId() == $this->getModelServiceConfiguration()->getCategoryFocus()
  395.                 ) {
  396.                     $result[] = array(
  397.                         'id' => $membership->getId(),
  398.                         'status' => $this->translator->trans('membership.status.' $membership->getStatus(), array(), 'models'),
  399.                         'productName' => $membership->getProductName(),
  400.                         'productCategoryId' => $membership->getProductCategoryId(),
  401.                         'monthPurchased' => $membership->getMonthPurchased(),
  402.                         'endDate' => TypeUtil::printDateTime($membership->getEndDate()),
  403.                         'startDate' => TypeUtil::printDateTime($membership->getStartDate()),
  404.                         'documents' => $this->getProductDocuments($membership),
  405.                     );
  406.                 }
  407.             }
  408.         }
  409.         return $result;
  410.     }
  411.     private function printAdvancedMonths(Membership $membership): array
  412.     {
  413.         $result = array();
  414.         if (
  415.             $membership->getStatus() != MembershipStatusType::IN_QUEUE &&
  416.             $membership->getStatus() != MembershipStatusType::PENDING_PAYMENT
  417.         ) {
  418.             $monthPurchased $membership->getMonthPurchased();
  419.             $currentMonth $this->getMembershipService()->getCurrentMonth($membership);
  420.             $monthTotal $monthPurchased - ($monthPurchased $currentMonth);
  421.             for ($i 1$i <= $monthTotal$i++) {
  422.                 $result[] = array(
  423.                     'id' => $i,
  424.                     'name' => $this->calcYearMonthName($membership$i),
  425.                     'endDate' => $this->calcMonthEndDate($membership$i),
  426.                     'documents' => $this->getAdvancedDocumentsByMonth($membership$i),
  427.                     'survey' => $this->getSurveyByMonth($membership$i),
  428.                 );
  429.             }
  430.         }
  431.         return array_reverse($result);
  432.     }
  433.     private function calcYearMonthName(Membership $membershipint $month): ?string
  434.     {
  435.         if ($month == $this->getMembershipService()->getCurrentMonth($membership) && $membership->getStatus() == MembershipStatusType::PENDING_SURVEY) {
  436.             return $this->translator->trans('Preliminarly.activity', array(), 'forms');
  437.         } else {
  438.             $startDate $this->getMembershipService()->getMonthStartDate($membership$month);
  439.             if ($startDate != null) {
  440.                 return $this->translator->trans('Month.' $startDate->format('F'), array(), 'forms') . ' - ' $startDate->format('Y');
  441.             } else {
  442.                 return null;
  443.             }
  444.         }
  445.     }
  446.     private function calcMonthEndDate(Membership $membershipint $month): ?string
  447.     {
  448.         $endDate $this->getMembershipService()->getMonthEndDate($membership$month);
  449.         if ($endDate != null) {
  450.             return TypeUtil::printDateTime($endDate);
  451.         }
  452.         return null;
  453.     }
  454.     private function getSurveyByMonth(Membership $membershipint $month): ?array
  455.     {
  456.         $mSurvey $this->getMembershipService()->getSurveyByMonth($membership$month);
  457.         if ($mSurvey != null) {
  458.             return $this->printMembershipSurvey($mSurvey);
  459.         }
  460.         return null;
  461.     }
  462.     private function getAdvancedDocumentsByMonth(Membership $membershipint $month): array
  463.     {
  464.         // avoid to show document not validated yet
  465.         $currentMonth $this->getMembershipService()->getCurrentMonth($membership);
  466.         if ($membership->getStatus() === MembershipStatusType::PENDING_TRAINING_CARD && $currentMonth === $month) {
  467.             return array();
  468.         }
  469.         $qd = new QueryData();
  470.         $qd->addFilter(new Filter('membership'$membership->getId()));
  471.         $qd->addFilter(new Filter('month'$month));
  472.         $mDocuments $this->modelServiceManager->getModelService('membershipDocument')->query($qd);
  473.         $printedDocuments = array();
  474.         foreach ($mDocuments as $mDocument) {
  475.             $printedDocuments[] = $this->printMembershipDocument($mDocument);
  476.         }
  477.         return $printedDocuments;
  478.     }
  479.     private function getProductDocuments(Membership $membership): array
  480.     {
  481.         $qd = new QueryData();
  482.         $qd->addFilter(new Filter('productId'$membership->getProductId()));
  483.         $mDocuments $this->modelServiceManager->getModelService('productDocument')->query($qd);
  484.         if (count($mDocuments)) {
  485.             $printedDocuments = array();
  486.             foreach ($mDocuments as $mDocument) {
  487.                 $printedDocuments[] = $this->printProductDocument($mDocument$membership);
  488.             }
  489.             return $printedDocuments;
  490.         }
  491.         return array();
  492.     }
  493.     private function printMembershipSurvey(MembershipSurvey $mSurvey): array
  494.     {
  495.         return array(
  496.             'id' => $mSurvey->getId(),
  497.             'name' => $mSurvey->getSurvey()->getDescription(),
  498.             'completeDate' => TypeUtil::printDateTime($mSurvey->getCompleteDate()),
  499.         );
  500.     }
  501.     private function printMembershipDocument(MembershipDocument $mDocument): array
  502.     {
  503.         $document $mDocument->getDocument();
  504.         $documentLink null;
  505.         $dataResponse $this->documentService->downloadDocument($document->getTicket()); // TODO: avoid to download document
  506.         if (stripos($document->getName(), 'DIETA') !== false) {
  507.             $documentLink '<img src="img/food.png" alt="Food file"><p>' $document->getName() . '</p>';
  508.         } elseif (stripos($document->getName(), 'WORKOUT') !== false) {
  509.             $documentLink '<img src="img/gym.png" alt="Gym file"><p>' $document->getName() . '</p>';
  510.         } elseif (stripos($document->getName(), 'MAG') !== false) {
  511.             $documentLink '<img src="img/sgpmag.png" alt="Magazine file"><p>' $document->getName() . '</p>';
  512.         } elseif (stripos($document->getName(), 'COOK') !== false) {
  513.             $documentLink '<img src="img/sgpcookbook.png" alt="Cookbook file"><p>' $document->getName() . '</p>';
  514.         } else {
  515.             $documentLink '<img src="img/generic.png" alt="File"><p>' $document->getName() . '</p>';
  516.         }
  517.         if ($dataResponse['status']) {
  518.             $loggedUser $this->authentication->getLoggedUser();
  519.             // se non hai un ruolo dirigenziale
  520.             if (!$loggedUser) {
  521.                 return $this->render('unauthenticated.html.twig');
  522.             }
  523.             $addHref 'href="/membershipSummary/membershipSummaryDocument/view/' $document->getId() . '"';
  524.             if ($loggedUser["isAdmin"] == false && $loggedUser["isPersonalTrainer"] == false && $loggedUser["isNutritionist"] == false) {
  525.                 if (!$this->pdfCanDownload($mDocument->getMembership())) {
  526.                     $addHref "";
  527.                 }
  528.             }
  529.             $namelink '<a ' $addHref '>' $documentLink '</a>';
  530.         } else {
  531.             $namelink $this->translator->trans('Home.membership.deletedDocument', array(), 'forms');
  532.         }
  533.         return array(
  534.             'id' => $document->getId(),
  535.             'name_link' => $namelink,
  536.             'creationDate' => TypeUtil::printDateTime($document->getCreationDate()),
  537.             'actions' => '',
  538.         );
  539.     }
  540.     private function pdfCanDownload(Membership $membership): bool
  541.     {
  542.         $response true;
  543.         if (GlobalEnv::get('MIN_PURCHASE_DATE_DOWNLOAD_PDF')) {
  544.             $dateLimitDownload $this->strToDate(GlobalEnv::get('MIN_PURCHASE_DATE_DOWNLOAD_PDF'));
  545.             $response $membership->getPurchaseDate() > $dateLimitDownload;
  546.         }
  547.         return $response;
  548.     }
  549.     public function strToDate($strDate)
  550.     {
  551.         return isset($strDate) ? (\DateTime::createFromFormat("Y-m-d H:i:s"$strDate)) : null;
  552.     }
  553.     private function printProductDocument(ProductDocument $mDocumentMembership $membership): array
  554.     {
  555.         $document $mDocument->getDocument();
  556.         if (stripos($document->getName(), 'DIETA') !== false) {
  557.             $documentLink '<img src="img/food.png" alt="Food file"><p>' $document->getName() . '</p>';
  558.         } elseif (stripos($document->getName(), 'WORKOUT') !== false) {
  559.             $documentLink '<img src="img/gym.png" alt="Gym file"><p>' $document->getName() . '</p>';
  560.         } elseif (stripos($document->getName(), 'MAG') !== false) {
  561.             $documentLink '<img src="img/sgpmag.png" alt="Magazine file"><p>' $document->getName() . '</p>';
  562.         } elseif (stripos($document->getName(), 'COOK') !== false) {
  563.             $documentLink '<img src="img/sgpcookbook.png" alt="Cookbook file"><p>' $document->getName() . '</p>';
  564.         } else {
  565.             $documentLink '<img src="img/generic.png" alt="File"><p>' $document->getName() . '</p>';
  566.         }
  567.         $loggedUser $this->authentication->getLoggedUser();
  568.         if (!$loggedUser) {
  569.             return $this->render('unauthenticated.html.twig');
  570.         }
  571.         $addHref 'href="/membershipSummary/membershipSummaryDocument/view/' $document->getId() . '"';
  572.         if ($loggedUser["isAdmin"] == false && $loggedUser["isPersonalTrainer"] == false && $loggedUser["isNutritionist"] == false) {
  573.             if (!$this->pdfCanDownload($membership)) {
  574.                 $addHref "";
  575.             }
  576.         }
  577.         $namelink '<a ' $addHref '>' $documentLink '</a>';
  578.         return array(
  579.             'id' => $document->getId(),
  580.             'name_link' => $namelink,
  581.             'creationDate' => TypeUtil::printDateTime($document->getCreationDate()),
  582.             'actions' => '',
  583.         );
  584.     }
  585.     private function printSurveyQA(MembershipSurvey $mSurvey): array
  586.     {
  587.         $result = array();
  588.         $mAnswers $mSurvey->getAnswers();
  589.         foreach ($mAnswers as $mAnswer) {
  590.             $question $mAnswer->getSurveyDetail();
  591.             $answer $mAnswer->getValue();
  592.             if ($question->getTypeField() == SurveyFieldsType::DATE || $question->getTypeField() == SurveyFieldsType::DATETIME) {
  593.                 $answer TypeUtil::printDate(new \DateTime($answer));
  594.             }
  595.             $result[] = array(
  596.                 'id' => $mAnswer->getId(),
  597.                 'question' => $question->getDescription(),
  598.                 'answer' => $answer,
  599.             );
  600.         }
  601.         return $result;
  602.     }
  603.     private function isInactive(Membership $membership)
  604.     {
  605.         if ($membership->getStatus() == MembershipStatusType::INACTIVE) {
  606.             return true;
  607.         } else {
  608.             return false;
  609.         }
  610.     }
  611.     private function getModelServiceConfiguration(): ConfigurationService
  612.     {
  613.         return $this->modelServiceManager->getModelService('configuration');
  614.     }
  615.     private function getCountMyMembershipsAssigned($typeManager$managerId null)
  616.     {
  617.         return $this->getMembershipManagerService()->getWorkLoadManager($typeManager$managerId);
  618.     }
  619.     private function getCountMyMembershipsWaitingProgram($typeManager$managerId null)
  620.     {
  621.         return $this->getMembershipService()->getCountMembershipWaitingProgram($typeManager$managerId);
  622.     }
  623.     private function getModelCountMembershipsBasicFocus($notExpired$productCategoryId)
  624.     {
  625.         $queryData = new QueryData();
  626.         $queryData->addFilter(new Filter('productCategoryId'$productCategoryIdFilter::OPERATOR_EQUAL));
  627.         if ($notExpired) {
  628.             $queryData->addFilter(new Filter('status'MembershipStatusType::ACTIVE_STATESFilter::OPERATOR_IN));
  629.         }
  630.         return $this->getMembershipService()->count($queryData);
  631.     }
  632.     private function getModelCountMembershipsAdvanced($notExpiredAndNotInqueue$productCategoryId)
  633.     {
  634.         $queryData = new QueryData();
  635.         $queryData->addFilter(new Filter('productCategoryId'$productCategoryIdFilter::OPERATOR_EQUAL));
  636.         if ($notExpiredAndNotInqueue) {
  637.             $queryData->addFilter(new Filter('status'MembershipStatusType::ACTIVE_STATESFilter::OPERATOR_IN));
  638.         }
  639.         return $this->getMembershipService()->count($queryData);
  640.     }
  641.     private function getMembershipManagerService(): MembershipManagerService
  642.     {
  643.         if (!$this->membershipManagerService) {
  644.             $this->membershipManagerService $this->modelServiceManager->getModelService('membershipManager');
  645.         }
  646.         return $this->membershipManagerService;
  647.     }
  648.     protected function getCacheService(): CacheService
  649.     {
  650.         return $this->cacheService;
  651.     }
  652.     protected function setCacheStatisticQueue(array $statisticData)
  653.     {
  654.         $this->getCacheService()->set(CacheService::PREFIX_ENTITYTAG_STATISTIC_QUEUE$statisticDataself::TTL_CACHE_STATISTIC_DATAnull, array("STATISTIC_QUEUE"), true);
  655.     }
  656. }