diff --git a/as-talange-core/src/main/java/com/astalange/core/service/PaiementEmailService.java b/as-talange-core/src/main/java/com/astalange/core/service/PaiementEmailService.java index ed5c93e..bbaa07c 100644 --- a/as-talange-core/src/main/java/com/astalange/core/service/PaiementEmailService.java +++ b/as-talange-core/src/main/java/com/astalange/core/service/PaiementEmailService.java @@ -70,6 +70,11 @@ public class PaiementEmailService { return false; } + if (Boolean.FALSE.equals(paiement.getRemis())) { + log.info("Paiement non remis (remis=false) pour le paiement ID {}. L'e-mail de confirmation ne sera pas envoyé.", paiement.getId()); + return false; + } + Licence licence = paiement.getLicence(); String recipientEmail = licence.getAdherent() != null ? licence.getAdherent().getEmail() : null; log.info(">>> [PaiementEmailService] Adhérent: {} {}, Email: {}", diff --git a/as-talange-core/src/test/java/com/astalange/core/service/PaiementEmailServiceTest.java b/as-talange-core/src/test/java/com/astalange/core/service/PaiementEmailServiceTest.java index e7a4b6e..da33898 100644 --- a/as-talange-core/src/test/java/com/astalange/core/service/PaiementEmailServiceTest.java +++ b/as-talange-core/src/test/java/com/astalange/core/service/PaiementEmailServiceTest.java @@ -170,4 +170,23 @@ class PaiementEmailServiceTest { assertTrue(result); verify(mailSenderMock, timeout(2000).times(1)).send(any(MimeMessage.class)); } + + @Test + void testSendPaiementConfirmation_NonRemis() { + Adherent adherent = new Adherent(); + adherent.setNom("DUPONT"); + adherent.setPrenom("Jean"); + adherent.setEmail("jean.dupont@example.com"); + + Licence licence = new Licence(); + licence.setAdherent(adherent); + + Paiement paiement = new Paiement(); + paiement.setLicence(licence); + paiement.setMontant(new BigDecimal("50.00")); + paiement.setRemis(false); + + boolean result = paiementEmailService.sendPaiementConfirmation(paiement); + assertFalse(result, "Devrait retourner false et ne pas envoyer d'email si remis = false"); + } } diff --git a/as-talange-web/src/main/java/com/astalange/web/controller/PaiementController.java b/as-talange-web/src/main/java/com/astalange/web/controller/PaiementController.java index ddc24a9..b6c8fd9 100644 --- a/as-talange-web/src/main/java/com/astalange/web/controller/PaiementController.java +++ b/as-talange-web/src/main/java/com/astalange/web/controller/PaiementController.java @@ -124,6 +124,7 @@ public class PaiementController { BigDecimal ancienMontant = paiement.getMontant(); String ancienMode = paiement.getModePaiement().getNom(); + Boolean ancienRemis = paiement.getRemis(); Licence licence = paiement.getLicence(); @@ -154,6 +155,16 @@ public class PaiementController { auditLog.setAdherentNomComplet(licence.getAdherent().getNom() + " " + licence.getAdherent().getPrenom()); auditLog.setDetails("Modification du paiement: montant " + ancienMontant + "€ -> " + montant + "€, mode " + ancienMode + " -> " + mode.getNom() + ", remis -> " + (Boolean.TRUE.equals(remis) ? "Oui" : "Non")); auditLogPaiementRepository.save(auditLog); + + // Si le paiement passe de non remis (ex: Chèque Sport mairie) à remis (Oui), envoyer l'email de confirmation + if (Boolean.FALSE.equals(ancienRemis) && Boolean.TRUE.equals(remis)) { + try { + log.info("Appel de sendPaiementConfirmation depuis updatePaiement (passage de remis=false à remis=true) pour le paiement ID: {}", paiement.getId()); + paiementEmailService.sendPaiementConfirmation(paiement); + } catch (Exception e) { + log.error("Erreur lors de l'envoi de l'e-mail de confirmation après la remise du paiement ID {}: ", id, e); + } + } } if (redirect != null && !redirect.isEmpty()) {