Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function available(Request $request)
- {
- $data = $request->all();
- $newData = array();
- $categoryArr = array();
- // manipolo la request per pulirla e salvarmi un altro array da utilizzare dopo
- foreach ($data as $key => $value) {
- if ($value == 0) {
- } else {
- $newData[$key] = $value;
- }
- }
- // ciclo la request e verifico con il nuovo array le categorie e creo un nuovo array con $key == id categoria && $value == quantita ordianata
- foreach ($data as $key => $value) {
- /* dd($data); */
- foreach ($newData['category'] as $key2 => $value2) {
- /* dd($newData['category']); */
- if ($value2 == $key ) {
- $categoryArr[$value2] = $value;
- }
- }
- }
- // dd($categoryArr);
- // Gestione date
- $dataRange = $newData['range_date'];
- //
- $arraySplit = explode(' - ', $dataRange);
- $formatCarbonStart = Carbon::createFromFormat('d/m/Y', $arraySplit[0])->format('Y-m-d');
- $formatCarbonEnd = Carbon::createFromFormat('d/m/Y', $arraySplit[1])->format('Y-m-d');
- $inputStartDate = Carbon::parse($formatCarbonStart)->format('Y-m-d');
- $inputEndDate = Carbon::parse($formatCarbonEnd)->format('Y-m-d');
- $bookingStart = Carbon::createFromFormat('Y-m-d',$inputStartDate);
- $bookingEnd = Carbon::createFromFormat('Y-m-d',$inputEndDate);
- //
- // Gestione date
- // Dichiaro i due array delle bici
- $biciCorretta = array();
- $biciSbagliata= array();
- // Ciclo l'array delle categorie
- //dd($categoryArr);
- foreach ($categoryArr as $keys => $value) {
- //dd($categoryArr);
- $category = Category::find($keys);
- $bikes = Bike::with('Category')->where([['manutenzione', '=', 0],['category_id', '=', $keys]])->get();
- //dd($bikes);
- // Per ogni iterazione faccio una query e limito le risposte di questa query in base alla quantità che mi hanno mandato
- if (count($bikes) < $value) {
- //dd($bikes);
- return back()->with('message', 'Quantità maggiore delle bici disponibili '.$category->tipo);
- } else {
- // ciclo le bici trovate
- foreach ($bikes as $bike) {
- //dd($bikes);
- $i=0;
- // se hanno dei contratti
- //dd(count($bike->contract) > 0);
- if (count($bike->contract) > 0 && $i<=count($bikes)) {
- // ciclo i loro contratti
- foreach ($bike->contract as $contrattoEsistente) {
- //dd($contrattoEsistente->id);
- // faccio una validazione dove vedo se le date immesse dal cliente hanno bici disponibili
- $contrattoEsistenteStart = Carbon::createFromFormat('Y-m-d',$contrattoEsistente->data_inizio);
- $contrattoEsistenteEnd = Carbon::createFromFormat('Y-m-d',$contrattoEsistente->data_fine);
- $check1 = $bookingStart->lte($contrattoEsistenteEnd);
- $check2 = $bookingEnd->gte($contrattoEsistenteStart);
- if ($check1 && $check2) {
- array_push($biciSbagliata, $bike);
- }else {
- if (!in_array($bike,$biciCorretta, true)) {
- array_push($biciCorretta,$bike);
- }
- }
- $i++;
- if (count($biciSbagliata)==count($bikes)) {
- return back()->with('message', 'Bici non disponibili in quelle date '.$bike->id);
- }
- }
- } else {
- if (!in_array($bike,$biciCorretta, true)) {
- array_push($biciCorretta, $bike);
- }
- }
- }
- }
- }
- // dichiaro l'array delle bici che selezionerò
- $biciSelezionata = array();
- // dd($categoryArr);
- // ciclo di nuovo l'array delle categorie
- foreach ($categoryArr as $key => $value) {
- // dichiaro un contatore per la quantita di bici che debbo trovare
- $contatoreqty=1;
- foreach ($biciCorretta as $chiave => $valore) {
- $biciSingola = $valore;
- // se la categoria della bici singola è corretta e la quantita ($value) è inferiore o uguale al contatore
- // pusho la bici nell'array
- if ($biciSingola->category_id == $key && $contatoreqty <= $value/* && $contatoreiteration <= count($categoryArr) */) {
- if (!in_array($biciSingola,$biciSelezionata, true)) {
- array_push($biciSelezionata, $biciSingola);
- }
- $contatoreqty ++;
- }
- }
- }
- //dd($biciSelezionata);
- // Gestione Costi
- $diffDays = $bookingEnd->diffInDays($bookingStart);
- $price = 0;
- foreach ($biciSelezionata as $key) {
- //
- if ($diffDays <= 1) {
- $price += $key->category->base;
- } elseif ($diffDays == 2) {
- $price += $key->category->twoDay;
- } elseif ($diffDays == 3) {
- $price += $key->category->threeDay;
- } elseif ($diffDays == 4) {
- $price += $key->category->fourDay;
- } elseif ($diffDays == 5) {
- $price += $key->category->fiveDay;
- } elseif ($diffDays == 6) {
- $price += $key->category->sixDay;
- } elseif ($diffDays == 7) {
- $price += $key->category->sevenDay;
- } elseif($diffDays > 7) {
- $overpriceDiff = $diffDays - 7;
- $sette = $key->category->sevenDay;
- $surplus = $key->category->overprice * $overpriceDiff;
- $price += $sette + $surplus;
- }
- }
- $nome = $request->name;
- $cognome = $request->cognome;
- $mail = $request->mail;
- $telefono = $request->tel;
- $contract = new Contract;
- $contract->nome = $nome;
- $contract->cognome = $cognome;
- $contract->data_inizio = $inputStartDate;
- $contract->data_fine = $inputEndDate;
- $contract->tel = $telefono;
- $contract->mail = $mail;
- $contract->temporanei = 1;
- $contract->online = 1;
- $contract->costo = $price;
- $contract->save();
- foreach ($biciSelezionata as $biciDaAttaccare) {
- //dd($biciSelezionata);
- $contract->bike()->attach($biciDaAttaccare->id);
- }
- $contract->load('bike');
- // dd($contract);
- //invio mail alla mail interna info@entratribe.it per tracciabilita prenotazione
- Mail::to('info@etnatribe.it')->send(new sendInternalMail($contract));
- return view('booking.confirm', compact('contract') );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement