Пример #1
0
 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);
 }
Пример #2
0
 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);
 }
Пример #3
0
 /**
  * 
  * @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();
 }
Пример #4
0
 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;
     }
 }
Пример #5
0
 /**
  * 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);
     }
 }