request->refund; if ($refund === null || !$refund->isPending()) { $response->message = $refund?->isAccepted() === true ? 'Deine Angaben liegen uns bereits vor.' : self::NO_OPEN_REFUND; return $response; } $owner = trim($this->request->accountOwner); $iban = Iban::normalize($this->request->accountIban); // Serverseitig und nicht nur im Formular: die Erklärung ist der einzige Grund, warum der Beleg // als Eigenbeleg etwas wert ist. Ließe sie sich mit einem direkten Aufruf übergehen, stünde auf // dem PDF eine Zusicherung, die niemand abgegeben hat. if (!$this->request->declarationAccepted) { $response->errorTypes['declaration'] = 'Bitte bestätige die Erklärung, damit wir erstatten können.'; } if ($owner === '') { $response->errorTypes['accountOwner'] = 'Bitte gib an, wem das Konto gehört.'; } if ($iban === '') { $response->errorTypes['accountIban'] = 'Bitte gib die IBAN des Kontos ein.'; } elseif (!Iban::isValid($iban)) { $response->errorTypes['accountIban'] = 'Diese IBAN stimmt nicht. Bitte prüfe deine Eingabe.'; } if ($response->errorTypes !== []) { $response->message = 'Bitte prüfe deine Angaben.'; return $response; } $refund->account_owner = $owner; $refund->account_iban = $iban; $refund->status = ParticipantRefund::STATUS_ACCEPTED; $refund->accepted_at = now(); $refund->save(); $this->notify($refund); $response->success = true; $response->message = 'Vielen Dank. Deine Angaben liegen uns vor.'; return $response; } /** * Bestätigung mit dem Beleg im Anhang, an Teili und Kontaktperson. * * Scheitert die Belegerzeugung, geht die Mail trotzdem raus -- der Vorgang ist gespeichert, und die * Aktionsleitung kann den Beleg jederzeit erneut abrufen. Ein Fehler hier darf nicht dazu führen, * dass der Teili gar nichts hört. */ private function notify(ParticipantRefund $refund): void { $document = new CreateRefundDocumentCommand(new CreateRefundDocumentRequest($refund))->execute(); $pdf = $document->success ? $document->pdfContent : null; $filename = $document->success ? $document->filename : null; $participant = $refund->participant; Mail::to($participant->email_1)->send(new RefundAcceptedMail( participant: $participant, refund: $refund, pdfContent: $pdf, pdfFilename: $filename, )); if ($participant->email_2 !== null) { Mail::to($participant->email_2)->send(new RefundAcceptedMail( participant: $participant, refund: $refund, pdfContent: $pdf, pdfFilename: $filename, )); } } }