From 9089d548b5be6632e1883faf5c32ad7db80bcde6 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 26 Oct 2023 14:54:32 +1100 Subject: [PATCH] Refactor for reports --- .../Reports/ActivityReportController.php | 22 +++------------- .../Reports/ClientContactReportController.php | 25 +++---------------- .../Reports/ClientReportController.php | 22 +++------------- .../Reports/InvoiceReportController.php | 22 +++------------- .../Reports/PaymentReportController.php | 22 +++------------- .../Reports/ProductReportController.php | 22 +++------------- .../PurchaseOrderItemReportController.php | 22 +++------------- .../Reports/PurchaseOrderReportController.php | 23 +++-------------- .../Reports/QuoteItemReportController.php | 22 +++------------- .../Reports/QuoteReportController.php | 22 +++------------- .../RecurringInvoiceReportController.php | 22 +++------------- .../Reports/TaskReportController.php | 22 +++------------- .../Reports/VendorReportController.php | 22 +++------------- app/Jobs/Report/PreviewReport.php | 6 ++++- app/Services/Pdf/PdfConfiguration.php | 3 ++- routes/api.php | 2 ++ 16 files changed, 48 insertions(+), 253 deletions(-) diff --git a/app/Http/Controllers/Reports/ActivityReportController.php b/app/Http/Controllers/Reports/ActivityReportController.php index 1a10c131865e..f9af9fa3af0d 100644 --- a/app/Http/Controllers/Reports/ActivityReportController.php +++ b/app/Http/Controllers/Reports/ActivityReportController.php @@ -41,28 +41,12 @@ class ActivityReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), ActivityExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), ActivityExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new ActivityExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/ClientContactReportController.php b/app/Http/Controllers/Reports/ClientContactReportController.php index 002573c0eea8..0062eeffa99c 100644 --- a/app/Http/Controllers/Reports/ClientContactReportController.php +++ b/app/Http/Controllers/Reports/ClientContactReportController.php @@ -72,30 +72,11 @@ class ClientContactReportController extends BaseController return response()->json(['message' => 'working...'], 200); } + $hash = \Illuminate\Support\Str::uuid(); - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + PreviewReport::dispatch($user->company(), $request->all(), ContactExport::class, $hash); - $hash = \Illuminate\Support\Str::uuid(); + return response()->json(['message' => $hash], 200); - PreviewReport::dispatch($user->company(), $request->all(), ContactExport::class, $hash); - - return response()->json(['message' => $hash], 200); - } - - - // expect a list of visible fields, or use the default - $export = new ContactExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/ClientReportController.php b/app/Http/Controllers/Reports/ClientReportController.php index a0421f5288d0..a0ff126cc69f 100644 --- a/app/Http/Controllers/Reports/ClientReportController.php +++ b/app/Http/Controllers/Reports/ClientReportController.php @@ -73,27 +73,11 @@ class ClientReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), ClientExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), ClientExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new ClientExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/InvoiceReportController.php b/app/Http/Controllers/Reports/InvoiceReportController.php index fea397431be5..d6b8a0dc08f6 100644 --- a/app/Http/Controllers/Reports/InvoiceReportController.php +++ b/app/Http/Controllers/Reports/InvoiceReportController.php @@ -72,27 +72,11 @@ class InvoiceReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), InvoiceExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), InvoiceExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - // expect a list of visible fields, or use the default - $export = new InvoiceExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/PaymentReportController.php b/app/Http/Controllers/Reports/PaymentReportController.php index 92611439bcfd..27db61d23118 100644 --- a/app/Http/Controllers/Reports/PaymentReportController.php +++ b/app/Http/Controllers/Reports/PaymentReportController.php @@ -72,29 +72,13 @@ class PaymentReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), PaymentExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), PaymentExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new PaymentExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/ProductReportController.php b/app/Http/Controllers/Reports/ProductReportController.php index 5eda138752ed..fb48f5c523ef 100644 --- a/app/Http/Controllers/Reports/ProductReportController.php +++ b/app/Http/Controllers/Reports/ProductReportController.php @@ -73,28 +73,12 @@ class ProductReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), ProductExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), ProductExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new ProductExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/PurchaseOrderItemReportController.php b/app/Http/Controllers/Reports/PurchaseOrderItemReportController.php index 2ad7ff67a5ec..b6ede66f16ca 100644 --- a/app/Http/Controllers/Reports/PurchaseOrderItemReportController.php +++ b/app/Http/Controllers/Reports/PurchaseOrderItemReportController.php @@ -39,28 +39,12 @@ class PurchaseOrderItemReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), PurchaseOrderItemExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), PurchaseOrderItemExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new PurchaseOrderItemExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/PurchaseOrderReportController.php b/app/Http/Controllers/Reports/PurchaseOrderReportController.php index 06aeba50a7f0..c8d14be82422 100644 --- a/app/Http/Controllers/Reports/PurchaseOrderReportController.php +++ b/app/Http/Controllers/Reports/PurchaseOrderReportController.php @@ -41,29 +41,12 @@ class PurchaseOrderReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), PurchaseOrderExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), PurchaseOrderExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - - $export = new PurchaseOrderExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/QuoteItemReportController.php b/app/Http/Controllers/Reports/QuoteItemReportController.php index 926107744c70..2fad0670c8d5 100644 --- a/app/Http/Controllers/Reports/QuoteItemReportController.php +++ b/app/Http/Controllers/Reports/QuoteItemReportController.php @@ -71,28 +71,12 @@ class QuoteItemReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), QuoteItemExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), QuoteItemExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new QuoteItemExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/QuoteReportController.php b/app/Http/Controllers/Reports/QuoteReportController.php index d7030f1f9d3a..a215846aaafc 100644 --- a/app/Http/Controllers/Reports/QuoteReportController.php +++ b/app/Http/Controllers/Reports/QuoteReportController.php @@ -71,28 +71,12 @@ class QuoteReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), QuoteExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), QuoteExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new QuoteExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/RecurringInvoiceReportController.php b/app/Http/Controllers/Reports/RecurringInvoiceReportController.php index 811f72ecb4b9..7536b256115a 100644 --- a/app/Http/Controllers/Reports/RecurringInvoiceReportController.php +++ b/app/Http/Controllers/Reports/RecurringInvoiceReportController.php @@ -39,28 +39,12 @@ class RecurringInvoiceReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), RecurringInvoiceExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), RecurringInvoiceExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new RecurringInvoiceExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/TaskReportController.php b/app/Http/Controllers/Reports/TaskReportController.php index 970a5e7699ec..8293f863c5c9 100644 --- a/app/Http/Controllers/Reports/TaskReportController.php +++ b/app/Http/Controllers/Reports/TaskReportController.php @@ -71,28 +71,12 @@ class TaskReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), TaskExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), TaskExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new TaskExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Http/Controllers/Reports/VendorReportController.php b/app/Http/Controllers/Reports/VendorReportController.php index 50dbf6380650..d86f031df741 100644 --- a/app/Http/Controllers/Reports/VendorReportController.php +++ b/app/Http/Controllers/Reports/VendorReportController.php @@ -39,28 +39,12 @@ class VendorReportController extends BaseController return response()->json(['message' => 'working...'], 200); } - // expect a list of visible fields, or use the default - if($request->has('output') && $request->input('output') == 'json') { + $hash = \Illuminate\Support\Str::uuid(); - $hash = \Illuminate\Support\Str::uuid(); + PreviewReport::dispatch($user->company(), $request->all(), VendorExport::class, $hash); - PreviewReport::dispatch($user->company(), $request->all(), VendorExport::class, $hash); + return response()->json(['message' => $hash], 200); - return response()->json(['message' => $hash], 200); - } - - $export = new VendorExport($user->company(), $request->all()); - - $csv = $export->run(); - - $headers = [ - 'Content-Disposition' => 'attachment', - 'Content-Type' => 'text/csv', - ]; - - return response()->streamDownload(function () use ($csv) { - echo $csv; - }, $this->filename, $headers); } } diff --git a/app/Jobs/Report/PreviewReport.php b/app/Jobs/Report/PreviewReport.php index 959e110ea608..1c1ce99f02ac 100644 --- a/app/Jobs/Report/PreviewReport.php +++ b/app/Jobs/Report/PreviewReport.php @@ -38,8 +38,12 @@ class PreviewReport implements ShouldQueue /** @var \App\Export\CSV\CreditExport $export */ $export = new $this->report_class($this->company, $this->request); - $report = $export->returnJson(); + if($this->request['output'] == 'json' ?? false) + $report = $export->returnJson(); + else + $report = $export->run(); + Cache::put($this->hash, $report, 60 * 60); } diff --git a/app/Services/Pdf/PdfConfiguration.php b/app/Services/Pdf/PdfConfiguration.php index e62c4c8ba920..fcca21481996 100644 --- a/app/Services/Pdf/PdfConfiguration.php +++ b/app/Services/Pdf/PdfConfiguration.php @@ -25,6 +25,7 @@ use App\Models\PurchaseOrder; use App\Models\PurchaseOrderInvitation; use App\Models\Quote; use App\Models\QuoteInvitation; +use App\Models\RecurringInvoice; use App\Models\RecurringInvoiceInvitation; use App\Models\Vendor; use App\Models\VendorContact; @@ -51,7 +52,7 @@ class PdfConfiguration public Design $design; - public Invoice | Credit | Quote | PurchaseOrder $entity; + public Invoice | Credit | Quote | PurchaseOrder | RecurringInvoice $entity; public string $entity_design_id; diff --git a/routes/api.php b/routes/api.php index ce662bbd6171..5c24dd087290 100644 --- a/routes/api.php +++ b/routes/api.php @@ -322,6 +322,8 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale'] Route::post('reports/tax_summary_report', TaxSummaryReportController::class); Route::post('reports/user_sales_report', UserSalesReportController::class); Route::post('reports/preview/{hash}', ReportPreviewController::class); + Route::post('exports/preview/{hash}', ReportPreviewController::class); + Route::post('templates/preview/{hash}', TemplatePreviewController::class); Route::post('search', SearchController::class);