middleware(['admin', '2fa']); $this->leadRepo = $leadRepo; $this->custRepo = $custRepo; } public function index($step = false) { $data = [ 'step' => $step ]; return view('lead.index', $data); } public function detail($id) { if($id === "new") { $lead = new Lead(); $id = 'new'; }else{ $lead = Lead::findOrFail($id); $lead->getPassolutionPDF(true); $id = $lead->id; } $data = [ 'lead' => $lead, 'id' => $id, 'show_modal_quill_preview' => true, ]; return view('lead.detail', $data); } public function store($id) { $data = Request::all(); if(!isset($data['action'])){ abort(403, 'keine Action'); } //save if($data['action'] === 'createBooking'){ $lead = $this->leadRepo->createBooking($id, $data); \Session()->flash('alert-save', '1'); return redirect(route('lead_detail', [$id]).'#collapseLeadBooking'); } if($data['action'] === 'saveCustomer' || $data['action'] === 'saveLead' || $data['action'] === 'saveStatus' || $data['action'] === 'update_lead_participant'){ //@dd($data); $customer = $this->custRepo->updateCustomerFromLead($id, $data); $lead = $this->leadRepo->updateLead($id, $data); $lead = $this->leadRepo->updateLeadParticipant($id, $data); } if($data['action'] === 'saveCustomer'){ return redirect(route('lead_detail', [$id]).'#collapseLeadCustomer'); } if($data['action'] === 'saveLead'){ return redirect(route('lead_detail', [$id]).'#collapseLeadDetail'); } if($data['action'] === 'update_lead_participant'){ return redirect(route('lead_detail', [$lead->id])."#collapseBookingParticipant"); } if($data['action'] === 'saveStatus'){ $lead = $this->leadRepo->updateLeadStatus($id, $data); \Session()->flash('alert-save', '1'); return redirect(route('lead_detail', [$id]).'#collapseLeadStatus'); } if($data['action'] === 'save_notice'){ $lead = $this->leadRepo->updateNotice($id, $data); \Session()->flash('alert-save', '1'); return redirect(route('lead_detail', [$lead->id])."#collapseLeadNotice"); } if($data['action'] === 'edit_notice'){ $lead = $this->leadRepo->updateNotice($id, $data); \Session()->flash('alert-save', '1'); return redirect(route('lead_detail', [$lead->id])."#collapseLeadNotice"); } return back(); } public function action($action, $id=false){ if(!$lead = Lead::find($id)){ abort(404); } if($action === 'lead_participant_add'){ LeadParticipant::create([ 'lead_id' => $lead->id, 'nationality_id' => 1, 'participant_salutation_id' => 1, ]); \Session()->flash('alert-success', __('Neuen Teilnehmer hinzugefügt')); return redirect(route('lead_detail', [$lead->id])."#collapseLeadParticipant"); } } public function getAjaxRequests(){ $data = Request::all(); if(Request::ajax()) { if(isset($data['action']) && $data['action'] === "get_popover_lead_notice"){ $lead = Lead::findOrFail($data['lead_id']); $ret = ""; if($lead->lead_notices->count()){ $lead_notice = $lead->lead_notices->first(); return $lead_notice->getSmallerMessage(500); } if($ret === ""){ return 'keine Notiz'; } return $ret; } if(isset($data['action']) && $data['action'] === "get_popover_lead_last_email"){ $lead = Lead::findOrFail($data['lead_id']); $ret = ""; if($lead->lead_mails->count()){ $lead_mail = $lead->lead_mails_sent_at->last(); return "
".$lead_mail->subject."
".$lead_mail->message; } if($ret === ""){ return 'keine E-Mail'; } return $ret; } } } public function loadModal(){ $data = Request::all(); $ret = ""; if(Request::ajax()) { if($data['action'] === "edit_notice") { $value = LeadNotice::findOrFail($data['id']); $ret = view("lead.edit_notice_modal", compact('data', 'value'))->render(); } } return response()->json(['response' => $data, 'html'=>$ret]); } public function delete($id, $del=false){ if($del === 'lead') { $lead = Lead::findOrFail($id); if($lead->bookings->count()){ \Session()->flash('alert-error', 'Kann nicht gelöscht werden, die Anfrage hat Buchungen'); return redirect(route('lead_detail', [$lead->id])."#collapseLeadBooking"); } //Files $leadFiles = LeadFile::where('lead_id', $lead->id)->get(); foreach ($leadFiles as $leadFile) { $fileRepo = new LeadFileRepository($leadFile); $fileRepo->_set('disk', 'lead'); $fileRepo->delete(); $leadFile->delete(); } //history $leadHistories = StatusHistory::where('lead_id', $lead->id)->get(); foreach ($leadHistories as $leadHistory) { $leadHistory->delete(); } //Mails Files CASCADE $lead->delete(); \Session()->flash('alert-success', __('Anfrage gelöscht')); } if($del === 'passolution_file'){ $lead = Lead::findOrFail($id); $lead->resyncPassolutionPDF(); \Session()->flash('alert-success', 'Passolution erneuert'); return redirect(route('lead_detail', [$lead->id]).'#collapseLeadFiles'); } if($del === 'lead_notice'){ $leadNotice = LeadNotice::findOrFail($id); $lead = $leadNotice->lead; $leadNotice->delete(); \Session()->flash('alert-success', 'Notiz gelöscht'); return redirect(route('lead_detail', [$lead->id]).'#collapseLeadNotice'); } if($del === 'lead_files'){ $leadFile = LeadFile::findOrFail($id); $lead = $leadFile->lead; $fileRepo = new LeadFileRepository($leadFile); $fileRepo->_set('disk', 'lead'); $fileRepo->delete(); $leadFile->delete(); \Session()->flash('alert-success', 'Datei gelöscht'); return redirect(route('lead_detail', [$lead->id]).'#collapseLeadFiles'); } return redirect(route('leads')); } public function getLeads() { $query = Lead::with('customer')->with('sf_guard_user')->with('status')->select('inquiries.*'); return \DataTables::eloquent($query) ->addColumn('action_edit', function (Lead $lead) { return ''; }) ->addColumn('id', function (Lead $lead) { return ''.$lead->id.''; }) ->addColumn('customer_id', function (Lead $lead) { return ''.$lead->customer_id.''; }) ->addColumn('request_date', function (Lead $lead) { return Carbon::parse($lead->request_date)->format(\Util::formatDateDB()); }) ->addColumn('travel_country', function (Lead $lead) { return $lead->getTravelCountryDestco(); }) ->addColumn('status', function (Lead $lead) { return $lead->getStatusBadge(); }) ->addColumn('lead_notice', function (Lead $lead) { return $lead->lead_notices->count() ? '' : ''; }) ->addColumn('last_lead_email', function (Lead $lead) { if($lead->lead_mails->count()){ $lead_mail = $lead->lead_mails_sent_at->last(); $badge = $lead_mail->is_answer ? 'badge-default' : 'badge-secondary'; $badge = !$lead_mail->send ? $badge : 'badge-success'; return ' ' .($lead_mail->send ? '' : '').' ' .$lead_mail->sent_at.' '; } return '-'; }) ->addColumn('action_delete', function (Lead $lead) { return ''; }) ->orderColumn('id', 'id $1') ->orderColumn('customer_id', 'customer_id $1') ->orderColumn('request_date', 'request_date $1') ->orderColumn('status', 'status_id $1') ->orderColumn('last_lead_email', function ($query, $order) { $query->whereHas('lead_mails', function ($q) use ($order) { // $q->select('sent_at')->where('sent_at', DB::raw("(select max('sent_at') customer_mails)")); //) })->orderBy( LeadMail::select('sent_at') ->whereColumn('lead_id', 'inquiries.id') ->orderBy('sent_at', 'DESC') ->limit(1) , $order); }) ->filterColumn('id', function($query, $keyword) { if($keyword != ""){ $query->where('id', 'LIKE', '%'.$keyword.'%'); } }) ->filterColumn('customer_id', function($query, $keyword) { if($keyword != ""){ $query->where('customer_id', 'LIKE', '%'.$keyword.'%'); } }) ->rawColumns(['action_edit', 'customer_id', 'sf_guard_user_id', 'id', 'status', 'last_lead_email', 'travel_country', 'lead_notice', 'action_delete']) ->make(true); } }