| 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,
        ]);
    }
}
 |