src/Controller/DashboardController.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Planning\User;
  4. use App\Entity\Vetoadom\ChargeService;
  5. use App\Entity\Vetoadom\Consultation;
  6. use App\Entity\Vetoadom\Secteur;
  7. use App\Entity\Vetoadom\SecteurConsigne;
  8. use App\Entity\Vetoadom\SecteurConsigneType;
  9. use App\Entity\Vetoadom\SecteurForcageChargeService;
  10. use App\Entity\Vetoadom\SecteurForcageTarif;
  11. use App\Entity\Vetoadom\Tarif;
  12. use App\Service\CommonHelper;
  13. use App\Service\CustomJsonResponse;
  14. use App\Service\PriseAppelHelper;
  15. use App\Service\Translation;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  22. use Symfony\Component\Validator\Validator\ValidatorInterface;
  23. use Symfony\Contracts\Translation\TranslatorInterface;
  24. class DashboardController extends AbstractController
  25. {
  26.     private $customJsonResponse;
  27.     private $vetoadomEntityManager;
  28.     private $priseAppelHelper;
  29.     private $commonHelper;
  30.     private $translation;
  31.     private $translator;
  32.     private $urlGenerator;
  33.     private $validator;
  34.     public function __construct(
  35.         CustomJsonResponse $customJsonResponse,
  36.         CommonHelper $commonHelper,
  37.         PriseAppelHelper $priseAppelHelper,
  38.         EntityManagerInterface $vetoadomEntityManager,
  39.         Translation $translation,
  40.         TranslatorInterface $translator,
  41.         UrlGeneratorInterface $urlGenerator,
  42.         ValidatorInterface $validator
  43.     )
  44.     {
  45.         $this->commonHelper $commonHelper;
  46.         $this->customJsonResponse $customJsonResponse;
  47.         $this->priseAppelHelper $priseAppelHelper;
  48.         $this->vetoadomEntityManager $vetoadomEntityManager;
  49.         $this->translation $translation;
  50.         $this->translator $translator;
  51.         $this->urlGenerator $urlGenerator;
  52.         $this->validator $validator;
  53.     }
  54.     /**
  55.      * @Route("/dashboard", name="app_dashboard", methods={"GET", "POST"})
  56.      * @param Request $request
  57.      * @return Response
  58.      * @throws \Exception
  59.      */
  60.     public function index(Request $request): Response
  61.     {
  62.         /** @var User $user */
  63.         $user $this->getUser();
  64.         $params = [];
  65.         if ($request->getMethod() == 'GET') {
  66.             #$params['locale'] = $request->getLocale();
  67.             $params['secteurs'] = [];
  68.             foreach ($this->vetoadomEntityManager->getRepository(Secteur::class)->getUserSecteurs($user) as $secteur) {
  69.                 $secteurForcageChargeService $this->vetoadomEntityManager->getRepository(SecteurForcageChargeService::class)->findOneBy(['secteur' => $secteur'dateSuppression' => null]);
  70.                 # light
  71.                 if ($secteurForcageChargeService) {
  72.                     $light $secteurForcageChargeService->getChargeService()->getCouleur();
  73.                 } else {
  74.                     $lightConsultations $this->vetoadomEntityManager->getRepository(Consultation::class)->getLightConsultations($secteur->getId());
  75.                     $currentVetsNumber $this->commonHelper->getCurrentVetsNumber($secteur);
  76.                     $lightCode = (
  77.                         $currentVetsNumber == 0
  78.                         || ($lightConsultations['consultationsNumber'] / $currentVetsNumber) > $secteur->getCoeffFeux()
  79.                     ) ? 'orange' 'green';
  80.                     $light $this->vetoadomEntityManager->getRepository(ChargeService::class)->findOneBy(['code' => $lightCode])->getCouleur();
  81.                 }
  82.                 $langues $secteur->getLanguesArray();
  83.                 $priseAppelUrl $this->urlGenerator->generate('app_prise_appel',['secteurId' => $secteur->getId(), '_locale' => $langues['0']['locale']]);
  84.                 $params['secteurs'][] = [
  85.                     'id' => $secteur->getId(),
  86.                     'light' => $light,
  87.                     'nomRaccourci' => $secteur->getNomRaccourci(),
  88.                     'couleur' => $secteur->getCouleur(),
  89.                     'consignes' => $this->vetoadomEntityManager->getRepository(SecteurConsigne::class)->getSecteurConsignes($secteur->getId()),
  90.                     'fonctionnementCode' => $secteur->getFonctionnement()->getCode(),
  91.                     'lienExterneMessage' => $secteur->getLienExterneMessage() ?? '',
  92.                     'lienExternePriseAppel' => $secteur->getLienExternePriseAppel() ?? '',
  93.                     'lienExterneVeterinairePlanning' => $secteur->getLienExterneVeterinairePlanning() ?? '',
  94.                     'loadingForcageLock' => false,
  95.                     'forcageChargeService' => $secteurForcageChargeService $secteurForcageChargeService->getChargeService()->getId() : 1,
  96.                     'priseAppelResumeUrl' => $priseAppelUrl '?tab=resume',
  97.                     'priseAppelPriseAppelUrl' => $priseAppelUrl '?tab=prise-appel',
  98.                     'priseAppelMessagesUrl' => $priseAppelUrl '?tab=messages',
  99.                     'stats' => $this->priseAppelHelper->getSecteurStats($secteur)
  100.                 ];
  101.             }
  102.             $params['chargeServices'] = [];
  103.             foreach ($this->vetoadomEntityManager->getRepository(ChargeService::class)->findAll() as $chargeService) {
  104.                 $params['chargeServices'][] = [
  105.                     'id' => $chargeService->getId(),
  106.                     'nom' => $this->translator->trans('charge_service.'.$chargeService->getCode(), [], 'messages'),
  107.                     'couleur' => $chargeService->getCouleur()
  108.                 ];
  109.             }
  110.             $params['tarifs'] = [];
  111.             foreach ($this->vetoadomEntityManager->getRepository(Tarif::class)->findAll() as $tarif) {
  112.                 $params['tarifs'][] = [
  113.                     'id' => $tarif->getId(),
  114.                     'nom' => $this->translator->trans('tarif.'.$tarif->getCode(), [], 'messages'),
  115.                 ];
  116.             }
  117.             $params['secteurConsigneTypes'] = [];
  118.             foreach ($this->vetoadomEntityManager->getRepository(SecteurConsigneType::class)->findAll() as $secteurConsigneType) {
  119.                 $params['secteurConsigneTypes'][] = [
  120.                     'id' => $secteurConsigneType->getId(),
  121.                     'nom' => $this->translator->trans('secteur_consigne_type.'.$secteurConsigneType->getCode(), [], 'messages'),
  122.                 ];
  123.             }
  124.             // scripts translation
  125.             $domainContext = [
  126.                 'scripts' => [
  127.                     'alert_modal',
  128.                     'error_alert_modal',
  129.                     'secteur_consignes_modal',
  130.                     'secteur_forcage_modal'
  131.                 ]
  132.             ];
  133.             $params['trans'] = $this->translation->getTranslation($domainContext);
  134.             return $this->render(
  135.                 'dashboard.html.twig',
  136.                 [
  137.                     'user' => $user,
  138.                     'params' => $params
  139.                 ]
  140.             );
  141.         }
  142.         // POST
  143.         $action $request->get('action');
  144.         switch($action){
  145.             case 'ajouterSecteurConsigne':
  146.                 {
  147.                     if (!$this->isGranted('ROLE_ADMIN')) {
  148.                         $this->customJsonResponse->setForbidden(true);
  149.                         $this->customJsonResponse->setField('alert'$this->translator->trans('common.action_unknown', [], 'validators'));
  150.                         return $this->customJsonResponse->sendResponse();
  151.                     }
  152.                     $secteurId = (int)($request->get('secteur') ?? 0);
  153.                     $secteur $secteurId $this->vetoadomEntityManager->getRepository(Secteur::class)->getUserSecteur($user,$secteurId) : null;
  154.                     if (!$secteur) {
  155.                         $this->customJsonResponse->setForbidden(true);
  156.                         $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_consignes_modal.secteur_unknown', [], 'validators'));
  157.                         return $this->customJsonResponse->sendResponse();
  158.                     }
  159.                     $secteurConsigneTypeId = (int)($request->get('secteurConsigneType') ?? 0);
  160.                     $secteurConsigneType $secteurConsigneTypeId $this->vetoadomEntityManager->getRepository(SecteurConsigneType::class)->findOneBy(['id' => $secteurConsigneTypeId]) : null;
  161.                     if (!$secteurConsigneType) {
  162.                         $this->customJsonResponse->setField('consigne-secteurConsigneType'$this->translator->trans('common.blank', [], 'validators'));
  163.                     }
  164.                     if (($dateDebut = \DateTime::createFromFormat("!Y-m-d"$request->get('dateDebut') ?? '')) === false) {
  165.                         $this->customJsonResponse->setField('consigne-dateDebut'$this->translator->trans('common.blank', [], 'validators'));
  166.                     }
  167.                     if (($heureDebut = \DateTime::createFromFormat("!H:i"$request->get('heureDebut') ?? '')) === false) {
  168.                         $this->customJsonResponse->setField('consigne-heureDebut'$this->translator->trans('common.blank', [], 'validators'));
  169.                     }
  170.                     if (($dateFin = \DateTime::createFromFormat("!Y-m-d"$request->get('dateFin') ?? '')) === false) {
  171.                         $this->customJsonResponse->setField('consigne-dateFin'$this->translator->trans('common.blank', [], 'validators'));
  172.                     }
  173.                     if (($heureFin = \DateTime::createFromFormat("!H:i"$request->get('heureFin') ?? '')) === false) {
  174.                         $this->customJsonResponse->setField('consigne-heureFin'$this->translator->trans('common.blank', [], 'validators'));
  175.                     }
  176.                     if (
  177.                         $dateDebut !== false
  178.                         && $heureDebut !== false
  179.                         && $dateFin !== false
  180.                         && $heureFin !== false
  181.                     ) {
  182.                         $dateDebut->setTime($heureDebut->format('H'),$heureDebut->format('i'));
  183.                         $dateFin->setTime($heureFin->format('H'),$heureFin->format('i'));
  184.                         if ($dateDebut < new \DateTime(date('Y-m-d H:i:00'))) {
  185.                             $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_consignes_modal.date_debut_wrong', [], 'validators'));
  186.                         }
  187.                         if ($dateDebut $dateFin) {
  188.                             $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_consignes_modal.date_debut_date_fin_wrong', [], 'validators'));
  189.                         }
  190.                     }
  191.                     $consigne $request->get('consigne') ?? '';
  192.                     if ($consigne === '') {
  193.                         $this->customJsonResponse->setField('consigne-consigne'$this->translator->trans('common.blank', [], 'validators'));
  194.                     }
  195.                     if ($this->customJsonResponse->hasAnyField()) {
  196.                         $this->customJsonResponse->setForbidden(true);
  197.                         return $this->customJsonResponse->sendResponse();
  198.                     }
  199.                     $secteurConsigne = new SecteurConsigne();
  200.                     $secteurConsigne->setSecteur($secteur);
  201.                     $secteurConsigne->setSecteurConsigneType($secteurConsigneType);
  202.                     $secteurConsigne->setSaisieUserId($user->getId());
  203.                     $secteurConsigne->setDateDebut($dateDebut);
  204.                     $secteurConsigne->setDateFin($dateFin);
  205.                     $secteurConsigne->setConsigne($consigne);
  206.                     $this->vetoadomEntityManager->persist($secteurConsigne);
  207.                     $this->vetoadomEntityManager->flush();
  208.                     $this->customJsonResponse->setField('consignes'$this->vetoadomEntityManager->getRepository(SecteurConsigne::class)->getSecteurConsignes($secteur->getId()));
  209.                     return $this->customJsonResponse->sendResponse();
  210.                 }
  211.                 break;
  212.             case 'supprimerSecteurConsigne':
  213.                 {
  214.                     if (!$this->isGranted('ROLE_ADMIN')) {
  215.                         $this->customJsonResponse->setForbidden(true);
  216.                         $this->customJsonResponse->setField('alert'$this->translator->trans('common.action_unknown', [], 'validators'));
  217.                         return $this->customJsonResponse->sendResponse();
  218.                     }
  219.                     $consigneId = (int)($request->get('consigne') ?? 0);
  220.                     $secteurConsigne $consigneId $this->vetoadomEntityManager->getRepository(SecteurConsigne::class)->findOneBy([
  221.                         'id' => $consigneId,
  222.                         'secteur' => $this->vetoadomEntityManager->getRepository(Secteur::class)->getUserSecteurIds($user),
  223.                         'dateSuppression' => null
  224.                     ]) : null;
  225.                     if (!$secteurConsigne) {
  226.                         $this->customJsonResponse->setForbidden(true);
  227.                         $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_consignes_modal.consigne_unknown', [], 'validators'));
  228.                         return $this->customJsonResponse->sendResponse();
  229.                     }
  230.                     $secteurConsigne->setDateSuppression(new \DateTime());
  231.                     $secteurConsigne->setSuppressionUserId($user->getId());
  232.                     $this->vetoadomEntityManager->flush();
  233.                     $this->customJsonResponse->setField('consignes'$this->vetoadomEntityManager->getRepository(SecteurConsigne::class)->getSecteurConsignes($secteurConsigne->getSecteur()->getId()));
  234.                     return $this->customJsonResponse->sendResponse();
  235.                 }
  236.                 break;
  237.             case 'getSecteurForcageInfo':
  238.                 {
  239.                     if (!$this->isGranted('ROLE_ADMIN')) {
  240.                         $this->customJsonResponse->setForbidden(true);
  241.                         $this->customJsonResponse->setField('alert'$this->translator->trans('common.action_unknown', [], 'validators'));
  242.                         return $this->customJsonResponse->sendResponse();
  243.                     }
  244.                     $secteurId = (int)($request->get('secteur') ?? 0);
  245.                     $secteur $secteurId $this->vetoadomEntityManager->getRepository(Secteur::class)->getUserSecteur($user,$secteurId) : null;
  246.                     if (!$secteur) {
  247.                         $this->customJsonResponse->setForbidden(true);
  248.                         $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_forcage_modal.secteur_unknown', [], 'validators'));
  249.                         return $this->customJsonResponse->sendResponse();
  250.                     }
  251.                     # checkFilledAllSecteurTarifs
  252.                     if (!$this->vetoadomEntityManager->getRepository(Tarif::class)->checkFilledAllSecteurTarifs($secteurId)) {
  253.                         $this->customJsonResponse->setForbidden(true);
  254.                         $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_forcage_modal.secteur_tarifs_not_filled', [], 'validators'));
  255.                         return $this->customJsonResponse->sendResponse();
  256.                     }
  257.                     $secteurForcageChargeService $this->vetoadomEntityManager->getRepository(SecteurForcageChargeService::class)->findOneBy(['secteur' => $secteur'dateSuppression' => null]);
  258.                     $secteurForcageTarif $this->vetoadomEntityManager->getRepository(SecteurForcageTarif::class)->getCurrentForcageTarif($secteur->getId());
  259.                     $this->customJsonResponse->setField('forcageChargeService'$secteurForcageChargeService $secteurForcageChargeService->getChargeService()->getId() : 0);
  260.                     $this->customJsonResponse->setField('forcageTarif'$secteurForcageTarif $secteurForcageTarif->getTarif()->getId() : 0);
  261.                     return $this->customJsonResponse->sendResponse();
  262.                 }
  263.                 break;
  264.             case 'secteurForcage':
  265.                 {
  266.                     if (!$this->isGranted('ROLE_ADMIN')) {
  267.                         $this->customJsonResponse->setForbidden(true);
  268.                         $this->customJsonResponse->setField('alert'$this->translator->trans('common.action_unknown', [], 'validators'));
  269.                         return $this->customJsonResponse->sendResponse();
  270.                     }
  271.                     $secteurId = (int)($request->get('secteur') ?? 0);
  272.                     $secteur $secteurId $this->vetoadomEntityManager->getRepository(Secteur::class)->getUserSecteur($user,$secteurId) : null;
  273.                     if (!$secteur) {
  274.                         $this->customJsonResponse->setForbidden(true);
  275.                         $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_forcage_modal.secteur_unknown', [], 'validators'));
  276.                         return $this->customJsonResponse->sendResponse();
  277.                     }
  278.                     if (!$this->vetoadomEntityManager->getRepository(Tarif::class)->checkFilledAllSecteurTarifs($secteurId)) {
  279.                         $this->customJsonResponse->setForbidden(true);
  280.                         $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_forcage_modal.secteur_tarifs_not_filled', [], 'validators'));
  281.                         return $this->customJsonResponse->sendResponse();
  282.                     }
  283.                     # secteurForcageChargeService
  284.                     $secteurForcageChargeService $this->vetoadomEntityManager->getRepository(SecteurForcageChargeService::class)->findOneBy(['secteur' => $secteur'dateSuppression' => null]);
  285.                     $forcageChargeServiceId = (int)($request->get('forcageChargeService') ?? 0);
  286.                     if ($forcageChargeServiceId) {
  287.                         $chargeService $this->vetoadomEntityManager->getRepository(ChargeService::class)->findOneBy(['id' => $forcageChargeServiceId]);
  288.                         if (!$chargeService) {
  289.                             $this->customJsonResponse->setForbidden(true);
  290.                             $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_forcage_modal.charge_service_unknown', [], 'validators'));
  291.                             return $this->customJsonResponse->sendResponse();
  292.                         }
  293.                         if (!$secteurForcageChargeService) {
  294.                             $secteurForcageChargeService = new SecteurForcageChargeService();
  295.                             $secteurForcageChargeService->setSecteur($secteur);
  296.                             $secteurForcageChargeService->setChargeService($chargeService);
  297.                             $this->vetoadomEntityManager->persist($secteurForcageChargeService);
  298.                         }
  299.                         else {
  300.                             $secteurForcageChargeService->setChargeService($chargeService);
  301.                         }
  302.                     }
  303.                     else if ($secteurForcageChargeService) {
  304.                         $secteurForcageChargeService->setDateSuppression(new \DateTime());
  305.                     }
  306.                     if (!$forcageChargeServiceId) {
  307.                         $forcageChargeServiceId 1;
  308.                     }
  309.                     # secteurForcageTarif
  310.                     $secteurForcageTarif $this->vetoadomEntityManager->getRepository(SecteurForcageTarif::class)->getCurrentForcageTarif($secteur->getId()) ?? new SecteurForcageTarif();
  311.                     $forcageTarifId = (int)($request->get('forcageTarif') ?? 0);
  312.                     if ($forcageTarifId) {
  313.                         $tarif $this->vetoadomEntityManager->getRepository(Tarif::class)->findOneBy(['id' => $forcageTarifId]);
  314.                         if (!$tarif) {
  315.                             $this->customJsonResponse->setForbidden(true);
  316.                             $this->customJsonResponse->setField('alert'$this->translator->trans('secteur_forcage_modal.tarif_unknown', [], 'validators'));
  317.                             return $this->customJsonResponse->sendResponse();
  318.                         }
  319.                         if (!$secteurForcageTarif->getId()) {
  320.                             $secteurForcageTarif = new SecteurForcageTarif();
  321.                             $secteurForcageTarif->setSecteur($secteur);
  322.                             $secteurForcageTarif->setTarif($tarif);
  323.                             $this->vetoadomEntityManager->persist($secteurForcageTarif);
  324.                         }
  325.                         else {
  326.                             $secteurForcageTarif->setTarif($tarif);
  327.                         }
  328.                     }
  329.                     else if ($secteurForcageTarif) {
  330.                         $secteurForcageTarif->setDateSuppression(new \DateTime());
  331.                     }
  332.                     $this->vetoadomEntityManager->flush();
  333.                     # light
  334.                     if (
  335.                         $secteurForcageChargeService
  336.                         && $secteurForcageChargeService->getDateSuppression() === null
  337.                     ) {
  338.                         $light $secteurForcageChargeService->getChargeService()->getCouleur();
  339.                     } else {
  340.                         $lightConsultations $this->vetoadomEntityManager->getRepository(Consultation::class)->getLightConsultations($secteur->getId());
  341.                         $currentVetsNumber $this->commonHelper->getCurrentVetsNumber($secteur);
  342.                         $lightCode = (
  343.                             $currentVetsNumber == 0
  344.                             || ($lightConsultations['consultationsNumber'] / $currentVetsNumber) > $secteur->getCoeffFeux()
  345.                         ) ? 'orange' 'green';
  346.                         $light $this->vetoadomEntityManager->getRepository(ChargeService::class)->findOneBy(['code' => $lightCode])->getCouleur();
  347.                     }
  348.                     $this->customJsonResponse->setField('forcageChargeService'$forcageChargeServiceId);
  349.                     $this->customJsonResponse->setField('light'$light);
  350.                     //$this->customJsonResponse->setField('forcageTarif', $forcageTarifId);
  351.                     return $this->customJsonResponse->sendResponse();
  352.                 }
  353.                 break;
  354.             default:{
  355.                 $this->customJsonResponse->setForbidden(true);
  356.                 $this->customJsonResponse->setField('alert'$this->translator->trans('common.action_unknown', [], 'validators'));
  357.                 return $this->customJsonResponse->sendResponse();
  358.             }
  359.         }
  360.     }
  361. }