示例#1
0
 /**
  * Shrani dogodek in pripadajoče ažurirane termine storitve
  * 
  * 
  * @param \Koledar\Entity\Dogodek $dogodek
  * @param array $terminiStoritev       termini storitev v obliki:
  *                                   [ { 'id' : 'id-ts'
  *                                      ,'planiranZacetek' : 'iso-date'
  *                                      ,'planiranKonec' : 'iso-date'
  *                                      ,'alternacija' : 'id-alternacije'
  *                                      ,'dezurni' : 'boolean'
  *                                      ,'gost' : 'boolean'
  *                                      ,'sodelujoc' : 'boolean'
  *                                      ,'oseba' : 'oseba-id'
  *                                     } ,...]
  * @return boolean
  */
 public function azurirajTSDogodka(\Koledar\Entity\Dogodek $dogodek, array $terminiStoritev = [])
 {
     $em = $this->serviceLocator->get("\\Doctrine\\ORM\\EntityManager");
     $tsR = $em->getRepository("Prisotnost\\Entity\\TerminStoritve");
     $altR = $em->getRepository("Produkcija\\Entity\\Alternacija");
     $osebaR = $em->getRepository("App\\Entity\\Oseba");
     /*
      * - za vse stare ts
      *   . če ne obstaja novi TS -> DELETE stari TS 
      */
     foreach ($dogodek->getTerminiStoritve() as $oldts) {
         if (!in_array($oldts->getId(), array_column($terminiStoritev, "id"))) {
             $tsR->delete($oldts);
         }
     }
     /*
      * - za vse nove ts
      *   . če obstaja stari TS -> UPDATE novi TS če se časa starega novega razlikujeta
      *   . sicer -> CREATE novi TS
      */
     foreach ($terminiStoritev as $newts) {
         /*
          * ali TS že obstaja v dogodku
          */
         if (array_key_exists('id', $newts) && $dogodek->getTerminiStoritve()->exists(function ($key, $f) use(&$newts) {
             return $f->getId() === $newts['id'];
             // nov ts obstaja v dogodku
         })) {
             $tsA = $dogodek->getTerminiStoritve()->filter(function ($ent) use(&$newts) {
                 return $ent->getId() === $newts['id'];
                 // nov ts obstaja v dogodku
             });
             $this->expect($tsA->count() == 1, "V dogodku je napačno število terminov storitev z id=" . $newts['id'], 1001270);
             $ts = $tsA->first();
             /*
              * če je spremennjen začetek ali konec termina storitve ga osvežimo
              */
             $planiranZacetek = empty($newts['planiranZacetek']) ? null : $this->filterDate(date_create($newts['planiranZacetek']));
             // polje mora biti v php-jevi PHP-jevem datetime  tipu
             $planiranKonec = empty($newts['planiranKonec']) ? null : $this->filterDate(date_create($newts['planiranKonec']));
             // polje mora biti v php-jevi PHP-jevem datetime  tipu
             if ($ts->getPlaniranZacetek() !== $planiranZacetek || $ts->getPlaniranKonec() !== $planiranKonec) {
                 $ts->setPlaniranZacetek($planiranZacetek);
                 $ts->setPlaniranKonec($planiranKonec);
                 $tsR->update($ts);
             }
         } else {
             /*
              * kreiraj nov TS
              */
             $ts = new \Prisotnost\Entity\TerminStoritve();
             $ts->setDogodek($dogodek);
             $planiranZacetek = empty($newts['planiranZacetek']) ? null : $this->filterDate(date_create($newts['planiranZacetek']));
             // polje mora biti v php-jevi PHP-jevem datetime  tipu
             $ts->setPlaniranZacetek($planiranZacetek);
             $planiranKonec = empty($newts['planiranKonec']) ? null : $this->filterDate(date_create($newts['planiranKonec']));
             // polje mora biti v php-jevi PHP-jevem datetime  tipu
             $ts->setPlaniranKonec($planiranKonec);
             $oseba = empty($newts['oseba']) ? null : $osebaR->findOneById($newts['oseba']['id']);
             $ts->setOseba($oseba);
             $alt = empty($newts['alternacija']) ? null : $altR->findOneById($newts['alternacija']['id']);
             $ts->setAlternacija($alt);
             $ts->setDezurni($newts['dezurni'] ?: false);
             $ts->setGost($newts['gost'] ?: FALSE);
             $ts->setSodelujoc($newts['sodelujoc'] ?: false);
             $ts->setZasedenost(false);
             $ts->setVirtZasedenost(false);
             $tsR->create($ts);
         }
     }
     return TRUE;
 }
 /**
  *
  * @param \Tip\Repository\IzbirneOpcije $rep
  * @param string $object
  * @param array $vals
  */
 public function populateTerminStoritve($manager, $v)
 {
     $rep = $manager->getRepository('Prisotnost\\Entity\\TerminStoritve');
     $dogodek = $v[6] ? $this->getReference($v[6]) : null;
     $alternacija = $v[7] ? $this->getReference($v[7]) : null;
     $oseba = $v[8] ? $this->getReference($v[8]) : null;
     $planiranZacetek = empty($v[1]) ? null : date_create($v[1]);
     // polje mora biti v php-jevi PHP-jevem datetime  tipu
     $o = $rep->findOneBy(["dogodek" => $dogodek, "alternacija" => $alternacija, "oseba" => $oseba, "planiranZacetek" => $planiranZacetek]);
     $nov = false;
     if (!$o) {
         $o = new \Prisotnost\Entity\TerminStoritve();
         $o->setDogodek($dogodek);
         $o->setAlternacija($alternacija);
         $o->setOseba($oseba);
         $o->setPlaniranZacetek($planiranZacetek);
         $nov = true;
     }
     $date = empty($v[2]) ? null : date_create($v[2]);
     // polje mora biti v php-jevi PHP-jevem datetime  tipu
     $o->setPlaniranKonec($date);
     //        $date = empty($v[3]) ? null : date_create($v[3]);     // polje mora biti v php-jevi PHP-jevem datetime  tipu
     //        $o->setZacetek($date);
     //        $date = empty($v[4]) ? null : date_create($v[4]);     // polje mora biti v php-jevi PHP-jevem datetime  tipu
     //        $o->setKonec($date);
     //        $o->setPlaniranoTraja($v[5]);
     $o->setDezurni($v[9]);
     $o->setGost($v[10]);
     $o->setSodelujoc($v[11]);
     $o->setZasedenost($v[12]);
     if ($nov) {
         $rep->create($o);
     } else {
         $rep->update($o);
     }
     /*
      * izjemoma rabimo flush zaradi kontrole TS pri gostovanju
      */
     $manager->flush();
     $referenca = 'TerminStoritve-' . $v[0];
     //        var_dump($referenca);
     $this->addReference($referenca, $o);
 }
示例#3
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);
     }
 }