From 153338704bad86c5507c72bcb1fe50d05993dbeb Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 26 Oct 2024 03:15:07 +0800 Subject: [PATCH] Laravel Vapor - New UI and date filter for long qeury report download --- .../Services/ExportsV2Transactions.php | 104 +++++++++++++++ .../ExportCustomersToExcelController.php | 35 ++++++ .../DownloadTransactionsReportComponent.vue | 110 ++++++++++++++++ .../ShowWhiteFormTransactionsComponent.vue | 118 ++++++++++++++++++ .../forms/DatePickerLimitRangeComponent.vue | 47 +++++++ .../views/pages/downloads/index.blade.php | 13 +- routes/web.php | 1 + 7 files changed, 426 insertions(+), 2 deletions(-) create mode 100644 app/Classes/Modules/Exports/Services/ExportsV2Transactions.php create mode 100644 resources/assets/vue/components/bookings/elements/DownloadTransactionsReportComponent.vue create mode 100644 resources/assets/vue/components/bookings/elements/ShowWhiteFormTransactionsComponent.vue create mode 100644 resources/assets/vue/components/general/forms/DatePickerLimitRangeComponent.vue diff --git a/app/Classes/Modules/Exports/Services/ExportsV2Transactions.php b/app/Classes/Modules/Exports/Services/ExportsV2Transactions.php new file mode 100644 index 00000000..007293c2 --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsV2Transactions.php @@ -0,0 +1,104 @@ +startDate = $startDate ? Carbon::parse($startDate)->startOfDay() : Carbon::now()->subMonths(1); + $this->endDate = $endDate ? Carbon::parse($endDate)->endOfDay() : Carbon::now(); + } + + /** + * @return \Illuminate\Support\Collection|mixed + */ + public function query() + { + return Transaction::whereBetween('created_at', [$this->startDate, $this->endDate]) //Limit, 'expensive' query; + ->whereIn('type', [TransactionType::PAYMENT, TransactionType::BILL]) + ->where('owner_type', '!=', Wallet::class); + } + + /** + * @param $transaction + * @return array + */ + public function map($transaction): array + { + $transactionTypes = [ + 0 => 'PAYMENT_ATTEMPT', + 1 => 'PAYMENT', + 2 => 'INVOICE', + 3 => 'BILL', + 4 => 'PROFORMA', + 5 => 'TOP_UP', + 6 => 'REFUND', + 7 => 'PURCHASE_ORDER', + 8 => 'SUPPLIER_DELIVER', + 9 => 'CREDIT_NOTE', + 10 => 'WITHDRAW', + 11 => 'DEBIT_NOTE', + 12 => 'TRANSFER_FEE' + ]; + + $transactionStatus = [ + 0 => 'PENDING_SUBMISSION', + 1 => 'PENDING_VERIFICATION', + 2 => 'APPROVED', + 3 => 'COMPLETED', + 4 => 'REJECTED', + 5 => 'SUSPENDED', + 6 => 'EXPIRED' + ]; + + + $booking = $transaction->owner; + if(!($booking instanceof Booking)){ + $booking = $booking->owner; + } + + $company = $booking->company; + + if(!$company instanceof Company) dd($transaction); + + return [ + $company->reference, + $booking ? $booking->marking : '', + $transaction->bill_no, + $transaction->owner_id, + $transaction->owner_type, + $transactionTypes[$transaction->type], + $transaction->issuerCompany->name, + $transaction->reciver, + $transaction->currency->short_code, + $transaction->amount, + $transaction->original_currency->short_code, + $transaction->original_amount, + $transaction->currency_rate, + $transaction->tax, + $transaction->service_charge, + isset($transactionStatus[$transaction->status]) ? $transactionStatus[$transaction->status] : 'Unknown Status', + \PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel($transaction->created_at), + \PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel($transaction->updated_at), + ]; + } +} diff --git a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php index 91ace417..b693f326 100644 --- a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php +++ b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php @@ -6,6 +6,7 @@ namespace App\Http\Controllers\Exports; use App\Classes\Modules\Exports\Services\ExportCurrencyVendorOrder; use App\Classes\Modules\Exports\Services\ExportsCustomers; use App\Classes\Modules\Exports\Services\ExportsTransactions; +use App\Classes\Modules\Exports\Services\ExportsV2Transactions; use App\Classes\Modules\Exports\Services\ExportsBookingTransactions; use App\Classes\Modules\Exports\Services\ExportsLeadsTransactions; use App\Classes\Modules\Exports\Services\ExportsNullDebtors; @@ -23,6 +24,7 @@ use App\Classes\Modules\Exports\Services\ExportsImportedReceiptMappeds; use App\Classes\Modules\Exports\Services\ExportsWhiteFormTransactions; use Illuminate\Support\Facades\Storage; use App\Classes\General\AWSS3Helper; +use Illuminate\Support\Carbon; class ExportCustomersToExcelController { @@ -72,6 +74,39 @@ class ExportCustomersToExcelController } } + public function v2transactions(Request $request){ + + $validated = $request->validate([ + 'startDate' => 'nullable|date_format:d-m-Y', + 'endDate' => 'nullable|date_format:d-m-Y|after_or_equal:startDate', + ]); + + $startDate = null; + $endDate = null; + + if (isset($validated['startDate']) && $validated['startDate']) { + $startDate = Carbon::createFromFormat('d-m-Y', $validated['startDate'])->startOfDay(); + } else { + $startDate = Carbon::now()->subMonths(1)->startOfDay(); + } + + if (isset($validated['endDate']) && $validated['endDate']) { + $endDate = Carbon::createFromFormat('d-m-Y', $validated['endDate'])->endOfDay(); + } else { + $endDate = Carbon::now()->endOfDay(); + } + + $exportsTransactions = new ExportsV2Transactions($startDate, $endDate); + $exportFileName = 'transactions.csv'; + $filesystemDriver = Storage::getDefaultDriver(); + + if ($filesystemDriver === 's3') { + return response(['src' => AWSS3Helper::S3Exportable($exportFileName, $exportsTransactions)]); + } else { + return $exportsTransactions->download($exportFileName, Excel::CSV, ['Content-Type' => 'text/csv']); + } + } + public function nullDebtor(ExportsNullDebtors $exportsNullDebtors, Request $request){ $exportFileName = 'nullDebtor.xls'; $filesystemDriver = Storage::getDefaultDriver(); diff --git a/resources/assets/vue/components/bookings/elements/DownloadTransactionsReportComponent.vue b/resources/assets/vue/components/bookings/elements/DownloadTransactionsReportComponent.vue new file mode 100644 index 00000000..1d08a452 --- /dev/null +++ b/resources/assets/vue/components/bookings/elements/DownloadTransactionsReportComponent.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/resources/assets/vue/components/bookings/elements/ShowWhiteFormTransactionsComponent.vue b/resources/assets/vue/components/bookings/elements/ShowWhiteFormTransactionsComponent.vue new file mode 100644 index 00000000..560f415f --- /dev/null +++ b/resources/assets/vue/components/bookings/elements/ShowWhiteFormTransactionsComponent.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/resources/assets/vue/components/general/forms/DatePickerLimitRangeComponent.vue b/resources/assets/vue/components/general/forms/DatePickerLimitRangeComponent.vue new file mode 100644 index 00000000..d65b8b50 --- /dev/null +++ b/resources/assets/vue/components/general/forms/DatePickerLimitRangeComponent.vue @@ -0,0 +1,47 @@ + + + diff --git a/resources/views/pages/downloads/index.blade.php b/resources/views/pages/downloads/index.blade.php index 1cf3a36b..bb03689d 100644 --- a/resources/views/pages/downloads/index.blade.php +++ b/resources/views/pages/downloads/index.blade.php @@ -21,7 +21,8 @@
-
+ +
@@ -60,6 +61,14 @@
+
+
+ +
+
+
+
+ diff --git a/routes/web.php b/routes/web.php index 90711eaf..3e8f3d64 100644 --- a/routes/web.php +++ b/routes/web.php @@ -291,6 +291,7 @@ Route::get('billplz/bills/{bill_no}', function($bill_no){ Route::get('/export/customers/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export')->name('customers.export'); Route::get('/export/transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@transactions')->name('transactions.export'); +Route::get('/export/transactions/v2/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@v2transactions')->name('transactions.v2.export'); Route::get('/export/null-debtor/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@nullDebtor')->name('newDebtor.export'); Route::get('/export/payment-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@paymentTransactions')->name('paymentTransactions.export'); Route::get('/export/white-form-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@whiteFormTransactions')->name('whiteFormTransactions.export');