Ejemplo n.º 1
0
 public function generateAllPassagesForContrat($contrat)
 {
     $this->removeAllPassagesForContrat($contrat);
     $date_debut = $contrat->getDateDebut();
     $date_acceptation = $contrat->getDateAcceptation();
     if (!$date_debut || !$date_acceptation) {
         return false;
     }
     $date_debut = clone $contrat->getDateDebut();
     $passagesArray = $contrat->getPrevisionnel($date_debut);
     ksort($passagesArray);
     $firstEtb = true;
     foreach ($contrat->getEtablissements() as $etablissement) {
         $cpt = 0;
         foreach ($passagesArray as $datePassage => $passageInfos) {
             $datePrevision = new \DateTime($datePassage);
             $passage = new Passage();
             $passage->setEtablissement($etablissement);
             $passage->setEtablissementIdentifiant($etablissement->getIdentifiant());
             if ($contrat->getTechnicien()) {
                 $passage->addTechnicien($contrat->getTechnicien());
             }
             $passage->setDatePrevision($datePrevision);
             if (!$cpt) {
                 $passage->setDateDebut($datePrevision);
             }
             if ($firstEtb) {
                 $passage->setMouvementDeclenchable($passageInfos->mouvement_declenchable);
             }
             $passage->setContrat($contrat);
             $passage->setTypePassage(PassageManager::TYPE_PASSAGE_CONTRAT);
             foreach ($passageInfos->prestations as $prestationPrevu) {
                 $prestationObj = new Prestation();
                 $prestationObj->setNom($prestationPrevu->getNom());
                 $prestationObj->setNomCourt($prestationPrevu->getNomCourt());
                 $prestationObj->setIdentifiant($prestationPrevu->getIdentifiant());
                 $prestationObj->setNbPassages(0);
                 $passage->addPrestation($prestationObj);
             }
             foreach ($contrat->getProduits() as $produit) {
                 $produitNode = clone $produit;
                 $passage->addProduit($produitNode);
             }
             if ($passage) {
                 $contrat->addPassage($etablissement, $passage);
                 $this->dm->persist($passage);
             }
             $cpt++;
         }
         $firstEtb = false;
     }
     $contrat->updateNumeroOrdrePassage();
     //    $this->dm->flush();
 }
Ejemplo n.º 2
0
 public function import($file, OutputInterface $output)
 {
     $csvFile = new CsvFile($file);
     $csv = $csvFile->getCsv();
     $i = 0;
     $cptTotal = 0;
     $progress = new ProgressBar($output, 100);
     $progress->start();
     $configuration = $this->dm->getRepository('AppBundle:Configuration')->findConfiguration();
     $produitsArray = $configuration->getProduitsArray();
     $prestationsType = $this->dm->getRepository('AppBundle:Configuration')->findConfiguration()->getPrestationsArray();
     foreach ($csv as $data) {
         if ($data[self::CSV_ETABLISSEMENT_ID] == "000000") {
             continue;
         }
         if (!preg_match('/^[0-9]+$/', $data[self::CSV_ETABLISSEMENT_ID])) {
             $output->writeln(sprintf("<error>établissement dont le numéro %s n'est pas correct</error>", $data[self::CSV_ETABLISSEMENT_ID]));
             continue;
         }
         $etablissement = $this->em->getRepository()->findOneByIdentifiantReprise($data[self::CSV_ETABLISSEMENT_ID]);
         if (!$etablissement) {
             $output->writeln(sprintf("<error>L'établissement %s n'existe pas</error>", $data[self::CSV_ETABLISSEMENT_ID]));
             continue;
         }
         $passage = new Passage();
         $passage->setEtablissement($etablissement);
         if (!$data[self::CSV_DATE_PREVISION]) {
             $output->writeln(sprintf("<error>Le passage %s ne possède aucune date de prévision!</error>", $data[self::CSV_OLD_ID]));
             continue;
         }
         $passage->setDatePrevision(new \DateTime($data[self::CSV_DATE_PREVISION]));
         $passage->setIdentifiantReprise($data[self::CSV_OLD_ID]);
         $passage->setNumeroArchive($data[self::CSV_OLD_ID]);
         $contrat = $this->cm->getRepository()->findOneByIdentifiantReprise($data[self::CSV_CONTRAT_ID]);
         if (!$contrat) {
             //$output->writeln(sprintf("<error>Le contrat %s n'existe pas</error>", $data[self::CSV_CONTRAT_ID]));
             continue;
         }
         $this->dm->persist($passage);
         $doublonPassage = $this->pm->getRepository()->findOneById($passage->getId());
         if ($doublonPassage) {
             $output->writeln(sprintf("<comment>Le passage d'id %s existe déjà en base (%s)!</comment>", $passage->getId(), $data[self::CSV_OLD_ID]));
         }
         $resultStatut = $this->generateStatut($data, $passage, $output);
         $passage->updateStatut();
         if (!$resultStatut) {
             $output->writeln(sprintf("<error>Aucun statut déterminable pour le passage d'id %s (%s)!</error>", $passage->getId(), $data[self::CSV_OLD_ID]));
             continue;
         }
         $passage->setLibelle($data[self::CSV_LIBELLE]);
         $passage->setTypePassage($data[self::CSV_TYPE_PASSAGE]);
         $passage->setDescription(str_replace('#', "\n", $data[self::CSV_DESCRIPTION]));
         if (!preg_match('/^[0-9]+$/', $data[self::CSV_CONTRAT_ID])) {
             $output->writeln(sprintf("<error>Passage dont le numéro %s n'est pas correct</error>", $data[self::CSV_CONTRAT_ID]));
             continue;
         }
         if ($data[self::CSV_PRESTATIONS]) {
             $prestations = explode('#', $data[self::CSV_PRESTATIONS]);
             foreach ($prestations as $prestationNom) {
                 if (trim($prestationNom) != "") {
                     $prestationIdentifiant = strtoupper(Transliterator::urlize($prestationNom));
                     if (!array_key_exists($prestationIdentifiant, $prestationsType)) {
                         $output->writeln(sprintf("<comment>La prestation : %s n'existe pas dans la configuration </comment>", $prestationIdentifiant));
                         continue;
                     }
                     $prestation = $prestationsType[$prestationIdentifiant];
                     $passage->addPrestation($prestation);
                     $this->dm->persist($passage);
                 }
             }
         } else {
             $output->writeln(sprintf("<comment>Le passage : %s n'a aucune presta </comment>", $data[self::CSV_OLD_ID]));
         }
         $identifiantRepriseTechnicien = $data[self::CSV_TECHNICIEN];
         if (!is_null($identifiantRepriseTechnicien)) {
             $compte = $this->um->getRepository()->findOneByIdentifiantReprise($identifiantRepriseTechnicien);
             if (!is_null($compte)) {
                 $passage->addTechnicien($compte);
             }
         }
         $passage->setContrat($contrat);
         $passage->setNumeroContratArchive($contrat->getNumeroArchive());
         $produits = explode('#', $data[self::CSV_PRODUITS]);
         foreach ($produits as $produitStr) {
             if ($produitStr) {
                 $produitdetail = explode('~', $produitStr);
                 $produitQte = 0;
                 $produitLib = $produitdetail[0];
                 if (count($produitdetail) > 1) {
                     $produitQte = $produitdetail[1];
                 }
                 if ($produitLib) {
                     $produitToAdd = clone $produitsArray[strtoupper(Transliterator::urlize($produitLib))];
                     $produitToAdd->setNbUtilisePassage(0);
                     $produitToAdd->setNbTotalContrat(null);
                     $produitToAdd->setNbUtilisePassage($produitQte);
                     $passage->addProduit($produitToAdd);
                     $this->dm->persist($passage);
                 }
             }
         }
         $contrat->addEtablissement($etablissement);
         $contrat->addPassage($etablissement, $passage);
         $i++;
         $cptTotal++;
         if ($cptTotal % (count($csv) / 100) == 0) {
             $progress->advance();
         }
         if ($i >= 2000) {
             $this->dm->flush();
             $this->dm->clear();
             gc_collect_cycles();
             $i = 0;
         }
     }
     $this->dm->flush();
     $progress->finish();
 }