/** * Reverse the migrations. * * @return void */ public function down() { (new CreateCijeneTable())->up(); $relations = DB::table('c_m_p')->get(); foreach ($relations as $r) { $c = Cjenovnik::find($r->cjenovnik_id); DB::table('cijene')->insert(array('predmet_id' => $r->predmet_id, 'mjera_id' => $r->mjera_id, 'individualno' => $c->cijena_1_osoba, 'popust' => $c->cijena_1_osoba - $c->cijena_2_osobe, 'minimalno' => $c->cijena_vise_osoba)); } }
/** * Run the migrations. * * @return void */ public function up() { Schema::create('cjenovnici', function (Blueprint $table) { $table->increments('id'); $table->string('ime', 50); $table->text('opis')->nullable(); $table->integer('cijena_1_osoba')->unsigned(); $table->integer('cijena_2_osobe')->unsigned(); $table->integer('cijena_3_osobe')->unsigned(); $table->integer('cijena_4_osobe')->unsigned(); $table->integer('cijena_vise_osoba')->unsigned(); $table->integer('instruktor_1_osoba')->unsigned(); $table->integer('instruktor_2_osobe')->unsigned(); $table->integer('instruktor_3_osobe')->unsigned(); $table->integer('instruktor_4_osobe')->unsigned(); $table->integer('instruktor_udio_vise_osoba')->unsigned(); $table->timestamps(); }); //Populate $res = DB::table('cijene')->groupBy('individualno', 'popust', 'minimalno')->get(); $po_osobi = function ($t, $n) { $x = $t->individualno - ($n - 1) * $t->popust; if ($x < $t->minimalno) { return $t->minimalno; } return $x; }; $instruktoru = function ($t, $n) use($po_osobi) { $u = $po_osobi($t, $n) * $n; return $u - Naplata::getSatnicaZaTvrtku($u); }; $i = 0; foreach ($res as $triplet) { $i++; $triplet->cjenovnik_id = Cjenovnik::create(array('ime' => "Cjenovnik {$i}", 'cijena_1_osoba' => $po_osobi($triplet, 1), 'cijena_2_osobe' => $po_osobi($triplet, 2), 'cijena_3_osobe' => $po_osobi($triplet, 3), 'cijena_4_osobe' => $po_osobi($triplet, 4), 'cijena_vise_osoba' => $triplet->minimalno, 'instruktor_1_osoba' => $instruktoru($triplet, 1), 'instruktor_2_osobe' => $instruktoru($triplet, 2), 'instruktor_3_osobe' => $instruktoru($triplet, 3), 'instruktor_4_osobe' => $instruktoru($triplet, 4), 'instruktor_udio_vise_osoba' => 50))->id; } //Populated Schema::create('c_m_p', function (Blueprint $table) { $table->integer('cjenovnik_id')->unsigned()->index(); $table->integer('mjera_id')->unsigned()->index(); $table->integer('predmet_id')->unsigned()->index(); $table->primary(array('mjera_id', 'predmet_id')); }); Schema::table('c_m_p', function (Blueprint $table) { $table->foreign('cjenovnik_id')->references('id')->on('cjenovnici')->onUpdate('cascade')->onDelete('cascade'); $table->foreign('mjera_id')->references('id')->on('mjere')->onUpdate('cascade')->onDelete('cascade'); $table->foreign('predmet_id')->references('id')->on('predmeti')->onUpdate('cascade')->onDelete('cascade'); }); // Populate c_m_p foreach ($res as $triplet) { $relations = DB::table('cijene')->where('individualno', '=', $triplet->individualno)->where('popust', '=', $triplet->popust)->where('minimalno', '=', $triplet->minimalno)->get(); foreach ($relations as $relation) { DB::table('c_m_p')->insert(array('cjenovnik_id' => $triplet->cjenovnik_id, 'mjera_id' => $relation->mjera_id, 'predmet_id' => $relation->predmet_id)); } } // populated c_m_p }
} ?> > {{ Form::label('Trajanje') }} <div class="row"> <div class="col-xs-6"> {{ Form::input('number', 'stvarna_kolicina', null, $requiredPositive) }}</div> <div class="col-xs-6"> {{ Form::select('stvarna_mjera', \Mjera::all()->lists('simbol', 'id'), $rezervacija->mjera_id, $required) }}</div> </div> <script type="text/javascript"> mjereManager.begin(<?php $cjenovnici = Cjenovnik::whereIn('id', $rezervacija->predmet->c_m_p->map(function ($mjera) { return $mjera->pivot->cjenovnik_id; })->toArray())->get(); echo json_encode($rezervacija->predmet->c_m_p->map(function ($mjera) use($cjenovnici) { $cjenovnik = $cjenovnici->first(function ($index, $cjenovnik) use($mjera) { return $cjenovnik->id == $mjera->pivot->cjenovnik_id; }); return array('id' => $mjera->id, 'ime' => $mjera->znacenje, 'cijena_1_osoba' => $cjenovnik->cijena_1_osoba, 'cijena_2_osobe' => $cjenovnik->cijena_2_osobe, 'cijena_3_osobe' => $cjenovnik->cijena_3_osobe, 'cijena_4_osobe' => $cjenovnik->cijena_4_osobe, 'cijena_vise_osoba' => $cjenovnik->cijena_vise_osoba); })->toArray()); ?> ); </script> </div> <p>Ukupno po osobi <strong class = "perPersonDisplay">{{ $poOsobi*$rezervacija->kolicina }}</strong></p> </div> </div> <p>Ukupno za platiti <strong class = "total_display">{{ $poOsobi*$rezervacija->kolicina*$brojPolaznika }}</strong></p>
/** * * @param array $input * @return null|string */ public function getErrorOrSync($input) { $ime = $this->ime; if (isset($input['ime'])) { $ime = $input['ime']; } if (!$ime) { return 'Ime cjenovnika je obvezno.'; } $data[2]['key'] = 'cijena_2_osobe'; $data[3]['key'] = 'cijena_3_osobe'; $data[4]['key'] = 'cijena_4_osobe'; $data[2]['key2'] = 'instruktor_2_osobe'; $data[3]['key2'] = 'instruktor_3_osobe'; $data[4]['key2'] = 'instruktor_4_osobe'; $cijena_1_osoba = $this->cijena_1_osoba; if (isset($input['cijena_1_osoba'])) { $cijena_1_osoba = $input['cijena_1_osoba']; } if (!$cijena_1_osoba) { return 'Cijena za 1 osobu je obvezna.'; } $prethodna_cijena = $cijena_1_osoba; $instruktor_1_osoba = $this->instruktor_1_osoba; if (isset($input['instruktor_1_osoba'])) { $instruktor_1_osoba = $input['instruktor_1_osoba']; } if (!$instruktor_1_osoba) { return 'Instruktorov udio za 1 osobu je obvezan.'; } $prethodno_instruktoru = $instruktor_1_osoba; if ($prethodno_instruktoru > $prethodna_cijena) { return "Instruktorova zarada za 1 osobu je veća od ukupne zarade."; } for ($i = 2; $i < 5; $i++) { $data[$i]['value'] = $this[$data[$i]['key']]; $data[$i]['value2'] = $this[$data[$i]['key2']]; if (isset($input[$data[$i]['key']])) { $data[$i]['value'] = $input[$data[$i]['key']]; } if (isset($input[$data[$i]['key2']])) { $data[$i]['value2'] = $input[$data[$i]['key2']]; } if (!$data[$i]['value']) { return "Cijena za {$i} osobe je obvezna."; } if (!$data[$i]['value2']) { return "Instruktorov udio za {$i} osobe je obvezan."; } if ($prethodna_cijena < $data[$i]['value']) { return "Cijena po osobi je za {$i} osobe veća nego za " . ($i - 1) . '.'; } $prethodna_cijena = $data[$i]['value']; if ($prethodno_instruktoru > $data[$i]['value2']) { return "Instruktorova satnica za {$i} osobe je manja nego za " . ($i - 1) . '.'; } $prethodno_instruktoru = $data[$i]['value2']; if ($prethodno_instruktoru > $prethodna_cijena * $i) { return "Instruktorova zarada za {$i} osobe je veća od ukupne zarade."; } } $cijena_vise_osoba = $this->cijena_vise_osoba; if (isset($input['cijena_vise_osoba'])) { $cijena_vise_osoba = $input['cijena_vise_osoba']; } if (!$cijena_vise_osoba) { return 'Cijena za 5 i više osoba je obvezna.'; } if ($prethodna_cijena < $cijena_vise_osoba) { return 'Cijena po osobi je za 5 i više osoba veća nego za 4.'; } $instruktor_udio_vise_osoba = $this->instruktor_udio_vise_osoba; if (isset($input['instruktor_udio_vise_osoba'])) { $instruktor_udio_vise_osoba = $input['instruktor_udio_vise_osoba']; } if (!$instruktor_udio_vise_osoba) { return 'Instruktorov udio za 5 i više osoba je obvezan.'; } //provjera zauzetosti imena $query = Cjenovnik::where('ime', '=', $ime); if ($this->id > 0) { $query = $query->where('id', '!=', $this->id); } if ($query->count() > 0) { return 'Već postoji cjenovnik s imenom ' . $ime . '.'; } //kraj provjere zauzetosti imena //pohrana podataka $this->ime = $ime; $this->cijena_1_osoba = $cijena_1_osoba; $this->cijena_vise_osoba = $cijena_vise_osoba; $this->instruktor_1_osoba = $instruktor_1_osoba; $this->instruktor_udio_vise_osoba = $instruktor_udio_vise_osoba; for ($i = 2; $i < 5; $i++) { $this[$data[$i]['key']] = $data[$i]['value']; $this[$data[$i]['key2']] = $data[$i]['value2']; } if (isset($input['opis'])) { $this->opis = $input['opis']; } $this->save(); }
/** * Remove the specified resource from storage. * * @param int $id * @return Response */ public function destroy($id) { $cjenovnik = Cjenovnik::find($id); if (!$cjenovnik) { return $this->itemNotFound(); } if ($cjenovnik->c_m_p()->count()) { Session::flash(self::DANGER_MESSAGE_KEY, 'Nije moguće ukloniti cjenovnik, dok ga još neki predmeti koriste.'); return Redirect::route('Cjenovnik.show', array($cjenovnik->id)); } $cjenovnik->delete(); Session::flash(self::SUCCESS_MESSAGE_KEY, 'Cjenovnik je uspješno uklonjen!'); return Redirect::route('Cjenovnik.index'); }
$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) { $cjenovnik = Cjenovnik::find($cjenovnik_id); } else { $cjenovnik = null; } ?> @if($cjenovnik) Cjenovnik za <strong>{{ $znacenje }}</strong> {{ Form::select("cjenovnik_id_$id", $cjenovnici, $cjenovnik->id, $required) }} <div class="cjenovnik_table"> {{ View::make('Cjenovnik.table')->with('cjenovnik', $cjenovnik)->render() }} </div> @else Cjenovnik za <strong>{{ $znacenje }}</strong> {{ Form::select("cjenovnik_id_$id", $cjenovnici, null, $required) }} <div class="cjenovnik_table"></div> @endif </div> @endforeach
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; }