123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- <?php
-
- namespace App\Http\Controllers;
-
- use App\DTO\DocumentDTO;
- use App\Enums\Accounting\DocumentType;
- use App\Enums\Setting\Template;
- use App\Models\Accounting\Estimate;
- use App\Models\Accounting\Invoice;
- use App\Models\Accounting\RecurringInvoice;
- use App\Models\Setting\DocumentDefault;
- use Illuminate\Http\Request;
-
- class DocumentPrintController extends Controller
- {
- protected array $documentModels = [
- 'invoice' => Invoice::class,
- 'recurring_invoice' => RecurringInvoice::class,
- 'estimate' => Estimate::class,
- ];
-
- public function show(Request $request, string $documentType, int $id)
- {
- if (! isset($this->documentModels[$documentType])) {
- abort(404, "Invalid document type: {$documentType}");
- }
-
- $modelClass = $this->documentModels[$documentType];
- $document = $modelClass::findOrFail($id);
- $documentTypeEnum = $document::documentType();
-
- if ($documentTypeEnum === DocumentType::RecurringInvoice) {
- $documentTypeEnum = DocumentType::Invoice;
- }
-
- $defaults = DocumentDefault::query()
- ->type($documentTypeEnum)
- ->first();
-
- $template = $defaults?->template ?? Template::Default;
- $document = DocumentDTO::fromModel($document);
-
- return view('print-document', [
- 'document' => $document,
- 'template' => $template,
- ]);
- }
- }
|