/** * Opravila pri ustvarjanju nove entitete * * @param Dogodek $object * @param Parameters $params */ public function create($object, $params = null) { if ($object->getNadrejenoGostovanje()) { $object->getNadrejenoGostovanje()->getPodrejeniDogodki()->add($object); } if (!$object->getStatus()) { $object->setStatus(Dogodek::PLANIRAN); } if (!empty($params['alternacija'])) { $this->expect(is_array($params['alternacija']), "Parameter alternacija mora biti array id-jev", 1000584); $alternacijaIds = $params['alternacija']; } else { $alternacijaIds = []; } if (!empty($params['dezurni'])) { $this->expect(is_array($params['dezurni']), "Parameter dezurni mora biti array id-jev", 1000588); $dezurniIds = $params['dezurni']; } else { $dezurniIds = []; } if (!empty($params['gost'])) { $this->expect(is_array($params['gost']), "Parameter gost mora biti array id-jev", 1000588); $gostIds = $params['gost']; } else { $gostIds = []; } if (!empty($params['sodelujoc'])) { $this->expect(is_array($params['sodelujoc']), "Parameter sodelujoč mora biti array id-jev", 1000588); $sodelujocIds = $params['sodelujoc']; } else { $sodelujocIds = []; } $this->preracunajSezono($object); parent::create($object, $params); /* * preberemo delte iz opcij */ $optionR = $this->getEntityManager()->getRepository('App\\Entity\\Option'); $option = $optionR->findOneByName("dogodek.delte"); $this->expect($option, "Opcija dogodek.delte ne obstaja", 1000587); $delte = $option->getDefaultValue(); /* * init delt */ switch ($object->getRazred()) { case $object::PREDSTAVA: $deltaZacetek = $delte['delPreZac']['value']; $deltaKonec = $delte['delPreKon']['value']; $deltaZacetekTeh = $delte['delPreZacTeh']['value']; $deltaKonecTeh = $delte['delPreKonTeh']['value']; break; case $object::VAJA: $deltaZacetek = $delte['delVajZac']['value']; $deltaKonec = $delte['delVajKon']['value']; $deltaZacetekTeh = $delte['delVajZacTeh']['value']; $deltaKonecTeh = $delte['delVajKonTeh']['value']; break; case $object::SPLOSNO: $deltaZacetek = $deltaZacetekTeh = $delte['delSplZac']['value']; $deltaKonec = $deltaKonecTeh = $delte['delSplKon']['value']; break; case $object::TEHNICNI: $deltaZacetek = $deltaZacetekTeh = $delte['delTehZac']['value']; $deltaKonec = $deltaKonecTeh = $delte['delTehKon']['value']; break; case $object::GOSTOVANJE: $deltaZacetek = $deltaZacetekTeh = $delte['delGosZac']['value']; $deltaKonec = $deltaKonecTeh = $delte['delGosKon']['value']; break; default: $deltaZacetek = $deltaZacetekTeh = $deltaKonecTeh = $deltaKonec = 0; break; } /* * če obstajajo delta parmetri, z njimi povozimo vrednosti: */ if (!empty($params['deltaZac'])) { $deltaZacetek = $params['deltaZac']; } if (!empty($params['deltaZacTeh'])) { $deltaZacetekTeh = $params['deltaZacTeh']; } if (!empty($params['deltaKon'])) { $deltaKonec = $params['deltaKon']; } if (!empty($params['deltaKonTeh'])) { $deltaKonecTeh = $params['deltaKonTeh']; } $terminStoritveR = $this->getEntityManager()->getRepository('Prisotnost\\Entity\\TerminStoritve'); $altR = $this->getEntityManager()->getRepository('Produkcija\\Entity\\Alternacija'); $osebaR = $this->getEntityManager()->getRepository('App\\Entity\\Oseba'); /* * kreiram termine storitve za alternacije */ foreach ($alternacijaIds as $altId) { $alt = $altR->findOneById($altId); $this->expect($alt, "Alternacija ({$altId}) ne obstaja", 1000586); $aliTehnik = false; //init if ($alt->getFunkcija()) { if ($alt->getFunkcija()->getPodrocje() == 'tehnik') { $aliTehnik = true; } } $ts = new \Prisotnost\Entity\TerminStoritve(); $ts->setDogodek($object); $ts->setAlternacija($alt); $deltaZ = $aliTehnik ? $deltaZacetekTeh : $deltaZacetek; $ts->setPlaniranZacetek($this->dodajInterval($object->getZacetek(), $deltaZ)); $deltaK = $aliTehnik ? $deltaKonecTeh : $deltaKonec; $ts->setPlaniranKonec($this->dodajInterval($object->getKonec(), $deltaK)); $ts->setDezurni(false); $ts->setGost(false); $ts->setZasedenost(false); $ts->setVirtZasedenost(false); $ts->setSodelujoc(FALSE); $ts->setUra(null); $object->terminiStoritve->add($ts); // verjetno to ni potrebno $terminStoritveR->create($ts); } /* * kreiram termine storitve za goste */ foreach ($gostIds as $gostId) { $oseba = $osebaR->findOneById($gostId); $this->expect($oseba, "Oseba gost ({$gostId}) ne obstaja", 1000589); $ts = new \Prisotnost\Entity\TerminStoritve(); $ts->setDogodek($object); $ts->setGost(true); $ts->setOseba($oseba); $deltaZ = $deltaZacetek; $ts->setPlaniranZacetek($this->dodajInterval($object->getZacetek(), $deltaZ)); $deltaK = $deltaKonec; $ts->setPlaniranKonec($this->dodajInterval($object->getKonec(), $deltaK)); $ts->setDezurni(false); $ts->setSodelujoc(FALSE); $ts->setZasedenost(false); $ts->setVirtZasedenost(false); $ts->setUra(null); $object->terminiStoritve->add($ts); // verjetno to ni potrebno $terminStoritveR->create($ts); } /* * kreiram termine storitve za dežurne */ foreach ($dezurniIds as $dezurniId) { $oseba = $osebaR->findOneById($dezurniId); $this->expect($oseba, "Oseba dezurni ({$dezurniId}) ne obstaja", 1000590); $ts = new \Prisotnost\Entity\TerminStoritve(); $ts->setDogodek($object); $ts->setDezurni(TRUE); $ts->setOseba($oseba); $deltaZ = $deltaZacetek; $ts->setPlaniranZacetek($this->dodajInterval($object->getZacetek(), $deltaZ)); $deltaK = $deltaKonec; $ts->setPlaniranKonec($this->dodajInterval($object->getKonec(), $deltaK)); $ts->setGost(false); $ts->setSodelujoc(FALSE); $ts->setZasedenost(false); $ts->setVirtZasedenost(false); $ts->setUra(null); $object->terminiStoritve->add($ts); // verjetno to ni potrebno $terminStoritveR->create($ts); } /* * kreiram termine storitve za sodelujoče */ foreach ($sodelujocIds as $sodelujocId) { $oseba = $osebaR->findOneById($sodelujocId); $this->expect($oseba, "Oseba sodelujoč ({$sodelujocId}) ne obstaja", 1000590); $ts = new \Prisotnost\Entity\TerminStoritve(); $ts->setDogodek($object); $ts->setSodelujoc(TRUE); $ts->setOseba($oseba); $deltaZ = $deltaZacetek; $ts->setPlaniranZacetek($this->dodajInterval($object->getZacetek(), $deltaZ)); $deltaK = $deltaKonec; $ts->setPlaniranKonec($this->dodajInterval($object->getKonec(), $deltaK)); $ts->setDezurni(false); $ts->setGost(false); $ts->setZasedenost(false); $ts->setVirtZasedenost(false); $ts->setUra(null); $object->terminiStoritve->add($ts); // verjetno to ni potrebno $terminStoritveR->create($ts); } }