feat(paiement): plafonner la saisie des paiements en incluant les paiements non remis
AS Talange CI/CD Pipeline / Build & Run Unit Tests (push) Successful in 5m31s
AS Talange CI/CD Pipeline / Deploy to Test Environment (push) Successful in 6m18s

This commit is contained in:
2026-08-08 00:23:27 +02:00
parent be1ec1c96a
commit 1e2bc23603
5 changed files with 32 additions and 13 deletions
@@ -160,6 +160,22 @@ public class Licence {
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
@Transient
public BigDecimal getSoldeRestantEngage() {
BigDecimal prixTotal = getPrixTotal();
if (paiements == null || paiements.isEmpty()) {
return prixTotal;
}
BigDecimal totalTousPaiements = paiements.stream()
.map(Paiement::getMontant)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal reste = prixTotal.subtract(totalTousPaiements);
return reste.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : reste;
}
// Getters and Setters
public Long getId() { return id; }
@@ -114,15 +114,18 @@ class LicenceReductionTest {
p1.setRemis(false); // Non remis (ex: Chèque Sport mairie en attente)
licence.addPaiement(p1);
// La somme de ce chèque non remis n'est PAS déduite => reste à payer = 100.00 €
// La somme de ce chèque non remis n'est PAS déduite du financier => reste à payer = 100.00 €
assertEquals(0, BigDecimal.ZERO.compareTo(licence.getSommePayee()));
assertEquals(0, new BigDecimal("100.00").compareTo(licence.getResteAPayer()));
// En revanche, le solde disponible engagé prend en compte TOUS les paiements => reste engagé = 60.00 €
assertEquals(0, new BigDecimal("60.00").compareTo(licence.getSoldeRestantEngage()));
// Passage à remis = true (remis/encaissé)
p1.setRemis(true);
// La somme est déduite => reste à payer = 60.00 €
// La somme est déduite du financier => reste à payer = 60.00 €
assertEquals(0, new BigDecimal("40.00").compareTo(licence.getSommePayee()));
assertEquals(0, new BigDecimal("60.00").compareTo(licence.getResteAPayer()));
assertEquals(0, new BigDecimal("60.00").compareTo(licence.getSoldeRestantEngage()));
}
}