/** * Preverim če ima oseba veljavno zaposlitev, * potem jo samodejno povežem z zaposlitvijo * @param entity $alternacija */ public function preveriZaposlitev(Alternacija $alternacija) { if (!$alternacija->getZaposlitev()) { $zr = $this->getEntityManager()->getRepository('Produkcija\\Entity\\Zaposlitev'); $zap = $zr->findOneBy(['oseba' => $alternacija->getOseba()->getId(), 'status' => 'A']); if ($zap) { /* * $$ ali ni morda hrošč in mora biti get konec > datetime? */ if ($zap->getKonec() === null || $zap->getKonec() < new DateTime()) { $alternacija->setZaposlen(true); $alternacija->setZaposlitev($zap); return; } } $alternacija->setZaposlen(false); } }
/** * * @param \Tip\Repository\IzbirneOpcije $rep * @param string $object * @param array $vals */ public function populateAlternacija($manager, $v) { $rep = $manager->getRepository('Produkcija\\Entity\\Alternacija'); // $tipFunR = $manager->getRepository('Produkcija\Entity\TipFunkcije'); $o = $rep->findOneBySifra(trim($v[0])); $nov = false; if (!$o) { $o = new Alternacija(); $o->setSifra(trim($v[0])); $nov = true; } $o->setZaposlen($v[1]); $getref = $this->getReference($v[2]); $o->setFunkcija($getref); if ($v[3]) { // $$ še ni implementirano $getref = $this->getReference($v[3]); $o->setSodelovanje($getref); } $getref = $this->getReference($v[4]); $o->setOseba($getref); if ($v[5]) { $getref = $this->getReference($v[5]); $o->setKoprodukcija($getref); } $o->setSort($v[6]); $o->setImaPogodbo($v[7]); $o->setPomembna($v[8]); if ($v[9]) { $getref = $this->getReference($v[9]); $o->setPogodba($getref); } if ($v[10]) { $getref = $this->getReference($v[10]); $o->setZaposlitev($getref); } $date = empty($v[11]) ? null : date_create($v[11]); $o->setZacetek($date); $date = empty($v[12]) ? null : date_create($v[12]); // var_dump($date); $o->setKonec($date); $o->setPrivzeti($v[13]); if ($nov) { $rep->create($o); } else { $rep->update($o); } $referenca = 'Alternacija-' . $v[0]; // var_dump($referenca); $this->addReference($referenca, $o); }
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; } }