src/Service/MineService.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  5. use App\Entity\User;
  6. use App\Entity\Mine;
  7. use App\Entity\UtilisateurMine;
  8. use App\Entity\LogBatch;
  9. use App\Service\UserService;
  10. class MineService
  11. {
  12.   private $repo_mine;
  13.   private $repo_utilisateur_mine;
  14.   private $user_Service;
  15.   private $entityManager;
  16.   private $session;
  17.   public function __construct(
  18.     SessionInterface $session,
  19.     EntityManagerInterface $entityManager,
  20.     UserService $user_Service
  21.   ) {
  22.     $this->session $session;
  23.     $this->entityManager $entityManager;
  24.     $this->repo_mine $this->entityManager->getRepository(Mine::class);
  25.     $this->repo_user $this->entityManager->getRepository(User::class);
  26.     $this->repo_utilisateur_mine $this->entityManager->getRepository(UtilisateurMine::class);
  27.     $this->repo_logbatch $this->entityManager->getRepository(LogBatch::class);
  28.     $this->user_Service $user_Service;
  29.   } // function
  30.   /**
  31.    * 
  32.    */
  33.   public function getMineContext($user)
  34.   {
  35.     if (!is_null($this->session->get("mine_id"))) {
  36.       
  37.       return $this->repo_mine->find($this->session->get("mine_id"));
  38.     } else {
  39.       $mine $this->user_Service->getMinePrincipale($user);
  40.       $this->session->set("mine_id"$mine->getId());
  41.       return $mine;
  42.     } // if
  43.   // function
  44.   public function setMineContext($mine_id)
  45.   {
  46.     $mine $this->repo_mine->find($mine_id);
  47.     $this->session->set("mine_id"$mine->getId());
  48.   } // function
  49.   /**
  50.    * 20220317 - LGA - Mise à jour des mines avec le flux JSON DTP
  51.    * 20221228 - LGA - Si nouvelle mine, ajout à tous les ROLES_ADMIN
  52.    * 
  53.    * parametres : le flux JSon et la date de la derniere MAJ pour controle
  54.    */
  55.   public function majMinesParFluxJSON($fluxJSON$dateDernMAJBatch)
  56.   {
  57.     // Transformation flux JSON en tableau
  58.     $tableauJSON json_decode($fluxJSONtrue);
  59.     // Parcours du tableau pour MAJ base
  60.     foreach ($tableauJSON as $mine_data) {
  61.       // Test de la validité des données recues
  62.       if (isset($mine_data['id'])) {
  63.         // on teste d'abord si la mine existe en base
  64.         $mine $this->repo_mine->findBy(['remote_id' => $mine_data['id']]);
  65.         if ($mine != []) {
  66.           echo "la mine existe\n";
  67.           $dateDernMAJRes = new \DateTime($mine_data['updatedAt']);
  68.           // On teste l'intervalle entre derniére MAJ DTP et derniére MAJ Batch
  69.           $intervalle $dateDernMAJRes->diff($dateDernMAJBatch);
  70.           // Utilisation de intervalle->format('%R') pour vérifier l'écart entre les dates
  71.           // renvoie "+" si la derniére MAJ DTP est antérieure à la derniére MAJ Batch, pas de MAJ
  72.           // renvoie "-" si la derniére MAJ DTP est postérieure à la derniére MAJ Batch, MAJ locale nécessaire
  73.           if ($intervalle->format('%R') == "-") {
  74.             echo "MAJ nécessaire\n";
  75.             try {
  76.               print_r($mine_data);
  77.               $resMaj $this->majMine($mine[0], $mine_data);
  78.               echo "MAJ effectuée\n";
  79.             } catch (\Exception $e) {
  80.               echo "MAJ non effectuée : ERREUR >> " $e->getMessage() . "\n";
  81.             } // catch
  82.           } else {
  83.             echo "Pas de MAJ nécessaire\n";
  84.           } // if
  85.         } else {
  86.           echo "la mine n'existe pas. Création nécessaire\n";
  87.           $newMine = new Mine();
  88.           try {
  89.             print_r($mine_data);
  90.             $resMaj $this->majMine($newMine$mine_data);
  91.             echo "Création effectuée\n";
  92.             // 20221228 - LGA - Création de la jointure mine / users admin
  93.             /* $users = $this->repo_user->findAll();
  94.             foreach($users as $user) {
  95.               if (in_array('ROLE_ADMIN', $user->getRoles())) {
  96.                 $obj = new UtilisateurMine();
  97.                 $obj->setMine($newMine);
  98.                 $obj->setUser($user);
  99.                 $this->entityManager->persist($obj);
  100.                 $this->entityManager->flush();
  101.               }// if
  102.             }// foreach*/
  103.           } catch (\Exception $e) {
  104.             echo "Création non effectuée : ERREUR >> " $e->getMessage() . "\n";
  105.           } // catch
  106.         // if
  107.       } else {
  108.         // Remontée d'un erreur
  109.         throw new \Exception("Une erreur s'est produite : " $mine_data);
  110.       } // if
  111.     // for
  112.   // function 
  113.   /**
  114.    * Sous fonction : remplissage et enregistrement BDD mine
  115.    */
  116.   function majMine($mine$data)
  117.   {
  118.     $mine->setRemoteId($data['id']);
  119.     $mine->setLibelle($data['nom']);
  120.     $mine->setAdresse($data['adresse']);
  121.     $mine->setCodePostal($data['codePostal']);
  122.     $mine->setVille($data['ville']);
  123.     $mine->setTelephone($data['telephone']);
  124.     $mine->setMail($data['mail']);
  125.     $this->entityManager->persist($mine);
  126.     $this->entityManager->flush();
  127.     return true;
  128.   } // function
  129.   // 20230710 - TOM - Appelé à chaque fois dans le cron pour affecter toutes les mines aux admins
  130.   function affectMinesToAdminUsers()
  131.   {
  132.     // 20221228 - LGA - Création de la jointure mine / users admin
  133.     $users      $this->repo_user->findAll();
  134.     $mines $this->repo_mine->findAll();
  135.     foreach ($users as $user) {
  136.       if (in_array('ROLE_ADMIN'$user->getRoles())) {
  137.         foreach($mines as $mine) {
  138.           $utilisateurMine $this->repo_utilisateur_mine->findOneBy(['user' => $user'mine' => $mine]);
  139.           if(is_null($utilisateurMine)) {
  140.             $obj = new UtilisateurMine();
  141.             $obj->setMine($mine);
  142.             $obj->setUser($user);
  143.     
  144.             $this->entityManager->persist($obj);
  145.             $this->entityManager->flush();
  146.           }
  147.         }
  148.       } // if
  149.     // foreach
  150.   }
  151. }// class MineService