smsNotificationService = $smsNotificationService; } public function createForDocument(Document $document): Invoice { $invoice = Invoice::create([ 'number' => 'pending', 'amount' => DocumentModalityEnum::from($document->modality)->price(), 'status' => InvoiceStatusEnum::Pending->value, 'document_id' => $document->id, 'user_id' => $document->requester_id, ]); $invoice->update(['number' => str_pad((string) $invoice->id, 5, '0', STR_PAD_LEFT)]); return $invoice; } public function markPaid(Invoice $invoice, InvoicePaymentMethodEnum $method): Invoice { $invoice->update([ 'status' => InvoiceStatusEnum::Paid->value, 'payment_method' => $method->value, 'paid_at' => now(), ]); $document = $invoice->document; if ($document && $document->status === DocumentStatusEnum::Registered) { $document->update([ 'status' => DocumentStatusEnum::InProgress->value, 'processing_deadline' => now()->addHours($document->priority->processingHours()), ]); } $this->smsNotificationService->paymentConfirmed($invoice); return $invoice; } }