/** * * @param int $kolicina Stvarna kolicina za naplatu * @param int $mjera_id stvarna mjera za naplatu * @return string|void */ public function setStvarneVrijednosti($kolicina, $mjera_id) { if ($kolicina) { if ($kolicina < 1) { return 'Količina ne može biti manja od 1.'; } $this->stvarna_kolicina = $kolicina; } elseif ($this->rezervacija) { $this->stvarna_kolicina = $this->rezervacija->kolicina; } if ($mjera_id) { $mjera = Mjera::find($mjera_id); if (!$mjera) { return Mjera::NOT_FOUND_MESSAGE; } $this->stvarna_mjera = $mjera_id; } elseif ($this->rezervacija) { $this->stvarna_mjera = $this->rezervacija->mjera_id; } }
$required) }}</div> <div class="col-xs-6"> <?php if (isset($rezervacija)) { $value = date('i', strtotime($rezervacija->pocetak_rada)); } else { $value = 0; } ?> {{ Form::select('startMinute', array(0 => '00', 15 => '15', 30 => '30', 45 => '45'), $value, $required) }}</div> </div> </div> <div class = "form-group"> <?php $rows = Mjera::select('id', 'simbol')->get(); $mjere = array(); foreach ($rows as $row) { $mjere[$row->id] = $row->simbol; } ?> {{ Form::label('Trajanje') }} <div class="row"> <div class="col-xs-6"> <?php if (isset($rezervacija)) { $value = $rezervacija->kolicina; } else { $value = 1; } ?>
{{ View::make('Cjenovnik.table')->with('cjenovnik', $cjenovnik)->render() }} </div> @if(Auth::user()->hasPermission(Permission::PERMISSION_REMOVE_CJENOVNIK)) {{ Form::open(array('route' => array('Cjenovnik.destroy', $cjenovnik->id), 'method' => 'delete', 'class' => 'form')) }} @endif @if(Auth::user()->hasPermission(Permission::PERMISSION_MANAGE_CJENOVNIK)) {{ link_to_route('Cjenovnik.edit', 'Uredi', array($cjenovnik->id), array('class' => 'btn btn-default')) }} @endif @if(Auth::user()->hasPermission(Permission::PERMISSION_REMOVE_CJENOVNIK)) {{ Form::submit('Ukloni', array('class' => 'btn btn-warning')) }} {{ Form::close() }} @endif </div> <div class = "col-xs-12"> <h3>Predmeti koji koriste cjenovnik <small>ukupno {{ $cjenovnik->c_m_p->count() }}</small></h3> <table class = "table table-striped"> <tbody> <?php $mjere = Mjera::get()->lists('simbol', 'id'); ?> @foreach($cjenovnik->c_m_p as $predmet) <tr> <td>{{ $predmet->link() }}<td> <td>{{ $mjere[$predmet->pivot->mjera_id] }}</td> </tr> @endforeach </tbody> </table> </div> </div> @endsection
public function run() { DB::table('mjere')->delete(); Mjera::create(array('simbol' => 'PS', 'znacenje' => 'Puni sat', 'trajanje' => 60)); Mjera::create(array('simbol' => 'ŠS', 'znacenje' => 'Školski sat', 'trajanje' => 45)); }
<h2 class="form-heading">Dodavanje predmeta</h2> @endif <div class="form-group"> {{ Form::label('Ime') }} {{ Form::text('ime', null, $required) }} </div> @if(!isset($predmet)) {{ Form::hidden('kategorija_id', $kategorija_id) }} @endif <h3>Cijene</h3> <div id='cijene-list' class="container"> <?php $mjere = Mjera::lists('znacenje', 'id'); $cjenovnici = Cjenovnik::lists('ime', 'id'); ?> @foreach($mjere as $id => $znacenje) <div class="form-group"> <?php $cjenovnik = null; $cjenovnik_id = null; if (isset($predmet)) { $cjenovnik = $predmet->cjenovnik($id); if ($cjenovnik) { $cjenovnik_id = $cjenovnik->id; } } $cjenovnik_id = Input::old("cjenovnik_id_{$id}", $cjenovnik_id); if ($cjenovnik_id) {
public function getErrorOrCijenaSyncArray($input) { $syncArray = array(); //obilazak za svaku mjeru u sustavu foreach (Mjera::all() as $mjera) { //začimanje potrebnih podataka if (isset($input["cjenovnik_id_{$mjera->id}"])) { $cjenovnik_id = $input["cjenovnik_id_{$mjera->id}"]; } else { return 'Niste odabrali cjenovnik za ' . $mjera->znacenje . '.'; } //kraj začimanja potrebnih podataka //provjera vrijednosti podataka $cjenovnik = Cjenovnik::find($cjenovnik_id); if (!$cjenovnik) { return "Zadani cjenovnik za {$mjera->znacenje} nije pronađen u sustavu."; } //kraj provjere vrijednosti podataka //pridruživanje vrijednosti $syncArray[$mjera->id] = array('cjenovnik_id' => $cjenovnik_id); //kraj pridruživanja } //kraj obilaska za svaku mjeru u sustavu return $syncArray; }
public function download() { $name = 'Data'; $formats = array('xls', 'xlsx'); if (in_array(Input::get('format'), $formats)) { $format = Input::get('format'); } else { $format = 'xls'; } $month = Input::get('startMonth'); if (!($month > 0 && $month < 13)) { $month = 1; } $year = Input::get('startYear'); if (!($year >= 2014 && $year <= date('Y'))) { $year = 2014; } $name .= "_{$month}-{$year}"; if ($month < 10) { $month = '0' . $month; } $from = "{$year}-{$month}-01 00:00:00"; $month = Input::get('endMonth'); if (!($month > 0 && $month < 13)) { $month = 1; } $year = Input::get('endYear'); if (!($year >= 2014 && $year <= date('Y'))) { $year = 2014; } $name .= "_{$month}-{$year}"; $month++; if ($month > 12) { $month = 1; $year++; } if ($month < 10) { $month = '0' . $month; } $to = "{$year}-{$month}-01 00:00:00"; Excel::create($name, function ($excel) use($from, $to) { $usersCount = User::count(); $predmetCount = Predmet::count(); $mjeraCount = Mjera::count(); $ucionicaCount = Ucionica::count(); $ulogaCount = Role::count(); $kategorijaCount = Kategorija::count(); $rezervacijaCount = 0; $excel->setCreator('Hrvoje'); ini_set('max_execution_time', 120); $excel->sheet(self::SHEET_NAME_USERS, function ($sheet) use($ulogaCount) { $sheet->appendRow(array('ID', 'Ime', 'Broj mobitela', 'Email', 'Boja', 'ID uloge', 'Dodan', 'Zadnja promjena', 'Uloga')); $i = 1; foreach (User::select('id', 'name', 'broj_mobitela', 'email', 'boja', 'role_id', 'created_at', 'updated_at')->get() as $user) { $i++; $row = $user->toArray(); $row[] = self::getHyperlink(self::SHEET_NAME_ROLES, $ulogaCount, 'F' . $i); $sheet->appendRow($row); } }); $excel->sheet(self::SHEET_NAME_ROLES, function ($sheet) { $sheet->appendRow(array('ID', 'Ime uloge', 'Opis', 'Dodana', 'Zadnja promjena')); $sheet->fromModel(Role::all(), null, 'A2', true, false); }); $excel->sheet(self::SHEET_NAME_UCIONICE, function ($sheet) { $sheet->appendRow(array('ID', 'Ime učionice', 'Najveći broj učenika', 'Adresa', 'Kat', 'Opis', 'Dodana', 'Zadnja promjena')); $i = 1; foreach (Ucionica::select('id', 'naziv', 'max_broj_ucenika', 'adresa', 'kat', 'opis', 'created_at', 'updated_at')->get() as $ucionica) { $i++; $row = $ucionica->toArray(); $sheet->appendRow($row); } }); $excel->sheet(self::SHEET_NAME_KATEGORIJE, function ($sheet) use($kategorijaCount) { $sheet->appendRow(array('ID', 'Ime kategorije', 'ID nadkategorije', 'Dodana', 'Zadnja promjena', 'Nadkategorija')); $i = 1; foreach (Kategorija::select('id', 'ime', 'nadkategorija_id', 'created_at', 'updated_at')->get() as $kategorija) { $i++; $row = $kategorija->toArray(); $row[] = self::getHyperlink(self::SHEET_NAME_KATEGORIJE, $kategorijaCount, 'C' . $i); $sheet->appendRow($row); } }); $excel->sheet(self::SHEET_NAME_PREDEMTI, function ($sheet) use($kategorijaCount) { $sheet->appendRow(array('ID', 'Ime predmeta', 'ID kategorije', 'Dodana', 'Zadnja promjena', 'Kategorija')); $i = 1; foreach (Predmet::select('id', 'ime', 'kategorija_id', 'created_at', 'updated_at')->get() as $predmet) { $i++; $row = $predmet->toArray(); $row[] = self::getHyperlink(self::SHEET_NAME_KATEGORIJE, $kategorijaCount, 'C' . $i); $sheet->appendRow($row); } }); $excel->sheet(self::SHEET_NAME_PREDEMT_USER, function ($sheet) use($predmetCount, $usersCount) { $sheet->appendRow(array('ID djelatnika', 'ID predmeta', 'Djelatnik', 'Predmet')); $i = 1; foreach (DB::table('predmet_user')->select('user_id', 'predmet_id')->orderBy('user_id', 'predmet_id')->get() as $predmetUser) { $i++; $row = array(); $row[] = $predmetUser->user_id; $row[] = $predmetUser->predmet_id; $row[] = self::getHyperlink(self::SHEET_NAME_USERS, $usersCount, 'A' . $i); $row[] = self::getHyperlink(self::SHEET_NAME_PREDEMTI, $predmetCount, 'B' . $i); $sheet->appendRow($row); } }); $excel->sheet(self::SHEET_NAME_MJERE, function ($sheet) { $sheet->appendRow(array('ID', 'Ime mjere', 'Kratica', 'Trajanje')); $i = 1; foreach (Mjera::select('id', 'znacenje', 'simbol', 'trajanje')->get() as $mjera) { $i++; $row = $mjera->toArray(); $sheet->appendRow($row); } }); $naplate = array(); $klijenti = array(); $klijentRezervacije = array(); $excel->sheet(self::SHEET_NAME_REZERVACIJE, function ($sheet) use(&$naplate, &$klijenti, &$klijentRezervacije, $usersCount, $predmetCount, $mjeraCount, $ucionicaCount, &$rezervacijaCount, $from, $to) { $sheet->appendRow(array('ID', 'ID djelatnika', 'ID predmeta', 'Početak rada', 'Količina', 'ID mjere', 'Kraj rada', 'ID učionice', 'Tečaj', 'Napomena', 'Dodana', 'Zadnja promjena', 'Djelatnik', 'Predmet', 'Mjera', 'Učionica')); $i = 1; $rezervacije = Rezervacija::select('id', 'instruktor_id', 'predmet_id', 'pocetak_rada', 'kolicina', 'mjera_id', 'kraj_rada', 'ucionica_id', 'tecaj', 'napomena', 'created_at', 'updated_at')->with('naplata', 'klijenti')->whereBetween('pocetak_rada', array($from, $to))->get(); $rezervacijaCount = $rezervacije->count(); foreach ($rezervacije as $rezervacija) { $i++; $row = $rezervacija->toArray(); unset($row['naplata']); unset($row['klijenti']); $row[] = self::getHyperlink(self::SHEET_NAME_USERS, $usersCount, 'B' . $i); $row[] = self::getHyperlink(self::SHEET_NAME_PREDEMTI, $predmetCount, 'C' . $i); $row[] = self::getHyperlink(self::SHEET_NAME_MJERE, $mjeraCount, 'F' . $i); $row[] = self::getHyperlink(self::SHEET_NAME_UCIONICE, $ucionicaCount, 'H' . $i); $sheet->appendRow($row); if (!$rezervacija->tecaj && !$rezervacija->naplata) { $sheet->row($sheet->getHighestRow(), function ($row) { $row->setBackground('#ff9999'); }); } if ($rezervacija->naplata) { $naplate[] = $rezervacija->naplata->toArray(); } foreach ($rezervacija->klijenti as $klijent) { $klijentRezervacije[] = array('klijent_id' => $klijent->broj_mobitela, 'rezervacija_id' => $rezervacija->id, 'missed' => $klijent->pivot->missed); $klijenti[$klijent->broj_mobitela] = $klijent; } } }); $excel->sheet(self::SHEET_NAME_NAPLATE, function ($sheet) use($naplate, $rezervacijaCount, $mjeraCount) { $sheet->appendRow(array('ID', 'Ukupno naplaćeno', 'Za djelatnika', 'Za tvrtku', 'Naplaćena količina', 'ID naplaćene mjere', 'Napomena', 'Dodana', 'Zadnja promjena', 'predmet rezervacije', 'Naplaćena mjera')); $i = 1; foreach ($naplate as $naplata) { $i++; $row = $naplata; $row[] = self::getHyperlink(self::SHEET_NAME_REZERVACIJE, $rezervacijaCount, 'A' . $i, 'N'); $row[] = self::getHyperlink(self::SHEET_NAME_MJERE, $mjeraCount, 'C' . $i); $sheet->appendRow($row); } }); $klijentCount = count($klijenti); $excel->sheet(self::SHEET_NAME_KLIJENT_REZERVACIJA, function ($sheet) use($klijentRezervacije, $rezervacijaCount, $klijentCount) { $sheet->appendRow(array('Broj mobitela polaznika', 'ID rezervacije', 'Izostao')); //, 'Predmet rezervacije', 'Klijent')); $i = 1; foreach ($klijentRezervacije as $klijentRezervacija) { $i++; $row = $klijentRezervacija; $row['klijent_id'] = Klijent::getReadableBrojMobitela($klijentRezervacija['klijent_id']); //$row[] = self::getHyperlink(self::SHEET_NAME_REZERVACIJE, $rezervacijaCount, 'B'.$i, 'N'); //$row[] = self::getHyperlink(self::SHEET_NAME_KLIJENTI, $klijentCount, 'A'.$i); $sheet->appendRow($row); } }); $excel->sheet(self::SHEET_NAME_KLIJENTI, function ($sheet) use($klijenti, $rezervacijaCount) { $sheet->appendRow(array('Broj mobitela', 'Ime', 'Email', 'Facebook', 'Dodan', 'Zadnja promjena', 'Ime Roditelja', 'Broj roditelja', 'Škola/Fakultet', 'Razred')); $i = 1; foreach ($klijenti as $klijent) { $i++; $klijent->broj_mobitela = Klijent::getReadableBrojMobitela($klijent->broj_mobitela); $klijent->broj_roditelja = Klijent::getReadableBrojMobitela($klijent->broj_roditelja); $row = $klijent->toArray(); unset($row['pivot']); $sheet->appendRow($row); } }); })->download($format); }
/** * * @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; }