src/Service/AppService.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use Doctrine\DBAL\Connection;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use App\Repository\AppRouteRepository;
  6. use App\Repository\FavoriRepository;
  7. use App\Repository\EntiteRepository;
  8. use App\Repository\EntiteRelationRepository;
  9. use App\Entity\Client;
  10. use App\Entity\Form;
  11. use App\Entity\Tableau;
  12. use App\Entity\User;
  13. use App\Entity\EntiteRelation;
  14. use App\Service\FormulaireService;
  15. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  16. class AppService {
  17.   private $repo_route;
  18.   private $repo_fav;
  19.   private $repo_entite_relation;
  20.   private $conn;
  21.   private $entityManager;
  22.   private $serv_form;
  23.   private $param_bag;
  24.   public function __construct(Connection $conn,ParameterBagInterface $param_bagFormulaireService $serv_formEntiteRepository $repo_entiteAppRouteRepository $repo_routeFavoriRepository $repo_favEntiteRelationRepository $repo_entite_relationEntityManagerInterface $entityManager) {
  25.     $this->repo_route $repo_route;
  26.     $this->repo_fav $repo_fav;
  27.     $this->repo_entite_relation $repo_entite_relation;
  28.     $this->repo_entite $repo_entite;
  29.     $this->conn $conn;
  30.     $this->entityManager $entityManager;
  31.     $this->serv_form $serv_form;
  32.     $this->param_bag $param_bag;
  33.   }
  34.   /**
  35.   * Routes dynamiques : récupérer les options possibles
  36.   * @param integer $route_id
  37.   * @param string $class
  38.   * @return array
  39.   */
  40.   public function getRoutePathVariablesOptions($route_id$class null) {
  41.     $result null;
  42.     $route $this->repo_route->find($route_id);
  43.     if(preg_match_all('/{+(.*?)}/'$route->getPath(), $matches)) {
  44.       $result = [];
  45.       $tabMatches $matches[1];
  46.       foreach ($tabMatches as $variable) {
  47.         $sp explode("_"$variable);
  48.         unset($sp[count($sp) - 1]);
  49.         $objectClass is_null($class) ? implode($sp"_") : $class;
  50.         $className "App\\Entity\\".$objectClass;
  51.         $repo $this->entityManager->getRepository($className);
  52.         $result[$variable] = [];
  53.         foreach($repo->findAll() as $obj) {
  54.           $lib $this->serv_form->getEntiteAsString($obj);
  55.           $result[$variable][] = [ "id" => $obj->getId(), "lib" => $lib ];
  56.         }// foreach
  57.       }// foreach
  58.     }// if
  59.     return $result;
  60.   }// function
  61.   /**
  62.   * Récupérer le libellé d'une entité en fonction d'une config (JSON)
  63.   * @param string $json
  64.   * @return string
  65.   */
  66.   public function getAsStringByConfig($json) {
  67.     $tabConfig json_decode($jsontrue);
  68.     $string "";
  69.     if(is_array($tabConfig)) {
  70.       foreach ($tabConfig as $key => $data) {
  71.           $sp explode("_"$key);
  72.           unset($sp[count($sp) - 1]);
  73.           $class implode($sp"_");
  74.           $className "App\\Entity\\".$class;
  75.           $repo $this->entityManager->getRepository($className);
  76.           $obj $repo->find($data);
  77.           $string .= $this->serv_form->getEntiteAsString($obj);
  78.       }
  79.     }
  80.     return $string;
  81.   }
  82.   /**
  83.   * Savoir si un utilisateur possède une page spécifique en tant que favori
  84.   * @param string $path_name
  85.   * @param string $path_config
  86.   * @param integer $user_id
  87.   * @return boolean
  88.   */
  89.   public function isFavori($path_name$path_config$user_id) {
  90.     $route $this->repo_route->findOneByName($path_name);
  91.     if(!is_null($route)) {
  92.       $favori $this->repo_fav->findByUserAndRouteAndConfig($user_id$route->getId(), $path_config);
  93.       return !is_null($favori);
  94.     }
  95.     else {
  96.       return false;
  97.     }
  98.   }
  99.   /**
  100.   * Décoder une config (pour utilisation dans twig)
  101.   * @param string $json
  102.   * @return array
  103.   */
  104.   public function jsonDecodeConfig($json) {
  105.     return json_decode($jsontrue);
  106.   }
  107.   /**
  108.   * Ajouter relation père/fille entre entités
  109.   * @param App\Entity\Entite $entite_parent
  110.   * @param integer $parent_id
  111.   * @param App\Entity\Entite $entite_enfant
  112.   * @param integer $enfant_id
  113.   * @param App\Entity\FormVersion $version
  114.   * @return boolean
  115.   */
  116.   public function addEnfantToEntite($entite_parent$parent_id$entite_enfant$enfant_id$version null){
  117.     $relation = new EntiteRelation();
  118.     $relation->setEntiteParent($entite_parent);
  119.     $relation->setParentId($parent_id);
  120.     $relation->setEntiteEnfant($entite_enfant);
  121.     $relation->setEnfantId($enfant_id);
  122.     $relation->setVersion($version);
  123.     $this->entityManager->persist($relation);
  124.     $this->entityManager->flush();
  125.     return true;
  126.   }
  127.   /**
  128.   * Récupérer les enfants d'une entité quelconque
  129.   * @param App\Entity\... $objParent
  130.   * @param string $strEntityEnfants
  131.   * @param App\Entity\FormVersion $version
  132.   * @return App\Entity\...[]
  133.   */
  134.   public function getEntiteEnfants($objParent$strEntityEnfants ""$version null) {
  135.     $className "App\\Entity\\".$strEntityEnfants;
  136.     if(class_exists($className)) {
  137.       $repoEnfant $this->entityManager->getRepository($className);
  138.     }
  139.     $fullClassName get_class($objParent);
  140.     $sp explode("\\"$fullClassName);
  141.     $entityName $sp[count($sp) - 1];
  142.     if(is_null($version)) {
  143.       $tabRelations $this->repo_entite_relation->findByParentEnfants($entityName$objParent->getId(), $strEntityEnfants);
  144.     }
  145.     else {
  146.       $tabRelations $this->repo_entite_relation->findByVersionEnfants($version->getId(), $strEntityEnfants);
  147.     }
  148.     $enfants = [];
  149.     if(!is_null($repoEnfant)) {
  150.       foreach($tabRelations as $relation) {
  151.         $objEnfant $repoEnfant->find($relation->getEnfantId());
  152.         if($objEnfant->isEnabled()) { // seulement les enfants non-archivés
  153.           $enfants[] = $objEnfant;
  154.         }
  155.       }
  156.     }
  157.     return $enfants;
  158.   }
  159.   /**
  160.   * Récupérer la liste de selection suivant le nom du param
  161.   * @param string $param
  162.   * @return App\Entity\...[]
  163.   */
  164.   public function getListeFromParam($param) {
  165.     switch($param) {
  166.       default:
  167.         return [];
  168.         break;
  169.       case "{Client_id}":
  170.         return $this->entityManager->getRepository(Client::class)->findAll();
  171.         break;
  172.       case "{Form_id}":
  173.         return $this->entityManager->getRepository(Form::class)->findAll();
  174.         break;
  175.       case "{Tableau_id}":
  176.         return $this->entityManager->getRepository(Tableau::class)->findAll();
  177.         break;
  178.       case "{User_id}":
  179.         return $this->entityManager->getRepository(User::class)->findAll();
  180.         break;
  181.       // TODO à compléter au fur et à mesure
  182.     }
  183.   }
  184.   /**
  185.   * Récupérer la liste de selection suivant le nom du param
  186.   * 20220228 - Modification du format du code : {3 premieres lettre ENTITE}{DATE}-{ID 4 chiffres} vers {1 lettre ENTITE}{ID 6 chiffres}
  187.   * 20220302 - Passage par un numero de reference temporaire avant validation de la création
  188.   * @param mixed $objEntity
  189.   * @return string
  190.   */
  191.   public function getReferenceAuto($objEntity) {
  192.     $entiteName = (new \ReflectionClass($objEntity))->getShortName();
  193.     // On définit la lettre d'identifiant référence en fonction du type d'Entité
  194.     // 20220314 - LGA - Code par défaut 'U' si l'entité n'est pas renseignée
  195.     $codeEntite strtoupper(substr($entiteName03)); // On recupére les 3 premières lettres de l'entité
  196.     // Correspondances entités - codage sur 1 lettre
  197.     $codes = [
  198.       "PRO" => 'C',
  199.       "CLI" => 'C',
  200.       "PRE" => 'P'
  201.     ];
  202.     // On définit la lettre d'identifiant référence en fonction du type d'Entité
  203.     // 20220314 - LGA - Code par défaut 'U' si l'entité n'est pas renseignée
  204.     if (isset($codes[$codeEntite])) {
  205.       $code $codes[$codeEntite];
  206.     } else {
  207.       $code "U"
  208.     }// if
  209.     $className get_class($objEntity);
  210.     $tableName $this->entityManager->getClassMetadata($className)->getTableName();
  211.     $sql 'SELECT MAX(ID)+1 AS AUTO_INCREMENT 
  212.             FROM '.$tableName;
  213.     $results $this->conn->fetchAllAssociative($sql);
  214.     if ($results[0]["AUTO_INCREMENT"] != null) {
  215.       $nextId count($results) > $results[0]["AUTO_INCREMENT"] : 1;
  216.     } else {
  217.       $nextId 1;
  218.     }// if
  219.     $code .= str_pad($nextId6"0"STR_PAD_LEFT);
  220.     return $code;
  221.   }// function
  222.   /**
  223.   * Recherche dans tout le CRM
  224.   * @param string $strRecherche
  225.   * @return array
  226.   */
  227.   public function globalSearch($strRecherche$mine_id null) {
  228.     // Init résultats
  229.     $results = [
  230.       "prospects" => []
  231.       ,"clients" => []
  232.       ,"prescripteurs" => []
  233.       ,"evenements" => []
  234.     ];
  235.     // Recherche des prospects
  236.     $tabProspects = [];
  237.     foreach ($tabProspects as $objProspect) {
  238.       $item = [];
  239.       $item["id"] = $objProspect->getId();
  240.       $item["reference"] = $objProspect->getReference();
  241.       $item["name"] = $this->serv_form->getValeurLibelleByCode("nom1"$objProspect->getId())." ".$this->serv_form->getValeurLibelleByCode("prenom1"$objProspect->getId());
  242.       /*$entite = $this->repo_entite->findByName("Prospect");
  243.       $data = $this->serv_form->getAllData($entite, $objProspect->getId(), "label");
  244.       foreach ($data as $label => $value) {
  245.         if(strpos(strtolower($value), strtolower($strRecherche)) > -1) {
  246.           $item["context"] = $label." : ".str_ireplace($strRecherche, "<strong>".$strRecherche."</strong>", $value);
  247.         }
  248.       }*/
  249.       $results["prospects"][] = $item;
  250.     }// foreach
  251.     // Recherche par nom de client
  252.     $tabClients $this->repo_prospect->findBySearch($strRecherche$mine_idtrue);
  253.     foreach ($tabClients as $objProspect) {
  254.       $item = [];
  255.       $item["id"] = $objProspect->getId();
  256.       $item["reference"] = $objProspect->getReference();
  257.       $item["name"] = $this->serv_form->getValeurLibelleByCode("nom1"$objProspect->getId())." ".$this->serv_form->getValeurLibelleByCode("prenom1"$objProspect->getId());
  258.       /*$entite = $this->repo_entite->findByName("Prospect");
  259.       $data = $this->serv_form->getAllData($entite, $objProspect->getId(), "label");
  260.       foreach ($data as $label => $value) {
  261.         if(strpos(strtolower($value), strtolower($strRecherche)) > -1) {
  262.           $item["context"] = $label." : ".str_ireplace($strRecherche, "<strong>".$strRecherche."</strong>", $value);
  263.         }
  264.       }// foreach
  265. */
  266.       $results["clients"][] = $item;
  267.     }// foreach
  268.     // Recherche par nom de prescripteur - 18/01/2024 DESACTIVE CAR TROP LONG
  269. //    $tabPrescripteurs = $this->repo_prescripteur->findBySearch($strRecherche, $mine_id, true);
  270. //
  271. //    foreach ($tabPrescripteurs as $objPrescripteur) {
  272. //      $item = [];
  273. //      $item["id"] = $objPrescripteur->getId();
  274. //      $item["reference"] = $objPrescripteur->getReference();
  275. //      $item["name"] = $this->serv_form->getValeurLibelleByCode("nom_prescripteur", $objPrescripteur->getId());
  276. //
  277. //      /*$entite = $this->repo_entite->findByName("Prescripteur");
  278. //
  279. //      $data = $this->serv_form->getAllData($entite, $objPrescripteur->getId(), "label");
  280. //      foreach ($data as $label => $value) {
  281. //        if(strpos(strtolower($value), strtolower($strRecherche)) > -1) {
  282. //          $item["context"] = $label." : ".str_ireplace($strRecherche, "<strong>".$strRecherche."</strong>", $value);
  283. //        }// if
  284. //      }// foreach
  285. //
  286. //      $results["prescripteurs"][] = $item;
  287. //    }// foreach
  288.     // Recherche d'événements
  289.     /*$tabEvents = $this->repo_event->findBySearch($strRecherche, $mine_id);
  290.     foreach ($tabEvents as $objEvent) {
  291.       $item = [];
  292.       $nomTiers = !is_null($objEvent->getProspect()) ? $this->serv_form->getEntiteAsString($objEvent->getProspect()) : $this->serv_form->getEntiteAsString($objEvent->getPrescripteur());
  293.       $item["id"] = $objEvent->getId();
  294.       $item["date"] = $objEvent->getDate()->format("d/m/Y H:i");
  295.       $item["title"] = $objEvent->getEvenementType()->getLibelle();
  296.       $context = "";
  297.       if(strpos(strtolower($nomTiers), strtolower($strRecherche)) > -1) {
  298.         $context .= "Tiers : ".str_ireplace($strRecherche, "<strong>".$strRecherche."</strong>", $nomTiers);
  299.       }
  300.       if(!is_null($objEvent->getEvenementType()) && strpos(strtolower($objEvent->getEvenementType()->getLibelle()), strtolower($strRecherche)) > -1) {
  301.         if(strlen($context) > 0) $context .= "<br />";
  302.         $context .= "Type : ".str_ireplace($strRecherche, "<strong>".$strRecherche."</strong>", $objEvent->getEvenementType()->getLibelle());
  303.       }
  304.       if(!is_null($objEvent->getMethode()) && strpos(strtolower($objEvent->getMethode()->getLibelle()), strtolower($strRecherche)) > -1) {
  305.         if(strlen($context) > 0) $context .= "<br />";
  306.         $context .= "Méthode comm. : ".str_ireplace($strRecherche, "<strong>".$strRecherche."</strong>", $objEvent->getMethode()->getLibelle());
  307.       }
  308.       $item["context"] = $context;
  309.       $results["evenements"][] = $item;
  310.     }// foreach*/
  311.     return $results;
  312.   }// function
  313.   public function getImagesFilemanager() {
  314.     
  315.     $dir      $this->param_bag->get('filemanager_base_dir');
  316.     $files    scandir($dir);
  317.     $images   = [];
  318.     $baseUrl  $this->param_bag->get('filemanager_base_url');
  319.     $basePath $this->param_bag->get('app_host');
  320.     $url_part explode($basePath,$baseUrl);
  321.     $baseUrl2 $this->param_bag->get('app_host');
  322.     //dd($baseUrl,$basePath,$url_part);
  323.     foreach ($files as $file) {
  324.       if($file != "." && $file != "..") {
  325.         $images[] = ['identifier' => $url_part[1]."/".$file,'web' => $baseUrl2."/api-mobile/v1/mobile/get-blob?file_path=".$url_part[1]."/".$file ];
  326.       }
  327.     }
  328.     return $images;
  329.   }
  330. }// class