From b9795f08f0a81830d96de0e95831f6327fbad911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=BCnrher?= Date: Sun, 6 Sep 2026 20:11:50 +0200 Subject: [PATCH] =?UTF-8?q?Besseres=20Handling=20R=C3=BCckerstattungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Event/Views/Partials/ParticipantData.vue | 4 +- .../Event/Views/Partials/ParticipantsList.vue | 16 +- .../AcceptRefund/AcceptRefundCommand.php | 54 +++- .../AcceptRefund/AcceptRefundRequest.php | 22 +- .../CreateRefundDocumentCommand.php | 72 ++++- .../CreateRefundDocumentRequest.php | 8 + .../ReleaseRefund/ReleaseRefundCommand.php | 31 +- .../ReleaseRefund/ReleaseRefundRequest.php | 13 + .../Controllers/AcceptRefundController.php | 2 + .../Controllers/RefundDocumentController.php | 6 +- .../Controllers/RefundPageController.php | 2 + .../Controllers/ReleaseRefundController.php | 3 + .../ParticipantRefundTokens.php | 3 +- .../ParticipantRefund/Views/RefundPage.vue | 274 +++++++++++++++--- .../RefundAcceptedMail.php | 7 +- app/Models/ParticipantRefund.php | 12 + app/Resources/ParticipantRefundResource.php | 3 + ..._add_refund_account_and_donation_texts.php | 50 ++++ .../participant-refund-template.sql | 10 +- .../emails/events/refund_accepted.blade.php | 57 +++- .../emails/events/refund_released.blade.php | 19 +- tests/Feature/ParticipantRefundTest.php | 127 ++++++++ tests/Feature/RefundDirectCaptureTest.php | 88 ++++++ tests/Feature/RefundDocumentTest.php | 64 +++- tests/Feature/RefundInvoiceTest.php | 83 +++++- tests/Feature/RefundRetentionTest.php | 1 + 26 files changed, 927 insertions(+), 104 deletions(-) create mode 100644 database/migrations/2026_09_10_140010_add_refund_account_and_donation_texts.php diff --git a/app/Domains/Event/Views/Partials/ParticipantData.vue b/app/Domains/Event/Views/Partials/ParticipantData.vue index 98eed73..eb5b6b6 100644 --- a/app/Domains/Event/Views/Partials/ParticipantData.vue +++ b/app/Domains/Event/Views/Partials/ParticipantData.vue @@ -386,7 +386,9 @@ function saveParticipant() { Bankverbindung des Teilis - bestätigt am {{ props.participant.refund.acceptedAt }} + bestätigt am {{ props.participant.refund.acceptedAt }} diff --git a/app/Domains/Event/Views/Partials/ParticipantsList.vue b/app/Domains/Event/Views/Partials/ParticipantsList.vue index 5783a92..6bf9f17 100644 --- a/app/Domains/Event/Views/Partials/ParticipantsList.vue +++ b/app/Domains/Event/Views/Partials/ParticipantsList.vue @@ -458,6 +458,8 @@ async function execRefund() { // Leer beim Weg über den Teili -- dann verschickt der Server nur den Link. accountOwner: refundForm.captureMode === 'management' ? refundForm.accountOwner : '', accountIban: refundForm.captureMode === 'management' ? refundForm.accountIban : '', + // Spende: kein Konto, trotzdem sofort eingereicht. + donation: refundForm.captureMode === 'donation', // Leer bei voller Erstattung -- dann gibt es nichts zu begründen. retentionReason: hasRetention.value ? refundForm.retentionReason : '', retentionReasonNote: hasRetention.value ? refundForm.retentionReasonNote : '', @@ -772,8 +774,8 @@ function mailToGroup(groupKey) {
+
+

+ Der Betrag wird nicht ausgezahlt, sondern als Spende gebucht. Die Erstattung wird sofort + eingereicht; der Teili erhält den Beleg per E-Mail. +

+