middleware('superadmin'); } public function bookings() { $data = [ //'serviceProviders' => ServiceProvider::all(), ]; return view('admin.report.bookings', $data); } public function providers() { $data = [ 'serviceProviders' => ServiceProvider::all(), ]; return view('admin.report.service_providers', $data); } private function prozessBookingSearch() { $query = Booking::with( 'customer', 'lead', 'booking_strono','service_provider_entries', 'service_provider_entries.service_provider')->select('booking.*'); 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') != ""){ $travel_date_from = Carbon::parse(Request::get('filter_booking_date_from'))->format("Y-m-d"); $query->where("booking_date", '>=', $travel_date_from); } if(Request::get('filter_booking_date_to') != ""){ $travel_date_to = Carbon::parse(Request::get('filter_booking_date_to'))->format("Y-m-d"); $query->where("booking_date", '<=', $travel_date_to); } return $query; } public function bookingsDatatable() { $query = $this->prozessBookingSearch(); return \DataTables::eloquent($query) ->with('price_total_sum', function() use ($query) { return Util::_number_format($query->sum('price')); }) ->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 '' . $booking->id . ''; }) ->addColumn('customer.fullName', function (Booking $booking) { return $booking->customer->fullName(); }) ->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 .= ''.$service_provider_entry->service_provider->name." | "; $ret .= $service_provider_entry->getAmountFinalEur()." | "; $ret .= $service_provider_entry->is_cleared ? '' : ''; $ret .= "
"; } } 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 = ' '; } if($booking->lead->status_id == 14 && !$booking->lead->is_rebook){ $icon = ' '; } return ''.$icon.$booking->lead->status->name.''; } return '-'; }) ->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('booking_date', 'booking_date $1') ->orderColumn('customer.fullName', 'customer.firstname $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->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->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->getPriceRaw(); $columns[] = array( 'BuchungsID' => $export->id, 'Status' => $export->lead->status->name, 'Storno' => $storno_date, 'MyJack Nr.' => $export->merlin_order_number, 'Organisation' => $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'); } private function prozessProvidersSearch(){ $query = ServiceProviderEntry::with('booking', 'service_provider', 'booking.customer')->select('service_provider_entry.*') ->join('booking', 'service_provider_entry.booking_id', '=', 'booking.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); }); } 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){ $price += in_array($v->booking->lead_id, $isset) ? 0 : $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 '' . $serviceProviderEntry->booking->id . ''; }) ->addColumn('booking.customer.fullName', function (ServiceProviderEntry $serviceProviderEntry) { return $serviceProviderEntry->booking->customer->fullName(); }) ->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('is_cleared', function (ServiceProviderEntry $serviceProviderEntry) { return $serviceProviderEntry->is_cleared ? ' ' : ''; }) ->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.start_date', 'booking.start_date $1') ->orderColumn('booking.end_date', 'booking.end_date $1') ->orderColumn('is_cleared', 'is_cleared $1') ->rawColumns(['is_cleared', 'booking.id']) ->make(true); } public function providersExport() { $query = $this->prozessProvidersSearch(); $order = explode(",", Request::get('order')); $orderByNum = [ 0 => "id", 1 => "booking.id", //booking 3 => "booking.merlin_order_number",//booking 4 => "booking.price",//booking 5 => "booking.price_total",//booking 8 => "booking.start_date",//booking 9 => "booking.end_date",//booking 10 => "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(); $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', '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->lead_id, $isset) ? false : true; if($new){ $total_price += $export->booking->getPriceRaw(); $total_price_total += $export->booking->getPriceTotalRaw(); $total_proceeds += $export->booking->proceeds(true); } $total_amount_final += $export->getAmountFinalEurRaw(); $columns[] = 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() : "", 'Organisation' => $new ? $export->booking->price : "", 'Gesamtreisepreis' => $new ? $export->booking->price_total : "", 'Reiseland' => $new ? $export->booking->travel_country->name : "", 'Reiseprogramm' => $new ? $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->lead_id; } $columns[] = array( 'Zähler' => "Total", 'MyJack Nr.' => "", 'CRM Nr' => "", 'Kunde' =>"", 'Reisedatum' => "", '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', '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->lead_id, $isset) ? false : true; if($new) { $payments_total += $export->booking->getServiceProviderPaymentsTotal(true); } $total_amount_final += $export->getAmountFinalEurRaw(); $columns[] = 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() : "", 'Reiseland' => $new ? $export->booking->travel_country->name : "", 'Reiseprogramm' => $new ? $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->lead_id; } $columns[] = array( 'Zähler' => "Total", 'MyJack Nr.' => "", 'CRM Nr' => "", 'Kunde' => "", 'Reisedatum' => "", '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'); } }