function create(Etablissement $etablissement, Contrat $contrat) { $passage = new Passage(); $passage->setEtablissement($etablissement); foreach ($contrat->getPrestations() as $prestationContrat) { $prestation = clone $prestationContrat; $prestation->setNbPassages(0); $passage->addPrestation($prestation); } $previousPassage = null; foreach ($contrat->getPassagesEtablissementNode($etablissement)->getPassagesSorted(true) as $p) { if ($p->getId() != $passage->getId() && count($p->getTechniciens())) { $previousPassage = $p; break; } } if ($previousPassage) { foreach ($previousPassage->getTechniciens() as $tech) { $passage->addTechnicien($tech); } } elseif ($contrat->getTechnicien()) { $passage->addTechnicien($contrat->getTechnicien()); } foreach ($contrat->getProduits() as $produitContrat) { $produit = clone $produitContrat; $produit->setNbUtilisePassage(0); $passage->addProduit($produit); } $passage->setContrat($contrat); return $passage; }
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(); }