From 7e58720b36c5a65a8e3376c704c19acdf4e94595 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Wed, 27 Jun 2018 15:42:28 +0200 Subject: [PATCH 01/14] =?UTF-8?q?#43=20Ajout=20des=20=C3=A9quations=20de?= =?UTF-8?q?=20seuil=20triangulaire=20et=20triangulaire=20tronqu=C3=A9=20da?= =?UTF-8?q?ns=20les=20structures=20en=20parall=C3=A8le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../parallel-structures.config.json | 96 ++++++++++++++++++- .../parallel-structures.fr.json | 11 ++- 2 files changed, 103 insertions(+), 4 deletions(-) diff --git a/src/app/calculators/parallel-structures/parallel-structures.config.json b/src/app/calculators/parallel-structures/parallel-structures.config.json index 496e6114f..6151865b5 100644 --- a/src/app/calculators/parallel-structures/parallel-structures.config.json +++ b/src/app/calculators/parallel-structures/parallel-structures.config.json @@ -43,6 +43,14 @@ { "id": "select_ouvrage_seuil_rect", "enum": "StructureType.SeuilRectangulaire" + }, + { + "id": "select_ouvrage_seuil_triang", + "enum": "StructureType.SeuilTriangulaire" + }, + { + "id": "select_ouvrage_seuil_triangtrunc", + "enum": "StructureType.SeuilTriangulaireTrunc" } ] }, @@ -110,6 +118,38 @@ } ] }, + { + "id": "select_loidebit3", + "type": "select", + "select": [ + { + "id": "select_loidebit3_seuiltriang", + "enum": "LoiDebit.TriangularWeirFree" + } + ], + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triang" + } + ] + }, + { + "id": "select_loidebit4", + "type": "select", + "select": [ + { + "id": "select_loidebit4_seuiltriangtrunc", + "enum": "LoiDebit.TriangularTruncWeirFree" + } + ], + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] + }, { "type": "input", "id": "ZDV", @@ -125,8 +165,12 @@ "refvalue": "select_ouvrage_seuil_rect" }, { - "refid": "select_loidebit1", - "refvalue": "select_loidebit1_kivi" + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triang" + }, + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" } ] }, @@ -203,6 +247,14 @@ { "refid": "select_loidebit2", "refvalue": "select_loidebit2_cem88v" + }, + { + "refid": "select_loidebit3", + "refvalue": "select_loidebit3_seuiltriang" + }, + { + "refid": "select_loidebit3", + "refvalue": "select_loidebit4_seuiltriangtrunc" } ] }, @@ -241,6 +293,46 @@ "refvalue": "select_loidebit1_kivi" } ] + }, + { + "type": "input", + "id": "alpha2", + "unit": "", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triang" + }, + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] + }, + { + "type": "input", + "id": "BT", + "unit": "", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] + }, + { + "type": "input", + "id": "ZT", + "unit": "", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] } ] }, diff --git a/src/app/calculators/parallel-structures/parallel-structures.fr.json b/src/app/calculators/parallel-structures/parallel-structures.fr.json index f683f20df..37be0fc14 100644 --- a/src/app/calculators/parallel-structures/parallel-structures.fr.json +++ b/src/app/calculators/parallel-structures/parallel-structures.fr.json @@ -8,6 +8,8 @@ "select_ouvrage_vanne_circ": "Vanne circulaire", "select_ouvrage_vanne_rect": "Vanne rectangulaire", "select_ouvrage_seuil_rect": "Seuil rectangulaire", + "select_ouvrage_seuil_triang": "Seuil triangulaire", + "select_ouvrage_seuil_triangtrunc": "Seuil triangulaire tronqué", "select_ouvrage_seuil_trap": "Seuil trapézoïdal", "select_ouvrage_vanne_trap": "Vanne trapézoïdale", "W": "Ouverture de vanne", @@ -23,12 +25,17 @@ "select_loidebit2_cunge80": "Cunge 80", "select_loidebit2_cem88d": "Déversoir/Orifice Cemagref 88", "select_loidebit2_cem88v": "Déversoir/Vanne de fond Cemagref 88", + "select_loidebit3_seuiltriang": "Déversoir triangulaire dénoyé", + "select_loidebit4_seuiltriangtrunc": "Déversoir triangulaire tronqué dénoyé", "ZDV": "Cote de la crête du déversoir ou du radier de la vanne", - "L": "Largeur du déversoir", + "L": "Largeur du déversoir (m)", "Cd": "Coefficient de débit", "alpha": "Coefficient alpha", "beta": "Coefficient béta", - "ZRAM": "Cote du radier amont", + "ZRAM": "Cote du radier amont (m)", + "alpha2": "Demi-angle au sommet (°)", + "BT": "Demi-ouverture du triangle (m)", + "ZT": "Cote haute du triangle (m)", "struct_container": "Ouvrages", "fs_param_calc": "Paramètres de calcul", "Pr": "Précision de calcul" -- GitLab From cab5fc5f053b1ba0f1cbef88f6967fad9cbfdca4 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Thu, 28 Jun 2018 17:33:37 +0200 Subject: [PATCH 02/14] Simplification traitement du titre des calculettes --- .../services/formulaire/formulaire.service.ts | 32 ++----------------- .../internationalisation.service.ts | 10 ++++-- src/locale/error_messages.fr.json | 16 +++++----- 3 files changed, 18 insertions(+), 40 deletions(-) diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index 5984c3f9d..fa035f2d5 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -108,34 +108,8 @@ export class FormulaireService extends Observable { } public getLocalisedTitleFromCalculatorType(type: CalculatorType) { - switch (type) { - case CalculatorType.ConduiteDistributrice: - return this._intlService.localizeText("INFO_CONDDISTRI_TITRE"); - - case CalculatorType.LechaptCalmon: - return this._intlService.localizeText("INFO_LECHAPT_TITRE"); - - case CalculatorType.RegimeUniforme: - return this._intlService.localizeText("INFO_REGUNI_TITRE"); - - case CalculatorType.SectionParametree: - return this._intlService.localizeText("INFO_SECTPARAM_TITRE"); - - case CalculatorType.CourbeRemous: - return this._intlService.localizeText("INFO_REMOUS_TITRE") - - case CalculatorType.PabDimensions: - return this._intlService.localizeText("INFO_PABDIM_TITRE") - - case CalculatorType.PabPuissance: - return this._intlService.localizeText("INFO_PABPUISS_TITRE") - - case CalculatorType.ParallelStructure: - return this._intlService.localizeText("INFO_OUVRAGEPARAL_TITRE") - - default: - return "Invalid calculator type " + type; - } + const sCalculator: string = CalculatorType[type].toUpperCase(); + return this._intlService.localizeText(`INFO_${sCalculator}_TITRE`); } private loadConfig(form: FormulaireDefinition, ct: CalculatorType): Promise<Response> { @@ -199,7 +173,7 @@ export class FormulaireService extends Observable { /** * crée un formulaire d'un type donné * @param ct type de formulaire - * @param jsonState + * @param jsonState */ public createFormulaire(ct: CalculatorType, jsonState?: {}): Promise<FormulaireDefinition> { const f: FormulaireDefinition = this.newFormulaire(ct, jsonState); diff --git a/src/app/services/internationalisation/internationalisation.service.ts b/src/app/services/internationalisation/internationalisation.service.ts index d5e3486b8..dfe76a54d 100644 --- a/src/app/services/internationalisation/internationalisation.service.ts +++ b/src/app/services/internationalisation/internationalisation.service.ts @@ -71,7 +71,7 @@ export class InternationalisationService extends Observable { private getLanguageFromCode(lc: LanguageCode) { for (let l of this._languages) { - if (l.code == lc) + if (l.code === lc) return l; } throw new Message(MessageCode.ERROR_LANG_UNSUPPORTED); @@ -88,7 +88,7 @@ export class InternationalisationService extends Observable { } public setLocale(lng: string | LanguageCode) { - if (this._currLang != undefined) + if (this._currLang !== undefined) var oldLang: LanguageCode = this._currLang.code; if (typeof lng === "string") { @@ -162,8 +162,12 @@ export class InternationalisationService extends Observable { * @param code id du texte */ public localizeText(code: string) { - if (this._Messages == undefined) + if (this._Messages === undefined) { return "<messages not loaded>"; + } + if (this._Messages[code] === undefined) { + return `<message not exists: ${code}>`; + } return this._Messages[code]; } diff --git a/src/locale/error_messages.fr.json b/src/locale/error_messages.fr.json index 69c3b8f87..4959edd72 100644 --- a/src/locale/error_messages.fr.json +++ b/src/locale/error_messages.fr.json @@ -45,10 +45,10 @@ "INFO_CALCULATOR_PARAMFIXES": "Paramètres fixés", "INFO_CALCULATOR_VALEURS": "Valeurs", "INFO_CALCULATOR_CALCULER": "Calculer", - "INFO_CONDDISTRI_TITRE": "Conduite distributrice", - "INFO_LECHAPT_TITRE": "Lechapt-Calmon", - "INFO_REGUNI_TITRE": "Régime uniforme", - "INFO_SECTPARAM_TITRE": "Section paramétrée", + "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Conduite distributrice", + "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", + "INFO_REGIMEUNIFORME_TITRE": "Régime uniforme", + "INFO_SECTIONPARAMETREE_TITRE": "Section paramétrée", "INFO_GRANDEUR_Q": "Débit (m³/s)", "INFO_GRANDEUR_HS": "La charge spécifique (m)", "INFO_GRANDEUR_HSC": "La charge critique (m)", @@ -67,7 +67,7 @@ "INFO_GRANDEUR_I-J": "Variation linéaire de l'énergie spécifique (m/m)", "INFO_GRANDEUR_IMP": "Impulsion (N)", "INFO_GRANDEUR_TAU0": "La force tractrice (Pa)", - "INFO_REMOUS_TITRE": "Courbes de remous", + "INFO_COURBEREMOUS_TITRE": "Courbes de remous", "INFO_REMOUSRESULTS_TITREJOURNAL": "Journal de calcul", "INFO_REMOUSRESULTS_LIGNEFLUVIALE": "Ligne d'eau fluviale", "INFO_REMOUSRESULTS_LIGNETORRENTIELLE": "Ligne d'eau torrentielle", @@ -86,9 +86,9 @@ "INFO_CLOSE_DIALOGUE_TEXT": "Attention ! Les paramètres et résultats de la calculette seront perdus. Vraiment fermer ?", "INFO_OPTION_YES": "Oui", "INFO_OPTION_NO": "Non", - "INFO_PABDIM_TITRE": "Passe à bassin : dimensions", - "INFO_PABPUISS_TITRE": "Passe à bassin : puissance dissipée", - "INFO_OUVRAGEPARAL_TITRE": "Ouvrages en parallèle", + "INFO_PABDIMENSIONS_TITRE": "Passe à bassin : dimensions", + "INFO_PABPUISSANCE_TITRE": "Passe à bassin : puissance dissipée", + "INFO_PARALLELSTRUCTURE_TITRE": "Ouvrages en parallèle", "INFO_OUVRAGE": "Ouvrage", "INFO_TYPE_ECOULEMENT": "Type d'écoulement", "INFO_REGIME": "Régime", -- GitLab From 3bae739ff30bdc43398e2a28751711c3e898c317 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Thu, 28 Jun 2018 17:59:00 +0200 Subject: [PATCH 03/14] #43 Oubli commit 7e58720b36c5 --- .../calculators/parallel-structures/parallel-structures.fr.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/calculators/parallel-structures/parallel-structures.fr.json b/src/app/calculators/parallel-structures/parallel-structures.fr.json index 37be0fc14..2264c6b49 100644 --- a/src/app/calculators/parallel-structures/parallel-structures.fr.json +++ b/src/app/calculators/parallel-structures/parallel-structures.fr.json @@ -20,6 +20,8 @@ "select_loidebit1_cem88v": "Déversoir/Vanne de fond Cemagref 88", "select_loidebit1_kivi": "Kindsvater-Carter et Villemonte", "select_loidebit2": "Loi de débit", + "select_loidebit3": "Loi de débit", + "select_loidebit4": "Loi de débit", "select_loidebit2_vannedenoye": "Vanne dénoyé", "select_loidebit2_vannenoye": "Vanne noyé", "select_loidebit2_cunge80": "Cunge 80", -- GitLab From 25a41e46dee6efa163c7cd6bb8ef3e09c2ed78a9 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Fri, 29 Jun 2018 08:58:02 +0200 Subject: [PATCH 04/14] #43 Ajout des json de la calculette dever --- src/app/calculators/dever/dever.config.json | 224 ++++++++++++++++++ src/app/calculators/dever/dever.fr.json | 36 +++ .../services/formulaire/formulaire.service.ts | 9 +- tslint.json | 2 +- 4 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 src/app/calculators/dever/dever.config.json create mode 100644 src/app/calculators/dever/dever.fr.json diff --git a/src/app/calculators/dever/dever.config.json b/src/app/calculators/dever/dever.config.json new file mode 100644 index 000000000..99fe3d026 --- /dev/null +++ b/src/app/calculators/dever/dever.config.json @@ -0,0 +1,224 @@ +[ + { + "id": "fs_param_hydro", + "type": "fieldset", + "calcType": "Dever", + "option": "cal", + "fields": [ + { + "type": "input", + "id": "Q", + "symbol": "Q", + "unit": "m³/s" + }, + { + "type": "input", + "id": "Z1", + "unit": "m" + }, + { + "type": "input", + "id": "BR", + "unit": "m" + }, + { + "type": "input", + "id": "ZR", + "unit": "m" + } + ] + }, + { + "id": "fs_ouvrage", + "type": "fieldset_template", + "calcType": "Structure", + "defaultNodeType": "StructureRectangle", + "defaultStructType": "SeuilRectangulaire", + "defaultLoiDebit": "WeirFree", + "option": "cal", + "fields": [ + { + "id": "select_ouvrage", + "type": "select", + "select": [ + { + "id": "select_ouvrage_seuil_rect", + "enum": "StructureType.SeuilRectangulaire" + }, + { + "id": "select_ouvrage_seuil_triang", + "enum": "StructureType.SeuilTriangulaire" + }, + { + "id": "select_ouvrage_seuil_triangtrunc", + "enum": "StructureType.SeuilTriangulaireTrunc" + } + ] + }, + { + "id": "select_loidebit1", + "type": "select", + "select": [ + { + "id": "select_loidebit1_seuildenoye", + "enum": "LoiDebit.WeirFree" + } + ], + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_rect" + } + ] + }, + { + "id": "select_loidebit3", + "type": "select", + "select": [ + { + "id": "select_loidebit3_seuiltriang", + "enum": "LoiDebit.TriangularWeirFree" + } + ], + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triang" + } + ] + }, + { + "id": "select_loidebit4", + "type": "select", + "select": [ + { + "id": "select_loidebit4_seuiltriangtrunc", + "enum": "LoiDebit.TriangularTruncWeirFree" + } + ], + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] + }, + { + "type": "input", + "id": "ZDV", + "unit": "m", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_rect" + }, + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triang" + }, + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] + }, + { + "type": "input", + "id": "L", + "unit": "m", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_rect" + } + ] + }, + { + "type": "input", + "id": "Cd", + "unit": "", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_loidebit1", + "refvalue": "select_loidebit1_seuildenoye" + }, + { + "refid": "select_loidebit3", + "refvalue": "select_loidebit3_seuiltriang" + }, + { + "refid": "select_loidebit3", + "refvalue": "select_loidebit4_seuiltriangtrunc" + } + ] + }, + { + "type": "input", + "id": "alpha2", + "unit": "", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triang" + }, + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] + }, + { + "type": "input", + "id": "BT", + "unit": "", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] + }, + { + "type": "input", + "id": "ZT", + "unit": "", + "nodeType": "StructureRectangle", + "dep_exist": [ + { + "refid": "select_ouvrage", + "refvalue": "select_ouvrage_seuil_triangtrunc" + } + ] + } + ] + }, + { + "id": "struct_container", + "type": "template_container", + "templates": [ + "fs_ouvrage" + ] + }, + { + "id": "fs_param_calc", + "type": "fieldset", + "calcType": "ParallelStructure", + "option": "fix", + "fields": [ + { + "type": "input", + "id": "Pr" + } + ] + }, + { + "type": "options", + "ouvrageSelectId": "select_ouvrage", + "idCal": "Q" + } +] \ No newline at end of file diff --git a/src/app/calculators/dever/dever.fr.json b/src/app/calculators/dever/dever.fr.json new file mode 100644 index 000000000..6f526e0a5 --- /dev/null +++ b/src/app/calculators/dever/dever.fr.json @@ -0,0 +1,36 @@ +{ + "fs_param_hydro": "Paramètres hydrauliques", + "Q": "Débit total", + "Z1": "Cote de l'eau amont", + "ZR": "Cote du lit amont", + "BR": "Largeur du lit amont", + "fs_ouvrage": "Ouvrage", + "select_ouvrage": "Ouvrage", + "select_ouvrage_vanne_circ": "Vanne circulaire", + "select_ouvrage_vanne_rect": "Vanne rectangulaire", + "select_ouvrage_seuil_rect": "Seuil rectangulaire", + "select_ouvrage_seuil_trap": "Seuil trapézoïdal", + "select_ouvrage_vanne_trap": "Vanne trapézoïdale", + "W": "Ouverture de vanne", + "select_loidebit1": "Loi de débit", + "select_loidebit1_seuildenoye": "Seuil dénoyé", + "select_loidebit1_cunge80": "Cunge 80", + "select_loidebit1_cem88d": "Déversoir/Orifice Cemagref 88", + "select_loidebit1_cem88v": "Déversoir/Vanne de fond Cemagref 88", + "select_loidebit1_kivi": "Kindsvater-Carter et Villemonte", + "select_loidebit2": "Loi de débit", + "select_loidebit2_vannedenoye": "Vanne dénoyé", + "select_loidebit2_vannenoye": "Vanne noyé", + "select_loidebit2_cunge80": "Cunge 80", + "select_loidebit2_cem88d": "Déversoir/Orifice Cemagref 88", + "select_loidebit2_cem88v": "Déversoir/Vanne de fond Cemagref 88", + "ZDV": "Cote de la crête du déversoir ou du radier de la vanne", + "L": "Largeur du déversoir", + "Cd": "Coefficient de débit", + "alpha": "Coefficient alpha", + "beta": "Coefficient béta", + "ZRAM": "Cote du radier amont", + "struct_container": "Ouvrages", + "fs_param_calc": "Paramètres de calcul", + "Pr": "Précision de calcul" +} \ No newline at end of file diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index fa035f2d5..763789a5a 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -3,7 +3,7 @@ import { Response } from "@angular/http"; import { Observable as rxObservable } from "rxjs/Observable"; import "rxjs/add/operator/toPromise"; import { decode } from "he"; -import { saveAs } from "file-saver" +import { saveAs } from "file-saver"; import { CalculatorType, EnumEx, Observable } from "jalhyd"; @@ -156,6 +156,10 @@ export class FormulaireService extends Observable { f = new FormulaireParallelStructure(); break; + case CalculatorType.Dever: + f = new FormulaireParallelStructure(); + break; + default: throw new Error(`FormulaireService.createFormulaire() : type de calculette ${ct} non pris en charge`) } @@ -273,6 +277,9 @@ export class FormulaireService extends Observable { case CalculatorType.ParallelStructure: return "app/calculators/parallel-structures/parallel-structures."; + case CalculatorType.Dever: + return "app/calculators/dever/dever."; + default: throw "FormulaireService.getConfigPathPrefix() : valeur de CalculatorType " + ct + " non implémentée" } diff --git a/tslint.json b/tslint.json index 1c7b38bf2..905005e4f 100644 --- a/tslint.json +++ b/tslint.json @@ -83,7 +83,7 @@ "prefer-const": true, "quotemark": [ true, - "single" + "double" ], "radix": true, "semicolon": [ -- GitLab From 7bbd1633489dfe04fa7fc029578a67b8d305de6c Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Fri, 29 Jun 2018 09:04:27 +0200 Subject: [PATCH 05/14] #43 ajout du titre de la calculette --- src/locale/error_messages.fr.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/locale/error_messages.fr.json b/src/locale/error_messages.fr.json index 4959edd72..5f0a08b5d 100644 --- a/src/locale/error_messages.fr.json +++ b/src/locale/error_messages.fr.json @@ -89,6 +89,7 @@ "INFO_PABDIMENSIONS_TITRE": "Passe à bassin : dimensions", "INFO_PABPUISSANCE_TITRE": "Passe à bassin : puissance dissipée", "INFO_PARALLELSTRUCTURE_TITRE": "Ouvrages en parallèle", + "INFO_DEVER_TITRE": "Outil dever", "INFO_OUVRAGE": "Ouvrage", "INFO_TYPE_ECOULEMENT": "Type d'écoulement", "INFO_REGIME": "Régime", -- GitLab From a051e33cbfae9814b9db529d585997a811a6290d Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Fri, 29 Jun 2018 16:25:29 +0200 Subject: [PATCH 06/14] =?UTF-8?q?=20#43=20cr=C3=A9ation=20d'une=20classe?= =?UTF-8?q?=20sp=C3=A9cifique=20FormulaireDever?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../definition/concrete/form-dever.ts | 19 +++++++++++++++++++ .../services/formulaire/formulaire.service.ts | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/app/formulaire/definition/concrete/form-dever.ts diff --git a/src/app/formulaire/definition/concrete/form-dever.ts b/src/app/formulaire/definition/concrete/form-dever.ts new file mode 100644 index 000000000..f99c0ffb9 --- /dev/null +++ b/src/app/formulaire/definition/concrete/form-dever.ts @@ -0,0 +1,19 @@ +import { FormDefParallelStructures } from "../form-def-parallel-structures"; +import { FormDefParamToCalculate } from "../form-def-paramcalc"; +import { FormComputeParallelStructures } from "../form-compute-parallel-structures"; +import { FormResultFixedVar } from "../form-result-fixedvar"; +import { CalculatorType, ComputeNodeType, StructureType, LoiDebit } from "jalhyd"; +import { FormulaireParallelStructure } from "./form-parallel-structures"; + +export class FormulaireDever extends FormulaireParallelStructure { + constructor() { + super(); + } + + protected get defaultProperties(): {} { + return { + "calcType": CalculatorType.Dever, "nodeType": ComputeNodeType.None, + "structureType": StructureType.SeuilRectangulaire, "loiDebit": LoiDebit.WeirFree + }; + } +} diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index 763789a5a..949e1a886 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -24,6 +24,7 @@ import { FormulaireRegimeUniforme } from "../../formulaire/definition/concrete/f import { FormulairePasseBassinDimensions } from "../../formulaire/definition/concrete/form-passe-bassin-dim"; import { FormulairePasseBassinPuissance } from "../../formulaire/definition/concrete/form-passe-bassin-puissance"; import { FormulaireParallelStructure } from "../../formulaire/definition/concrete/form-parallel-structures"; +import { FormulaireDever } from "../../formulaire/definition/concrete/form-dever"; @Injectable() export class FormulaireService extends Observable { @@ -157,7 +158,7 @@ export class FormulaireService extends Observable { break; case CalculatorType.Dever: - f = new FormulaireParallelStructure(); + f = new FormulaireDever(); break; default: -- GitLab From 35ea4f145c666a17bacb514f3f8893f58f904b3e Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Fri, 29 Jun 2018 16:26:26 +0200 Subject: [PATCH 07/14] =?UTF-8?q?=20#43=20MAJ=20de=20la=20proc=C3=A9dure?= =?UTF-8?q?=20d'ajout=20d'une=20calculette?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 529b343e4..54070a9d3 100644 --- a/README.md +++ b/README.md @@ -129,51 +129,48 @@ and then : * Créer les tests unitaires correspondants -* Ajouter une valeur à l'enum _ComputeNodeType_ pour identifier le type de noeud de calcul (par ex _MaCalculette_). +* Ajouter une valeur à l'enum _CalculatorType_ pour identifier le type de calculette (par ex _MaCalculette_). -* Compléter la méthode _ComputeNodeParameters.getComputeNodeParameters()_. - - Si plusieurs valeurs de _ComputeNodeType_ font référence à la même calculette, n'ajouter les _case_ que pour les valeurs "concrètes". Par exemple, pour les sections paramétrées, il n'y a pas de _case_ pour la valeur _SectionParametree_ qui est générique. +* Compléter la méthode _NubFactory.createNub()_. ## ngHyd -* Créer les fichier de configuration de la calculette +* Créer les fichiers de configuration de la calculette - dans _src/app/calculators_ : créer un répertoire (par ex _ma-calculette_) - dans _src/app/calculators/ma-calculette_ : Créer _ma-calculette.config.json_ sur le modèle des autres. - Les ids utilisés doivent correspondre au symbole fourni à classe _ParamDefinition_ (2ème paramètre du constructeur) + Les ids utilisés doivent correspondre au symbole fourni à classe _BaseParam_ (1er paramètre du constructeur) Ne pas oublier de spécifier : - - le type de noeud de la calculette (dans l'objet comportant _"id":"options"_) avec le champ _"nodeType": "MaCalculette"_ - - éventuellement le type de noeud de fieldset particuliers (objets comportant _"id":"fs_XXX"_) avec le champ _"nodeType": "MaCalculetteBleue"_ + + - éventuellement le type de noeud de paramètres particuliers (objets comportant _"type":"input"_) avec le champ _"nodeType": "MaCalculetteBleue"_ - dans _src/app/calculators/ma-calculette_ : Créer les fichiers d'internationalisation (_ma-calculette.<langue>.json_). Il doivent reprendre tous les ids utilisés dans le fichier de configuration et fournir leur traduction. -* Dans le fichier *src/app/formulaire/formulaire-definition.ts* ajouter une valeur à l'enum _CalculatorType_ pour identifier la calculette. +* créer la classe du formulaire dans _src/app/formulaire/definition/concrete_ + + - Par ex : _FormulaireMaCalculette_ dans _src/app/formulaire/definition/concrete/form-ma-calculette.ts_ - On ne reprend pas directement l'enum _ComputeNodeType_ car celui ci sert à distinguer les variantes au sein d'une même calculette (par exemple les différentes sections paramétrées). + Ces classes concrètes sont construites par composition des classes dans _src/app/formulaire/definition_ : + - _form-def-*_ : définition/description du formulaire. + - _FormDefSection_ : avec paramètre à varier + - _FormDefParamToCalculate_ : avec paramètre à calculer + - etc... + - _form-compute-*_ : aspects calculatoires + - _form-result-*_ : affichage des résultats -* Composant CalculatorListComponent : ajouter une ligne à la methode _updateLocale()_ pour créer une nouvelle entrée dans la liste des calculettes disponibles. + On peut soit composer la classe concrète directement avec ces classes, soient dériver ces dernières et composer avec. + + - dans cette classe, surcharger la méthode _defaultProperties()_ (abstraite dans _FormulaireDefinition_) pour préciser le type de calculette (CalculatorType) et de noeud (ComputeNodeType) et éventuellement d'autres propriétés (cf. _FormulaireParallelStructure_). * _src/locale/error_messages.<langue>.json_ : Ajouter un champ pour le titre de la calculette. Par exemple : _"INFO_MACALC_TITRE": "Ma calculette"_ -* Compléter la méthode _GenericCalculatorComponent.uitextTitre()_ avec cette valeur et la valeur de l'enum _CalculatorType_ correspondante. - * Dans la méthode _FormulaireService.getConfigPathPrefix()_, compléter le _switch_ pour fournir le préfixe des fichiers de configuration/internationalisation. - -* Classe _ParamService_ : compléter le constructeur. - -* S'il existe plusieurs valeurs de _ComputeNodeType_ pour la même calculette, compléter les méthodes - - _FormulaireDefinition.getComputeNodeTypeFromSection()_. - - _ParamService.hasParameter()_ - -* Compléter la méthode _FormulaireDefinition.doCompute()_. - En particulier, adapter les méthodes _getNubAndParameters()_ ou _getSectionNubAndParameters()_ (récupération des valeurs saisies dans l'interface). -- GitLab From 7e9b67fe5b5d005ecaca791b7d8a078037a0bfdd Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Mon, 2 Jul 2018 22:48:15 +0200 Subject: [PATCH 08/14] Configuration de MathJax en local --- package.json | 10 ++++++---- src/index.html | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f612aaad6..e40a1eb19 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,14 @@ "license": "MIT", "scripts": { "ng": "ng", - "start": "ng serve --host 0.0.0.0", - "prod": "ng serve --host 0.0.0.0 --env=prod", - "build": "ng build", + "start": "npm run mathjax; ng serve --host 0.0.0.0", + "prod": "npm run mathjax; ng serve --host 0.0.0.0 --env=prod", + "build": "npm run mathjax; ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", - "jalhyd": "rm -rf node_modules/jalhyd; cd ../jalhyd; npm run package; cd ../nghyd; npm install ../jalhyd/jalhyd-1.0.0.tgz" + "jalhyd": "rm -rf node_modules/jalhyd; cd ../jalhyd; npm run package; cd ../nghyd; npm install ../jalhyd/jalhyd-1.0.0.tgz;", + "mathjax": "rm -rf src/assets/mathjax; cp -R node_modules/mathjax src/assets/mathjax;" }, "private": true, "dependencies": { @@ -29,6 +30,7 @@ "file-saver": "^1.3.8", "he": "^1.1.1", "jalhyd": "file:../jalhyd/jalhyd-1.0.0.tgz", + "mathjax": "^2.7.4", "ngx-md": "^3.1.1", "rxjs": "^5.5.2", "zone.js": "^0.8.14" diff --git a/src/index.html b/src/index.html index afcc5e9ed..e5c06f360 100644 --- a/src/index.html +++ b/src/index.html @@ -47,7 +47,7 @@ </script> <!-- récupération du code + configuration par défaut --> - <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML"></script> + <script type="text/javascript" src="assets/mathjax/MathJax.js?config=TeX-AMS_CHTML"></script> <!-- /MathJax--> </head> -- GitLab From 1f31c9c02f580a61f7cfa5f7fe02dd1ef4876a5f Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Mon, 2 Jul 2018 23:35:17 +0200 Subject: [PATCH 09/14] =?UTF-8?q?Suite=20in=C3=A9gration=20MathJax=20en=20?= =?UTF-8?q?local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 339da7fb5..c5b7f7ee4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ # dependencies /node_modules +/src/assets/mathjax # IDEs and editors /.idea -- GitLab From 3556b203613074c068182d3e894dad3750d77673 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Mon, 2 Jul 2018 23:37:29 +0200 Subject: [PATCH 10/14] =?UTF-8?q?#43=20Ajout=20des=20libell=C3=A9s=20des?= =?UTF-8?q?=20extraResults=20+=20Simplification=20de=20la=20gestion=20des?= =?UTF-8?q?=20libell=C3=A9s=20des=20extraresults=20et=20des=20ENUM=20dans?= =?UTF-8?q?=20les=20extraresults?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internationalisation.service.ts | 90 +++++-------------- src/locale/error_messages.fr.json | 33 ++++--- 2 files changed, 41 insertions(+), 82 deletions(-) diff --git a/src/app/services/internationalisation/internationalisation.service.ts b/src/app/services/internationalisation/internationalisation.service.ts index dfe76a54d..00397c931 100644 --- a/src/app/services/internationalisation/internationalisation.service.ts +++ b/src/app/services/internationalisation/internationalisation.service.ts @@ -180,87 +180,37 @@ export class InternationalisationService extends Observable { } /** - * traduit un libellé qui peut être un code + * Traduit un libellé qui peut être un code */ - public translateLabel(o: any) { - let res; - if (typeof o === "string") { - switch (o) { - case "flu": - res = this.localizeText("INFO_REMOUSRESULTS_LIGNEFLUVIALE"); - break; - - case "tor": - res = this.localizeText("INFO_REMOUSRESULTS_LIGNETORRENTIELLE"); - break; - - default: - const match = this.parseLabel(o); - if (match) { - if (match[1] === "ouvrage") - res = this.localizeText("INFO_OUVRAGE") + " n°" + (+match[2] + 1); - - const p = match[3]; - switch (p) { - case "Q": - res += " : " + this.localizeText("INFO_GRANDEUR_" + p); - break; - - case "Q_Mode": - res += " : " + this.localizeText("INFO_TYPE_ECOULEMENT"); - break; - - case "Q_Regime": - res += " : " + this.localizeText("INFO_REGIME"); - break; - } - } - else - res = o; - break; - } + public translateLabel(s: string) { + const key = "INFO_EXTRARES_LIB_"; + const match = this.parseLabel(s); + if (match) { + // Code du type "Ouvrage[n].XXX" + // Les libellés correspondants sont INFO OUVRAGE et INFO_EXTRARES_LIB_OUVRAGE_XXX + return this.localizeText(`INFO_${match[1].toUpperCase()}`) + " n°" + (+match[2] + 1) + ": " + + this.localizeText(`${key}${match[1].toUpperCase()}_${match[3].toUpperCase()}`); + } else { + // Autres codes INFO_EXTRARES_LIB_XXX + return this.localizeText(`${key}${s.toUpperCase()}`); } - return res; - } + } /** * met en forme ou traduit un résultat en fonction du libellé qui l'accompagne + * @todo Il manque un formalisme clair permettant de différencier les valeurs numériques des ENUM */ public formatResult(label: string, value: number): string { const match = this.parseLabel(label); - if (match) - switch (match[1]) { - case "ouvrage": - switch (match[3]) { - case "Q_Mode": - switch (value) { - case 0: - case 1: - case 2: - const key = `INFO_LIB_ENUM_RES_STRUCTURE_MODE_${value}`; - return this.localizeText(key); - - default: - throw new Error(`InternationalisationService.formatResult : valeur ${value} incorrecte pour STRUCTURE_MODE`); - } - - case "Q_Regime": - switch (value) { - case 0: - case 1: - case 2: - const key = `INFO_LIB_ENUM_RES_STRUCTURE_REGIME_${value}`; - return this.localizeText(key); - - default: - throw new Error(`InternationalisationService.formatResult : valeur ${value} incorrecte pour STRUCTURE_REGIME`); - } - - } + if (match) { + if (match[3] !== "Q") { // Le débit est une valeur numérique, tous les autres sont des ENUM ??? + // Label du type ouvrage[n].XXX => message INFO_EXTRARES_ENUM_OUVRAGE_XXX_value + return this.localizeText(`INFO_EXTRARES_ENUM_${match[1].toUpperCase()}_${match[3].toUpperCase()}_${value}`); } - + } const appSetupService = ServiceFactory.instance.applicationSetupService; const nDigits = appSetupService.displayDigits; return value.toFixed(nDigits); } + } diff --git a/src/locale/error_messages.fr.json b/src/locale/error_messages.fr.json index 5f0a08b5d..270d66e42 100644 --- a/src/locale/error_messages.fr.json +++ b/src/locale/error_messages.fr.json @@ -69,8 +69,6 @@ "INFO_GRANDEUR_TAU0": "La force tractrice (Pa)", "INFO_COURBEREMOUS_TITRE": "Courbes de remous", "INFO_REMOUSRESULTS_TITREJOURNAL": "Journal de calcul", - "INFO_REMOUSRESULTS_LIGNEFLUVIALE": "Ligne d'eau fluviale", - "INFO_REMOUSRESULTS_LIGNETORRENTIELLE": "Ligne d'eau torrentielle", "INFO_REMOUSRESULTS_ABSCISSE": "Abscisse (m)", "INFO_REMOUSRESULTS_TIRANT": "Tirant d'eau (m)", "INFO_REMOUSRESULTS_FOND": "Fond", @@ -91,15 +89,26 @@ "INFO_PARALLELSTRUCTURE_TITRE": "Ouvrages en parallèle", "INFO_DEVER_TITRE": "Outil dever", "INFO_OUVRAGE": "Ouvrage", - "INFO_TYPE_ECOULEMENT": "Type d'écoulement", - "INFO_REGIME": "Régime", + + "INFO_EXTRARES_LIB_FLU": "Ligne d'eau fluviale", + "INFO_EXTRARES_LIB_TOR": "Ligne d'eau torrentielle", + "INFO_EXTRARES_LIB_OUVRAGE_Q": "Débit (m³/s)", + "INFO_EXTRARES_LIB_OUVRAGE_Q_MODE": "Type d'écoulement", + "INFO_EXTRARES_LIB_OUVRAGE_Q_REGIME": "Régime", + "INFO_EXTRARES_LIB_V": "V: Vitesse (m/s)", + "INFO_EXTRARES_LIB_EC": "EC: Énergie cinétique (m)", + "INFO_EXTRARES_LIB_CV": "Cv: Coefficient de vitesse d'approche", + "INFO_EXTRARES_LIB_CVQT": "CV.QT: Débit corrigé (m³/s)", + + "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_0": "Surface libre", + "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_1": "En charge", + "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_2": "Débit nul", + "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_0": "Dénoyé", + "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_1": "Partiellement noyé", + "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_2": "Noyé", + "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_3": "Débit nul", + "WARNING_STRUCTUREKIVI_PELLE_TROP_FAIBLE": "La pelle du seuil doit mesurer au moins 0,1 m. Le coefficient béta est forcé à 0", - "WARNING_STRUCTUREKIVI_HP_TROP_ELEVE": "h/p ne doit pas être supérieur à 2,5. h/p est forcé à 2,5", - "INFO_LIB_ENUM_RES_STRUCTURE_MODE_0": "Surface libre", - "INFO_LIB_ENUM_RES_STRUCTURE_MODE_1": "En charge", - "INFO_LIB_ENUM_RES_STRUCTURE_MODE_2": "Débit nul", - "INFO_LIB_ENUM_RES_STRUCTURE_REGIME_0": "Dénoyé", - "INFO_LIB_ENUM_RES_STRUCTURE_REGIME_1": "Partiellement noyé", - "INFO_LIB_ENUM_RES_STRUCTURE_REGIME_2": "Noyé", - "INFO_LIB_ENUM_RES_STRUCTURE_REGIME_3": "Débit nul" + "WARNING_STRUCTUREKIVI_HP_TROP_ELEVE": "h/p ne doit pas être supérieur à 2,5. h/p est forcé à 2,5" + } \ No newline at end of file -- GitLab From 65d578a93829ed926c5ae6a719e1b990ec97871b Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Tue, 3 Jul 2018 15:08:20 +0200 Subject: [PATCH 11/14] =?UTF-8?q?=20#43=20FormulaireDefinition=20:=20suppr?= =?UTF-8?q?ession=20de=20la=20m=C3=A9thode=20abstraite=20defaultProperties?= =?UTF-8?q?()=20remplac=C3=A9e=20par=20un=20getter=20du=20m=C3=AAme=20nom.?= =?UTF-8?q?=20Les=20valeurs=20de=20ces=20propri=C3=A9t=C3=A9s=20sont=20ini?= =?UTF-8?q?tialis=C3=A9es=20=C3=A0=20la=20cr=C3=A9ation=20du=20formulaire?= =?UTF-8?q?=20(pour=20"calcType")=20et=20=C3=A0=20la=20lecture=20du=20fich?= =?UTF-8?q?ier=20de=20conf=20de=20la=20calculette=20(pour=20"nodeType").?= =?UTF-8?q?=20L'avantage=20est=20qu'on=20=C3=A9vite=20une=20potentielle=20?= =?UTF-8?q?incoh=C3=A9rence=20entre=20le=20code=20et=20le=20fichier=20de?= =?UTF-8?q?=20config.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++-- .../regime-uniforme.config.json | 1 + src/app/calculators/remous/remous.config.json | 1 + .../section-param/section-param.config.json | 1 + .../definition/concrete/form-cond-distri.ts | 4 -- .../definition/concrete/form-courbe-remous.ts | 5 +-- .../definition/concrete/form-dever.ts | 7 ---- .../concrete/form-lechapt-calmon.ts | 4 -- .../concrete/form-parallel-structures.ts | 9 +---- .../concrete/form-passe-bassin-dim.ts | 4 -- .../concrete/form-passe-bassin-puissance.ts | 4 -- .../concrete/form-regime-uniforme.ts | 7 ++-- .../concrete/form-section-parametree.ts | 5 +-- .../formulaire/definition/form-definition.ts | 40 +++++++++++++++---- .../services/formulaire/formulaire.service.ts | 40 ++++++++++--------- src/app/services/http/http.service.ts | 24 ++++++++++- 16 files changed, 91 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index 54070a9d3..ac570727f 100644 --- a/README.md +++ b/README.md @@ -146,8 +146,9 @@ and then : Les ids utilisés doivent correspondre au symbole fourni à classe _BaseParam_ (1er paramètre du constructeur) Ne pas oublier de spécifier : - - - éventuellement le type de noeud de paramètres particuliers (objets comportant _"type":"input"_) avec le champ _"nodeType": "MaCalculetteBleue"_ + - éventuellement le type de noeud par défaut de la calculette dans les options avec le champ "_defaultNodeType_". Si ce champ est absent, sa valeur est "_ComputeNodeType.None_". Ce champ sert par ex pour les sections paramétrées à déterminer le type de section à afficher lors de la création de la calculette. + + - éventuellement le type de noeud de paramètres particuliers (objets comportant _"type":"input"_) avec le champ _"nodeType": "MaCalculetteBleue"_ (par défaut, "_ComputeNodeType.None_") - dans _src/app/calculators/ma-calculette_ : @@ -167,8 +168,6 @@ and then : On peut soit composer la classe concrète directement avec ces classes, soient dériver ces dernières et composer avec. - - dans cette classe, surcharger la méthode _defaultProperties()_ (abstraite dans _FormulaireDefinition_) pour préciser le type de calculette (CalculatorType) et de noeud (ComputeNodeType) et éventuellement d'autres propriétés (cf. _FormulaireParallelStructure_). - * _src/locale/error_messages.<langue>.json_ : Ajouter un champ pour le titre de la calculette. Par exemple : _"INFO_MACALC_TITRE": "Ma calculette"_ diff --git a/src/app/calculators/regime-uniforme/regime-uniforme.config.json b/src/app/calculators/regime-uniforme/regime-uniforme.config.json index 7286a71d8..0ef139659 100644 --- a/src/app/calculators/regime-uniforme/regime-uniforme.config.json +++ b/src/app/calculators/regime-uniforme/regime-uniforme.config.json @@ -152,6 +152,7 @@ }, { "type": "options", + "defaultNodeType": "SectionCercle", "idCal": "Q", "sectionSourceId": "fs_section" } diff --git a/src/app/calculators/remous/remous.config.json b/src/app/calculators/remous/remous.config.json index 289a274e1..592621d45 100644 --- a/src/app/calculators/remous/remous.config.json +++ b/src/app/calculators/remous/remous.config.json @@ -260,6 +260,7 @@ }, { "type": "options", + "defaultNodeType": "SectionPuissance", "sectionSourceId": "select_section", "targetSelectId": "select_target", "methodSelectId": "select_resolution" diff --git a/src/app/calculators/section-param/section-param.config.json b/src/app/calculators/section-param/section-param.config.json index 56ea1dd3c..7c8a769ec 100644 --- a/src/app/calculators/section-param/section-param.config.json +++ b/src/app/calculators/section-param/section-param.config.json @@ -274,6 +274,7 @@ }, { "type": "options", + "defaultNodeType": "SectionCercle", "sectionSourceId": "select_section", "targetSelectId": "select_target" } diff --git a/src/app/formulaire/definition/concrete/form-cond-distri.ts b/src/app/formulaire/definition/concrete/form-cond-distri.ts index c9e70be83..9229f2ce6 100644 --- a/src/app/formulaire/definition/concrete/form-cond-distri.ts +++ b/src/app/formulaire/definition/concrete/form-cond-distri.ts @@ -23,10 +23,6 @@ export class FormulaireConduiteDistributrice extends FormulaireDefinition { this._formCompute = new FormComputeFixedVar(this, this._formResult); } - protected get defaultProperties(): {} { - return { "calcType": CalculatorType.ConduiteDistributrice, "nodeType": ComputeNodeType.None }; - } - protected initParse() { this._formParamCalc.initParse(); } diff --git a/src/app/formulaire/definition/concrete/form-courbe-remous.ts b/src/app/formulaire/definition/concrete/form-courbe-remous.ts index d67e9bf24..c4653bbac 100644 --- a/src/app/formulaire/definition/concrete/form-courbe-remous.ts +++ b/src/app/formulaire/definition/concrete/form-courbe-remous.ts @@ -27,11 +27,8 @@ export class FormulaireCourbeRemous extends FormulaireDefinition { this._formCompute = new FormComputeCourbeRemous(this, this._formSection, this._formResult); } - protected get defaultProperties(): {} { - return { "calcType": CalculatorType.CourbeRemous, "nodeType": ComputeNodeType.SectionPuissance }; - } - protected parseOptions(json: {}) { + super.parseOptions(json); this._formSection.parseOptions(json); // id du select configurant la méthode de résolution diff --git a/src/app/formulaire/definition/concrete/form-dever.ts b/src/app/formulaire/definition/concrete/form-dever.ts index f99c0ffb9..01543d811 100644 --- a/src/app/formulaire/definition/concrete/form-dever.ts +++ b/src/app/formulaire/definition/concrete/form-dever.ts @@ -9,11 +9,4 @@ export class FormulaireDever extends FormulaireParallelStructure { constructor() { super(); } - - protected get defaultProperties(): {} { - return { - "calcType": CalculatorType.Dever, "nodeType": ComputeNodeType.None, - "structureType": StructureType.SeuilRectangulaire, "loiDebit": LoiDebit.WeirFree - }; - } } diff --git a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts index 96d6fad59..04427e3db 100644 --- a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts +++ b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts @@ -25,10 +25,6 @@ export class FormulaireLechaptCalmon extends FormulaireDefinition implements Obs this._formCompute = new FormComputeFixedVar(this, this._formResult); } - protected get defaultProperties(): {} { - return { "calcType": CalculatorType.LechaptCalmon, "nodeType": ComputeNodeType.None }; - } - protected initParse() { this._formParamCalc.initParse(); } diff --git a/src/app/formulaire/definition/concrete/form-parallel-structures.ts b/src/app/formulaire/definition/concrete/form-parallel-structures.ts index 64b83a279..32bf51d11 100644 --- a/src/app/formulaire/definition/concrete/form-parallel-structures.ts +++ b/src/app/formulaire/definition/concrete/form-parallel-structures.ts @@ -39,13 +39,6 @@ export class FormulaireParallelStructure extends FormulaireDefinition { this._formCompute = new FormComputeParallelStructures(this, this._formParallelStruct, this._formResult); } - protected get defaultProperties(): {} { - return { - "calcType": CalculatorType.ParallelStructure, "nodeType": ComputeNodeType.None, - "structureType": StructureType.SeuilRectangulaire, "loiDebit": LoiDebit.Cem88v - }; - } - private createStructNub(templ: FieldsetTemplate): SessionNub { // valeurs par défaut de CalculatorType, ComputeNodeType, StructureType, LoiDebit // !!! attention !!! pour l'instant, il doit y avoir cohérence entre ces valeurs et celles du fichier de conf @@ -96,6 +89,8 @@ export class FormulaireParallelStructure extends FormulaireDefinition { } protected parseOptions(json: {}) { + super.parseOptions(json); + // id du select configurant le type d'ouvrage this.__ouvrageSelectId = this.getOption(json, "ouvrageSelectId"); } diff --git a/src/app/formulaire/definition/concrete/form-passe-bassin-dim.ts b/src/app/formulaire/definition/concrete/form-passe-bassin-dim.ts index 64a5141cd..bb7de04b6 100644 --- a/src/app/formulaire/definition/concrete/form-passe-bassin-dim.ts +++ b/src/app/formulaire/definition/concrete/form-passe-bassin-dim.ts @@ -24,10 +24,6 @@ export class FormulairePasseBassinDimensions extends FormulaireDefinition { this._formCompute = new FormComputeFixedVar(this, this._formResult); } - protected get defaultProperties(): {} { - return { "calcType": CalculatorType.PabDimensions, "nodeType": ComputeNodeType.None }; - } - protected initParse() { this._formParamCalc.initParse(); } diff --git a/src/app/formulaire/definition/concrete/form-passe-bassin-puissance.ts b/src/app/formulaire/definition/concrete/form-passe-bassin-puissance.ts index 31d2a8639..ba57242df 100644 --- a/src/app/formulaire/definition/concrete/form-passe-bassin-puissance.ts +++ b/src/app/formulaire/definition/concrete/form-passe-bassin-puissance.ts @@ -24,10 +24,6 @@ export class FormulairePasseBassinPuissance extends FormulaireDefinition { this._formCompute = new FormComputeFixedVar(this, this._formResult); } - protected get defaultProperties(): {} { - return { "calcType": CalculatorType.PabPuissance, "nodeType": ComputeNodeType.None }; - } - protected initParse() { this._formParamCalc.initParse(); } diff --git a/src/app/formulaire/definition/concrete/form-regime-uniforme.ts b/src/app/formulaire/definition/concrete/form-regime-uniforme.ts index 50e7aeff7..db3fd0e69 100644 --- a/src/app/formulaire/definition/concrete/form-regime-uniforme.ts +++ b/src/app/formulaire/definition/concrete/form-regime-uniforme.ts @@ -28,15 +28,16 @@ export class FormulaireRegimeUniforme extends FormulaireDefinition implements Ob this._formCompute = new FormComputeFixedVar(this, this._formResult); } - protected get defaultProperties(): {} { - return { "calcType": CalculatorType.RegimeUniforme, "nodeType": ComputeNodeType.SectionCercle }; - } + // protected get defaultProperties(): {} { + // return { "calcType": CalculatorType.RegimeUniforme, "nodeType": ComputeNodeType.SectionCercle }; + // } protected initParse() { this._formParamCalc.initParse(); } protected parseOptions(json: {}) { + super.parseOptions(json); this._formSection.parseOptions(json); } diff --git a/src/app/formulaire/definition/concrete/form-section-parametree.ts b/src/app/formulaire/definition/concrete/form-section-parametree.ts index 1f14c0f66..6f3fa0391 100644 --- a/src/app/formulaire/definition/concrete/form-section-parametree.ts +++ b/src/app/formulaire/definition/concrete/form-section-parametree.ts @@ -29,11 +29,8 @@ export class FormulaireSectionParametree extends FormulaireDefinition { this._formCompute = new FormComputeSectionParametree(this, this._formSection, this._formSectionResult); } - protected get defaultProperties(): {} { - return { "calcType": CalculatorType.SectionParametree, "nodeType": ComputeNodeType.SectionCercle }; - } - protected parseOptions(json: {}) { + super.parseOptions(json); this._formSection.parseOptions(json); } diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts index 1a4340300..c9d050696 100644 --- a/src/app/formulaire/definition/form-definition.ts +++ b/src/app/formulaire/definition/form-definition.ts @@ -30,6 +30,11 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs */ protected _currentSessionNub: SessionNub; + /** + * propriétés par défaut (lues si _currentSessionNub === undefined ) + */ + private _props = {}; + /** * fichier de configuration */ @@ -69,7 +74,9 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return this._jsonConfig; } - protected abstract get defaultProperties(): {}; + public get defaultProperties() { + return this._props; + } public initSessionNub(props?: {}) { this._currentSessionNub = this.createSessionNub(props === undefined ? this.defaultProperties : props); @@ -79,6 +86,12 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs return this._currentSessionNub; } + public set currentSessionNub(n: SessionNub) { + if (this._props["calcType"] !== n.properties.getPropValue("calcType")) + throw new Error(`Nub ${n.properties["calcType"]} incompatible avec le formulaire ${this._calculatorName} (${this._props["calcType"]})`); + this._currentSessionNub = n; + } + private findNub(params: Props | {}) { return this._paramService.findSessionNub(params); } @@ -99,7 +112,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } protected replaceCurrentSessionNub(params: Props) { - this._currentSessionNub = this._paramService.replaceSessionNub(this._currentSessionNub, params); + this.currentSessionNub = this._paramService.replaceSessionNub(this._currentSessionNub, params); } protected replaceSessionNub(sn: SessionNub, params: Props): SessionNub { @@ -128,6 +141,8 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } protected parseOptions(json: {}) { + const dnt = json["defaultNodeType"]; + this._props["nodeType"] = dnt === undefined ? ComputeNodeType.None : ComputeNodeType[dnt]; } protected completeParse(json: {}) { @@ -196,7 +211,10 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } } - public parseConfig(json: {}) { + /** + * 1ère passe d'analyse de la configuration + */ + public preparseConfig(json: {}) { this._jsonConfig = json; this.initParse(); @@ -213,13 +231,21 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs break; } } + } + + /** + * 2ème passe d'analyse de la configuration + */ + public parseConfig(json: {}) { + if (json !== undefined) + this._jsonConfig = json; // analyse des éléments du formulaire const templates: any[] = []; - for (let conf_index in json) { - const conf = json[conf_index]; + for (let conf_index in this._jsonConfig) { + const conf = this._jsonConfig[conf_index]; const type: string = conf["type"]; switch (type) { @@ -244,7 +270,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs } } - this.completeParse(json); + this.completeParse(this._jsonConfig); // console.log("-----"); @@ -257,7 +283,7 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs // logObject(this._fieldSets, "fieldsets"); // logObject(this._dependencies, "dependences"); - this.parseDependencies(json); + this.parseDependencies(this._jsonConfig); } public hasParameter(symbol: string): boolean { diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index 949e1a886..c51afc628 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -113,13 +113,9 @@ export class FormulaireService extends Observable { return this._intlService.localizeText(`INFO_${sCalculator}_TITRE`); } - private loadConfig(form: FormulaireDefinition, ct: CalculatorType): Promise<Response> { - let processData = function (s: string) { - form.parseConfig(JSON.parse(s)); - } - + public loadConfig(ct: CalculatorType): Promise<any> { let f: string = this.getConfigPathPrefix(ct) + "config.json" - return this._httpService.httpGetRequest(undefined, undefined, undefined, f, processData); + return this._httpService.httpGetRequest2(undefined, undefined, undefined, f); } private newFormulaire(ct: CalculatorType, jsonState?: {}): FormulaireDefinition { @@ -165,12 +161,7 @@ export class FormulaireService extends Observable { throw new Error(`FormulaireService.createFormulaire() : type de calculette ${ct} non pris en charge`) } - if (jsonState !== undefined) { - const props = jsonState["props"]; - f.initSessionNub(props); - } - else - f.initSessionNub(); + f.defaultProperties["calcType"] = ct; return f; } @@ -181,15 +172,26 @@ export class FormulaireService extends Observable { * @param jsonState */ public createFormulaire(ct: CalculatorType, jsonState?: {}): Promise<FormulaireDefinition> { - const f: FormulaireDefinition = this.newFormulaire(ct, jsonState); - - if (jsonState === undefined) - f.calculatorName = decode(this.getLocalisedTitleFromCalculatorType(ct) + " (" + f.uid + ")"); + const f: FormulaireDefinition = this.newFormulaire(ct); this._formulaires.push(f); - let prom: Promise<Response> = this.loadConfig(f, ct); - return prom.then(_ => { - if (jsonState !== undefined) + + let prom: Promise<any> = this.loadConfig(ct); + return prom.then(s => { + f.preparseConfig(JSON.parse(s)); + return f; + }).then(f => { + if (jsonState === undefined) { + f.calculatorName = decode(this.getLocalisedTitleFromCalculatorType(ct) + " (" + f.uid + ")"); + f.initSessionNub(); + } + else { f.deserialiseJSON(jsonState); + const props = jsonState["props"]; + f.initSessionNub(props); + } + return f; + }).then(f => { + f.parseConfig(undefined); return f; }).then(f => { this.loadUpdateFormulaireLocalisation(f); diff --git a/src/app/services/http/http.service.ts b/src/app/services/http/http.service.ts index 74c4dae34..d99733819 100644 --- a/src/app/services/http/http.service.ts +++ b/src/app/services/http/http.service.ts @@ -18,11 +18,17 @@ export class HttpService { return s1 + s2; } + /** + * construit, lance une requête GET et applique un callback sur le résultat + * @param processDataCallback callback en cas de succès + * @param errorCallback callback en cas d'erreur + * @see httpGetRequestResponse + */ public httpGetRequest(protocol: string, host: string, port: number, path: string, processDataCallback: (s: string) => void, errorCallback?: (err: any) => void, headers?: StringMap): Promise<Response> { - let resp: Observable<Response> = this.httpGetRequestResponse(protocol, host, port, path); + let resp: Observable<Response> = this.httpGetRequestResponse(protocol, host, port, path, headers); resp.map(res => res.text()) .subscribe( @@ -34,6 +40,22 @@ export class HttpService { return resp.toPromise(); } + /** + * construit et lance une requête GET + */ + public httpGetRequest2(protocol: string, host: string, port: number, path: string): Promise<any> { + let resp: Observable<Response> = this.httpGetRequestResponse(protocol, host, port, path); + return resp.map(res => res.text()).toPromise(); + } + + /** + * construit et lance une requête GET + * @param protocol type de protocole (http, ...) + * @param host nom d'hôte distant + * @param port numéro de port distant + * @param path chemin de la ressource + * @param headers entêtes de la requête + */ public httpGetRequestResponse(protocol: string, host: string, port: number, path: string, headers?: StringMap): Observable<Response> { let url: string; if (protocol != undefined) -- GitLab From 143875c972ff5d9d17f6a23d1e69735150c19f01 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Tue, 3 Jul 2018 15:26:22 +0200 Subject: [PATCH 12/14] #43 fichier de config de Dever : ajout de labels manquants --- src/app/calculators/dever/dever.fr.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/app/calculators/dever/dever.fr.json b/src/app/calculators/dever/dever.fr.json index 6f526e0a5..7b6fb261a 100644 --- a/src/app/calculators/dever/dever.fr.json +++ b/src/app/calculators/dever/dever.fr.json @@ -11,6 +11,8 @@ "select_ouvrage_seuil_rect": "Seuil rectangulaire", "select_ouvrage_seuil_trap": "Seuil trapézoïdal", "select_ouvrage_vanne_trap": "Vanne trapézoïdale", + "select_ouvrage_seuil_triang": "Seuil triangulaire", + "select_ouvrage_seuil_triangtrunc": "Seuil triangulaire tronqué", "W": "Ouverture de vanne", "select_loidebit1": "Loi de débit", "select_loidebit1_seuildenoye": "Seuil dénoyé", @@ -24,6 +26,10 @@ "select_loidebit2_cunge80": "Cunge 80", "select_loidebit2_cem88d": "Déversoir/Orifice Cemagref 88", "select_loidebit2_cem88v": "Déversoir/Vanne de fond Cemagref 88", + "select_loidebit3": "Loi de débit", + "select_loidebit3_seuiltriang": "Seuil triangulaire", + "select_loidebit4": "Loi de débit", + "select_loidebit4_seuiltriangtrunc": "Seuil triangulaire tronqué", "ZDV": "Cote de la crête du déversoir ou du radier de la vanne", "L": "Largeur du déversoir", "Cd": "Coefficient de débit", -- GitLab From 2c4251c5ee96036d99bc98904c69009d9e8882e1 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Tue, 3 Jul 2018 16:18:13 +0200 Subject: [PATCH 13/14] =?UTF-8?q?=20#43=20FieldsetTemplate=20:=20ajout=20d?= =?UTF-8?q?e=20defaultStructTypeFromConfig/defaultLoiDebitFromConfig,=20im?= =?UTF-8?q?pl=C3=A9mentation=20de=20calcTypeFromConfig/defaultNodeTypeFrom?= =?UTF-8?q?Config=20sur=20le=20m=C3=AAme=20mod=C3=A8le.=20-=20FieldSet=20:?= =?UTF-8?q?=20suppression=20de=20defaultProps()/makeDefaultProps()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concrete/form-parallel-structures.ts | 12 +++++-- src/app/formulaire/fieldset-template.ts | 34 ++++++++----------- src/app/formulaire/fieldset.ts | 33 ------------------ 3 files changed, 24 insertions(+), 55 deletions(-) diff --git a/src/app/formulaire/definition/concrete/form-parallel-structures.ts b/src/app/formulaire/definition/concrete/form-parallel-structures.ts index 32bf51d11..dae370e98 100644 --- a/src/app/formulaire/definition/concrete/form-parallel-structures.ts +++ b/src/app/formulaire/definition/concrete/form-parallel-structures.ts @@ -40,11 +40,17 @@ export class FormulaireParallelStructure extends FormulaireDefinition { } private createStructNub(templ: FieldsetTemplate): SessionNub { - // valeurs par défaut de CalculatorType, ComputeNodeType, StructureType, LoiDebit - // !!! attention !!! pour l'instant, il doit y avoir cohérence entre ces valeurs et celles du fichier de conf + // !!! attention !!! + // Il doit y avoir cohérence dans le fichier de conf entre les valeurs defaultXXX et les valeurs possibles pour les select // cad valeur par défaut du 1er select (type d'ouvrage), du 2ème (loi de débit). // A terme, il faudrait analyser le fichier de conf (dépendances d'existence) pour déterminer automatiquement ces valeurs - const params = FieldSet.makeDefaultProps(templ.calcTypeFromConfig, templ.defaultNodeTypeFromConfig); + + const params = {}; + params["calcType"] = templ.calcTypeFromConfig; + params["nodeType"] = templ.defaultNodeTypeFromConfig; + params["structureType"] = templ.defaultStructTypeFromConfig; + params["loiDebit"] = templ.defaultLoiDebitFromConfig; + return this.createSessionNub(params); } diff --git a/src/app/formulaire/fieldset-template.ts b/src/app/formulaire/fieldset-template.ts index ce3fcf353..8ba2da3ba 100644 --- a/src/app/formulaire/fieldset-template.ts +++ b/src/app/formulaire/fieldset-template.ts @@ -1,5 +1,5 @@ import { FieldSet } from "./fieldset"; -import { CalculatorType, ComputeNodeType } from "jalhyd"; +import { CalculatorType, ComputeNodeType, StructureType, LoiDebit } from "jalhyd"; import { FormulaireDefinition } from "./definition/form-definition"; import { FieldsetContainer } from "./fieldset-container"; @@ -15,27 +15,23 @@ export class FieldsetTemplate { } public get calcTypeFromConfig(): CalculatorType { - for (const k in this._jsonConfig) { - if (k === "calcType") { - const ct: string = this._jsonConfig[k]; - var calcType: CalculatorType = CalculatorType[ct]; - break; - } - } - - return calcType; + const ct: string = this._jsonConfig["calcType"]; + return CalculatorType[ct]; } public get defaultNodeTypeFromConfig(): ComputeNodeType { - for (const k in this._jsonConfig) { - if (k === "defaultNodeType") { - const nt: string = this._jsonConfig[k]; - var nodeType: ComputeNodeType = ComputeNodeType[nt]; - break; - } - } - - return nodeType; + const nt: string = this._jsonConfig["defaultNodeType"]; + return ComputeNodeType[nt]; + } + + public get defaultStructTypeFromConfig(): StructureType { + const st: string = this._jsonConfig["defaultStructType"]; + return StructureType[st]; + } + + public get defaultLoiDebitFromConfig(): LoiDebit { + const ld: string = this._jsonConfig["defaultLoiDebit"]; + return LoiDebit[ld]; } /** diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts index fefcb06c4..af553da83 100644 --- a/src/app/formulaire/fieldset.ts +++ b/src/app/formulaire/fieldset.ts @@ -121,39 +121,6 @@ export class FieldSet extends FormulaireElement implements Observer { return this._props.setPropValue(key, val, this); } - /** - * valeurs par défaut pour StructureType, LoiDebit en fonction d'un ComputeNodeType - */ - private static defaultProps(nodeType: ComputeNodeType): [StructureType, LoiDebit] { - let structType: StructureType; - let loiDebit: LoiDebit - switch (nodeType) { - case ComputeNodeType.StructureRectangle: - structType = StructureType.VanneRectangulaire; - loiDebit = LoiDebit.Cem88v; - break; - } - return [structType, loiDebit]; - } - - /** - * crée un objet Props servant de filtre pour sélectionner un Nub - * @param calcType - * @param nodeType - */ - public static makeDefaultProps(calcType: CalculatorType, nodeType: ComputeNodeType): Props { - const res: Props = new Props(); - - res.setPropValue("calcType", calcType); - res.setPropValue("nodeType", nodeType); - - const p: [StructureType, LoiDebit] = FieldSet.defaultProps(nodeType); - res.setPropValue("structureType", p[0]); - res.setPropValue("loiDebit", p[1]); - - return res; - } - private getNubParamFromSymbol(symbol: string): ParamDefinition { return this._sessionNub.nub.getParameter(symbol); } -- GitLab From 293c8621289e88ee1c3324b155c28f9bc4badda4 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Wed, 4 Jul 2018 10:45:31 +0200 Subject: [PATCH 14/14] #43 FormDefParallelStructures : suppression du code inutile --- .../form-def-parallel-structures.ts | 52 ------------------- 1 file changed, 52 deletions(-) diff --git a/src/app/formulaire/definition/form-def-parallel-structures.ts b/src/app/formulaire/definition/form-def-parallel-structures.ts index e26992be7..a4856994d 100644 --- a/src/app/formulaire/definition/form-def-parallel-structures.ts +++ b/src/app/formulaire/definition/form-def-parallel-structures.ts @@ -6,56 +6,4 @@ import { FieldSet } from "../fieldset"; * gestion des formulaires "ouvrages parallèles" */ export class FormDefParallelStructures { - /** - * dictionnaire des types d'ouvrages indexés par les valeurs de liste déroulante - * la clé est la chaîne utilisée dans le fichier de configuration de la calculette pour les valeurs de la liste déroulante - */ - private static tsMap = { - "vanne_rect": StructureType.VanneRectangulaire, - "seuil_rect": StructureType.SeuilRectangulaire - } - - /** - * dictionnaire des LoiDebit indexés par les valeurs de liste déroulante - * la clé est la chaîne utilisée dans le fichier de configuration de la calculette pour les valeurs de la liste déroulante - */ - private static ldMap = { - "cem88d": LoiDebit.Cem88d, - "cem88v": LoiDebit.Cem88d, - "cunge80": LoiDebit.Cunge80, - "seuildenoye": LoiDebit.WeirFree, - "vannenoye": LoiDebit.OrificeSubmerged, - "vannedenoye": LoiDebit.OrificeFree, - "kivi": LoiDebit.KIVI - } - - /** - * @return type d'ouvrage courant du FieldSet donné - */ - public getStructureType(fs: FieldSet): StructureType { - let structType: string = fs.getSelectedValue("select_ouvrage"); - if (structType == undefined) - throw new Error(`FormDefParallelStructures.getStructureType() : aucun ouvrage trouvé dans le FieldSet`); - - const res = FormDefParallelStructures.tsMap[structType]; - if (res == undefined) - throw new Error(`FormDefParallelStructures.getStructureType() : type d'ouvrage ${StructureType[structType]} non pris en charge`); - return res; - } - - /** - * @return loi de débit courante du FieldSet donné - */ - public getLoiDebit(fs: FieldSet): LoiDebit { - let loiDebit: string = fs.getSelectedValue("select_loidebit1"); - if (loiDebit == undefined) - loiDebit = fs.getSelectedValue("select_loidebit2"); - if (loiDebit == undefined) - throw new Error(`FormDefParallelStructures.getStructureType() : aucune loi de débit trouvée dans le FieldSet`); - - const res = FormDefParallelStructures.ldMap[loiDebit]; - if (res == undefined) - throw new Error(`FormDefParallelStructures.getStructureType() : loi de débit ${LoiDebit[loiDebit]} non prise en charge`); - return res; - } } -- GitLab