public function validate($mode = 'update') { $this->expect($this->uprizoritev, "Pri vaji je uprizoritev obvezna", 1001841); $this->expect($this->dogodek, "Pri vaji je dogodek obvezen", 1001842); $this->expect($this->dogodek->getZacetek(), "Pri vaji je začetek obvezen", 1001843); $this->expect($this->dogodek->getKonec(), "Pri vaji je konec obvezen", 1001844); }
public function validate($mode = 'update') { $this->expect($this->uprizoritev, "Predstava mora biti vezana na uprizoritev", 1001902); $this->expect($this->dogodek, "Pri predstavi je dogodek obvezen", 1001902); $this->expect($this->dogodek->getZacetek(), "Pri predstavi je začetek obvezen", 1001903); $this->expect($this->dogodek->getKonec(), "Pri predstavi je konec obvezen", 1001904); }
/** * * @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(); }
public function validate($mode = 'update') { $this->expect(!$this->ura, "Ure so že vnešene, spreminjanje terminov storitev ni mogoče", 1001088); $i = 0; if ($this->alternacija) { $i++; } if ($this->dezurni) { $i++; } if ($this->gost) { $i++; } if ($this->zasedenost) { $i++; } if ($this->virtZasedenost) { $i++; } if ($this->sodelujoc) { $i++; } $this->expect($i === 1, "Napačno število referenc ({$i}) v terminu storitve. Dovoljen natanko eden od alternacija/dezurni/gost/sodelujoč/zasedenost/virt.zasedenost", 1001080); $this->expect($this->planiranZacetek, "Planiran začetek mora obstajati", 1001084); $this->expect($this->planiranKonec, "Planiran konec mora obstajati", 1001085); $this->expect($this->planiranZacetek < $this->planiranKonec, "Planiran konec mora biti za planiranim začetkom", 1001087); if ($this->alternacija) { /** * preveri, če je alternacija od uprizoritve dogodka */ $this->expect(method_exists($this->dogodek->getPodrobno(), "getUprizoritev") && $this->dogodek->getPodrobno()->getUprizoritev(), "Dogodek nima uprizoritve, termin storitve ima alternacijo", 1001089); $aId = $this->alternacija->getId(); $this->expect($this->dogodek->getPodrobno()->getUprizoritev()->getFunkcije()->exists(function ($key, $f) use(&$aId) { return $f->getAlternacije()->exists(function ($k, $a) use(&$aId) { return $a->getId() === $aId; // vrne true, če alternacija obstaja v uprizoritvi }); }), "Alternacija (" . $this->alternacija->getSifra() . ") ne pripada uprizoritvi dogodka", 1001090); $this->oseba = $this->alternacija->getOseba(); } if ($this->gost) { $this->expect($this->dogodek->getRazred() === \Koledar\Entity\Dogodek::VAJA, "Gost je dovoljen le na vaji", 1001091); } if ($this->dezurni) { $this->expect($this->dogodek->getRazred() === \Koledar\Entity\Dogodek::PREDSTAVA, "Dežurni je dovoljen le na predstavi", 1001092); } if ($this->alternacija || $this->gost || $this->dezurni || $this->sodelujoc) { /* * izračunamo delti glede na čase v dogodku */ $this->expect($this->dogodek, "Dogodek pri takem tipu termina storitve mora biti prisoten", 1001081); $this->expect($this->dogodek->getZacetek(), "Začetek dogodka mora obstajati", 1001082); $this->expect($this->dogodek->getKonec(), "Konec dogodka mora obstajati", 1001083); /* * če ts poddogodka, mora interval biti v celoti intervalu ts iste osebe v gostovanju */ $oseba = $this->oseba; $planiranZacetek = $this->planiranZacetek; $planiranKonec = $this->planiranKonec; if ($this->dogodek->getNadrejenoGostovanje()) { $this->expect($this->dogodek->getNadrejenoGostovanje()->getDogodek()->getTerminiStoritve()->exists(function ($key, $f) use(&$oseba, &$planiranZacetek, &$planiranKonec) { /* * obstaja TS iste osebe z intervalom, ki je večji ali enak od int. tega TS */ return $f->getOseba() === $oseba && $f->getPlaniranZacetek() <= $planiranZacetek && $f->getPlaniranKonec() >= $planiranKonec; }), "Termin storitve poddogodka (" . $this->oseba->getPolnoIme() . ") mora imeti vsaj en termin storitve gostovanja, ki ustreza intervalu", 1001094); } /* * izračunamo delti, ki sta v minutah */ $this->deltaPlaniranZacetek = (int) (($this->planiranZacetek->getTimestamp() - $this->dogodek->getZacetek()->getTimestamp()) / 60); $this->deltaPlaniranKonec = (int) (($this->planiranKonec->getTimestamp() - $this->dogodek->getKonec()->getTimestamp()) / 60); } else { $this->dogodek = null; } }
/** * Osveži termine storitve dogodka * * @param Dogodek $object */ private function osveziTS(\Koledar\Entity\Dogodek $object) { $tsR = $this->getEntityManager()->getRepository('Prisotnost\\Entity\\TerminStoritve'); foreach ($object->getTerminiStoritve() as $ts) { $ts->setPlaniranZacetek($this->dodajInterval($object->getZacetek(), $ts->getDeltaPlaniranZacetek())); $ts->setPlaniranKonec($this->dodajInterval($object->getKonec(), $ts->getDeltaPlaniranKonec())); $tsR->update($ts); } }