This commit is contained in:
Kevin Adametz 2024-08-05 11:58:09 +02:00
parent c1c613a4b9
commit 881fc84207
384 changed files with 50679 additions and 990 deletions

View file

@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use App\Models\CMSInfo;
use App\Models\CMSInfoAvailable;
use App\Models\CMSInfoHoliday;
use App\Services\HTMLHelper;
use App\Helper\HTMLHelper;
class CMSContentInfoController extends Controller

View file

@ -30,8 +30,15 @@ class UserController extends Controller
return response()->json(['error' => 'Unauthorised'], 401);
}
return response()->json(['error' => 'Unauthorised', 'email' => request('email')], 401);
}
public function test()
{
return "testing";
}
/**
* Register api
* api.mein.sterntours.de

View file

@ -0,0 +1,396 @@
<?php
namespace App\Http\Controllers\Admin;
use Request;
use Carbon\Carbon;
use App\Models\Status;
use App\Services\Util;
use App\Models\Booking;
use App\Models\TravelCompany;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ReportCollectionExport;
class ReportBookingController extends Controller
{
public function __construct()
{
$this->middleware(['superadmin', '2fa']);
}
public function bookings()
{
$data = [
'filter_lead_status' => Status::get()->pluck('name', 'id')->toArray(),
'filter_travel_companies' => TravelCompany::where('active', true)->get()->pluck('name', 'id')->toArray(),
];
return view('admin.report.bookings', $data);
}
public function checkBookings()
{
$data = [
'filter_lead_status' => Status::get()->pluck('name', 'id')->toArray(),
'filter_travel_companies' => TravelCompany::where('active', true)->get()->pluck('name', 'id')->toArray(),
];
return view('admin.report.check_bookings', $data);
}
//checkBookingsDatatable
private function prozessBookingSearch()
{
$query = Booking::with( 'customer', 'lead', 'booking_strono','service_provider_entries', 'service_provider_entries.service_provider')->select('booking.*');
if(Request::get('filter_db_lead_status_id') != ""){
$query->whereHas('lead', function ($q) {
$q->whereIn('status_id', Request::get('filter_db_lead_status_id'));
});
}
if(Request::get('filter_lead_status_id') != ""){
$query->whereHas('lead', function ($q) {
$q->whereIn('status_id', Request::get('filter_lead_status_id'));
});
}
if(Request::get('filter_travel_company_id') != ""){
$query->whereIn("travel_company_id", Request::get('filter_travel_company_id'));
}
if(Request::get('filter_travel_date_from') != ""){
$travel_date_from = Carbon::parse(Request::get('filter_travel_date_from'))->format("Y-m-d");
$query->where("start_date", '>=', $travel_date_from);
}
if(Request::get('filter_travel_date_to') != ""){
$travel_date_to = Carbon::parse(Request::get('filter_travel_date_to'))->format("Y-m-d");
$query->where("start_date", '<=', $travel_date_to);
}
if(Request::get('filter_booking_date_from') != ""){
$filter_booking_date_from = Carbon::parse(Request::get('filter_booking_date_from'))->format("Y-m-d");
$query->where("booking_date", '>=', $filter_booking_date_from);
}
if(Request::get('filter_booking_date_to') != ""){
$filter_booking_date_from = Carbon::parse(Request::get('filter_booking_date_to'))->format("Y-m-d");
$query->where("booking_date", '<=', $filter_booking_date_from);
}
return $query;
}
public function bookingsDatatable()
{
$query = $this->prozessBookingSearch();
return \DataTables::eloquent($query)
->with('price_total_sum', function() use ($query) {
$price1 = with(clone $query)->whereNull('canceled')->sum('price');
$price2 = with(clone $query)->whereNotNull('canceled')->sum('price_canceled');
return Util::_number_format($price1+$price2);
})
->with('price_total_total_sum', function() use ($query) {
return Util::_number_format($query->sum('price_total'));
})
->with('proceed_total_sum', function() use ($query) {
if($query->count() > 200){
return 'max 200 ';
}
$all = $query->get();
$proceeds = 0;
foreach ($all as $v){
$proceeds += $v->proceeds(true);
}
return Util::_number_format($proceeds);
})
->addColumn('id', function (Booking $booking) {
return '<a data-order="' . $booking->id . '" href="' . route('booking_detail', [$booking->id]) . '" data-id="' . $booking->id . '">' . $booking->id . '</a>';
})
->addColumn('customer.fullName', function (Booking $booking) {
return $booking->customer->fullName();
})
->addColumn('price', function (Booking $booking) {
return $booking->booking_strono ? $booking->price_canceled : $booking->price;
})
->addColumn('proceeds', function (Booking $booking) {
return $booking->proceeds();
})
->addColumn('start_date', function (Booking $booking) {
return $booking->getStartDateFormat();
})
->addColumn('end_date', function (Booking $booking) {
return $booking->getEndDateFormat();
})
->addColumn('booking_date', function (Booking $booking) {
return $booking->getBookingDateFormat();
})
->addColumn('booking_strono_date', function (Booking $booking) {
return $booking->booking_strono ? $booking->booking_strono->storno_date->format("d.m.Y") : "";
})
->addColumn('service_provider.names', function (Booking $booking) {
$ret = "";
if($booking->service_provider_entries){
foreach ($booking->service_provider_entries as $service_provider_entry){
$ret .= '<span class="ui-stars">'.$service_provider_entry->service_provider->name." | ";
$ret .= $service_provider_entry->getAmountFinalEur()." | ";
$ret .= $service_provider_entry->is_cleared ? '<i class="fa fa-check text-success"></i>' : '<i class="fa fa-times text-danger"></i>';
$ret .= "</span><br>";
}
}
return $ret === "" ? "-" : $ret;
})
->addColumn('lead.status_id', function (Booking $booking) {
if($booking->lead && $booking->lead->status_id){
$color = $booking->lead->status->color;
$icon = "";
if($booking->lead->status_id == 14 && $booking->lead->is_rebook){
$color = '#94ae59';
$icon = '<i class="fa fa-check-circle"></i> ';
}
if($booking->lead->status_id == 14 && !$booking->lead->is_rebook){
$icon = '<i class="fa fa-times-circle"></i> ';
}
return '<span data-order="'.$booking->lead->status_id.'"><span class="badge badge-dark" style="background-color: '.$color.'">'.$icon.$booking->lead->status->name.'</span></span>';
}
return '<span data-order="0">-</span>';
})
->filterColumn('customer.fullName', function ($query, $keyword) {
if ($keyword != "") {
$query->whereHas('customer', function ($q) use ($keyword) {
$q->where("name", 'LIKE', '%' . $keyword . '%')
->orWhere('firstname', 'LIKE', '%' . $keyword . '%');
});
}
})
->orderColumn('id', 'id $1')
->orderColumn('start_date', 'start_date $1')
->orderColumn('end_date', 'end_date $1')
->orderColumn('price', 'price $1')
->orderColumn('booking_date', 'booking_date $1')
->orderColumn('customer.fullName', 'customer.firstname $1')
->orderColumn('customer.firstname', 'customer.firstname $1')
->orderColumn('customer.name', 'customer.name $1')
//->orderColumn('lead.status_id', 'lead.status_id $1')
//->orderColumn('is_cleared', 'is_cleared $1')
->rawColumns(['id', 'lead.status_id', 'service_provider.names'])
->make(true);
}
public function bookingsExport(){
$query = $this->prozessBookingSearch();
$order = explode(",", Request::get('order'));
$orderByNum = [
0 => "id",
2 => "merlin_order_number",
3 => "price",
4 => "price_total",
7 => "start_date",
8 => "end_date",
9 => "booking_date",
];
if(isset($order[0])) {
$column = isset($orderByNum[$order[0]]) ? $orderByNum[$order[0]] : "start_date";
$direction = isset($order[1]) ? strtoupper($order[1]) : "ASC";
$query->orderBy($column, $direction);
}
$filename = "file-".date('Y-m-d-H-i-s');
$exports = $query->get();
$columns = [];
if(Request::get('export') === "export"){
$filename = "Buchungen_".date('Y-m-d-H-i-s');
$headers = array(
'BuchungsID',
'Status',
'Storno',
'MyJack Nr.',
'Organisation',
'Reisepreis',
'Erlös',
'Kunde',
'Reisedatum',
'bis',
'Buchungsdatum',
'Reiseland',
'Reiseprogramm',
'Reiseteilnehmer',
'Leistungsträger',
'Zahlung',
'Zahlungsdatum',
'Rechnungsnummer',
'abgeschlossen',
);
$total_price = 0;
$total_price_total = 0;
$total_proceeds = 0;
$total_amount_final = 0;
foreach($exports as $export) {
$storno_date = $export->booking_strono ? $export->booking_strono->storno_date->format("d.m.Y") : "";
if($export->service_provider_entries->count()){
$new = true;
foreach ($export->service_provider_entries as $service_provider_entry){
if($new){
$total_price += $export->isCanceled() ? $export->getPriceCanceledRaw() : $export->getPriceRaw();
$total_price_total += $export->getPriceTotalRaw();
$total_proceeds += $export->proceeds(true);
}
$total_amount_final += $service_provider_entry->getAmountFinalEurRaw();
$columns[] = array(
'BuchungsID' => $new ? $export->id : "",
'Status' => $new ? $export->lead->status->name : "",
'Storno' => $new ? $storno_date : "",
'MyJack Nr.' => $new ? $export->merlin_order_number : "",
'Organisation' => $new ? ($export->isCanceled() ? $export->price_canceled : $export->price) : "",
'Reisepreis' => $new ? $export->price_total : "",
'Erlös' => $new ? $export->proceeds() : "",
'Kunde' => $new ? $export->customer->fullName() : "",
'Reisedatum' => $new ? $export->getStartDateFormat() : "",
'bis' => $new ? $export->getEndDateFormat() : "",
'Buchungsdatum' => $new ? $export->getBookingDateFormat() : "",
'Reiseland' => $new && $export->travel_country ? $export->travel_country->name : "",
'Reiseprogramm' => $new && $export->travel_agenda ? $export->travel_agenda->name : "",
'Reiseteilnehmer' => $new ? $export->pax : "",
'Leistungsträger' => $service_provider_entry->service_provider->name,
'Zahlung' => $service_provider_entry->getAmountFinalEur(),
'Zahlungsdatum' => $service_provider_entry->getPaymentDateFormat(),
'Rechnungsnummer' => $service_provider_entry->invoice_number,
'abgeschlossen' => $service_provider_entry->is_cleared ? 'J' : 'N',
);
$new = false;
}
}else{
//$total_price += $export->booking->isCanceled() ? $export->booking->getPriceCanceledRaw() : $export->booking->getPriceRaw();
$total_price += $export->isCanceled() ? $export->getPriceCanceledRaw() : $export->getPriceRaw();
$columns[] = array(
'BuchungsID' => $export->id,
'Status' => $export->lead->status->name,
'Storno' => $storno_date,
'MyJack Nr.' => $export->merlin_order_number,
'Organisation' => $export->price,
'Organisation' => $export->isCanceled() ? $export->price_canceled : $export->price,
'Reisepreis' => $export->price_total,
'Erlös' => $export->proceeds(),
'Kunde' => $export->customer->fullName(),
'Reisedatum' => $export->getStartDateFormat(),
'bis' => $export->getEndDateFormat(),
'Buchungsdatum' => $export->getBookingDateFormat(),
'Reiseland' => $export->travel_country ? $export->travel_country->name : "",
'Reiseprogramm' => $export->travel_agenda ? $export->travel_agenda->name : "",
'Reiseteilnehmer' => $export->pax,
'Leistungsträger' => "",
'Zahlung' => "",
'Zahlungsdatum' => "",
'Rechnungsnummer' => "",
'abgeschlossen' => "",
);
}
}
$columns[] = array(
'BuchungsID' => "Total",
'Status' => "",
'Storno' => "",
'MyJack Nr.' => "",
'Organisation' => Util::_number_format($total_price),
'Reisepreis' => Util::_number_format($total_price_total),
'Erlös' => Util::_number_format($total_proceeds),
'Kunde' => "",
'Reisedatum' => "",
'bis' => "",
'Buchungsdatum' => "",
'Reiseland' => "",
'Reiseprogramm' => "",
'Reiseteilnehmer' => "",
'Leistungsträger' => "",
'Zahlung' => Util::_number_format($total_amount_final),
'Zahlungsdatum' => "",
'Rechnungsnummer' => "",
'abgeschlossen' => "",
);
}
return Excel::download(new ReportCollectionExport($columns, $headers), $filename.'.xls');
}
public function checkBookingsDatatable()
{
$query = $this->prozessBookingSearch();
return \DataTables::eloquent($query)
->addColumn('id', function (Booking $booking) {
return '<a data-order="' . $booking->id . '" href="' . route('booking_detail', [$booking->id]) . '" data-id="' . $booking->id . '">' . $booking->id . '</a>';
})
->addColumn('old_crm', function (Booking $booking) {
return '<a data-order="'.$booking->id.'" href="'.make_old_url('booking/'.$booking->id.'/edit').'" data-id="'.$booking->id.'">'.$booking->id.'</a>';
})
->addColumn('id', function (Booking $booking) {
return '<a data-order="' . $booking->id . '" href="' . route('booking_detail', [$booking->id]) . '" data-id="' . $booking->id . '">' . $booking->id . '</a>';
})
->addColumn('price', function (Booking $booking) {
return $booking->price;
})
->addColumn('service_total', function (Booking $booking) {
return $booking->getServiceTotal();
})
->addColumn('price_total', function (Booking $booking) {
return $booking->price_total;
})
->addColumn('check_total', function (Booking $booking) {
$check = $booking->getPriceRaw() + $booking->getServiceTotal(true);
return ($booking->getPriceTotalRaw() != $check) ? '<span class="badge badge-danger">'.Util::_number_format($check).'</span>' : "";
})
->addColumn('price_canceled', function (Booking $booking) {
return $booking->isCanceled() ? $booking->price_canceled : "";
})
->addColumn('start_date', function (Booking $booking) {
return $booking->getStartDateFormat();
})
->addColumn('end_date', function (Booking $booking) {
return $booking->getEndDateFormat();
})
->addColumn('booking_date', function (Booking $booking) {
return $booking->getBookingDateFormat();
})
->addColumn('lead.status_id', function (Booking $booking) {
if($booking->lead && $booking->lead->status_id){
$color = $booking->lead->status->color;
$icon = "";
if($booking->lead->status_id == 14 && $booking->lead->is_rebook){
$color = '#94ae59';
$icon = '<i class="fa fa-check-circle"></i> ';
}
if($booking->lead->status_id == 14 && !$booking->lead->is_rebook){
$icon = '<i class="fa fa-times-circle"></i> ';
}
return '<span data-order="'.$booking->lead->status_id.'"><span class="badge badge-dark" style="background-color: '.$color.'">'.$icon.$booking->lead->status->name.'</span></span>';
}
return '<span data-order="0">-</span>';
})
->orderColumn('id', 'id $1')
->orderColumn('old_crm', 'old_crm $1')
->orderColumn('start_date', 'start_date $1')
->orderColumn('end_date', 'end_date $1')
->orderColumn('price', 'price $1')
->orderColumn('booking_date', 'booking_date $1')
->orderColumn('customer.firstname', 'customer.firstname $1')
->orderColumn('customer.name', 'customer.name $1')
//->orderColumn('lead.status_id', 'lead.status_id $1')
//->orderColumn('is_cleared', 'is_cleared $1')
->rawColumns(['id', 'old_crm', 'check_total', 'lead.status_id'])
->make(true);
}
}

View file

@ -0,0 +1,205 @@
<?php
namespace App\Http\Controllers\Admin;
use Request;
use Response;
use HTMLHelper;
use Carbon\Carbon;
use App\Models\Status;
use App\Services\Util;
use App\Models\Booking;
use App\Models\FewoLodging;
use App\Models\TravelAgenda;
use App\Models\TravelCompany;
use App\Models\ServiceProvider;
use Illuminate\Validation\Rules\In;
use App\Http\Controllers\Controller;
use App\Models\ServiceProviderEntry;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\TravelUserBookingFewo;
use App\Exports\ReportCollectionExport;
class ReportFewoController extends Controller
{
public function __construct()
{
$this->middleware(['superadmin', '2fa']);
}
public function fewo()
{
$data = [
'filter_fewo_options' => FewoLodging::get()->pluck('name', 'id'),
];
return view('admin.report.fewo', $data);
}
//checkFewoDatatable
private function prozessFewoSearch()
{
$query = TravelUserBookingFewo::with('travel_booking_fewo_channel')->with('fewo_lodging')
->select('travel_user_booking_fewos.*')
->where('deleted_at', '=', null);
if(Request::get('filter_option_fewo_id') != ""){
$query->where('fewo_lodging_id', '=', Request::get('filter_option_fewo_id'));
}
if(Request::get('filter_date_from') != ""){
$date_from = Carbon::parse(Request::get('filter_date_from'))->format("Y-m-d");
$query->where("from_date", '>=', $date_from);
}
if(Request::get('filter_date_to') != ""){
$date_to = Carbon::parse(Request::get('filter_date_to'))->format("Y-m-d");
$query->where("to_date", '<=', $date_to);
}
if(Request::get('filter_booking_date_from') != ""){
$booking_date_from = Carbon::parse(Request::get('filter_booking_date_from'))->format("Y-m-d");
$query->where("booking_date", '>=', $booking_date_from);
}
if(Request::get('filter_booking_date_to') != ""){
$booking_date_to = Carbon::parse(Request::get('filter_booking_date_to'))->format("Y-m-d");
$query->where("booking_date", '<=', $booking_date_to);
}
return $query;
}
public function fewoDatatable()
{
$query = $this->prozessFewoSearch();
return \DataTables::eloquent($query)
->with('price_total_sum', function() use ($query) {
if($query->count() > 2000){
return 'max 2000 ';
}
$all = $query->get();
$proceeds = 0;
foreach ($all as $v){
$proceeds += $v->getPriceTotalRaw();
}
return Util::_number_format($proceeds);
})
->addColumn('id', function (TravelUserBookingFewo $travel_user_booking_fewo) {
return '<a data-order="'.$travel_user_booking_fewo->id.'" href="' . route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id]) . '" class="">' . $travel_user_booking_fewo->id . '</a>';
// return '<a data-order="' . $travel_user_booking_fewo->id . '" href="' . route('booking_detail', [$travel_user_booking_fewo->id]) . '" data-id="' . $travel_user_booking_fewo->id . '">' . $travel_user_booking_fewo->id . '</a>';
})
->addColumn('travel_user', function (TravelUserBookingFewo $travel_user_booking_fewo) {
return '<a href="' . route('travel_user_detail', [$travel_user_booking_fewo->travel_user_id]) . '">'.$travel_user_booking_fewo->travel_user->first_name.' '.$travel_user_booking_fewo->travel_user->last_name.'</a>';
})
/* ->addColumn('start_date', function (TravelUserBookingFewo $travel_user_booking_fewo) {
return $travel_user_booking_fewo->getStartDateFormat();
})
->addColumn('end_date', function (TravelUserBookingFewo $travel_user_booking_fewo) {
return $travel_user_booking_fewo->getEndDateFormat();
})
/* ->addColumn('booking_date', function (TravelUserBookingFewo $travel_user_booking_fewo) {
return $travel_user_booking_fewo->getBookingDateFormat();
})
*/
->orderColumn('id', 'id $1')
->orderColumn('from_date', 'from_date $1')
->orderColumn('to_date', 'to_date $1')
->orderColumn('price_total', 'price_total $1')
->orderColumn('booking_date', 'booking_date $1')
->orderColumn('invoice_number', 'invoice_number $1')
//->orderColumn('lead.status_id', 'lead.status_id $1')
//->orderColumn('is_cleared', 'is_cleared $1')
->rawColumns(['id', 'travel_user'])
->make(true);
}
public function fewoExport(){
$query = $this->prozessFewoSearch();
$order = explode(",", Request::get('order'));
$orderByNum = [
0 => 'id',
1 => 'fewo_lodging.name',
2 => 'travel_user',
3 => 'from_date',
4 => 'to_date',
5 => 'adults',
6 => 'children',
7 => 'persons',
8 => 'price_total',
9 => 'booking_date',
10 => 'invoice_number',
];
if(isset($order[0])) {
$column = isset($orderByNum[$order[0]]) ? $orderByNum[$order[0]] : "id";
$direction = isset($order[1]) ? strtoupper($order[1]) : "ASC";
$query->orderBy($column, $direction);
}
$filename = "file-".date('Y-m-d-H-i-s');
$exports = $query->get();
$columns = [];
if(Request::get('export') === "export"){
$filename = "Buchungen_Fewo_".date('Y-m-d-H-i-s');
$headers = array(
'BuchungsID',
'FeWo',
'Kunde',
'vom',
'bis',
'Erwachsene',
'Kinder',
'Gesamt',
'Betrag',
'Buchungsdatum',
'R-Nr',
);
$total_price_total = 0;
foreach($exports as $export) {
$total_price_total += $export->getPriceTotalRaw();
$columns[] = array(
'BuchungsID' => $export->id,
'FeWo' => $export->fewo_lodging->name,
'Kunde' => $export->travel_user_id ? $export->travel_user->first_name.' '.$export->travel_user->last_name : " ",
'vom' => $export->from_date,
'bis' => $export->to_date,
'Erwachsene' => $export->adults,
'Kinder' => $export->children,
'Gesamt' => $export->persons,
'Betrag' => $export->price_total,
'Buchungsdatum' => $export->booking_date,
'R-Nr' => $export->invoice_number,
);
}
$columns[] = array(
'BuchungsID' => "Total",
'FeWo' => "",
'Kunde' => "",
'vom' => "",
'bis' => "",
'Erwachsene' => "",
'Kinder' => "",
'Gesamt' => Util::_number_format($total_price_total),
'Betrag' => "",
'Buchungsdatum' => "",
'R-Nr' => "",
);
}
return Excel::download(new ReportCollectionExport($columns, $headers), $filename.'.xls');
}
}

View file

@ -0,0 +1,217 @@
<?php
namespace App\Http\Controllers\Admin;
use Request;
use Response;
use HTMLHelper;
use Carbon\Carbon;
use App\Models\Lead;
use App\Models\Status;
use App\Services\Util;
use App\Models\Booking;
use App\Models\LeadMail;
use App\Models\FewoLodging;
use App\Models\TravelAgenda;
use App\Models\TravelCompany;
use App\Models\ServiceProvider;
use Illuminate\Validation\Rules\In;
use App\Http\Controllers\Controller;
use App\Models\ServiceProviderEntry;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\TravelUserBookingFewo;
use App\Exports\ReportCollectionExport;
class ReportLeadsController extends Controller
{
public function __construct()
{
$this->middleware(['superadmin', '2fa']);
}
public function leads()
{
// $query = Lead::with('customer')->with('sf_guard_user')->with('status')->select('lead.*');
$data = [
'filter_leads_options' => [], //need ??? FewoLodging::get()->pluck('name', 'id'),
];
return view('admin.report.leads', $data);
}
//checkLeadsDatatable
private function prozessLeadsSearch()
{
$query = Lead::with('customer')->with('sf_guard_user')->with('status')
->select('lead.*');
//->where('deleted_at', '=', null);
/*
if(Request::get('filter_option_leads_id') != ""){
$query->where('...?', '=', Request::get('filter_option_leads_id'));
}
*/
if(Request::get('filter_date_from') != ""){
$date_from = Carbon::parse(Request::get('filter_date_from'))->format("Y-m-d");
$query->where("request_date", '>=', $date_from);
}
if(Request::get('filter_date_to') != ""){
$date_to = Carbon::parse(Request::get('filter_date_to'))->format("Y-m-d");
$query->where("request_date", '<=', $date_to);
}
return $query;
}
public function leadsDatatable()
{
$query = $this->prozessLeadsSearch();
return \DataTables::eloquent($query)
->addColumn('id', function (Lead $lead) {
return '<a data-order="'.$lead->id.'" href="'.route('lead_detail', [$lead->id]).'" data-id="'.$lead->id.'">'.$lead->id.'</a>';
})
->addColumn('customer_id', function (Lead $lead) {
return '<a data-order="'.$lead->customer_id.'" href="'.route('customer_detail', [$lead->customer_id]).'" data-id="'.$lead->customer_id.'">'.$lead->customer_id.'</a>';
})
->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() ? '<span data-order="1" class="badge badge-pill badge-success" data-lead_id="'.$lead->id.'" data-action="get_popover_lead_notice" data-placement="top" data-toggle="popover" title="letzte Notiz"><i class="fa fa-check"></i></span>' :
'<span data-order="0" class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>';
})
->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 '<a data-order="'.$lead_mail->getSentAtRaw().'" href="#" data-toggle="modal"
data-target="#modals-load-content"
data-id="show-mail"
data-url="mail"
data-preview="true"
data-lead_id="'.$lead->id.'"
data-lead_mail_id="'.$lead_mail->id.'"
data-action="show-lead-mail"
data-redirect="back"
data-route="'.route('lead_mail_modal_load').'">
<span class="badge '.$badge.'">'
.($lead_mail->send ? '<i class="fa fa-check-circle"></i>' : '<i class="fa fa-times-circle"></i>').' '
.$lead_mail->sent_at.'</span>
</a>';
}
return '<span data-order="">-</span>';
})
->addColumn('action_delete', function (Lead $lead) {
return '<a href="' . route('lead_delete', [$lead->id, 'lead']) . '" class="btn icon-btn btn-sm btn-danger" onclick="return confirm(\''.__('Really delete entry?').'\');"><span class="fa fa-trash"></span></a>';
})
->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', 'lead.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);
}
public function leadsExport(){
$query = $this->prozessLeadsSearch();
$order = explode(",", Request::get('order'));
$orderByNum = [
0 => 'id',
1 => 'customer_id',
2 => 'customer.firstname',
3 => 'customer.name',
4 => 'customer.email',
5 => 'request_date',
6 => 'travel_country',
7 => 'sf_guard_user.last_name',
8 => 'status',
9 => 'last_lead_email',
];
if(isset($order[0])) {
$column = isset($orderByNum[$order[0]]) ? $orderByNum[$order[0]] : "id";
$direction = isset($order[1]) ? strtoupper($order[1]) : "ASC";
$query->orderBy($column, $direction);
}
$filename = "file-".date('Y-m-d-H-i-s');
$exports = $query->get();
$columns = [];
if(Request::get('export') === "export"){
$filename = "Buchungen_Anfragen_".date('Y-m-d-H-i-s');
$headers = array(
'LeadID',
'KundenID',
'Vorname',
'Nachname',
'E-Mail',
'Anfrage-Datum',
'Reiseland',
'Sachbearbeiter',
'Status',
'Letzte E-Mail',
);
foreach($exports as $export) {
$columns[] = array(
'LeadID' => $export->id,
'KundenID' => $export->customer_id,
'Vorname' => $export->customer ? $export->customer->firstname : " ",
'Nachname' => $export->customer ? $export->customer->name : " ",
'E-Mail' => $export->customer ? $export->customer->email : " ",
'Anfrage-Datum' => _format_date($export->request_date),
'Reiseland' => $export->getTravelCountryDestco(false),
'Sachbearbeiter' => $export->sf_guard_user->last_name,
'Status' => $export->status->name,
'Letzte E-Mail' => $export->lead_mails->count() ? $export->lead_mails_sent_at->last()->sent_at : " ",
);
}
}
return Excel::download(new ReportCollectionExport($columns, $headers), $filename.'.xls');
}
}

View file

@ -0,0 +1,388 @@
<?php
namespace App\Http\Controllers\Admin;
use Request;
use Carbon\Carbon;
use App\Models\Status;
use App\Services\Util;
use App\Models\TravelCompany;
use App\Models\ServiceProvider;
use App\Http\Controllers\Controller;
use App\Models\ServiceProviderEntry;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ReportCollectionExport;
class ReportProviderController extends Controller
{
public function __construct()
{
$this->middleware(['superadmin', '2fa']);
}
public function providers()
{
$data = [
'serviceProviders' => ServiceProvider::all(),
'filter_lead_status' => Status::get()->pluck('name', 'id')->toArray(),
'filter_travel_companies' => TravelCompany::where('active', true)->get()->pluck('name', 'id')->toArray(),
];
return view('admin.report.service_providers', $data);
}
private function prozessProvidersSearch(){
$query = ServiceProviderEntry::with('booking', 'service_provider', 'booking.customer', 'booking.lead')->select('service_provider_entry.*')
->join('booking', 'service_provider_entry.booking_id', '=', 'booking.id' );
if(Request::get('filter_db_lead_status_id') != ""){
$query->whereHas('booking', function ($qe) {
$qe->whereHas('lead', function ($q) {
$q->whereIn('status_id', Request::get('filter_db_lead_status_id'));
});
});
}
if(Request::get('filter_lead_status_id') != ""){
$query->whereHas('booking', function ($qe) {
$qe->whereHas('lead', function ($q) {
$q->whereIn('status_id', Request::get('filter_lead_status_id'));
});
});
}
if(Request::get('filter_travel_company_id') != ""){
$query->whereHas('booking', function ($q) {
$q->whereIn("travel_company_id", Request::get('filter_travel_company_id'));
});
}
if(Request::get('filter_is_cleared') != ""){
$query->where('is_cleared', '=', Request::get('filter_is_cleared'));
}
if(Request::get('filter_service_provider_id') != ""){
$query->where('service_provider_id', '=', Request::get('filter_service_provider_id'));
}
if(Request::get('filter_travel_date_from') != ""){
$query->whereHas('booking', function ($q) {
$travel_date_from = Carbon::parse(Request::get('filter_travel_date_from'))->format("Y-m-d");
$q->where("start_date", '>=', $travel_date_from);
});
}
if(Request::get('filter_travel_date_to') != ""){
$query->whereHas('booking', function ($q) {
$travel_date_to = Carbon::parse(Request::get('filter_travel_date_to'))->format("Y-m-d");
$q->where("start_date", '<=', $travel_date_to);
});
}
if(Request::get('filter_booking_date_from') != ""){
$query->whereHas('booking', function ($q) {
$filter_booking_date_from = Carbon::parse(Request::get('filter_booking_date_from'))->format("Y-m-d");
$q->where("booking_date", '>=', $filter_booking_date_from);
});
}
if(Request::get('filter_booking_date_to') != ""){
$query->whereHas('booking', function ($q) {
$filter_booking_date_to = Carbon::parse(Request::get('filter_booking_date_to'))->format("Y-m-d");
$q->where("booking_date", '<=', $filter_booking_date_to);
});
}
return $query;
}
public function providersDatatable()
{
$query = $this->prozessProvidersSearch();
return \DataTables::eloquent($query)
->with('price_total_sum', function() use ($query) {
if($query->count() > 200){
return 'max 200 ';
}
$all = $query->get();
$price = 0;
$isset = [];
foreach ($all as $v){
if(!in_array($v->booking->lead_id, $isset)){
$price += $v->booking->isCanceled() ? $v->booking->getPriceCanceledRaw() : $v->booking->getPriceRaw();
}
$isset[] = $v->booking->lead_id;
}
return Util::_number_format($price);
})
->with('price_total_total_sum', function() use ($query) {
if($query->count() > 200){
return 'max 200 ';
}
$all = $query->get();
$price = 0;
$isset = [];
foreach ($all as $v){
$price += in_array($v->booking->lead_id, $isset) ? 0 : $v->booking->getPriceTotalRaw();
$isset[] = $v->booking->lead_id;
}
return Util::_number_format($price);
})
->with('proceed_total_sum', function() use ($query) {
if($query->count() > 200){
return 'max 200 ';
}
$all = $query->get();
$proceeds = 0;
$isset = [];
foreach ($all as $v){
$proceeds += in_array($v->booking->lead_id, $isset) ? 0 : $v->booking->proceeds(true);
$isset[] = $v->booking->lead_id;
}
return Util::_number_format($proceeds);
/*$all = $query->get();
$proceeds = 0;
foreach ($all as $v){
$proceeds += $v->proceeds(true);
}
return Util::_number_format($proceeds);*/
})
->addColumn('booking.id', function (ServiceProviderEntry $serviceProviderEntry) {
return '<a data-order="' . $serviceProviderEntry->booking->id . '" href="' . route('booking_detail', [$serviceProviderEntry->booking->id]) . '" data-id="' . $serviceProviderEntry->booking->id . '">' . $serviceProviderEntry->booking->id . '</a>';
})
->addColumn('booking.customer.fullName', function (ServiceProviderEntry $serviceProviderEntry) {
return $serviceProviderEntry->booking->customer->fullName();
})
->addColumn('booking.price', function (ServiceProviderEntry $serviceProviderEntry) {
return $serviceProviderEntry->booking->booking_strono ? $serviceProviderEntry->booking->price_canceled : $serviceProviderEntry->booking->price;
})
->addColumn('booking.proceeds', function (ServiceProviderEntry $serviceProviderEntry) {
return $serviceProviderEntry->booking->proceeds();
})
->addColumn('booking.start_date', function (ServiceProviderEntry $serviceProviderEntry) {
return $serviceProviderEntry->booking->getStartDateFormat();
})
->addColumn('booking.end_date', function (ServiceProviderEntry $serviceProviderEntry) {
return $serviceProviderEntry->booking->getEndDateFormat();
})
->addColumn('booking.booking_date', function (ServiceProviderEntry $serviceProviderEntry) {
return $serviceProviderEntry->booking->getBookingDateFormat();
})
->addColumn('is_cleared', function (ServiceProviderEntry $serviceProviderEntry) {
return $serviceProviderEntry->is_cleared ? ' <span data-order="1" class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>' : '<span data-order="0" class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>';
})
->addColumn('booking.lead.status_id', function (ServiceProviderEntry $serviceProviderEntry) {
if($serviceProviderEntry->booking->lead && $serviceProviderEntry->booking->lead->status_id){
$color = $serviceProviderEntry->booking->lead->status->color;
$icon = "";
if($serviceProviderEntry->booking->lead->status_id == 14 && $serviceProviderEntry->booking->lead->is_rebook){
$color = '#94ae59';
$icon = '<i class="fa fa-check-circle"></i> ';
}
if($serviceProviderEntry->booking->lead->status_id == 14 && !$serviceProviderEntry->booking->lead->is_rebook){
$icon = '<i class="fa fa-times-circle"></i> ';
}
return '<span data-order="'.$serviceProviderEntry->booking->lead->status_id.'"><span class="badge badge-dark" style="background-color: '.$color.'">'.$icon.$serviceProviderEntry->booking->lead->status->name.'</span></span>';
}
return '<span data-order="0">-</span>';
})
->filterColumn('booking.customer.fullName', function ($query, $keyword) {
if ($keyword != "") {
$query->whereHas('booking', function ($q) use ($keyword) {
$q->whereHas('customer', function ($q) use ($keyword) {
$q->where("name", 'LIKE', '%' . $keyword . '%')
->orWhere('firstname', 'LIKE', '%' . $keyword . '%');
});
});
}
})
->orderColumn('booking.id', 'booking.id $1')
->orderColumn('booking.price', 'booking.price $1')
->orderColumn('booking.start_date', 'booking.start_date $1')
->orderColumn('booking.end_date', 'booking.end_date $1')
->orderColumn('booking.booking_date', 'booking.booking_date $1')
->orderColumn('booking.customer.firstname', 'booking.customer.firstname $1')
->orderColumn('booking.customer.name', 'booking.customer.name $1')
->orderColumn('is_cleared', 'is_cleared $1')
->rawColumns(['is_cleared', 'booking.id', 'booking.lead.status_id'])
->make(true);
}
public function providersExport()
{
$query = $this->prozessProvidersSearch();
$order = explode(",", Request::get('order'));
$orderByNum = [
0 => "id",
1 => "booking.id", //booking
4 => "booking.merlin_order_number",//booking
5 => "booking.price",//booking
6 => "booking.price_total",//booking
9 => "booking.start_date",//booking
10 => "booking.end_date",//booking
11 => "booking.booking_date",//booking
12 => "is_cleared",
];
if(isset($order[0])){
$column = isset($orderByNum[$order[0]]) ? $orderByNum[$order[0]] : "start_date";
$direction = isset($order[1]) ? strtoupper($order[1]) : "ASC";
$query->orderBy($column, $direction);;
}
$filename = "file-".date('Y-m-d-H-i-s');
$exports = $query->get();
$ctemps = [];
$columns = [];
if(Request::get('export') === "export"){
$filename = "Export_".date('Y-m-d-H-i-s');
$headers = array(
'Zähler',
'MyJack Nr.',
'CRM Nr',
'Kunde',
'Reisedatum',
'bis',
'Buchungsdatum',
'Organisation',
'Gesamtreisepreis',
'Reiseland',
'Reiseprogramm',
'Reiseteilnehmer',
'Leistungsträger',
'Rechnungsnummer',
'Zahlung',
'Zahlungsdatum',
'Erlös',
'Konto',
);
$isset = [];
$total_price = 0;
$total_price_total = 0;
$total_amount_final = 0;
$total_proceeds = 0;
foreach($exports as $export) {
$new = in_array($export->booking->id, $isset) ? false : true;
if($new){
$total_price += $export->booking->isCanceled() ? $export->booking->getPriceCanceledRaw() : $export->booking->getPriceRaw();
$total_price_total += $export->booking->getPriceTotalRaw();
$total_proceeds += $export->booking->proceeds(true);
}
$total_amount_final += $export->getAmountFinalEurRaw();
$ctemps[$export->booking->id][] = array(
'Zähler' => $new ? $export->getCounter() : "",
'MyJack Nr.' => $new ? $export->booking->merlin_order_number : "",
'CRM Nr' => $new ? $export->booking->lead_id : "",
'Kunde' => $new ? $export->booking->customer->name : "",
'Reisedatum' => $new ? $export->booking->getStartDateFormat() : "",
'bis' => $new ? $export->booking->getEndDateFormat() : "",
'Buchungsdatum' => $export->booking->getBookingDateFormat(),
'Organisation' => $new ? ($export->booking->isCanceled() ? $export->booking->price_canceled : $export->booking->price) : "",
'Gesamtreisepreis' => $new ? $export->booking->price_total : "",
'Reiseland' => $new && $export->booking->travel_country ? $export->booking->travel_country->name : "",
'Reiseprogramm' => $new && $export->booking->travel_agenda ? $export->booking->travel_agenda->name : "",
'Reiseteilnehmer' => $new ? $export->booking->pax : "",
'Leistungsträger' => $export->service_provider->name,
'Rechnungsnummer' => $export->invoice_number,
'Zahlung' => $export->getAmountFinalEur(),
'Zahlungsdatum' => $export->getPaymentDateFormat(),
'Erlös' => $new ? $export->booking->proceeds() : "",
'Konto' => $export->booking->getKontoNumber()
);
$isset[] = $export->booking->id;
}
foreach($ctemps as $bid => $value){
$columns = array_merge($columns, $value);
}
$columns[] = array(
'Zähler' => "Total",
'MyJack Nr.' => "",
'CRM Nr' => "",
'Kunde' =>"",
'Reisedatum' => "",
'bis' => "",
'Buchungsdatum' => "",
'Organisation' => Util::_number_format($total_price),
'Gesamtreisepreis' => Util::_number_format($total_price_total),
'Reiseland' => "",
'Reiseprogramm' => "",
'Reiseteilnehmer' => "",
'Leistungsträger' => "",
'Rechnungsnummer' => "",
'Zahlung' => Util::_number_format($total_amount_final),
'Zahlungsdatum' => "",
'Erlös' => Util::_number_format($total_proceeds),
'Konto' => ""
);
}
if(Request::get('export') === "export_lt"){
$filename = "Export_LT_".date('Y-m-d-H-i-s');
$headers = array(
'Zähler',
'MyJack Nr.',
'CRM Nr',
'Kunde',
'Reisedatum',
'bis',
'Buchungsdatum',
'Reiseland',
'Reiseprogramm',
'Reiseteilnehmer',
'Leistungsträger',
'Rechnungsnummer',
'Zahlung',
'ZahlungVorgang',
);
$isset = [];
$total_amount_final = 0;
$payments_total = 0;
foreach($exports as $export) {
$new = in_array($export->booking->id, $isset) ? false : true;
if($new) {
$payments_total += $export->booking->getServiceProviderPaymentsTotal(true);
}
$total_amount_final += $export->getAmountFinalEurRaw();
$ctemps[$export->booking->id][] = array(
'Zähler' => $new ? $export->getCounter() : "",
'MyJack Nr.' => $new ? $export->booking->merlin_order_number : "",
'CRM Nr' => $new ? $export->booking->lead_id : "",
'Kunde' => $new ? $export->booking->customer->name : "",
'Reisedatum' => $new ? $export->booking->getStartDateFormat() : "",
'bis' => $new ? $export->booking->getEndDateFormat() : "",
'Buchungsdatum' => $new ? $export->booking->getBookingDateFormat() : "",
'Reiseland' => $new && $export->booking->travel_country ? $export->booking->travel_country->name : "",
'Reiseprogramm' => $new && $export->booking->travel_agenda ? $export->booking->travel_agenda->name : "",
'Reiseteilnehmer' => $new ? $export->booking->pax : "",
'Leistungsträger' => $export->service_provider->name,
'Rechnungsnummer' => $export->invoice_number,
'Zahlung' => $export->getAmountFinalEur(),
'ZahlungVorgang' => $export->booking->getServiceProviderPaymentsTotal(),
);
$isset[] = $export->booking->id;
}
foreach($ctemps as $bid => $value){
$columns = array_merge($columns, $value);
}
$columns[] = array(
'Zähler' => "Total",
'MyJack Nr.' => "",
'CRM Nr' => "",
'Kunde' => "",
'Reisedatum' => "",
'bis',
'Buchungsdatum' => "",
'Reiseland' => "",
'Reiseprogramm' => "",
'Reiseteilnehmer' => "",
'Leistungsträger' => "",
'Rechnungsnummer' => "",
'Zahlung' => Util::_number_format($total_amount_final),
'ZahlungVorgang' => Util::_number_format($payments_total),
);
}
return Excel::download(new ReportCollectionExport($columns, $headers), $filename.'.xls');
}
}

View file

@ -9,7 +9,7 @@ use App\User;
use Validator;
use DataTables;
use App\Models\Account;
use App\Services\HTMLHelper;
use App\Helper\HTMLHelper;
use App\Services\MyGoogle2FA;
use App\Mail\MailVerifyContact;
use App\Repositories\UserRepository;

View file

@ -46,6 +46,7 @@ class LoginController extends Controller
$user->last_login = date('Y-m-d H:i:s');
$user->save();
}
protected function handleUserWasAuthenticated(Request $request, $throttles)
{

View file

@ -5,27 +5,33 @@ namespace App\Http\Controllers;
use Request;
use App\Models\Booking;
use App\Models\BookingFile;
use App\Models\Participant;
use App\Models\BookingNotice;
use App\Models\TravelCompany;
use App\Models\ServiceProvider;
use App\Models\BookingDraftItem;
use App\Models\BookingServiceItem;
use App\Models\Participant;
use App\Models\ServiceProviderEntry;
use App\Models\TravelCompany;
use App\Repositories\DraftRepository;
use App\Repositories\BookingRepository;
use App\Repositories\CustomerRepository;
use App\Repositories\BookingPDFRepository;
use App\Repositories\BookingFileRepository;
use App\Repositories\CustomerFileRepository;
use App\Repositories\CustomerMailRepository;
class BookingController extends Controller
{
protected $bookingRepo;
protected $custRepo;
public function __construct(BookingRepository $bookingRepo)
public function __construct(BookingRepository $bookingRepo, CustomerRepository $custRepo)
{
$this->middleware(['admin', '2fa']);
$this->bookingRepo = $bookingRepo;
$this->custRepo = $custRepo;
}
public function index($step = false)
@ -63,6 +69,29 @@ class BookingController extends Controller
$data = Request::all();
if($id === "new") {
$booking = new Booking();
}else{
$booking = Booking::findOrFail($id);
}
if($data['action'] === 'deleteAllChecked'){
if(!isset($data['draft_item_delete']) || !$data['draft_item_delete']){
\Session()->flash('alert-error', 'Es wurden keine Leistungen ausgewählt');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingOrganisation");
}
foreach ($data['draft_item_delete'] as $draft_item_delete_id => $v) {
$booking_draft_item = BookingDraftItem::findOrFail($draft_item_delete_id);
if($booking_draft_item->booking_id === $booking->id){
$booking_draft_item->delete();
}
}
$booking->calculate_price_total();
return redirect(route('booking_detail', [$booking->id])."#collapseBookingOrganisation");
}
if($data['action'] === 'save_notice'){
$booking = $this->bookingRepo->updateNotice($id, $data);
\Session()->flash('alert-save', '1');
@ -73,65 +102,16 @@ class BookingController extends Controller
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingNotice");
}
if($data['action'] === 'save_lead_status'){
$booking = $this->bookingRepo->updateLeadStatus($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingLead");
}
if($data['action'] === 'update_booking'){
$booking = $this->bookingRepo->updateBooking($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingBooking");
if(strpos($data['action'], 'createPDF') !== false) {
$bookingPDF = new BookingPDFRepository($booking);
$bookingPDF->createPDF($id, $data);
\Session()->flash('alert-success', 'PDF Datei erstellt');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingFiles");
}
if($data['action'] === 'update_booking_services'){
$booking = $this->bookingRepo->updateBookingServices($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingServices");
}
if($data['action'] === 'update_booking_number'){
$booking = $this->bookingRepo->updateBookingNumber($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingMyJack");
}
if($data['action'] === 'update_booking_price'){
$booking = $this->bookingRepo->updateBookingPrice($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingPrice");
}
if($data['action'] === 'update_service_provider_entry'){
$booking = $this->bookingRepo->updateServiceProviderEntry($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingProvider");
}
if($data['action'] === 'update_booking_service_item'){
$booking = $this->bookingRepo->updateBookingServiceItem($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingProvider");
}
if($data['action'] === 'update_booking_participant'){
$booking = $this->bookingRepo->updateBookingParticipant($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingParticipant");
}
if($id === "new") {
$booking = new Booking();
}else{
$booking = Booking::findOrFail($id);
}
// $booking->merlin_order_number = $data['merlin_order_number'];
// $booking->save();
$i = 1;
$redirect = route('booking_detail', [$booking->id]);
$i= 1;
if($data['action'] === 'addItemUp'){
$travel_program_id = null;
$request_date = null;
@ -142,49 +122,50 @@ class BookingController extends Controller
$request_date = $first_booking_draft_item->request_date;
$comfort = $first_booking_draft_item->comfort;
}
$booking->booking_draft_items()->create([
'booking_id' => $booking->id,
'travel_program_id' => $travel_program_id,
'fewo_lodging_id' => null,
'travel_class_id' => null,
'draft_item_id' => null,
'draft_type_id' => null,
'request_date' => $request_date,
'days_start' => null,
'days_duration' => null,
'start_date' => null,
'end_date' => null,
'service' => '',
'price_adult' => null,
'adult' => null ,
'price_children' => 0,
'children' => 0,
'price' => 0,
'pos' => $i,
'in_pdf' => true,
'comfort' => $comfort
]);
$i++;
$add_draft_items_up_number = isset($data['add_draft_items_up_number']) ? intval($data['add_draft_items_up_number']) : 1;
for ($j=0; $j < $add_draft_items_up_number; $j++) {
$booking->booking_draft_items()->create([
'booking_id' => $booking->id,
'travel_program_id' => $travel_program_id,
'fewo_lodging_id' => null,
'travel_class_id' => null,
'draft_item_id' => null,
'draft_type_id' => null,
'request_date' => $request_date,
'days_start' => null,
'days_duration' => null,
'start_date' => null,
'end_date' => null,
'service' => '',
'price_adult' => null,
'adult' => null ,
'price_children' => 0,
'children' => 0,
'price' => 0,
'pos' => $i,
'in_pdf' => true,
'comfort' => $comfort
]);
$i++;
}
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingOrganisation");
}
if(isset($data['draft_item'])){
foreach ($data['draft_item'] as $booking_draft_item_id => $draft_item){
$BookingDraftItem = BookingDraftItem::findOrFail($booking_draft_item_id);
$draft_item['price_adult'] = isset($draft_item['price_adult']) ? $draft_item['price_adult'] : null;
$draft_item['adult'] = isset($draft_item['adult']) ? $draft_item['adult'] : null;
$draft_item['price_children'] = isset($draft_item['price_children']) ? $draft_item['price_children'] : null;
$draft_item['children'] = isset($draft_item['children']) ? $draft_item['children'] : null;
$draft_item['price'] = isset($draft_item['price']) ? $draft_item['price'] : null;
$draft_item['pos'] = $i++;
$draft_item['in_pdf'] = isset($draft_item['in_pdf']) ? true : false;
$BookingDraftItem->fill($draft_item);
$BookingDraftItem->save();
}
}
if($data['action'] === 'addItemDown'){
$travel_program_id = null;
$request_date = null;
@ -195,30 +176,88 @@ class BookingController extends Controller
$request_date = $first_booking_draft_item->request_date;
$comfort = $first_booking_draft_item->comfort;
}
$booking->booking_draft_items()->create([
'booking_id' => $booking->id,
'travel_program_id' => $travel_program_id,
'fewo_lodging_id' => null,
'travel_class_id' => null,
'draft_item_id' => null,
'draft_type_id' => null,
'request_date' => $request_date,
'days_start' => null,
'days_duration' => null,
'start_date' => null,
'end_date' => null,
'service' => '',
'price_adult' => null,
'adult' => null ,
'price_children' => 0,
'children' => 0,
'price' => 0,
'pos' => $i,
'in_pdf' => true,
'comfort' => $comfort
]);
$add_draft_items_up_number = isset($data['add_draft_items_down_number']) ? intval($data['add_draft_items_down_number']) : 1;
for ($j=0; $j < $add_draft_items_up_number; $j++) {
$booking->booking_draft_items()->create([
'booking_id' => $booking->id,
'travel_program_id' => $travel_program_id,
'fewo_lodging_id' => null,
'travel_class_id' => null,
'draft_item_id' => null,
'draft_type_id' => null,
'request_date' => $request_date,
'days_start' => null,
'days_duration' => null,
'start_date' => null,
'end_date' => null,
'service' => '',
'price_adult' => null,
'adult' => null ,
'price_children' => 0,
'children' => 0,
'price' => 0,
'pos' => $i,
'in_pdf' => true,
'comfort' => $comfort
]);
$i++;
}
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingOrganisation");
}
if($data['action'] === 'saveCustomer' || $data['action'] === 'saveAll' || $data['action'] === 'save_lead_status' || $data['action'] === 'update_booking' ||
$data['action'] === 'update_booking_services' || $data['action'] === 'update_booking_number' || $data['action'] === 'update_booking_price' ||
$data['action'] === 'update_service_provider_entry' || $data['action'] === 'update_booking_service_item' || $data['action'] === 'update_booking_participant'){
$customer = $this->custRepo->updateCustomerFromBooking($id, $data);
$booking = $this->bookingRepo->updateLeadStatus($id, $data);
$booking = $this->bookingRepo->updateBooking($id, $data);
$booking = $this->bookingRepo->updateBookingServices($id, $data);
$booking = $this->bookingRepo->updateBookingNumber($id, $data);
$booking = $this->bookingRepo->updateBookingPrice($id, $data);
$booking = $this->bookingRepo->updateServiceProviderEntry($id, $data);
$booking = $this->bookingRepo->updateBookingServiceItem($id, $data);
$booking = $this->bookingRepo->updateBookingParticipant($id, $data);
\Session()->flash('alert-save', '1');
switch($data['action']){
case 'saveCustomer':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingCustomer");
break;
case 'saveAll':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingOrganisation");
break;
case 'update_booking':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingBooking");
break;
case 'save_lead_status':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingLead");
break;
case 'update_booking_services':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingServices");
break;
case 'update_booking_number':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingMyJack");
break;
case 'update_booking_price':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingPrice");
break;
case 'update_service_provider_entry':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingProvider");
break;
case 'update_booking_service_item':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingCompany");
break;
case 'update_booking_participant':
$redirect = redirect(route('booking_detail', [$booking->id])."#collapseBookingParticipant");
break;
}
}
$booking->calculate_price_total();
if(strpos($data['action'], 'up_') !== false) {
@ -246,7 +285,7 @@ class BookingController extends Controller
}
}
\Session()->flash('alert-save', '1');
return redirect(route('booking_detail', [$booking->id]));
return $redirect;
}
public function loadModal(){
@ -275,6 +314,41 @@ class BookingController extends Controller
$ret = view("booking.edit_notice_modal", compact('data', 'value'))->render();
}
if($data['action'] === "createPDF_Coupon") {
$booking = Booking::findOrFail($data['booking_id']);
$data['has_coupon'] = $booking->hasDocument('coupon');
$data['default_value'] = config('booking.coupon_default_value');
$data['issue_date'] = date('d.m.Y');
$data['valid_date'] = \Carbon::now()->addMonths(config('booking.coupon_valid_date_month'))->format('d.m.Y');
$ret = view("booking.modal_create_coupon", compact('data'))->render();
}
if($data['action'] === "createPDF_Storno") {
$booking = Booking::findOrFail($data['booking_id']);
$data['price'] = $booking->price;
if($data['has_storno'] = $booking->hasDocument('storno')){
$document_storno = $booking->getDocument('storno');
$data['storno_date'] = \Carbon::parse($document_storno->data->storno_date)->format('d.m.Y');
$data['storno_print'] = \Carbon::parse($document_storno->data->storno_print)->format('d.m.Y') ;
$data['storno_status_id'] = $document_storno->data->storno_status_id;
$data['storno_level'] = $document_storno->data->storno_level;
$data['storno_level_number'] = _number_format($document_storno->data->storno_level);
$data['storno_total_price'] = '';
}else{
$data['storno_date'] = date('d.m.Y');
$data['storno_print'] = date('d.m.Y');
$data['storno_status_id'] = null;
$data['storno_level'] = 100;
$data['storno_level_number'] = '';
$data['storno_total_price'] = '';
}
$ret = view("booking.modal_create_storno", compact('data'))->render();
}
if($data['action'] === "upload-booking-file"){
if($data['booking_id']){
$bookingFileRepo = new BookingFileRepository(new BookingFile());
@ -288,15 +362,14 @@ class BookingController extends Controller
}
return response()->json(['response' => $data, 'html'=>$ret]);
}
public function draftItemDelete($id){
$boking_draft_item = BookingDraftItem::findOrFail($id);
$booking = $boking_draft_item->booking;
$boking_draft_item->delete();
$booking_draft_item = BookingDraftItem::findOrFail($id);
$booking = $booking_draft_item->booking;
$booking_draft_item->delete();
$booking->calculate_price_total();
\Session()->flash('alert-success', __('Eintrag gelöscht'));
return redirect(route('booking_detail', [$booking->id]));
return redirect(route('booking_detail', [$booking->id])."#collapseBookingOrganisation");
}
public function action($action, $id=false){
@ -361,18 +434,10 @@ class BookingController extends Controller
public function delete($id, $del="booking"){
if($del === 'booking') {
//$model = Booking::findOrFail($id);
//$model->delete();
\Session()->flash('alert-success', __('Löschen noch nicht programmiert'));
}
if($del === 'booking_file'){
$booking_file = BookingFile::findOrFail($id);
$booking = $booking_file->booking;
$fileRepo = new BookingFileRepository($booking_file);
$fileRepo->_set('disk', 'booking');
$fileRepo->delete();
$booking_file->delete();
$this->deleteBookingFile($booking_file);
\Session()->flash('alert-success', 'Datei gelöscht');
return redirect(route('booking_detail', [$booking->id])."#collapseBookingFiles");
}
@ -422,6 +487,98 @@ class BookingController extends Controller
}
private function deleteBookingFile($booking_file){
$fileRepo = new BookingFileRepository($booking_file);
$fileRepo->_set('disk', 'booking');
$fileRepo->delete();
$booking_file->delete();
}
private function deleteCustomerFile($customer_file){
$fileRepo = new CustomerFileRepository($customer_file);
$fileRepo->_set('disk', 'customer');
$fileRepo->delete();
$customer_file->delete();
}
private function deleteBookingDocument($booking_document){
$booking_document->deleteFile();
$booking_document->delete();
}
public function deleteComplete($id){
$booking = Booking::findOrFail($id);
if($booking->booking_files){
foreach ($booking->booking_files as $booking_file) {
$this->deleteBookingFile($booking_file);
}
}
if($booking->booking_notices){
foreach ($booking->booking_notices as $booking_notice) {
$booking_notice->delete();
}
}
if($booking->service_provider_entries){
foreach ($booking->service_provider_entries as $service_provider_entry) {
$service_provider_entry->delete();
}
}
if($booking->booking_service_items){
foreach ($booking->booking_service_items as $booking_service_item) {
$booking_service_item->delete();
}
}
if($booking->booking_provider_services){
foreach ($booking->booking_provider_services as $booking_provider_service) {
$booking_provider_service->delete();
}
}
if($booking->booking_country_services){
foreach ($booking->booking_country_services as $booking_country_service) {
$booking_country_service->delete();
}
}
if($booking->participants){
foreach ($booking->participants as $participant) {
$participant->delete();
}
}
if($booking->customer_mails){
foreach ($booking->customer_mails_reverse as $customer_mail) {
if($customer_mail->customer_files){
foreach ($customer_mail->customer_files as $customer_file) {
$this->deleteCustomerFile($customer_file);
}
}
$customer_mail->delete();
}
}
if($booking->booking_documents){
foreach ($booking->booking_documents as $booking_document) {
if($booking_document->identifier === 'coupon'){
//coupon set booking ID to null <- is need by the customer
$booking_document->booking_id = null;
$booking_document->save();
}else{
$this->deleteBookingDocument($booking_document);
}
}
}
if($booking->coupons){
foreach ($booking->coupons as $coupon) {
//coupon set booking ID to null <- is need by the customer
$coupon->booking_id = null;
$coupon->save();
}
}
$booking->delete();
\Session()->flash('alert-success', 'Buchung gelöscht');
return redirect(route('requests'));
}
}

View file

@ -5,9 +5,6 @@ namespace App\Http\Controllers\CMS;
use App\Http\Controllers\Controller;
use App\Models\CMSContent;
use App\Models\FewoLodging;
use App\Services\BookingFewo;
use App\Services\CreatePDF;
use App\Services\Util;
use Request;
@ -256,16 +253,6 @@ class CMSBookingController extends Controller
return redirect(route('cms_booking_content_detail', [$id]));
}
/* if($data['action'] === 'previewPDF'){
$pdf_content = BookingFewo::getFeWoCMSContentForPDF($this->identifier_content, $identifier_fewo);
$pdf_file = new CreatePDF('pdf.fewo_instructions');
return $pdf_file->create([
'contents' => $pdf_content,
'fewo' => $fewo
]
);
}
*/
\Session()->flash('alert-save', '1');
return redirect(route('cms_booking_content'));
}

View file

@ -8,7 +8,7 @@ use App\Models\CMSContent;
use App\Models\CMSInfo;
use App\Models\CMSInfoAvailable;
use App\Models\CMSInfoHoliday;
use App\Services\HTMLHelper;
use App\Helper\HTMLHelper;
use Request;
use Validator;

View file

@ -7,7 +7,7 @@ use App\Http\Controllers\Controller;
use App\Models\CMSContent;
use App\Models\FewoLodging;
use App\Services\BookingFewo;
use App\Services\CreatePDF;
use App\Libraries\CreatePDF;
use App\Services\Util;
use Request;

View file

@ -6,6 +6,7 @@ namespace App\Http\Controllers\CMS;
use App\Http\Controllers\Controller;
use App\Models\Feedback;
use Carbon\Carbon;
use IqContent\LaravelFilemanager\Lfm;
use Request;
class CMSFeedbackController extends Controller
@ -38,6 +39,8 @@ class CMSFeedbackController extends Controller
$feedback = new Feedback();
$id = 'new';
$feedback->status = 1;
$feedback->content_new = "";
}else{
$feedback = Feedback::findOrFail($id);
@ -46,6 +49,7 @@ class CMSFeedbackController extends Controller
$data = [
'feedback' => $feedback,
'id' => $id,
'lfm_helper' => app(Lfm::class),
];
return view('cms.feedback.detail', $data);
@ -67,15 +71,18 @@ class CMSFeedbackController extends Controller
$feedback->show_in_navi = 1;
$feedback->catalog_id = 1;
}else{
$feedback = Feedback::findOrFail($id);
}
$feedback->title = $data['title'];
$feedback->status = isset($data['status']) ? true : false;
$feedback->slug = $data['slug'];
$feedback->date = $data['date'];
$feedback->content = $data['content'];
$feedback->content_new = $data['content_new'];
$feedback->box_body = $data['image'];
$feedback->description = $data['description'];
$feedback->pagetitle = $data['pagetitle'];
$feedback->keywords = $data['keywords'];
@ -93,6 +100,9 @@ class CMSFeedbackController extends Controller
if($first_feedback = $parent_feedback->children->first()){
$feedback->lft = $first_feedback->lft;
$feedback->rgt = $first_feedback->rgt;
}else{
$feedback->lft = $parent_feedback->lft +1;
$feedback->rgt = $parent_feedback->lft +2;
}
$feedback->tree_root = $parent_feedback->tree_root;

View file

@ -54,6 +54,15 @@ class CMSTravelGuideController extends Controller
}
public function test()
{
//make tree
$data = [
];
return view('cms.travel_guide.test', $data);
}
public function detail($id)
{
if($id === "new") {

View file

@ -47,10 +47,14 @@ class CustomerController extends Controller
public function store($id)
{
$data = Request::all();
if(!isset($data['action'])){
abort(403, 'keine Action');
}
//save
$customer = $this->custRepo->updateCustomer($id, $data);
\Session()->flash('alert-save', '1');
if($data['action'] === 'saveCustomer'){
$customer = $this->custRepo->updateCustomer($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('customer_detail', [$id]).'#collapseCustomerDetail');
}
return back();

View file

@ -70,7 +70,7 @@ class CustomerFewoMailController extends Controller
$customer_mail->save();
}
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}
public function delete($id){
@ -128,14 +128,14 @@ class CustomerFewoMailController extends Controller
}else{
\Session()->flash('alert-success', "Mail gesendet!");
}
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}
public function replyMail(CustomerFewoMailRepository $customerFewoMailRepository){
$data = Request::all();
$customerFewoMailRepository->replyStore($data);
\Session()->flash('alert-success', "Mail gespeichert!");
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}
public function getEmailTemplates()

View file

@ -9,12 +9,12 @@ use Response;
use App\Models\Coupon;
use App\Services\Util;
use App\Models\FewoLodging;
use App\Services\CreatePDF;
use App\Libraries\CreatePDF;
use App\Models\BookingStorno;
use App\Services\BookingFewo;
use App\Models\BookingVoucher;
use App\Models\TravelInsurance;
use App\Services\CreateCouponPDF;
use App\Libraries\CreateCouponPDF;
use App\Models\BookingApplication;
use App\Models\BookingConfirmation;
use Illuminate\Support\Facades\URL;
@ -46,20 +46,21 @@ class CustomerFileController extends Controller
$content_disposition = $cd ? 'attachment' : 'inline';
$file = false;
$filename = "";
switch ($model){
case 'booking_application':
case 'registration':
if($booking_application = BookingApplication::find($id)){
$filename = "Buchungsauftrag-".$booking_application->booking->getBookingNumber().".pdf";
$file = base64_decode($booking_application->binary_data);
}
break;
case 'booking_confirmation':
case 'confirmation':
if($booking_confirmation = BookingConfirmation::find($id)){
$filename = "Reisebestaetigung-".$booking_confirmation->booking->getBookingNumber().".pdf";
$file = base64_decode($booking_confirmation->binary_data);
}
break;
case 'booking_storno':
case 'storno':
if($booking_stornos = BookingStorno::find($id)){
$filename = "Reisestornierung-".$booking_stornos->booking->getBookingNumber().".pdf";
$file = base64_decode($booking_stornos->binary_data);
@ -68,21 +69,20 @@ class CustomerFileController extends Controller
case 'coupon':
if($coupon = Coupon::find($id)){
$filename = "Gutschein-".$coupon->number.".pdf";
$pdf = new CreateCouponPDF($coupon);
$pdf->create();
return $pdf->output($filename, $cd);
}
break;
case 'booking_voucher':
case 'voucher':
if($booking_voucher = BookingVoucher::find($id)){
$filename = "Voucher-".$booking_voucher->booking->getBookingNumber().".pdf";
$file = base64_decode($booking_voucher->binary_data);
}
break;
case 'booking_voucher_agency':
case 'voucher_agency':
if($booking_voucher_agency = BookingVoucherAgency::find($id)){
$filename = "Voucher-Agentur-".$booking_voucher_agency->booking->getBookingNumber().".pdf";
$file = base64_decode($booking_voucher_agency->binary_data);

View file

@ -91,7 +91,7 @@ class CustomerMailController extends Controller
}
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}
public function delete($id){
@ -148,14 +148,14 @@ class CustomerMailController extends Controller
}else{
\Session()->flash('alert-success', "Mail gesendet!");
}
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}
public function replyMail(CustomerMailRepository $customerMailRepository){
$data = Request::all();
$customerMailRepository->replyStore($data);
\Session()->flash('alert-success', "Mail gespeichert!");
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}
public function getEmailTemplates()

View file

@ -3,7 +3,7 @@
namespace App\Http\Controllers;
use App\Models\Booking;
use App\Services\HTMLHelper;
use App\Helper\HTMLHelper;
use Carbon\Carbon;
use Composer\DependencyResolver\Request;
use DataTables;

View file

@ -22,53 +22,64 @@ class FileController extends Controller
{
$path = "";
$filename = "";
if ($disk === 'customer'){
$file = \App\Models\CustomerFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
}
if ($disk === 'travel_user'){
$file = \App\Models\CustomerFewoFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
}
if ($disk === 'booking'){
$file = \App\Models\BookingFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
}
if ($disk === 'general'){
$file = \App\Models\GeneralFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
}
if ($disk === 'booking_fewo'){
$file = \App\Models\TravelUserBookingFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
}
if ($disk === 'lead'){
$file = \App\Models\LeadFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
}
if ($disk === 'cms_file'){
$file = \App\Models\CMSContent::findOrFail($id);
$filename = $file->name;
$path = $file->getPath();
switch ($disk){
case 'customer':
$file = \App\Models\CustomerFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
break;
case 'travel_user':
$file = \App\Models\CustomerFewoFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
break;
case 'booking':
$file = \App\Models\BookingFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
break;
case 'general':
$file = \App\Models\GeneralFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
break;
case 'booking_fewo':
$file = \App\Models\TravelUserBookingFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
break;
case 'lead':
$file = \App\Models\LeadFile::findOrFail($id);
$filename = $file->original_name;
$path = $file->getPath();
break;
case 'cms_file':
$file = \App\Models\CMSContent::findOrFail($id);
$filename = $file->name;
$path = $file->getPath();
break;
case 'booking_document':
$file = \App\Models\BookingDocument::findOrFail($id);
$filename = $file->name;
$path = $file->getPath();
break;
}
if (file_exists($path)) {
if($do === "download"){
return Response::download($path, $filename);
switch ($do) {
case 'file':
return Response::file($path);
break;
case 'download':
return Response::download($path, $filename);
break;
case 'url':
return $path.$filename;
break;
}
return Response::file($path);
}
}

View file

@ -202,7 +202,6 @@ class ContentTreeController extends Controller
$data['user_id'] = \Auth::user()->id;
$data['active'] = isset($data['active']) ? true : false;
$data['search'] = isset($data['search']) ? true : false;
if (isset($data['action'])) {
switch ($data['action']) {
case 'tree-content' :

View file

@ -2,17 +2,19 @@
namespace App\Http\Controllers;
use Carbon;
use Request;
use App\Models\Lead;
use App\Models\LeadFile;
use App\Models\LeadMail;
use App\Models\LeadNotice;
use App\Models\StatusHistory;
use App\Models\LeadParticipant;
use App\Repositories\LeadRepository;
use App\Models\StatusHistory;
use App\Repositories\CustomerRepository;
use App\Repositories\LeadFileRepository;
use App\Repositories\LeadRepository;
use App\Services\Util;
use Carbon;
use Request;
use Session;
class LeadController extends Controller
{
@ -38,6 +40,7 @@ class LeadController extends Controller
public function detail($id)
{
if($id === "new") {
$lead = new Lead();
$id = 'new';
@ -47,6 +50,7 @@ class LeadController extends Controller
$lead->getPassolutionPDF(true);
$id = $lead->id;
}
$data = [
'lead' => $lead,
'id' => $id,
@ -59,24 +63,34 @@ class LeadController extends Controller
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'){
if($data['action'] === 'saveCustomer' || $data['action'] === 'saveLead' || $data['action'] === 'saveStatus' || $data['action'] === 'update_lead_participant'){
//@dd($data);
$customer = $this->custRepo->updateCustomerFromLead($id, $data);
\Session()->flash('alert-save', '1');
$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'){
$lead = $this->leadRepo->updateLead($id, $data);
\Session()->flash('alert-save', '1');
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');
@ -93,11 +107,7 @@ class LeadController extends Controller
\Session()->flash('alert-save', '1');
return redirect(route('lead_detail', [$lead->id])."#collapseLeadNotice");
}
if($data['action'] === 'update_lead_participant'){
$lead = $this->leadRepo->updateLeadParticipant($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('lead_detail', [$lead->id])."#collapseBookingParticipant");
}
return back();
@ -170,6 +180,11 @@ class LeadController extends Controller
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) {
@ -233,21 +248,7 @@ class LeadController extends Controller
return Carbon::parse($lead->request_date)->format(\Util::formatDateDB());
})
->addColumn('travel_country', function (Lead $lead) {
$out = "";
if($lead->bookings->count()){
$out = '<span class="badge badge-success">';
foreach ($lead->bookings as $booking){
if($booking->travel_country_id && $booking->travel_country) {
$out .= $booking->travel_country->destco;
}
}
$out .= '</span>';
return $out;
}
if($lead->travel_country){
return '<span class="badge badge-secondary">'.$lead->travel_country->destco.'</span>';
}
return "-";
return $lead->getTravelCountryDestco();
})
->addColumn('status', function (Lead $lead) {
@ -285,6 +286,7 @@ class LeadController extends Controller
})
->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) {

View file

@ -54,7 +54,7 @@ class LeadMailController extends Controller
\Session()->flash('alert-success', __('E-Mail weitergeleitet'));
}
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}
public function delete($id){
@ -110,14 +110,14 @@ class LeadMailController extends Controller
}else{
\Session()->flash('alert-success', "Mail gesendet!");
}
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}
public function replyMail(LeadMailRepository $LeadMailRepository){
$data = Request::all();
$LeadMailRepository->replyStore($data);
\Session()->flash('alert-success', "Mail gespeichert!");
return back();
return back()->with('collapse_shows', $data['collapse_shows'] ? $data['collapse_shows'] : []);
}

View file

@ -2,19 +2,19 @@
namespace App\Http\Controllers;
use Request;
use DataTables;
use Carbon\Carbon;
use App\Models\Status;
use App\Models\Airline;
use App\Models\Airport;
use App\Models\Booking;
use App\Models\SfGuardUser;
use App\Models\CustomerMail;
use App\Models\SfGuardUser;
use App\Models\Status;
use App\Models\Sym\TravelCountry;
use App\Models\TravelAgenda;
use App\Models\TravelCompany;
use App\Models\Sym\TravelCountry;
use App\Models\TravelCountryService;
use App\Repositories\CustomerMailRepository;
use Carbon\Carbon;
use DataTables;
use Request;
class RequestController extends Controller
{
@ -31,6 +31,8 @@ class RequestController extends Controller
$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_travel_company = TravelCompany::get()->pluck('name', 'id')->toArray();
$filter_airports = Airport::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;
@ -56,7 +58,8 @@ class RequestController extends Controller
'filter_refund' => $filter_refund,
'filter_xx_tkt' => $filter_xx_tkt,
'filter_airlines' => $filter_airlines,
'filter_sf_guard_user' => $filter_sf_guard_user
'filter_sf_guard_user' => $filter_sf_guard_user,
'filter_airports' => $filter_airports,
];
return view('request.index', $data);
}
@ -128,6 +131,9 @@ class RequestController extends Controller
if(Request::get('travel_option_airline_id') != ""){
$query->where('airline_ids', 'LIKE', '%'.Request::get('travel_option_airline_id').'%');
}
if(Request::get('travel_option_airport_id') != ""){
$query->where('airport_id', '=', Request::get('travel_option_airport_id'));
}
// $query->where('end_date', '<=', $now);
@ -393,6 +399,9 @@ class RequestController extends Controller
->addColumn('travel_company_id', function (Booking $booking) {
return '<span data-order="'.($booking->travel_company_id ? $booking->travel_company_id : 0).'">'.($booking->travel_company ? $booking->travel_company->name : "-").'</span>';
})
->addColumn('airport_id', function (Booking $booking) {
return '<span data-order="'.($booking->airport_id ? $booking->airport_id : 0).'">'.($booking->airport ? $booking->airport->name : "-").'</span>';
})
->addColumn('comfort', function (Booking $booking) {
return $booking->comfort ? ' <span data-order="1" class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>' : '<span data-order="0" class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>';
})
@ -515,7 +524,7 @@ class RequestController extends Controller
->orderColumn('xx_tkt', 'xx_tkt_date $1')
->orderColumn('comfort', 'comfort $1')
//->orderColumn('travel_documents', 'travel_documents $1')
->rawColumns(['action_lead_edit', 'comfort', 'lead_id', 'booking_participants_pass', 'action_booking_edit', 'travel_country_id', 'travelagenda_id', 'travel_company_id', 'sf_guard_user_id', 'airline_ids', 'lead.status_id', 'last_customer_email', 'id', 'travel_documents', 'booking_services', 'booking_notice', 'paying_out', 'paying_out_status', 'airline_id', 'refund', 'hold', 'xx_tkt'])
->rawColumns(['action_lead_edit', 'comfort', 'lead_id', 'booking_participants_pass', 'action_booking_edit', 'travel_country_id', 'travelagenda_id', 'travel_company_id', 'sf_guard_user_id', 'airline_ids', 'lead.status_id', 'last_customer_email', 'id', 'travel_documents', 'booking_services', 'booking_notice', 'paying_out', 'paying_out_status', 'airline_id', 'airport_id', 'refund', 'hold', 'xx_tkt'])
->make(true);
}
}

View file

@ -0,0 +1,65 @@
<?php
namespace App\Http\Controllers\Settings;
use Request;
use App\Models\Airport;
use App\Models\Booking;
use App\Http\Controllers\Controller;
class AirportController extends Controller
{
public function __construct()
{
$this->middleware(['superadmin', '2fa']);
}
public function index($step = false)
{
$data = [
'airports' => Airport::all(),
];
return view('settings.airport.index', $data);
}
public function update(){
$data = Request::all();
if($data['id'] === "new"){
$model = Airport::create([
'code' => $data['code'],
'name' => $data['name'],
'city' => $data['city'],
'country' => $data['country'],
'active' => isset($data['active']) ? true : false,
]);
}else{
$model = Airport::find($data['id']);
$model->name = $data['name'];
$model->code = $data['code'];
$model->city = isset($data['city']) ? $data['city'] : NULL;
$model->country = isset($data['country']) ? $data['country'] : NULL;
$model->active = isset($data['active']) ? true : false;
$model->save();
}
\Session()->flash('alert-save', '1');
return redirect(route('admin_settings_airport'));
}
public function delete($id){
if(Booking::where('airport_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird verwendet');
return redirect()->back();
}
$model = Airport::findOrFail($id);
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect()->back();
}
}

View file

@ -53,19 +53,24 @@ class TravelProgramController extends Controller
if(!isset($data['action'])){
abort(403, 'keine Action');
}
//save
$program = $this->travelProgramRepo->updateGeneral($id, $data);
$program = $this->travelProgramRepo->updateDetail($id, $data);
$program = $this->travelProgramRepo->updatePage($id, $data);
\Session()->flash('alert-save', '1');
if($data['action'] === 'saveGeneral'){
$program = $this->travelProgramRepo->updateGeneral($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('travel_program_detail', [$program->id])."#collapseBookingNotice");
}
if($data['action'] === 'saveDetails'){
$program = $this->travelProgramRepo->updateDetail($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('travel_program_detail', [$program->id])."#collapseTravelProgramDetails");
}
if($data['action'] === 'savePage'){
return redirect(route('travel_program_detail', [$program->id])."#collapseTravelProgramPage");
}
return redirect(route('travel_program_detail', [$id]));
}
/*

View file

@ -84,6 +84,10 @@ class TravelUserBookingFewoController extends Controller
public function store($id)
{
$data = Request::all();
if(!isset($data['action'])){
abort(403, 'keine Action');
}
if($data['action'] === 'save_notice'){
$travel_user_booking_fewo = $this->userBookingFewoRepo->updateNotice($id, $data);
\Session()->flash('alert-save', '1');
@ -352,6 +356,7 @@ class TravelUserBookingFewoController extends Controller
})
->addColumn('is_calendar', function (TravelUserBookingFewo $travel_user_booking_fewo) {
$back = "<div class='no-break'>";
$back .= get_active_badge($travel_user_booking_fewo->is_calendar_traum_fewo, "Traum Direkt")." ";
$back .= get_active_badge($travel_user_booking_fewo->is_calendar_fewo_direct, "FEWO Direkt")." ";
$back .= get_active_badge($travel_user_booking_fewo->is_calendar_hrs, "HRS")." ";
$back .= get_active_badge($travel_user_booking_fewo->is_calendar_stern_tours, "STERN TOURS");