147 lines
4.8 KiB
PHP
147 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace App\Mail\ParticipantParticipationMails;
|
|
|
|
use App\Domains\Event\Actions\GenerateIcal\GenerateIcalCommand;
|
|
use App\Domains\Event\Actions\GenerateIcal\GenerateIcalRequest;
|
|
use App\Domains\Event\Actions\GenerateIcal\GenerateIcalResponse;
|
|
use App\Domains\Event\Actions\GenerateIcalForDeadline\GenerateIcalForDeadlineCommand;
|
|
use App\Domains\Event\Actions\GenerateIcalForDeadline\GenerateIcalForDeadlineRequest;
|
|
use App\Domains\Event\Actions\GenerateIcalForDeadline\GenerateIcalForDeadlineResponse;
|
|
use App\Models\EventParticipant;
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Mail\Mailable;
|
|
use Illuminate\Mail\Mailables\Attachment;
|
|
use Illuminate\Mail\Mailables\Content;
|
|
use Illuminate\Mail\Mailables\Envelope;
|
|
use Illuminate\Queue\SerializesModels;
|
|
|
|
class EventSignUpSuccessfullMail extends Mailable
|
|
{
|
|
use Queueable, SerializesModels;
|
|
|
|
private ?GenerateIcalResponse $participationIcal = null;
|
|
private ?GenerateIcalForDeadlineResponse $deadlineIcal = null;
|
|
|
|
|
|
/**
|
|
* Create a new message instance.
|
|
*/
|
|
public function __construct(
|
|
private EventParticipant $participant,
|
|
)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Get the message envelope.
|
|
*/
|
|
public function envelope(): Envelope
|
|
{
|
|
$participant = $this->participant->toResource()->toArray(new Request());
|
|
|
|
$subject = sprintf(
|
|
$participant['needs_payment'] ? 'Teilnahme- & Zahlungsinformationen %1$s %2$s' : 'Anmeldebestätigung %1$s %2$s',
|
|
'für die Veranstaltung',
|
|
$this->participant->event()->first()->name
|
|
);
|
|
|
|
|
|
return new Envelope(
|
|
subject: $subject,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get the message content definition.
|
|
*/
|
|
public function content(): Content
|
|
{
|
|
$event = $this->participant->event()->first()->toResource()->toArray(new Request());
|
|
$participant = $this->participant->toResource()->toArray(new Request());
|
|
|
|
$girocodeProvider = new \App\Providers\GiroCodeProvider(
|
|
$event['accountOwner'],
|
|
$event['accountIban'],
|
|
(float) $participant['amount_left_value'],
|
|
$participant['payment_purpose']
|
|
);
|
|
$girocodeBinary = (string)$girocodeProvider->create();
|
|
|
|
$participationIcal = $this->getParticipationIcal();
|
|
$deadlineIcal = $this->getDeadlineIcal();
|
|
|
|
|
|
return new Content(
|
|
view: 'emails.events.signup_complete',
|
|
with: [
|
|
'participationType' => $participant['participationType'],
|
|
'name' => $participant['nicename'],
|
|
'eventTitle' => $event['name'],
|
|
'eventEmail' => $event['email'],
|
|
'arrival' => $participant['arrival'],
|
|
'departure' => $participant['departure'],
|
|
'amount' => $participant['amount_left_string'],
|
|
'paymentFinalDate' => $event['registrationFinalEnd']['formatted'],
|
|
'paymentRequired' => $participant['needs_payment'],
|
|
'accountOwner' => $event['accountOwner'],
|
|
'accountIban' => $event['accountIban'],
|
|
'paymentPurpose' => $participant['payment_purpose'],
|
|
'girocodeBinary' => $girocodeBinary,
|
|
'efzStatus' => $participant['efz_status'],
|
|
'participationIcalFilename' => $participationIcal->filename,
|
|
'deadlineIcalFilename' => $deadlineIcal->filename,
|
|
],
|
|
);
|
|
}
|
|
|
|
|
|
public function attachments(): array
|
|
{
|
|
$attachments = [
|
|
Attachment::fromData(
|
|
fn () => $this->getParticipationIcal()->icalContent,
|
|
$this->getParticipationIcal()->filename
|
|
)->withMime('text/calendar'),
|
|
];
|
|
|
|
$participant = $this->participant->toResource()->toArray(new Request());
|
|
|
|
|
|
if ($participant['needs_payment']) {
|
|
/*$attachments[] = [
|
|
Attachment::fromData(
|
|
fn () => $this->getDeadlineIcal()->icalContent,
|
|
$this->getDeadlineIcal()->filename
|
|
)->withMime('text/calendar'),
|
|
];*/
|
|
}
|
|
|
|
return $attachments;
|
|
}
|
|
|
|
private function getDeadlineIcal(): GenerateIcalForDeadlineResponse
|
|
{
|
|
if ($this->deadlineIcal === null) {
|
|
$this->deadlineIcal = (new GenerateIcalForDeadlineCommand(
|
|
new GenerateIcalForDeadlineRequest($this->participant->event()->first())
|
|
))->execute();
|
|
}
|
|
|
|
return $this->deadlineIcal;
|
|
}
|
|
|
|
private function getParticipationIcal(): GenerateIcalResponse
|
|
{
|
|
if ($this->participationIcal === null) {
|
|
$this->participationIcal = (new GenerateIcalCommand(
|
|
new GenerateIcalRequest($this->participant)
|
|
))->execute();
|
|
}
|
|
|
|
return $this->participationIcal;
|
|
}
|
|
}
|