/** * * @param \Koledar\Entity\Dogodek $dogodek * @param datetime $zacetekD začetek novega dogodka * @return boolean */ public function kopirajDogodek(\Koledar\Entity\Dogodek $dogodek, $zacetekD) { $this->expect(in_array($dogodek->getStatus(), [\Koledar\Entity\Dogodek::PLANIRAN, \Koledar\Entity\Dogodek::PREGLEDAN, \Koledar\Entity\Dogodek::POTRJEN]), "Kopirati je možno planirane,pregledane ali potrjene dogodke", 1001271); $this->expect($dogodek->getRazred() != \Koledar\Entity\Dogodek::GOSTOVANJE, "Gostovanja ni možno kopirati", 1001272); $this->expect(!$dogodek->getNadrejenoGostovanje(), "Dogodka, ki je del gostovanja, ni možno kopirati", 1001273); $em = $this->serviceLocator->get("\\Doctrine\\ORM\\EntityManager"); $dogR = $em->getRepository("Koledar\\Entity\\Dogodek"); $newDog = $dogodek->copy(); $this->getEm()->persist($newDog); $newDog->setStatus(\Koledar\Entity\Dogodek::PLANIRAN); $cas = clone $zacetekD; // $$ da kasneje v uow ne spreminja začetka dogodka $newDog->setZacetek($cas); /** * novi dogodek je enako dolg kot stari */ $delta = (int) (($dogodek->getKonec()->getTimestamp() - $dogodek->getZacetek()->getTimestamp()) / 60); $newDog->setKonec($dogR->dodajInterval($zacetekD, $delta)); /* * spraznimo array collectione */ $newDog->setTerminiStoritve(new \Doctrine\Common\Collections\ArrayCollection()); /* * razčisti polja: * sezona - se pri update-u sama preračuna */ if ($dogodek->getVaja()) { $newPodDog = $dogodek->getVaja()->copy(); $this->getEm()->persist($newPodDog); $newPodDog->setDogodek($newDog); $newDog->setVaja($newPodDog); } if ($dogodek->getPredstava()) { $newPodDog = $dogodek->getPredstava()->copy(); $this->getEm()->persist($newPodDog); /* * abonmaji - many to many relacij tehnično ni potrebno spreminjati */ $newPodDog->setDogodek($newDog); $newDog->setPredstava($newPodDog); } if ($dogodek->getSplosni()) { $newPodDog = $dogodek->getSplosni()->copy(); $this->getEm()->persist($newPodDog); $newPodDog->setDogodek($newDog); $newDog->setSplosni($newPodDog); } if ($dogodek->getTehnicni()) { $newPodDog = $dogodek->getTehnicni()->copy(); $this->getEm()->persist($newPodDog); $newPodDog->setDogodek($newDog); $newDog->setTehnicni($newPodDog); } if ($dogodek->getGostovanje()) { /* * še en expect za vsak slučaj */ $this->expect(false, "Gostovanja ni možno kopirati", 1001274); } if ($dogodek->getNadrejenoGostovanje()) { /* * še en expect za vsak slučaj */ $this->expect(false, "Dogodka, ki je del gostovanja, ni možno kopirati", 1001275); } $coll = $dogodek->getTerminiStoritve(); foreach ($coll as $ts) { $newTS = $ts->copy(); $this->getEm()->persist($newTS); $newTS->setUra(null); $newTS->setDogodek($newDog); $newDog->getTerminiStoritve()->add($newTS); } $dogR->update($newDog); // da na novo preračuna termine storitve return $newDog->getId(); }