feat: gestion des dotations equipements et historique des paiements

This commit is contained in:
2026-05-19 22:15:33 +02:00
parent ee85d38c43
commit 5e0b9ab02a
15 changed files with 435 additions and 7 deletions
@@ -0,0 +1,38 @@
package com.astalange.web.controller;
import com.astalange.core.entity.Dotation;
import com.astalange.core.repository.DotationRepository;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class DotationController {
private final DotationRepository dotationRepository;
public DotationController(DotationRepository dotationRepository) {
this.dotationRepository = dotationRepository;
}
@PostMapping("/dotations/{id}")
public String updateDotation(
@PathVariable Long id,
@RequestParam Long adherentId,
@RequestParam(required = false, defaultValue = "") String taille,
@RequestParam(required = false, defaultValue = "") String flocage,
@RequestParam(required = false) Boolean fourni) {
Dotation dotation = dotationRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("Invalid Dotation ID: " + id));
dotation.setTaille(taille);
dotation.setFlocage(flocage);
dotation.setFourni(fourni != null && fourni);
dotationRepository.save(dotation);
return "redirect:/adherents/" + adherentId + "/edit";
}
}
@@ -0,0 +1,55 @@
package com.astalange.web.controller;
import com.astalange.core.entity.Equipement;
import com.astalange.core.repository.EquipementRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/equipements")
public class EquipementController {
private final EquipementRepository equipementRepository;
public EquipementController(EquipementRepository equipementRepository) {
this.equipementRepository = equipementRepository;
}
@GetMapping
public String listEquipements(Model model) {
model.addAttribute("equipements", equipementRepository.findAll());
return "parametrage/equipements_list";
}
@GetMapping("/new")
public String showCreateForm(Model model) {
model.addAttribute("equipement", new Equipement());
return "parametrage/equipements_form";
}
@GetMapping("/{id}/edit")
public String showEditForm(@PathVariable Long id, Model model) {
Equipement equipement = equipementRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + id));
model.addAttribute("equipement", equipement);
return "parametrage/equipements_form";
}
@PostMapping
public String saveEquipement(@ModelAttribute("equipement") Equipement equipement) {
if (equipement.getObligatoire() == null) {
equipement.setObligatoire(false);
}
equipementRepository.save(equipement);
return "redirect:/equipements";
}
@PostMapping("/{id}/delete")
public String deleteEquipement(@PathVariable Long id) {
Equipement equipement = equipementRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + id));
equipementRepository.delete(equipement);
return "redirect:/equipements";
}
}
@@ -3,25 +3,39 @@ package com.astalange.web.controller;
import com.astalange.core.entity.Adherent;
import com.astalange.core.entity.Categorie;
import com.astalange.core.entity.Licence;
import com.astalange.core.entity.Dotation;
import com.astalange.core.entity.Equipement;
import com.astalange.core.repository.AdherentRepository;
import com.astalange.core.repository.CategorieRepository;
import com.astalange.core.repository.LicenceRepository;
import com.astalange.core.repository.DotationRepository;
import com.astalange.core.repository.EquipementRepository;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@Controller
public class LicenceController {
private final AdherentRepository adherentRepository;
private final CategorieRepository categorieRepository;
private final LicenceRepository licenceRepository;
private final EquipementRepository equipementRepository;
private final DotationRepository dotationRepository;
public LicenceController(AdherentRepository adherentRepository, CategorieRepository categorieRepository, LicenceRepository licenceRepository) {
public LicenceController(AdherentRepository adherentRepository,
CategorieRepository categorieRepository,
LicenceRepository licenceRepository,
EquipementRepository equipementRepository,
DotationRepository dotationRepository) {
this.adherentRepository = adherentRepository;
this.categorieRepository = categorieRepository;
this.licenceRepository = licenceRepository;
this.equipementRepository = equipementRepository;
this.dotationRepository = dotationRepository;
}
@PostMapping("/adherents/{id}/licences")
@@ -29,7 +43,8 @@ public class LicenceController {
@PathVariable Long id,
@RequestParam Long categorieId,
@RequestParam String saison,
@RequestParam String etat) {
@RequestParam String etat,
@RequestParam(required = false) String numeroLicence) {
Adherent adherent = adherentRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("Invalid Adherent ID"));
@@ -41,8 +56,21 @@ public class LicenceController {
licence.setCategorie(categorie);
licence.setSaison(saison);
licence.setEtat(etat);
licence.setNumeroLicence(numeroLicence);
licenceRepository.save(licence);
licence = licenceRepository.save(licence);
// Auto-initialize dotations for all configured equipments
List<Equipement> equipements = equipementRepository.findAll();
for (Equipement eq : equipements) {
Dotation dotation = new Dotation();
dotation.setLicence(licence);
dotation.setEquipement(eq);
dotation.setTaille("");
dotation.setFlocage("");
dotation.setFourni(false);
dotationRepository.save(dotation);
}
return "redirect:/adherents/" + id + "/edit";
}
@@ -0,0 +1,23 @@
package com.astalange.web.controller;
import com.astalange.core.repository.PaiementRepository;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class PaiementsController {
private final PaiementRepository paiementRepository;
public PaiementsController(PaiementRepository paiementRepository) {
this.paiementRepository = paiementRepository;
}
@GetMapping("/paiements")
public String listPaiements(Model model) {
model.addAttribute("paiements", paiementRepository.findAll(Sort.by(Sort.Direction.DESC, "datePaiement", "id")));
return "paiements/list";
}
}