mailer = $mailer; $this->propertyService = $propertyService; $this->currencyService = $currencyService; } public function handle() { $this->info(date('Y-m-d H:i:s') . ' START'); $today = Carbon::now()->subDay()->toDateString(); $report['daily']['data'] = []; $report['daily']['title'] = 'Daily Report'; $report['daily']['period'] = Carbon::parse($today)->format('d.m.Y'); $daily = vwBookingSummaryAll::where('time', '>', Carbon::parse($today)->toDateString()) ->where('time', '<', Carbon::parse($today)->addDay()->toDateString()) ->where('commission', '>', 0) ->get()->toArray(); if ($daily) { $dataCollect = collect($daily); $dataCollect = $dataCollect->filter(function ($item) { if ($item['property_id'] == 362) { //Exclude Commission - Barın Hotel, 34 Hotelbeds, 103 World2Meet if (!in_array($item['channel_id'], [34, 103])) { return $item; } } else if ($item['property_id'] == 712) { //Exclude Commission - G Hotels Skopje if (!in_array($item['id'], [18122, 18091, 18090, 18089, 18088, 18087, 18086])) { return $item; } } else { return $item; } }); $dataCollectGroup = $dataCollect->groupBy('currency_code')->toArray(); foreach ($dataCollectGroup as $currencyCode => $currencyGroup) { $report['daily']['data'][$currencyCode]['count'] = count($currencyGroup); $report['daily']['data'][$currencyCode]['total'] = array_sum(pickItemFromArray('total', $currencyGroup)); $report['daily']['data'][$currencyCode]['commission'] = array_sum(pickItemFromArray('commission', $currencyGroup)); } $report['daily']['summary'] = ['count' => 0, 'total' => 0, 'commission' => 0]; foreach ($report['daily']['data'] as $currentCurrency => $dailyData) { $lastExchangeRate = $this->currencyService->lastExchangeRate($currentCurrency, 'EUR'); $report['daily']['summary']['count'] += $dailyData['count']; $report['daily']['summary']['total'] += $dailyData['total'] * $lastExchangeRate['data']; $report['daily']['summary']['commission'] += $dailyData['commission'] * $lastExchangeRate['data']; } } $report['monthly']['data'] = []; $report['monthly']['title'] = 'Monthly Report'; $report['monthly']['period'] = Carbon::parse($today)->firstOfMonth()->format('m.Y'); $monthly = vwBookingSummaryAll::where('time', '>', Carbon::parse($today)->firstOfMonth()->toDateString()) ->where('time', '<', Carbon::parse($today)->addMonth()->firstOfMonth()->toDateString()) ->where('commission', '>', 0) ->get()->toArray(); if ($monthly) { $dataCollect = collect($monthly); $dataCollect = $dataCollect->filter(function ($item) { if ($item['property_id'] == 362) { //Exclude Commission - Barın Hotel, 34 Hotelbeds, 103 World2Meet if (!in_array($item['channel_id'], [34, 103])) { return $item; } } else if ($item['property_id'] == 712) { //Exclude Commission - G Hotels Skopje if (!in_array($item['id'], [18122, 18091, 18090, 18089, 18088, 18087, 18086])) { return $item; } } else { return $item; } }); $dataCollectGroup = $dataCollect->groupBy('currency_code')->toArray(); foreach ($dataCollectGroup as $currencyCode => $currencyGroup) { $report['monthly']['data'][$currencyCode]['count'] = count($currencyGroup); $report['monthly']['data'][$currencyCode]['total'] = array_sum(pickItemFromArray('total', $currencyGroup)); $report['monthly']['data'][$currencyCode]['commission'] = array_sum(pickItemFromArray('commission', $currencyGroup)); } $report['monthly']['summary'] = ['count' => 0, 'total' => 0, 'commission' => 0]; foreach ($report['monthly']['data'] as $currentCurrency => $dailyData) { $lastExchangeRate = $this->currencyService->lastExchangeRate($currentCurrency, 'EUR'); $report['monthly']['summary']['count'] += $dailyData['count']; $report['monthly']['summary']['total'] += $dailyData['total'] * $lastExchangeRate['data']; $report['monthly']['summary']['commission'] += $dailyData['commission'] * $lastExchangeRate['data']; } //summaryCheckout $monthlyCheckout = vwBookingSummaryAll::where('checkout_period', Carbon::parse($today)->firstOfMonth()->format('Y-m')) ->where('commission', '>', 0) ->get()->toArray(); $dataCollect = collect($monthlyCheckout); $dataCollect = $dataCollect->filter(function ($item) { if ($item['property_id'] == 362) { //Exclude Commission - Barın Hotel, 34 Hotelbeds, 103 World2Meet if (!in_array($item['channel_id'], [34, 103])) { return $item; } } else if ($item['property_id'] == 712) { //Exclude Commission - G Hotels Skopje if (!in_array($item['id'], [18122, 18091, 18090, 18089, 18088, 18087, 18086])) { return $item; } } else { return $item; } }); $dataCollectGroup = $dataCollect->groupBy('currency_code')->toArray(); foreach ($dataCollectGroup as $currencyCode => $currencyGroup) { $report['monthly']['summaryCheckoutData'][$currencyCode]['count'] = count($currencyGroup); $report['monthly']['summaryCheckoutData'][$currencyCode]['total'] = array_sum(pickItemFromArray('total', $currencyGroup)); $report['monthly']['summaryCheckoutData'][$currencyCode]['commission'] = array_sum(pickItemFromArray('commission', $currencyGroup)); } $report['monthly']['summaryCheckout'] = ['count' => 0, 'total' => 0, 'commission' => 0]; foreach ($report['monthly']['summaryCheckoutData'] as $currentCurrency => $dailyData) { $lastExchangeRate = $this->currencyService->lastExchangeRate($currentCurrency, 'EUR'); $report['monthly']['summaryCheckout']['count'] += $dailyData['count']; $report['monthly']['summaryCheckout']['total'] += $dailyData['total'] * $lastExchangeRate['data']; $report['monthly']['summaryCheckout']['commission'] += $dailyData['commission'] * $lastExchangeRate['data']; } $monthlySummary = []; $annuallyMonths = []; for ($i = 0; $i < 12; $i++) { $annuallyMonths[] = Carbon::parse($today)->firstOfYear()->addMonths($i)->format('Y-m'); } $vwBookingSummaryTransaction = vwBookingSummaryAll::whereIn('transaction_period',$annuallyMonths) ->where('commission', '>', 0) ->get()->toArray(); $vwBookingSummaryCheckout = vwBookingSummaryAll::whereIn('checkout_period',$annuallyMonths) ->where('commission', '>', 0) ->get()->toArray(); $vwBookingSummaryTransactionGrouped = collect($vwBookingSummaryTransaction)->groupBy('transaction_period')->toArray(); $vwBookingSummaryCheckoutGrouped = collect($vwBookingSummaryCheckout)->groupBy('checkout_period')->toArray(); $monthlySummary['month'] = []; foreach ($annuallyMonths as $annuallyMonth) { //$annuallyMonth = Carbon::parse($annuallyMonth)->format('Y-m'); $monthlySummary['month'][$annuallyMonth] = $annuallyMonth; $monthlySummary['transaction'][$annuallyMonth]['count'] = 0; $monthlySummary['transaction'][$annuallyMonth]['total'] = 0; $monthlySummary['transaction'][$annuallyMonth]['commission'] = 0; if(isset($vwBookingSummaryTransactionGrouped[$annuallyMonth])) { $dataCollectGroupCurrency = collect($vwBookingSummaryTransactionGrouped[$annuallyMonth])->groupBy('currency_code')->toArray(); foreach ($dataCollectGroupCurrency as $currencyCode => $currencyGroup) { $lastExchangeRate = $this->currencyService->lastExchangeRate($currencyCode, 'EUR'); $monthlySummary['transaction'][$annuallyMonth]['count'] += collect($currencyGroup)->count(); $monthlySummary['transaction'][$annuallyMonth]['total'] += collect($currencyGroup)->sum('total') * $lastExchangeRate['data']; $monthlySummary['transaction'][$annuallyMonth]['commission'] += collect($currencyGroup)->sum('commission') * $lastExchangeRate['data']; } } $monthlySummary['checkout'][$annuallyMonth]['count'] = 0; $monthlySummary['checkout'][$annuallyMonth]['total'] = 0; $monthlySummary['checkout'][$annuallyMonth]['commission'] = 0; if(isset($vwBookingSummaryCheckoutGrouped[$annuallyMonth])) { $dataCollectGroupCurrency = collect($vwBookingSummaryCheckoutGrouped[$annuallyMonth])->groupBy('currency_code')->toArray(); foreach ($dataCollectGroupCurrency as $currencyCode => $currencyGroup) { $lastExchangeRate = $this->currencyService->lastExchangeRate($currencyCode, 'EUR'); $monthlySummary['checkout'][$annuallyMonth]['count'] += collect($currencyGroup)->count(); $monthlySummary['checkout'][$annuallyMonth]['total'] += collect($currencyGroup)->sum('total') * $lastExchangeRate['data']; $monthlySummary['checkout'][$annuallyMonth]['commission'] += collect($currencyGroup)->sum('commission') * $lastExchangeRate['data']; } } } $report['monthlySummary'] = $monthlySummary; } $report['annually']['data'] = []; $report['annually']['title'] = 'Annually Report'; $report['annually']['period'] = Carbon::parse($today)->firstOfYear()->format('Y'); $annually = vwBookingSummaryAll::where('time', '>', Carbon::parse($today)->firstOfYear()->toDateString()) ->where('time', '<', Carbon::parse($today)->addYear()->firstOfYear()->toDateString()) ->where('commission', '>', 0) ->get()->toArray(); if ($annually) { $dataCollect = collect($annually); $dataCollect = $dataCollect->filter(function ($item) { if ($item['property_id'] == 362) { //Exclude Commission - Barın Hotel, 34 Hotelbeds, 103 World2Meet if (!in_array($item['channel_id'], [34, 103])) { return $item; } } else if ($item['property_id'] == 712) { //Exclude Commission - G Hotels Skopje if (!in_array($item['id'], [18122, 18091, 18090, 18089, 18088, 18087, 18086])) { return $item; } } else { return $item; } }); $dataCollectGroup = $dataCollect->groupBy('currency_code')->toArray(); foreach ($dataCollectGroup as $currencyCode => $currencyGroup) { $report['annually']['data'][$currencyCode]['count'] = count($currencyGroup); $report['annually']['data'][$currencyCode]['total'] = array_sum(pickItemFromArray('total', $currencyGroup)); $report['annually']['data'][$currencyCode]['commission'] = array_sum(pickItemFromArray('commission', $currencyGroup)); } $report['annually']['summary'] = ['count' => 0, 'total' => 0, 'commission' => 0]; foreach ($report['annually']['data'] as $currentCurrency => $dailyData) { $lastExchangeRate = $this->currencyService->lastExchangeRate($currentCurrency, 'EUR'); $report['annually']['summary']['count'] += $dailyData['count']; $report['annually']['summary']['total'] += $dailyData['total'] * $lastExchangeRate['data']; $report['annually']['summary']['commission'] += $dailyData['commission'] * $lastExchangeRate['data']; } //summaryCheckout Annually $annuallyCheckout = vwBookingSummaryAll::where('checkout_date', '>=', Carbon::parse($today)->firstOfYear()->format('Y-m-d')) ->where('checkout_date', '<=', Carbon::parse($today)->endOfYear()->format('Y-m-d')) ->where('commission', '>', 0) ->get()->toArray(); $dataCollect = collect($annuallyCheckout); $dataCollect = $dataCollect->filter(function ($item) { if ($item['property_id'] == 362) { //Exclude Commission - Barın Hotel, 34 Hotelbeds, 103 World2Meet if (!in_array($item['channel_id'], [34, 103])) { return $item; } } else if ($item['property_id'] == 712) { //Exclude Commission - G Hotels Skopje if (!in_array($item['id'], [18122, 18091, 18090, 18089, 18088, 18087, 18086])) { return $item; } } else { return $item; } }); $dataCollectGroup = $dataCollect->groupBy('currency_code')->toArray(); foreach ($dataCollectGroup as $currencyCode => $currencyGroup) { $report['annually']['summaryCheckoutData'][$currencyCode]['count'] = count($currencyGroup); $report['annually']['summaryCheckoutData'][$currencyCode]['total'] = array_sum(pickItemFromArray('total', $currencyGroup)); $report['annually']['summaryCheckoutData'][$currencyCode]['commission'] = array_sum(pickItemFromArray('commission', $currencyGroup)); } $report['annually']['summaryCheckout'] = ['count' => 0, 'total' => 0, 'commission' => 0]; foreach ($report['annually']['summaryCheckoutData'] as $currentCurrency => $dailyData) { $lastExchangeRate = $this->currencyService->lastExchangeRate($currentCurrency, 'EUR'); $report['annually']['summaryCheckout']['count'] += $dailyData['count']; $report['annually']['summaryCheckout']['total'] += $dailyData['total'] * $lastExchangeRate['data']; $report['annually']['summaryCheckout']['commission'] += $dailyData['commission'] * $lastExchangeRate['data']; } } //Hotel LIST $vwActivePropertySummary = []; $vwActiveProperty = vwActiveProperty::where('commission', '>', 1)->orderByDesc('id')->get()->toArray(); $vwActivePropertySummary['count'] = count($vwActiveProperty); $vwActivePropertySummary['groupByMonth'] = collect($vwActiveProperty)->sortByDesc('month')->groupBy('month')->toArray(); $vwActivePropertySummary['lastMonth'] = collect($vwActivePropertySummary['groupByMonth'])->take(12)->toArray(); if ($vwActivePropertySummary['lastMonth']) { foreach ($vwActivePropertySummary['lastMonth'] as $lastMonthKey => $lastMonth) { $vwActivePropertySummary['lastMonth'][$lastMonthKey] = collect($vwActivePropertySummary['lastMonth'][$lastMonthKey])->sortByDesc('id')->toArray(); if ($vwActivePropertySummary['lastMonth'][$lastMonthKey]) { $vwActivePropertySummary['lastMonth'][$lastMonthKey] = array_values($vwActivePropertySummary['lastMonth'][$lastMonthKey]); } } } //Hotel LIST $report['activeProperty'] = $vwActivePropertySummary; //Comparative Summary Data //Carbon::setLocale('tr'); for ($month = 1; $month <= 12; $month++) { $months[$month] = Carbon::create(null, $month, 1)->translatedFormat('F'); } $report['comparative']['monthList'] = $months; $currentYear = Carbon::parse($today)->firstOfYear()->format('Y'); $lastYear = Carbon::parse($today)->subYear()->firstOfYear()->format('Y'); $report['comparative']['yearList'][] = $lastYear; $report['comparative']['yearList'][] = $currentYear; $periodList = []; foreach ([$currentYear,$lastYear] as $periodYear) { for ($month = 1; $month <= 12; $month++) { $periodList[] = $periodYear . '-' . str_pad((integer)$month, 2, '0', STR_PAD_LEFT); } } $propertyInvoice = PropertyInvoice::where('status',1)->whereIn('period', $periodList); $propertyInvoice = $propertyInvoice ? $propertyInvoice->get()->toArray() : []; foreach ($propertyInvoice as $invoice) { $periodYear = Carbon::parse($invoice['period'])->format('Y'); $periodMonth = (int)Carbon::parse($invoice['period'])->format('m'); if(!isset($report['comparative']['data'][$periodYear][$periodMonth])) { $report['comparative']['data'][$periodYear][$periodMonth] = 0; } $report['comparative']['data'][$periodYear][$periodMonth]+=$invoice['total']; } $comparativeDiff = []; foreach ($months as $monthKey => $month) { $comparativeDiff[$monthKey]['amount'] = $report['comparative']['data'][$currentYear][$monthKey] - $report['comparative']['data'][$lastYear][$monthKey]; } $report['comparative']['diff'] = $comparativeDiff; //Comparative Summary Data //$json = json_encode($report, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); //file_put_contents(resource_path('data/data.json'), $json); //die(); $this->mailer->onQueue('dailyReportMail', new DailyReportMail($report)); $this->info(date('Y-m-d H:i:s') . ' FINISHED'); } }