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