first commit
This commit is contained in:
386
app/Console/Commands/Jobs/SummaryReportMail.php
Normal file
386
app/Console/Commands/Jobs/SummaryReportMail.php
Normal file
@@ -0,0 +1,386 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands\Jobs;
|
||||
|
||||
use App\Core\Mail\DailyReportMail;
|
||||
use App\Core\Mail\TrialFirstMail;
|
||||
use App\Core\Mail\TrialSecondMail;
|
||||
use App\Core\Service\CurrencyService;
|
||||
use App\Core\Service\PropertyService;
|
||||
use App\Exceptions\ApiErrorException;
|
||||
use App\Models\PropertyInvoice;
|
||||
use App\Models\vwActiveProperty;
|
||||
use App\Models\vwBookingSummary;
|
||||
use App\Models\vwBookingSummaryAll;
|
||||
use Carbon\Carbon;
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Mail\Mailer;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class SummaryReportMail extends Command
|
||||
{
|
||||
protected $signature = 'cron:summary-report-mail';
|
||||
|
||||
protected $description = '';
|
||||
|
||||
private $propertyService;
|
||||
|
||||
public function __construct(
|
||||
Mailer $mailer,
|
||||
PropertyService $propertyService,
|
||||
CurrencyService $currencyService
|
||||
)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->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');
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user