protected function execute(InputInterface $input, OutputInterface $output)
 {
     $em = $this->getContainer()->get('doctrine')->getManager();
     $user = $this->getContainer()->getParameter('oracle_user');
     $password = $this->getContainer()->getParameter('oracle_pwd');
     $sid = "pbaza";
     $this->ORA = oci_connect($user, $password, $sid);
     // Récupération de la liste des secteurs depuis SUAPP
     $output->write("Import des secteurs... ");
     $requeteSUAPP = "SELECT ID_SECTEUR, LIB_SECTEUR FROM SUAPP.APP_SECTEUR_INFORMATIQUE";
     $csr = oci_parse($this->ORA, $requeteSUAPP);
     oci_execute($csr);
     while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) {
         $codeSecteur = $row['ID_SECTEUR'];
         $libSecteur = $row['LIB_SECTEUR'];
         if ($secteur = $em->getRepository('EVPOS\\affectationBundle\\Entity\\Secteur')->find($codeSecteur)) {
             $secteur->setLibSecteur($libSecteur);
         } else {
             $secteur = new Secteur();
             $secteur->setCodeSecteur($codeSecteur);
             $secteur->setLibSecteur($libSecteur);
         }
         $em->persist($secteur);
     }
     $em->flush();
     oci_free_statement($csr);
     $output->writeln("OK");
     $output->write("Import des applications... ");
     // Marquage des applications existantes
     $listeAppli = $em->getRepository('EVPOSaffectationBundle:Application')->findAll();
     foreach ($listeAppli as $appli) {
         $appli->setExisteSuapp(FALSE);
     }
     unset($listeAppli);
     // Marquage des UO existantes
     $listeUo = $em->getRepository('EVPOSaffectationBundle:UO')->getListeUo();
     foreach ($listeUo as $uo) {
         $em->setMigMoca = false;
     }
     unset($listeUo);
     // Récupération de la liste des applications dans SUAPP
     $requeteSUAPP = "SELECT distinct  a.code_appli code,\n         a.nom_appli nom,\n         a.desc_appli description,\n         a.nat_appli nature,\n         a.dispo_moca disponible,\n         a.code_service\n          FROM   app_application a, app_module m\n         WHERE   (date_cloture IS NULL OR date_cloture < '1/6/2015')\n                 AND nat_appli IN ('AS', 'AI')\n                 and a.code_appli = m.code_appli and (m.mig_moca is null or m.mig_moca = 'o')";
     $csr = oci_parse($this->ORA, $requeteSUAPP);
     oci_execute($csr);
     $nbAppli = 0;
     while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) {
         $codeAppli = strtoupper($row["CODE"]);
         $nomAppli = utf8_encode($row["NOM"]);
         $descAppli = utf8_encode($row["DESCRIPTION"]);
         $natAppli = $row['NATURE'];
         $dispoMoca = $row['DISPONIBLE'];
         $codeService = strtoupper($row["CODE_SERVICE"]);
         // Recherche du service
         $serviceAppli = $em->getRepository('EVPOSaffectationBundle:Service')->getService($codeService);
         // Recherche de l'application
         $appliExistante = $em->getRepository('EVPOSaffectationBundle:Application')->isApplication($codeAppli);
         // L'application existe-elle dans la base ?
         if ($appliExistante) {
             $appli = $em->getRepository('EVPOSaffectationBundle:Application')->getApplication($codeAppli);
         } else {
             $appli = new Application();
         }
         $appli->setCodeAppli($codeAppli);
         $appli->setNomAppli($nomAppli);
         $appli->setDescAppli($descAppli);
         $appli->setNatAppli($natAppli);
         $appli->setDispoMoca($dispoMoca);
         $appli->setServiceAppli($serviceAppli);
         $appli->setExisteSuapp(TRUE);
         $em->persist($appli);
         $nbAppli++;
     }
     $em->flush();
     oci_free_statement($csr);
     // Suppressions des applications non répertoriées dans SUAPP
     $listeAppli = $em->getRepository('EVPOSaffectationBundle:Application')->getAppliNonSuapp();
     $nbSuppr = 0;
     foreach ($listeAppli as $appli) {
         $em->remove($appli);
         $nbSuppr++;
     }
     unset($listeAppli);
     $em->flush();
     $output->writeln($nbAppli . " applications importées (" . $nbSuppr . " suppression)");
     // Affectation des applications aux secteurs
     $output->write("Affectation des applications aux secteurs... ");
     $requeteSUAPP = "select id_secteur, code_appli from app_est_geree where fin_gestion_secteur is null or fin_gestion_secteur > sysdate";
     $csr = oci_parse($this->ORA, $requeteSUAPP);
     oci_execute($csr);
     while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) {
         $codeSecteur = $row['ID_SECTEUR'];
         $codeAppli = $row['CODE_APPLI'];
         if (($secteur = $em->getRepository('EVPOS\\affectationBundle\\Entity\\Secteur')->find($codeSecteur)) && ($appli = $em->getRepository('EVPOS\\affectationBundle\\Entity\\Application')->find($codeAppli))) {
             $appli->setSecteur($secteur);
             $em->persist($appli);
         }
     }
     $em->flush();
     $output->writeln("OK");
     /**
      * Mise à jour de la liste des UO à partir de SUAPP
      */
     $output->write("Mise à jour de la liste des UO à partir de SUAPP... ");
     // Positionnement de l'indicateur d'existance des UO
     $listeUo = $em->getRepository('EVPOSaffectationBundle:UO')->findAll();
     foreach ($listeUo as $uo) {
         $uo->setExisteSuapp(FALSE);
         $em->persist($uo);
     }
     $em->flush();
     // Récupération de la liste des UO depuis SUAPP
     $requeteSUAPP = "select m.id_module,code_appli,lib_module,translate(mig_moca, 'on', '10') mig_moca\n                         from app_module m";
     $csr = oci_parse($this->ORA, $requeteSUAPP);
     oci_execute($csr);
     $nbUo = 0;
     while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) {
         $codeUo = strtoupper($row["ID_MODULE"]);
         $codeAppli = strtoupper($row["CODE_APPLI"]);
         $nomUo = utf8_encode($row["LIB_MODULE"]);
         $migMoca = $row["MIG_MOCA"];
         // L'application existe-elle dans la base ?
         if ($em->getRepository('EVPOSaffectationBundle:Application')->isApplication($codeAppli)) {
             $appli = $em->getRepository('EVPOSaffectationBundle:Application')->getApplication($codeAppli);
             if ($em->getRepository('EVPOSaffectationBundle:Uo')->isUo($codeUo)) {
                 $uo = $em->getRepository('EVPOSaffectationBundle:Uo')->getUo($codeUo);
             } else {
                 $uo = new UO();
             }
             $uo->setCodeUo($codeUo);
             $uo->setAppli($appli);
             $uo->setNomUo($nomUo);
             $uo->setMigMoca($migMoca);
             $uo->setAncienCitrix(FALSE);
             $uo->setExisteSuapp(TRUE);
             $em->persist($uo);
             $nbUo++;
         }
     }
     $em->flush();
     oci_free_statement($csr);
     // Mise à jour du type de poste client
     $output->write("Suppression des types de poste des UO... ");
     $listeUo = $em->getRepository('EVPOSaffectationBundle:Uo')->getListeUo();
     foreach ($listeUo as $uo) {
         $uo->delTypePoste();
         $em->persist($uo);
     }
     $em->flush();
     $output->writeln("OK");
     $requeteSUAPP = "SELECT distinct m.id_module, c.type_poste_client FROM app_module m, app_contr_poste_client c  WHERE m.id_module = c.id_module AND c.type_poste_client LIKE 'MOCA%'";
     $csr = oci_parse($this->ORA, $requeteSUAPP);
     oci_execute($csr);
     while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) {
         $codeUo = strtoupper($row["ID_MODULE"]);
         $typePoste = strtoupper($row["TYPE_POSTE_CLIENT"]);
         $uo = $em->getRepository('EVPOSaffectationBundle:Uo')->getUo($codeUo);
         if ($uo !== NULL) {
             $uo->appendTypePoste($typePoste);
             $em->persist($uo);
         }
     }
     $em->flush();
     oci_free_statement($csr);
     // Mise à jour de la disponibilité dans l'ancienne ferme Citrix
     $requeteSUAPP = "SELECT m.id_module FROM app_module m, app_contr_poste_client c  WHERE m.id_module = c.id_module AND c.type_poste_client LIKE 'CITRIX_XA5'";
     $csr = oci_parse($this->ORA, $requeteSUAPP);
     oci_execute($csr);
     while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) {
         $codeUo = strtoupper($row["ID_MODULE"]);
         if ($em->getRepository('EVPOSaffectationBundle:Uo')->isUo($codeUo)) {
             $uo = $em->getRepository('EVPOSaffectationBundle:Uo')->getUo($codeUo);
             $uo->setAncienCitrix(TRUE);
             $em->persist($uo);
         }
     }
     $em->flush();
     oci_free_statement($csr);
     $output->writeln($nbUo . " UO importées");
     /**
      * Mise à jour de la liste des CPI d'application à partir de SUAPP
      */
     // Récupération des CPI depuis SUAPP
     $requeteSUAPP = "select i.code_appli, i.mat_util\n                        from app_intervient i, app_application a\n                        where i.code_appli = a.code_appli and a.date_cloture is null and (inter_date_fin is null or inter_date_fin < '1/7/2015') and id_role_int = 'CPI'\n                        and suppleant = 0 and  trans_compet = 0 and INTER_DATE_FIN is null";
     $csr = oci_parse($this->ORA, $requeteSUAPP);
     oci_execute($csr);
     $nb = 0;
     while (($row = oci_fetch_array($csr, OCI_ASSOC + OCI_RETURN_NULLS)) !== false) {
         $codeAppli = strtoupper($row["CODE_APPLI"]);
         $matUtil = $row["MAT_UTIL"];
         // L'application et l'utilisateur existent-ils dans la base ?
         if ($em->getRepository('EVPOSaffectationBundle:Application')->isApplication($codeAppli) && $em->getRepository('EVPOSaffectationBundle:Utilisateur')->isUtilisateur($matUtil)) {
             $appli = $em->getRepository('EVPOSaffectationBundle:Application')->getApplication($codeAppli);
             $cpi = $em->getRepository('EVPOSaffectationBundle:Utilisateur')->getUtilisateur($matUtil);
             $appli->setCpi($cpi);
             $em->persist($appli);
             $nb++;
         }
     }
     $em->flush();
     $output->writeln("Mise à jour du CPI de " . $nb . " applications.");
     // Suppression des UO qui n'existent pas dans SUAPP
     $output->write("Purge des UO qui n'existent plus dans SUAPP...");
     $listeUoSupprimees = $em->getRepository('EVPOSaffectationBundle:UO')->getUoSupprimees();
     foreach ($listeUoSupprimees as $uo) {
         $output->writeln("Suppression " . $uo->getCodeUo());
         $em->remove($uo);
     }
     $em->flush();
     $output->writeln("OK");
 }