/** * * @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; }
/** * Store a newly created resource in storage. * * @return Response */ public function store() { if (!Input::has('broj_mobitela')) { Session::flash(self::DANGER_MESSAGE_KEY, 'Broj mobitela je obvezan.'); return Redirect::route('Klijent.create')->withInput(); } if (!Input::has('ime')) { Session::flash(self::DANGER_MESSAGE_KEY, 'Ime i prezuime su obvezni.'); return Redirect::route('Klijent.create')->withInput(); } $broj_mobitela = Input::get('broj_mobitela'); if (Klijent::find($broj_mobitela)) { Session::flash(self::DANGER_MESSAGE_KEY, 'U sustavu već postoji klijent s unešenim brojem.'); return Redirect::route('Klijent.create')->withInput(); } $klijent = new Klijent(); $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 je uspješno dodan.'); return Redirect::route('Klijent.show', $klijent->broj_mobitela); } }