From 06e36bb754d43bba63ca7439e2655db23741f478 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Tue, 18 Jun 2024 12:22:46 +0800 Subject: [PATCH] Export pdf file from Laravel Vapor through S3 bucket (code sync from exchange-2.0) --- app/Classes/General/AWSS3Helper.php | 28 +++++++++++++++---- .../ExportFeedbackDataLogic.php | 2 +- .../ExportPackingListLogic.php | 4 +-- .../GenerateCreditNotePdfLogic.php | 12 +++++++- .../ExportDeliveryOrdersToExcelController.php | 2 +- .../Exports/ExportArrivedParcelController.php | 8 +++--- .../ExportCompanyModuleSummaryController.php | 4 +-- .../ExportContainerPackingListController.php | 2 +- .../ExportCustomersToExcelController.php | 6 ++-- ...mersWalletTransactionToExcelController.php | 2 +- .../ExportParcelPostcodesController.php | 2 +- ...endingArrangementPackingListController.php | 4 +-- .../Orders/DownloadOrderQrPdfController.php | 14 ++++++++-- .../Controllers/Prototype/TestController.php | 15 ++++++++-- .../orders/elements/OrderComponent.vue | 24 ++++++++++++++-- .../sections/OrderProfileSectionComponent.vue | 22 +++++++++++++-- .../OrderProfileV2SectionComponent.vue | 20 +++++++++++-- .../CustomerWalletTransactionComponent.vue | 24 +++++++++++++--- 18 files changed, 155 insertions(+), 40 deletions(-) diff --git a/app/Classes/General/AWSS3Helper.php b/app/Classes/General/AWSS3Helper.php index 12cf6661..5d9ca856 100644 --- a/app/Classes/General/AWSS3Helper.php +++ b/app/Classes/General/AWSS3Helper.php @@ -2,19 +2,18 @@ namespace App\Classes\General; -use Illuminate\Http\Resources\Json\ResourceCollection; -use Illuminate\Support\Str; -use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; use Carbon\Carbon; +use Maatwebsite\Excel\Concerns\Exportable; class AWSS3Helper { /** - * @param string $methodName + * @param string $exportFileName + * @param Exportable $exportableObject * @return string */ - static function S3($exportFileName, $exportableObject){ + static function S3Exportable($exportFileName, $exportableObject){ //Step 1: Upload to S3 $filePathForS3 = 'temp/' . $exportFileName; $exportableObject->store($filePathForS3, 's3'); @@ -28,4 +27,23 @@ class AWSS3Helper return $temporaryUrl; } + /** + * @param string $exportFileName + * @param string|resource $contents + * @return string + */ + static function S3PDF($exportFileName, $contents){ + //Step 1: Upload to S3 + $filePathForS3 = 'temp/' . $exportFileName; + Storage::disk('s3')->put($filePathForS3, $contents); + + //Step 2: Return temporary URL from S3 + $temporaryUrl = Storage::disk('s3')->temporaryUrl( + $filePathForS3, + Carbon::now()->addMinutes(10) + ); + + return $temporaryUrl; + } + } diff --git a/app/Classes/Modules/Exports/ControllersLogic/ExportFeedbackDataLogic.php b/app/Classes/Modules/Exports/ControllersLogic/ExportFeedbackDataLogic.php index ce7e8e9e..c4c4e3d5 100644 --- a/app/Classes/Modules/Exports/ControllersLogic/ExportFeedbackDataLogic.php +++ b/app/Classes/Modules/Exports/ControllersLogic/ExportFeedbackDataLogic.php @@ -54,7 +54,7 @@ class ExportFeedbackDataLogic extends Abstract2ControllerLogic $exportFileName = 'feedback.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $this->exportsFeedback) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $this->exportsFeedback) ]); } else{ $response = $this->exportsFeedback->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/app/Classes/Modules/Exports/ControllersLogic/ExportPackingListLogic.php b/app/Classes/Modules/Exports/ControllersLogic/ExportPackingListLogic.php index 84e49a8e..10413f03 100644 --- a/app/Classes/Modules/Exports/ControllersLogic/ExportPackingListLogic.php +++ b/app/Classes/Modules/Exports/ControllersLogic/ExportPackingListLogic.php @@ -61,11 +61,11 @@ class ExportPackingListLogic extends Abstract2ControllerLogic if($filesystemDriver === 's3'){ if($isSetPendingArrangement){ $exportFileName = 'packing-list-delivery.xls'; - return response([ 'src' => AWSS3Helper::S3($exportFileName, $this->exportsPendingArrangementDeliveryList) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $this->exportsPendingArrangementDeliveryList) ]); } else{ $exportFileName = 'packing-list-on-hold.xls'; - return response([ 'src' => AWSS3Helper::S3($exportFileName, $this->exportsOnHoldPackingList) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $this->exportsOnHoldPackingList) ]); } } else{ diff --git a/app/Classes/Modules/Transactions/ControllersLogic/GenerateCreditNotePdfLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/GenerateCreditNotePdfLogic.php index 049ef3fa..c0f58f16 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/GenerateCreditNotePdfLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/GenerateCreditNotePdfLogic.php @@ -9,6 +9,8 @@ use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; use App\Classes\Modules\Companies\Services\FetchesCompanyModule; use App\Classes\Modules\Transactions\Services\FetchesTransaction; use App\Classes\ValueObjects\Constants\TransactionType; +use App\Classes\General\AWSS3Helper; +use Illuminate\Support\Facades\Storage; class GenerateCreditNotePdfLogic { @@ -43,6 +45,14 @@ class GenerateCreditNotePdfLogic $pdf = LaravelMpdf::loadView('pages.pdfs.credit_note', ['transaction' => $transaction, 'supplier' => $supplier]); - return $pdf->stream('CreditNote.pdf'); + $exportFileName = 'CreditNote.pdf'; + $filesystemDriver = Storage::getDefaultDriver(); + if($filesystemDriver === 's3'){ + $pdfContent = $pdf->output(); + AWSS3Helper::S3PDF($exportFileName, $pdfContent); + } + else{ + return $pdf->stream($exportFileName); + } } } diff --git a/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php b/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php index 1269eb40..c127489f 100644 --- a/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php +++ b/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php @@ -30,7 +30,7 @@ class ExportDeliveryOrdersToExcelController $exportFileName = 'line-clear-export.xlsx'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsTransactions) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsTransactions) ]); } else{ $response = $exportsTransactions->download($exportFileName, Excel::XLSX, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/app/Http/Controllers/Exports/ExportArrivedParcelController.php b/app/Http/Controllers/Exports/ExportArrivedParcelController.php index 9053d328..002e2079 100644 --- a/app/Http/Controllers/Exports/ExportArrivedParcelController.php +++ b/app/Http/Controllers/Exports/ExportArrivedParcelController.php @@ -33,7 +33,7 @@ class ExportArrivedParcelController $exportFileName = 'arrived-parcel.xlsx'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsPendingArrangementDeliveryList) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList) ]); } else{ $response = $exportsPendingArrangementDeliveryList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); @@ -47,7 +47,7 @@ class ExportArrivedParcelController $exportFileName = 'parcel-summary.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsParcelsSummary) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsParcelsSummary) ]); } else{ $response = $exportsParcelsSummary->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); @@ -61,7 +61,7 @@ class ExportArrivedParcelController $exportFileName = 'guangzhou2-to-johor-summary.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsWarehousePackingList) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsWarehousePackingList) ]); } else{ $response = $exportsWarehousePackingList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); @@ -75,7 +75,7 @@ class ExportArrivedParcelController $exportFileName = 'aging_report.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $data) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $data) ]); } else{ $response = $data->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/app/Http/Controllers/Exports/ExportCompanyModuleSummaryController.php b/app/Http/Controllers/Exports/ExportCompanyModuleSummaryController.php index da9df654..4fe784ab 100644 --- a/app/Http/Controllers/Exports/ExportCompanyModuleSummaryController.php +++ b/app/Http/Controllers/Exports/ExportCompanyModuleSummaryController.php @@ -29,7 +29,7 @@ class ExportCompanyModuleSummaryController $exportFileName = 'customerid-markingno.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsCompanyModuleSummary) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsCompanyModuleSummary) ]); } else{ $response = $exportsCompanyModuleSummary->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); @@ -45,7 +45,7 @@ class ExportCompanyModuleSummaryController $exportFileName = $customer_marking . '_order_summary.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsOrderSummaryByMarking) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsOrderSummaryByMarking) ]); } else{ $response = $exportsOrderSummaryByMarking->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/app/Http/Controllers/Exports/ExportContainerPackingListController.php b/app/Http/Controllers/Exports/ExportContainerPackingListController.php index deba9545..9c92f850 100644 --- a/app/Http/Controllers/Exports/ExportContainerPackingListController.php +++ b/app/Http/Controllers/Exports/ExportContainerPackingListController.php @@ -19,7 +19,7 @@ class ExportContainerPackingListController $exportFileName = 'customer-container-packing-list.csv'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsContainerPackingList) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsContainerPackingList) ]); } else{ return $exportsContainerPackingList->download($exportFileName, Excel::CSV, ['Content-Type' => 'text/csv']); diff --git a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php index 57289d50..9a9b77cd 100644 --- a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php +++ b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php @@ -27,7 +27,7 @@ class ExportCustomersToExcelController $exportFileName = 'nullDebtor.xlsx'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsNullDebtors) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsNullDebtors) ]); } else{ $response = $exportsNullDebtors->download('nullDebtor.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); @@ -41,7 +41,7 @@ class ExportCustomersToExcelController $exportFileName = 'payment-transactions.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsTransactions) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsTransactions) ]); } else{ $response = $exportsTransactions->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); @@ -55,7 +55,7 @@ class ExportCustomersToExcelController $exportFileName = 'total-orders-' . $request->route('year') . '.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsTotalOrders) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsTotalOrders) ]); } else{ $response = $exportsTotalOrders->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/app/Http/Controllers/Exports/ExportCustomersWalletTransactionToExcelController.php b/app/Http/Controllers/Exports/ExportCustomersWalletTransactionToExcelController.php index 573d15c1..33f16946 100644 --- a/app/Http/Controllers/Exports/ExportCustomersWalletTransactionToExcelController.php +++ b/app/Http/Controllers/Exports/ExportCustomersWalletTransactionToExcelController.php @@ -32,7 +32,7 @@ class ExportCustomersWalletTransactionToExcelController $exportFileName = $company_marking . '-wallet-' . ($request->route('is_precise') == 'true' ? 'precise-' : '') . 'transaction-history.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsTransactions) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsTransactions) ]); } else{ $response = $exportsTransactions->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/app/Http/Controllers/Exports/ExportParcelPostcodesController.php b/app/Http/Controllers/Exports/ExportParcelPostcodesController.php index bce68ef7..ea436e93 100644 --- a/app/Http/Controllers/Exports/ExportParcelPostcodesController.php +++ b/app/Http/Controllers/Exports/ExportParcelPostcodesController.php @@ -27,7 +27,7 @@ class ExportParcelPostcodesController $exportFileName = 'parcel-postcodes.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsPendingArrangementDeliveryList) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList) ]); } else{ $response = $exportsPendingArrangementDeliveryList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/app/Http/Controllers/Exports/ExportPendingArrangementPackingListController.php b/app/Http/Controllers/Exports/ExportPendingArrangementPackingListController.php index 083dd0f8..1a404289 100644 --- a/app/Http/Controllers/Exports/ExportPendingArrangementPackingListController.php +++ b/app/Http/Controllers/Exports/ExportPendingArrangementPackingListController.php @@ -28,7 +28,7 @@ class ExportPendingArrangementPackingListController $exportFileName = 'packing-list-delivery.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsPendingArrangementDeliveryList) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList) ]); } else{ $response = $exportsPendingArrangementDeliveryList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); @@ -42,7 +42,7 @@ class ExportPendingArrangementPackingListController $exportFileName = 'packing-list-on-hold.xls'; $filesystemDriver = Storage::getDefaultDriver(); if($filesystemDriver === 's3'){ - return response([ 'src' => AWSS3Helper::S3($exportFileName, $exportsPendingArrangementDeliveryList) ]); + return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exportsPendingArrangementDeliveryList) ]); } else{ $response = $exportsPendingArrangementDeliveryList->download($exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); diff --git a/app/Http/Controllers/Orders/DownloadOrderQrPdfController.php b/app/Http/Controllers/Orders/DownloadOrderQrPdfController.php index 29247dd0..47e8085a 100644 --- a/app/Http/Controllers/Orders/DownloadOrderQrPdfController.php +++ b/app/Http/Controllers/Orders/DownloadOrderQrPdfController.php @@ -9,6 +9,8 @@ use App\Classes\ValueObjects\Constants\WarehouseReferences; use App\Models\Order; use Illuminate\Http\Request; use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; +use App\Classes\General\AWSS3Helper; +use Illuminate\Support\Facades\Storage; class DownloadOrderQrPdfController { @@ -73,7 +75,15 @@ class DownloadOrderQrPdfController 'margin_top' => '40px', ]); - return $pdf->stream('CIEF_ORDER_NO_'.$order->reference.'.pdf'); + $exportFileName = 'CIEF_ORDER_NO_'.$order->reference.'.pdf'; + $filesystemDriver = Storage::getDefaultDriver(); + if($filesystemDriver === 's3'){ + $pdfContent = $pdf->output(); + AWSS3Helper::S3PDF($exportFileName, $pdfContent); + } + else{ + return $pdf->stream($exportFileName); + } } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Prototype/TestController.php b/app/Http/Controllers/Prototype/TestController.php index 9f9eb1e3..adb4c81f 100644 --- a/app/Http/Controllers/Prototype/TestController.php +++ b/app/Http/Controllers/Prototype/TestController.php @@ -7,6 +7,8 @@ use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; +use App\Classes\General\AWSS3Helper; +use Illuminate\Support\Facades\Storage; class TestController extends Controller { @@ -22,6 +24,15 @@ class TestController extends Controller 'bar' => 'hello 2' ]; $pdf = LaravelMpdf::loadView('pdfs.qr', $data); - return $pdf->stream('qr.pdf'); + + $exportFileName = 'qr.pdf'; + $filesystemDriver = Storage::getDefaultDriver(); + if($filesystemDriver === 's3'){ + $pdfContent = $pdf->output(); + AWSS3Helper::S3PDF($exportFileName, $pdfContent); + } + else{ + return $pdf->stream($exportFileName); + } } -} \ No newline at end of file +} diff --git a/resources/assets/vue/components/orders/elements/OrderComponent.vue b/resources/assets/vue/components/orders/elements/OrderComponent.vue index 841de21c..e1eb0308 100644 --- a/resources/assets/vue/components/orders/elements/OrderComponent.vue +++ b/resources/assets/vue/components/orders/elements/OrderComponent.vue @@ -5,7 +5,7 @@
- +
Download QR Cod PDF
@@ -165,6 +165,24 @@ expanded: false } }, + methods: { + download(param) { + let url = route('order.qr.download', param.id); + if(window.LARAVEL_VAPOR_ENABLED){ + return fetch(url, { + method: 'GET', + responseType: 'json', + }).then(response => { + if (response.src) { + window.location.href = response.src; + } + }); + } + else{ + window.open(url, '_blank'); + } + }, + }, mixins: [componentHandler] } - \ No newline at end of file + diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 5391b6ae..60b2aebe 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -10,7 +10,7 @@
- +
@@ -130,7 +130,7 @@
@@ -502,7 +502,23 @@ this.$store.dispatch('completeList', {'name': this.section, 'data': []}); this.isLoading = false; this.order = response.payload.data; - } + }, + download(param) { + let url = route('order.qr.download', param.id); + if(window.LARAVEL_VAPOR_ENABLED){ + return fetch(url, { + method: 'GET', + responseType: 'json', + }).then(response => { + if (response.src) { + window.location.href = response.src; + } + }); + } + else{ + window.open(url, '_blank'); + } + }, } } diff --git a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue index 1856fea5..42be028b 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue @@ -10,7 +10,7 @@
- +
@@ -130,7 +130,7 @@
@@ -250,6 +250,22 @@ return storageInvoice; }, + download(param) { + let url = route('order.qr.download', param.id); + if(window.LARAVEL_VAPOR_ENABLED){ + return fetch(url, { + method: 'GET', + responseType: 'json', + }).then(response => { + if (response.src) { + window.location.href = response.src; + } + }); + } + else{ + window.open(url, '_blank'); + } + }, } } diff --git a/resources/assets/vue/components/wallets/elements/CustomerWalletTransactionComponent.vue b/resources/assets/vue/components/wallets/elements/CustomerWalletTransactionComponent.vue index 4f6fba87..7dc1896c 100644 --- a/resources/assets/vue/components/wallets/elements/CustomerWalletTransactionComponent.vue +++ b/resources/assets/vue/components/wallets/elements/CustomerWalletTransactionComponent.vue @@ -1,11 +1,11 @@ \ No newline at end of file +