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')); } $travel_date_from = ReportDateFilterService::parseDate(Request::get('filter_travel_date_from'), 'report provider travel date from'); if($travel_date_from){ $query->whereHas('booking', function ($q) use ($travel_date_from) { $q->where("start_date", '>=', $travel_date_from); }); } $travel_date_to = ReportDateFilterService::parseDate(Request::get('filter_travel_date_to'), 'report provider travel date to'); if($travel_date_to){ $query->whereHas('booking', function ($q) use ($travel_date_to) { $q->where("start_date", '<=', $travel_date_to); }); } $filter_booking_date_from = ReportDateFilterService::parseDate(Request::get('filter_booking_date_from'), 'report provider booking date from'); if($filter_booking_date_from){ $query->whereHas('booking', function ($q) use ($filter_booking_date_from) { $q->where("booking_date", '>=', $filter_booking_date_from); }); } $filter_booking_date_to = ReportDateFilterService::parseDate(Request::get('filter_booking_date_to'), 'report provider booking date to'); if($filter_booking_date_to){ $query->whereHas('booking', function ($q) use ($filter_booking_date_to) { $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->inquiry_id, $isset)){ $price += $v->booking->isCanceled() ? $v->booking->getPriceCanceledRaw() : $v->booking->getPriceRaw(); } $isset[] = $v->booking->inquiry_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->inquiry_id, $isset) ? 0 : $v->booking->getPriceTotalRaw(); $isset[] = $v->booking->inquiry_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->inquiry_id, $isset) ? 0 : $v->booking->proceeds(true); $isset[] = $v->booking->inquiry_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.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 ? ' ' : ''; }) ->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 = ' '; } if($serviceProviderEntry->booking->lead->status_id == 14 && !$serviceProviderEntry->booking->lead->is_rebook){ $icon = ' '; } return ''.$icon.$serviceProviderEntry->booking->lead->status->name.''; } return '-'; }) ->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->inquiry_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->inquiry_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'); } }