From f1aa0eeafc4a7b58ec5d6e908bbefb11485b8a22 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piras=20Matt=C3=A9o?= <matteo.piras1@etu.univ-lorraine.fr>
Date: Tue, 28 Jan 2025 12:50:46 +0100
Subject: [PATCH] v1.0 probablement dysfonctionnelle mais on y va

---
 .../src/controleur/class_infraction_edit.ts   | 104 ++++++++++++++++--
 .../src/controleur/infraction_edit.ts         |  33 ++++++
 dossier_infraction/src/modele/connexion.ts    |   4 +-
 dossier_infraction/vue/infraction_edit.html   |  72 +++++-------
 4 files changed, 161 insertions(+), 52 deletions(-)

diff --git a/dossier_infraction/src/controleur/class_infraction_edit.ts b/dossier_infraction/src/controleur/class_infraction_edit.ts
index 2cee87d..504b1b7 100644
--- a/dossier_infraction/src/controleur/class_infraction_edit.ts
+++ b/dossier_infraction/src/controleur/class_infraction_edit.ts
@@ -8,24 +8,29 @@ type TStatutValeur = 'correct' | 'vide' | 'inconnu' | 'doublon'
 type TErreur = { statut: TStatutValeur, msg: { [key in TStatutValeur]: string } }
 type TInfraEditForm = {
     divDetail: HTMLElement, divTitre: HTMLElement
-    , infraNum: HTMLInputElement, edtLib: HTMLInputElement
+    , edtNum: HTMLInputElement, edtLib: HTMLInputElement
     , edtInfraImmat: HTMLInputElement
     , edtDateInfra: HTMLInputElement
     , btnRetour: HTMLInputElement, btnValider: HTMLInputElement, btnAnnuler: HTMLInputElement
     , lblDetailInfraImmat: HTMLLabelElement
+    , edtPermis: HTMLInputElement
     , lblNumErreur: HTMLLabelElement, lblEtageErreur: HTMLLabelElement
     , lblDateErreur: HTMLLabelElement
     lblDeptErreur: HTMLLabelElement, lblEquiptErreur: HTMLLabelElement
-    //4 labels d'erreurs à placer dans infraction_edit.html
+    
     divInfraDelit: HTMLDivElement, divInfraDelitEdit: HTMLDivElement
     , btnAjouterDelit: HTMLInputElement
     , lblTotal: HTMLLabelElement, tableDelit: HTMLTableElement
     , listeDelit: HTMLSelectElement, edtQte: HTMLInputElement
-    , btnValiderDelit: HTMLInputElement, btnAnnulerDelit: HTMLInputElement //plusieurs autres probablement à ajouter
-    , lblSelectEquiptErreur: HTMLLabelElement, lblQteErreur: HTMLLabelElement // dans le html -- a faire au besoin
-    , detailDepartement: HTMLInputElement
+    , btnValiderDelit: HTMLInputElement, btnAnnulerDelit: HTMLInputElement 
+    , lblSelectDelitErreur: HTMLLabelElement, lblQteErreur: HTMLLabelElement 
+    , detailImmat: HTMLInputElement, divDelitEdit: HTMLDivElement
 }
 
+//4 labels d'erreurs à placer dans infraction_edit.html
+
+
+
 class vueInfractionEdit {
     private _form: TInfraEditForm
     private _params: string[]; // paramètres reçus par le fichier HTML
@@ -118,10 +123,10 @@ class vueInfractionEdit {
         if (this.params[0] !== 'ajout') {
             // Mode affichage, modification ou suppression
             const infraction = lesInfractions.byIdInf(this.params[1]); // Récupérer l'infraction par ID
-            this.form.infraNum.value = infraction.idInf;
+            this.form.edtNum.value = infraction.idInf;
             this.form.edtDateInfra.value = infraction.dateInf;
             this.form.edtInfraImmat.value = infraction.numImmat;
-            this.form.infraNum.readOnly = true;
+            this.form.edtNum.readOnly = true;
             this.form.edtDateInfra.readOnly = affi;
             this.detailImmatriculation(infraction.numImmat); // Chargement des détails liés à l'immatriculation
         }
@@ -290,7 +295,7 @@ class vueInfractionEdit {
     traiteErreur(uneErreur: TErreur, zone: HTMLElement): boolean {
         let correct = true;
         zone.textContent = "";
-        if (uneErreur.statut !== "correct") { // non correct ==> erreur
+        if (uneErreur.statut !== "correct") { 
             if (uneErreur.msg[uneErreur.statut] !== '') { // erreur
                 zone.textContent = uneErreur.msg[uneErreur.statut];
                 correct = false;
@@ -298,6 +303,87 @@ class vueInfractionEdit {
         }
         return correct;
     }
+    verifNum(valeur: string): void {
+        const lesInfractions = new LesInfractions(); // Instanciation de LesInfractions
+        const err = this.erreur.edtNum; 
+        err.statut = "correct";
+        const chaine: string = valeur.trim();
+    
+        if (chaine.length > 0) {
+            // Vérifie que la chaîne contient uniquement des lettres et des chiffres
+            if (!chaine.match(/^([a-zA-Z0-9]+)$/)) {
+                this.erreur.edtNum.statut = "inconnu"; 
+            } else if (this.params[0] === "ajout") {
+              
+                const infractions = lesInfractions.all();
+                if (infractions[chaine]) {
+                    this.erreur.edtNum.statut = "doublon"; 
+                }
+            }
+        } else {
+            err.statut = "vide"; // Si la chaîne est vide
+        }
+    }
+
+    verifDate(valeur: string): void {
+        const err = this.erreur.edtDate; 
+        err.statut = "correct";
+        const chaine: string = valeur.trim();
+    
+        if (chaine.length === 0) {
+            err.statut = "vide"; // Si la date est vide
+        } else {
+
+            const dateRegex = /^\d{4}-\d{2}-\d{2}$/; // 
+            if (!dateRegex.test(chaine)) {
+                err.statut = "inconnu"; 
+            } else {
+                const date = new Date(chaine);
+                const today = new Date();
+                if (isNaN(date.getTime()) || date > today) {
+                    err.statut = "inconnu"; // Date invalide ou dans le futur
+                }
+            }
+        }
+    }
+    
+    cacherDelitEdit(): void {
+        this.form.divInfraDelitEdit.hidden = true;
+        this.form.divDetail.style.pointerEvents = 'auto';
+        this.form.btnAjouterDelit.hidden = false;
+        this.form.btnAnnuler.hidden = false;
+        this.form.btnValider.hidden = false;
+    }
+
+    verifListeDelit(): void {
+        const err = this._erreur.listeDelit
+        err.statut = "correct";
+        const cible = this._form.listeDelit;
+        if (cible.value === "") {
+            err.statut = 'vide'
+        }
+    }
+
+    validerDelitClick(): void {
+        let correct = true;
+        this.verifListeDelit();
+        correct = this.traiteErreur(this._erreur.listeDelit, this.form.lblSelectDelitErreur) && correct;
+        if(correct) {
+            const lesDelits = new LesDelits;
+            // ajout visuel de la ligne dans la grille tabulaire de la liste des équipements d'une salle
+            const unDelit: UnDelit = lesDelits.byIdDelit(this._form.listeDelit.value);
+            const unDelitByInfraction: UnDelitByInfraction
+                = new UnDelitByInfraction(unDelit);
+            this._grille[unDelit.idDelit] = unDelitByInfraction;
+            this.affiGrilleDelit();
+            this.annulerDelitClick();
+        }
+    }
+
+    annulerDelitClick(): void {
+        this.cacherDelitEdit();
+    }
+    
 
     validerClick(): void {
         let correct = true;
@@ -349,3 +435,5 @@ class vueInfractionEdit {
 }
 
 
+let vueInfraEdit = new vueInfractionEdit;
+export { vueInfraEdit }
\ No newline at end of file
diff --git a/dossier_infraction/src/controleur/infraction_edit.ts b/dossier_infraction/src/controleur/infraction_edit.ts
index e69de29..15ff92f 100644
--- a/dossier_infraction/src/controleur/infraction_edit.ts
+++ b/dossier_infraction/src/controleur/infraction_edit.ts
@@ -0,0 +1,33 @@
+import { vueInfraEdit } from "../controleur/class_infraction_edit.js";
+
+vueInfraEdit.init({
+    divDetail: document.querySelector("[id=div_infra_detail]") as HTMLElement,
+    divTitre: document.querySelector("[id=div_infra_edit]") as HTMLElement,
+    edtNum: document.querySelector("[id=edt_num_infra]") as HTMLInputElement,
+    edtLib: document.querySelector("[id=edt_infraction_lib]") as HTMLInputElement, 
+    edtInfraImmat: document.querySelector("[id=edt_immat_infra]") as HTMLInputElement,
+    edtDateInfra: document.querySelector("[id=edt_date_infra]") as HTMLInputElement,
+    btnRetour: document.querySelector("[id=btn_infra_retour]") as HTMLInputElement, 
+    btnValider: document.querySelector("[id=btn_infra_valider]") as HTMLInputElement,
+    btnAnnuler: document.querySelector("[id=btn_infra_annuler]") as HTMLInputElement,
+    lblDetailInfraImmat: document.querySelector("[id=lbl_infra_detail_Immat]") as HTMLLabelElement,
+    edtPermis: document.querySelector("[id=edt_permis_infra]") as HTMLInputElement,
+    lblNumErreur: document.querySelector("[id=lbl_erreur_num]") as HTMLLabelElement,
+    lblEtageErreur: document.querySelector("[id=lbl_erreur_etage]") as HTMLLabelElement, 
+    lblDateErreur: document.querySelector("[id=lbl_erreur_date]") as HTMLLabelElement, 
+    lblDeptErreur: document.querySelector("[id=lbl_erreur_dept]") as HTMLLabelElement,
+    lblEquiptErreur: document.querySelector("[id=lbl_erreur_equipt]") as HTMLLabelElement, 
+    divInfraDelit: document.querySelector("[id=div_infra_delit]") as HTMLDivElement,
+    divInfraDelitEdit: document.querySelector("[id=div_infra_edit]") as HTMLDivElement,
+    btnAjouterDelit: document.querySelector("[id=btn_delits_ajouter]") as HTMLInputElement,
+    lblTotal: document.querySelector("[id=lbl_delits_total]") as HTMLLabelElement,
+    tableDelit: document.querySelector("[id=table_delits]") as HTMLTableElement,
+    listeDelit: document.querySelector("[id=select_delits]") as HTMLSelectElement,
+    edtQte: document.querySelector("[id=edt_delit_qte]") as HTMLInputElement, 
+    btnValiderDelit: document.querySelector("[id=btn_delit_valider]") as HTMLInputElement, 
+    btnAnnulerDelit: document.querySelector("[id=btn_delit_annuler]") as HTMLInputElement, 
+    lblSelectDelitErreur: document.querySelector("[id=lbl_erreur_select_delits]") as HTMLLabelElement,
+    lblQteErreur: document.querySelector("[id=lbl_erreur_qte]") as HTMLLabelElement, 
+    detailImmat: document.querySelector("[id=edt_immat_detail]") as HTMLInputElement, 
+    divDelitEdit: document.querySelector("[id=div_infra_delit_edit]") as HTMLDivElement 
+});
diff --git a/dossier_infraction/src/modele/connexion.ts b/dossier_infraction/src/modele/connexion.ts
index e20ad75..24d8362 100644
--- a/dossier_infraction/src/modele/connexion.ts
+++ b/dossier_infraction/src/modele/connexion.ts
@@ -1,6 +1,6 @@
 import * as APIsql from "./sqlWeb"
 
-APIsql.sqlWeb.init("https://devweb.iutmetz.univ-lorraine.fr/~toto3u/ihm/INFRACTION/vue/","https://devweb.iutmetz.univ-lorraine.fr/~nitschke5/ihm/IHM_API/")
+APIsql.sqlWeb.init("https://devweb.iutmetz.univ-lorraine.fr/~piras6u/IHM/SAé/sae_ihm_mor/dossier_infraction/vue/","https://devweb.iutmetz.univ-lorraine.fr/~nitschke5/ihm/IHM_API/")
 
 class Connexion {
 	constructor() {
@@ -8,7 +8,7 @@ class Connexion {
 	}
 	init():void {
 		// à adapter avec votre nom de base et vos identifiants de connexion
-		APIsql.sqlWeb.bdOpen('devbdd.iutmetz.univ-lorraine.fr','3306','toto3u_infraction', 'toto3u_appli','mdp', 'utf8');
+		APIsql.sqlWeb.bdOpen('devbdd.iutmetz.univ-lorraine.fr','3306','piras6u_IHM', 'piras6u_appli','32007116', 'utf8');
 	}
 }
 let connexion = new Connexion;
diff --git a/dossier_infraction/vue/infraction_edit.html b/dossier_infraction/vue/infraction_edit.html
index d8116f4..117e472 100644
--- a/dossier_infraction/vue/infraction_edit.html
+++ b/dossier_infraction/vue/infraction_edit.html
@@ -9,8 +9,9 @@
 </head>
 
 <body>
-    <div id="div_infra_edit" class="divtitre"> Détail d'une infraction</div>
+    <div id="div_infra_edit" class="divtitre">Détail d'une infraction</div>
     <div id="div_infra_detail">
+        <!-- IDENTIFICATION -->
         <div class="infra_rubrique">
             <div>
                 <span class="labeltitre">IDENTIFICATION</span>
@@ -22,10 +23,12 @@
                 <div>
                     <label for="edt_date_infra">Le : </label>
                     <input id="edt_date_infra" type="text" size="15">
+                    <label id="lbl_erreur_date" class="labelerreur"></label>
                 </div>
             </div>
-
         </div>
+
+        <!-- VEHICULE -->
         <div class="infra_rubrique">
             <div>
                 <span class="labeltitre">VEHICULE</span>
@@ -34,28 +37,31 @@
             <div>
                 <label for="edt_immat_infra">Immatriculation : </label>
                 <span><input id="edt_immat_infra" size="15" type="text"></span>
-                <label id ="lbl_infra_detail_Immat" class = "infra_commentaire"></label>
+                <label id="lbl_infra_detail_Immat" class="infra_commentaire"></label>
             </div>
         </div>
+
+        <!-- CONDUCTEUR -->
         <div class="infra_rubrique">
             <div>
                 <span class="labeltitre">CONDUCTEUR</span>
             </div>
             <div>
-                <label for="edt_permis_infra">N ° Permis : </label>
+                <label for="edt_permis_infra">N° Permis : </label>
                 <span><input id="edt_permis_infra" size="15" type="text"></span>
             </div>
         </div>
+
+        <!-- DELITS -->
         <div>
             <span class="labeltitre">DELITS</span>
         </div>
 
         <div class="infra_sousrubrique">
-           
             <div id="div_infra_delit">
                 <div class="divtitre">
-                    Delits Constatés :
-                    <label id="lbl_delits_total"> </label>
+                    Délits Constatés :
+                    <label id="lbl_delits_total"></label>
                 </div>
                 <table id="table_delits">
                     <thead>
@@ -66,57 +72,39 @@
                             <th></th>
                         </tr>
                     </thead>
-                    <tbody> </tbody>
+                    <tbody></tbody>
                 </table>
                 <div class="divaction">
                     <input id="btn_delits_ajouter" type="button" value="Ajouter">
                 </div>
             </div>
-        
-            
-            <div class="div_boutons">
-                <input id="btn_infra_valider" value="Valider" type="button">
-                <input id="btn_infra_annuler" class="btnannuler" value="Annuler" type="button">
-            </div>
-        
-          
-            <div id="div_infra_edit">
+
+            <div id="div_infra_delit_edit">
                 <div class="divtitre">Sélectionner un délit dans la liste</div>
                 <div class="delits_rubrique">
                     <div>
                         <select id="select_delits" size="6"></select>
                         <div><label id="lbl_erreur_select_delits" class="labelerreur"></label></div>
                     </div>
-                    
+                    <div>
+                        <label for="edt_delit_qte">Quantité : </label>
+                        <span><input id="edt_delit_qte" size="5" type="text"></span>
+                        <div><label id="lbl_erreur_qte" class="labelerreur"></label></div>
+                        <div>
+                            <input id="btn_delit_valider" type="button" value="Valider">
+                            <input id="btn_delit_annuler" type="button" value="Annuler">
+                        </div>
+                    </div>
                 </div>
             </div>
+
+            <div class="div_boutons">
+                <input id="btn_infra_valider" value="Valider" type="button">
+                <input id="btn_infra_annuler" class="btnannuler" value="Annuler" type="button">
+            </div>
         </div>
-        
     </div>
-    </div>
-
 </body>
 <script type="module" src="../src/controleur/infraction_edit.ts"></script>
 
 </html>
-
-<!--
-    <div id="div_salle_equipement_edit">
-        <div class="divtitre">Choisir un équipement dans la liste</div>
-        <div class="equipement_rubrique">
-            <div>
-                <select id="select_delits" size="6"></select>
-                <div><label id="lbl_erreur_select_delits" class="labelerreur"></label></div>
-            </div>
-            <div>
-                <label for="edt_equipement_qte">quantité</label>
-                <span><input id="edt_equipement_qte" size="5" type="text"></span>
-                <div><label id="lbl_erreur_qte" class="labelerreur"></label></div>
-                <div>
-                    <input id="btn_equipement_valider" type="button">
-                    <input id="btn_equipement_annuler" type="button">
-                </div>
-            </div>
-        </div>
-    </div>
--->
\ No newline at end of file
-- 
GitLab