middleware(['admin', '2fa']); $this->userBookingFewoRepo = $userBookingFewoRepo; } public function index($step = false) { $data = [ 'step' => $step, 'filter_fewo_options' => FewoLodging::get()->pluck('name', 'id'), 'filter_channel_options' => TravelBookingFewoChannel::get()->pluck('name', 'id'), ]; return view('travel.user.booking.index', $data); } public function detail($id) { $max_adults = 10; $max_children = 10; $replace_info_text = []; if($id === "new") { $travel_user_booking_fewo = new TravelUserBookingFewo(); $id = 'new'; }else{ $travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id); $max_adults = $travel_user_booking_fewo->fewo_lodging->maximum_adults ? $travel_user_booking_fewo->fewo_lodging->maximum_adults : 10; $max_children = $travel_user_booking_fewo->fewo_lodging->maximum_childs ? $travel_user_booking_fewo->fewo_lodging->maximum_childs : 10;; $id = $travel_user_booking_fewo->id; $replace_info_text['fewo_user_anrede'] = $travel_user_booking_fewo->getUserSalutation(); $replace_info_text['fewo_adresse'] = $travel_user_booking_fewo->getNameAddressLocation(", "); /* if($travel_user_booking_fewo->fewo_lodging){ $this->identifier_fewo = $this->identifier_fewo.Util::sanitize($travel_user_booking_fewo->fewo_lodging->pdf_name); }*/ } if(!$travel_user_booking_fewo->info_mail_text) { $travel_user_booking_fewo->info_mail_text = CMSContent::getContentBySlug('pdf-vorlage-anreiseinfo-fewo'); $travel_user_booking_fewo->info_mail_text = Util::replacePlaceholders($travel_user_booking_fewo->info_mail_text, $replace_info_text); } $data = [ 'travel_user_booking_fewo' => $travel_user_booking_fewo, 'send_mail_employee_mail' => config('mail.mail_fewo_employee'), 'max_adults' => $max_adults, 'max_children' => $max_children, 'id' => $id, 'show_modal_quill_preview' => true, ]; return view('travel.user.booking.detail', $data); } public function store($id) { $data = Request::all(); if(!isset($data['action'])){ abort(403, 'keine Action'); } if($data['action'] === 'save_notice'){ $travel_user_booking_fewo = $this->userBookingFewoRepo->updateNotice($id, $data); \Session()->flash('alert-save', '1'); return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id])."#collapseBookingNotice"); } if($data['action'] === 'edit_notice'){ $travel_user_booking_fewo = $this->userBookingFewoRepo->updateNotice($id, $data); \Session()->flash('alert-save', '1'); return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id])."#collapseBookingNotice"); } if($data['action'] === 'saveAll'){ return $this->userBookingFewoRepo->update($id, $data); } if($data['action'] === 'createInvoice'){ if(!TravelUserBookingFewo::find($id)){ \Session()->flash('alert-error', __('Buchung nicht gefunden.')); return back()->withRequest(Request::all()); } $ret = $this->userBookingFewoRepo->check($id, $data); if($ret['success'] == false){ return back()->withRequest(Request::all())->withErrors($ret['error']); } if($ret['success'] == true){ $this->userBookingFewoRepo->createInvoicePDF($id); \Session()->flash('alert-success', __('Mietbestätigung / Rechnung wurde erstellt.')); return redirect(route('travel_user_booking_fewo_detail', [$ret['id']])); } } if($data['action'] === 'createTravelInfo'){ if(!TravelUserBookingFewo::find($id)){ \Session()->flash('alert-error', __('Buchung nicht gefunden.')); return back()->withRequest(Request::all()); } $ret = $this->userBookingFewoRepo->check($id, $data); if($ret['success'] == false){ return back()->withRequest(Request::all())->withErrors($ret['error']); } if($ret['success'] == true){ $this->userBookingFewoRepo->createTravelInfoPDF($id, $data['info_mail_text']); \Session()->flash('alert-success', __('Anreiseinfo wurde erstellt/gespeichert.')); return redirect(route('travel_user_booking_fewo_detail', [$ret['id']])); } } if($data['action'] === 'sendMailtoUser') { $travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id); if($travel_user_booking_fewo->travel_user_id && $travel_user_booking_fewo->travel_user->email){ $mail_bbc = config('mail.mail_bbc'); Mail::to($travel_user_booking_fewo->travel_user->email)->bcc($mail_bbc)->send(new MailSendFeWoInvoice($travel_user_booking_fewo, Request::get('send_mail_user_notice'))); $send_user_mail = $travel_user_booking_fewo->send_user_mail; $send_user_mail[] = [date('H:i d.m.Y') => $travel_user_booking_fewo->travel_user->email." ".Request::get('send_mail_user_notice')]; $travel_user_booking_fewo->send_user_mail = $send_user_mail; $travel_user_booking_fewo->save(); \Session()->flash('alert-success', __('E-Mail wurde an den Mieter versendet.')); return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id])); } } if($data['action'] === 'sendInfosMailtoUser') { $travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id); if($travel_user_booking_fewo->travel_user_id && $travel_user_booking_fewo->travel_user->email){ $mail_files = []; if(isset($data['info_mail_files'])){ $mail_files = $this->setMailInfoFiles($data['info_mail_files'], $travel_user_booking_fewo); } $mail_bbc = config('mail.mail_bbc'); Mail::to($travel_user_booking_fewo->travel_user->email)->bcc($mail_bbc)->send(new MailSendFeWoInfo($travel_user_booking_fewo, $mail_files)); $send_info_mail = $travel_user_booking_fewo->send_info_mail; $send_info_mail[] = [date('H:i d.m.Y') => $travel_user_booking_fewo->travel_user->email]; $travel_user_booking_fewo->send_info_mail = $send_info_mail; $travel_user_booking_fewo->save(); \Session()->flash('alert-success', __('E-Mail wurde an den Mieter versendet.')); return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id])); } } if($data['action'] === 'sendMailtoService') { $travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id); if($travel_user_booking_fewo){ $mail_bbc = config('mail.mail_bbc'); Mail::to(Request::get('send_mail_service_mail'))->bcc($mail_bbc)->send(new MailSendFeWoService($travel_user_booking_fewo, Request::get('send_mail_service_subject'), Request::get('send_mail_service_content'))); $send_service_mail = $travel_user_booking_fewo->send_service_mail; $send_service_mail[] = ['d' => date('H:i d.m.Y'), 'm'=>Request::get('send_mail_service_mail'), 's'=>Request::get('send_mail_service_subject'), 'c'=>Request::get('send_mail_service_content')]; $travel_user_booking_fewo->send_service_mail = $send_service_mail; $travel_user_booking_fewo->save(); \Session()->flash('alert-success', __('E-Mail wurde an den Dienstleister versendet.')); return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id])); } } if($data['action'] === 'sendMailtoEmployee') { $travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id); if($travel_user_booking_fewo){ $mails = explode(",", Request::get('send_mail_employee_mail')); Mail::to($mails)->send(new MailSendFeWoService($travel_user_booking_fewo, Request::get('send_mail_employee_subject'), Request::get('send_mail_employee_content'))); $send_employee_mail = $travel_user_booking_fewo->send_employee_mail; $send_employee_mail[] = ['d' => date('H:i d.m.Y'), 'm'=>Request::get('send_mail_employee_mail'), 's'=>Request::get('send_mail_employee_subject'), 'c'=>Request::get('send_mail_employee_content')]; $travel_user_booking_fewo->send_employee_mail = $send_employee_mail; $travel_user_booking_fewo->save(); \Session()->flash('alert-success', __('E-Mail wurde an die Mitarbeiter versendet.')); return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id])); } } } private function setMailInfoFiles($info_mail_files, $travel_user_booking_fewo) { $files = []; $ret = []; //read files foreach($info_mail_files as $mail_file){ if($mail_file === 'fewo_instruction_pdf'){ $files[] = [ 'target' => route('customer_file_show', ['fewo_instruction_pdf', $travel_user_booking_fewo->fewo_lodging->id, 'stream']), 'name' => \App\Services\BookingFewo::getFeWoInstructionPDFName($travel_user_booking_fewo->fewo_lodging) ]; }else{ if($file = \App\Models\CMSContent::getModelBySlug($mail_file)){ $files[] = [ 'target' => $file->getURL(), 'name' => $file->name ]; } } } //store files foreach($files as $file){ $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $contents = file_get_contents($file['target'], false, stream_context_create($arrContextOptions)); $mine = Util::getMimeFromHeader($http_response_header); $extension = Util::getExtensionFromMime($mine); $fileRepo = new CustomerFewoFileRepository(new CustomerFewoFile()); $fileRepo->_set('disk', 'travel_user'); $fileRepo->_set('dir', '/attachment/'.date('Y/m').'/'); $fileRepo->_set('travel_user_id', $travel_user_booking_fewo->travel_user_id); $fileRepo->_set('customer_fewo_mail_id', NULL); $fileRepo->_set('identifier', 'fewo_info_mail_user'); $fileRepo->_set('originalName', $file['name']); $fileRepo->_set('mine', $mine); $fileRepo->_set('extension', $extension); $ret[] = $fileRepo->storeReturnFile($contents); } return $ret; } public function getAjaxRequests(){ $data = Request::all(); if(Request::ajax()) { if(isset($data['action']) && $data['action'] === "get_popover_fewo_notice"){ $TravelUserBookingFewo = TravelUserBookingFewo::findOrFail($data['travel_user_booking_fewo_id']); $ret = ""; if($TravelUserBookingFewo->booking_fewo_notices->count()){ $booking_fewo_notice = $TravelUserBookingFewo->booking_fewo_notices->first(); return $booking_fewo_notice->getSmallerMessage(500); } if($ret === ""){ return 'keine Notiz'; } return $ret; } } } public function loadModal(){ $data = Request::all(); $ret = ""; if(Request::ajax()) { if($data['action'] === "edit_notice") { $value = TravelUserBookingFewoNotice::findOrFail($data['id']); $ret = view("travel.user.booking.edit_notice_modal", compact('data', 'value'))->render(); } } return response()->json(['response' => $data, 'html'=>$ret]); } public function delete($id, $del="travel_user_booking_fewo"){ if($del === 'travel_user_booking_fewo') { $model = TravelUserBookingFewo::findOrFail($id); //Reservations $FewoReservations = FewoReservation::where('lodging_id', $model->fewo_lodging_id)->where('from_date', $model->getFromDateRaw())->where('to_date', $model->getToDateRaw())->get(); foreach ($FewoReservations as $FewoReservation) { $FewoReservation->delete(); } //Files $FewoFiles = TravelUserBookingFile::where('travel_user_booking_fewo_id', $model->id)->get(); foreach ($FewoFiles as $file) { $fileRepo = new BookingFewoFileRepository($file); $fileRepo->_set('disk', 'booking_fewo'); $fileRepo->delete(); $file->delete(); } //Mails //CASCADE $model->delete(); \Session()->flash('alert-success', __('Buchung gelöscht sowie die Reservierung im Sterntrous Kalender')); } if($del === 'booking_fewo_notices'){ $booking_fewo_notice = TravelUserBookingFewoNotice::findOrFail($id); $travel_user_booking_fewo = $booking_fewo_notice->travel_user_booking_fewo; $booking_fewo_notice->delete(); \Session()->flash('alert-success', 'Notiz gelöscht'); return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id])."#collapseBookingNotice"); } if($del === 'booking_fewo_files'){ $booking_fewo_file = TravelUserBookingFile::findOrFail($id); $travel_user_booking_fewo = $booking_fewo_file->travel_user_booking_fewo; $fileRepo = new BookingFewoFileRepository($booking_fewo_file); $fileRepo->_set('disk', 'booking_fewo'); $fileRepo->delete(); $booking_fewo_file->delete(); \Session()->flash('alert-success', 'Datei gelöscht'); return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id]).'#collapseBookingFiles'); } return redirect(route('travel_user_booking_fewos')); } private function prozessTravelUserBookingFewosSearch(){ $query = TravelUserBookingFewo::with('travel_booking_fewo_channel')->with('fewo_lodging') ->select('travel_user_booking_fewos.*') ->where('deleted_at', '=', null); if(Request::get('option_fewo_id') != ""){ $query->where('fewo_lodging_id', '=', Request::get('option_fewo_id')); } if(Request::get('option_channel_id') != ""){ $query->where('travel_booking_fewo_channel_id', '=', Request::get('option_channel_id')); } return $query; } public function getTravelUserBookingFewos() { $query = $this->prozessTravelUserBookingFewosSearch(); return \DataTables::eloquent($query) ->addColumn('action_edit', function (TravelUserBookingFewo $travel_user_booking_fewo) { return ''; }) ->addColumn('travel_user', function (TravelUserBookingFewo $travel_user_booking_fewo) { return ''.$travel_user_booking_fewo->travel_user->first_name.' '.$travel_user_booking_fewo->travel_user->last_name.''; }) ->addColumn('is_calendar', function (TravelUserBookingFewo $travel_user_booking_fewo) { $back = "
"; $back .= get_active_badge($travel_user_booking_fewo->is_calendar_traum_fewo, "Traum Direkt")." "; $back .= get_active_badge($travel_user_booking_fewo->is_calendar_fewo_direct, "FEWO Direkt")." "; $back .= get_active_badge($travel_user_booking_fewo->is_calendar_hrs, "HRS")." "; $back .= get_active_badge($travel_user_booking_fewo->is_calendar_stern_tours, "STERN TOURS"); $back .= "
"; return $back; }) ->addColumn('is_mail', function (TravelUserBookingFewo $travel_user_booking_fewo) { $back = "
"; $back .= get_active_badge($travel_user_booking_fewo->isSendUserMail(), "Mietbestätigung")." "; $back .= get_active_badge($travel_user_booking_fewo->isSendInfoMail(), "Anrreiseinfo")." "; $back .= get_active_badge($travel_user_booking_fewo->isSendServiceMail(), "Dienstleister Mail"); $back .= "
"; return $back; }) ->addColumn('booking_fewo_notice', function (TravelUserBookingFewo $travel_user_booking_fewo) { return $travel_user_booking_fewo->booking_fewo_notices->count() ? '' : ''; }) ->addColumn('action_delete', function (TravelUserBookingFewo $travel_user_booking_fewo) { return ''; }) ->filterColumn('fewo_lodging.name', function ($query, $keyword) { if ($keyword != "") { $query->whereHas('travel_user', function ($q) use ($keyword) { $q->where("first_name", 'LIKE', '%' . $keyword . '%') ->orWhere('last_name', 'LIKE', '%' . $keyword . '%'); }); } }) ->addColumn('last_fewo_email', function (TravelUserBookingFewo $travel_user_booking_fewo) { //umbuchen if($travel_user_booking_fewo->customer_fewo_mails->count()){ $fewo_mail = $travel_user_booking_fewo->customer_fewo_mail_last; return ' '.$fewo_mail->sent_at.' '; } return '-'; }) ->rawColumns(['action_edit', 'travel_user', 'is_calendar', 'is_mail', 'booking_fewo_notice', 'last_fewo_email', 'action_delete']) ->make(true); } }