From 6f8be58943aa518884064db9d9405f6f4666a8d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=BCnther?= Date: Sat, 25 Apr 2026 13:28:23 +0200 Subject: [PATCH] Notification after invoice state --- .../ChangeStatus/ChangeStatusCommand.php | 25 +++++- .../invoiceDetails/InvoiceDetails.vue | 2 +- .../Views/Partials/newInvoice/refund-data.vue | 8 +- .../InvoiceMailsApprovedInvoiceMail.php | 79 ++++++++++++++++ .../InvoiceMailsDeniedInvoiceMail.php | 81 +++++++++++++++++ .../InvoiceMailsReopenedInvoiceMail.php | 81 +++++++++++++++++ app/Models/CostUnit.php | 5 ++ app/Resources/InvoiceResource.php | 2 +- .../invoices/changed_invoice_state.blade.php | 90 +++++++++++++++++++ 9 files changed, 367 insertions(+), 6 deletions(-) create mode 100644 app/Mail/InvoiceMails/InvoiceMailsApprovedInvoiceMail.php create mode 100644 app/Mail/InvoiceMails/InvoiceMailsDeniedInvoiceMail.php create mode 100644 app/Mail/InvoiceMails/InvoiceMailsReopenedInvoiceMail.php create mode 100644 resources/views/emails/invoices/changed_invoice_state.blade.php diff --git a/app/Domains/Invoice/Actions/ChangeStatus/ChangeStatusCommand.php b/app/Domains/Invoice/Actions/ChangeStatus/ChangeStatusCommand.php index 01848b0..d7f59b7 100644 --- a/app/Domains/Invoice/Actions/ChangeStatus/ChangeStatusCommand.php +++ b/app/Domains/Invoice/Actions/ChangeStatus/ChangeStatusCommand.php @@ -3,6 +3,11 @@ namespace App\Domains\Invoice\Actions\ChangeStatus; use App\Enumerations\InvoiceStatus; +use App\Mail\InvoiceMails\InvoiceMailsApprovedInvoiceMail; +use App\Mail\InvoiceMails\InvoiceMailsDeniedInvoiceMail; +use App\Mail\InvoiceMails\InvoiceMailsReopenedInvoiceMail; +use App\Mail\ParticipantCocMails\ParticipantCocCompleteMail; +use Illuminate\Support\Facades\Mail; class ChangeStatusCommand { private ChangeStatusRequest $request; @@ -19,6 +24,13 @@ class ChangeStatusCommand { $this->request->invoice->status = InvoiceStatus::INVOICE_STATUS_APPROVED; $this->request->invoice->approved_by = auth()->user()->id; $this->request->invoice->approved_at = now(); + + if ($this->request->invoice->contact_email !== null) { + Mail::to($this->request->invoice->contact_email)->send(new InvoiceMailsApprovedInvoiceMail( + invoice: $this->request->invoice, + costUnit: $this->request->invoice->costUnit()->first(), + )); + } break; case InvoiceStatus::INVOICE_STATUS_DENIED: @@ -26,6 +38,12 @@ class ChangeStatusCommand { $this->request->invoice->denied_by = auth()->user()->id; $this->request->invoice->denied_at = now(); $this->request->invoice->denied_reason = $this->request->comment; + if ($this->request->invoice->contact_email !== null) { + Mail::to($this->request->invoice->contact_email)->send(new InvoiceMailsDeniedInvoiceMail( + invoice: $this->request->invoice, + costUnit: $this->request->invoice->costUnit()->first(), + )); + } break; case InvoiceStatus::INVOICE_STATUS_NEW: $this->request->invoice->status = InvoiceStatus::INVOICE_STATUS_NEW; @@ -35,6 +53,12 @@ class ChangeStatusCommand { $this->request->invoice->denied_at = null; $this->request->invoice->comment = $this->request->invoice->denied_reason; $this->request->invoice->denied_reason = null; + if ($this->request->invoice->contact_email !== null) { + Mail::to($this->request->invoice->contact_email)->send(new InvoiceMailsReopenedInvoiceMail( + invoice: $this->request->invoice, + costUnit: $this->request->invoice->costUnit()->first(), + )); + } break; case InvoiceStatus::INVOICE_STATUS_DELETED: $this->request->invoice->status = InvoiceStatus::INVOICE_STATUS_DELETED; @@ -49,7 +73,6 @@ class ChangeStatusCommand { $response->success = true; } - return $response; } } diff --git a/app/Domains/Invoice/Views/Partials/invoiceDetails/InvoiceDetails.vue b/app/Domains/Invoice/Views/Partials/invoiceDetails/InvoiceDetails.vue index 29fc008..4573d6c 100644 --- a/app/Domains/Invoice/Views/Partials/invoiceDetails/InvoiceDetails.vue +++ b/app/Domains/Invoice/Views/Partials/invoiceDetails/InvoiceDetails.vue @@ -177,7 +177,7 @@ async function reopenInvoice() { Begründung: