diff --git a/app/Invoice/InvoiceSettings.php b/app/Invoice/InvoiceSettings.php index 9971da78..92197ee9 100644 --- a/app/Invoice/InvoiceSettings.php +++ b/app/Invoice/InvoiceSettings.php @@ -18,6 +18,7 @@ class InvoiceSettings extends LocalSettings implements Storeable public ?string $zip; public ?string $iban; public ?string $bic; + public ?string $replyTo; public ?int $rememberWeeks; public static function group(): string @@ -43,6 +44,7 @@ class InvoiceSettings extends LocalSettings implements Storeable 'iban' => $this->iban, 'bic' => $this->bic, 'rememberWeeks' => $this->rememberWeeks, + 'replyTo' => $this->replyTo, ] ]; } @@ -64,6 +66,7 @@ class InvoiceSettings extends LocalSettings implements Storeable 'iban' => '', 'bic' => '', 'rememberWeeks' => '', + 'replyTo' => '', ]; } diff --git a/app/Invoice/Mails/BillMail.php b/app/Invoice/Mails/BillMail.php index 541c1970..613ffee5 100644 --- a/app/Invoice/Mails/BillMail.php +++ b/app/Invoice/Mails/BillMail.php @@ -2,6 +2,7 @@ namespace App\Invoice\Mails; +use App\Invoice\InvoiceSettings; use App\Invoice\Models\Invoice; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; @@ -12,6 +13,8 @@ class BillMail extends Mailable use Queueable; use SerializesModels; + public InvoiceSettings $settings; + /** * Create a new message instance. * @@ -19,6 +22,7 @@ class BillMail extends Mailable */ public function __construct(public Invoice $invoice, public string $filename) { + $this->settings = app(InvoiceSettings::class); } /** @@ -30,7 +34,7 @@ class BillMail extends Mailable { return $this->markdown('mail.invoice.bill') ->attach($this->filename) - ->replyTo('kasse@stamm-silva.de') - ->subject('Rechnung | DPSG Stamm Silva'); + ->when($this->settings->replyTo, fn ($mail) => $mail->replyTo($this->settings->replyTo)) + ->subject('Rechnung | '.$this->settings->from_long); } } diff --git a/app/Invoice/Mails/RememberMail.php b/app/Invoice/Mails/RememberMail.php index 0231624f..8a7660d7 100644 --- a/app/Invoice/Mails/RememberMail.php +++ b/app/Invoice/Mails/RememberMail.php @@ -2,6 +2,7 @@ namespace App\Invoice\Mails; +use App\Invoice\InvoiceSettings; use App\Invoice\Models\Invoice; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; @@ -12,6 +13,8 @@ class RememberMail extends Mailable use Queueable; use SerializesModels; + public InvoiceSettings $settings; + /** * Create a new message instance. * @@ -19,6 +22,7 @@ class RememberMail extends Mailable */ public function __construct(public Invoice $invoice, public string $filename) { + $this->settings = app(InvoiceSettings::class); } /** @@ -30,7 +34,7 @@ class RememberMail extends Mailable { return $this->markdown('mail.invoice.remember') ->attach($this->filename) - ->replyTo('kasse@stamm-silva.de') - ->subject('Zahlungserinnerung | DPSG Stamm Silva'); + ->when($this->settings->replyTo, fn ($mail) => $mail->replyTo($this->settings->replyTo)) + ->subject('Zahlungserinnerung | '.$this->settings->from_long); } } diff --git a/database/settings/202511-07_create_replyTo_invoice_mail_settings.php b/database/settings/202511-07_create_replyTo_invoice_mail_settings.php new file mode 100644 index 00000000..0df50757 --- /dev/null +++ b/database/settings/202511-07_create_replyTo_invoice_mail_settings.php @@ -0,0 +1,11 @@ +migrator->add('bill.replyTo', ''); + } +}; diff --git a/resources/js/views/setting/Bill.vue b/resources/js/views/setting/Bill.vue index b6b71e1b..427c818e 100644 --- a/resources/js/views/setting/Bill.vue +++ b/resources/js/views/setting/Bill.vue @@ -18,6 +18,7 @@ + diff --git a/resources/views/mail/invoice/bill.blade.php b/resources/views/mail/invoice/bill.blade.php index 964ac500..35278c7b 100644 --- a/resources/views/mail/invoice/bill.blade.php +++ b/resources/views/mail/invoice/bill.blade.php @@ -1,7 +1,7 @@ @component('mail::message') # {{ $invoice->greeting }}, -Im Anhang findet ihr die aktuelle Rechnung des Stammes Silva für das laufende Jahr. Bitte begleicht diese bis zum angegebenen Datum. +Im Anhang findet ihr die aktuelle Rechnung an {{$settings->from}} für das laufende Jahr. Bitte begleicht diese bis zum angegebenen Datum. @component('mail::subcopy') diff --git a/resources/views/mail/invoice/remember.blade.php b/resources/views/mail/invoice/remember.blade.php index a7951a40..94bba5b5 100644 --- a/resources/views/mail/invoice/remember.blade.php +++ b/resources/views/mail/invoice/remember.blade.php @@ -1,7 +1,7 @@ @component('mail::message') # {{ $invoice->greeting }}, -Hiermit möchten wir euch an die noch ausstehenden Mitgliedsbeiträge des Stammes Silva für das laufende Jahr erinnern. Bitte begleicht diese bis zum angegebenen Datum. +Hiermit möchten wir euch an die noch ausstehenden Mitgliedsbeiträge an {{$settings->from}} für das laufende Jahr erinnern. Bitte begleicht diese bis zum angegebenen Datum. @component('mail::subcopy') diff --git a/tests/Feature/Invoice/InvoiceSendActionTest.php b/tests/Feature/Invoice/InvoiceSendActionTest.php index 83b8dc66..7a6a48f8 100644 --- a/tests/Feature/Invoice/InvoiceSendActionTest.php +++ b/tests/Feature/Invoice/InvoiceSendActionTest.php @@ -48,6 +48,7 @@ class InvoiceSendActionTest extends TestCase Tex::spy(); Storage::fake('temp'); $this->withoutExceptionHandling()->login()->loginNami(); + app(InvoiceSettings::class)->fill(['from_long' => 'Stammname', 'replyTo' => 'reply@mail.com'])->save(); $invoice = Invoice::factory() ->to(ReceiverRequestFactory::new()->name('Familie Muster')) ->has(InvoicePosition::factory()->withMember(), 'positions') @@ -57,7 +58,13 @@ class InvoiceSendActionTest extends TestCase InvoiceSendAction::run(); - Mail::assertSent(RememberMail::class, fn ($mail) => $mail->build() && $mail->hasTo('max@muster.de', 'Familie Muster') && Storage::disk('temp')->path('zahlungserinnerung-fur-familie-muster.pdf') === $mail->filename && Storage::disk('temp')->exists('zahlungserinnerung-fur-familie-muster.pdf')); + Mail::assertSent(RememberMail::class, fn ($mail) => $mail->build() + && $mail->hasTo('max@muster.de', 'Familie Muster') + && $mail->hasSubject('Zahlungserinnerung | Stammname') + && Storage::disk('temp')->path('zahlungserinnerung-fur-familie-muster.pdf') === $mail->filename + && Storage::disk('temp')->exists('zahlungserinnerung-fur-familie-muster.pdf') + && $mail->hasReplyTo('reply@mail.com') + ); Tex::assertCompiled(RememberDocument::class, fn ($document) => 'Familie Muster' === $document->toName); $this->assertEquals(now()->format('Y-m-d'), $invoice->fresh()->last_remembered_at->format('Y-m-d')); } diff --git a/tests/Feature/Invoice/SettingTest.php b/tests/Feature/Invoice/SettingTest.php index e4ce8e3c..98aceffa 100644 --- a/tests/Feature/Invoice/SettingTest.php +++ b/tests/Feature/Invoice/SettingTest.php @@ -33,7 +33,8 @@ class SettingTest extends TestCase 'zip' => '12345', 'iban' => 'DE05', 'bic' => 'SOLSDE', - 'rememberWeeks' => 6 + 'rememberWeeks' => 6, + 'replyTo' => 'reply@example.com', ])->save(); $this->get(route('setting.data', ['settingGroup' => 'bill'])) @@ -49,7 +50,8 @@ class SettingTest extends TestCase ->assertInertiaPath('data.zip', '12345') ->assertInertiaPath('data.iban', 'DE05') ->assertInertiaPath('data.bic', 'SOLSDE') - ->assertInertiaPath('data.rememberWeeks', 6); + ->assertInertiaPath('data.rememberWeeks', 6) + ->assertInertiaPath('data.replyTo', 'reply@example.com'); } public function testItReturnsTabs(): void @@ -78,7 +80,8 @@ class SettingTest extends TestCase 'zip' => '12345', 'iban' => 'DE05', 'bic' => 'SOLSDE', - 'rememberWeeks' => 10 + 'rememberWeeks' => 10, + 'replyTo' => 'reply@example.com2', ]); $response->assertRedirect('/setting/bill'); @@ -86,6 +89,7 @@ class SettingTest extends TestCase $this->assertEquals('DPSG Stamm Muster', $settings->from_long); $this->assertEquals('DE05', $settings->iban); $this->assertEquals('SOLSDE', $settings->bic); + $this->assertEquals('reply@example.com2', $settings->replyTo); $this->assertEquals(10, $settings->rememberWeeks); } }