Skip to content
Commits on Source (2)
...@@ -194,7 +194,7 @@ public class BootstrapData implements CommandLineRunner { ...@@ -194,7 +194,7 @@ public class BootstrapData implements CommandLineRunner {
affectationRepository.save(affectation4); affectationRepository.save(affectation4);
mission2.getAffectation().add(affectation2); mission2.getAffectation().add(affectation2);
pilote5.getAffectation().add(affectation2); pilote1.getAffectation().add(affectation2);
chasseur4.getAffectation().add(affectation2); chasseur4.getAffectation().add(affectation2);
mission3.getAffectation().add(affectation1); mission3.getAffectation().add(affectation1);
......
...@@ -9,6 +9,7 @@ import fr.ldnr.starWars.domains.Mission; ...@@ -9,6 +9,7 @@ import fr.ldnr.starWars.domains.Mission;
import fr.ldnr.starWars.domains.Pilote; import fr.ldnr.starWars.domains.Pilote;
import fr.ldnr.starWars.enumerations.GradePilote; import fr.ldnr.starWars.enumerations.GradePilote;
import fr.ldnr.starWars.enumerations.StatutMission; import fr.ldnr.starWars.enumerations.StatutMission;
import fr.ldnr.starWars.enumerations.TypeMission;
import fr.ldnr.starWars.enumerations.TypePilote; import fr.ldnr.starWars.enumerations.TypePilote;
import fr.ldnr.starWars.services.MissionService; import fr.ldnr.starWars.services.MissionService;
import java.util.HashSet; import java.util.HashSet;
...@@ -39,22 +40,83 @@ public class Calculs { ...@@ -39,22 +40,83 @@ public class Calculs {
totalNbHeure += mission.getNbHeure(); totalNbHeure += mission.getNbHeure();
} }
} }
// return total nbHeure // return total nbHeure
return totalNbHeure; return totalNbHeure;
} }
public int calculNbMission() { // calcul nb de mission type COMBAT
public int calculNbMissionCombat(Pilote pilote) {
int nbMissionCombat = 0;
Set<Mission> missions = new HashSet<>(); // Create a set to store missions
for (Affectation affectation : pilote.getAffectation()) {
Mission mission = affectation.getMission();
if (mission != null && mission.getType().equals(TypeMission.COMBAT)) {
missions.add(mission);
// recuperate nbHeure
nbMissionCombat++;
}
}
return nbMissionCombat;
}
// calcul nb de mission type ALL
public int calculTotalNbMission(Pilote pilote) {
int totalNbMission = 0; int totalNbMission = 0;
Set<Mission> missions = new HashSet<>(); // Create a set to store missions
for (Affectation affectation : pilote.getAffectation()) {
Mission mission = affectation.getMission();
if (mission != null) {
missions.add(mission);
// recuperate nbHeure
totalNbMission++;
}
}
return totalNbMission; return totalNbMission;
} }
public GradePilote updateGradePilote() { // update Grade Pilote :
// Officier < 500 heures
// Lieutenant >= 500
// Capitaine 501 - 1500 + 1 Mission COMBAT
// Major 1500-3999 + 3 TOTAL Mission
// Commandant >=4000 + 10 TOTAL Mission
public GradePilote checkGradePilote(int nbHeures, int totalNbMission, int totalNbMissionCombat) {
// Officier: Less than 500 hours
if (nbHeures < 500) {
return GradePilote.OFFICIER;
}
// Lieutenant: 500 hours or more
if (nbHeures >= 500) {
return GradePilote.LIEUTENANT;
}
// Capitaine: Between 501 and 1500 hours with at least 1 Mission COMBAT
if (nbHeures > 500 && nbHeures <= 1500 && totalNbMissionCombat >= 1) {
return GradePilote.CAPITAINE; return GradePilote.CAPITAINE;
}
// Major: Between 1500 and 3999 hours with at least 3 TOTAL Missions and 1 Mission COMBAT
if (nbHeures >= 1500 && nbHeures <= 3999 && totalNbMission >= 3 && totalNbMissionCombat >= 1) {
return GradePilote.MAJOR;
}
// Commandant: 4000 hours or more with at least 3 TOTAL Missions and 1 Mission COMBAT
if (nbHeures >= 4000 && totalNbMission >= 3 && totalNbMissionCombat >= 1) {
return GradePilote.COMMANDANT;
} }
public TypePilote updateTypePilote() { // No matching conditions, return null to indicate no grade assigned
return null;
}
// update Type Pilote. Apprenti < 100 heures. Combattant >= 100 heures.
public TypePilote checkTypePilote(int nbHeures) {
if (nbHeures < 100) {
return TypePilote.APPRENTI; return TypePilote.APPRENTI;
} }
return TypePilote.COMBATTANT;
}
} }
...@@ -5,12 +5,17 @@ ...@@ -5,12 +5,17 @@
package fr.ldnr.starWars.controllers; package fr.ldnr.starWars.controllers;
import fr.ldnr.starWars.calculs.Calculs; import fr.ldnr.starWars.calculs.Calculs;
import fr.ldnr.starWars.domains.Affectation;
import fr.ldnr.starWars.domains.Mission; import fr.ldnr.starWars.domains.Mission;
import fr.ldnr.starWars.domains.Pilote; import fr.ldnr.starWars.domains.Pilote;
import fr.ldnr.starWars.enumerations.GradePilote;
import fr.ldnr.starWars.enumerations.ResultatMission; import fr.ldnr.starWars.enumerations.ResultatMission;
import fr.ldnr.starWars.enumerations.StatutMission; import fr.ldnr.starWars.enumerations.StatutMission;
import fr.ldnr.starWars.enumerations.TypePilote;
import fr.ldnr.starWars.services.MissionService; import fr.ldnr.starWars.services.MissionService;
import fr.ldnr.starWars.services.PiloteService; import fr.ldnr.starWars.services.PiloteService;
import java.util.HashSet;
import java.util.Set;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -58,16 +63,48 @@ public class ClotureMission { ...@@ -58,16 +63,48 @@ public class ClotureMission {
// persister missionRecupere dans la db // persister missionRecupere dans la db
missionService.save(missionRecupere); missionService.save(missionRecupere);
// boucle tous les pilotes dans la Mission
Set<Pilote> pilotes = new HashSet<>(); // Create a set to store pilotes in the Mission
for (Affectation affectation : missionRecupere.getAffectation()) {
Pilote pilote = affectation.getPilote();
if (pilote != null) {
pilotes.add(pilote);
}
}
for (Pilote pilote : pilotes) {
// ---------- DÉBUT CALCUL NB HEURE ET PUIS UPDATE GRADE OU TYPE
//calculNbHeure
Calculs calculs = new Calculs(missionService); Calculs calculs = new Calculs(missionService);
Pilote pilote = piloteService.findById(5); // Pilote pilote = piloteService.findById(5); // DON'T DELETE THIS PLEASE !!!
int nbHeure = calculs.calculNbHeure(pilote); int nbHeure = calculs.calculNbHeure(pilote);
System.out.println("CHECK nbHeure : " + nbHeure); System.out.println("CHECK nbHeure : " + nbHeure);
return "clotureMission";
}
public void updateGradePilote() { //calcul nb de mission de combat
// test calculNbHeure int nbMissionCombat = calculs.calculNbMissionCombat(pilote);
System.out.println("nbMissionCombat : " + nbMissionCombat);
// test calculNbHeure //calcul total nb de mission
int totalNbMission = calculs.calculTotalNbMission(pilote);
System.out.println("totalNbMission : " + totalNbMission);
// update Grade de pilote
GradePilote newGrade = calculs.checkGradePilote(nbHeure, totalNbMission, nbMissionCombat);
pilote.setGrade(newGrade);
System.out.println("newGrade : " + newGrade);
// update Type de pilote
TypePilote newType = calculs.checkTypePilote(nbHeure);
pilote.setType(newType);
System.out.println("newType : " + newType);
// then update to db
piloteService.save(pilote);
// ---------- FIN CALCUL NB HEURE ET PUIS UPDATE GRADE OU TYPE
}
return "clotureMission";
} }
} }
...@@ -8,45 +8,33 @@ Click nbfs://nbhost/SystemFileSystem/Templates/Other/html.html to edit this temp ...@@ -8,45 +8,33 @@ Click nbfs://nbhost/SystemFileSystem/Templates/Other/html.html to edit this temp
<title>cloture mission</title> <title>cloture mission</title>
<meta charset="UTF-8"/> <meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css"/>
<link href="https://fonts.cdnfonts.com/css/star-wars" rel="stylesheet">
<style>
@import url('https://fonts.cdnfonts.com/css/star-wars');
</style>
</head> </head>
<body> <body>
<header> <header>
<h1><span class='faulty-letter'>{</span> Cloture mission</h1> <h1><span class='faulty-letter'>{</span> Cloture Mission</h1>
</header> </header>
<main>
<form action="clotureMission" method="post"> <form class='mission' action="/clotureMission" method="post">
<div> <div class='box'>
<label for="missions">Choisir une mission :</label>
<select id="missions" name="missions">
<option th:each="mission : ${missions}" th:value="${mission.idMission}" th:text="${mission.titre}"></option>
</select>
</div>
<div> <div>
<label for="clotureMission">Nombre d'heures</label> <label for="clotureMission">Nombre d'heure</label>
<input type="text" id="heures" name="heures"/> <input type="text" id="heures" name="heures"/>
</div> </div>
<div> <div>
<label for="resultat">Resultat mission : </label> <label for="resultat">Resultat Mission : </label>
<select id="resultat" name="resultats"> <select id="resultat" name="resultats">
<option th:each="resultat : ${resultatMission}" th:value="${resultat}" th:text="${resultat}"></option> <option th:each="resultat : ${resultatMission}" th:value="${resultat}" th:text="${resultat}"></option>
</select> </select>
</div> </div>
<div> <input type="submit" value="Submit"/>
<label>detail</label> <input type="reset" value="Annuler"/>
<div>
<label for="pilote">Pilote</label>
<select id="pilote" name="pilote">
<option th:each="pilote : ${etatPilote}" th:value="${etatPilote}" th:text="${etatPilote}"></option>
</select>
<label for="chasseur">Chasseur</label>
<select id="chasseur" name="chasseur">
<option th:each="chasseur : ${etatChasseur}" th:value="${etatChasseur}" th:text="${etatChasseur}"></option>
</select>
</div>
</div>
</div>
</form> </form>
</main>
<footer> <footer>
<a href="/menu" class="menu">Retour au Menu</a> <a href="/menu" class="menu">Retour au Menu</a>
</footer> </footer>
......