feat(paiements): ajout d'un système d'audit log pour les paiements avec filtres et correction d'accès agent
This commit is contained in:
@@ -3,6 +3,8 @@ package com.astalange.web.controller;
|
||||
import com.astalange.core.entity.Licence;
|
||||
import com.astalange.core.entity.ModePaiement;
|
||||
import com.astalange.core.entity.Paiement;
|
||||
import com.astalange.core.entity.AuditLogPaiement;
|
||||
import com.astalange.core.repository.AuditLogPaiementRepository;
|
||||
import com.astalange.core.repository.LicenceRepository;
|
||||
import com.astalange.core.repository.ModePaiementRepository;
|
||||
import com.astalange.core.repository.PaiementRepository;
|
||||
@@ -22,11 +24,13 @@ public class PaiementController {
|
||||
private final LicenceRepository licenceRepository;
|
||||
private final ModePaiementRepository modePaiementRepository;
|
||||
private final PaiementRepository paiementRepository;
|
||||
private final AuditLogPaiementRepository auditLogPaiementRepository;
|
||||
|
||||
public PaiementController(LicenceRepository licenceRepository, ModePaiementRepository modePaiementRepository, PaiementRepository paiementRepository) {
|
||||
public PaiementController(LicenceRepository licenceRepository, ModePaiementRepository modePaiementRepository, PaiementRepository paiementRepository, AuditLogPaiementRepository auditLogPaiementRepository) {
|
||||
this.licenceRepository = licenceRepository;
|
||||
this.modePaiementRepository = modePaiementRepository;
|
||||
this.paiementRepository = paiementRepository;
|
||||
this.auditLogPaiementRepository = auditLogPaiementRepository;
|
||||
}
|
||||
|
||||
@PostMapping("/licences/{id}/paiements")
|
||||
@@ -58,6 +62,15 @@ public class PaiementController {
|
||||
paiement.setGestionnaire(principal.getName());
|
||||
}
|
||||
paiementRepository.save(paiement);
|
||||
|
||||
AuditLogPaiement log = new AuditLogPaiement();
|
||||
log.setAction("CREATE");
|
||||
log.setUtilisateur(principal != null ? principal.getName() : "Système");
|
||||
log.setPaiementId(paiement.getId());
|
||||
log.setMontant(montant);
|
||||
log.setAdherentNomComplet(licence.getAdherent().getNom() + " " + licence.getAdherent().getPrenom());
|
||||
log.setDetails("Création d'un paiement de " + montant + "€ via " + mode.getNom() + " pour la licence " + (licence.getNumeroLicence() != null ? licence.getNumeroLicence() : "sans numéro"));
|
||||
auditLogPaiementRepository.save(log);
|
||||
}
|
||||
|
||||
return "redirect:/adherents/" + adherentId + "/edit";
|
||||
@@ -78,6 +91,9 @@ public class PaiementController {
|
||||
ModePaiement mode = modePaiementRepository.findById(modePaiementId)
|
||||
.orElseThrow(() -> new IllegalArgumentException("Invalid ModePaiement ID"));
|
||||
|
||||
BigDecimal ancienMontant = paiement.getMontant();
|
||||
String ancienMode = paiement.getModePaiement().getNom();
|
||||
|
||||
Licence licence = paiement.getLicence();
|
||||
|
||||
// Validation basique pour ne pas dépasser le montant total de la licence
|
||||
@@ -94,6 +110,15 @@ public class PaiementController {
|
||||
paiement.setGestionnaire(principal.getName());
|
||||
}
|
||||
paiementRepository.save(paiement);
|
||||
|
||||
AuditLogPaiement log = new AuditLogPaiement();
|
||||
log.setAction("UPDATE");
|
||||
log.setUtilisateur(principal != null ? principal.getName() : "Système");
|
||||
log.setPaiementId(paiement.getId());
|
||||
log.setMontant(montant);
|
||||
log.setAdherentNomComplet(licence.getAdherent().getNom() + " " + licence.getAdherent().getPrenom());
|
||||
log.setDetails("Modification du paiement: montant " + ancienMontant + "€ -> " + montant + "€, mode " + ancienMode + " -> " + mode.getNom());
|
||||
auditLogPaiementRepository.save(log);
|
||||
}
|
||||
|
||||
if (redirect != null && !redirect.isEmpty()) {
|
||||
@@ -105,12 +130,23 @@ public class PaiementController {
|
||||
@PostMapping("/paiements/{id}/delete")
|
||||
public String deletePaiement(
|
||||
@PathVariable Long id,
|
||||
@RequestParam(required = false) String redirect) {
|
||||
@RequestParam(required = false) String redirect,
|
||||
Principal principal) {
|
||||
|
||||
Paiement paiement = paiementRepository.findById(id)
|
||||
.orElseThrow(() -> new IllegalArgumentException("Invalid Paiement ID"));
|
||||
|
||||
Long adherentId = paiement.getLicence().getAdherent().getId();
|
||||
|
||||
AuditLogPaiement log = new AuditLogPaiement();
|
||||
log.setAction("DELETE");
|
||||
log.setUtilisateur(principal != null ? principal.getName() : "Système");
|
||||
log.setPaiementId(paiement.getId());
|
||||
log.setMontant(paiement.getMontant());
|
||||
log.setAdherentNomComplet(paiement.getLicence().getAdherent().getNom() + " " + paiement.getLicence().getAdherent().getPrenom());
|
||||
log.setDetails("Suppression du paiement de " + paiement.getMontant() + "€ via " + paiement.getModePaiement().getNom());
|
||||
auditLogPaiementRepository.save(log);
|
||||
|
||||
paiementRepository.delete(paiement);
|
||||
|
||||
if (redirect != null && !redirect.isEmpty()) {
|
||||
|
||||
Reference in New Issue
Block a user