63 lines
2.0 KiB
PHP
63 lines
2.0 KiB
PHP
<?php
|
||
|
||
namespace App\Mail;
|
||
|
||
use App\Mail\Concerns\SendsFromMailbox;
|
||
use App\Services\Mail\MailPurpose;
|
||
use Illuminate\Bus\Queueable;
|
||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||
use Illuminate\Mail\Mailable;
|
||
use Illuminate\Mail\Mailables\Content;
|
||
use Illuminate\Mail\Mailables\Envelope;
|
||
use Illuminate\Queue\SerializesModels;
|
||
|
||
/**
|
||
* Der Hinweis und die drei Mahnungen — eine Klasse, vier Texte.
|
||
*
|
||
* Vier Klassen wären vier Kopien desselben Rumpfs: derselbe Betrag, dieselbe
|
||
* Aufstellung, derselbe Knopf. Was sich zwischen den Stufen ändert, ist die
|
||
* SPRACHE, und die gehört ohnehin in die Sprachdateien — `dunning_mail.subject_0`
|
||
* bis `_3`. Ein Kopierfehler zwischen vier Klassen wäre eine Mahnung mit dem
|
||
* Text der Vorstufe, und niemand merkt es, bevor sie draussen ist.
|
||
*
|
||
* **Stufe 0 ist keine Mahnung.** Kein Betreff mit „Mahnung", keine Gebühr, keine
|
||
* Frist im Rechtssinn — nur die Nachricht, dass die Abbuchung nicht geklappt
|
||
* hat. Eine abgelaufene Karte ist keine Zahlungsverweigerung.
|
||
*/
|
||
class DunningNoticeMail extends Mailable implements ShouldQueue
|
||
{
|
||
use Queueable, SendsFromMailbox, SerializesModels;
|
||
|
||
/**
|
||
* @param int $level 0 = Hinweis, 1–3 = Mahnstufe
|
||
* @param int $amountCents der offene Rechnungsbetrag
|
||
* @param int $feeCents die Mahnspesen DIESER Stufe, 0 wenn keine
|
||
* @param int $feeTotalCents alle bisher angefallenen Mahnspesen
|
||
*/
|
||
public function __construct(
|
||
public string $name,
|
||
public int $level,
|
||
public int $amountCents,
|
||
public int $feeCents,
|
||
public int $feeTotalCents,
|
||
public string $currency,
|
||
public string $billingUrl,
|
||
public ?string $suspendOn = null,
|
||
) {
|
||
$this->mailer('cp_'.MailPurpose::BILLING);
|
||
}
|
||
|
||
public function envelope(): Envelope
|
||
{
|
||
return $this->mailboxEnvelope(
|
||
MailPurpose::BILLING,
|
||
__('dunning_mail.subject_'.$this->level),
|
||
);
|
||
}
|
||
|
||
public function content(): Content
|
||
{
|
||
return new Content(view: 'mail.dunning-notice');
|
||
}
|
||
}
|