From fdfe3f98d8fcd7369247a94cf1220df623638884 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 22 Jun 2024 15:58:29 +0800 Subject: [PATCH] Test run a long running query with pdf upload to S3 bucket --- .../V2/TestRunningALongQueryV2CommandJob.php | 153 ++++++++++++++++++ .../V2/TestRunningALongQueryV2Command.php | 44 +++++ 2 files changed, 197 insertions(+) create mode 100644 app/Classes/Jobs/Commands/V2/TestRunningALongQueryV2CommandJob.php create mode 100644 app/Console/Commands/V2/TestRunningALongQueryV2Command.php diff --git a/app/Classes/Jobs/Commands/V2/TestRunningALongQueryV2CommandJob.php b/app/Classes/Jobs/Commands/V2/TestRunningALongQueryV2CommandJob.php new file mode 100644 index 00000000..4266c2e2 --- /dev/null +++ b/app/Classes/Jobs/Commands/V2/TestRunningALongQueryV2CommandJob.php @@ -0,0 +1,153 @@ +route('id'); + $isPrecise = false; //$request->route('is_precise'); + $company = Company::find($companyId); + + $transactions = Transaction::where(function ($query) use ($companyId) { + $query + ->where('type', TransactionType::PAYMENT) + ->where('owner_type', Booking::class) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->where('payment_method', '!=', PaymentMethodType::WALLET) + ->whereHas('booking', function ($q) use ($companyId) { + $q->where('company_id', $companyId); + }); + }) + ->orWhere(function ($query) use ($companyId) { + $query->whereHas('owner', function ($q) use ($companyId) { + $q->where('owner_id', $companyId); + $q->where('owner_type', Company::class); + }) + ->where('owner_type', Wallet::class) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + }) + ->orWhere(function ($query) use ($companyId) { + $query + ->where('type', TransactionType::INVOICE) + ->where('owner_type', Booking::class) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->where('payment_method', '!=', PaymentMethodType::WALLET) + ->whereHas('booking', function ($q) use ($companyId) { + $q->where('company_id', $companyId); + }); + }) + ->groupBy( + DB::raw( + 'if (transactions.type = 2,transactions.owner_id,transactions.id)' + ), + DB::raw( + 'if (transactions.type = 2,transactions.type,transactions.id)' + ) + ) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->orderBy('created_at', 'asc') + ->get(); + + $total_incoming = Transaction::where(function ($query) use ($companyId) { + $query->whereHas('owner', function ($q) use ($companyId) { + $q->where('owner_id', $companyId); + $q->where('owner_type', Company::class); + }) + ->where('owner_type', Wallet::class) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->where('type', '!=', TransactionType::PAYMENT); + }) + ->orWhere(function ($query) use ($companyId, $transactions) { + $query + ->where('type', TransactionType::INVOICE) + ->where('owner_type', Booking::class) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->where('payment_method', '!=', PaymentMethodType::WALLET) + ->whereHas('booking', function ($q) use ($companyId) { + $q->where('company_id', $companyId); + }); + }) + ->groupBy( + DB::raw( + 'if (transactions.type = 2,transactions.owner_id,transactions.id)' + ), + DB::raw( + 'if (transactions.type = 2,transactions.type,transactions.id)' + ) + )->get(); + + $total_incoming = $total_incoming->sum(function ($transaction) { + if ($transaction->type === TransactionType::INVOICE) { + return $transaction->amount / $transaction->currency_rate + $transaction->service_charge; + } + + return $transaction->amount; + }); + + $total_outgoing = Transaction::where(function ($query) use ($companyId) { + $query + ->where('type', TransactionType::PAYMENT) + ->where('payment_method', '!=', PaymentMethodType::WALLET) + ->where('owner_type', Booking::class) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->whereHas('booking', function ($q) use ($companyId) { + $q->where('company_id', $companyId); + }); + }) + ->orWhere(function ($query) use ($companyId) { + $query->whereHas('owner', function ($q) use ($companyId) { + $q->where('owner_id', $companyId); + $q->where('owner_type', Company::class); + }) + ->where('owner_type', Wallet::class) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) + ->where('type', TransactionType::PAYMENT); + }) + ->sum('transactions.amount'); + + $currentBalance = $total_incoming - $total_outgoing; + + $pdf = LaravelMpdf::loadView('pages.pdfs.company_account_statement_transaction', ['transactions' => $transactions, 'runningBalance' => $currentBalance, 'company' => $company, 'isPrecise' => $isPrecise == 'true']); + + $exportFileName = "{$company->reference}_account_statement_transactions.pdf"; + $filesystemDriver = Storage::getDefaultDriver(); + if($filesystemDriver === 's3'){ + $pdfContent = $pdf->output(); + $temporaryUrl = AWSS3Helper::S3PDF($exportFileName, $pdfContent); + Log::info('Temporary S3 Url: ' . $temporaryUrl ); + } + + + $end = new Carbon(); + $elapsedTime = $start->diff($end)->format('%H:%I:%S'); + Log::info(Carbon::now() . ': End job - This is a test to run a long query that generates a pdf file to be uploaded to S3 bucket. ElapsedTime: ' . $elapsedTime . '.'); + } +} diff --git a/app/Console/Commands/V2/TestRunningALongQueryV2Command.php b/app/Console/Commands/V2/TestRunningALongQueryV2Command.php new file mode 100644 index 00000000..5e1a121b --- /dev/null +++ b/app/Console/Commands/V2/TestRunningALongQueryV2Command.php @@ -0,0 +1,44 @@ +