diff --git a/.env b/.env index 330163d..860c260 100755 --- a/.env +++ b/.env @@ -23,11 +23,11 @@ LOG_CHANNEL=stack #DB_PASSWORD=KT32vQ7 # on neptune DB_CONNECTION=mysql -DB_HOST=192.168.1.7 +DB_HOST=localhost DB_PORT=3306 DB_DATABASE=cmssso_db1 -DB_USERNAME=cmssso_1 -DB_PASSWORD=ZXk8Udm8 +DB_USERNAME=root +DB_PASSWORD=KT32vQ7 DB_CONNECTION_STERN=mysql @@ -54,7 +54,7 @@ MAIL_FEWO_EMPLOYEE=kevin@adametz.media #MAIL_FEWO_EMPLOYEE=katrin.nikolai@stern-tours.de,gerda.fritsch@stern-tours.de #MAIL_BBC=kontakt@stern-tours.de,thomas.stern@stern-tours.de MAIL_FROM_ADDRESS=info@mein.sterntours.de -MAIL_FROM_NAME=Mein Reisebüro STERN TOURS +MAIL_FROM_NAME="Mein Reisebüro STERN TOURS" MAIL_DRIVER=smtp MAIL_HOST=mail.your-server.de MAIL_PORT=587 diff --git a/.idea/workspace.xml b/.idea/workspace.xml index de6e0d3..2739eb7 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,15 +2,11 @@ - - - - - - - - - + + + + + @@ -30,27 +26,90 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - - - - - + + + + + + + + + + + + + + + + @@ -100,18 +159,13 @@ - - - - - - - - - + + + + - - - - - - - + - + + + + + + + @@ -639,6 +693,19 @@ + + + + + + + + + + + + + @@ -670,7 +737,6 @@ - @@ -679,15 +745,10 @@ - + - - - - - - + @@ -698,20 +759,31 @@ - + - + - + - + - + - + + + + + + file://$PROJECT_DIR$/resources/views/booking/detail.blade.php + 313 + + + + \ No newline at end of file diff --git a/app/Http/Controllers/BookingController.php b/app/Http/Controllers/BookingController.php index 28998a6..070acb8 100755 --- a/app/Http/Controllers/BookingController.php +++ b/app/Http/Controllers/BookingController.php @@ -4,7 +4,9 @@ namespace App\Http\Controllers; use App\Models\Booking; use App\Models\BookingDraftItem; +use App\Models\Customer; use App\Repositories\BookingRepository; +use App\Repositories\CustomerMailRepository; use Request; class BookingController extends Controller @@ -184,6 +186,25 @@ class BookingController extends Controller } + + public function loadModal(){ + $data = Request::all(); + $ret = ""; + if(Request::ajax()){ + $data['customers'] = []; + if($data['action'] === "new-customer-mail" && isset($data['booking_id']) && $booking = Booking::find($data['booking_id'])){ + $tmp = ""; + $tmp .= $booking->customer ? $booking->customer->email." | " : "- | "; + $tmp .= $booking->customer ? $booking->customer->firstname." ".$booking->customer->name." | " : "- | "; + $tmp .= $booking->travel_country_id ? $booking->travel_country->name." | " : "- | "; + $tmp .= $booking->travelagenda_id ? $booking->travel_agenda->name."" : "-"; + $data['customers'][$booking->id] = $tmp; + } + $ret = CustomerMailRepository::loadModal($data); + } + return response()->json(['response' => $data, 'html'=>$ret]); + } + public function draftItemDelete($id){ $boking_draft_item = BookingDraftItem::findOrFail($id); $booking = $boking_draft_item->booking; diff --git a/app/Http/Controllers/CustomerMailController.php b/app/Http/Controllers/CustomerMailController.php index 8decf16..e630a22 100755 --- a/app/Http/Controllers/CustomerMailController.php +++ b/app/Http/Controllers/CustomerMailController.php @@ -3,10 +3,15 @@ namespace App\Http\Controllers; use App\Models\Customer; +use App\Models\CustomerFile; use App\Models\CustomerMail; use App\Repositories\CustomerMailRepository; +use App\Repositories\FileRepository; use Carbon; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Support\Facades\URL; use Request; +use Response; class CustomerMailController extends Controller { @@ -37,9 +42,12 @@ class CustomerMailController extends Controller $customer_mail = CustomerMail::findOrFail($id); $id = $customer_mail->id; } + + $data = [ 'customer_mail' => $customer_mail, 'id' => $id, + 'back' => URL::previous(), ]; return view('customer.mail.detail', $data); @@ -61,6 +69,56 @@ class CustomerMailController extends Controller return redirect(route('lead_detail', [$lead->id]));*/ } + + /* public function loadModal(){ + $data = Request::all(); + $ret = ""; + if(Request::ajax()){ + + $customers = []; + $query = $this->getSearchRequests(); + $bookings = $query->orderBy('id', 'DESC')->limit(50)->get(); + foreach ($bookings as $booking){ + $tmp = ""; + $tmp .= $booking->customer ? $booking->customer->email." | " : "- | "; + $tmp .= $booking->customer ? $booking->customer->firstname." ".$booking->customer->name." | " : "- | "; + $tmp .= $booking->travel_country_id ? $booking->travel_country->name." | " : "- | "; + $tmp .= $booking->travelagenda_id ? $booking->travel_agenda->name."" : "-"; + + $customers[$booking->id] = $tmp; + } + + // return TravelAgenda::whereIn('id', $ret)->get()->pluck('name', 'id'); + + if($data['action'] === "send-customer-mail"){ + $value = new Collection(); + $value->id = "add"; + $value->customers = $customers; + $value->message = "Sehr #geehrte/r# #Anrede# #Vorname# #Nachname#,\n\nText ...."; + $data['title'] = "E-Mail-Nachricht an Auswahl"; + $url = route('requests_send_customer_mail'); + $ret = view("customer.mail.modal-mail", compact('data','value', 'url') )->render(); + } + + } + return response()->json(['response' => $data, 'html'=>$ret]); + }*/ + + + public function sendMail(CustomerMailRepository $customerMailRepository){ + $data = Request::all(); + $customerMailRepository->sendAndStore($data); + \Session()->flash('alert-success', "Mails gesendet!"); + return back(); + } + + public function replyMail(CustomerMailRepository $customerMailRepository){ + $data = Request::all(); + $customerMailRepository->replyStore($data); + \Session()->flash('alert-success', "Mail gespeichert!"); + return back(); + } + public function getCustomerMails() { $query = CustomerMail::with('booking')->with('customer'); @@ -109,6 +167,25 @@ class CustomerMailController extends Controller ->rawColumns(['action_edit', 'send', 'customer_id', 'booking_id', 'id']) ->make(true); } + + + public function uploadAttachment($id){ + + $fileRepo = new FileRepository(new CustomerFile()); + if($id === 'tmp'){ + $fileRepo->_set('disk', 'customer'); + $fileRepo->_set('dir', '/attachment/'.date('Y/m').'/'); + $fileRepo->_set('customer_id', NULL); + $fileRepo->_set('customer_mail_id', NULL); + $fileRepo->_set('identifier', 'tmp'); + return $fileRepo->uploadFile(Request::all()); + } + + return Response::json([ + 'error' => true, + 'code' => 200 + ], 200); + } } diff --git a/app/Http/Controllers/RequestController.php b/app/Http/Controllers/RequestController.php index 0619b5f..da0bc9a 100755 --- a/app/Http/Controllers/RequestController.php +++ b/app/Http/Controllers/RequestController.php @@ -3,11 +3,11 @@ namespace App\Http\Controllers; use App\Models\Booking; +use App\Models\Status; use App\Models\Sym\TravelCountry; use App\Models\TravelAgenda; use App\Repositories\CustomerMailRepository; use Carbon\Carbon; -use Illuminate\Database\Eloquent\Collection; use Request; use DataTables; @@ -23,22 +23,36 @@ class RequestController extends Controller public function index($step = false) { - $d = Booking::join('travel_country', 'travel_country_id', '=', 'travel_country.id')->get()->pluck('name', 'travel_country_id')->unique()->toArray(); + $travel_countries = Booking::join('travel_country', 'travel_country_id', '=', 'travel_country.id')->get()->pluck('name', 'travel_country_id')->unique()->toArray(); + + $filter_lead_status = Status::get()->pluck('name', 'id')->toArray(); + + $filter_paying_out = Booking::$paying_out_types; + $filter_paying_out_status = Booking::$paying_out_status_types; + $filter_refund = Booking::$refund_types; + $filter_xx_tkt = Booking::$xx_tkt_types; + + unset($filter_paying_out[0]); + unset($filter_refund[0]); + unset($filter_xx_tkt[0]); $data = [ 'step' => $step, - 'travel_countries' => $d, + 'travel_countries' => $travel_countries, + 'filter_lead_status' => $filter_lead_status, + 'filter_paying_out' => $filter_paying_out, + 'filter_paying_out_status' => $filter_paying_out_status, + 'filter_refund' => $filter_refund, + 'filter_xx_tkt' => $filter_xx_tkt, ]; return view('request.index', $data); } public function detail($id) { - - $d = Booking::join('travel_country', 'travel_country_id', '=', 'travel_country.id')->get()->pluck('name', 'travel_country_id')->unique()->toArray(); - + $travel_countries = Booking::join('travel_country', 'travel_country_id', '=', 'travel_country.id')->get()->pluck('name', 'travel_country_id')->unique()->toArray(); $data = [ - 'travel_countries' => $d, + 'travel_countries' => $travel_countries, ]; return view('request.index', $data); } @@ -59,7 +73,7 @@ class RequestController extends Controller */ private function getSearchRequests(){ - $query = Booking::where('lead_id', '!=', NULL); + $query = Booking::with('lead')->where('lead_id', '!=', NULL); if(Request::get('full_firstname_search') != ""){ $query->where('participant_firstname', 'LIKE', '%'.Request::get('full_firstname_search').'%'); @@ -69,18 +83,34 @@ class RequestController extends Controller $query->where('participant_name', 'LIKE', '%'.Request::get('full_lastname_search').'%'); } - if(Request::get('travel_option_country_id') != ""){ $country_ids = TravelCountry::where('contact_lands', 'LIKE', '%"'.Request::get('travel_option_country_id').'"%')->get()->pluck('id'); $country_ids[] = Request::get('travel_option_country_id'); $query->whereIn('travel_country_id', $country_ids); - } if(Request::get('travel_option_agenda_id') != ""){ $query->where('travelagenda_id', '=', Request::get('travel_option_agenda_id')); - } + if(Request::get('travel_option_lead_status_id') != ""){ + $query->whereHas('lead', function ($q) { + $q->where('status_id', '=', Request::get('travel_option_lead_status_id')); + }); + } + if(Request::get('travel_option_paying_out') != ""){ + $query->where('paying_out', '=', Request::get('travel_option_paying_out')); + } + if(Request::get('travel_option_paying_out_status') != ""){ + $query->where('paying_out_status', '=', Request::get('travel_option_paying_out_status')); + } + if(Request::get('travel_option_refund') != ""){ + $query->where('refund', '=', Request::get('travel_option_refund')); + } + if(Request::get('travel_option_xx_tkt') != ""){ + $query->where('xx_tkt', '=', Request::get('travel_option_xx_tkt')); + } + + // $query->where('end_date', '<=', $now); if(Request::get('travel_option_search')){ $now = Carbon::now(); @@ -172,7 +202,6 @@ class RequestController extends Controller $query->where('travel_documents', '=', Request::get('sort_travel_documents')); } - if(Request::get('full_lead_id_search') != ""){ $query->where('lead_id', 'LIKE', '%'.Request::get('full_lead_id_search'). '%'); } @@ -194,8 +223,7 @@ class RequestController extends Controller $data = Request::all(); $ret = ""; if(Request::ajax()){ - - $customers = []; + $data['customers'] = []; $query = $this->getSearchRequests(); $bookings = $query->orderBy('id', 'DESC')->limit(50)->get(); foreach ($bookings as $booking){ @@ -204,41 +232,19 @@ class RequestController extends Controller $tmp .= $booking->customer ? $booking->customer->firstname." ".$booking->customer->name." | " : "- | "; $tmp .= $booking->travel_country_id ? $booking->travel_country->name." | " : "- | "; $tmp .= $booking->travelagenda_id ? $booking->travel_agenda->name."" : "-"; - - $customers[$booking->id] = $tmp; + $data['customers'][$booking->id] = $tmp; } - - // return TravelAgenda::whereIn('id', $ret)->get()->pluck('name', 'id'); - - if($data['action'] === "send-customer-mail"){ - $value = new Collection(); - $value->id = "add"; - $value->customers = $customers; - $value->message = "Sehr #geehrte/r# #Anrede# #Vorname# #Nachname#,\n\nText ...."; - $data['title'] = "E-Mail-Nachricht an Auswahl"; - $url = route('requests_send_customer_mail'); - $ret = view("request.modal-mail", compact('data','value', 'url') )->render(); - } - + $ret = CustomerMailRepository::loadModal($data); } return response()->json(['response' => $data, 'html'=>$ret]); } - public function sendCustomerMail(CustomerMailRepository $customerMailRepository){ - $data = Request::all(); - - $customerMailRepository->sendAndStore($data); - \Session()->flash('alert-success', "Mails gesendet!"); - - return back(); - } - public function getRequests() { $query = $this->getSearchRequests(); - return \DataTables::eloquent($query) + return DataTables::eloquent($query) ->addColumn('action_lead_edit', function (Booking $booking) { return ''; }) @@ -276,7 +282,56 @@ class RequestController extends Controller return ''.($booking->sf_guard_user_id? $booking->sf_guard_user->first_name." ".$booking->sf_guard_user->last_name : "-").''; }) ->addColumn('lead.status_id', function (Booking $booking) { - return ''.($booking->lead->status_id ? $booking->lead->status->name : "-").''; + //umbuchen + if($booking->lead->status_id){ + $color = $booking->lead->status->color; + $icon = ""; + if($booking->lead->status_id == 14 && $booking->lead->is_rebook){ + $color = '#94ae59'; + $icon = ' '; + } + if($booking->lead->status_id == 14 && !$booking->lead->is_rebook){ + $icon = ' '; + } + return ''.$icon.$booking->lead->status->name.''; + + } + return '-'; + }) + ->addColumn('last_customer_email', function (Booking $booking) { + //umbuchen + if($booking->customer_mails->count()){ + + $customer_mail = $booking->customer_mails_sent_at->last(); + + return ''.$customer_mail->sent_at.''; + + } + return '-'; + }) + + ->addColumn('paying_out', function (Booking $booking) { + $icon = ""; + $badge = $booking->getPayingOutColor(); + if($booking->paying_out_status == 1){ //offen + $icon = ' '; + } + if($booking->paying_out_status == 2){ //erledigt + $badge = 'success'; + $icon = ' '; + } + return ''.$icon.$booking->getPayingOutType().''; + }) + ->addColumn('paying_out_status', function (Booking $booking) { + return ''.$booking->getPayingOutStatusType().''; + }) + + + ->addColumn('refund', function (Booking $booking) { + return ''.$booking->getRefundTypeList().''; + }) + ->addColumn('xx_tkt', function (Booking $booking) { + return ''.$booking->getXxTktTypeList().''; }) /* ->filterColumn('travel_country_id', function($query, $keyword) { @@ -301,8 +356,12 @@ class RequestController extends Controller ->orderColumn('sf_guard_user_id', 'sf_guard_user_id $1') ->orderColumn('start_date', 'start_date $1') ->orderColumn('end_date', 'end_date $1') + ->orderColumn('paying_out', 'paying_out $1') + ->orderColumn('paying_out_status', 'paying_out_status $1') + ->orderColumn('refund', 'refund_date $1') + ->orderColumn('xx_tkt', 'xx_tkt_date $1') ->orderColumn('travel_documents', 'travel_documents $1') - ->rawColumns(['action_lead_edit', 'lead_id', 'participant_firstname', 'participant_name', 'action_booking_edit', 'travel_country_id', 'travelagenda_id', 'sf_guard_user_id', 'lead.status_id', 'id', 'travel_documents']) + ->rawColumns(['action_lead_edit', 'lead_id', 'participant_firstname', 'participant_name', 'action_booking_edit', 'travel_country_id', 'travelagenda_id', 'sf_guard_user_id', 'lead.status_id', 'last_customer_email', 'id', 'travel_documents', 'paying_out', 'paying_out_status', 'refund', 'xx_tkt']) ->make(true); } } diff --git a/app/Http/Controllers/Settings/BookingStatusController.php b/app/Http/Controllers/Settings/BookingStatusController.php new file mode 100755 index 0000000..12bb0ab --- /dev/null +++ b/app/Http/Controllers/Settings/BookingStatusController.php @@ -0,0 +1,60 @@ +middleware('admin'); + } + + public function index($step = false) + { + $data = [ + 'status' => Status::all(), + ]; + return view('settings.status.index', $data); + } + + + public function update(){ + + $data = Request::all(); + if($data['id'] === "new"){ + $model = Status::create([ + 'name' => $data['name'], + 'color' => $data['color'], + 'handling_days' => $data['handling_days'], + ]); + }else{ + $model = Status::find($data['id']); + $model->name = $data['name']; + $model->color = $data['color']; + $model->handling_days = $data['handling_days']; + $model->save(); + } + + \Session()->flash('alert-save', '1'); + return redirect(route('admin_settings_booking_status')); + } + + public function delete($id){ + + $model = Status::findOrFail($id); + $model->delete(); + \Session()->flash('alert-success', 'Eintrag gelöscht'); + return redirect()->back(); + + } + +} + + diff --git a/app/Http/Controllers/Settings/TravelAgendaController.php b/app/Http/Controllers/Settings/TravelAgendaController.php index 59e88f4..da6a361 100755 --- a/app/Http/Controllers/Settings/TravelAgendaController.php +++ b/app/Http/Controllers/Settings/TravelAgendaController.php @@ -28,7 +28,7 @@ class TravelAgendaController extends Controller public function update(){ $data = Request::all(); - if($data['id'] == "new"){ + if($data['id'] === "new"){ $model = TravelAgenda::create([ 'name' => $data['name'], 'active' => isset($data['active']) ? true : false, diff --git a/app/Mail/MailSendInfo.php b/app/Mail/MailSendInfo.php index 55c89bd..df69e2a 100644 --- a/app/Mail/MailSendInfo.php +++ b/app/Mail/MailSendInfo.php @@ -12,23 +12,39 @@ class MailSendInfo extends Mailable { use Queueable, SerializesModels; - protected $travel_user_booking_fewo; public $subject; protected $content; + public $files; - public function __construct($subject, $content) + public function __construct($subject, $content, $files = []) { $this->subject = $subject; $this->content = $content; + $this->files = $files; } public function build() { - return $this->view('emails.content')->with([ + + + $message = $this->view('emails.content')->with([ 'content' => $this->content, 'greetings' => __('Best regards'), ]); + + /* foreach ($this->files as $file) { + $message->attach($file->getPath(),[ + 'as' => $file->original_name, + 'mime' => $file->mine, + ]); // attach each file + }*/ + + foreach ($this->files as $file) { + $message->attach((string) $file->getPath()); // attach each file + } + + return $message; } } \ No newline at end of file diff --git a/app/Models/Booking.php b/app/Models/Booking.php index 176f35f..3a2146e 100644 --- a/app/Models/Booking.php +++ b/app/Models/Booking.php @@ -142,15 +142,20 @@ class Booking extends Model 'price_total' => 'float', 'deposit_total' => 'float', 'final_payment' => 'float', - 'travelagenda_id' => 'int' - ]; + 'travelagenda_id' => 'int', + 'paying_out' => 'int', + 'refund' => 'int', + 'xx_tkt' => 'int', + + ]; protected $dates = [ 'booking_date', 'start_date', 'end_date', 'participant_birthdate', - 'final_payment_date' + 'final_payment_date', + 'refund_date' ]; protected $fillable = [ @@ -184,9 +189,69 @@ class Booking extends Model 'deposit_total', 'final_payment', 'final_payment_date', - 'travelagenda_id' + 'travelagenda_id', + 'paying_out', + 'paying_out_status', + 'refund', + 'refund_date', + 'xx_tkt', + 'xx_tkt_date', ]; + public static $paying_out_types = [ + 0 => '-', + 1 => 'Gutschein', + 2 => 'Auszahlung', + 3 => 'Umbuchung', + 4 => 'AZ + GS', + 5 => 'AZ o. FP', + ]; + + public static $refund_types = [ + 0 => '-', + 1 => 'eingereicht', + 2 => 'erledigt', + ]; + + public static $xx_tkt_types = [ + 0 => '-', + 1 => 'offen', + 2 => 'erledigt', + ]; + + public static $paying_out_status_types = [ + 0 => '-', + 1 => 'offen', + 2 => 'erledigt', + ]; + + + protected $paying_out_colors = [ + 0 => '', + 1 => 'info', + 2 => 'dark', + 3 => 'warning', + 4 => 'warning', + 5 => 'warning', + ]; + + protected $refund_colors = [ + 0 => '', + 1 => 'warning', + 2 => 'success', + ]; + + protected $xx_tkt_colors = [ + 0 => '', + 1 => 'danger', + 2 => 'success', + ]; + + protected $paying_out_status_colors = [ + 0 => '', + 1 => 'danger', + 2 => 'success', + ]; /*public function branch() { return $this->belongsTo(Branch::class); @@ -297,6 +362,17 @@ class Booking extends Model { return $this->hasMany(ServiceProviderEntry::class); } + + + public function customer_mails() + { + return $this->hasMany(CustomerMail::class, 'booking_id', 'id'); + } + + public function customer_mails_sent_at() + { + return $this->hasMany(CustomerMail::class, 'booking_id')->orderBy('sent_at', 'ASC'); + } /* public function travel_insurances() { @@ -437,4 +513,57 @@ class Booking extends Model return $this->ev_number; } + public function getPayingOutType(){ + return isset(self::$paying_out_types[$this->paying_out]) ? self::$paying_out_types[$this->paying_out] : '-'; + } + + public function getPayingOutStatusType(){ + return isset(self::$paying_out_status_types[$this->paying_out_status]) ? self::$paying_out_status_types[$this->paying_out_status] : '-'; + } + + public function getRefundType(){ + return isset(self::$refund_types[$this->refund]) ? self::$refund_types[$this->refund] : '-'; + } + + public function getXxTktType(){ + return isset(self::$xx_tkt_types[$this->xx_tkt]) ? self::$xx_tkt_types[$this->xx_tkt] : '-'; + } + + public function getXxTktTypeList(){ + if(isset(self::$xx_tkt_types[$this->xx_tkt])){ + if($this->xx_tkt == 1 && $this->xx_tkt_date){ + return Carbon::parse($this->xx_tkt_date)->format('d.m.Y'); + } + return self::$xx_tkt_types[$this->xx_tkt]; + } + return "-"; + } + + public function getRefundTypeList(){ + if(isset(self::$refund_types[$this->refund])){ + if($this->refund == 1 && $this->refund_date){ + return Carbon::parse($this->refund_date)->format('d.m.Y'); + } + return self::$refund_types[$this->refund]; + } + return "-"; + } + + public function getPayingOutColor(){ + return isset($this->paying_out_colors[$this->paying_out]) ? $this->paying_out_colors[$this->paying_out] : ''; + } + + public function getPayingOutStatusColor(){ + return isset($this->paying_out_status_colors[$this->paying_out_status]) ? $this->paying_out_status_colors[$this->paying_out_status] : ''; + } + + public function getRefundColor(){ + return isset($this->refund_colors[$this->refund]) ? $this->refund_colors[$this->refund] : '-'; + } + + public function getXxTktColor(){ + return isset($this->xx_tkt_colors[$this->xx_tkt]) ? $this->xx_tkt_colors[$this->xx_tkt] : '-'; + } + + } diff --git a/app/Models/Coupon.php b/app/Models/Coupon.php index 873bd76..39a3c4b 100644 --- a/app/Models/Coupon.php +++ b/app/Models/Coupon.php @@ -72,7 +72,8 @@ class Coupon extends Model 'issue_date', 'valid_date', 'is_redeemed', - 'redeem_date' + 'redeem_date', + 'text' ]; public function booking() diff --git a/app/Models/CustomerFile.php b/app/Models/CustomerFile.php new file mode 100644 index 0000000..a25250a --- /dev/null +++ b/app/Models/CustomerFile.php @@ -0,0 +1,106 @@ + 'int', + 'customer_mail_id' => 'int', + 'size' => 'int' + ]; + + public static $icon_ext = [ + 'default' => 'fa fa-file', + 'pdf'=> 'fa fa-file-pdf', + 'jpg'=> 'fa fa-file-image', + 'png'=> 'fa fa-file-image', + + ]; + protected $fillable = [ + 'customer_id', + 'customer_mail_id', + 'identifier', + 'filename', + 'dir', + 'original_name', + 'ext', + 'mine', + 'size' + ]; + + public function customer() + { + return $this->belongsTo(Customer::class); + } + + public function customer_mail() + { + return $this->belongsTo(CustomerMail::class); + } + + public function user() + { + return $this->belongsTo(User::class); + } + + public function getIconExt(){ + return isset(self::$icon_ext[$this->ext]) ? self::$icon_ext[$this->ext] : self::$icon_ext['default']; + } + + public function getURL(){ + return route('storage_file', [$this->id, 'customer']); + } + + public function getPath(){ + return \Storage::disk('customer')->path($this->dir."/".$this->filename); + + } + + public function formatBytes($precision = 2) + { + $size = $this->size; + + if ($size > 0) { + $size = (int) $size; + $base = log($size) / log(1024); + $suffixes = array(' bytes', ' KB', ' MB', ' GB', ' TB'); + + return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)]; + } else { + return $size; + } + } +} diff --git a/app/Models/CustomerMail.php b/app/Models/CustomerMail.php index b081be0..6f21598 100644 --- a/app/Models/CustomerMail.php +++ b/app/Models/CustomerMail.php @@ -7,15 +7,19 @@ namespace App\Models; use Carbon\Carbon; +use Illuminate\Database\Eloquent\Collection; use Reliese\Database\Eloquent\Model; /** * Class CustomerMail - * + * * @property int $id * @property int $booking_id * @property int $customer_id * @property int $lead_id + * @property bool $is_answer + * @property int $reply_id + * @property string $email * @property string $subject * @property string $message * @property bool $send @@ -26,28 +30,15 @@ use Reliese\Database\Eloquent\Model; * @property Carbon $delivered_at * @property Carbon $created_at * @property Carbon $updated_at + * * @property Booking $booking * @property Customer $customer + * @property CustomerMail $customer_mail * @property Lead $lead + * @property Collection|CustomerFile[] $customer_files + * @property Collection|CustomerMail[] $customer_mails + * * @package App\Models - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail newModelQuery() - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail newQuery() - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail query() - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereBookingId($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereCreatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereCustomerId($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereDeliveredAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereError($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereFail($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereId($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereLeadId($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereMessage($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereScheduledAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereSend($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereSentAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereSubject($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\CustomerMail whereUpdatedAt($value) - * @mixin \Eloquent */ class CustomerMail extends Model { @@ -57,6 +48,8 @@ class CustomerMail extends Model 'booking_id' => 'int', 'customer_id' => 'int', 'lead_id' => 'int', + 'is_answer' => 'bool', + 'reply_id' => 'int', 'send' => 'bool', 'fail' => 'bool' ]; @@ -71,7 +64,9 @@ class CustomerMail extends Model 'booking_id', 'customer_id', 'lead_id', - 'email', + 'is_answer', + 'reply_id', + 'email', 'subject', 'message', 'send', @@ -92,11 +87,27 @@ class CustomerMail extends Model return $this->belongsTo(Customer::class); } + public function customer_mail() + { + return $this->belongsTo(CustomerMail::class, 'reply_id'); + } + public function lead() { return $this->belongsTo(Lead::class); } + public function customer_files() + { + return $this->hasMany(CustomerFile::class); + } + + public function customer_mails() + { + return $this->hasMany(CustomerMail::class, 'reply_id'); + } + + public function getSentAtAttribute(){ if(!$this->attributes['sent_at']){ return ""; } return Carbon::parse($this->attributes['sent_at'])->format(\Util::formatDateTimeDB()); diff --git a/app/Models/Lead.php b/app/Models/Lead.php index f91f98c..98592c2 100644 --- a/app/Models/Lead.php +++ b/app/Models/Lead.php @@ -105,7 +105,8 @@ class Lead extends Model 'travelagenda_id' => 'int', 'sf_guard_user_id' => 'int', 'is_closed' => 'bool', - 'initialcontacttype_id' => 'int', + 'is_rebook' => 'bool', + 'initialcontacttype_id' => 'int', 'searchengine_id' => 'int', 'status_id' => 'int', 'website_id' => 'int', @@ -134,6 +135,7 @@ class Lead extends Model 'remarks', 'sf_guard_user_id', 'is_closed', + 'is_rebook', 'initialcontacttype_id', 'searchengine_id', 'searchengine_keywords', diff --git a/app/Models/Status.php b/app/Models/Status.php index 9900caa..6f5b36a 100644 --- a/app/Models/Status.php +++ b/app/Models/Status.php @@ -1,25 +1,26 @@ belongsTo('App\Models\Status', 'status_id', 'id'); - } + public $timestamps = false; + + protected $casts = [ + 'handling_days' => 'int' + ]; + + protected $fillable = [ + 'name', + 'handling_days', + 'color' + ]; + + public function leads() + { + return $this->hasMany(Lead::class); + } + + /*public function status_histories() + { + return $this->hasMany(StatusHistory::class); + }*/ } diff --git a/app/Repositories/CustomerMailRepository.php b/app/Repositories/CustomerMailRepository.php index 2d6849c..529e8a0 100644 --- a/app/Repositories/CustomerMailRepository.php +++ b/app/Repositories/CustomerMailRepository.php @@ -6,7 +6,9 @@ namespace App\Repositories; use App\Mail\MailSendFeWoService; use App\Mail\MailSendInfo; use App\Models\Booking; +use App\Models\CustomerFile; use App\Models\CustomerMail; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\Mail; @@ -25,36 +27,80 @@ class CustomerMailRepository extends BaseRepository { public function sendAndStore($data){ if(isset($data['send_mail_to']) && is_array($data['send_mail_to'])) { + //has Attachments + $customer_files = []; + if(isset($data['message_attachment_id']) && is_array($data['message_attachment_id'])){ + foreach ($data['message_attachment_id'] as $message_attachment_id){ + if($CustomerFile = CustomerFile::find($message_attachment_id)){ + $customer_files[] = $CustomerFile; + } + } + } + foreach ($data['send_mail_to'] as $booking_id => $on) { $booking = Booking::find($booking_id); if ($booking->customer) { $message = $this->prepareContent($booking, $data['message']); $subject = $this->prepareContent($booking, $data['subject']); - $customer_mail = $this->store($booking, $subject, $message); - $this->sendMail($customer_mail); + $reply_id = isset($data['customer_mail_id']) ? $data['customer_mail_id'] : NULL; + $customer_mail = $this->store($booking, $subject, $message, $booking->customer->email, false, $reply_id); + $this->sendMail($customer_mail, $customer_files); + foreach ($customer_files as $file) { + $file->customer_id = $booking->customer_id; + $file->customer_mail_id = $customer_mail->id; + $file->save(); + } } } } } - public function store($booking, $subject, $message){ + public function replyStore($data){ + if(isset($data['booking_id']) && $booking = Booking::find($data['booking_id'])) { + //has Attachments + $customer_files = []; + if(isset($data['message_attachment_id']) && is_array($data['message_attachment_id'])){ + foreach ($data['message_attachment_id'] as $message_attachment_id){ + if($CustomerFile = CustomerFile::find($message_attachment_id)){ + $customer_files[] = $CustomerFile; + } + } + } + if ($booking->customer) { + $mail_from = isset($data['mail_from']) ? $data['mail_from'] : $booking->customer->email; + $sent_at = isset($data['sent_at']) ? \Carbon::parse(str_replace("- ", "", $data['sent_at'])) : now(); + $reply_id = isset($data['customer_mail_id']) ? $data['customer_mail_id'] : NULL; + $customer_mail = $this->store($booking, $data['subject'], $data['message'], $mail_from, true, $reply_id, $sent_at); + foreach ($customer_files as $file) { + $file->customer_id = $booking->customer_id; + $file->customer_mail_id = $customer_mail->id; + $file->save(); + } + } + + } + } + + public function store($booking, $subject, $message, $mail_from, $is_answer = false, $reply_id = NULL, $sent_at=false){ $customer_mail = CustomerMail::create([ 'booking_id' => $booking->id, 'customer_id' => $booking->customer_id, 'lead_id' => $booking->lead_id, - 'email' => $booking->customer->email, + 'is_answer' => $is_answer, + 'reply_id' => $reply_id, + 'email' => $mail_from, 'subject' => $subject, 'message' => $message, - + 'sent_at' => $sent_at ? $sent_at : now(), ]); return $customer_mail; } - private function sendMail($customer_mail){ + private function sendMail($customer_mail, $customer_files){ try{ - Mail::to($customer_mail->email)->send(new MailSendInfo($customer_mail->subject, $customer_mail->message)); + Mail::to($customer_mail->email)->send(new MailSendInfo($customer_mail->subject, $customer_mail->message, $customer_files)); } catch(\Exception $e){ // Never reached @@ -68,6 +114,9 @@ class CustomerMailRepository extends BaseRepository { $customer_mail->save(); return true; } + + + private function prepareContent($booking, $content){ $first_name = $booking->customer->firstname; @@ -76,7 +125,6 @@ class CustomerMailRepository extends BaseRepository { $program = $booking->travelagenda_id ? $booking->travel_agenda->name : "-"; $salutation = $booking->customer->salutation->name; - $dear = $booking->customer->salutation_id == 1 ? 'geehrter' : 'geehrte'; $search = ['#geehrte/r#', '#Anrede#', '#Vorname#', '#Nachname#', '#Reiseland#', '#Programm#']; $replace = [$dear, $salutation, $first_name, $last_name, $country, $program, $salutation]; @@ -86,4 +134,70 @@ class CustomerMailRepository extends BaseRepository { } + public static function loadModal($data) + { + + $value = new Collection(); + $value->title = ""; + $value->subtitle = ""; + $value->url = ""; + if ($data['action'] === "new-customer-mail") { + if (isset($data['booking_id'])) { + $value->id = $data['booking_id']; + $value->customers = $data['customers']; + $value->subject = ""; + $value->message = "Sehr #geehrte/r# #Anrede# #Vorname# #Nachname#,\n\nText ...."; + $value->s_placeholder = "Betreff der E-Mail"; + $value->m_placeholder = "Nachricht der E-Mail"; + + if(isset($data['customer_mail_id']) && $customer_mail = CustomerMail::find($data['customer_mail_id'])){ + $value->subject = "Re: ".$customer_mail->subject; + $value->customer_mail = $customer_mail; + } + + $value->title = "E-Mail- Nachricht an Kunden senden"; + $value->subtitle = "Dem Kunden wird eine E-Mail zugesendet."; + if($data['id'] === 'reply-send'){ + $value->title = "E-Mail Antwort an Kunden senden"; + $value->subtitle = "Dem Kunden wird eine E-Mail zugesendet, die im System als Antwort gespeichert wird."; + } + $value->url = $data['url']; + return view("customer.mail.modal-new-mail", compact('data', 'value'))->render(); + } + } + + if ($data['action'] === "show-customer-mail") { + if (isset($data['customer_mail_id']) && $customer_mail = CustomerMail::find($data['customer_mail_id'])) { + $value->url = $data['url']; + $value->title = "E-Mail Ansicht"; + return view("customer.mail.modal-show-mail", compact('data', 'value', 'customer_mail'))->render(); + } + } + + if ($data['action'] === "reply-customer-mail") { + if (isset($data['booking_id']) && $booking = Booking::find($data['booking_id'])) { + $value->id = $data['booking_id']; + $value->booking = $booking; + $value->message = ""; + $value->subject = ""; + $value->s_placeholder = "Betreff des Kunden"; + $value->m_placeholder = "Nachricht des Kunden"; + if(isset($data['customer_mail_id']) && $customer_mail = CustomerMail::find($data['customer_mail_id'])){ + $value->subject = "Re: ".$customer_mail->subject; + $value->customer_mail = $customer_mail; + } + $value->title = "E-Mail Antwort speichern"; + $value->subtitle = "Die E-Mail wird im System gespeichert."; + if($data['id'] === 'reply-save'){ + $value->subtitle = "Die E-Mail wird im System als Antwort gespeichert."; + + } + $value->url = $data['url']; + + return view("customer.mail.modal-new-mail", compact('data', 'value'))->render(); + } + + } + } + } \ No newline at end of file diff --git a/app/Repositories/FileRepository.php b/app/Repositories/FileRepository.php new file mode 100644 index 0000000..828bd64 --- /dev/null +++ b/app/Repositories/FileRepository.php @@ -0,0 +1,147 @@ +model = $model; + + $this->rules = [ + 'file' => 'required|mimes:pdf,jpeg,png|max:32768' + ]; + $this->messages = [ + 'file.mimes' => 'Datei ist kein PDF/JPG/PNG Format', + 'file.required' => 'PDF/JPG/PNG-Datei wird benötigt' + ]; + } + + public function _set($name, $value){ + $this->{$name} = $value; + } + + /* public function load($id){ + $this->model = $id; + } + */ + + + public function uploadFile( $form_data ) + { + + $validator = Validator::make($form_data, $this->rules, $this->messages); + + if ($validator->fails()) { + return Response::json([ + 'error' => true, + 'message' => $validator->messages()->first(), + 'code' => 400 + ], 400); + } + $file = $form_data['file']; + + $originalName = $file->getClientOriginalName(); + $extension = $file->getClientOriginalExtension(); + $mine = $file->getClientMimeType(); + $size = $file->getClientSize(); + + + $originalNameWithoutExt = substr($originalName, 0, strlen($originalName) - strlen($extension) - 1); + $filename = Util::sanitize($originalNameWithoutExt, true, false, true); + $allowed_filename = uniqid() . '_' . $filename.".".$extension; + + //$dir = $this->model->getInvoiceStorageAttDir(); + + if(!Storage::disk($this->disk)->exists( $this->dir )){ + Storage::disk($this->disk)->makeDirectory($this->dir); //creates directory + } + Storage::disk($this->disk)->put($this->dir.$allowed_filename, file_get_contents($file->getRealPath())); + + $customer_file = CustomerFile::create([ + 'customer_id' => $this->customer_id, + 'customer_mail_id' => $this->customer_mail_id, + 'identifier' => $this->identifier, + 'filename' => $allowed_filename, + 'dir' => $this->dir, + 'original_name' => $originalName, + 'ext' => $extension, + 'mine' => $mine, + 'size' => $size + ]); + + return Response::json([ + 'error' => false, + 'filename' => $allowed_filename, + 'file_id' =>$customer_file->id, + 'file_data' => $extension, + 'file_icon' => $customer_file->getIconExt(), + 'file_format_bytes' => $customer_file->formatBytes(), + 'file_url' => $customer_file->getURL(), + 'redirect' => '', + 'code' => 200 + ], 200); + } + + /* public function createFile(Request $request) + { + $locale = \App::getLocale(); + $data = [ + 'step' => 2, + 'locale' => $locale, + ]; + $rules = array( + 'network_name' => 'required|max:255', + 'input_file_now' => 'required|mimes:png,pdf,jpg,jpeg|max:30000' + ); + $validator = Validator::make(Input::all(), $rules); + + if ($validator->fails()) { + // get the error messages from the validator + $messages = $validator->messages(); + // redirect our user back to the form with the errors from the validator + return view('user.register_complete', $data)->withErrors($validator); + + } else { + $user = \Auth::user(); + if(!$user->account->network_name){ + $file = request()->file('input_file_now'); + //$ext = $file->guessClientExtension(); + //$file->storeAs('user/' . $user->id .'/verification'); + $data = $file->store('user/' . $user->id .'/verification'); + $account = $user->account; + $account->network_name = Input::get('network_name'); + $account->network_verification = basename($data); + $account->save(); + + $user->role_id = 2; //set as User by default! + $user->save(); + + + } + + return redirect('complete_register'); + //return view('user.register_complete', $data); + } + }*/ + + +} \ No newline at end of file diff --git a/app/Services/Util.php b/app/Services/Util.php index db1c6ea..7eaeb3b 100644 --- a/app/Services/Util.php +++ b/app/Services/Util.php @@ -29,6 +29,14 @@ class Util return 'd.m.Y - H:i'; } + public static function _format_date($date, $to = 'date'){ + if($to === 'datetime'){ + return \Carbon::parse($date)->format(\Util::formatDateTimeDB()); + } + //date + return \Carbon::parse($date)->format(\Util::formatDateDB()); + } + public static function _format_number($value){ return preg_replace("/[^0-9,]/", "", $value); diff --git a/app/helpers.php b/app/helpers.php index 7aaa3c6..aa1d409 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -17,6 +17,13 @@ if (! function_exists('make_v2_url')) { } } +if (! function_exists('_format_date')) { + function _format_date($date, $to = 'date') + { + return \App\Services\Util::_format_date($date, $to); + } +} + if (! function_exists('array_to_json')) { function array_to_json($value) diff --git a/config/debugbar.php b/config/debugbar.php index 0495fcf..ebc2536 100644 --- a/config/debugbar.php +++ b/config/debugbar.php @@ -66,7 +66,7 @@ return [ | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools. */ - 'capture_ajax' => true, + 'capture_ajax' => false, 'add_ajax_timing' => false, /* diff --git a/config/filesystems.php b/config/filesystems.php index 13b8615..d96f81a 100755 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -54,6 +54,12 @@ return [ 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], + 'customer' => [ + 'driver' => 'local', + 'root' => storage_path('app/customer'), + 'url' => env('APP_URL').'/storage/customer', + 'visibility' => 'public', + ], 'fewo_invoices' => [ 'driver' => 'local', 'root' => storage_path('app/fewo/invoices'), diff --git a/config/permissions.php b/config/permissions.php index 294de3f..8384ff1 100755 --- a/config/permissions.php +++ b/config/permissions.php @@ -36,6 +36,7 @@ return [ 'sua-st-tp' => ['name' => 'SUPERADMIN > Einstellungen > Reisprogramme' , 'color' => 'superadmin'], 'sua-st-tc' => ['name' => 'SUPERADMIN > Einstellungen > Reiseländer' , 'color' => 'superadmin'], 'sua-st-tn' => ['name' => 'SUPERADMIN > Einstellungen > Nationalitäten' , 'color' => 'superadmin'], + 'sua-st-bs' => ['name' => 'SUPERADMIN > Einstellungen > Reisestatus' , 'color' => 'superadmin'], 'sua-st-ke' => ['name' => 'SUPERADMIN > Einstellungen > Keywords' , 'color' => 'superadmin'], 'sua-re' => ['name' => 'SUPERADMIN > Export' , 'color' => 'superadmin'], 'sua-re-bo' => ['name' => 'SUPERADMIN > Export > Buchungen' , 'color' => 'superadmin'], diff --git a/database/migrations/2018_10_29_202123_create_booking_table.php b/database/migrations/2018_10_29_202123_create_booking_table.php index b031d35..945887d 100644 --- a/database/migrations/2018_10_29_202123_create_booking_table.php +++ b/database/migrations/2018_10_29_202123_create_booking_table.php @@ -22,7 +22,7 @@ class CreateBookingTable extends Migration $table->date('booking_date')->nullable(); $table->bigInteger('customer_id'); $table->bigInteger('lead_id')->nullable(); - $table->tinyInteger('new_drafts')->nullable(); + $table->tinyInteger('new_drafts')->nullable()->default(0); $table->integer('sf_guard_user_id'); $table->bigInteger('branch_id'); $table->decimal('service_fee', 10, 2)->nullable()->default(0.00); @@ -30,13 +30,11 @@ class CreateBookingTable extends Migration $table->bigInteger('travel_category_id')->nullable(); $table->bigInteger('pax')->nullable(); $table->bigInteger('coupon_id')->nullable(); - $table->dateTime('created_at'); - $table->dateTime('updated_at'); $table->string('title', 255)->nullable(); $table->date('start_date')->nullable(); $table->date('end_date')->nullable(); $table->bigInteger('website_id')->nullable(); - $table->string('travel_number', 30)->nullable(); + $table->string('travel_number', 80)->nullable(); $table->string('participant_name', 255)->nullable(); $table->string('participant_firstname', 255)->nullable(); $table->date('participant_birthdate')->nullable(); @@ -45,12 +43,22 @@ class CreateBookingTable extends Migration $table->string('merlin_knr', 255)->nullable(); $table->string('merlin_order_number', 255)->nullable(); $table->bigInteger('travel_company_id')->nullable(); + $table->tinyInteger('travel_documents')->nullable()->default(0); + $table->decimal('canceled', 5, 2)->nullable()->default(0.00); $table->decimal('price', 10, 2)->nullable(); + $table->decimal('price_canceled', 10, 2)->nullable(); $table->decimal('price_total', 10, 2)->nullable(); $table->decimal('deposit_total', 10, 2)->nullable(); $table->decimal('final_payment', 10, 2)->nullable(); $table->date('final_payment_date')->nullable(); $table->bigInteger('travelagenda_id')->nullable(); + $table->tinyInteger('paying_out')->nullable()->default(0); + $table->tinyInteger('paying_out_status')->nullable()->default(0); + $table->tinyInteger('refund')->nullable()->default(0); + $table->date('refund_date')->nullable(); + $table->tinyInteger('xx_tkt')->nullable()->default(0); + $table->dateTime('updated_at'); + $table->dateTime('created_at'); $table->index('lead_id', 'lead_id_idx'); $table->index('sf_guard_user_id', 'sf_guard_user_id_idx'); @@ -82,9 +90,6 @@ class CreateBookingTable extends Migration ')->onUpdate('RESTRICT'); }); - - - } /** diff --git a/database/migrations/2018_10_29_202125_create_lead_table.php b/database/migrations/2018_10_29_202125_create_lead_table.php index dd21170..50e6575 100644 --- a/database/migrations/2018_10_29_202125_create_lead_table.php +++ b/database/migrations/2018_10_29_202125_create_lead_table.php @@ -29,6 +29,7 @@ class CreateLeadTable extends Migration $table->text('remarks')->nullable(); $table->integer('sf_guard_user_id'); $table->tinyInteger('is_closed')->nullable()->default(0); + $table->tinyInteger('is_rebook')->nullable()->default(0); $table->bigInteger('initialcontacttype_id')->nullable(); $table->bigInteger('searchengine_id')->nullable(); $table->string('searchengine_keywords', 255)->nullable(); diff --git a/database/migrations/2020_01_29_152708_create_coupon_table.php b/database/migrations/2020_01_29_152708_create_coupon_table.php index 5921a1d..fc38dc5 100644 --- a/database/migrations/2020_01_29_152708_create_coupon_table.php +++ b/database/migrations/2020_01_29_152708_create_coupon_table.php @@ -27,6 +27,7 @@ class CreateCouponTable extends Migration $table->date('valid_date'); $table->tinyInteger('is_redeemed')->default(0); $table->date('redeem_date')->nullable(); + $table->text('text')->nullable(); $table->dateTime('created_at'); $table->dateTime('updated_at'); @@ -38,6 +39,7 @@ class CreateCouponTable extends Migration $table->foreign('customer_id', 'coupon_customer_id_customer_id')->references('id')->on('customer')->onDelete('RESTRICT ')->onUpdate('RESTRICT'); + }); diff --git a/database/migrations/2020_03_11_131408_create_customer_mails_table.php b/database/migrations/2020_03_11_131408_create_customer_mails_table.php index 755375e..e522985 100644 --- a/database/migrations/2020_03_11_131408_create_customer_mails_table.php +++ b/database/migrations/2020_03_11_131408_create_customer_mails_table.php @@ -20,6 +20,10 @@ class CreateCustomerMailsTable extends Migration $table->bigInteger('customer_id'); $table->bigInteger('lead_id')->nullable(); + $table->boolean('is_answer')->default(false); + $table->unsignedBigInteger('reply_id'); + + $table->string('email', 255); $table->string('subject', 255); $table->text('message')->nullable(); @@ -46,6 +50,10 @@ class CreateCustomerMailsTable extends Migration ->references('id') ->on('lead'); + $table->foreign('reply_id') + ->references('id') + ->on('customer_mails'); + }); } diff --git a/database/migrations/2020_03_19_152708_create_booking_storno_table.php b/database/migrations/2020_03_19_152708_create_booking_storno_table.php new file mode 100644 index 0000000..9220074 --- /dev/null +++ b/database/migrations/2020_03_19_152708_create_booking_storno_table.php @@ -0,0 +1,53 @@ +bigIncrements('id'); + $table->bigInteger('booking_id'); + $table->decimal('total', 10, 2)->default(0.00); + $table->decimal('storno', 10, 2)->default(0.00); + $table->date('storno_date')->nullable(); + //$table->UNKNOWN:longblob('binary_data'); + $table->tinyInteger('done')->nullable()->default(0); + $table->dateTime('created_at'); + $table->dateTime('updated_at'); + + $table->index('booking_id', 'booking_storno_booking_id_idx'); + + $table->foreign('booking_id', 'booking_storno_booking_id_booking_id')->references('id')->on('booking')->onDelete('CASCADE +')->onUpdate('RESTRICT'); + + + + }); + + + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('booking_storno'); + } +} diff --git a/database/migrations/2020_03_23_151608_create_customer_files_table.php b/database/migrations/2020_03_23_151608_create_customer_files_table.php new file mode 100644 index 0000000..e5a3853 --- /dev/null +++ b/database/migrations/2020_03_23_151608_create_customer_files_table.php @@ -0,0 +1,51 @@ +bigIncrements('id'); + + $table->bigInteger('customer_id')->nullable(); + $table->unsignedBigInteger('customer_mail_id')->nullable(); + + $table->string('identifier')->index(); + $table->string('filename'); + $table->string('dir'); + $table->string('original_name'); + $table->string('ext'); + $table->string('mine'); + $table->unsignedInteger('size'); + $table->timestamps(); + + $table->foreign('customer_id') + ->references('id') + ->on('customer'); + + $table->foreign('customer_mail_id') + ->references('id') + ->on('customer_mails'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('customer_files'); + } +} diff --git a/public/css/application.css b/public/css/application.css index e61effd..cad3583 100644 --- a/public/css/application.css +++ b/public/css/application.css @@ -696,3 +696,15 @@ figcaption { left: auto } } + +.badge-dark { + background-color: rgba(200, 21, 176, 0.9); + color: #fff; +} + +.default-style .datepicker-dropdown { + z-index: 2080 !important; +} +.default-style .dtp { + z-index: 2080; +} diff --git a/public/js/custom.js b/public/js/custom.js index c3cec68..da0e86e 100644 --- a/public/js/custom.js +++ b/public/js/custom.js @@ -107,17 +107,29 @@ $(function() { }); $(function () { + + $('#modals-load-content').on('show.bs.modal', function (event) { + var button = $(event.relatedTarget); + if (!button.data('id')) { + return; + } + var data = {}; + $.each(button.data(), function(index, value){ + data[index] = value; + }); + console.log(data); + loadModalInner(this, data); + + }); + function initModalInner() { $('[data-toggle="reloadModal"]').off().on('click', function(event) { event.preventDefault(); button = $(this); var data = {}; - data.id = button.data('id'); - data.model = button.data('model'); - data.action = button.data('action'); - data.request = button.data('request'); - data.route = button.data('route'); - data.target = button.data('target'); + $.each(button.data(), function(index, value){ + data[index] = value; + }); console.log(data); loadModalInner(this, data); }); @@ -141,7 +153,7 @@ $(function () { success: function(data) { console.log(data); $(data.response.target).find('.modal-dialog').html(data.html); - $('.selectpicker').selectpicker('refresh'); + $(data.response.target + '.selectpicker').selectpicker('refresh'); initModalInner(); }, error: function(xhr, status, errorThrown) { @@ -156,24 +168,6 @@ $(function () { - - - $('#modals-load-content').on('show.bs.modal', function (event) { - var button = $(event.relatedTarget); - if (!button.data('id')) { - return; - } - var data = {}; - data.id = button.data('id'); - data.model = button.data('model'); - data.action = button.data('action'); - data.request = button.data('request'); - data.route = button.data('route'); - data.target = button.data('target'); - console.log(data); - loadModalInner(this, data); - - }); }); function update_modal_data_show(e, $ele) { diff --git a/resources/views/booking/detail.blade.php b/resources/views/booking/detail.blade.php index 131361b..c939a61 100755 --- a/resources/views/booking/detail.blade.php +++ b/resources/views/booking/detail.blade.php @@ -3,14 +3,14 @@ @section('content') - +
+ {{ __('zur Übersicht') }} + {{ __('zurück ins CRM v2') }} +

Buchung verwalten

+ {{-- + + +--}} + + + + {!! Form::open(['url' => route('booking_detail', [$id]), 'class' => 'form-horizontal', 'id'=>'lead-form-validation']) !!} - -
-
-
- - {{ Form::text('merlin_order_number', $booking->merlin_order_number, array('placeholder'=>__('MyJack Nr.'), 'class'=>'form-control', 'id'=>'merlin_order_number')) }} -
- -
- - {{ Form::text('id', $booking->id, array('placeholder'=>__('Nr.'), 'class'=>'form-control', 'id'=>'booking_id', 'readonly')) }} -
- -
- -
-
- + +
+ +
+
+ @if($booking->customer->count()) +
+ +
+
+ + +
+ {{ Form::text('customer[id]', $booking->customer->id, array('placeholder'=>__('Kunden ID'), 'class'=>'form-control', 'id'=>'customer_id', 'readonly')) }}
- {{ Form::text('price', $booking->price, array('placeholder'=>__('Gesamtpreis'), 'class'=>'form-control', 'id'=>'price', 'readonly')) }}
+
+ + {{ Form::text('customer[email]', $booking->customer->email, array('placeholder'=>__('E-Mail'), 'class'=>'form-control', 'id'=>'customer_email', 'readonly')) }} +
+
+ + {{ Form::text('customer[firstname]', $booking->customer->firstname, array('placeholder'=>__('Vorname'), 'class'=>'form-control', 'id'=>'customer_firstname', 'readonly')) }} +
+ +
+ + {{ Form::text('customer[name]', $booking->customer->name, array('placeholder'=>__('Nachname'), 'class'=>'form-control', 'id'=>'customer_name', 'readonly')) }} +
+ @endif
+ +
+ +
+
+ @if($booking->lead->count()) +
+ +
+
+ + +
+ {{ Form::text('lead[id]', $booking->lead->id, array('placeholder'=>__('Anfrage ID'), 'class'=>'form-control', 'id'=>'lead_id', 'readonly')) }} +
+
+
+ + {{ Form::text('lead[status_id]', $booking->lead->status ? $booking->lead->status->name : '', array('placeholder'=>__('Status'), 'class'=>'form-control', 'id'=>'lead_status_id', 'readonly')) }} +
+
+ +
+ +
+ +
+ @endif +
+
+
+ + +
+ +
+ +
+
+ + {{ Form::text('sf_guard_user_id', $booking->sf_guard_user->first_name." ".$booking->sf_guard_user->last_name, array('placeholder'=>__('Sachbearbeiter'), 'class'=>'form-control', 'id'=>'sf_guard_user_id', 'readonly')) }} +
+
+ + {{ Form::text('booking_date', _format_date($booking->booking_date), array('placeholder'=>__('Buchungsdatum'), 'class'=>'form-control', 'id'=>'booking_date', 'readonly')) }} +
+
+ + {{ Form::text('travel_country_id', $booking->travel_country ? $booking->travel_country->name : '', array('placeholder'=>__('Reiseland'), 'class'=>'form-control', 'id'=>'travel_country_id', 'readonly')) }} +
+
+ + {{ Form::text('travel_number', $booking->travel_number, array('placeholder'=>__('Reisenummer'), 'class'=>'form-control', 'id'=>'travel_number', 'readonly')) }} +
+
+ + {{ Form::text('travelagenda_id', $booking->travel_agenda ? $booking->travel_agenda->name : '', array('placeholder'=>__('Reiseprogramm'), 'class'=>'form-control', 'id'=>'travelagenda_id', 'readonly')) }} +
+
+ + {{ Form::text('travel_category_id', $booking->travel_category ? $booking->travel_category->name : '', array('placeholder'=>__('Reiseart'), 'class'=>'form-control', 'id'=>'travel_category_id', 'readonly')) }} +
+
+ + {{ Form::text('start_date', _format_date($booking->start_date), array('placeholder'=>__('Aufenthalt vom'), 'class'=>'form-control', 'id'=>'start_date', 'readonly')) }} +
+
+ + {{ Form::text('end_date', _format_date($booking->end_date), array('placeholder'=>__('Aufenthalt bis'), 'class'=>'form-control', 'id'=>'end_date', 'readonly')) }} +
+
+ + {{ Form::text('title', $booking->title, array('placeholder'=>__('Reisetitel'), 'class'=>'form-control', 'id'=>'title', 'readonly')) }} +
+
+
+
+ +
+ + {{ Form::text('paying_out', $booking->getPayingOutType(), array('placeholder'=>__('K-Wunsch'), 'class'=>'form-control', 'id'=>'paying_out', 'readonly')) }} +
+
+ + {{ Form::text('paying_out_status', $booking->getPayingOutStatusType(), array('placeholder'=>__('KW-Status'), 'class'=>'form-control', 'id'=>'paying_out_status', 'readonly')) }} +
+
+ + {{ Form::text('refund', $booking->getRefundType(), array('placeholder'=>__('Refund'), 'class'=>'form-control', 'id'=>'refund', 'readonly')) }} +
+
+ + {{ Form::text('refund_date', _format_date($booking->refund_date), array('placeholder'=>__('Refund Datum'), 'class'=>'form-control', 'id'=>'refund_date', 'readonly')) }} +
+
+ + {{ Form::text('xx_tkt', $booking->getXxTktType(), array('placeholder'=>__('XX TKT'), 'class'=>'form-control', 'id'=>'xx_tkt', 'readonly')) }} +
+
+ + {{ Form::text('xx_tkt_date', _format_date($booking->xx_tkt_date), array('placeholder'=>__('XX TKT Datum'), 'class'=>'form-control', 'id'=>'xx_tkt_date', 'readonly')) }} +
+ +
+
+
+ + +
+ +
+ +
+
+ + {{ Form::text('ev_number', $booking->ev_number, array('placeholder'=>__('EV Nummer'), 'class'=>'form-control', 'id'=>'ev_number', 'readonly')) }} +
+
+ + {{ Form::text('booking_konto', 4011, array('placeholder'=>__('Konto'), 'class'=>'form-control', 'id'=>'booking_konto', 'readonly')) }} +
+
+ + {{ Form::text('merlin_order_number', $booking->merlin_order_number, array('placeholder'=>__('MyJack Nr.'), 'class'=>'form-control', 'id'=>'merlin_order_number', 'readonly')) }} +
+
+
+
+ + +
+ +
+ +
+
+ +
+
+ +
+ {{ Form::text('price', $booking->price, array('placeholder'=>__('Gesamtpreis'), 'class'=>'form-control', 'id'=>'price', 'readonly')) }} +
+
+
+
+
+{{-- -
+ --}} + +
+ +
+
+ @if($booking->new_drafts ) - @if($booking->new_drafts ) - - @php($i = 1) -
- -
-
- - - - - - - - - - - - - - @foreach($booking->booking_draft_items as $booking_draft_item) - - draft_type) style="background-color: {{ $booking_draft_item->draft_type->color }}" @endif> - - - - - - @if(in_array($booking_draft_item->draft_type_id, [24, 26, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42])) - + + @endforeach +
#LeistungDatum vonDatum bisTeilnehmer/EPKinder/EP#
- - {{ $i++ }} - - - {{ Form::text('draft_item['.$booking_draft_item->id.'][start_date]', $booking_draft_item->start_date, array('placeholder'=>__('Start Datum'), 'class'=>'form-control datepicker-base', 'id'=>'draft_item_'.$booking_draft_item->id.'_start_dat')) }} - - {{ Form::text('draft_item['.$booking_draft_item->id.'][end_date]', $booking_draft_item->end_date, array('placeholder'=>__('End Datum'), 'class'=>'form-control datepicker-base', 'id'=>'draft_item_'.$booking_draft_item->id.'_end_date')) }} - -
- - {{ Form::text('draft_item['.$booking_draft_item->id.'][price_adult]', $booking_draft_item->price_adult, array('placeholder'=>__('Preis in €'), 'class'=>'form-control', 'id'=>'draft_item_'.$booking_draft_item->id.'_price_adult', 'maxlength'=>10)) }} - + @php($i = 1) +
+ +
+
+ + + + + + + + + + + + + + @foreach($booking->booking_draft_items as $booking_draft_item) + + draft_type) style="background-color: {{ $booking_draft_item->draft_type->color }}" @endif> + + + + + + @if(in_array($booking_draft_item->draft_type_id, [24, 26, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42])) + - + - @else - - - @endif - - - draft_type) style="background-color: {{ $booking_draft_item->draft_type->color }}" @endif class="border-none"> + + + @else + + + @endif + + + draft_type) style="background-color: {{ $booking_draft_item->draft_type->color }}" @endif class="border-none"> - @if(in_array($booking_draft_item->draft_type_id, [36, 37])) - - + - - + + + + - - - @endforeach -
#LeistungDatum vonDatum bisTeilnehmer/EPKinder/EP#
+ + {{ $i++ }} + + + {{ Form::text('draft_item['.$booking_draft_item->id.'][start_date]', $booking_draft_item->start_date, array('placeholder'=>__('Start Datum'), 'class'=>'form-control datepicker-base', 'id'=>'draft_item_'.$booking_draft_item->id.'_start_dat')) }} + + {{ Form::text('draft_item['.$booking_draft_item->id.'][end_date]', $booking_draft_item->end_date, array('placeholder'=>__('End Datum'), 'class'=>'form-control datepicker-base', 'id'=>'draft_item_'.$booking_draft_item->id.'_end_date')) }} + +
+ + {{ Form::text('draft_item['.$booking_draft_item->id.'][price_adult]', $booking_draft_item->price_adult, array('placeholder'=>__('Preis in €'), 'class'=>'form-control', 'id'=>'draft_item_'.$booking_draft_item->id.'_price_adult', 'maxlength'=>10)) }} + -
-
-
- - {{ Form::text('draft_item['.$booking_draft_item->id.'][price_children]', $booking_draft_item->price_children, array('placeholder'=>__('Preis in €'), 'class'=>'form-control', 'id'=>'draft_item_'.$booking_draft_item->id.'_price_children')) }} - +
+
+
+ + {{ Form::text('draft_item['.$booking_draft_item->id.'][price_children]', $booking_draft_item->price_children, array('placeholder'=>__('Preis in €'), 'class'=>'form-control', 'id'=>'draft_item_'.$booking_draft_item->id.'_price_children')) }} + -
-
-- - - - -
-- + + + +
- - - @elseif(in_array($booking_draft_item->draft_type_id, [38, 39,40])) - -
- @if(in_array($booking_draft_item->draft_type_id, [38])) - - @endif - {{ Form::text('draft_item['.$booking_draft_item->id.'][price]', $booking_draft_item->price, array('placeholder'=>__('Preis in €'), 'class'=>'form-control', 'id'=>'draft_item_'.$booking_draft_item->id.'_price',)) }} - + @if(in_array($booking_draft_item->draft_type_id, [36, 37])) +
+ + + @elseif(in_array($booking_draft_item->draft_type_id, [38, 39,40])) + +
+ @if(in_array($booking_draft_item->draft_type_id, [38])) + + @endif + {{ Form::text('draft_item['.$booking_draft_item->id.'][price]', $booking_draft_item->price, array('placeholder'=>__('Preis in €'), 'class'=>'form-control', 'id'=>'draft_item_'.$booking_draft_item->id.'_price',)) }} + -
-
- @else - - @endif - {{ Form::textarea('draft_item['.$booking_draft_item->id.'][service]', $booking_draft_item->service, array('placeholder'=>__('Leistungen'), 'class'=>'form-control autoExpand', 'id'=>'draft_item_'.$booking_draft_item->id.'_service', 'rows'=>'1', 'data-min-rows'=>'1')) }} - - - + @else + + @endif + {{ Form::textarea('draft_item['.$booking_draft_item->id.'][service]', $booking_draft_item->service, array('placeholder'=>__('Leistungen'), 'class'=>'form-control autoExpand', 'id'=>'draft_item_'.$booking_draft_item->id.'_service', 'rows'=>'1', 'data-min-rows'=>'1')) }} + + +
+
+
+ +
+ +
+
+   + {{ __('zur Übersicht') }} +
+ @endif +
- @endif - -
- -
- -
-   - {{ __('zur Übersicht') }} - {{ __('zurück ins CRM v2') }} - -
- +
{!! Form::close() !!} + +
+
+ E-Mails +
+
+
+
+ + + +
+ @if($booking->customer_mails) +
+ + + + + + + {{-- --}} + + + + + + + + + + @foreach($booking->customer_mails as $customer_mail) + + + + {{-- --}} + + + + + + + @endforeach + +
 {{__('Mail-ID')}}{{__('E-Mail')}}{{__('Betreff')}}{{__('Anhang')}}{{__('gesendet')}}{{__('Gesendet')}}{{__('#')}}
+ + + {{$customer_mail->id}} + {{ $customer_mail->email }} + @if($customer_mail->reply_id) + + @else + + @endif + {{ $customer_mail->subject }} + + {{ $customer_mail->customer_files->count() }} + @if($customer_mail->send) + + @else + + @endif + {{ $customer_mail->sent_at }} + + + + + +   + + + + + +
+
+ @endif +
+
+
+ + \ No newline at end of file diff --git a/resources/views/customer/mail/modal-show-mail-inner.blade.php b/resources/views/customer/mail/modal-show-mail-inner.blade.php new file mode 100644 index 0000000..2fc3902 --- /dev/null +++ b/resources/views/customer/mail/modal-show-mail-inner.blade.php @@ -0,0 +1,117 @@ + +
+ +
+ + + +
+ +
+ @if($customer_mail->is_answer) + Antwort von:
+ @else + Gesendet an:
+ @endif + <{{$customer_mail->email}}> {{$customer_mail->sent_at }} +
+ + +
{{$customer_mail->subject}}
+
+
+
+ + {{-- +
+
+ + + + + +
+ +
+ +
|
+ +
+
+
+ + --}} +
+ {!! nl2br($customer_mail->message) !!} +
+
+ + +
+ @if($customer_mail->customer) +

Kunde: + {{ $customer_mail->customer->salutation->name }} {{ $customer_mail->customer->firstname }} {{ $customer_mail->customer->name }} +

+ @endif + + @if($customer_mail->booking) +

Buchung: + {{ $customer_mail->booking_id }} + @if($customer_mail->booking->travel_country_id) + {{ " | ".$customer_mail->booking->travel_country->name }} + @endif + @if($customer_mail->booking->travelagenda_id) + {{ " | ".$customer_mail->booking->travel_agenda->name }} + @endif +

+ @endif + + @if($customer_mail->send) + Mail gesendet +

Datum: {{$customer_mail->sent_at}}

+ @endif + @if($customer_mail->fail) + Mail Fehler +

{{$customer_mail->error }}

+ @endif +
+ + @if($customer_mail->customer_files) +
+ +
+
Datei-Anhänge
+
+ + @foreach($customer_mail->customer_files as $file) +
+ +
+
+
+ {{$file->filename}} +
{{$file->formatBytes()}}
+
+ Vorschau   +
+
+
+ +
+ @endforeach + +
+
+ @endif + {{-- + +
+ +   + +
+ --}} + +
+ + diff --git a/resources/views/customer/mail/modal-show-mail.blade.php b/resources/views/customer/mail/modal-show-mail.blade.php new file mode 100644 index 0000000..99c216d --- /dev/null +++ b/resources/views/customer/mail/modal-show-mail.blade.php @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/resources/views/drafts/index.blade.php b/resources/views/drafts/index.blade.php index 812d233..be10dfb 100755 --- a/resources/views/drafts/index.blade.php +++ b/resources/views/drafts/index.blade.php @@ -128,7 +128,6 @@ data-name="" data-active="1" data-pos="0" - >Neuen Typ anlegen
diff --git a/resources/views/layouts/application.blade.php b/resources/views/layouts/application.blade.php index d4de6b7..0b000e0 100755 --- a/resources/views/layouts/application.blade.php +++ b/resources/views/layouts/application.blade.php @@ -30,20 +30,21 @@ + @if(isset($lfm_helper)) - @else - + {{-- --}} @endif - + + @@ -70,7 +71,7 @@ - + @@ -113,11 +114,14 @@ + + + + @if(isset($lfm_helper)) - @else - + {{-- --}} @endif @@ -130,6 +134,8 @@ + + @@ -143,7 +149,7 @@ @if(isset($lfm_helper)) - + @endif @@ -154,7 +160,7 @@ - + @include('asset.js') diff --git a/resources/views/layouts/includes/layout-sidenav.blade.php b/resources/views/layouts/includes/layout-sidenav.blade.php index eeae7b8..ac9a046 100755 --- a/resources/views/layouts/includes/layout-sidenav.blade.php +++ b/resources/views/layouts/includes/layout-sidenav.blade.php @@ -230,6 +230,11 @@
{{ __('Nationalitäten') }}
@endif + @if(Auth::user()->isPermission('sua-st-bs')) +
  • +
    {{ __('Reisestatus') }}
    +
  • + @endif @if(Auth::user()->isPermission('sua-st-ke'))
  • {{ __('Keywords') }}
    diff --git a/resources/views/request/index.blade.php b/resources/views/request/index.blade.php index 3ea40db..43b2079 100755 --- a/resources/views/request/index.blade.php +++ b/resources/views/request/index.blade.php @@ -59,7 +59,7 @@
  • -
    +
    -
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    @@ -122,9 +169,16 @@ {{--{{__('Kategorie')}}--}} {{__('Anreise')}} {{__('Abreise')}} - {{__('Reiseunterlage')}} + {{__('U.')}} {{__('Sachbearbeiter')}} {{__('Status')}} + {{__('E-Mail')}} + {{__('K-Wunsch')}} + {{__('KW-Status')}} + {{__('Refund')}} + {{__('XX TKT')}} + + @@ -133,10 +187,13 @@
    -
    @@ -169,6 +226,11 @@ d.travel_option_search = $('select[name=travel_option_search]').val(); d.travel_option_country_id = $('select[name=travel_option_country_id]').val(); d.travel_option_agenda_id = $('select[name=travel_option_agenda_id]').val(); + d.travel_option_lead_status_id = $('select[name=travel_option_lead_status_id]').val(); + d.travel_option_paying_out = $('select[name=travel_option_paying_out]').val(); + d.travel_option_paying_out_status = $('select[name=travel_option_paying_out_status]').val(); + d.travel_option_refund = $('select[name=travel_option_refund]').val(); + d.travel_option_xx_tkt = $('select[name=travel_option_xx_tkt]').val(); } }, "columns": [ @@ -184,7 +246,12 @@ { data: 'end_date', name: 'end_date' }, { data: 'travel_documents', name: 'travel_documents', orderable: false }, { data: 'sf_guard_user_id', name: 'sf_guard_user_id', orderable: false }, - { data: 'lead.status_id', name: 'lead.status_id', orderable: false }, + { data: 'lead.status_id', name: 'lead.status_id', orderable: false }, + { data: 'last_customer_email', name: 'last_customer_email', orderable: true }, + { data: 'paying_out', name: 'paying_out' }, + { data: 'paying_out_status', name: 'paying_out_status' }, + { data: 'refund', name: 'refund' }, + { data: 'xx_tkt', name: 'xx_tkt' }, ], "bLengthChange": false, "iDisplayLength": 50, @@ -194,7 +261,7 @@ "url": "/js/German.json" }, initComplete: function () { - this.api().columns(8).every( function () { + /*this.api().columns(10).every( function () { var column = this; var title = $(column.header()).html(); var select = $('') @@ -211,8 +278,26 @@ } } } ); + } );*/ + this.api().columns(11).every( function () { + var column = this; + var title = $(column.header()).html(); + var select = $('') + .appendTo( $(column.header()).empty() ) + .on( 'change', function () { + $('input[name=sort_sf_guard_user_id]').val($(this).val()); + table.order( [ 5, 'desc' ] ).draw(); + } ); + column.data().unique().sort().each( function ( d, j ) { + if(d !== ""){ + var text = $(d+' span').text(); + if(text !== "" && text !== "-"){ + select.append( '' ); + } + } + } ); } ); - this.api().columns(9).every( function () { + /* this.api().columns(12).every( function () { var column = this; var title = $(column.header()).html(); var select = $('') @@ -230,6 +315,7 @@ } } ); } ); + */ $('.selectpicker').selectpicker(); }, drawCallback: function () { @@ -287,15 +373,31 @@ $(this).removeClass('active'); } clearTravelOptionAgenda(); - table.order( [ 3, 'desc' ] ).draw(); + table.order( [ 5, 'desc' ] ).draw(); }); $('#travel_option_country_id').on('change', function(){ clearTravelOptionAgenda(); - table.order( [ 3, 'desc' ] ).draw(); + table.order( [ 5, 'desc' ] ).draw(); }); $('#travel_option_agenda_id').on('change', function(){ - table.order( [ 3, 'desc' ] ).draw(); + table.order( [ 5, 'desc' ] ).draw(); }); + $('#travel_option_lead_status_id').on('change', function(){ + table.order( [ 5, 'desc' ] ).draw(); + }); + $('#travel_option_paying_out').on('change', function(){ + table.order( [ 5, 'desc' ] ).draw(); + }); + $('#travel_option_paying_out_status').on('change', function(){ + table.order( [ 5, 'desc' ] ).draw(); + }); + $('#travel_option_refund').on('change', function(){ + table.order( [ 5, 'desc' ] ).draw(); + }); + $('#travel_option_xx_tkt').on('change', function(){ + table.order( [ 5, 'desc' ] ).draw(); + }); + $('.datepicker-base').on('change', function(){ if($(this).val() != ""){ $('#travel_option_search').removeClass('active'); @@ -308,11 +410,11 @@ $('#travel_option_search').removeClass('deactive'); } clearTravelOptionAgenda(); - table.order( [ 3, 'desc' ] ).draw(); + table.order( [ 5, 'desc' ] ).draw(); }); $('.full_search').on('keyup', function(){ clearTravelOptionAgenda(); - table.order( [ 3, 'desc' ] ).draw(); + table.order( [ 5, 'desc' ] ).draw(); }); function loadModalInner(self, data){ @@ -350,12 +452,10 @@ if (!button.data('id')) { return; } - //var data = {}; var data = table.ajax.params(); - data.action = button.data('action'); - data.route = button.data('route'); - data.target = button.data('target'); - //console.log(data); + $.each(button.data(), function(index, value){ + data[index] = value; + }); loadModalInner(this, data); }); @@ -366,7 +466,4 @@
    - - - @endsection \ No newline at end of file diff --git a/resources/views/request/modal-mail.blade.php b/resources/views/request/modal-mail.blade.php deleted file mode 100644 index 2c4e038..0000000 --- a/resources/views/request/modal-mail.blade.php +++ /dev/null @@ -1,40 +0,0 @@ -{!! Form::open(['url' => $url, 'class' => 'modal-content', 'onsubmit'=>'return confirm("E-Mail wirklich senden?");']) !!} - - - -{!! Form::close() !!} - diff --git a/resources/views/settings/status/index.blade.php b/resources/views/settings/status/index.blade.php new file mode 100755 index 0000000..047eaa0 --- /dev/null +++ b/resources/views/settings/status/index.blade.php @@ -0,0 +1,137 @@ +@extends('layouts.layout-2') + +@section('content') +

    + Reisestatus +

    + +
    + +
    + + + + + + + + + + + + @foreach($status as $value) + + + + + + + + + + @endforeach + +
     {{__('Name')}}{{__('Farbe')}}{{__('Bearbeitung Tage')}}
    + + {{ $value->name }} + @if($value->color) +
    + {{ $value->color }} + @else +
    + @endif +
    {{ $value->handling_days }}
    +
    + +
    +
    + + + + + + + +
    + + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 7966430..56e75e7 100755 --- a/routes/web.php +++ b/routes/web.php @@ -58,6 +58,16 @@ Route::get('/check/login/{identify}/{token}/{show?}', 'HomeController@checkLogin Route::get('/user/update_email_confirm/{token}', 'UserUpdateEmailController@activateMail')->name('user_update_email_confirm'); +Route::get('/storage/file/{id}/{disk}', function($id = null, $disk = null) +{ + + $file = \App\Models\CustomerFile::findOrFail($id); + $path = Storage::disk($disk)->path($file->dir.$file->filename); + + if (file_exists($path)) { + return Response::file($path); + } +})->name('storage_file'); Route::group(['middleware' => ['auth']], function() { @@ -142,6 +152,12 @@ Route::group(['middleware' => ['admin']], function() Route::get('/iq/content/tree/delete/{id}/{node_id?}/{area_section_id?}', 'IQ\ContentTreeController@delete')->name('iq_content_tree_delete'); Route::get('/iq/content/tree/repair/{id}', 'IQ\ContentTreeController@repair')->name('iq_content_tree_repair'); + Route::post('/iq/content/modal/load', 'IQ\ContentModalController@load')->name('iq_content_modal_load'); + + Route::post('/customer_mail//upload/attachment/{id}', 'CustomerMailController@uploadAttachment')->name('customer_mail_upload_attachment'); + Route::post('/customer_mail/send/mail', 'CustomerMailController@sendMail')->name('customer_mail_send_mail'); + Route::post('/customer_mail/reply/mail', 'CustomerMailController@replyMail')->name('customer_mail_reply_mail'); + Route::group(['middleware' => ['auth.permission:cms-iq-assets']], function() { //assets @@ -189,7 +205,6 @@ Route::group(['middleware' => ['admin']], function() Route::get('data/table/requests', 'RequestController@getRequests')->name('data_table_requests'); Route::post('data/ajax/requests', 'RequestController@getAjaxRequests')->name('data_ajax_requests'); Route::post('/requests/modal/load', 'RequestController@loadModal')->name('requests_modal_load'); - Route::post('/requests/send_customer_mail', 'RequestController@sendCustomerMail')->name('requests_send_customer_mail'); }); Route::group(['middleware' => ['auth.permission:crm-bo-bo']], function() { //Buchungen > Buchungen @@ -198,6 +213,8 @@ Route::group(['middleware' => ['admin']], function() Route::get('/booking/detail/{id}', 'BookingController@detail')->name('booking_detail'); Route::post('/booking/detail/{id}', 'BookingController@store')->name('booking_detail'); Route::get('/booking/draft_item/delete/{id}', 'BookingController@draftItemDelete')->name('booking_draft_item_delete'); + Route::post('/booking/modal/load', 'BookingController@loadModal')->name('booking_modal_load'); + }); Route::group(['middleware' => ['auth.permission:crm-bo-le']], function() { //Buchungen > Leads @@ -222,6 +239,7 @@ Route::group(['middleware' => ['admin']], function() Route::get('/customer_mail/detail/{id}', 'CustomerMailController@detail')->name('customer_mail_detail'); Route::post('/customer_mail/detail/{id}', 'CustomerMailController@store')->name('customer_mail_detail'); Route::get('/customer_mail/delete/{id}', 'CustomerMailController@delete')->name('customer_mail_delete'); + }); Route::group(['middleware' => ['auth.permission:crm-cm-cf']], function() { //Kundenverwaltung > Kunden (FeWo) @@ -271,7 +289,7 @@ Route::group(['middleware' => ['admin']], function() Route::get('/cms/travel_guide/content', 'CMS\CMSTravelGuideController@index')->name('cms_travel_guide_content'); Route::get('/cms/travel_guide/page', 'CMS\CMSTravelGuideController@page')->name('cms_travel_guide_page'); - Route::get('/cms/travel_guide/page/detail/{id}', 'CMS\CMSTravelGuideController@pageDetail')->name('cms_travel_guide_page_detail'); + Route::get('/cms/travel_guide/page/detail/{id}', 'CMS\CMSTravelGuideControllecr@pageDetail')->name('cms_travel_guide_page_detail'); Route::post('/cms/travel_guide/page/detail/{id}', 'CMS\CMSTravelGuideController@pageStore')->name('cms_travel_guide_page_detail'); @@ -331,6 +349,13 @@ Route::group(['middleware' => ['superadmin']], function() { Route::get('/admin/settings/travel/nationality/delete/{id}', 'Settings\TravelNationalityController@delete')->name('admin_settings_travel_nationality_delete'); }); + Route::group(['middleware' => ['auth.permission:sua-st-bs']], function() { + //SUPERADMIN > Einstellungen > Nationalitäten + Route::get('/admin/settings/booking/status', 'Settings\BookingStatusController@index')->name('admin_settings_booking_status'); + Route::post('/admin/settings/booking/status/update', 'Settings\BookingStatusController@update')->name('admin_settings_booking_status_update'); + Route::get('/admin/settings/booking/status/delete/{id}', 'Settings\BookingStatusController@delete')->name('admin_settings_booking_status_delete'); + }); + Route::group(['middleware' => ['auth.permission:sua-st-ke']], function() { //SUPERADMIN > Einstellungen > Keywords Route::get('/admin/settings/keyword', 'Settings\KeywordController@index')->name('admin_settings_keyword'); diff --git a/storage/app/customer/attachment/2020/03/5e78e1ac59cc0_ust111.pdf b/storage/app/customer/attachment/2020/03/5e78e1ac59cc0_ust111.pdf new file mode 100644 index 0000000..9c22f8d Binary files /dev/null and b/storage/app/customer/attachment/2020/03/5e78e1ac59cc0_ust111.pdf differ diff --git a/storage/app/customer/attachment/2020/03/5e78e1ae88686_ustvadezember.pdf b/storage/app/customer/attachment/2020/03/5e78e1ae88686_ustvadezember.pdf new file mode 100644 index 0000000..73b3d15 Binary files /dev/null and b/storage/app/customer/attachment/2020/03/5e78e1ae88686_ustvadezember.pdf differ diff --git a/storage/app/customer/attachment/2020/03/5e78e1ef84dc1_mcwebartworkqrg181130.pdf b/storage/app/customer/attachment/2020/03/5e78e1ef84dc1_mcwebartworkqrg181130.pdf new file mode 100644 index 0000000..e77f64b Binary files /dev/null and b/storage/app/customer/attachment/2020/03/5e78e1ef84dc1_mcwebartworkqrg181130.pdf differ diff --git a/storage/app/customer/attachment/2020/03/5e78e1f2d7c2e_payoneplatformtestdataen.pdf b/storage/app/customer/attachment/2020/03/5e78e1f2d7c2e_payoneplatformtestdataen.pdf new file mode 100644 index 0000000..57b35f7 Binary files /dev/null and b/storage/app/customer/attachment/2020/03/5e78e1f2d7c2e_payoneplatformtestdataen.pdf differ diff --git a/storage/app/customer/attachment/2020/03/5e7b225b0ed62_jdatlastoollogo.png b/storage/app/customer/attachment/2020/03/5e7b225b0ed62_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/attachment/2020/03/5e7b225b0ed62_jdatlastoollogo.png differ diff --git a/storage/app/customer/attachment/2020/03/5e7b3644bf721_wlogo.png b/storage/app/customer/attachment/2020/03/5e7b3644bf721_wlogo.png new file mode 100644 index 0000000..bb18b78 Binary files /dev/null and b/storage/app/customer/attachment/2020/03/5e7b3644bf721_wlogo.png differ diff --git a/storage/app/customer/attachment/2020/03/5e7b492402436_jdatlastoollogo.png b/storage/app/customer/attachment/2020/03/5e7b492402436_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/attachment/2020/03/5e7b492402436_jdatlastoollogo.png differ diff --git a/storage/app/customer/attachment/2020/03/5e7b8ab17b3b5_jdatlastoollogo.png b/storage/app/customer/attachment/2020/03/5e7b8ab17b3b5_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/attachment/2020/03/5e7b8ab17b3b5_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78c9ab01d68_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78c9ab01d68_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78c9ab01d68_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78ca461db73_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78ca461db73_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78ca461db73_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78cabfcc631_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cabfcc631_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cabfcc631_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78caee86679_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78caee86679_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78caee86679_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78cb08e8fda_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cb08e8fda_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cb08e8fda_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78cb0c29487_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cb0c29487_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cb0c29487_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78cb5297d99_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cb5297d99_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cb5297d99_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78ce73a0b51_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78ce73a0b51_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78ce73a0b51_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78cec300ea9_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cec300ea9_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cec300ea9_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78cef2a2811_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cef2a2811_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cef2a2811_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78ceff86c13_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78ceff86c13_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78ceff86c13_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78cf1d742c7_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cf1d742c7_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cf1d742c7_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78cf23670ae_ust111.pdf b/storage/app/customer/tmp/attachment/5e78cf23670ae_ust111.pdf new file mode 100644 index 0000000..9c22f8d Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cf23670ae_ust111.pdf differ diff --git a/storage/app/customer/tmp/attachment/5e78cfb1a7800_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cfb1a7800_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cfb1a7800_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78cfbd8ef63_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78cfbd8ef63_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78cfbd8ef63_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d0037eca4_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d0037eca4_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d0037eca4_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d02050d7c_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d02050d7c_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d02050d7c_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d02498dfd_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d02498dfd_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d02498dfd_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d183c4f80_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d183c4f80_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d183c4f80_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d1c454e6f_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d1c454e6f_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d1c454e6f_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d1cf536e8_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d1cf536e8_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d1cf536e8_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d35b13cdf_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d35b13cdf_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d35b13cdf_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d3faa91df_ust111.pdf b/storage/app/customer/tmp/attachment/5e78d3faa91df_ust111.pdf new file mode 100644 index 0000000..9c22f8d Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d3faa91df_ust111.pdf differ diff --git a/storage/app/customer/tmp/attachment/5e78d45fdbc3b_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d45fdbc3b_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d45fdbc3b_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d463478f2_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d463478f2_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d463478f2_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d464c5ab1_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d464c5ab1_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d464c5ab1_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d46a01b5d_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78d46a01b5d_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d46a01b5d_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78d46a312bf_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d46a312bf_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d46a312bf_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d564d217f_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d564d217f_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d564d217f_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d5ef6c709_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d5ef6c709_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d5ef6c709_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d60335e7a_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d60335e7a_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d60335e7a_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d6341a8ab_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d6341a8ab_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d6341a8ab_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d6470bf25_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d6470bf25_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d6470bf25_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d7038592f_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d7038592f_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d7038592f_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d78baa10e_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d78baa10e_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d78baa10e_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78d98658c62_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78d98658c62_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78d98658c62_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78db64e414c_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78db64e414c_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78db64e414c_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78dbc255921_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78dbc255921_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78dbc255921_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78dc789e5ec_ust111.pdf b/storage/app/customer/tmp/attachment/5e78dc789e5ec_ust111.pdf new file mode 100644 index 0000000..9c22f8d Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78dc789e5ec_ust111.pdf differ diff --git a/storage/app/customer/tmp/attachment/5e78dce263b11_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78dce263b11_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78dce263b11_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78dd3a57e2c_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78dd3a57e2c_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78dd3a57e2c_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78ddbd11b14_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78ddbd11b14_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78ddbd11b14_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78de3e83a57_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78de3e83a57_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78de3e83a57_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78de619eef4_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78de619eef4_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78de619eef4_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78dea62a197_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78dea62a197_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78dea62a197_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78dfdf5464a_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78dfdf5464a_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78dfdf5464a_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78e019450d8_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78e019450d8_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78e019450d8_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78e0416765e_jackodurextrusionsstrang.jpg b/storage/app/customer/tmp/attachment/5e78e0416765e_jackodurextrusionsstrang.jpg new file mode 100644 index 0000000..2c7fd76 Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78e0416765e_jackodurextrusionsstrang.jpg differ diff --git a/storage/app/customer/tmp/attachment/5e78e05dcf7c8_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78e05dcf7c8_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78e05dcf7c8_jdatlastoollogo.png differ diff --git a/storage/app/customer/tmp/attachment/5e78e086b0a43_jdatlastoollogo.png b/storage/app/customer/tmp/attachment/5e78e086b0a43_jdatlastoollogo.png new file mode 100644 index 0000000..6d4306f Binary files /dev/null and b/storage/app/customer/tmp/attachment/5e78e086b0a43_jdatlastoollogo.png differ