Refactor Custom Invoice/Estimate PDF Templates (#277)

* Add utility class for managing templates

* Register custom pdf template views location

* Update the make:template command to make use of PdfTemplateUtils

* Update PDF invoice/estimate template controllers

* Register pdf_templates filesystem disk

* Remove unused leftovers

* Reformat with pint
This commit is contained in:
Darko Gjorgjijoski
2025-01-13 01:20:13 +01:00
committed by GitHub
parent 12d9d6c801
commit d862ee05e9
11 changed files with 221 additions and 53 deletions

View File

@@ -5,6 +5,7 @@ namespace App\Models;
use App;
use App\Mail\SendEstimateMail;
use App\Services\SerialNumberFormatter;
use App\Space\PdfTemplateUtils;
use App\Traits\GeneratesPdfTrait;
use App\Traits\HasCustomFieldsTrait;
use Barryvdh\DomPDF\Facade\Pdf as PDF;
@@ -14,8 +15,6 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Vite;
use Illuminate\Support\Str;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
@@ -424,11 +423,14 @@ class Estimate extends Model implements HasMedia
'taxes' => $taxes,
]);
$template = PdfTemplateUtils::findFormattedTemplate('estimate', $estimateTemplate, '');
$templatePath = $template['custom'] ? sprintf('pdf_templates::estimate.%s', $estimateTemplate) : sprintf('app.pdf.estimate.%s', $estimateTemplate);
if (request()->has('preview')) {
return view('app.pdf.estimate.'.$estimateTemplate);
return view($templatePath);
}
return PDF::loadView('app.pdf.estimate.'.$estimateTemplate);
return PDF::loadView($templatePath);
}
public function getCompanyAddress()
@@ -499,27 +501,13 @@ class Estimate extends Model implements HasMedia
];
}
public static function estimateTemplates()
{
$templates = Storage::disk('views')->files('/app/pdf/estimate');
$estimateTemplates = [];
foreach ($templates as $key => $template) {
$templateName = Str::before(basename($template), '.blade.php');
$estimateTemplates[$key]['name'] = $templateName;
$estimateTemplates[$key]['path'] = Vite::asset('resources/static/img/PDF/'.$templateName.'.png');
}
return $estimateTemplates;
}
public function getInvoiceTemplateName()
{
$templateName = Str::replace('estimate', 'invoice', $this->template_name);
$name = [];
foreach (Invoice::invoiceTemplates() as $template) {
foreach (PdfTemplateUtils::getFormattedTemplates('invoice') as $template) {
$name[] = $template['name'];
}