From 129028518db813d2f6d8f1cf0ab3268d2a3c5e27 Mon Sep 17 00:00:00 2001 From: Darko Gjorgjijoski Date: Fri, 3 Apr 2026 16:18:25 +0200 Subject: [PATCH] Consolidate PDF classes under app/Services/Pdf with consistent naming Split PDFService.php (3 classes + 2 interfaces in one file) into separate files. Move GotenbergPDFDriver from app/Services/PDFDrivers/ into app/Services/Pdf/. Normalize casing from ALL-CAPS PDF to Pdf throughout: facade, provider, service, driver factory, and Gotenberg driver. Fix PaymentService using Barryvdh DomPDF facade directly instead of the app's PDF facade (bypassed the driver factory). Report controllers also updated to use the app facade. --- .phpstorm.meta.php | 22 +++---- app/Facades/{PDF.php => Pdf.php} | 2 +- .../Report/CustomerSalesReportController.php | 4 +- .../Admin/Report/ExpensesReportController.php | 4 +- .../Report/ItemSalesReportController.php | 4 +- .../Report/ProfitLossReportController.php | 4 +- .../Report/TaxSummaryReportController.php | 4 +- app/Providers/PDFServiceProvider.php | 13 ---- app/Providers/PdfServiceProvider.php | 13 ++++ app/Services/EstimateService.php | 4 +- app/Services/InvoiceService.php | 4 +- .../PDFDrivers/GotenbergPDFDriver.php | 60 ------------------- app/Services/PDFService.php | 47 --------------- app/Services/PaymentService.php | 4 +- app/Services/Pdf/GotenbergPdfDriver.php | 32 ++++++++++ app/Services/Pdf/GotenbergPdfResponse.php | 31 ++++++++++ app/Services/Pdf/PdfDriver.php | 8 +++ app/Services/Pdf/PdfDriverFactory.php | 17 ++++++ app/Services/Pdf/PdfService.php | 13 ++++ app/Services/Pdf/ResponseStream.php | 12 ++++ bootstrap/providers.php | 4 +- 21 files changed, 156 insertions(+), 150 deletions(-) rename app/Facades/{PDF.php => Pdf.php} (91%) delete mode 100644 app/Providers/PDFServiceProvider.php create mode 100644 app/Providers/PdfServiceProvider.php delete mode 100644 app/Services/PDFDrivers/GotenbergPDFDriver.php delete mode 100644 app/Services/PDFService.php create mode 100644 app/Services/Pdf/GotenbergPdfDriver.php create mode 100644 app/Services/Pdf/GotenbergPdfResponse.php create mode 100644 app/Services/Pdf/PdfDriver.php create mode 100644 app/Services/Pdf/PdfDriverFactory.php create mode 100644 app/Services/Pdf/PdfService.php create mode 100644 app/Services/Pdf/ResponseStream.php diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php index 68581c10..c9a98667 100644 --- a/.phpstorm.meta.php +++ b/.phpstorm.meta.php @@ -73,7 +73,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -156,7 +156,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -239,7 +239,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -322,7 +322,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -405,7 +405,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -488,7 +488,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -571,7 +571,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -654,7 +654,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -737,7 +737,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -820,7 +820,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, @@ -903,7 +903,7 @@ namespace PHPSTORM_META { 'migration.creator' => \Illuminate\Database\Migrations\MigrationCreator::class, 'migration.repository' => \Illuminate\Database\Migrations\DatabaseMigrationRepository::class, 'migrator' => \Illuminate\Database\Migrations\Migrator::class, - 'pdf.driver' => \App\Services\PDFService::class, + 'pdf.driver' => \App\Services\Pdf\PdfService::class, 'pipeline' => \Illuminate\Pipeline\Pipeline::class, 'queue' => \Illuminate\Queue\QueueManager::class, 'queue.connection' => \Illuminate\Queue\SyncQueue::class, diff --git a/app/Facades/PDF.php b/app/Facades/Pdf.php similarity index 91% rename from app/Facades/PDF.php rename to app/Facades/Pdf.php index b0c769d3..e2e05a2a 100644 --- a/app/Facades/PDF.php +++ b/app/Facades/Pdf.php @@ -7,7 +7,7 @@ use Illuminate\Support\Facades\Facade; /** * @method static \Psr\Http\Message\ResponseInterface loadView(string $template) */ -class PDF extends Facade +class Pdf extends Facade { protected static function getFacadeAccessor() { diff --git a/app/Http/Controllers/V1/Admin/Report/CustomerSalesReportController.php b/app/Http/Controllers/V1/Admin/Report/CustomerSalesReportController.php index d1e7727b..2230c33d 100644 --- a/app/Http/Controllers/V1/Admin/Report/CustomerSalesReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/CustomerSalesReportController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V1\Admin\Report; +use App\Facades\Pdf; use App\Http\Controllers\Controller; use App\Models\Company; use App\Models\CompanySetting; @@ -11,7 +12,6 @@ use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; -use PDF; class CustomerSalesReportController extends Controller { @@ -85,7 +85,7 @@ class CustomerSalesReportController extends Controller 'currency' => $currency, ]); - $pdf = PDF::loadView('app.pdf.reports.sales-customers'); + $pdf = Pdf::loadView('app.pdf.reports.sales-customers'); if ($request->has('preview')) { return view('app.pdf.reports.sales-customers'); diff --git a/app/Http/Controllers/V1/Admin/Report/ExpensesReportController.php b/app/Http/Controllers/V1/Admin/Report/ExpensesReportController.php index b7b6d678..f2e4b51e 100644 --- a/app/Http/Controllers/V1/Admin/Report/ExpensesReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/ExpensesReportController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V1\Admin\Report; +use App\Facades\Pdf; use App\Http\Controllers\Controller; use App\Models\Company; use App\Models\CompanySetting; @@ -11,7 +12,6 @@ use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; -use PDF; class ExpensesReportController extends Controller { @@ -70,7 +70,7 @@ class ExpensesReportController extends Controller 'to_date' => $to_date, 'currency' => $currency, ]); - $pdf = PDF::loadView('app.pdf.reports.expenses'); + $pdf = Pdf::loadView('app.pdf.reports.expenses'); if ($request->has('preview')) { return view('app.pdf.reports.expenses'); diff --git a/app/Http/Controllers/V1/Admin/Report/ItemSalesReportController.php b/app/Http/Controllers/V1/Admin/Report/ItemSalesReportController.php index 828fe5d0..870b9cb0 100644 --- a/app/Http/Controllers/V1/Admin/Report/ItemSalesReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/ItemSalesReportController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V1\Admin\Report; +use App\Facades\Pdf; use App\Http\Controllers\Controller; use App\Models\Company; use App\Models\CompanySetting; @@ -11,7 +12,6 @@ use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; -use PDF; class ItemSalesReportController extends Controller { @@ -70,7 +70,7 @@ class ItemSalesReportController extends Controller 'to_date' => $to_date, 'currency' => $currency, ]); - $pdf = PDF::loadView('app.pdf.reports.sales-items'); + $pdf = Pdf::loadView('app.pdf.reports.sales-items'); if ($request->has('preview')) { return view('app.pdf.reports.sales-items'); diff --git a/app/Http/Controllers/V1/Admin/Report/ProfitLossReportController.php b/app/Http/Controllers/V1/Admin/Report/ProfitLossReportController.php index 0afa5ed3..e16cde9c 100644 --- a/app/Http/Controllers/V1/Admin/Report/ProfitLossReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/ProfitLossReportController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V1\Admin\Report; +use App\Facades\Pdf; use App\Http\Controllers\Controller; use App\Models\Company; use App\Models\CompanySetting; @@ -12,7 +13,6 @@ use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; -use PDF; class ProfitLossReportController extends Controller { @@ -78,7 +78,7 @@ class ProfitLossReportController extends Controller 'to_date' => $to_date, 'currency' => $currency, ]); - $pdf = PDF::loadView('app.pdf.reports.profit-loss'); + $pdf = Pdf::loadView('app.pdf.reports.profit-loss'); if ($request->has('preview')) { return view('app.pdf.reports.profit-loss'); diff --git a/app/Http/Controllers/V1/Admin/Report/TaxSummaryReportController.php b/app/Http/Controllers/V1/Admin/Report/TaxSummaryReportController.php index 3abe37b3..8f5af38b 100644 --- a/app/Http/Controllers/V1/Admin/Report/TaxSummaryReportController.php +++ b/app/Http/Controllers/V1/Admin/Report/TaxSummaryReportController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V1\Admin\Report; +use App\Facades\Pdf; use App\Http\Controllers\Controller; use App\Models\Company; use App\Models\CompanySetting; @@ -11,7 +12,6 @@ use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; -use PDF; class TaxSummaryReportController extends Controller { @@ -73,7 +73,7 @@ class TaxSummaryReportController extends Controller 'currency' => $currency, ]); - $pdf = PDF::loadView('app.pdf.reports.tax-summary'); + $pdf = Pdf::loadView('app.pdf.reports.tax-summary'); if ($request->has('preview')) { return view('app.pdf.reports.tax-summary'); diff --git a/app/Providers/PDFServiceProvider.php b/app/Providers/PDFServiceProvider.php deleted file mode 100644 index f9642c9a..00000000 --- a/app/Providers/PDFServiceProvider.php +++ /dev/null @@ -1,13 +0,0 @@ - PDFService::class, - ]; -} diff --git a/app/Providers/PdfServiceProvider.php b/app/Providers/PdfServiceProvider.php new file mode 100644 index 00000000..acb852b0 --- /dev/null +++ b/app/Providers/PdfServiceProvider.php @@ -0,0 +1,13 @@ + PdfService::class, + ]; +} diff --git a/app/Services/EstimateService.php b/app/Services/EstimateService.php index 4e897a57..56e08ed0 100644 --- a/app/Services/EstimateService.php +++ b/app/Services/EstimateService.php @@ -4,7 +4,7 @@ namespace App\Services; use App; use App\Facades\Hashids; -use App\Facades\PDF; +use App\Facades\Pdf; use App\Mail\SendEstimateMail; use App\Models\Company; use App\Models\CompanySetting; @@ -197,6 +197,6 @@ class EstimateService return view($templatePath); } - return PDF::loadView($templatePath); + return Pdf::loadView($templatePath); } } diff --git a/app/Services/InvoiceService.php b/app/Services/InvoiceService.php index fdd181ae..e2223740 100644 --- a/app/Services/InvoiceService.php +++ b/app/Services/InvoiceService.php @@ -4,7 +4,7 @@ namespace App\Services; use App; use App\Facades\Hashids; -use App\Facades\PDF; +use App\Facades\Pdf; use App\Mail\SendInvoiceMail; use App\Models\Company; use App\Models\CompanySetting; @@ -262,6 +262,6 @@ class InvoiceService return view($templatePath); } - return PDF::loadView($templatePath); + return Pdf::loadView($templatePath); } } diff --git a/app/Services/PDFDrivers/GotenbergPDFDriver.php b/app/Services/PDFDrivers/GotenbergPDFDriver.php deleted file mode 100644 index 73b7c5fa..00000000 --- a/app/Services/PDFDrivers/GotenbergPDFDriver.php +++ /dev/null @@ -1,60 +0,0 @@ -response = $stream; - } - - public function stream(string $filename = 'document.pdf'): Response - { - $output = $this->response->getBody(); - - return new Response($output, 200, [ - 'Content-Type' => 'application/pdf', - 'Content-Disposition' => 'inline; filename="'.$filename.'"', - ]); - } - - public function output(): string - { - return $this->response->getBody()->getContents(); - } -} - -class GotenbergPDFDriver -{ - public function loadView(string $viewname): GotenbergPDFResponse - { - $papersize = explode(' ', config('pdf.connections.gotenberg.papersize')); - if (count($papersize) != 2) { - throw new \InvalidArgumentException('Invalid Gotenberg Papersize specified'); - } - - $host = config('pdf.connections.gotenberg.host'); - $request = Gotenberg::chromium($host) - ->pdf() - ->margins(0, 0, 0, 0) // Margins can be set using CSS - ->paperSize($papersize[0], $papersize[1]) - ->html( - Stream::string( - 'document.html', - view($viewname)->render(), - ) - ); - $result = Gotenberg::send($request); - - return new GotenbergPDFResponse($result); - } -} diff --git a/app/Services/PDFService.php b/app/Services/PDFService.php deleted file mode 100644 index 766f003c..00000000 --- a/app/Services/PDFService.php +++ /dev/null @@ -1,47 +0,0 @@ - App::make('dompdf.wrapper'), - 'gotenberg' => new GotenbergPDFDriver, - default => throw new \InvalidArgumentException('Invalid PDFDriver requested') - }; - } -} - -class PDFService -{ - public static function loadView(string $template) - { - $driver = config('pdf.driver'); - - return PDFDriverFactory::create($driver)->loadView($template); - } -} diff --git a/app/Services/PaymentService.php b/app/Services/PaymentService.php index feda346d..0a1e3565 100644 --- a/app/Services/PaymentService.php +++ b/app/Services/PaymentService.php @@ -3,13 +3,13 @@ namespace App\Services; use App\Facades\Hashids; +use App\Facades\Pdf; use App\Mail\SendPaymentMail; use App\Models\Company; use App\Models\CompanySetting; use App\Models\ExchangeRateLog; use App\Models\Invoice; use App\Models\Payment; -use Barryvdh\DomPDF\Facade\Pdf as PDF; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Collection; @@ -184,7 +184,7 @@ class PaymentService return view('app.pdf.payment.payment'); } - return PDF::loadView('app.pdf.payment.payment'); + return Pdf::loadView('app.pdf.payment.payment'); } public function generateFromTransaction($transaction): Payment diff --git a/app/Services/Pdf/GotenbergPdfDriver.php b/app/Services/Pdf/GotenbergPdfDriver.php new file mode 100644 index 00000000..c7db051a --- /dev/null +++ b/app/Services/Pdf/GotenbergPdfDriver.php @@ -0,0 +1,32 @@ +pdf() + ->margins(0, 0, 0, 0) + ->paperSize($papersize[0], $papersize[1]) + ->html( + Stream::string( + 'document.html', + view($viewname)->render(), + ) + ); + $result = Gotenberg::send($request); + + return new GotenbergPdfResponse($result); + } +} diff --git a/app/Services/Pdf/GotenbergPdfResponse.php b/app/Services/Pdf/GotenbergPdfResponse.php new file mode 100644 index 00000000..49a3f1e4 --- /dev/null +++ b/app/Services/Pdf/GotenbergPdfResponse.php @@ -0,0 +1,31 @@ +response = $stream; + } + + public function stream(string $filename = 'document.pdf'): Response + { + $output = $this->response->getBody(); + + return new Response($output, 200, [ + 'Content-Type' => 'application/pdf', + 'Content-Disposition' => 'inline; filename="'.$filename.'"', + ]); + } + + public function output(): string + { + return $this->response->getBody()->getContents(); + } +} diff --git a/app/Services/Pdf/PdfDriver.php b/app/Services/Pdf/PdfDriver.php new file mode 100644 index 00000000..4bb4926e --- /dev/null +++ b/app/Services/Pdf/PdfDriver.php @@ -0,0 +1,8 @@ + App::make('dompdf.wrapper'), + 'gotenberg' => new GotenbergPdfDriver, + default => throw new \InvalidArgumentException('Invalid PdfDriver requested') + }; + } +} diff --git a/app/Services/Pdf/PdfService.php b/app/Services/Pdf/PdfService.php new file mode 100644 index 00000000..e174a22a --- /dev/null +++ b/app/Services/Pdf/PdfService.php @@ -0,0 +1,13 @@ +loadView($template); + } +} diff --git a/app/Services/Pdf/ResponseStream.php b/app/Services/Pdf/ResponseStream.php new file mode 100644 index 00000000..cbb7b73a --- /dev/null +++ b/app/Services/Pdf/ResponseStream.php @@ -0,0 +1,12 @@ +