Files
as-talange/as-talange-web/src/main/java/com/astalange/web/controller/EquipementController.java
T

116 lines
5.1 KiB
Java

package com.astalange.web.controller;
import com.astalange.core.entity.Equipement;
import com.astalange.core.entity.Saison;
import com.astalange.core.repository.EquipementRepository;
import com.astalange.core.repository.SaisonRepository;
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;
private final SaisonRepository saisonRepository;
public EquipementController(EquipementRepository equipementRepository, SaisonRepository saisonRepository) {
this.equipementRepository = equipementRepository;
this.saisonRepository = saisonRepository;
}
@GetMapping
public String listEquipements(Model model) {
Saison activeSaison = saisonRepository.findByEstActiveTrue().orElse(null);
if (activeSaison != null) {
model.addAttribute("equipements", equipementRepository.findBySaison(activeSaison));
} else {
model.addAttribute("equipements", java.util.List.of());
}
return "parametrage/equipements_list";
}
@GetMapping("/new")
public String showCreateForm(Model model) {
if (!model.containsAttribute("equipement")) {
model.addAttribute("equipement", new Equipement());
}
return "parametrage/equipements_form";
}
@GetMapping("/{id}/edit")
public String showEditForm(@PathVariable Long id, Model model) {
if (!model.containsAttribute("equipement")) {
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,
org.springframework.web.servlet.mvc.support.RedirectAttributes redirectAttributes) {
Saison activeSaison;
if (equipement.getId() == null) {
activeSaison = saisonRepository.findByEstActiveTrue()
.orElseThrow(() -> new IllegalStateException("Aucune saison active trouvée"));
equipement.setSaison(activeSaison);
} else {
Equipement existing = equipementRepository.findById(equipement.getId())
.orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + equipement.getId()));
equipement.setSaison(existing.getSaison());
activeSaison = existing.getSaison();
}
if (activeSaison != null) {
for (Equipement e : equipementRepository.findBySaison(activeSaison)) {
if (e.getNom().equalsIgnoreCase(equipement.getNom()) && (equipement.getId() == null || !e.getId().equals(equipement.getId()))) {
redirectAttributes.addFlashAttribute("errorMessage", "Erreur : L'équipement '" + equipement.getNom() + "' existe déjà pour cette saison.");
redirectAttributes.addFlashAttribute("equipement", equipement);
return equipement.getId() == null ? "redirect:/equipements/new" : "redirect:/equipements/" + equipement.getId() + "/edit";
}
}
}
equipementRepository.save(equipement);
return "redirect:/equipements";
}
@PostMapping("/{id}/duplicate")
public String duplicateEquipement(@PathVariable Long id) {
Equipement existing = equipementRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + id));
Equipement duplicated = new Equipement();
String newNom = existing.getNom() + " (dupliqué)";
if (newNom.length() > 100) {
newNom = newNom.substring(0, 100);
}
duplicated.setNom(newNom);
duplicated.setReference(existing.getReference());
duplicated.setDescription(existing.getDescription());
duplicated.setGestionSexe(existing.isGestionSexe());
duplicated.setTypePublic(existing.getTypePublic());
duplicated.setTaillesDisponibles(existing.getTaillesDisponibles());
duplicated.setCouleursDisponibles(existing.getCouleursDisponibles());
duplicated.setHasFlocagePrenom(existing.isHasFlocagePrenom());
duplicated.setHasFlocageInitiales(existing.isHasFlocageInitiales());
duplicated.setHasFlocageNumero(existing.isHasFlocageNumero());
duplicated.setSaison(existing.getSaison());
equipementRepository.save(duplicated);
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";
}
}