Ejemplo n.º 1
0
 /**
  * 
  * @param array $input
  * @return string|null
  */
 public function getErrorOrSync($input)
 {
     if (!is_array($input)) {
         return 'Wrong Input';
     }
     //provjera postojanja potrebnih podataka
     //provjera postojanja podataka za instruktora
     if (!isset($input['instruktor_id'])) {
         return 'Djelatnik je obvezan.';
     }
     $instruktor_id = $input['instruktor_id'];
     //kraj provjere postojanja podataka za instruktora
     //provjera postojanja podataka za vrijeme pocetka
     if (!isset($input['datum'])) {
         return 'Datum je obvezan.';
     }
     $datum = $input['datum'];
     if (!isset($input['startHour'])) {
         return 'Sat početka je obvezan.';
     }
     $startHour = $input['startHour'];
     if (!isset($input['startMinute'])) {
         return 'Minuta početka je obvezna.';
     }
     $startMinute = $input['startMinute'];
     $tecaj = false;
     if (isset($input['tecaj'])) {
         $tecaj = $input['tecaj'];
     }
     //kraj provjere postojanja podataka za vrijeme pocetka
     //provjera postojanja podataka za trajanje instrukcija
     if (!isset($input['kolicina'])) {
         return 'Trajanje instrukcija je obvezno.';
     }
     $kolicina = $input['kolicina'];
     if (!isset($input['mjera_id'])) {
         return 'Mjera je obvezna.';
     }
     $mjera_id = $input['mjera_id'];
     if (!isset($input['endHour'])) {
         return 'Sat završetka je obvezan.';
     }
     $endHour = $input['endHour'];
     if (!isset($input['endMinute'])) {
         return 'Minuta završetka je obvezna.';
     }
     $endMinute = $input['endMinute'];
     //kraj provjere postojanja podataka za trajanje instrukcija
     //provjera postojanja podataka za predmet
     if (!isset($input['predmet_id'])) {
         return 'Predmeta je obvezan.';
     }
     $predmet_id = $input['predmet_id'];
     //kraj provjere postojanja podataka za predmet
     //provjera postojanja podataka za polaznike
     //izgradnja niza polaznika
     $polaznici = array();
     for ($i = 1; isset($input['form-klijenti-item-' . $i . '-broj_mobitela']) || isset($input['form-klijenti-item-' . $i . '-ime']); $i++) {
         //trebaju i ime i prezime
         if (!isset($input['form-klijenti-item-' . $i . '-broj_mobitela']) || !isset($input['form-klijenti-item-' . $i . '-ime'])) {
             return 'Niste unijeli sve potrebne podatke za polaznika u ' . $i . '. redu.';
         }
         $ime = $input['form-klijenti-item-' . $i . '-ime'];
         $broj_mobitela = $input['form-klijenti-item-' . $i . '-broj_mobitela'];
         //provjera potpunosti imena i prezimena
         if (empty($ime) || empty($broj_mobitela)) {
             return 'Niste unijeli sve potrebne podatke za polaznika u ' . $i . '. redu.';
         }
         //check if multiple broj_mobetela have the same value
         foreach ($polaznici as $index => $polaznik) {
             if ($polaznik->broj_mobitela == $broj_mobitela) {
                 if ($polaznik->ime == $ime) {
                     return 'Višestruko ste unijeli istog polaznika (' . $ime . ')';
                 } else {
                     return 'Unijeli ste isti broj mobitela za različite polaznike (' . $polaznik->ime . ' i ' . $ime . ').';
                 }
             }
         }
         $polaznik = new Klijent();
         $polaznik->broj_mobitela = $polaznik->getStorableBrojMobitela($broj_mobitela);
         $polaznik->ime = $ime;
         $polaznici[] = $polaznik;
     }
     //kraj izgradnje niza polaznika
     //kraj provjere postojanja podataka za polaznike
     //provjera postojanja podataka za učionicu
     if (!isset($input['ucionica_id'])) {
         return 'Učionica je obvezna.';
     }
     $ucionica_id = $input['ucionica_id'];
     //kraj provjere postojanja podataka za učionicu
     //provjer postojanja napomene
     if (isset($input['napomena'])) {
         $napomena = $input['napomena'];
     } else {
         $napomena = '';
     }
     //kraj provjere postojanja napomene
     //kraj provjere postojanja potrebnih podataka
     //provjera dozvoljenih vrijednosti podataka koji se ne odnose na relacije
     //provjera dozvoljene vrijednosti za vrijeme pocetka
     $dto = (new DateTime($datum))->setTime($startHour, $startMinute);
     if ($dto < new DateTime() && !(Auth::check() && Auth::user()->hasPermission(Permission::PERMISSION_EDIT_STARTED_REZERVACIJA))) {
         return 'Zadani početak rada je prošao. Trebate imati posebnu dozvolu za rezerviranje u prošlosti.';
     }
     $pocetak_rada = $dto->format('Y-m-d H:i:s');
     //kraj provjere dozvoljene vrijednosti za vrijeme pocetka
     //provjera dozvoljene vrijednosti za trajanje
     if ($kolicina < 1) {
         return 'Trajanje instrukcija mora biti barem 1.';
     }
     $dto2 = (new DateTime($datum))->setTime($endHour, $endMinute);
     if ($dto >= $dto2) {
         return "Kraj instrukcija mora biti poslje početka.";
     }
     $kraj_rada = $dto2->format('Y-m-d H:i:s');
     //kraj provjere dozvoljene vrijednosti za trajanje
     //provjera broja polaznika
     if (count($polaznici) < 1) {
         return 'Potreban je barem 1 polaznik.';
     }
     //kraj provjere broja polaznika
     //provjera duljine napomene
     if (strlen($napomena) > 255) {
         return 'Napomena treba biti kraća od 255 znakova. Trenutna ima ' . strlen($napomena) . '.';
     }
     //kraj porvjere duljine napomene
     //kraj provjere dozvoljenih vrijednosti podataka koji se ne odnose na relacije
     //provjera postojanja referenciranih unosa
     $djelatnik = User::find($instruktor_id);
     if (!$djelatnik) {
         return User::NOT_FOUND_MESSAGE;
     }
     $predmet = Predmet::find($predmet_id);
     if (!$predmet) {
         return Predmet::NOT_FOUND_MESSAGE;
     }
     $ucionica = Ucionica::find($ucionica_id);
     if (!$ucionica) {
         return Ucionica::NOT_FOUND_MESSAGE;
     }
     $mjera = Mjera::find($mjera_id);
     if (!$mjera) {
         return Mjera::NOT_FOUND_MESSAGE;
     }
     //provjera usklađenosti polaznika s bazom podataka
     foreach ($polaznici as $key => $polaznik) {
         $model = Klijent::find($polaznik->broj_mobitela);
         if ($model && $model->ime != $polaznik->ime) {
             return 'U sustavu već postoji klijent s brojem mobitela ' . $model->broj_mobitela . '.';
         }
         if (!$model) {
             $polaznik->save();
         }
     }
     //kraj provjere usklađenosti polaznika s bazom podataka
     //kraj provjere postojanja referenciranih unosa
     //ostale provjere relacija
     //provjera završetka instrukcija
     if ($dto2 > $dto->setTime(BaseController::END_HOUR, 0)) {
         return "Kraj radnog vremena je u " . BaseController::END_HOUR . " sata.";
     }
     $dto->setTime($startHour, $startMinute);
     $dto->add(new DateInterval('PT' . $mjera->trajanje * $kolicina . 'M'));
     if ($dto > $dto2) {
         return "Ne stignete odratiti {$kolicina} {$mjera->znacenje} u zadanom vremenu";
     }
     //kraj provjere završetka instrukcija
     //provjera učionice
     //provjera broj učenika
     if ($ucionica->max_broj_ucenika < count($polaznici)) {
         return 'Odabrana učionica nema dovoljnu veličinu.';
     }
     //kraj provjere broj učenika
     //provjera zauzetosti učionice
     $preklapanja = Rezervacija::where('ucionica_id', '=', $ucionica->id)->where('pocetak_rada', '<', $kraj_rada)->where('kraj_rada', '>', $pocetak_rada);
     if ($this->id) {
         $preklapanja = $preklapanja->where('rezervacije.id', '!=', $this->id);
     }
     $preklapanja = $preklapanja->count();
     if ($preklapanja > 0) {
         return 'U zdanome vremenu je odabrana učionica zauzeta.';
     }
     //kraj provjere zauzetosti učionice
     //kraj provjere učionice
     //provjera zauzetosti instruktora
     $preklapanja = Rezervacija::where('instruktor_id', '=', $instruktor_id)->where('pocetak_rada', '<', $kraj_rada)->where('kraj_rada', '>', $pocetak_rada);
     if ($this->id) {
         $preklapanja = $preklapanja->where('rezervacije.id', '!=', $this->id);
     }
     $preklapanja = $preklapanja->count();
     if ($preklapanja > 0) {
         return 'U zadanome vremenu ste već zauzeti. Provjerite raspored.';
     }
     //kraj provjere zauzetosti instruktora
     //Provjera dozvole predavanja zadanog predmeta
     if ($djelatnik->predmeti()->where('predmeti.id', '=', $predmet_id)->count() < 1) {
         return 'Odabrani instruktor nema dozvolu predavati zadani predmet.';
     }
     //Kraj provjere dozvole predavanja zadanog predmeta
     //Provjera dozvole održavanja tečaja
     if ($tecaj && !$djelatnik->hasPermission(Permission::PERMISSION_TECAJ)) {
         return 'Odabrani instruktor nema dozvolu održavati tečajeve.';
     }
     //Kraj provjere dozvole održavanja tečaja
     //kraj ostalih provjera relacija
     //sve provjere su uspješno obavljene
     //prodruživanje zadanih vrijednosti
     $this->instruktor_id = $instruktor_id;
     $this->pocetak_rada = $pocetak_rada;
     $this->kolicina = $kolicina;
     $this->mjera_id = $mjera_id;
     $this->kraj_rada = $kraj_rada;
     $this->predmet_id = $predmet_id;
     $this->ucionica_id = $ucionica_id;
     $this->tecaj = $tecaj;
     $this->napomena = $napomena;
     //kraj pridruživanja
     //pohrana vrijednosti
     $this->save();
     //sinkronizacija klijenata
     $this->klijenti()->sync(array_map(function ($klijent) {
         return $klijent->broj_mobitela;
     }, $polaznici));
     return null;
 }
Ejemplo n.º 2
0
 /**
  * Update the specified resource in storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function update($id)
 {
     if (!Input::has('broj_mobitela')) {
         Session::flash(self::DANGER_MESSAGE_KEY, 'Broj mobitela je obvezan.');
         return Redirect::route('Klijent.edit')->withInput();
     }
     if (!Input::has('ime')) {
         Session::flash(self::DANGER_MESSAGE_KEY, 'Ime i prezuime su obvezni.');
         return Redirect::route('Klijent.edit')->withInput();
     }
     $broj_mobitela = Input::get('broj_mobitela');
     $klijent = Klijent::find($id);
     if (!$klijent) {
         return $this->itemNotFound();
     }
     if ($broj_mobitela != $id) {
         $klijent->broj_mobitela = Klijent::getStorableBrojMobitela($broj_mobitela);
     }
     $klijent->ime = Input::get('ime');
     $klijent->skola = Input::get('skola');
     if (Input::get('razred')) {
         $klijent->razred = Input::get('razred');
     }
     $klijent->facebook = Input::get('facebook');
     $klijent->email = Input::get('email');
     $klijent->roditelj = Input::get('roditelj');
     $klijent->broj_roditelja = Klijent::getStorableBrojMobitela(Input::get('broj_roditelja'));
     $klijent->save();
     if (true) {
         Session::flash(self::SUCCESS_MESSAGE_KEY, 'Klijent uspješno uređen');
         return Redirect::route('Klijent.show', array($klijent->broj_mobitela));
     }
     return Redirect('Klijent.edit')->withInput()->withErrors($klijent->errors());
 }