✨ 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:
@@ -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");
|
||||
|
||||
@@ -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
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user