Exemplo n.º 1
0
 /**
  * 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);
     }
 }