Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\DTO\DocumentDTO;
  4. use App\Enums\Accounting\DocumentType;
  5. use App\Enums\Setting\Template;
  6. use App\Models\Accounting\Estimate;
  7. use App\Models\Accounting\Invoice;
  8. use App\Models\Accounting\RecurringInvoice;
  9. use App\Models\Setting\DocumentDefault;
  10. use Illuminate\Http\Request;
  11. class DocumentPrintController extends Controller
  12. {
  13. protected array $documentModels = [
  14. 'invoice' => Invoice::class,
  15. 'recurring_invoice' => RecurringInvoice::class,
  16. 'estimate' => Estimate::class,
  17. ];
  18. public function show(Request $request, string $documentType, int $id)
  19. {
  20. if (! isset($this->documentModels[$documentType])) {
  21. abort(404, "Invalid document type: {$documentType}");
  22. }
  23. $modelClass = $this->documentModels[$documentType];
  24. $document = $modelClass::findOrFail($id);
  25. $documentTypeEnum = $document::documentType();
  26. if ($documentTypeEnum === DocumentType::RecurringInvoice) {
  27. $documentTypeEnum = DocumentType::Invoice;
  28. }
  29. $defaults = DocumentDefault::query()
  30. ->type($documentTypeEnum)
  31. ->first();
  32. $template = $defaults?->template ?? Template::Default;
  33. $document = DocumentDTO::fromModel($document);
  34. return view('print-document', [
  35. 'document' => $document,
  36. 'template' => $template,
  37. ]);
  38. }
  39. }