Example #1
0
 /**
  * Preveri, če datum dela prost dan
  *
  * @param string $datum datum, za katerega preverjamo, če je dela prost dan v ISO8601 obliki, npr. "2017-01-01T01:00:00+0100"
  * @return true|false       true če je dela prost dan, false sicer
  * @throws \Max\Exception\UnauthException
  */
 public function delaProstDan($datum)
 {
     // preverjanje avtorizacije
     $this->expectPermission("Praznik-read");
     $this->expectIsoDate($datum, $this->translate("Datum ({$datum}) ni datum v ISO8601 obliki"), 1001110);
     $datumD = Functions::stringToDateTime($datum);
     /**
      * preračun imamo v posebnem servisu, tako, da ga lahko kličemo direktno iz PHP-ja na strežniški strani
      */
     $service = $this->serviceLocator->get('praznik.service');
     return $service->delaProstDan($datumD);
 }
 public function validate($mode = 'update')
 {
     $this->expect($this->getUprizoritev(), "Uprizoritev je obvezen podatek", 1000452);
     if ($this->getDokument()) {
         // preveriti, ali že obstaja program pon. prem. z isto uprizoritvijo
         $obstaja = true;
         //init
         if ($this->getDokument()->getPonovitvePremiere()) {
             $id = $this->getId();
             $obstaja = $this->getDokument()->getPonovitvePremiere()->exists(function ($key, $ponovitvePremiere) use(&$id) {
                 return $ponovitvePremiere->getUprizoritev() == $this->getUprizoritev() && $ponovitvePremiere->getId() !== $id;
                 //vrne true, če obstaja drug program pon. prem. z isto uprizoritvijo
             });
             $this->expect(!$obstaja, "Program premiere z isto uprizoritvijo že obstaja v programu dela", 1000450);
         }
     }
     $zaproseno = \Max\Functions::euroRoundS($this->zaproseno);
     $maxZaproseno = \Max\Functions::euroRoundS(0.7 * ($this->avtorskiHonorarji + $this->tantieme));
     // glede na procent upravičenih stroškov
     $this->expect($zaproseno <= $maxZaproseno, "Zaprošeno (" . $zaproseno . ") je lahko največ 70% vsote avt.honor in tantiem (" . $maxZaproseno . ")", 1000452);
     parent::validate();
 }
Example #3
0
 public function validate($mode = 'update')
 {
     $this->expect(!$this->getTipProgramskeEnote(), "Tip programske enote obstaja, a ne sme obstajati za program izjemni", 1000541);
     $this->expect(!$this->getUprizoritev(), "Uprizoritev obstaja, a ne sme obstajati za program izjemni", 1000542);
     $this->expect($this->getNaziv(), "Naziv ne sme biti prazen", 1000545);
     $this->expect($this->getTrajanje(), "Trajanje ne sme biti prazno", 1000546);
     $this->expect($this->getPrizorisce(), "Prizorišče ne sme biti prazno", 1000547);
     $this->expect($this->getZvrst(), "Zvrst je obvezen podatek", 1000548);
     $this->expect($this->getAvtor(), "Avtor je obvezen podatek", 1001230);
     $this->expect($this->getReziser(), "Režiser je obvezen podatek", 1001231);
     $this->expect($this->getDatum(), "Datum je obvezen podatek", 1001232);
     $nd = \Max\Functions::euroRoundS($this->getNasDelez());
     $sumStr = \Max\Functions::euroRoundS($this->avtorskiHonorarji + $this->tantieme + $this->avtorskePravice + $this->materialni);
     $this->expect($nd >= $sumStr, "Našega delež (" . $nd . ") mora biti večji ali enak vsoti avtorskih honor, tantiem, avt.pravic in mat. str. (" . $sumStr . ")", 1000543);
     $zaproseno = \Max\Functions::euroRoundS($this->zaproseno);
     $maxZaproseno = \Max\Functions::euroRoundS(1.0 * $this->nasDelez);
     // glede na procent upravičenih stroškov
     $this->expect($zaproseno <= $maxZaproseno, "Zaprošeno (" . $zaproseno . ") je lahko največ 100% deleža mat. JZ(" . $maxZaproseno . ")", 1000544);
     parent::validate();
 }
Example #4
0
 public function validate($mode = 'update')
 {
     $this->expect($this->getTipProgramskeEnote(), "Tip programske enote ne obstaja", 1000443);
     $this->expect($this->getUprizoritev(), "Uprizoritev je obvezen podatek", 1000444);
     $this->validateIntGE0($this->obiskDoma, "", 1000447);
     /**
      * preveri vrednost za tip programske enote
      * - glede na vrednost matičnega
      * - glede na vsoto koproducentov  (v entiteti prod. delitev)
      */
     $this->validateNumberGE0($this->kpe, "Koeficient programske enote", 1000445);
     $kpe = \Max\Functions::numberRoundS($this->kpe);
     $maxfaktor = \Max\Functions::numberRoundS($this->getTipProgramskeEnote()->getMaxFaktor());
     $this->expect($kpe <= $maxfaktor, "Koeficient programske enote (" . $kpe . ") ne sme biti večji kot maks. koeficient (" . $maxfaktor . ")", 1000446);
     if ($this->getDokument()) {
         /**
          *  preveriti, ali že obstaja programpremiere z isto uprizoritvijo
          */
         $obstaja = true;
         //init
         if (!$this->getDokument()->getPremiere()->isEmpty()) {
             $id = $this->getId();
             $obstaja = $this->getDokument()->getPremiere()->exists(function ($key, $progPremiere) use(&$id) {
                 return !empty($this->getUprizoritev()) && $progPremiere->getUprizoritev() == $this->getUprizoritev() && $progPremiere->getId() !== $id;
                 //vrne true, če obstaja drug programpremiere z isto uprizoritvijo
             });
             $this->expect(!$obstaja, "Program premiere z isto uprizoritvijo že obstaja v programu dela", 1000440);
         }
     }
     $zaproseno = \Max\Functions::euroRoundS($this->zaproseno);
     $maxZaproseno = \Max\Functions::euroRoundS(0.7 * $this->nasDelez);
     // glede na procent upravičenih stroškov
     $this->expect($zaproseno <= $maxZaproseno, "Zaprošeno (" . $zaproseno . ") je lahko največ 70% deleža mat. JZ(" . $maxZaproseno . ")", 1000442);
     parent::validate();
 }
Example #5
0
 public function validate($mode = 'update')
 {
     $this->expect($this->getEnotaPrograma(), 'Ni enote programa za to koprodukcijo', 1000410);
     $this->validateNumberGE0($this->kpe, "Koeficient programske enote", 1000417);
     $this->validateProcGE0LE100($this->odstotekFinanciranja, "Odstotek financiranja", 1000412);
     $this->validateEuroGE0($this->delez, "Delež", 1000416);
     $delez = \Max\Functions::procRoundS($this->delez);
     //$$ kontrole za vsoto procentov
     // za isto enoto programa je lahko le 1 delitev z isto produkcijsko hišo
     if (!$this->getEnotaPrograma()->getKoprodukcije()->isEmpty()) {
         $id = $this->getId();
         $obstaja = $this->getEnotaPrograma()->getKoprodukcije()->exists(function ($key, $kopr) use(&$id) {
             return $kopr->getKoproducent() == $this->getKoproducent() && $kopr->getId() !== $id;
             //vrne true, če obstaja drug koprodukcija z istim koproducentom
         });
         $this->expect(!$obstaja, "Koprodukcija z istim koproducentom že obstaja v enoti programa", 1000411);
         /**
          *  preveri število matičnih koprodukcij?
          */
         $maticniCollection = $this->getEnotaPrograma()->getKoprodukcije()->filter(function ($kopr) {
             return $kopr->getMaticniKop();
             //vrne vse zapise matičnih koproducentov
         });
         $stMaticnihKoproducentov = $maticniCollection->count();
         $this->expect($stMaticnihKoproducentov == 1, "Dovoljen natanko 1 matični koproducent, jih je pa " . $stMaticnihKoproducentov, 1000414);
     }
     /**
      * pri premieri mora biti vsota kpe vseh koproducentov <= maksimalnemu koeficientu iz tabele
      */
     $sumkpe = 0;
     //init
     /**
      * $$ if program premiera 
      *  pri drugih ne bi smel biti problem, ker so KPE-ji =0  $$?
      */
     foreach ($this->getEnotaPrograma()->getKoprodukcije() as $numObject => $kopr) {
         $sumkpe += $kopr->getKpe();
     }
     $sumkpe = \Max\Functions::numberRoundS($sumkpe);
     $maxvsifaktor = $this->getEnotaPrograma()->getTipProgramskeEnote() ? $this->getEnotaPrograma()->getTipProgramskeEnote()->getMaxVsi() : 0;
     $maxvsifaktor = \Max\Functions::numberRoundS($maxvsifaktor);
     $this->expect($sumkpe <= $maxvsifaktor, "Vsota kpe vseh koproducentov (" . $sumkpe . ") ne sme biti večji kot maks. koeficient (" . $maxvsifaktor . ")", 1000415);
 }
Example #6
0
 public function validate($mode = 'update')
 {
     $this->expect($this->getUprizoritev(), "Uprizoritev je obvezen podatek", 1000434);
     $this->validateEuroGE0($this->strosekOdkPred, "Strošek odkupa predstave", 1000433);
     if ($this->getDokument()) {
         // preveriti, ali že obstaja programgostujoča z isto uprizoritvijo
         $obstaja = true;
         //init
         if (!$this->getDokument()->getGostujoci()->isEmpty()) {
             $id = $this->getId();
             $obstaja = $this->getDokument()->getGostujoci()->exists(function ($key, $progGostujoca) use(&$id) {
                 return $progGostujoca->getUprizoritev() == $this->getUprizoritev() && $progGostujoca->getId() !== $id;
                 //vrne true, če obstaja drug programGostujoča z isto uprizoritvijo
             });
             $this->expect(!$obstaja, "Program gostujoča z isto uprizoritvijo že obstaja v programu dela", 1000430);
         }
     }
     $this->expect(!$this->getTipProgramskeEnote(), "Tip programske enote obstaja, a ne sme obstajati za gostujočo", 1000431);
     $zaproseno = \Max\Functions::euroRoundS($this->zaproseno);
     $maxZaproseno = \Max\Functions::euroRoundS(0.5 * $this->strosekOdkPred);
     // glede na procent upravičenih stroškov
     $this->expect($zaproseno <= $maxZaproseno, "Zaprošeno (" . $zaproseno . ") je lahko največ 50% stroška odkupa predstave (" . $maxZaproseno . ")", 1000432);
     $strOdkPred = \Max\Functions::euroRoundS($this->strosekOdkPred);
     $nd = \Max\Functions::euroRoundS($this->nasDelez);
     $this->expect($strOdkPred <= $nd, "Strošek odkupa predstave (" . $strOdkPred . ") ne sme biti večji od našega deleža (" . $nd . ")", 1000433);
     parent::validate();
 }
Example #7
0
 public function validate($mode = 'update')
 {
     $this->validateIntGE0($this->stPredstav, "Št. predstav", 1000534);
     $this->validateIntGE0($this->stOkroglihMiz, "Št. okroglih miz", 1000535);
     $this->validateIntGE0($this->stPredstavitev, "Št. predstavitev", 1000536);
     $this->validateIntGE0($this->stDelavnic, "Št. delavnic", 1000537);
     $this->validateIntGE0($this->stDrugiDogodki, "Št. drugih dogodkov", 1000538);
     $this->validateIntGE0($this->stProdukcij, "Št. produkcij", 1000539);
     $this->validateIntGE0($this->stTujihSelektorjev, "Št. tujih selektorev", 1000700);
     $this->expect(!$this->getTipProgramskeEnote(), "Tip programske enote obstaja, a ne sme obstajati za program festival", 1000531);
     $this->expect(!$this->getUprizoritev(), "Uprizoritev obstaja, a ne sme obstajati za program festival", 1000532);
     $this->expect($this->getNaziv(), "Naziv ne sme biti prazen", 1000570);
     $zaproseno = \Max\Functions::euroRoundS($this->zaproseno);
     $maxZaproseno = \Max\Functions::euroRoundS(0.7 * $this->nasDelez);
     // glede na procent upravičenih stroškov
     $this->expect($zaproseno <= $maxZaproseno, "Zaprošeno (" . $zaproseno . ") je lahko največ 70% deleža mat. JZ(" . $maxZaproseno . ")", 1000533);
     parent::validate();
 }
 /**
  * preveri vhodne parametre RPC klicev in nasilno prekini program, če niso v redu
  * 
  */
 private function preveriVhodneParametre($uprizoritveIds, $alternacije, $zacetek, $konec)
 {
     foreach ($uprizoritveIds as $u) {
         $this->expectUUID($u, 'Pričakujem ID uprizoritev v prvem parametru', 1001670);
     }
     foreach ($alternacije as $key => $foo) {
         $this->expect(is_array($foo) && is_integer($key), 'Pričakujem array fun:(os,os,..) v drugem parametru', 1001676);
         foreach ($foo as $fun => $osebe) {
             $this->expectUUID($fun, 'Pričakujem Id funkcije kot ključ v drugem parametru', 1001674);
             foreach ($osebe as $o) {
                 $this->expectUUID($o, 'Pričakujem Id oseb v drugem parametru', 1001675);
             }
         }
     }
     if (!empty($zacetek)) {
         $this->expectIsoDate($zacetek, $this->translate('Začetek (' . $zacetek . ') ni datum v ISO8601 obliki'), 1001671);
     }
     if (!empty($konec)) {
         $this->expectIsoDate($konec, $this->translate('Konec (' . $konec . ') ni datum v ISO8601 obliki'), 1001672);
     }
     $this->expect(empty($zacetek) && empty($konec) || !empty($zacetek) && !empty($konec), "Začetek in konec morata biti ali oba prazna ali oba čas", 1001673);
     /**
      * konec mora biti >=začetek
      */
     if (!empty($zacetek) && !empty($konec)) {
         /*
          * pretvorimo v datum za vsak slučaj, če bi bila $zacetek in $konec 
          * v različnih time zone-ah
          */
         $zacTime = Functions::stringToDateTime($zacetek);
         $konTime = Functions::stringToDateTime($konec);
         $this->expect($zacTime <= $konTime, "Konec ne sme biti pred začetkom", 1001677);
     }
 }
Example #9
0
 public function validate($mode = 'update')
 {
     $this->expect($this->getUprizoritev(), "Uprizoritev je obvezen podatek", 1001303);
     $this->expect($this->getGostitelj(), "Gostitelj je obvezen podatek", 1001304);
     $this->expect($this->getDrzavaGostovanja(), "Država gostovanja je obvezen podatek", 1001305);
     $this->validateEuroGE0($this->transportniStroski, "Transportni stroški", 1001300);
     $this->validateEuroGE0($this->dnevPrvZad, "Dnevnice za prvi in zadnji dan", 1001301);
     $this->expect(!$this->getTipProgramskeEnote(), "Tip programske enote obstaja, a ne sme obstajati za gostovanje", 1001302);
     $zaproseno = \Max\Functions::euroRoundS($this->zaproseno);
     $maxZaproseno = \Max\Functions::euroRoundS(0.6 * $this->avtorskiHonorarji + 1.0 * $this->transportniStroski + 1.0 * $this->dnevPrvZad);
     // glede na procent upravičenih stroškov
     $this->expect($zaproseno <= $maxZaproseno, "Zaprošeno (" . $zaproseno . ") je lahko največ 60% avtorskih in tantiem in 70% odkupa avtorskih pravic in transportnih stroskov in dnevnic za 1. in zadnji dan (" . $maxZaproseno . ")", 1001304);
     parent::validate();
 }
Example #10
0
 /**
  * preračun kazalnikov
  * 
  * @param type $smer
  */
 public function preracunaj($smer = false)
 {
     /**
      * init
      */
     $this->stPonPrejVelikih = 0;
     $this->stPonPrejMalih = 0;
     $this->stPonPrejMalihKopr = 0;
     $this->stPonPrejSredKopr = 0;
     $this->stPonPrejVelikihKopr = 0;
     $this->stPremierVelikih = 0;
     $this->stPremierMalih = 0;
     $this->stPremierMalihKopr = 0;
     $this->stPremierSredKopr = 0;
     $this->stPremierVelikihKopr = 0;
     $this->vrPS1 = 0;
     $this->vrPS1Do = 0;
     $this->vrPS1Mat = 0;
     $this->vrPS1GostovSZ = 0;
     $this->stVsehPredstav = 0;
     $this->stIzvNekomerc = 0;
     $this->stIzvPrem = 0;
     $this->stIzvPremDoma = 0;
     $this->stIzvPremKopr = 0;
     $this->stIzvPonPrem = 0;
     $this->stIzvPonPremDoma = 0;
     $this->stIzvPonPremZamejo = 0;
     $this->stIzvPonPremKoprZamejo = 0;
     $this->stIzvPonPremGost = 0;
     $this->stIzvPonPremKoprGost = 0;
     $this->stIzvPonPremKopr = 0;
     $this->stIzvPonPremInt = 0;
     $this->stIzvPonPremKoprInt = 0;
     $this->stIzvPonPrej = 0;
     $this->stIzvPonPrejDoma = 0;
     $this->stIzvPonPrejKoprZamejo = 0;
     $this->stIzvPonPrejZamejo = 0;
     $this->stIzvPonPrejGost = 0;
     $this->stIzvPonPrejKoprGost = 0;
     $this->stIzvPonPrejKopr = 0;
     $this->stIzvPonPrejInt = 0;
     $this->stIzvPonPrejKoprInt = 0;
     $this->stIzvGostuj = 0;
     $this->stIzvOstalihNek = 0;
     $this->stIzvGostovanjSlo = 0;
     $this->stIzvGostovanjZam = 0;
     $this->stIzvGostovanjInt = 0;
     $this->stObiskNekom = 0;
     $this->stObiskNekomMat = 0;
     $this->stObiskNekomGostSlo = 0;
     $this->stObiskNekomGostZam = 0;
     $this->stObiskNekomGostInt = 0;
     $this->stObiskPrem = 0;
     $this->stObiskPremDoma = 0;
     $this->stObiskPremKopr = 0;
     $this->stObiskPonPrem = 0;
     $this->stObiskPonPremDoma = 0;
     $this->stObiskPonPremGost = 0;
     $this->stObiskPonPremZamejo = 0;
     $this->stObiskPonPremZamejoKopr = 0;
     $this->stObiskPonPremGostKopr = 0;
     $this->stObiskPonPrejZamejoKopr = 0;
     $this->stObiskPonPrejGostKopr = 0;
     $this->stObiskPonPremKopr = 0;
     $this->stObiskPonPremKoprInt = 0;
     $this->stObiskPonPrejKopr = 0;
     $this->stObiskPonPrejKoprInt = 0;
     $this->stObiskPonPremInt = 0;
     $this->stHonorarnihZun = 0;
     $this->stHonorarnihZunIgr = 0;
     $this->stHonorarnihZunIgrTujJZ = 0;
     $this->stHonorarnihZunSamoz = 0;
     $this->sredstvaAvt = 0;
     $this->sredstvaAvtSamoz = 0;
     $this->sredstvaInt = 0;
     $this->stKoprodukcij = 0;
     $this->stKoprodukcijInt = 0;
     $this->stKoprodukcijNVO = 0;
     $this->sredstvaZaprosenoPrem = 0;
     $this->sredstvaZaprosenoPonPrem = 0;
     $this->sredstvaZaprosenoPonPrej = 0;
     $this->sredstvaZaprosenoGostujo = 0;
     $this->sredstvaZaprosenoInt = 0;
     $this->sredstvaZaprosenoFest = 0;
     $this->sredstvaZaprosenoRazno = 0;
     $this->sredstvaZaprosenoIzjem = 0;
     $this->sredstvaDrugiJavniPrem = 0;
     $this->sredstvaDrugiJavniPonPrem = 0;
     $this->sredstvaDrugiJavniPonPrej = 0;
     $this->sredstvaDrugiJavniGostujo = 0;
     $this->sredstvaDrugiJavniInt = 0;
     $this->sredstvaDrugiJavniFest = 0;
     $this->sredstvaDrugiJavniRazno = 0;
     $this->sredstvaDrugiJavniIzjem = 0;
     $this->sredstvaDrugiViriPrem = 0;
     $this->sredstvaDrugiViriPonPrem = 0;
     $this->sredstvaDrugiViriPonPrej = 0;
     $this->sredstvaDrugiViriGostujo = 0;
     $this->sredstvaDrugiViriInt = 0;
     $this->sredstvaDrugiViriFest = 0;
     $this->sredstvaDrugiViriRazno = 0;
     $this->sredstvaDrugiViriIzjem = 0;
     $this->sredstvaVlozekGostiteljaPrem = 0;
     $this->sredstvaVlozekGostiteljaPonPrem = 0;
     $this->sredstvaVlozekGostiteljaPonPrej = 0;
     $this->sredstvaVlozekGostiteljaGostujo = 0;
     $this->sredstvaVlozekGostiteljaInt = 0;
     $this->sredstvaVlozekGostiteljaFest = 0;
     $this->sredstvaVlozekGostiteljaRazno = 0;
     $this->sredstvaVlozekGostiteljaIzjem = 0;
     $this->sredstvaLastnaPrem = 0;
     $this->sredstvaLastnaPonPrem = 0;
     $this->sredstvaLastnaPonPrej = 0;
     $this->sredstvaLastnaGostujo = 0;
     $this->sredstvaLastnaInt = 0;
     $this->sredstvaLastnaFest = 0;
     $this->sredstvaLastnaRazno = 0;
     $this->sredstvaLastnaIzjem = 0;
     /**
      * init za izračun  zasedenosti igralcev
      * 
      */
     $stNastopovZaposIgralcev = 0;
     /**
      * init za izračun povprečne zasedenosti dvoran
      */
     $obiskDomaUpriz = 0;
     $maxKapaciteta = 0;
     $this->stPremier = $this->getPremiere()->count();
     $this->stPonPrem = $this->getPonovitvePremiere()->count();
     $this->stPonPrej = $this->getPonovitvePrejsnjih()->count();
     $this->stGostujo = $this->getGostujoci()->count();
     $this->stInt = $this->getGostovanja()->count();
     $this->stFest = $this->getProgramiFestival()->count();
     $this->stRazno = $this->getProgramiRazno()->count();
     $this->stIzjem = $this->getIzjemni()->count();
     /**
      * premiere
      */
     foreach ($this->getPremiere() as $numObject => $object) {
         if ($smer == Consts::DOWN) {
             $object->preracunaj(Consts::DOWN);
         }
         $this->vrPS1 += $object->getNasDelez();
         $this->vrPS1Do += $object->getNasDelez();
         $this->stVsehPredstav = $object->getPonoviDoma() + $object->getPonoviKopr();
         $this->stIzvNekomerc += $object->getPonoviDoma();
         $this->stIzvPrem += $object->getPonoviDoma();
         $this->stIzvPremDoma += $object->getPonoviDoma();
         $this->stIzvPremKopr += $object->getPonoviKopr();
         $this->stObiskNekom += $object->getObiskDoma();
         $this->stObiskNekomMat += $object->getObiskDoma();
         $this->stObiskPrem += $object->getObiskDoma();
         $this->stObiskPremDoma += $object->getObiskDoma();
         $this->stObiskPremKopr += $object->getObiskKopr();
         $this->stHonorarnihZun += $object->getStHonorarnihZun();
         $this->stHonorarnihZunIgr += $object->getStHonorarnihZunIgr();
         $this->stHonorarnihZunIgrTujJZ += $object->getStHonorarnihZunIgrTujJZ();
         $this->stHonorarnihZunSamoz += $object->getStHonorarnihZunSamoz();
         $this->sredstvaZaprosenoPrem += $object->getZaproseno();
         $this->sredstvaDrugiJavniPrem += $object->getDrugiJavni();
         $this->sredstvaDrugiViriPrem += $this->sestejDrugeVire($object);
         $this->sredstvaVlozekGostiteljaPrem += $object->getVlozekGostitelja();
         $this->sredstvaLastnaPrem += $object->getLastnaSredstva();
         $this->sredstvaAvt += $object->getAvtorskiHonorarji();
         $this->sredstvaAvtSamoz += $object->getAvtorskiHonorarjiSamoz();
         $this->prerStKopr($object);
         $obiskDomaUpriz += $object->getObiskDoma();
         $this->expect($object->getUprizoritev(), "Uprizoritev je obvezen podatek", 1000790);
         if (!$object->getPriKoproducentu()) {
             $this->expect($object->getUprizoritev()->getMaticniOder(), "Matični oder je obvezen podatek", 1000791);
             if ($object->getUprizoritev()->getMaticniOder()) {
                 $maxKapaciteta += $object->getUprizoritev()->getMaticniOder()->getKapaciteta() * $object->getPonoviDoma();
             }
         }
         $this->pristejKStNastopovZaposIgr($object, $stNastopovZaposIgralcev);
         switch ($object->getTipProgramskeEnote()->getSifra()) {
             case "01":
                 $this->stPremierVelikih += 1;
                 // Velike predstave
                 break;
             case "02":
                 $this->stPremierMalih += 1;
                 break;
             case "03":
                 $this->stPremierMalihKopr += 1;
                 break;
             case "04":
                 $this->stPremierSredKopr += 1;
                 break;
             case "05":
                 $this->stPremierVelikihKopr += 1;
                 break;
             default:
                 $this->expect(FALSE, "Premiera ima napačen tip programske enote:" . $object->getTipProgramskeEnote()->getSifra(), 1000491);
         }
     }
     /**
      * ponovitve premier
      */
     foreach ($this->getPonovitvePremiere() as $numObject => $object) {
         if ($smer == Consts::DOWN) {
             $object->preracunaj(Consts::DOWN);
         }
         $this->vrPS1 += $object->getNasDelez();
         $this->vrPS1Mat += $object->getCelotnaVrednostMat();
         $this->vrPS1GostovSZ += $object->getCelotnaVrednostGostovSZ();
         $this->stIzvNekomerc += $object->getPonoviDoma() + $object->getPonoviZamejo() + $object->getPonoviGost();
         //$$ ali prištevvamo tudi mednarodne?
         $this->stIzvPonPrem += $object->getPonoviDoma() + $object->getPonoviZamejo() + $object->getPonoviGost();
         //$$ ali prištevvamo tudi mednarodne?
         $this->stIzvPonPremDoma += $object->getPonoviDoma();
         $this->stIzvPonPremZamejo += $object->getPonoviZamejo();
         $this->stIzvPonPremKoprZamejo += $object->getPonoviKoprZamejo();
         $this->stIzvPonPremGost += $object->getPonoviGost();
         $this->stIzvPonPremKoprGost += $object->getPonoviKoprGost();
         $this->stIzvPonPremKopr += $object->getPonoviKopr();
         $this->stIzvGostovanjSlo += $object->getPonoviGost();
         $this->stIzvGostovanjZam += $object->getPonoviZamejo();
         $this->stObiskNekom += $object->getObiskDoma() + $object->getObiskGost() + $object->getObiskZamejo();
         $this->stObiskNekomMat += $object->getObiskDoma();
         $this->stObiskNekomGostSlo += $object->getObiskGost();
         $this->stObiskNekomGostZam += $object->getObiskZamejo();
         $this->stObiskPonPrem += $object->getObiskDoma() + $object->getObiskGost() + $object->getObiskZamejo();
         $this->stObiskPonPremDoma += $object->getObiskDoma();
         $this->stObiskPonPremKopr += $object->getObiskKopr();
         $this->stObiskPonPremGost += $object->getObiskGost();
         $this->stObiskPonPremZamejo += $object->getObiskZamejo();
         $this->stObiskPonPremGostKopr += $object->getObiskKoprGost();
         $this->stObiskPonPremZamejoKopr += $object->getObiskKoprZamejo();
         $this->sredstvaAvt += $object->getAvtorskiHonorarji();
         $this->sredstvaAvtSamoz += $object->getAvtorskiHonorarjiSamoz();
         $this->sredstvaZaprosenoPonPrem += $object->getZaproseno();
         $this->sredstvaDrugiJavniPonPrem += $object->getDrugiJavni();
         $this->sredstvaDrugiViriPonPrem += $this->sestejDrugeVire($object);
         $this->sredstvaVlozekGostiteljaPonPrem += $object->getVlozekGostitelja();
         $this->sredstvaLastnaPonPrem += $object->getLastnaSredstva();
         $this->prerStKopr($object);
         $obiskDomaUpriz += $object->getObiskDoma();
         $this->expect($object->getUprizoritev(), "Uprizoritev je obvezen podatek", 1000792);
         $this->expect($object->getUprizoritev()->getMaticniOder(), "Matični oder je obvezen podatek", 1000793);
         if ($object->getUprizoritev()->getMaticniOder()) {
             $maxKapaciteta += $object->getUprizoritev()->getMaticniOder()->getKapaciteta() * $object->getPonoviDoma();
         }
         $this->pristejKStNastopovZaposIgr($object, $stNastopovZaposIgralcev);
     }
     /**
      * ponovitve prejšnjih sezon
      */
     foreach ($this->getPonovitvePrejsnjih() as $numObject => $object) {
         if ($smer == Consts::DOWN) {
             $object->preracunaj(Consts::DOWN);
         }
         $this->vrPS1 += $object->getNasDelez();
         //$$ tu še preveriti ali celotna vrednost ali le delež matičnega koproducenta
         $this->vrPS1Mat += $object->getCelotnaVrednostMat();
         $this->vrPS1GostovSZ += $object->getCelotnaVrednostGostovSZ();
         $this->stIzvNekomerc += $object->getPonoviDoma() + $object->getPonoviZamejo() + $object->getPonoviGost();
         //$$ ali prištevvamo tudi mednarodne?
         $this->stIzvPonPrej += $object->getPonoviDoma() + $object->getPonoviZamejo() + $object->getPonoviGost();
         //$$ ali prištevvamo tudi mednarodne?
         $this->stIzvPonPrejDoma += $object->getPonoviDoma();
         $this->stIzvPonPrejZamejo += $object->getPonoviZamejo();
         $this->stIzvPonPrejKoprZamejo += $object->getPonoviKoprZamejo();
         $this->stIzvPonPrejGost += $object->getPonoviGost();
         $this->stIzvPonPrejKoprGost += $object->getPonoviKoprGost();
         $this->stIzvPonPrejKopr += $object->getPonoviKopr();
         $this->stIzvGostovanjSlo += $object->getPonoviGost();
         $this->stIzvGostovanjZam += $object->getPonoviZamejo();
         $this->stObiskNekom += $object->getObiskDoma() + $object->getObiskGost() + $object->getObiskZamejo();
         $this->stObiskNekomMat += $object->getObiskDoma();
         $this->stObiskNekomGostSlo += $object->getObiskGost();
         $this->stObiskNekomGostZam += $object->getObiskZamejo();
         $this->stObiskPonPrejKopr += $object->getObiskKopr();
         $this->stObiskPonPrejGostKopr += $object->getObiskKoprGost();
         $this->stObiskPonPrejZamejoKopr += $object->getObiskKoprZamejo();
         $this->stHonorarnihZun += $object->getStHonorarnihZun();
         $this->stHonorarnihZunIgr += $object->getStHonorarnihZunIgr();
         $this->stHonorarnihZunIgrTujJZ += $object->getStHonorarnihZunIgrTujJZ();
         $this->stHonorarnihZunSamoz += $object->getStHonorarnihZunSamoz();
         $this->sredstvaAvt += $object->getAvtorskiHonorarji();
         $this->sredstvaAvtSamoz += $object->getAvtorskiHonorarjiSamoz();
         switch ($object->getTipProgramskeEnote()->getSifra()) {
             case "01":
                 $this->stPonPrejVelikih += 1;
                 // Velike predstave
                 break;
             case "02":
                 $this->stPonPrejMalih += 1;
                 break;
             case "03":
                 $this->stPonPrejMalihKopr += 1;
                 break;
             case "04":
                 $this->stPonPrejSredKopr += 1;
                 break;
             case "05":
                 $this->stPonPrejVelikihKopr += 1;
                 break;
             default:
                 $this->expect(FALSE, "Ponovitev prejšnjih ima napačen tip programske enote:" . $object->getTipProgramskeEnote()->getSifra(), 1000490);
         }
         $this->sredstvaZaprosenoPonPrej += $object->getZaproseno();
         $this->sredstvaDrugiJavniPonPrej += $object->getDrugiJavni();
         $this->sredstvaDrugiViriPonPrej += $this->sestejDrugeVire($object);
         $this->sredstvaVlozekGostiteljaPonPrej += $object->getVlozekGostitelja();
         $this->sredstvaLastnaPonPrej += $object->getLastnaSredstva();
         $this->prerStKopr($object);
         $obiskDomaUpriz += $object->getObiskDoma();
         $this->expect($object->getUprizoritev(), "Uprizoritev je obvezen podatek", 1000794);
         $this->expect($object->getUprizoritev()->getMaticniOder(), "Matični oder je obvezen podatek", 1000795);
         if ($object->getUprizoritev()->getMaticniOder()) {
             $maxKapaciteta += $object->getUprizoritev()->getMaticniOder()->getKapaciteta() * $object->getPonoviDoma();
         }
         $this->pristejKStNastopovZaposIgr($object, $stNastopovZaposIgralcev);
     }
     /**
      * gostujoče predstave
      */
     foreach ($this->getGostujoci() as $numObject => $object) {
         if ($smer == Consts::DOWN) {
             $object->preracunaj(Consts::DOWN);
         }
         $this->stIzvNekomerc += $object->getPonoviDoma();
         $this->stIzvGostuj += $object->getPonoviDoma();
         $this->stObiskNekom += $object->getObiskDoma();
         $this->stObiskNekomMat += $object->getObiskDoma();
         $this->sredstvaZaprosenoGostujo += $object->getZaproseno();
         $this->sredstvaDrugiJavniGostujo += $object->getDrugiJavni();
         $this->sredstvaDrugiViriGostujo += $this->sestejDrugeVire($object);
         $this->sredstvaVlozekGostiteljaGostujo += $object->getVlozekGostitelja();
         $this->sredstvaLastnaGostujo += $object->getLastnaSredstva();
         $this->prerStKopr($object);
         $obiskDomaUpriz += $object->getObiskDoma();
         $this->expect($object->getUprizoritev(), "Uprizoritev je obvezen podatek", 1000796);
         $this->expect($object->getUprizoritev()->getMaticniOder(), "Matični oder je obvezen podatek", 1000797);
         if ($object->getUprizoritev()->getMaticniOder()) {
             $maxKapaciteta += $object->getUprizoritev()->getMaticniOder()->getKapaciteta() * $object->getPonoviDoma();
         }
         $this->pristejKStNastopovZaposIgr($object, $stNastopovZaposIgralcev);
     }
     /**
      * mednarodna gostovanja
      */
     foreach ($this->getGostovanja() as $numObject => $object) {
         if ($smer == Consts::DOWN) {
             $object->preracunaj(Consts::DOWN);
         }
         $this->stIzvNekomerc += $object->getPonoviInt();
         $this->stIzvGostovanjInt += $object->getPonoviInt();
         $this->stObiskNekom += $object->getObiskInt();
         $this->stObiskNekomGostInt += $object->getObiskInt();
         $this->sredstvaAvt += $object->getAvtorskiHonorarji();
         $this->sredstvaAvtSamoz += $object->getAvtorskiHonorarjiSamoz();
         // $$ glede na to, ali je mednarodno gostovanje za premiero, ki bo letos, ali iz prejšnjih sezon
         $idUpr = $object->getUprizoritev();
         $obstajaPremiera = false;
         //init
         if (!empty($idUpr)) {
             $obstajaPremiera = $this->getPremiere()->exists(function ($key, $premiera) use(&$idUpr) {
                 return $premiera->getUprizoritev() == $idUpr;
                 //vrne true, če obstaja premiera z isto uprizoritvijo
             });
         }
         if ($obstajaPremiera) {
             $this->stIzvPonPrem += $object->getPonoviInt();
             $this->stIzvPonPremInt += $object->getPonoviInt();
             $this->stIzvPonPremKoprInt += $object->getPonoviKoprInt();
             $this->stObiskPonPrem += $object->getObiskInt();
             $this->stObiskPonPremInt += $object->getObiskInt();
             $this->stObiskPonPremKoprInt += $object->getObiskKoprInt();
         } else {
             // če uprizoritev ni iz  (letošnje) premiere je najverjetneje  iz ponovitve premiere prejšnjih sezon
             $this->stIzvPonPrej += $object->getPonoviInt();
             $this->stIzvPonPrejInt += $object->getPonoviInt();
             $this->stIzvPonPrejKoprInt += $object->getPonoviKoprInt();
             $this->stObiskPonPrejKoprInt += $object->getObiskKoprInt();
         }
         $this->sredstvaZaprosenoInt += $object->getZaproseno();
         $this->sredstvaDrugiJavniInt += $object->getDrugiJavni();
         $this->sredstvaDrugiViriInt += $this->sestejDrugeVire($object);
         $this->sredstvaVlozekGostiteljaInt += $object->getVlozekGostitelja();
         $this->sredstvaLastnaInt += $object->getLastnaSredstva();
         $this->prerStKopr($object);
         $this->pristejKStNastopovZaposIgr($object, $stNastopovZaposIgralcev);
     }
     /**
      * festivali
      */
     foreach ($this->getProgramiFestival() as $numObject => $object) {
         if ($smer == Consts::DOWN) {
             $object->preracunaj(Consts::DOWN);
         }
         /**
          *  1 festival ena prireditev + ostale prireditve festivala 
          */
         $this->stIzvNekomerc += 1 + $object->getStPredstav() + $object->getStPredstavitev() + $object->getStDelavnic() + $object->getStOkroglihMiz() + $object->getStDrugiDogodki() + $object->getStProdukcij();
         /**
          *  1 festival ena prireditev + ostale prireditve festivala $$ tu zaenkrat ne upošteva deleža koproducentov
          */
         $this->stIzvOstalihNek += 1 + $object->getStPredstav() + $object->getStPredstavitev() + $object->getStDelavnic() + $object->getStOkroglihMiz() + $object->getStDrugiDogodki() + $object->getStProdukcij();
         $this->stObiskNekom += $object->getObiskDoma();
         $this->stObiskNekomMat += $object->getObiskDoma();
         $this->stHonorarnihZun += $object->getStHonorarnihZun();
         $this->sredstvaZaprosenoFest += $object->getZaproseno();
         $this->sredstvaDrugiJavniFest += $object->getDrugiJavni();
         $this->sredstvaDrugiViriFest += $this->sestejDrugeVire($object);
         $this->sredstvaVlozekGostiteljaFest += $object->getVlozekGostitelja();
         $this->sredstvaLastnaFest += $object->getLastnaSredstva();
         $this->prerStKopr($object);
     }
     /**
      * razno
      */
     foreach ($this->getProgramiRazno() as $numObject => $object) {
         if ($smer == Consts::DOWN) {
             $object->preracunaj(Consts::DOWN);
         }
         $this->stIzvNekomerc += $object->getStDogodkov();
         $this->stIzvOstalihNek += $object->getStDogodkov();
         $this->stObiskNekom += $object->getObiskDoma();
         $this->stObiskNekomMat += $object->getObiskDoma();
         $this->stHonorarnihZun += $object->getStHonorarnihZun();
         $this->sredstvaZaprosenoRazno += $object->getZaproseno();
         $this->sredstvaDrugiJavniRazno += $object->getDrugiJavni();
         $this->sredstvaDrugiViriRazno += $this->sestejDrugeVire($object);
         $this->sredstvaVlozekGostiteljaRazno += $object->getVlozekGostitelja();
         $this->sredstvaLastnaRazno += $object->getLastnaSredstva();
         $this->prerStKopr($object);
     }
     /**
      * izjemni dogodki
      */
     foreach ($this->getIzjemni() as $numObject => $object) {
         if ($smer == Consts::DOWN) {
             $object->preracunaj(Consts::DOWN);
         }
         $this->stIzvNekomerc += $object->getPonoviDoma() + $object->getPonoviZamejo() + $object->getPonoviGost() + $object->getPonoviInt();
         $this->stIzvOstalihNek += $object->getPonoviDoma() + $object->getPonoviZamejo() + $object->getPonoviGost() + $object->getPonoviInt();
         $this->stObiskNekom += $object->getObiskDoma() + $object->getObiskGost() + $object->getObiskZamejo() + $object->getObiskInt();
         $this->stObiskNekomMat += $object->getObiskDoma();
         $this->stObiskNekomGostSlo += $object->getObiskGost();
         $this->stObiskNekomGostZam += $object->getObiskZamejo();
         $this->stObiskNekomGostInt += $object->getObiskInt();
         $this->sredstvaAvt += $object->getAvtorskiHonorarji();
         $this->sredstvaAvtSamoz += $object->getAvtorskiHonorarjiSamoz();
         $this->sredstvaZaprosenoIzjem += $object->getZaproseno();
         $this->sredstvaDrugiJavniIzjem += $object->getDrugiJavni();
         $this->sredstvaDrugiViriIzjem += $this->sestejDrugeVire($object);
         $this->sredstvaVlozekGostiteljaIzjem += $object->getVlozekGostitelja();
         $this->sredstvaLastnaIzjem += $object->getLastnaSredstva();
         $this->prerStKopr($object);
     }
     if ($this->stIzvNekomerc > 0) {
         $this->avgObiskPrired = Functions::numberRound($this->stObiskNekom / $this->stIzvNekomerc);
     } else {
         $this->avgObiskPrired = 0;
     }
     $this->avgZasedDvoran = $maxKapaciteta > 0 ? $obiskDomaUpriz / $maxKapaciteta * 100 : 0;
     //$$ to je v primeru, če kapacitete prostorov niso vnešene
     $this->avgStNastopovIgr = $this->stZaposIgralcev > 0 ? $stNastopovZaposIgralcev / $this->stZaposIgralcev : 0;
 }
Example #11
0
 public function validate($mode = 'update')
 {
     $this->validateEuroGE0($this->celotnaVrednost, "Celotna vrednost", 1000622);
     $this->validateEuroGE0($this->nasDelez, "Naš delež", 1000623);
     $this->validateEuroGE0($this->celotnaVrednostMat, "Celotna vrednost na matičnem odru", 1000624);
     $this->validateEuroGE0($this->celotnaVrednostGostovSZ, "Celotna vrednost gostovanj v Slo in zamejstvu", 1000625);
     $this->validateEuroGE0($this->zaproseno, "Zaprošeno", 1000626);
     //        $this->validateEuroGE0($this->lastnaSredstva, "Lastna sredstva", 1000627);
     $this->validateEuroGE0($this->avtorskiHonorarji, "Avtorski honorarji", 1000628);
     $this->validateEuroGE0($this->avtorskiHonorarjiSamoz, "Avtorski honorarji samozaposlenih", 1000629);
     $this->validateEuroGE0($this->tantieme, "Tantieme", 1000680);
     $this->validateEuroGE0($this->avtorskePravice, "Avtorske pravice", 1000681);
     $this->validateEuroGE0($this->vlozekGostitelja, "Vložek gostitelja", 1000682);
     $this->validateEuroGE0($this->drugiJavni, "Drugi javni", 1000683);
     $this->validateIntGE0($this->stZaposlenih, "", 1000684);
     $this->validateIntGE0($this->stZaposUmet, "", 1000685);
     $this->validateIntGE0($this->stZaposDrug, "", 1000686);
     $this->validateIntGE0($this->stHonorarnihZun, "", 1000687);
     $this->validateIntGE0($this->stHonorarnihZunIgr, "", 1000688);
     $this->validateIntGE0($this->stHonorarnihZunIgrTujJZ, "", 1000689);
     $this->validateIntGE0($this->stHonorarnihZunSamoz, "", 1000690);
     $this->validateIntGE0($this->obiskDoma, "", 1000691);
     $this->validateIntGE0($this->obiskKopr, "", 1001201);
     $this->validateIntGE0($this->obiskGost, "", 1000692);
     $this->validateIntGE0($this->obiskZamejo, "", 1000693);
     $this->validateIntGE0($this->obiskInt, "", 1000694);
     $this->validateIntGE0($this->ponoviDoma, "", 1000695);
     $this->validateNumberGE0($this->ponoviZamejo, "", 1000696);
     $this->validateNumberGE0($this->ponoviKoprZamejo, "", 1001205);
     $this->validateNumberGE0($this->ponoviGost, "", 1000697);
     $this->validateNumberGE0($this->ponoviKoprGost, "", 1001206);
     $this->validateIntGE0($this->ponoviInt, "", 1000698);
     $this->validateIntGE0($this->ponoviKopr, "", 1001202);
     $this->validateIntGE0($this->sort, "", 1000699);
     $this->validateEuroGE0($this->materialni, "Materialni", 1001200);
     /**
      * pred primerjanjem damo števila s plavajočo vejico v string
      */
     $nd = \Max\Functions::euroRoundS($this->getNasDelez());
     $cv = \Max\Functions::euroRoundS($this->getCelotnaVrednost());
     $cvSZ = \Max\Functions::euroRoundS($this->celotnaVrednostGostovSZ);
     $this->expect($nd <= $cv, "Delež matičnega JZ (" . $nd . ") ne sme biti večji od celotne vrednosti (" . $cv . ")", 1000621);
     $this->expect($cvSZ <= $cv, "Celotna vrednost gostovanj v Slo in zam. (" . $cvSZ . ") ne sme biti večja od celotne vrednosti (" . $cv . ")", 1000622);
     $ah = \Max\Functions::euroRoundS($this->getAvtorskiHonorarji());
     $ahs = \Max\Functions::euroRoundS($this->getAvtorskiHonorarjiSamoz());
     $this->expect($ahs <= $ah, "Avtorski honorarji samozaposlenih (" . $ahs . ") ne smejo biti večji od avtorskih honorarjev (" . $ah . ")", 1001204);
     /**
      * za tiste ep, ki imajo uprizoritev je lahko obisk doma lahko največ število ponovitev doma * kapaciteta matičnega odra
      */
     if ($this->uprizoritev) {
         $this->expect($this->obiskDoma <= $this->ponoviDoma * $this->uprizoritev->getMaticniOder()->getKapaciteta(), "Obisk doma ne sme biti večji kot št. ponovitev doma * kapaciteta matičnega odra (" . $this->uprizoritev->getMaticniOder()->getKapaciteta() . ")", 1001203);
     }
 }
Example #12
0
 public function validate($mode = 'update')
 {
     $this->validateIntGE0($this->stPE, "Št. PE", 1000555);
     $this->expect(!$this->getTipProgramskeEnote(), "Tip programske enote obstaja, a ne sme obstajati za program razno", 1000551);
     $this->expect(!$this->getUprizoritev(), "Uprizoritev obstaja, a ne sme obstajati za program razno", 1000552);
     $this->expect($this->naziv, "Nima naziva. Naziv je obvezen podatek", 1000553);
     $zaproseno = \Max\Functions::euroRoundS($this->zaproseno);
     $maxZaproseno = \Max\Functions::euroRoundS(0.7 * $this->nasDelez);
     // glede na procent upravičenih stroškov
     $this->expect($zaproseno <= $maxZaproseno, "Zaprošeno (" . $zaproseno . ") je lahko največ 70% deleža mat. JZ(" . $maxZaproseno . ")", 1000554);
     parent::validate();
 }
Example #13
0
 /**
  * Razmnoži dogodek
  * 
  * novi dogodki so v obdobju začetek obdobja - konec obdobja (oz. število ponovitev), 
  * upoštevajoč flage za praznik, soboto in nedelj  
  * in tedenske termine, če ni števila ponovitev
  * 
  * @param uuid $dogodekId                   dogodek, ki ga kopiramo 
  * @param string $zacetekObdobja            začetek obdobja, kjer naj bodo kopirani dogodki v ISO obliki
  * @param string $konecObdobja              začetek obdobja, kjer naj bodo kopirani dogodki
  * @param boolean $upostevajPraznike        če true, potem novi dogodki ne bodo na praznik
  * @param boolean $upostevajSobote          če true, potem novi dogodki ne bodo v soboto
  * @param boolean $upostevajNedelje         če true, potem novi dogodki ne bodo v nedeljo
  *                                          [ h => ura, m=> minuta]
  * @param integer $steviloPonovitev         če polje obstaja, se kreira toliko novih dogodkov
  *                                        
  *                                          spodnji parametri se upoštevajo le, če ni števila ponovitev: 
  * @param array $dopoldanOd                 čas začetka dopoldanskega termina v obliki
  *                                          [ h => ura, m=> minuta]
  * @param array $popoldanOd                 čas začetka popoldanskega termina v obliki
  *                                          [ h => ura, m=> minuta]
  * @param array $zvecerOd                   čas začetka večernega termina v obliki
  *                                          [ h => ura, m=> minuta]
  * @param array $tedenskiTermini            če polje obstaja, se dogodki kreirajo v sklopu teh omejitev
  *                                          oblika: [ [dan_v_tednu], [termin,...]] pri čemer je:
  *                                              dan_v_tednu  1-ponedeljek .. 7 - nedelja
  *                                              termin  DOP-dopoldan, POP-popoldan, ZVE-zvečer
  * 
  * @return array                            id-ji kreiranih dogodkov
  * @throws \Max\Exception\UnauthException
  */
 public function razmnozi($dogodekId, $zacetekObdobja = null, $konecObdobja = null, $upostevajPraznike = false, $upostevajSobote = false, $upostevajNedelje = false, $dopoldanOd = null, $popoldanOd = null, $zvecerOd = null, $steviloPonovitev = null, $tedenskiTermini = null)
 {
     /*
      *  preverjanje avtorizacije
      */
     $this->expectPermission("Dogodek-write");
     $this->expectPermission("TerminStoritve-write");
     $this->expectPermission("Option-read");
     $this->expectPermission("OptionValue-read");
     $this->expectPermission("Praznik-read");
     $em = $this->serviceLocator->get("\\Doctrine\\ORM\\EntityManager");
     /*
      * preverjanje parametrov
      */
     $dogodek = $em->getRepository("Koledar\\Entity\\Dogodek")->findOneById($dogodekId);
     if (!$dogodek) {
         throw new \Max\Exception\UnauthException($this->translate('Ni dogodka'), 1001249);
     }
     if (!empty($zacetekObdobja)) {
         $this->expectIsoDate($zacetekObdobja, $this->translate('Začetek obdobja (' . $zacetekObdobja . ') ni datum v ISO8601 obliki'), 1001250);
     } else {
         /*
          * takoj naslednji dan zjutraj
          */
         $zacetekObdobja = clone $dogodek->getKonec();
         $zacetekObdobja->modify("+1 day");
         $zacetekObdobja->setTime(0, 0);
     }
     $zacetekObdobjaD = Functions::stringToDateTime($zacetekObdobja);
     if (!empty($steviloPonovitev)) {
         $this->expect(is_integer($steviloPonovitev), 'Število ponovitev ' . $steviloPonovitev . 'mora biti integer', 1001251);
         $this->expect($steviloPonovitev > 0, 'Število ponovitev (' . $steviloPonovitev . ') mora biti pozitivno število', 1001254);
         $strategijaPoStevilu = TRUE;
     } else {
         $strategijaPoStevilu = false;
         // strategija po tedenskih terminih
     }
     if (!empty($konecObdobja)) {
         $this->expectIsoDate($konecObdobja, $this->translate('Konec obdobja(' . $konecObdobja . ') ni datum v ISO8601 obliki'), 1001252);
         $konecObdobjaD = Functions::stringToDateTime($konecObdobja);
         $this->expect($zacetekObdobjaD < $konecObdobjaD, 'Konec obdobja(' . $konecObdobja . 'mora biti po začetku', 1001253);
     } else {
         $konecObdobjaD = null;
     }
     $this->expect(!empty($konecObdobja) || $strategijaPoStevilu, "Prisoten mora biti parameter ali konec obdobja ali število ponovitev", 1001255);
     if (!$strategijaPoStevilu) {
         /*
          *  strategija kopiranja po tedenskih terminih
          */
         $this->expect(!empty($zacetekObdobja) && !empty($konecObdobja) && !empty($tedenskiTermini), 'V kolikor ni parametra steviloPonovitev, so parametri ' . 'zacetekObdobja,konecObdobja in tedenskiTermini obvezni', 1001263);
         array_walk_recursive($tedenskiTermini, function ($val, $key) {
             $this->expect(in_array($val, [self::DOPOLDAN, self::POPOLDAN, self::ZVECER]), "Dovoljene vrednosti za tedenskiTermini so le" . self::DOPOLDAN . "," . self::POPOLDAN . "," . self::ZVECER, 1001264);
         });
         array_walk($tedenskiTermini, function ($val, $key) {
             $this->expect(is_integer($key) && $key >= 0 && $key <= 7, "Dovoljeno ključi za tedenskiTermini so med 1 in 7", 1001266);
             $this->expect(is_array($val), "Vrednosti morajo biti v array-u", 1001267);
         });
         /*
          * napolni $tedenskiTerminiBA (boolean array) iz parametra $tedenskiTermini ,
          * tako da imamo v polju termine posortirane naraščujoče
          */
         for ($dow = 1; $dow <= 7; $dow++) {
             // dan v tednu
             for ($dpz = 1; $dpz <= 3; $dpz++) {
                 // dopoldan, popoldan , zvečer
                 $tedenskiTerminiBA[$dow][$dpz] = false;
                 //init
             }
         }
         foreach ($tedenskiTermini as $dow => $dpzA) {
             foreach ($dpzA as $dpz) {
                 switch ($dpz) {
                     case self::DOPOLDAN:
                         $tedenskiTerminiBA[$dow][1] = true;
                         break;
                     case self::POPOLDAN:
                         $tedenskiTerminiBA[$dow][2] = true;
                         break;
                     case self::ZVECER:
                         $tedenskiTerminiBA[$dow][3] = true;
                         break;
                     default:
                         $this->expect(false, "Dovoljene vrednosti za tedenskiTermini so le" . self::DOPOLDAN . ", " . self::POPOLDAN . ", " . self::ZVECER, 1001265);
                         break;
                 }
             }
         }
         $dopoldanOd = $this->preveriOdParameter($dopoldanOd, self::DOPOLDAN);
         $popoldanOd = $this->preveriOdParameter($popoldanOd, self::POPOLDAN);
         $zvecerOd = $this->preveriOdParameter($zvecerOd, self::ZVECER);
         /*
          * dopoldanOd < popoldanOd < zvečerOd
          */
         $this->expect($dopoldanOd['h'] * 60 + $dopoldanOd['m'] < $popoldanOd['h'] * 60 + $popoldanOd['m'] && $popoldanOd['h'] * 60 + $popoldanOd['m'] < $zvecerOd['h'] * 60 + $zvecerOd['m'], "Veljati mora dopoldanOd < popoldanOd < zvecerOd", 1001268);
     }
     /*
      * izvedba kopiranj
      */
     $stNovih = 0;
     $noviIds = [];
     if ($strategijaPoStevilu) {
         $zacetekNaslednjega = clone $zacetekObdobjaD;
         $zacetekNaslednjega->modify('-1 day');
         $zacetekNaslednjega->setTime(intval($dogodek->getZacetek()->format('G')), intval($dogodek->getZacetek()->format('i')));
         /*
          * glede na št. ponovitev
          */
         $konec = FALSE;
         $i = 1;
         while ($i <= $steviloPonovitev && !$konec) {
             /*
              * določi naslednji datum dogodka
              */
             do {
                 $zacetekNaslednjega->modify("+1 day");
                 $ustrezenCas = TRUE;
                 //init
                 $this->preveriZacetekNaslednjega($zacetekNaslednjega, $konecObdobjaD, $upostevajSobote, $upostevajNedelje, $upostevajPraznike, $konec, $ustrezenCas);
             } while (!$ustrezenCas && !$konec);
             if (!$konec) {
                 $this->kopirajEnega($dogodek, $zacetekNaslednjega, $noviIds, $stNovih);
             }
             $i++;
         }
     } else {
         /*
          * kopiranje po tedenskem vzorcu 
          */
         $zacetekNaslednjega = clone $zacetekObdobjaD;
         $zacetekNaslednjega->modify('-1 minute');
         $konec = FALSE;
         while (!$konec) {
             /*
              * določi naslednji datum dogodka
              */
             do {
                 $najdenNoviZacetekKorak2 = false;
                 $konec = false;
                 while (!$konec && !$najdenNoviZacetekKorak2) {
                     /*
                      * najdi naslednji čas glede na dopoldanske, popoldanske in večerne termine
                      */
                     $danNasl = intval($zacetekNaslednjega->format('N'));
                     // dan
                     $uraNasl = intval($zacetekNaslednjega->format('G'));
                     // ura
                     $minNasl = intval($zacetekNaslednjega->format('i'));
                     // min
                     /*
                      * najkasneje do jutrišnjega dopoldanskega termina
                      *  -> $zacetekNaslednjega, $dow, $dpz
                      */
                     $j = 1;
                     $najdenNoviZacetekKorak1 = FALSE;
                     while ($j <= 4 && !$najdenNoviZacetekKorak1) {
                         $jmod = fmod($j - 1, 3) + 1;
                         $hj = $this->hmDopPopZve($jmod, $dopoldanOd, $popoldanOd, $zvecerOd)['h'];
                         $mj = $this->hmDopPopZve($jmod, $dopoldanOd, $popoldanOd, $zvecerOd)['m'];
                         if ($j == 4 || $hj * 60 + $mj > $uraNasl * 60 + $minNasl) {
                             $dpz = $jmod;
                             $dow = $danNasl;
                             if ($j == 4) {
                                 // naslednji dan dopoldan
                                 $dow++;
                                 $zacetekNaslednjega->modify('+1 day');
                             }
                             $dow = fmod($dow - 1, 7) + 1;
                             $zacetekNaslednjega->setTime($hj, $mj);
                             $najdenNoviZacetekKorak1 = true;
                         }
                         $j++;
                     }
                     $this->expect($najdenNoviZacetekKorak1, "Novi začetek v koraku 1 ni najden " . $zacetekNaslednjega->format('d.m.Y H:i O'), 1001261);
                     if (!is_null($konecObdobjaD) && $zacetekNaslednjega > $konecObdobjaD) {
                         /*
                          * $$ zaenkrat še vedno dovoli, da je konec dogodka po koncu obdobja
                          */
                         $konec = true;
                     }
                     if ($tedenskiTerminiBA[$dow][$dpz]) {
                         $najdenNoviZacetekKorak2 = true;
                     }
                 }
                 $ustrezenCas = TRUE;
                 //init
                 if (!$konec) {
                     $this->preveriZacetekNaslednjega($zacetekNaslednjega, $konecObdobjaD, $upostevajSobote, $upostevajNedelje, $upostevajPraznike, $konec, $ustrezenCas);
                 }
             } while (!$ustrezenCas && !$konec);
             if (!$konec) {
                 $this->kopirajEnega($dogodek, $zacetekNaslednjega, $noviIds, $stNovih);
             }
         }
     }
     /*
      * $$ ali kontrole, da se novi dogodki ne prekrivajo med sabo?
      */
     $em->flush();
     return $noviIds;
 }
Example #14
0
 public function preracunaj($smer = false)
 {
     if ($this->placiloNaVajo) {
         $this->vrednostDoPremiere = $this->vrednostVaje * $this->planiranoSteviloVaj;
     } else {
         $this->vrednostDoPremiere = $this->vrednostVaj;
     }
     $this->vrednostDoPremiere = \Max\Functions::euroRound($this->vrednostDoPremiere);
     //Zaokrožimo na 2 decimalki predno shranimo
 }