feat(MailCommand): Ignore les rappels d'acompte pour les paiements Chorus

🐛 fix(ContratsController): Utilise $request->query->get pour l'ID du devis dans add()
This commit is contained in:
Serreau Jovann
2026-02-06 10:47:28 +01:00
parent 2fbe64c6d9
commit a6e5d5f4a8
2 changed files with 40 additions and 17 deletions

View File

@@ -44,6 +44,11 @@ class MailCommand extends Command
$io->title('Traitement des contrats en attente d\'acompte');
$contratsNoAccompte = $this->entityManager->getRepository(Contrats::class)->findBy(['isSigned' => true]);
foreach ($contratsNoAccompte as $contrat) {
// Skip reminder if payment method is Chorus
if ($contrat->getDevis() && str_contains((string)$contrat->getDevis()->getPaymentMethod(), 'Chorus')) {
continue;
}
if(!$contrat->isAccompte()) {
$customer = $contrat->getCustomer();
if ($customer) {
@@ -59,22 +64,6 @@ class MailCommand extends Command
}
}
// --- 4. CONTRAT EN ATTENTE DE CAUTION (J-7) ---
$io->title('Traitement des cautions manquantes');
$contratsNoCaution = $this->entityManager->getRepository(Contrats::class)->findBy(['isSigned' => true]);
foreach ($contratsNoCaution as $contrat) {
if($contrat->isAccompte() && !$contrat->isCaution()) {
$customer = $contrat->getCustomer();
$this->mailer->send(
$customer->getEmail(),
$customer->getName(),
"[Ludikevent] Dépôt de garantie requis - Réservation N°" . $contrat->getNumReservation(),
"mails/task/caution-missing.twig",
['contrat' => $contrat, 'customer' => $customer]
);
}
}
// --- 5 & 6. RAPPELS LOGISTIQUES (J-3 et J-1) ---
$this->sendEventReminders($io, 3, "Préparation de votre événement J-3");
$this->sendEventReminders($io, 1, "À demain ! Dernières infos pour votre événement");

View File

@@ -112,7 +112,7 @@ class ContratsController extends AbstractController
#[Route('/add', name: 'app_crm_contrats_create', options: ['sitemap' => false], methods: ['GET', 'POST'])]
public function add(Request $request, DevisRepository $devisRepository): Response
{
$devis = $devisRepository->find($request->get('idDevis', 0));
$devis = $devisRepository->find($request->query->get('idDevis', 0));
$contrat = new Contrats();
// Pré-remplissage depuis le devis
@@ -127,9 +127,43 @@ class ContratsController extends AbstractController
return $this->handleCreateContract($contrat, $request);
}
// Prepare lines and options for the view
$lines = [];
if ($devis instanceof Devis) {
foreach ($devis->getDevisLines() as $line) {
$lines[] = [
'id' => '', // New ID for contract line
'name' => $line->getProduct(),
'priceHt1Day' => $line->getPriceHt(),
'priceHtSupDay' => $line->getPriceHtSup(),
'caution' => 0 // Default caution
];
}
}
if (empty($lines)) {
$lines[] = ['id' => '', 'name' => '', 'priceHt1Day' => '', 'priceHtSupDay' => '', 'caution' => ''];
}
$options = [];
if ($devis instanceof Devis) {
foreach ($devis->getDevisOptions() as $opt) {
$options[] = [
'id' => '',
'name' => $opt->getOption(),
'details' => $opt->getDetails(),
'priceHt' => $opt->getPriceHt()
];
}
}
if (empty($options)) {
$options[] = ['id' => '', 'name' => '', 'details' => '', 'priceHt' => ''];
}
return $this->render('dashboard/contrats/add.twig', [
'devis' => $devis,
'form' => $form->createView(),
'lines' => $lines,
'options' => $options
]);
}