protected function execute(InputInterface $input, OutputInterface $output) { $em = $this->getContainer()->get('doctrine')->getManager(); if (strpos(getcwd(), "prod") !== false) { $env = "prod"; } else { $env = "dev"; } $output->writeln("Environnement : " . $env); $user = $this->getContainer()->getParameter('oracle_user'); $password = $this->getContainer()->getParameter('oracle_pwd'); $sid = "pbaza"; // Passer cette variable à TRUE pour déclencher une mise à jour des directions depuis BAZA $updateDirection = TRUE; $this->ORA = oci_connect($user, $password, $sid); if ($updateDirection) { $output->writeln("*** Import des directions ***"); // Marquage des directions existantes $listeDirection = $em->getRepository('EVPOSaffectationBundle:Direction')->findAll(); foreach ($listeDirection as $direction) { $direction->setExisteBaza(FALSE); } unset($listeDirection); $requeteBaza = "select code_direction, nvl(lib_long_direction, ' ') lib_long_direction from baz_direction where flag is null"; $csr = oci_parse($this->ORA, $requeteBaza); oci_execute($csr); $nb = 0; while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) { $codeDirection = strtoupper($row["CODE_DIRECTION"]); $libDirection = utf8_encode($row["LIB_LONG_DIRECTION"]); if ($em->getRepository('EVPOSaffectationBundle:Direction')->isDirection($codeDirection)) { $direction = $em->getRepository('EVPOSaffectationBundle:Direction')->getDirection($codeDirection); } else { $direction = new Direction(); } $direction->setCodeDirection($codeDirection); $direction->setLibDirection($libDirection); $direction->setExisteBaza(TRUE); $em->persist($direction); $nb++; } $em->flush(); oci_free_statement($csr); unset($csr); $output->writeln("Import de " . $nb . " directions"); } $output->writeln("*** Import des services depuis BAZA ***"); // Marquage des services existants $listeService = $em->getRepository('EVPOSaffectationBundle:Service')->findAll(); foreach ($listeService as $service) { $service->setExisteBaza(FALSE); } unset($listeService); $requeteBaza = "select code_service, code_direction, nvl(description_service, ' ') description_service from baz_service where flag is null"; $csr = oci_parse($this->ORA, $requeteBaza); oci_execute($csr); $nb = 0; while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) { $codeService = strtoupper($row["CODE_SERVICE"]); $codeDirection = strtoupper($row["CODE_DIRECTION"]); $direction = $em->getRepository('EVPOSaffectationBundle:Direction')->getDirection($codeDirection); $libService = utf8_encode($row["DESCRIPTION_SERVICE"]); if ($em->getRepository('EVPOSaffectationBundle:Service')->isService($codeService)) { $service = $em->getRepository('EVPOSaffectationBundle:Service')->getService($codeService); } else { $service = new Service(); } if ($updateDirection) { $service->setDirection($em->getRepository('EVPOSaffectationBundle:Direction')->getDirection($codeDirection)); } $service->setCodeService($codeService); $service->setDirection($direction); $service->setLibService($libService); $service->setExisteBaza(TRUE); $em->persist($service); $nb++; } $em->flush(); $output->writeln("*** Fusion des données d'entités GPARC ***"); $fileName = "/home/data/evpos/" . $env . "/gparc/entites.csv"; $codeInconnu = []; if (file_exists($fileName)) { $csvFile = fopen($fileName, 'r'); $nbLine = 0; while (($data = fgetcsv($csvFile, 0, ';')) !== FALSE) { if ($nbLine > 0) { $lib = trim($data[0]); $actif = trim($data[2]); $codeService = trim($data[6]); $codeSirh = trim($data[7]); if ($actif == "1" && $codeService != "" && $codeService != "-") { // Mise à jour du service concerné if ($em->getRepository('EVPOSaffectationBundle:Service')->isService($codeService)) { // Mise à jour du service $service = $em->getRepository('EVPOSaffectationBundle:Service')->getService($codeService); } else { // Création du service $service = new Service(); $service->setCodeService($codeService); $service->setExisteBaza(TRUE); $codeInconnu[$codeService] = TRUE; } $service->setLibService($lib); $service->setCodeSirh($codeSirh); $em->persist($service); } } $nbLine++; } fclose($csvFile); $em->flush(); $output->writeln("OK"); } else { $output->writeln("Fichier " . $fileName . " introuvable"); } foreach (array_keys($codeInconnu) as $code) { $erreur = new CtrlServiceInconnu(); $erreur->setCodeService($code); $erreur->setRemarque("Code service trouvé dans GPARC, mais pas dans BAZA"); $em->persist($erreur); } $em->flush(); // Suppression des services non retrouvés dans BAZA $listeService = $em->getRepository('EVPOSaffectationBundle:Service')->getServicesNonBaza(); foreach ($listeService as $service) { foreach ($service->getListeUtilisateurs() as $utilisateur) { $utilisateur->setServiceUtil(NULL); $em->persist($utilisateur); } $em->remove($service); $output->writeln("- suppression de " . $service->getCodeService()); } unset($listeService); $em->flush(); oci_free_statement($csr); unset($csr); $output->writeln("Import de " . $nb . " services"); $output->write("Création Direction et service inconnus... "); // Création d'une direction inconnue if (!$em->getRepository('EVPOS\\affectationBundle\\Entity\\Direction')->isDirection("?")) { $dirInconnue = new Direction(); $dirInconnue->setCodeDirection("?"); $dirInconnue->setLibDirection("Direction inconnue"); $em->persist($dirInconnue); } $em->flush(); // Création d'un service inconnu if (!$em->getRepository('EVPOS\\affectationBundle\\Entity\\Service')->isService("?")) { $servInconnu = new Service(); $servInconnu->setCodeService("?"); $servInconnu->setLibService("Service inconnu"); $dirInconnue = $em->getRepository('EVPOS\\affectationBundle\\Entity\\Direction')->getDirection("?"); $servInconnu->setDirection($dirInconnue); $em->persist($servInconnu); } $em->flush(); $output->writeln("OK"); $output->writeln("*** Import des utilisateurs ***"); // Marquage des utilisateurs existants $listeUtil = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->findAll(); foreach ($listeUtil as $util) { $util->setExisteBaza(FALSE); $em->persist($util); } $em->flush(); unset($listeUtil); $requeteBaza = "SELECT UPPER (u.ntuid) matricule,\n u.ntufullnam nom,\n u.code_service code_service,\n ua.code_service code_service_sirh,\n TO_CHAR (u.NTULASTLGN, 'YYYY-MM-DD') NTULASTLGN\n FROM baz_user_nt u left outer JOIN BAZ_AGENT ua on ua.matricule = u.ntuid\n WHERE ntuscript IS NOT NULL\n AND (ntudisbld != 1 OR ntudisbld IS NULL)\n AND ntufullnam IS NOT NULL\n AND UPPER (ntuid) NOT LIKE '%\\__' escape '\\'"; $csr = oci_parse($this->ORA, $requeteBaza); oci_execute($csr); $nb = 0; while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) { $matUtil = $row["MATRICULE"]; $nomUtil = utf8_encode($row["NOM"]); $codeService = strtoupper(utf8_encode($row["CODE_SERVICE"])); $codeSirh = strtoupper(utf8_encode($row["CODE_SERVICE_SIRH"])); $lastLogin = $row["NTULASTLGN"]; if ($em->getRepository('EVPOSaffectationBundle:Utilisateur')->isUtilisateur($matUtil)) { $utilisateur = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->getUtilisateur($matUtil); } else { $utilisateur = new Utilisateur(); } $service = $em->getRepository('EVPOSaffectationBundle:Service')->getServiceSirh($codeSirh); if ($service === NULL) { // Service non trouvé dans SIRH $service = $em->getRepository('EVPOSaffectationBundle:Service')->getService($codeService); } if ($service !== NULL) { $utilisateur->setServiceUtil($service); } else { // Service non trouvé $utilisateur->setServiceUtil(NULL); } if ($em->getRepository('EVPOSaffectationBundle:Service')->isService($codeService)) { $utilisateur->setServiceUtil($em->getRepository('EVPOSaffectationBundle:Service')->getService($codeService)); } $utilisateur->setMatUtil($matUtil); $utilisateur->setNomUtil($nomUtil); if ($lastLogin !== null) { $utilisateur->setLastLogin(new \DateTime($lastLogin)); $age = time() - $utilisateur->getLastLogin()->getTimestamp(); $utilisateur->setAgeLogin(round($age / (60 * 60 * 24))); } else { $utilisateur->setLastLogin(new \DateTime("1/1/1900")); $utilisateur->setAgeLogin(9999); } $utilisateur->setExisteBaza(TRUE); $em->persist($utilisateur); $nb++; } $em->flush(); oci_free_statement($csr); unset($csr); $output->writeln("Import de " . $nb . " utilisateurs"); $requeteBaza = "select distinct alias as mat_util, code_service from baz_exchange"; $csr = oci_parse($this->ORA, $requeteBaza); oci_execute($csr); $nb = 0; while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) { $matUtil = $row["MAT_UTIL"]; $codeService = $row["CODE_SERVICE"]; $utilisateur = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->getUtilisateur($matUtil); if ($utilisateur !== NULL) { if ($utilisateur->getCodeService() != $codeService) { $service = $em->getRepository('EVPOSaffectationBundle:Service')->getService($codeService); if ($service !== NULL) { $utilisateur->setServiceUtil($service); $nb++; } } } } $em->flush(); oci_free_statement($csr); unset($csr); $output->writeln("Mise à jour du service de " . $nb . " utilisateurs"); // Suppression des utilisateurs qui n'existaient pas dans BAZA $output->write("Suppression des utilisateurs qui n'existaient pas dans BAZA..."); $listeUtil = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->getUtilisateursSuppr(); foreach ($listeUtil as $util) { $em->remove($util); $output->write('.'); } $em->flush(); unset($listeUtil); $output->writeln("OK"); // Comptage des utilisateurs de chaque service $output->write("Comptage des utilisateurs de chaque service... "); $listeService = $em->getRepository('EVPOSaffectationBundle:Service')->findAll(); foreach ($listeService as $service) { $nbUtil = $service->getListeUtilisateurs()->count(); $service->setNbAgent($nbUtil); $em->persist($service); } unset($listeService); $em->flush(); $output->writeln("OK"); // Comptage des utilisateurs de chaque direction $output->write("Comptage des utilisateurs de chaque direction... "); $listeDirection = $em->getRepository('EVPOSaffectationBundle:Direction')->findAll(); foreach ($listeDirection as $direction) { $nbUtil = 0; foreach ($direction->getListeServices() as $service) { $nbUtil += $service->getListeUtilisateurs()->count(); } $direction->setNbAgent($nbUtil); $em->persist($direction); } unset($listeDirection); $em->flush(); $output->writeln("OK"); // Création des utilisateurs "libre service" $output->write("Création des utilisateurs libre service... "); $listeService = $em->getRepository('EVPOSaffectationBundle:Service')->findAll(); foreach ($listeService as $service) { $util = new Utilisateur(); $util->setMatUtil("LS_" . $service->getCodeService()); $util->setNomUtil("Libre service " . $service->getCodeService()); $util->setServiceUtil($service); $em->persist($util); } $em->flush(); unset($listeService); $output->writeln("OK"); // Mise à jour de la colonne "niveauVIP" $output->writeln('Mise à jour de la colonne "niveauVIP"...'); $listeVIP = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->getVIP(); foreach ($listeVIP as $vip) { $vip->setNiveauVIP(''); $em->persist($vip); } unset($listeVIP); $fileName = "/home/data/evpos/" . $env . "/gparc/util_vip.csv"; $output->write("- Recherche du fichier " . $fileName . "... "); if (file_exists($fileName)) { $output->writeln("OK"); $csvFile = fopen($fileName, 'r'); $nbLine = 0; while (($data = fgetcsv($csvFile, 0, ';')) !== FALSE) { if ($nbLine > 0) { $mat = trim($data[0]); $niveauVIP = trim($data[1]); $utilisateur = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->getUtilisateur($mat); if ($utilisateur !== NULL) { $utilisateur->setNiveauVIP($niveauVIP); $em->persist($utilisateur); } } $nbLine++; } } else { $output->writeln("Non trouvé"); } $em->flush(); fclose($csvFile); $output->writeln("OK"); $output->writeln("Fin du traitement"); oci_close($this->ORA); }
protected function execute(InputInterface $input, OutputInterface $output) { $em = $this->getContainer()->get('doctrine')->getManager(); if (strpos(getcwd(), "prod") !== false) { $env = "prod"; } else { $env = "dev"; } $output->writeln("*** Import des postes ***"); // Préparation des données $output->write("Préparation des données existantes... "); $listePoste = $em->getRepository('EVPOSaffectationBundle:Poste')->findAll(); foreach ($listePoste as $poste) { $poste->setLicenceW8(FALSE); $poste->delListeUtilisateurs(); $poste->setExisteGparc(FALSE); } $em->flush(); unset($listePoste); $output->writeln("OK"); // Lecture du fichier CSV extrait de GPARC $output->write("Lecture du fichier des postes (" . $env . ")... "); $fileName = "/home/data/evpos/" . $env . "/gparc/gparc_prod_moca_01_materiel.csv"; $csvFile = fopen($fileName, 'r'); $nbLine = 0; $nbDoublon = 0; $serviceInconnu = $em->getRepository('EVPOSaffectationBundle:Service')->getService("?"); $utilServiceInconnu = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->getUtilisateur('LS_?'); // Liste des hostnames rencontrés dans l'export GPARC, pour ne pas traiter deux fois les doublons $listeHostname = []; // Liste des utilisateurs trouvés dans l'export GPARC et inconnus de BAZA $listeUtilisateurInconnu = []; $listeServiceRhErreur = []; $listeServiceErreur = []; while (($data = fgetcsv($csvFile, 0, ';')) !== FALSE) { if ($nbLine > 0) { $hostname = trim(strtoupper($data[3])); if ($hostname != "-" && in_array($hostname, $listeHostname) !== TRUE) { $listeHostname[] = $hostname; $codeService = $data[1]; $codeMateriel = $data[2]; $statut = $data[4]; $modele = $data[6]; $categorie = $data[7]; $licenceW8 = $data[8]; $ssd = $data[9]; $codeSirh = $data[11]; $localisation = $data[12]; $matUtil = strtoupper($data[13]); $commentaire = $data[15]; $typeUsage = $data[16]; $typeReseau = $data[21]; $master = $data[22]; $avancementMigMoca = $data[23]; if ($hostname !== "") { // Recherche si le poste existe $poste = $em->getRepository('EVPOSaffectationBundle:Poste')->find($hostname); if ($poste === NULL) { // Création d'un nouveau poste $poste = new Poste(); $poste->setHostname($hostname); } // Update des caractéristiques du poste $poste->setCodeMateriel($codeMateriel); $poste->setCategorie($categorie); $poste->setStatut($statut); $poste->setModele($modele); $poste->setCategorie($categorie); $poste->setLocalisation($localisation); $poste->setCommentaire($commentaire); $poste->setTypeUsage($typeUsage); $poste->setExisteGparc(TRUE); $poste->setTypeReseau($typeReseau); $poste->setMaster($master); switch ($licenceW8) { case "OUI": $poste->setLicenceW8(TRUE); break; default: $poste->setLicenceW8(FALSE); } switch ($ssd) { case "OUI": $poste->setSSD(TRUE); break; default: $poste->setSSD(FALSE); } $poste->setAvancementMigMoca($avancementMigMoca); // Mise à jour du service $service = $em->getRepository('EVPOSaffectationBundle:Service')->getServiceSirh($codeSirh); if ($service === NULL) { // Service non trouvé dans SIRH $listeServiceRhErreur[$codeSirh] = TRUE; $service = $em->getRepository('EVPOSaffectationBundle:Service')->getService($codeService); } if ($service !== NULL) { $poste->setService($service); } else { // Service non trouvé $listeServiceErreur[$codeService] = TRUE; $poste->setService(NULL); } // Recherche de l'utilisateur $util = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->find($matUtil); if ($util === NULL & $service !== NULL) { $util = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->find("LS_" . $service->getCodeService()); } if ($util !== NULL) { $poste->addListeUtilisateur($util); } else { $listeUtilisateurInconnu[] = $matUtil; } $em->persist($poste); } } else { // Le hostname est "-" ou en double $nbDoublon++; } } $nbLine++; } fclose($csvFile); $em->flush(); unset($listeHostname); // Enregistrement des erreurs foreach (array_keys($listeServiceRhErreur) as $erreur) { $erreurServiceInconnu = new CtrlServiceInconnu(); $erreurServiceInconnu->setCodeSirh($erreur); $erreurServiceInconnu->setRemarque("Code RH non trouvé, mais utilisé par un poste"); $em->persist($serviceInconnu); } foreach (array_keys($listeServiceErreur) as $erreur) { $erreurServiceInconnu = new CtrlServiceInconnu(); $erreurServiceInconnu->setCodeService($erreur); $erreurServiceInconnu->setRemarque("Préfixe AD non trouvé, mais utilisé par un poste"); $em->persist($erreurServiceInconnu); } $em->flush(); $output->writeln("OK (" . $nbLine . " lignes - " . $nbDoublon . " doublons)"); $output->writeln("*** Affectation des postes sans service au service de leur Utilisateur ***"); $postesSansService = $em->getRepository('EVPOSaffectationBundle:Poste')->getPostesSansService(); foreach ($postesSansService as $poste) { foreach ($poste->getListeUtilisateurs() as $user) { $service = $user->getServiceUtil(); $poste->setService($service); $output->write('_'); } if ($poste->getService() === NULL) { $poste->setService($serviceInconnu); $poste->addListeUtilisateur($utilServiceInconnu); $output->write('?'); } $em->persist($poste); } $output->writeln("OK"); unset($postesSansService); $output->writeln("Fin de report"); $em->flush(); $output->writeln("Validation des modifications"); // Enregistrement des utilisateurs inconnus $output->write("Enregistrement des erreurs... "); $listeErreur = $em->getRepository('EVPOS\\affectationBundle\\Entity\\CtrlUtilisateurInconnu')->findAll(); foreach ($listeErreur as $erreur) { $em->remove($erreur); } $em->flush(); unset($listeErreur); foreach (array_unique($listeUtilisateurInconnu) as $matErreur) { $erreur = new CtrlUtilisateurInconnu(); $erreur->setMatUtil($matErreur); $erreur->setCommentaire("Matricule trouvé lors de l'import des postes GPARC, mais pas dans BAZA."); $em->persist($erreur); } $em->flush(); unset($listeUtilisateurInconnu); $output->writeln("OK"); // Suppression des postes ne figurant pas dans la liste extraite de GPARC $output->write("Suppression des postes non référencés dans GPARC..."); $listePoste = $em->getRepository('EVPOSaffectationBundle:Poste')->findNonGparc(); foreach ($listePoste as $poste) { $output->write("."); $em->remove($poste); } $em->flush(); unset($listePoste); $output->writeln("OK"); // Import des équipements liés $output->writeln("*** Import des équipements liés ***"); $output->write("Suppression des équipements existants... "); $listeEquipement = $em->getRepository('EVPOSaffectationBundle:Equipement')->findAll(); foreach ($listeEquipement as $equipement) { $em->remove($equipement); } $em->flush(); unset($listeEquipement); $output->writeln("OK"); // Lecture du fichier CSV extrait de GPARC $output->write("Lecture du fichier des équipements liés... "); $fileName = []; $fileName[] = "/home/data/evpos/" . $env . "/gparc/gparc_prod_moca_02_materiels-lies.csv"; $fileName[] = "/home/data/evpos/" . $env . "/gparc/gparc_prod_moca_03_materiels-lies-montant.csv"; // Liste des différents codes matériel, pour éviter les doublons $listeCodeMateriel = []; foreach ($fileName as $file) { $output->write($file . " "); $csvFile = fopen($file, 'r'); $nbLine = 0; $nbDoublon = 0; while (($data = fgetcsv($csvFile, 0, ';')) !== FALSE) { if ($nbLine > 0) { $hostname = strtoupper(trim($data[0])); if ($hostname != "") { $codeMateriel = strtoupper(trim($data[1])); if (in_array($codeMateriel, $listeCodeMateriel)) { // Le code a déjà été rencontré $nbDoublon++; } else { if ($categorie != "" && $codeMateriel != "-") { // Le code matériel n'avais jamais été rencontré // et la catégorie est renseignée $listeCodeMateriel[] = $codeMateriel; $categorie = trim($data[2]); $modele = trim($data[3]); $equipement = new Equipement(); $equipement->setCodeMateriel($codeMateriel); $equipement->setCategorie($categorie); $equipement->setModele($modele); // recherche du poste lié $poste = $em->getRepository('EVPOS\\affectationBundle\\Entity\\Poste')->find($hostname); if ($poste !== NULL) { $equipement->setPoste($poste); $em->persist($equipement); } } } } } $nbLine++; } fclose($csvFile); } unset($listeCodeMateriel); $em->flush(); $output->writeln("OK (" . $nbDoublon . " doublons)"); $output->write("Mise à jour du nombre de postes par service... "); $listeService = $em->getRepository('EVPOS\\affectationBundle\\Entity\\Service')->findAll(); foreach ($listeService as $service) { $service->setNbPoste($service->getListePostes()->count()); $em->persist($service); } unset($listeService); $em->flush(); $output->writeln("OK"); $output->write("Mise à jour du nombre de poste par direction... "); $listeDirection = $em->getRepository('EVPOS\\affectationBundle\\Entity\\direction')->findAll(); foreach ($listeDirection as $direction) { $nbPoste = 0; foreach ($direction->getListeServices() as $service) { $nbPoste += $service->getNbPoste(); } $direction->setNbPoste($nbPoste); $em->persist($direction); } unset($listeDirection); $em->flush(); $output->writeln("OK"); $output->writeln("Fin du traitement"); }