<?php
namespace App\Controller;
use App\Entity\Planning\PlanningParams;
use App\Entity\Planning\Site;
use App\Entity\Planning\User;
use App\Entity\Vetoadom\ChatCanalPlanning;
use App\Entity\Vetoadom\Document;
use App\Entity\Vetoadom\DocumentType;
use App\Entity\Vetoadom\Fonctionnement;
use App\Entity\Vetoadom\JourType;
use App\Entity\Vetoadom\Langue;
use App\Entity\Vetoadom\Pays;
use App\Entity\Vetoadom\Referant;
use App\Entity\Vetoadom\Secteur;
use App\Entity\Vetoadom\SecteurCategoriePoidsEspece;
use App\Entity\Vetoadom\SecteurCliniqueSecondaire;
use App\Entity\Vetoadom\SecteurDelaiDefaut;
use App\Entity\Vetoadom\SecteurEspece;
use App\Entity\Vetoadom\SecteurGammeTarif;
use App\Entity\Vetoadom\SecteurPays;
use App\Entity\Vetoadom\SecteurPlanningRegulation;
use App\Entity\Vetoadom\SecteurZone;
use App\Entity\Vetoadom\SousSecteur;
use App\Entity\Vetoadom\Tarif;
use App\Entity\Vetoadom\Variable;
use App\Entity\Vetoadom\Ville;
use App\Entity\Vetoadom\ZoneType;
use App\Service\APIlocation;
use App\Service\CustomJsonResponse;
use App\Service\Misc;
use App\Service\Translation;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class AdminParamsSecteurController extends AbstractController
{
private $APIlocation;
private $customJsonResponse;
private $misc;
private $planningEntityManager;
private $vetoadomEntityManager;
private $translation;
private $translator;
private $urlGenerator;
private $validator;
public function __construct(
APIlocation $APIlocation,
CustomJsonResponse $customJsonResponse,
EntityManagerInterface $planningEntityManager,
EntityManagerInterface $vetoadomEntityManager,
Misc $misc,
Translation $translation,
TranslatorInterface $translator,
UrlGeneratorInterface $urlGenerator,
ValidatorInterface $validator
)
{
$this->APIlocation = $APIlocation;
$this->customJsonResponse = $customJsonResponse;
$this->planningEntityManager = $planningEntityManager;
$this->vetoadomEntityManager = $vetoadomEntityManager;
$this->misc = $misc;
$this->translation = $translation;
$this->translator = $translator;
$this->urlGenerator = $urlGenerator;
$this->validator = $validator;
}
/**
* @Route("/admin-params-secteur/{secteurId}", name="app_admin_params_secteur", methods={"GET", "POST"})
* @param Request $request
* @param string $secteurId
* @return Response
* @throws \Exception
*/
public function index(Request $request, string $secteurId = "0"): Response
{
/** @var User $user */
$user = $this->getUser();
$secteurId = (int)$secteurId;
$secteur = $secteurId ? $this->vetoadomEntityManager->getRepository(Secteur::class)->findOneBy(['id' => $secteurId]) : new Secteur();
if (!$secteur->getId()) {
$errorMessage = $this->translator->trans('page_admin_params_secteur.secteur_unknown', [], 'validators');
$redirect = $this->urlGenerator->generate('app_admin_params_secteurs');
if ($request->isXmlHttpRequest()) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $errorMessage);
$this->customJsonResponse->setRedirect($redirect);
return $this->customJsonResponse->sendResponse();
}
return $this->render('error.html.twig', [
'user' => $user,
'errorMessage' => $errorMessage,
'redirect' => $redirect
]);
}
$params = [];
$variableEmplacements = [];
$params['variables'] = [];
$params['restrictions'] = [
'langueDisabled' => $secteur->getLangue1() || $secteur->getLangue2(),
'paysDisabled' => (bool)$secteur->getSecteurPaysCollection()->count(),
'fonctionnementDisabled' => (bool)$secteur->getFonctionnement()
];
// show section Planning regulation only when fonctionnement 'domicile','clinique'
$params['restrictions']['planningRegulationShow'] = $secteur->getFonctionnement()
&& in_array($secteur->getFonctionnement()->getCode(),['domicile','clinique']);
// show section Zones only when langue/pays/fonctionnement filled
$params['restrictions']['zonesShow'] = $secteur->getFonctionnement()
&& in_array($secteur->getFonctionnement()->getCode(),['domicile','clinique'])
&& $params['restrictions']['langueDisabled']
&& $params['restrictions']['paysDisabled']
&& $params['restrictions']['fonctionnementDisabled'];
// show calcul in section Zones
$params['restrictions']['zonesCalculShow'] = $secteur->getFonctionnement()
&& in_array($secteur->getFonctionnement()->getCode(),['domicile']);
// show section Categories poids especes only when fonctionnement 'domicile','clinique'
$params['restrictions']['categoriesPoidsEspecesShow'] = $secteur->getFonctionnement()
&& in_array($secteur->getFonctionnement()->getCode(),['domicile','clinique']);
// show section Localisation clinique only when fonctionnement 'clinique' and pays filled
$params['restrictions']['localisationCliniqueShow'] = $secteur->getFonctionnement()
&& $secteur->getFonctionnement()->getCode() == 'clinique'
&& $params['restrictions']['paysDisabled'];
// show section Localisation cliniques secondaires only when fonctionnement 'clinique' and pays filled
$params['restrictions']['localisationCliniquesSecondairesShow'] = $secteur->getFonctionnement()
&& $secteur->getFonctionnement()->getCode() == 'clinique'
&& $params['restrictions']['paysDisabled'];
// show section Gamme de tarif pour chaque jour de la semaine only when fonctionnement 'domicile','clinique'
$params['restrictions']['gammeTarifShow'] = $secteur->getFonctionnement()
&& in_array($secteur->getFonctionnement()->getCode(),['domicile','clinique']);
// show section TEXTES MONO/MULTI/SANS VETERINAIRE(S) only when fonctionnement 'domicile','clinique'
$params['restrictions']['textesShow'] = $secteur->getFonctionnement()
&& in_array($secteur->getFonctionnement()->getCode(),['domicile','clinique']);
// show section SMS only when fonctionnement 'domicile','clinique'
$params['restrictions']['smsShow'] = $secteur->getFonctionnement()
&& in_array($secteur->getFonctionnement()->getCode(),['domicile','clinique']);
// show section Chat
$params['restrictions']['chatShow'] = (bool)$secteur->getChatCanal();
// show section Autres parameters only when fonctionnement not 'medicphone'
$params['restrictions']['autresShow'] = $secteur->getFonctionnement()
&& $secteur->getFonctionnement()->getCode() != 'medicphone';
$params['restrictions']['autresDelaiShow'] = $params['restrictions']['autresShow']
&& $secteur->getFonctionnement()->getCode() == 'domicile';
$params['restrictions']['autresCentreMapShow'] = $params['restrictions']['autresShow']
&& $secteur->getFonctionnement()->getCode() == 'domicile';
$params['restrictions']['autresReferantShow'] = $params['restrictions']['autresShow']
&& $secteur->getFonctionnement()->getCode() != 'alvetis';
if ($request->getMethod() == 'GET') {
$formData = [
'secteur' => $secteur->getId() ?? 0,
'nom' => $secteur->getNom() ?? '',
'nomRaccourci' => $secteur->getNomRaccourci() ?? '',
'nomShort' => $secteur->getNomShort() ?? '',
'emailFrom' => $secteur->getEmailFrom() ?? '',
'emailToTest' => $secteur->getEmailToTest() ?? '',
'couleur' => $secteur->getCouleur() ?? '#000000',
'ordre' => $secteur->getOrdre(),
'langues' => $secteur->getLanguesIdsArray(),
'pays' => $secteur->getSecteurPaysIds(),
'prefixPhones' => $secteur->getSecteurPaysPrefixPhonesArray(),
'fonctionnement' => $secteur->getFonctionnement() ? $secteur->getFonctionnement()->getId() : 0,
'planning1Id' => $secteur->getPlanning1Id() ?? 0,
'planning2Id' => $secteur->getPlanning2Id() ?? 0,
'sousSecteurs' => [],
'supervisionPlanningId' => $secteur->getSupervisionPlanningId() ?? 0,
'vetcoachPlanningId' => $secteur->getVetcoachPlanningId() ?? 0,
'asvPlanningId' => $secteur->getAsvPlanningId() ?? 0,
'astreinteChirurgiePlanningId' => $secteur->getAstreinteChirurgiePlanningId() ?? 0,
];
foreach ($secteur->getSousSecteurCollection() as $sousSecteur) {
$formData['sousSecteurs'][] = [
'id' => $sousSecteur->getId(),
'nom' => $sousSecteur->getNom(),
'planning1' => $sousSecteur->getPlanning1(),
'planning2' => $sousSecteur->getPlanning2(),
];
}
if (!$formData['sousSecteurs']) {
$formData['sousSecteurs'][] = [
'id' => 0,
'nom' => '',
'planning1' => false,
'planning2' => false,
];
}
$params['secteurUrl'] = $this->urlGenerator->generate('app_admin_params_secteur');
$params['secteurs'] = [];
foreach ($this->vetoadomEntityManager->getRepository(Secteur::class)->findBy([],['nom' => 'ASC']) as $item) {
$params['secteurs'][] = [
'id' => $item->getId(),
'nom' => $item->getNom(),
];
}
$params['langues'] = [];
foreach ($this->vetoadomEntityManager->getRepository(Langue::class)->findAll() as $langue) {
$params['langues'][] = [
'id' => $langue->getId(),
'nom' => $langue->getNom(),
];
}
$params['pays'] = [];
foreach ($this->vetoadomEntityManager->getRepository(Pays::class)->findBy([],['nom' => 'ASC']) as $pays) {
$params['pays'][] = [
'id' => $pays->getId(),
'nom' => $pays->getNom(),
'fuseauHoraireGroupe' => $pays->getFuseauHoraire()->getGroupe(),
];
}
$params['fonctionnements'] = [];
foreach ($this->vetoadomEntityManager->getRepository(Fonctionnement::class)->findAll() as $fonctionnement) {
$params['fonctionnements'][] = [
'id' => $fonctionnement->getId(),
'nom' => $fonctionnement->getNom(),
'code' => $fonctionnement->getCode(),
'planningTypeId' => $fonctionnement->getPlanningTypeId(),
];
}
$params['sites'] = [];
foreach ($this->planningEntityManager->getRepository(Site::class)->findBy([],['nom' => 'ASC']) as $site) {
if (
!$site->getPlanningParams()
|| !$site->getPlanningParams()->getFonction()
) continue;
$params['sites'][] = [
'id' => $site->getId(),
'nom' => $site->getNom(),
'type' => $site->getPlanningParams()->getType()->getId(),
'fonction' => $site->getPlanningParams()->getFonction()->getId(),
];
}
// section planning regulation
if ($params['restrictions']['planningRegulationShow']) {
$params['jourTypes'] = [];
foreach ($this->vetoadomEntityManager->getRepository(JourType::class)->findAll() as $jourType) {
$params['jourTypes'][] = [
'id' => $jourType->getId(),
'nom' => $this->translator->trans('jour.' . $jourType->getCode(), [], 'messages'),
'nomRaccourci' => $this->translator->trans('jour_raccourci.' . $jourType->getCode(), [], 'messages')
];
}
$params['planningRegulationDefault'] = [
'planningId' => 0,
'jourType' => 0,
'debutHeure' => '',
'finHeure' => '',
];
$params['secteurPlanningRegulation'] = [];
foreach ($secteur->getSecteurPlanningRegulationCollection() as $secteurPlanningRegulation) {
$params['secteurPlanningRegulation'][] = [
'planningId' => $secteurPlanningRegulation->getPlanningId(),
'jourType' => $secteurPlanningRegulation->getJourType()->getId(),
'debutHeure' => $secteurPlanningRegulation->getDebutHeure()->format('H:i'),
'finHeure' => $secteurPlanningRegulation->getFinHeure()->format('H:i'),
];
$params['planningRegulationDefault']['planningId'] = $secteurPlanningRegulation->getPlanningId();
}
$params['planningRegulation'] = $params['planningRegulationDefault'];
}
$params['uploadUrl'] = $this->urlGenerator->generate('app_upload');
$params['documents'] = [];
// section zones
if ($params['restrictions']['zonesShow']) {
foreach ($this->vetoadomEntityManager->getRepository(DocumentType::class)->findBy(['type' => 'logo_secteur_zone']) as $documentType) {
$params['documents'][$documentType->getType()] = [
'type' => $documentType->getType(),
'size' => $documentType->getSize(),
'mime' => implode(",",$documentType->getMime()),
'extensions' => implode(",",$documentType->getExtensions()),
'multiple' => $documentType->getMultiple()
];
}
$params['secteurZones'] = [];
foreach ($secteur->getSecteurZoneCollection() as $secteurZone) {
$logoFile = null;
foreach ($secteurZone->getDocumentsActiveByType('logo_secteur_zone') as $document) {
$filePath = sprintf("%s%s",
$this->getParameter('documents_directory'),
$document->getId()
);
if (file_exists($filePath)) {
$fileInfo = new File($filePath);
$logoFile = [
'name' => $document->getNom(),
'size' => $fileInfo->getSize(),
'type' => $fileInfo->getMimeType(),
'ext' => $fileInfo->guessExtension(),
'url' => $this->urlGenerator->generate('app_download', ['documentId' => $document->getId()])
];
}
}
$zone = [
'id' => $secteurZone->getId(),
'pays' => $secteurZone->getPays()->getId(),
'nom' => $secteurZone->getNom(),
'textPriseAppelLangue1' => $secteurZone->getTextPriseAppelLangue1(),
'textPriseAppelLangue2' => $secteurZone->getTextPriseAppelLangue2() ?? '',
'siteProtocol' => $secteurZone->getSiteProtocol(),
'siteInternet' => $secteurZone->getSiteHost(),
'telephone' => $secteurZone->getTelephone(),
'logoFile' => $logoFile,
'zoneType' => $secteurZone->getZoneType() ? $secteurZone->getZoneType()->getId() : 0,
'sousSecteur' => $secteurZone->getSousSecteur() ? $secteurZone->getSousSecteur()->getId() : 0,
'formId' => (string)microtime(true)
];
if ($params['restrictions']['zonesCalculShow']) {
$zone['calculAdresse1'] = $secteurZone->getCalculAdresse1() ?? '';
$zone['calculAdresse2'] = $secteurZone->getCalculAdresse2() ?? '';
$zone['calculX'] = $secteurZone->getCalculX() ?? '';
$zone['calculY'] = $secteurZone->getCalculY() ?? '';
$zone['ville'] = $secteurZone->getCalculVille() ? $secteurZone->getCalculVille()->getId() : 0;
$zone['villeCp'] = $secteurZone->getCalculVille() ? $secteurZone->getCalculVille()->getCp() : '';
$zone['villeSearchStarted'] = false;
$zone['villeSearchTimer'] = null;
$zone['villes'] = [];
if ($secteurZone->getCalculVille()) {
$zone['villes'] = $this->vetoadomEntityManager->getRepository(Ville::class)->getVillesForApi(['pays' => $secteur->getSecteurPaysIds(), 'cp' => $secteurZone->getCalculVille()->getCp()]);
}
}
$params['secteurZones'][] = $zone;
}
$params['secteurZoneDefault'] = [
'id' => 0,
'pays' => 0,
'nom' => '',
'textPriseAppelLangue1' => '',
'textPriseAppelLangue2' => '',
'siteProtocol' => 'https',
'siteInternet' => '',
'telephone' => '',
'logoFile' => null,
'zoneType' => 0,
'sousSecteur' => 0,
'formId' => ''
];
if ($params['restrictions']['zonesCalculShow']) {
$params['secteurZoneDefault']['calculAdresse1'] = '';
$params['secteurZoneDefault']['calculAdresse2'] = '';
$params['secteurZoneDefault']['calculX'] = '';
$params['secteurZoneDefault']['calculY'] = '';
$params['secteurZoneDefault']['ville'] = 0;
$params['secteurZoneDefault']['villeCp'] = '';
$params['secteurZoneDefault']['villeSearchStarted'] = false;
$params['secteurZoneDefault']['villeSearchTimer'] = null;
$params['secteurZoneDefault']['villes'] = [];
}
if (!$params['secteurZones']) {
$params['secteurZones'][] = $params['secteurZoneDefault'];
}
$params['zoneTypes'] = [];
foreach ($this->vetoadomEntityManager->getRepository(ZoneType::class)->findAll() as $zoneType) {
$params['zoneTypes'][] = [
'id' => $zoneType->getId(),
'nom' => $this->translator->trans('zone_type.'.$zoneType->getCode(), [], 'messages'),
];
}
}
// section categoriesPoidsEspeces
if ($params['restrictions']['categoriesPoidsEspecesShow']) {
$params['secteurEspeces'] = [];
foreach ($this->vetoadomEntityManager->getRepository(SecteurEspece::class)->findAll() as $secteurEspece) {
$params['secteurEspeces'][] = [
'id' => $secteurEspece->getId(),
'nom' => $this->translator->trans('secteur_espece.'.$secteurEspece->getCode(), [], 'messages'),
];
}
$params['secteurCategoriePoidsEspeces'] = [];
foreach ($secteur->getSecteurCategoriePoidsEspeceCollection() as $secteurCategoriePoidsEspece) {
$params['secteurCategoriePoidsEspeces'][] = [
'id' => $secteurCategoriePoidsEspece->getId(),
'secteurEspece' => $secteurCategoriePoidsEspece->getSecteurEspece()->getId(),
'min' => $secteurCategoriePoidsEspece->getMin(),
'max' => $secteurCategoriePoidsEspece->getMax()
];
}
$params['secteurCategoriePoidsEspeceDefault'] = [
'id' => 0,
'secteurEspece' => 0,
'min' => '',
'max' => ''
];
}
// section localisation clinique
if ($params['restrictions']['localisationCliniqueShow']) {
$params['localisationClinique'] = [
'adresse1' => $secteur->getAdresse1() ?? '',
'adresse2' => $secteur->getAdresse2() ?? '',
'ville' => $secteur->getVille() ? $secteur->getVille()->getId() : 0,
'villeCp' => $secteur->getVille() ? $secteur->getVille()->getCp() : '',
'villeSearchStarted' => false,
'villeSearchTimer' => null,
'villes' => []
];
if ($secteur->getVille()) {
$params['localisationClinique']['villes'] = $this->vetoadomEntityManager->getRepository(Ville::class)->getVillesForApi(['pays' => $secteur->getSecteurPaysIds(), 'cp' => $secteur->getVille()->getCp()]);
}
}
// section localisation cliniques secondaires
if ($params['restrictions']['localisationCliniquesSecondairesShow']) {
$params['localisationCliniquesSecondaires'] = [];
foreach ($secteur->getSecteurCliniqueSecondaireCollection() as $index => $secteurCliniqueSecondaire) {
if (!$secteurCliniqueSecondaire->getActive()) continue;
$params['localisationCliniquesSecondaires'][] = [
'id' => $secteurCliniqueSecondaire->getId(),
'nom' => $secteurCliniqueSecondaire->getNom(),
'adresse1' => $secteurCliniqueSecondaire->getAdresse1(),
'adresse2' => $secteurCliniqueSecondaire->getAdresse2() ?? '',
'ville' => $secteurCliniqueSecondaire->getVille()->getId(),
'villeCp' => $secteurCliniqueSecondaire->getVille()->getCp(),
'villeSearchStarted' => false,
'villeSearchTimer' => null,
'villes' => $this->vetoadomEntityManager->getRepository(Ville::class)->getVillesForApi(['pays' => $secteur->getSecteurPaysIds(), 'cp' => $secteurCliniqueSecondaire->getVille()->getCp()])
];
}
$params['localisationCliniquesSecondairesDefault'] = [
'id' => 0,
'nom' => '',
'adresse1' => '',
'adresse2' => '',
'ville' => 0,
'villeCp' => '',
'villeSearchStarted' => false,
'villeSearchTimer' => null,
'villes' => []
];
if (!$params['localisationCliniquesSecondaires']) {
$params['localisationCliniquesSecondaires'][] = $params['localisationCliniquesSecondairesDefault'];
}
}
// section Gamme de tarif pour chaque jour de la semaine
if ($params['restrictions']['gammeTarifShow']) {
if (!array_key_exists('jourTypes',$params)) {
$params['jourTypes'] = [];
foreach ($this->vetoadomEntityManager->getRepository(JourType::class)->findAll() as $jourType) {
$params['jourTypes'][] = [
'id' => $jourType->getId(),
'nom' => $this->translator->trans('jour.' . $jourType->getCode(), [], 'messages'),
'nomRaccourci' => $this->translator->trans('jour_raccourci.' . $jourType->getCode(), [], 'messages')
];
}
}
$params['tarifs'] = [];
foreach ($this->vetoadomEntityManager->getRepository(Tarif::class)->findBy(['active' => 1]) as $tarif) {
$params['tarifs'][] = [
'id' => $tarif->getId(),
'nom' => $this->translator->trans('tarif.' . $tarif->getCode(), [], 'messages'),
];
}
$params['secteurGammeTarif'] = [];
foreach ($secteur->getSecteurGammeTarifCollection() as $secteurGammeTarif) {
$params['secteurGammeTarif'][] = [
'jourType' => $secteurGammeTarif->getJourType()->getId(),
'debutHeure' => $secteurGammeTarif->getDebutHeure()->format('H:i'),
'finHeure' => $secteurGammeTarif->getFinHeure()->format('H:i'),
'tarif' => $secteurGammeTarif->getTarif()->getId(),
];
}
$params['gammeTarifDefault'] = [
'jourType' => 0,
'debutHeure' => '',
'finHeure' => '',
'tarif' => 0,
];
$params['gammeTarif'] = $params['gammeTarifDefault'];
}
// section textes
if ($params['restrictions']['textesShow']) {
$params['textes'] = [
'texteMonoLangue1' => $secteur->getTexteMonoLangue1() ?? '',
'texteMonoLangue2' => $secteur->getTexteMonoLangue2() ?? '',
'texteMultiLangue1' => $secteur->getTexteMultiLangue1() ?? '',
'texteMultiLangue2' => $secteur->getTexteMultiLangue2() ?? '',
'texteSansLangue1' => $secteur->getTexteSansLangue1() ?? '',
'texteSansLangue2' => $secteur->getTexteSansLangue2() ?? '',
];
$variableEmplacements[] = 'secteur_text_mono_veterinaire';
$variableEmplacements[] = 'secteur_text_multi_veterinaire';
$variableEmplacements[] = 'secteur_text_sans_veterinaire';
}
// section sms
if ($params['restrictions']['smsShow']) {
$params['sms'] = [
'smsExpediteur' => $secteur->getSmsExpediteur() ?? '',
'smsContenueLangue1' => $secteur->getSmsContenueLangue1() ?? '',
'smsContenueLangue2' => $secteur->getSmsContenueLangue2() ?? '',
];
$variableEmplacements[] = 'sms_clinique';
$variableEmplacements[] = 'sms_domicile';
}
// section chat
if ($params['restrictions']['chatShow']) {
$params['chat']['plannings'] = [];
foreach ($this->planningEntityManager->getRepository(Site::class)->findBy([], ['nom' => 'ASC']) as $item) {
$params['chat']['plannings'][] = [
'id' => $item->getId(),
'nom' => $item->getNom(),
];
}
$planningIds = $this->vetoadomEntityManager->getRepository(ChatCanalPlanning::class)->getChatCanalPlanningIdsArray($secteur->getChatCanal());
$params['chat']['planningsSelected'] = [];
foreach ($params['chat']['plannings'] as $item) {
if (in_array($item['id'], $planningIds)) {
$params['chat']['planningsSelected'][] = $item;
}
}
if ($secteur->getFonctionnement()->getCode() == 'domicile') {
$params['chat']['chatConsultationAccesRestreint'] = $secteur->getChatConsultationAccesRestreint() ?? false;
}
$params['chat']['chatConsultationCreationMonoLangue1'] = $secteur->getChatConsultationCreationMonoLangue1() ?? '';
$params['chat']['chatConsultationCreationMonoLangue2'] = $secteur->getChatConsultationCreationMonoLangue2() ?? '';
$params['chat']['chatConsultationCreationMultiLangue1'] = $secteur->getChatConsultationCreationMultiLangue1() ?? '';
$params['chat']['chatConsultationCreationMultiLangue2'] = $secteur->getChatConsultationCreationMultiLangue2() ?? '';
$params['chat']['chatConsultationCreationSansLangue1'] = $secteur->getChatConsultationCreationSansLangue1() ?? '';
$params['chat']['chatConsultationCreationSansLangue2'] = $secteur->getChatConsultationCreationSansLangue2() ?? '';
$variableEmplacements[] = 'secteur_chat_consultation_creation_mono_veterinaire';
$variableEmplacements[] = 'secteur_chat_consultation_creation_multi_veterinaire';
$variableEmplacements[] = 'secteur_chat_consultation_creation_sans_veterinaire';
}
// section autre
if ($params['restrictions']['autresShow']) {
$params['autres'] = [
'coeffFeux' => $secteur->getCoeffFeux() ?? '',
];
if ($params['restrictions']['autresReferantShow']) {
$params['autres']['referant'] = $secteur->getReferant() ? $secteur->getReferant()->getId() : 0;
$params['referants'] = [];
foreach ($this->vetoadomEntityManager->getRepository(Referant::class)->findBy([], ['nom' => 'ASC']) as $referant) {
$params['referants'][] = [
'id' => $referant->getId(),
'nom' => $referant->getNom()
];
}
}
if ($params['restrictions']['autresDelaiShow']) {
$params['autres']['secteurDelaiDefaut'] = $secteur->getSecteurDelaiDefaut() ? $secteur->getSecteurDelaiDefaut()->getId() : 0;
$params['secteurDelaiDefaut'] = [];
foreach ($this->vetoadomEntityManager->getRepository(SecteurDelaiDefaut::class)->findAll() as $secteurDelaiDefaut) {
$params['secteurDelaiDefaut'][] = [
'id' => $secteurDelaiDefaut->getId(),
'nom' => $this->translator->trans('secteur_delai_default.' . $secteurDelaiDefaut->getCode(), [], 'messages'),
];
}
}
$params['autres']['emailManagerServiceRegulation'] = $secteur->getEmailManagerServiceRegulation() ?? '';
if ($params['restrictions']['autresCentreMapShow']) {
$params['centreMap'] = [
'ville' => $secteur->getVille() ? $secteur->getVille()->getId() : 0,
'villeCp' => $secteur->getVille() ? $secteur->getVille()->getCp() : '',
'villeSearchStarted' => false,
'villeSearchTimer' => null,
'villes' => []
];
if ($secteur->getVille()) {
$params['centreMap']['villes'] = $this->vetoadomEntityManager->getRepository(Ville::class)->getVillesForApi(['pays' => $secteur->getSecteurPaysIds(), 'cp' => $secteur->getVille()->getCp()]);
}
}
}
if ($variableEmplacements) {
foreach ($this->vetoadomEntityManager->getRepository(Variable::class)->getVariables($variableEmplacements) as $variable) {
$variableCodes = [];
foreach ($variable->getVariableEmplacement() as $variableEmplacement) {
$variableCodes[] = $variableEmplacement->getCode();
}
$params['variables'][] = [
'code' => $variable->getCode(),
'nom' => $this->translator->trans('variable.' . $variable->getCode(), [], 'messages'),
'variableEmplacements' => $variableCodes
];
}
}
// scripts translation
$domainContext = [
'scripts' => [
'alert_modal',
'error_alert_modal'
],
'validators' => [
'common',
'documents',
'page_admin_params_secteur'
],
];
$params['trans'] = $this->translation->getTranslation($domainContext);
return $this->render(
'admin-params-secteur.html.twig',
[
'user' => $user,
'formData' => $formData,
'params' => $params
]
);
}
# POST
$action = $request->get('action');
switch($action){
case 'saveSecteur':
{
$errorAlerts = [];
$validators = ['nom','nomRaccourci','nomShort','emailFrom','couleur','ordre','langue1','fonctionnement','planning1Id'];
$secteur->setNom($this->misc->toUpper($request->get('nom')));
$secteur->setNomRaccourci($this->misc->toUpper($request->get('nomRaccourci')));
$secteur->setNomShort($this->misc->toUpper($request->get('nomShort')));
$secteur->setEmailFrom($this->misc->toLower($request->get('emailFrom')));
$secteur->setEmailToTest($this->misc->toLower($request->get('emailToTest')));
if ($secteur->getEmailToTest() !== null) {
$validators[] = 'emailToTest';
}
$secteur->setCouleur(trim($request->get('couleur') ?? ''));
$secteur->setOrdre((int)($request->get('ordre') ?? 0));
if (!$params['restrictions']['langueDisabled']) {
$langueIds = $request->get('langues') ?? [];
if (!is_array($langueIds)) $langueIds = [];
$secteur->setLangue1(null);
$secteur->setLangue2(null);
$index = 1;
foreach ($langueIds as $langueId) {
if ($index == 3) break;
if ($langue = $this->vetoadomEntityManager->getRepository(Langue::class)->findOneBy(['id' => (int)$langueId])) {
$secteur->{'setLangue' . $index}($langue);
}
$index++;
}
}
if (!$params['restrictions']['paysDisabled']) {
$paysIds = $request->get('pays') ?? [];
if (!is_array($paysIds)) $paysIds = [];
$prefixPhones = $request->get('prefixPhones') ?? [];
if (!is_array($prefixPhones)) $prefixPhones = [];
// add pays
foreach ($paysIds as $paysId) {
$paysId = (int)$paysId;
if ($secteur->hasPays($paysId)) continue;
$pays = $paysId ? $this->vetoadomEntityManager->getRepository(Pays::class)->findOneBy(['id' => $paysId]) : null;
if (!$pays) continue;
$secteurPays = new SecteurPays();
$secteurPays->setSecteur($secteur);
$secteurPays->setPays($pays);
$secteurPays->setPrefixPhone($prefixPhones[$paysId] ?? '');
$this->vetoadomEntityManager->persist($secteurPays);
$secteur->getSecteurPaysCollection()->add($secteurPays);
}
// remove pays
$fuseauHoraireGroupes = [];
foreach ($secteur->getSecteurPaysCollection() as $secteurPays) {
if (in_array($secteurPays->getPays()->getId(), $paysIds)) {
if (!in_array($secteurPays->getPays()->getFuseauHoraire()->getGroupe(), $fuseauHoraireGroupes)) {
$fuseauHoraireGroupes[] = $secteurPays->getPays()->getFuseauHoraire()->getGroupe();
}
continue;
}
$secteur->getSecteurPaysCollection()->removeElement($secteurPays);
$this->vetoadomEntityManager->remove($secteurPays);
}
if (!$secteur->getSecteurPaysCollection()->count()) {
$this->customJsonResponse->setField('pays', $this->translator->trans('common.blank', [], 'validators'));
}
else if (count($fuseauHoraireGroupes) > 1) {
$this->customJsonResponse->setField('pays', $this->translator->trans('page_admin_params_secteur.pays_fuseau_horaire', [], 'validators'));
}
}
else {
$prefixPhones = $request->get('prefixPhones') ?? [];
if (!is_array($prefixPhones)) $prefixPhones = [];
foreach ($secteur->getSecteurPaysCollection() as $secteurPays) {
$secteurPays->setPrefixPhone($prefixPhones[$secteurPays->getPays()->getId()] ?? '');
}
}
if (!$params['restrictions']['fonctionnementDisabled']) {
$fonctionnement = (int)($request->get('fonctionnement') ?? 0);
$secteur->setFonctionnement($fonctionnement ? $this->vetoadomEntityManager->getRepository(Fonctionnement::class)->findOneBy(['id' => $fonctionnement]) : null);
}
if ($secteur->getFonctionnement()) {
$planning1Id = $request->get('planning1Id') ?? 0;
$planningParams = $planning1Id ? $this->planningEntityManager->getRepository(PlanningParams::class)->findOneBy(['fonction' => 1, 'site' => $planning1Id, 'type' => $secteur->getFonctionnement()->getPlanningTypeId()]) : null;
$secteur->setPlanning1Id($planningParams ? $planningParams->getSite()->getId() : null);
$planning2Id = $request->get('planning2Id') ?? 0;
$planningParams = $planning2Id ? $this->planningEntityManager->getRepository(PlanningParams::class)->findOneBy(['fonction' => 1, 'site' => $planning2Id, 'type' => $secteur->getFonctionnement()->getPlanningTypeId()]) : null;
$secteur->setPlanning2Id($planningParams ? $planningParams->getSite()->getId() : null);
if (
$secteur->getPlanning1Id()
&& $secteur->getPlanning1Id() == $secteur->getPlanning2Id()
) {
$secteur->setPlanning2Id(null);
}
if ($secteur->getFonctionnement()->getCode() != 'medicphone') {
$validators[] = 'supervisionPlanningId';
$validators[] = 'vetcoachPlanningId';
}
$supervisionPlanningId = $request->get('supervisionPlanningId') ?? 0;
$planningParams = $supervisionPlanningId ? $this->planningEntityManager->getRepository(PlanningParams::class)->findOneBy(['fonction' => 4, 'site' => $supervisionPlanningId]) : null;
$secteur->setSupervisionPlanningId($planningParams ? $planningParams->getSite()->getId() : null);
$vetcoachPlanningId = $request->get('vetcoachPlanningId') ?? 0;
$planningParams = $vetcoachPlanningId ? $this->planningEntityManager->getRepository(PlanningParams::class)->findOneBy(['fonction' => [4,5], 'site' => $vetcoachPlanningId]) : null;
$secteur->setVetcoachPlanningId($planningParams ? $planningParams->getSite()->getId() : null);
if ($secteur->getFonctionnement()->getCode() == 'clinique') {
$validators[] = 'asvPlanningId';
$asvPlanningId = $request->get('asvPlanningId') ?? 0;
$planningParams = $asvPlanningId ? $this->planningEntityManager->getRepository(PlanningParams::class)->findOneBy(['fonction' => 2, 'site' => $asvPlanningId, 'type' => $secteur->getFonctionnement()->getPlanningTypeId()]) : null;
$secteur->setAsvPlanningId($planningParams ? $planningParams->getSite()->getId() : null);
$astreinteChirurgiePlanningId = $request->get('astreinteChirurgiePlanningId') ?? 0;
$planningParams = $astreinteChirurgiePlanningId ? $this->planningEntityManager->getRepository(PlanningParams::class)->findOneBy(['fonction' => 1, 'site' => $astreinteChirurgiePlanningId, 'type' => $secteur->getFonctionnement()->getPlanningTypeId()]) : null;
$secteur->setAstreinteChirurgiePlanningId($planningParams ? $planningParams->getSite()->getId() : null);
}
else {
$secteur->setAsvPlanningId(null);
$secteur->setAstreinteChirurgiePlanningId(null);
}
}
# sousSecteurs
$sousSecteurs = $request->get('sousSecteurs') ?? [];
if (!is_array($sousSecteurs)) $sousSecteurs = [];
// add sousSecteurs
$validatorsSousSecteur = ['nom'];
foreach ($sousSecteurs as $index => $item) {
$sousSecteurNom = $this->misc->toUpper($item['nom'] ?? '');
$sousSecteurs[$index]['nom'] = $sousSecteurNom;
$sousSecteurPlanning1 = (bool)($item['planning1'] ?? false);
if ($secteur->getPlanning2Id()) {
$sousSecteurPlanning2 = (bool)($item['planning2'] ?? false);
}
else {
$sousSecteurPlanning2 = false;
}
if (
$sousSecteurNom === ''
&& !$sousSecteurPlanning1
&& !$sousSecteurPlanning2
) continue;
if (!$sousSecteurPlanning1 && !$sousSecteurPlanning2) {
$this->customJsonResponse->setField("sousSecteur-planning{$index}",$this->translator->trans('common.blank', [], 'validators'));
}
if ($secteur->hasSousSecteurByNom($sousSecteurNom)) {
$sousSecteur = $secteur->getSousSecteurByNom($sousSecteurNom);
$sousSecteur->setPlanning1($sousSecteurPlanning1);
$sousSecteur->setPlanning2($sousSecteurPlanning2);
}
else {
$sousSecteur = new SousSecteur();
$sousSecteur->setSecteur($secteur);
$sousSecteur->setNom($sousSecteurNom);
$sousSecteur->setPlanning1($sousSecteurPlanning1);
$sousSecteur->setPlanning2($sousSecteurPlanning2);
$this->vetoadomEntityManager->persist($sousSecteur);
$secteur->getSousSecteurCollection()->add($sousSecteur);
}
# secteur validation
$errors = $this->validator->validate($sousSecteur,null, $validatorsSousSecteur);
if ($errors->count()) {
foreach ($errors as $key => $error) {
$propertyPath = "sousSecteur-{$error->getPropertyPath()}{$index}";
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
}
}
// remove sousSecteurs
foreach ($secteur->getSousSecteurCollection() as $sousSecteur) {
if (in_array($sousSecteur->getNom(),array_column($sousSecteurs,'nom')) !== false) {
continue;
}
// check for exist secteurZone with this sousSecteur
if ($sousSecteur->getId()) {
$zonesNoms = [];
foreach ($secteur->getSecteurZoneCollection() as $item) {
if ($item->getSecteur()->getId() != $sousSecteur->getId()) continue;
$zonesNoms[] = $item->getNom();
}
if ($zonesNoms) {
$errorAlerts[] = $this->translator->trans('page_admin_params_secteur.secteur_unknown',
['{{sousSecteurNom}}' => $sousSecteur->getNom(), '{{zonesNoms}}' => implode(", ",$zonesNoms)],
'validators'
);
}
}
$secteur->getSousSecteurCollection()->removeElement($sousSecteur);
$this->vetoadomEntityManager->remove($sousSecteur);
}
# secteur validation
$errors = $this->validator->validate($secteur,null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
if (!$this->customJsonResponse->hasField($error->getPropertyPath())) {
$this->customJsonResponse->setField($error->getPropertyPath(), $error->getMessage());
}
}
}
if ($errorAlerts) {
$this->customJsonResponse->setField('alert', implode("<br>",$errorAlerts));
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'savePlanningRegulation':
{
if (!$params['restrictions']['planningRegulationShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$sites = [];
foreach ($this->planningEntityManager->getRepository(Site::class)->findBy([],['nom' => 'ASC']) as $site) {
if (
!$site->getPlanningParams()
|| !$site->getPlanningParams()->getFonction()
|| !in_array($site->getPlanningParams()->getFonction()->getId(),[3,4])
) continue;
$sites[$site->getId()] = $site;
}
$jourTypes = [];
foreach ($this->vetoadomEntityManager->getRepository(JourType::class)->findAll() as $jourType) {
$jourTypes[$jourType->getId()] = $jourType;
}
$secteurPlanningRegulations = $request->get('secteurPlanningRegulations') ?? [];
if (!is_array($secteurPlanningRegulations)) $secteurPlanningRegulations= [];
// add secteurPlanningRegulation
$secteurPlanningRegulationsAll = [];
foreach ($secteurPlanningRegulations as $item) {
$planningId = (int)($item['planningId'] ?? 0);
if (!array_key_exists($planningId,$sites)) continue;
$jourType = (int)($item['jourType'] ?? 0);
if (!array_key_exists($jourType,$jourTypes)) continue;
if (($debutHeure = \DateTime::createFromFormat("!H:i", $item['debutHeure'] ?? '')) === false) continue;
if (($finHeure = \DateTime::createFromFormat("!H:i", $item['finHeure'] ?? '')) === false) continue;
if ($finHeure->format('H:i') == '23:59') {
$finHeure->add(new \DateInterval('PT59S'));
}
if ($debutHeure >= $finHeure) continue;
// cross check through all plannings
foreach ($secteurPlanningRegulationsAll as $spl) {
if (
$spl['jourType'] == $jourType
&&
(
($spl['debutHeure'] <= $debutHeure && $spl['finHeure'] >= $finHeure)
|| ($spl['debutHeure'] > $debutHeure && $spl['debutHeure'] < $finHeure)
|| ($spl['finHeure'] > $debutHeure && $spl['finHeure'] < $finHeure)
)
) continue(2);
}
$secteurPlanningRegulationsAll[] = [
'planningId' => $planningId,
'jourType' => $jourType,
'debutHeure' => $debutHeure,
'finHeure' => $finHeure
];
if ($secteur->hasSecteurPlanningRegulation($planningId,$jourType,$debutHeure,$finHeure)) continue;
$secteurPlanningRegulation = new SecteurPlanningRegulation();
$secteurPlanningRegulation->setSecteur($secteur);
$secteurPlanningRegulation->setPlanningId($planningId);
$secteurPlanningRegulation->setJourType($jourTypes[$jourType]);
$secteurPlanningRegulation->setDebutHeure($debutHeure);
$secteurPlanningRegulation->setFinHeure($finHeure);
$this->vetoadomEntityManager->persist($secteurPlanningRegulation);
$secteur->getSecteurPlanningRegulationCollection()->add($secteurPlanningRegulation);
}
// remove secteurPlanningRegulation
foreach ($secteur->getSecteurPlanningRegulationCollection() as $secteurPlanningRegulation) {
$search = [
'planningId' => $secteurPlanningRegulation->getPlanningId(),
'jourType' => $secteurPlanningRegulation->getJourType()->getId(),
'debutHeure' => $secteurPlanningRegulation->getDebutHeure(),
'finHeure' => $secteurPlanningRegulation->getFinHeure()
];
if (in_array($search,$secteurPlanningRegulationsAll)) continue;
$secteur->getSecteurPlanningRegulationCollection()->removeElement($secteurPlanningRegulation);
$this->vetoadomEntityManager->remove($secteurPlanningRegulation);
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveSecteurZone':
{
if (!$params['restrictions']['zonesShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$zoneTypes = [];
foreach ($this->vetoadomEntityManager->getRepository(ZoneType::class)->findAll() as $zoneType) {
$zoneTypes[$zoneType->getId()] = $zoneType;
}
$secteurZones = $request->get('secteurZones') ?? [];
if (!is_array($secteurZones)) $secteurZones = [];
// add secteurZone
$secteurZonesAll = [];
$secteurZonesFormIds = [];
foreach ($secteurZones as $index => $item) {
$validators = ['nom','pays','textPriseAppelLangue1','telephone','siteInternet','zoneType','sousSecteur'];
$id = (int)($item['id'] ?? 0);
$secteurZone = $id && $secteur->hasSecteurZoneById($id) ? $secteur->getSecteurZoneById($id) : new SecteurZone();
$secteurZone->setSecteur($secteur);
$paysId = (int)($item['pays'] ?? 0);
$secteurZone->setPays($secteur->hasPays($paysId) ? $secteur->getSecteurPaysById($paysId)->getPays() : null);
$secteurZone->setNom($this->misc->toUpper($item['nom']));
$secteurZone->setTextPriseAppelLangue1(trim($item['textPriseAppelLangue1'] ?? ''));
if ($secteur->getLangue2()) {
$validators[] = 'textPriseAppelLangue2';
$secteurZone->setTextPriseAppelLangue2(trim($item['textPriseAppelLangue2'] ?? ''));
}
$secteurZone->setTelephone($item['telephone'] ?? '');
$siteProtocol = trim($item['siteProtocol'] ?? '');
$siteInternet = trim($item['siteInternet'] ?? '');
$siteInternet = in_array($siteProtocol,['https','http']) && !empty($siteInternet) ? $siteProtocol . '://' . $siteInternet : '';
$secteurZone->setSiteInternet($siteInternet);
if (array_key_exists($item['zoneType'] ?? 0,$zoneTypes)) {
$secteurZone->setZoneType($zoneTypes[$item['zoneType']]);
}
else {
$secteurZone->setZoneType(null);
}
$sousSecteurId = (int)($item['sousSecteur'] ?? 0);
$secteurZone->setSousSecteur($secteur->hasSousSecteurById($sousSecteurId) ? $secteur->getSousSecteurById($sousSecteurId) : null);
# hors_zone_proche
# calcul fields
if (
$params['restrictions']['zonesCalculShow']
&& $secteurZone->getZoneType()
&& $secteurZone->getZoneType()->getId() == 2
) {
$validators[] = 'calculAdresse1';
$validators[] = 'calculAdresse2';
$validators[] = 'calculVille';
$validators[] = 'calculX';
$validators[] = 'calculY';
$secteurZone->setCalculAdresse1($this->misc->toUpper($item['calculAdresse1'] ?? ''));
$secteurZone->setCalculAdresse2($this->misc->toUpper($item['calculAdresse2'] ?? ''));
$villeId = (int)($item['ville'] ?? 0);
$ville = $villeId ? $this->vetoadomEntityManager->getRepository(Ville::class)->findOneBy(['id' => $villeId]) : null;
if (
$ville
&& $secteur->hasPays($ville->getPays()->getId())
) {
$secteurZone->setCalculVille($ville);
# set ville coordinates
$ville = $this->APIlocation->setVilleCoordinates($ville);
}
else {
$secteurZone->setCalculVille(null);
}
$secteurZone->setCalculX((float)($item['calculX'] ?? ''));
if ($secteurZone->getCalculX() == 0) {
$secteurZone->setCalculX(null);
}
$secteurZone->setCalculY((float)($item['calculY'] ?? ''));
if ($secteurZone->getCalculY() == 0) {
$secteurZone->setCalculY(null);
}
}
else {
$secteurZone->setCalculAdresse1(null);
$secteurZone->setCalculAdresse2(null);
$secteurZone->setCalculVille(null);
$secteurZone->setCalculX(null);
$secteurZone->setCalculY(null);
}
# secteurZone validation
$errors = $this->validator->validate($secteurZone,null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
$property = $error->getPropertyPath() == 'calculVille' ? 'ville' : $error->getPropertyPath();
$propertyPath = "secteurZones{$index}-{$property}";
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
continue;
}
if (in_array($this->misc->removeDiacritics($this->misc->toUpper($secteurZone->getNom())),$secteurZonesAll)) {
$this->customJsonResponse->setField("secteurZone-nom{$index}", $this->translator->trans('page_admin_params_secteur_section_zones.secteur_zone_nom_exist', [], 'validators'));
continue;
}
if (!$secteurZone->getId()) {
$this->vetoadomEntityManager->persist($secteurZone);
$secteur->getSecteurZoneCollection()->add($secteurZone);
}
$secteurZonesAll[] = $this->misc->removeDiacritics($this->misc->toUpper($secteurZone->getNom()));
$secteurZonesFormIds[(string)($item['formId'] ?? '')] = $secteurZone;
}
if (
$secteur->getFonctionnement()->getCode() == 'clinique'
&& count($secteurZonesAll) > 1
) {
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
// remove secteurZone
// remove not allowed
/*
foreach ($secteur->getSecteurZoneCollection() as $secteurZone) {
if (in_array($secteurZone->getNom(),$secteurZonesAll)) continue;
// delete all documents
foreach ($secteurZone->getDocumentsCollection() as $document) {
$documentFilePath = $this->getParameter("documents_directory") . $document->getId();
if (file_exists($documentFilePath)) {
unlink($documentFilePath);
}
}
// secteur_zone_ville will be deleted cascade
// maybe need other blocking checks for linked tables
$secteur->getSecteurZoneCollection()->removeElement($secteurZone);
$this->vetoadomEntityManager->remove($secteurZone);
}
*/
$this->vetoadomEntityManager->flush();
// logo
foreach ($this->vetoadomEntityManager->getRepository(DocumentType::class)->findBy(['type' => 'logo_secteur_zone']) as $documentType) {
foreach ($secteurZonesFormIds as $formId => $secteurZone) {
$uploads_directory = sprintf("%s/%s/%s/%s/*",
$this->getParameter('uploads_directory'),
$request->getSession()->getId(),
$formId,
$documentType->getType()
);
if (($files = glob($uploads_directory)) !== false) {
if ($files) {
foreach ($secteurZone->getDocumentsActiveByType($documentType->getType()) as $document) {
$document->setActive(false);
}
}
foreach ($files as $filePath) {
$document = new Document();
$document->setDocumentType($documentType);
$document->setNom(pathinfo($filePath, PATHINFO_BASENAME));
$document->setSecteurZone($secteurZone);
$this->vetoadomEntityManager->persist($document);
$this->vetoadomEntityManager->flush();
// move file from tmp uploads_directory
$documentFilePath = $this->getParameter("documents_directory");
$file = new File($filePath);
$file->move($documentFilePath, $document->getId());
}
}
}
}
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveSecteurCategoriePoidsEpece':
{
if (!$params['restrictions']['categoriesPoidsEspecesShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$secteurEspeces = [];
foreach ($this->vetoadomEntityManager->getRepository(SecteurEspece::class)->findAll() as $secteurEspece) {
$secteurEspeces[$secteurEspece->getId()] = $secteurEspece;
}
$secteurCategoriePoidsEpeces = $request->get('secteurCategoriePoidsEspeces') ?? [];
if (!is_array($secteurCategoriePoidsEpeces)) $secteurCategoriePoidsEpeces = [];
// add secteurCategoriePoidsEpece
$secteurCategoriePoidsEpecesAll = [];
$validators = ['min','max'];
foreach ($secteurCategoriePoidsEpeces as $item) {
$id = (int)($item['id'] ?? 0);
$secteurCategoriePoidsEpece = $id && $secteur->hasSecteurCategoriePoidsEspeceById($id) ? $secteur->getSecteurCategoriePoidsEspeceById($id) : new SecteurCategoriePoidsEspece();
$secteurCategoriePoidsEpece->setSecteur($secteur);
$secteurCategoriePoidsEpece->setMin($item['min'] ?? '');
$secteurCategoriePoidsEpece->setMax($item['max'] ?? '');
$secteurEspeceId = (int)($item['secteurEspece'] ?? 0);
if (array_key_exists($secteurEspeceId,$secteurEspeces)) {
$secteurCategoriePoidsEpece->setSecteurEspece($secteurEspeces[$secteurEspeceId]);
}
else {
continue;
}
$index = array_key_exists($secteurEspeceId,$secteurCategoriePoidsEpecesAll) ? count($secteurCategoriePoidsEpecesAll[$secteurEspeceId]) : 0;
# secteurCategoriePoidsEpece validation
$errors = $this->validator->validate($secteurCategoriePoidsEpece,null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
$propertyPath = "secteurCategoriePoidsEspece-{$error->getPropertyPath()}{$secteurCategoriePoidsEpece->getSecteurEspece()->getId()}-{$index}";
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
continue;
}
# min > max
if ($secteurCategoriePoidsEpece->getMin() > $secteurCategoriePoidsEpece->getMax()) {
$this->customJsonResponse->setField("secteurCategoriePoidsEspece-min{$secteurCategoriePoidsEpece->getSecteurEspece()->getId()}-{$index}", $this->translator->trans('page_admin_params_secteur_section_categories_poids_speces.min_max', [], 'validators'));
continue;
}
# overlap
if (array_key_exists($secteurEspeceId,$secteurCategoriePoidsEpecesAll)) {
$found = false;
foreach ($secteurCategoriePoidsEpecesAll[$secteurEspeceId] as $scpe) {
if (
($secteurCategoriePoidsEpece->getMin() >= $scpe['min'] && $secteurCategoriePoidsEpece->getMin() <= $scpe['max'])
|| ($secteurCategoriePoidsEpece->getMax() >= $scpe['min'] && $secteurCategoriePoidsEpece->getMax() <= $scpe['max'])
|| ($scpe['min'] >= $secteurCategoriePoidsEpece->getMin() && $scpe['min'] <= $secteurCategoriePoidsEpece->getMax())
|| ($scpe['max'] >= $secteurCategoriePoidsEpece->getmin() && $scpe['max'] <= $secteurCategoriePoidsEpece->getMax())
) {
$this->customJsonResponse->setField("secteurCategoriePoidsEspece-min{$secteurCategoriePoidsEpece->getSecteurEspece()->getId()}-{$index}", $this->translator->trans('page_admin_params_secteur_section_categories_poids_speces.overlap', [], 'validators'));
$found = true;
break;
}
}
if ($found) continue;
}
if (!$secteurCategoriePoidsEpece->getId()) {
$this->vetoadomEntityManager->persist($secteurCategoriePoidsEpece);
$secteur->getSecteurCategoriePoidsEspeceCollection()->add($secteurCategoriePoidsEpece);
}
$secteurCategoriePoidsEpecesAll[$secteurCategoriePoidsEpece->getSecteurEspece()->getId()][] = [
'min' => $secteurCategoriePoidsEpece->getMin(),
'max' => $secteurCategoriePoidsEpece->getMax()
];
}
// remove secteurCategoriePoidsEpece
foreach ($secteur->getSecteurCategoriePoidsEspeceCollection() as $secteurCategoriePoidsEpece) {
if (array_key_exists($secteurCategoriePoidsEpece->getSecteurEspece()->getId(),$secteurCategoriePoidsEpecesAll)) {
$found = false;
foreach ($secteurCategoriePoidsEpecesAll[$secteurCategoriePoidsEpece->getSecteurEspece()->getId()] as $scpe) {
if (
$scpe['min'] != $secteurCategoriePoidsEpece->getMin()
|| $scpe['max'] != $secteurCategoriePoidsEpece->getMax()
) continue;
$found = true;
break;
}
if ($found) continue;
}
$secteur->getSecteurCategoriePoidsEspeceCollection()->removeElement($secteurCategoriePoidsEpece);
$this->vetoadomEntityManager->remove($secteurCategoriePoidsEpece);
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveLocalisationClinique':
{
if (!$params['restrictions']['localisationCliniqueShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$validators = ['adresse1','adresse2','ville'];
$secteur->setAdresse1($this->misc->toUpper($request->get('adresse1') ?? ''));
$secteur->setAdresse2($this->misc->toUpper($request->get('adresse2') ?? ''));
$villeId = (int)($request->get('ville') ?? 0);
$ville = $villeId ? $this->vetoadomEntityManager->getRepository(Ville::class)->findOneBy(['id' => $villeId]) : null;
if (
$ville
&& $secteur->hasPays($ville->getPays()->getId())
) {
$secteur->setVille($ville);
}
else {
$secteur->setVille(null);
}
# secteur validation
$errors = $this->validator->validate($secteur,null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
$propertyPath = "localisationClinique-{$error->getPropertyPath()}";
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
# set ville coordinates
$secteur->setVille($this->APIlocation->setVilleCoordinates($secteur->getVille()));
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveLocalisationCliniquesSecondaires':
{
if (!$params['restrictions']['localisationCliniquesSecondairesShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$localisationCliniquesSecondaires = $request->get('localisationCliniquesSecondaires') ?? [];
if (!is_array($localisationCliniquesSecondaires)) $localisationCliniquesSecondaires = [];
// add localisationCliniquesSecondaires
$localisationCliniquesSecondairesNoms = [];
$validators = ['nom','adresse1','adresse2','ville'];
foreach ($localisationCliniquesSecondaires as $index => $item) {
$id = (int)($item['id'] ?? 0);
$secteurCliniqueSecondaire = $id && $secteur->hasSecteurCliniqueSecondaireById($id) ? $secteur->getSecteurCliniqueSecondaireById($id) : new SecteurCliniqueSecondaire();
$secteurCliniqueSecondaire->setSecteur($secteur);
$secteurCliniqueSecondaire->setNom($this->misc->toUpper($item['nom'] ?? ''));
$secteurCliniqueSecondaire->setAdresse1($this->misc->toUpper($item['adresse1'] ?? ''));
$secteurCliniqueSecondaire->setAdresse2($this->misc->toUpper($item['adresse2'] ?? ''));
$villeId = (int)($item['ville'] ?? 0);
$ville = $villeId ? $this->vetoadomEntityManager->getRepository(Ville::class)->findOneBy(['id' => $villeId]) : null;
if (
$ville
&& $secteur->hasPays($ville->getPays()->getId())
) {
$secteurCliniqueSecondaire->setVille($ville);
}
else {
$secteurCliniqueSecondaire->setVille(null);
}
# secteurCliniqueSecondaire validation
$errors = $this->validator->validate($secteurCliniqueSecondaire,null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
$propertyPath = "localisationCliniquesSecondaires{$index}-{$error->getPropertyPath()}";
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
continue;
}
if (in_array($this->misc->removeDiacritics($this->misc->toUpper($secteurCliniqueSecondaire->getNom())),$localisationCliniquesSecondairesNoms)) {
$this->customJsonResponse->setField("localisationCliniquesSecondaires{$index}-nom", $this->translator->trans('page_admin_params_secteur_section_localisation_cliniques_secondaires.nom_exist', [], 'validators'));
continue;
}
# set ville coordinates
$secteurCliniqueSecondaire->setVille($this->APIlocation->setVilleCoordinates($secteurCliniqueSecondaire->getVille()));
if (!$secteurCliniqueSecondaire->getId()) {
$this->vetoadomEntityManager->persist($secteurCliniqueSecondaire);
$secteur->getSecteurCliniqueSecondaireCollection()->add($secteurCliniqueSecondaire);
}
$localisationCliniquesSecondairesNoms[] = $this->misc->removeDiacritics($this->misc->toUpper($secteurCliniqueSecondaire->getNom()));
}
// remove secteurCliniqueSecondaire
foreach ($secteur->getSecteurCliniqueSecondaireCollection() as $secteurCliniqueSecondaire) {
if (!$secteurCliniqueSecondaire->getActive()) continue;
if (in_array($this->misc->removeDiacritics($this->misc->toUpper($secteurCliniqueSecondaire->getNom())),$localisationCliniquesSecondairesNoms)) continue;
$secteurCliniqueSecondaire->setActive(false);
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveGammeTarif':
{
if (!$params['restrictions']['gammeTarifShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$jourTypes = [];
foreach ($this->vetoadomEntityManager->getRepository(JourType::class)->findAll() as $jourType) {
$jourTypes[$jourType->getId()] = $jourType;
}
$tarifs = [];
foreach ($this->vetoadomEntityManager->getRepository(Tarif::class)->findBy(['active' => 1]) as $tarif) {
$tarifs[$tarif->getId()] = $tarif;
}
$secteurGammeTarifs = $request->get('secteurGammeTarifs') ?? [];
if (!is_array($secteurGammeTarifs)) $secteurGammeTarifs= [];
// add secteurGammeTarif
$secteurGammeTarifsAll = [];
foreach ($secteurGammeTarifs as $item) {
$tarif = (int)($item['tarif'] ?? 0);
if (!array_key_exists($tarif,$tarifs)) continue;
$jourType = (int)($item['jourType'] ?? 0);
if (!array_key_exists($jourType,$jourTypes)) continue;
if (($debutHeure = \DateTime::createFromFormat("!H:i", $item['debutHeure'] ?? '')) === false) continue;
if (($finHeure = \DateTime::createFromFormat("!H:i", $item['finHeure'] ?? '')) === false) continue;
if ($finHeure->format('H:i') == '23:59') {
$finHeure->add(new \DateInterval('PT59S'));
}
if ($debutHeure >= $finHeure) continue;
// cross check through all gamme tarifs
foreach ($secteurGammeTarifsAll as $sgt) {
if (
$sgt['jourType'] == $jourType
&&
(
($sgt['debutHeure'] <= $debutHeure && $sgt['finHeure'] >= $finHeure)
|| ($sgt['debutHeure'] > $debutHeure && $sgt['debutHeure'] < $finHeure)
|| ($sgt['finHeure'] > $debutHeure && $sgt['finHeure'] < $finHeure)
)
) continue(2);
}
$secteurGammeTarifsAll[] = [
'jourType' => $jourType,
'debutHeure' => $debutHeure,
'finHeure' => $finHeure,
'tarif' => $tarif,
];
if ($secteur->hasSecteurGammeTarif($jourType,$debutHeure,$finHeure,$tarif)) continue;
$secteurGammeTarif = new SecteurGammeTarif();
$secteurGammeTarif->setSecteur($secteur);
$secteurGammeTarif->setTarif($tarifs[$tarif]);
$secteurGammeTarif->setJourType($jourTypes[$jourType]);
$secteurGammeTarif->setDebutHeure($debutHeure);
$secteurGammeTarif->setFinHeure($finHeure);
$this->vetoadomEntityManager->persist($secteurGammeTarif);
$secteur->getSecteurGammeTarifCollection()->add($secteurGammeTarif);
}
// remove secteurGammeTarif
foreach ($secteur->getSecteurGammeTarifCollection() as $secteurGammeTarif) {
$search = [
'jourType' => $secteurGammeTarif->getJourType()->getId(),
'debutHeure' => $secteurGammeTarif->getDebutHeure(),
'finHeure' => $secteurGammeTarif->getFinHeure(),
'tarif' => $secteurGammeTarif->getTarif()->getId(),
];
if (in_array($search,$secteurGammeTarifsAll)) continue;
$secteur->getSecteurGammeTarifCollection()->removeElement($secteurGammeTarif);
$this->vetoadomEntityManager->remove($secteurGammeTarif);
}
// check that filled all jourTypes 24/7
foreach ($jourTypes as $jourTypeId => $jourType) {
$total = 0;
foreach ($secteur->getSecteurGammeTarifByJourType($jourTypeId) as $secteurGammeTarif) {
$total += $secteurGammeTarif->getFinHeure()->getTimestamp() - $secteurGammeTarif->getDebutHeure()->getTimestamp();
}
if ($total != 86399) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('page_admin_params_secteur_section_gamme_tarif.calendar_not_complete', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveTextes':
{
if (!$params['restrictions']['textesShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$validators = ['texteMonoLangue1','texteMultiLangue1','texteSansLangue1'];
$secteur->setTexteMonoLangue1(trim($request->get('texteMonoLangue1') ?? ''));
$secteur->setTexteMultiLangue1(trim($request->get('texteMultiLangue1') ?? ''));
$secteur->setTexteSansLangue1(trim($request->get('texteSansLangue1') ?? ''));
if ($secteur->getLangue2()) {
$validators[] = 'texteMonoLangue2';
$validators[] = 'texteMultiLangue2';
$validators[] = 'texteSansLangue2';
$secteur->setTexteMonoLangue2(trim($request->get('texteMonoLangue2') ?? ''));
$secteur->setTexteMultiLangue2(trim($request->get('texteMultiLangue2') ?? ''));
$secteur->setTexteSansLangue2(trim($request->get('texteSansLangue2') ?? ''));
}
# secteur validation
$errors = $this->validator->validate($secteur,null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
$propertyPath = "textes-{$error->getPropertyPath()}";
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveSms':
{
if (!$params['restrictions']['smsShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$validators = ['smsExpediteur','smsContenueLangue1'];
$secteur->setSmsExpediteur(trim($request->get('smsExpediteur') ?? ''));
$secteur->setSmsContenueLangue1(trim($request->get('smsContenueLangue1') ?? ''));
if ($secteur->getLangue2()) {
$validators[] = 'smsContenueLangue2';
$secteur->setSmsContenueLangue2(trim($request->get('smsContenueLangue2') ?? ''));
}
# secteur validation
$errors = $this->validator->validate($secteur,null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
$propertyPath = "sms-{$error->getPropertyPath()}";
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveChat':
{
if (!$params['restrictions']['chatShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$planningIds = $request->get('planningIds') ?? [];
if (!is_array($planningIds)) $planningIds = [];
# array of exist chatCanalPlannings
$chatCanalPlannings = [];
foreach ($this->vetoadomEntityManager->getRepository(ChatCanalPlanning::class)->findBy(['chatCanal' => $secteur->getChatCanal()]) as $chatCanalPlanning) {
$chatCanalPlannings[$chatCanalPlanning->getPlanningId()] = $chatCanalPlanning;
}
# add new chatCanalPlannings
$plannings = [];
foreach ($this->planningEntityManager->getRepository(Site::class)->findAll() as $item) {
$plannings[] = $item->getId();
}
foreach ($planningIds as $planningId) {
$planningId = (int)$planningId;
if (!in_array($planningId, $plannings)) continue;
if (array_key_exists($planningId,$chatCanalPlannings)) {
unset($chatCanalPlannings[$planningId]);
continue;
}
$chatCanalPlanning = new ChatCanalPlanning();
$chatCanalPlanning->setChatCanal($secteur->getChatCanal());
$chatCanalPlanning->setPlanningId($planningId);
$this->vetoadomEntityManager->persist($chatCanalPlanning);
}
# remove deleted chatCanalPlannings
foreach ($chatCanalPlannings as $planningId => $chatCanalPlanning) {
$this->vetoadomEntityManager->remove($chatCanalPlanning);
unset($chatCanalPlannings[$planningId]);
}
if ($secteur->getFonctionnement()->getCode() == 'domicile') {
$secteur->setChatConsultationAccesRestreint($request->get('chatConsultationAccesRestreint') ?? false);
}
$validators = [];
if ($chatCanalPlannings || $planningIds) {
$validators = ['chatConsultationCreationMonoLangue1', 'chatConsultationCreationMultiLangue1', 'chatConsultationCreationSansLangue1'];
}
$secteur->setChatConsultationCreationMonoLangue1(trim($request->get('chatConsultationCreationMonoLangue1') ?? ''));
$secteur->setChatConsultationCreationMultiLangue1(trim($request->get('chatConsultationCreationMultiLangue1') ?? ''));
$secteur->setChatConsultationCreationSansLangue1(trim($request->get('chatConsultationCreationSansLangue1') ?? ''));
if ($secteur->getLangue2()) {
if ($chatCanalPlannings) {
$validators[] = 'chatConsultationCreationMonoLangue2';
$validators[] = 'chatConsultationCreationMultiLangue2';
$validators[] = 'chatConsultationCreationSansLangue2';
}
$secteur->setChatConsultationCreationMonoLangue2(trim($request->get('chatConsultationCreationMonoLangue2') ?? ''));
$secteur->setChatConsultationCreationMultiLangue2(trim($request->get('chatConsultationCreationMultiLangue2') ?? ''));
$secteur->setChatConsultationCreationSansLangue2(trim($request->get('chatConsultationCreationSansLangue2') ?? ''));
}
# secteur validation
if ($validators) {
$errors = $this->validator->validate($secteur, null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
$propertyPath = "chat-{$error->getPropertyPath()}";
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
case 'saveAutres':
{
if (!$params['restrictions']['autresShow']) {
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
$validators = ['coeffFeux','emailManagerServiceRegulation'];
$secteur->setCoeffFeux((float)($request->get('coeffFeux') ?? ''));
if ($secteur->getCoeffFeux() == 0) {
$secteur->setCoeffFeux(null);
}
if ($params['restrictions']['autresReferantShow']) {
$validators[] = 'referant';
$referantId = (int)($request->get('referant') ?? 0);
$secteur->setReferant($referantId ? $this->vetoadomEntityManager->getRepository(Referant::class)->findOneBy(['id' => $referantId]) : null);
}
else {
$secteur->setReferant(null);
}
if ($params['restrictions']['autresDelaiShow']) {
$validators[] = 'secteurDelaiDefaut';
$secteurDelaiDefautId = (int)($request->get('secteurDelaiDefaut') ?? 0);
$secteur->setSecteurDelaiDefaut($secteurDelaiDefautId ? $this->vetoadomEntityManager->getRepository(SecteurDelaiDefaut::class)->findOneBy(['id' => $secteurDelaiDefautId]) : null);
}
else {
$secteur->setSecteurDelaiDefaut(null);
}
$secteur->setEmailManagerServiceRegulation($this->misc->toLower($request->get('emailManagerServiceRegulation')));
if ($params['restrictions']['autresCentreMapShow']) {
$validators[] = 'ville';
$villeId = (int)($request->get('ville') ?? 0);
$ville = $villeId ? $this->vetoadomEntityManager->getRepository(Ville::class)->findOneBy(['id' => $villeId]) : null;
if (
$ville
&& $secteur->hasPays($ville->getPays()->getId())
) {
# set ville coordinates
$secteur->setVille($this->APIlocation->setVilleCoordinates($ville));
}
else {
$secteur->setVille(null);
}
}
# secteur validation
$errors = $this->validator->validate($secteur,null, $validators);
if ($errors->count()) {
foreach ($errors as $key => $error) {
if ($error->getPropertyPath() == 'ville') {
$propertyPath = "centreMap-{$error->getPropertyPath()}";
}
else {
$propertyPath = "autres-{$error->getPropertyPath()}";
}
if (!$this->customJsonResponse->hasField($propertyPath)) {
$this->customJsonResponse->setField($propertyPath, $error->getMessage());
}
}
}
if ($this->customJsonResponse->hasAnyField()) {
$this->customJsonResponse->setForbidden(true);
return $this->customJsonResponse->sendResponse();
}
$this->vetoadomEntityManager->flush();
$this->customJsonResponse->setRedirect($this->urlGenerator->generate('app_admin_params_secteur',['secteurId' => $secteur->getId()]));
return $this->customJsonResponse->sendResponse();
}
break;
default:{
$this->customJsonResponse->setForbidden(true);
$this->customJsonResponse->setField('alert', $this->translator->trans('common.action_unknown', [], 'validators'));
return $this->customJsonResponse->sendResponse();
}
}
}
}