fix error send mail devis +add cancel auto contrat no payment + fix error payment

This commit is contained in:
Serreau Jovann
2026-03-09 11:18:07 +01:00
parent 8bd179b949
commit 51a4f83833
4 changed files with 76 additions and 12 deletions

View File

@@ -49,17 +49,44 @@ class MailCommand extends Command
continue; continue;
} }
if(!$contrat->isAccompte()) { if (!$contrat->isAccompte()) {
$customer = $contrat->getCustomer(); $customer = $contrat->getCustomer();
if ($customer) { $diff = $contrat->getCreateAt() ? $contrat->getCreateAt()->diff($now)->days : 0;
$this->mailer->send(
$customer->getEmail(), // Annulation automatique après 3 jours sans acompte
$customer->getName() . " " . $customer->getSurname(), if ($diff >= 3) {
"[Ludikevent] Rappel : Acompte à régler pour votre réservation N°" . $contrat->getNumReservation(), if ($customer) {
"mails/task/contrat-noaccompte.twig", $this->mailer->send(
['contrat' => $contrat, 'customer' => $customer] $customer->getEmail(),
); $customer->getName() . " " . $customer->getSurname(),
$io->text("Rappel acompte envoyé pour le contrat : " . $contrat->getNumReservation()); "[Ludikevent] Réservation N°" . $contrat->getNumReservation() . " annulée - Acompte non reçu",
"mails/task/contrat-cancelled-noaccompte.twig",
['contrat' => $contrat, 'customer' => $customer]
);
}
foreach ($contrat->getContratsLines() as $line) {
$this->entityManager->remove($line);
}
foreach ($contrat->getContratsOptions() as $option) {
$this->entityManager->remove($option);
}
foreach ($contrat->getContratsPayments() as $payment) {
$this->entityManager->remove($payment);
}
$io->warning("Annulation du contrat N°" . $contrat->getNumReservation() . " (Acompte non payé après 3 jours)");
$this->entityManager->remove($contrat);
} else {
// Rappel simple
if ($customer) {
$this->mailer->send(
$customer->getEmail(),
$customer->getName() . " " . $customer->getSurname(),
"[Ludikevent] Rappel : Acompte à régler pour votre réservation N°" . $contrat->getNumReservation(),
"mails/task/contrat-noaccompte.twig",
['contrat' => $contrat, 'customer' => $customer]
);
$io->text("Rappel acompte envoyé pour le contrat : " . $contrat->getNumReservation());
}
} }
} }
} }

View File

@@ -236,9 +236,11 @@ class ContratsPayments
/** /**
* @param \DateTimeImmutable|null $updateAt * @param \DateTimeImmutable|null $updateAt
*/ */
public function setUpdateAt(?\DateTimeImmutable $updateAt): void public function setUpdateAt(?\DateTimeImmutable $updateAt): static
{ {
$this->updateAt = $updateAt; $this->updateAt = $updateAt;
return $this;
} }
/** /**

View File

@@ -102,7 +102,7 @@ class Mailer
'unsubscribe_url' => $unsubscribeUrl, 'unsubscribe_url' => $unsubscribeUrl,
'message_id' => $messageId // Ici on peut l'afficher pour info 'message_id' => $messageId // Ici on peut l'afficher pour info
], ],
'datas' => $data, 'datas' => $data,
]); ]);
$htmlContent = $this->convertMjmlToHtml($mjmlGenerator); $htmlContent = $this->convertMjmlToHtml($mjmlGenerator);

View File

@@ -0,0 +1,35 @@
{% extends 'mails/base.twig' %}
{% block content %}
<mj-section background-color="#ffffff" padding="40px 20px" border-radius="20px">
<mj-column>
<mj-text font-size="20px" font-weight="bold" color="#e74c3c" align="center">
Réservation annulée
</mj-text>
<mj-divider border-width="2px" border-color="#e74c3c" width="50px" />
<mj-text font-size="14px" color="#555555" padding-top="20px">
Bonjour {{ datas.customer.name }} {{ datas.customer.surname }},
</mj-text>
<mj-text font-size="14px" color="#555555" line-height="22px">
Nous sommes au regret de vous informer que votre réservation n°<strong>{{ datas.contrat.numReservation }}</strong> a été <strong>annulée automatiquement</strong> en raison du non-paiement de l'acompte dans le délai imparti de 3 jours.
</mj-text>
<mj-text font-size="14px" color="#555555" line-height="22px" padding-top="10px">
Les créneaux réservés ont été remis en disponibilité.
</mj-text>
<mj-divider border-color="#f4f4f4" padding-top="20px" />
<mj-text font-size="14px" color="#555555" line-height="22px" padding-top="10px">
Si vous souhaitez effectuer une nouvelle réservation ou si vous pensez qu'il s'agit d'une erreur, n'hésitez pas à nous contacter directement en répondant à cet email.
</mj-text>
<mj-text font-size="12px" color="#999999" padding-top="30px" align="center">
L'équipe Ludikevent
</mj-text>
</mj-column>
</mj-section>
{% endblock %}