From 7fbdbd758fca071d06233e0788a1ab33033e8e13 Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Mon, 26 Aug 2019 12:29:30 +0200 Subject: [PATCH] Added skeleton for MacrorugoCompound --- README.md | 2 + .../macrorugo-compound.config.json | 44 +++++++++++++++++++ .../macrorugo-compound.en.json | 17 +++++++ .../macrorugo-compound.fr.json | 16 +++++++ .../calculator-list.component.ts | 9 ++++ src/app/config.json | 2 +- .../concrete/form-macrorugo-compound.ts | 27 ++++++++++++ src/app/formulaire/fieldset.ts | 7 +++ src/app/formulaire/select-field.ts | 5 +++ .../services/formulaire/formulaire.service.ts | 18 ++++++++ src/locale/messages.en.json | 2 + src/locale/messages.fr.json | 2 + 12 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 src/app/calculators/macrorugo-compound/macrorugo-compound.config.json create mode 100644 src/app/calculators/macrorugo-compound/macrorugo-compound.en.json create mode 100644 src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json create mode 100644 src/app/formulaire/definition/concrete/form-macrorugo-compound.ts diff --git a/README.md b/README.md index b2537cfd8..626235967 100644 --- a/README.md +++ b/README.md @@ -274,6 +274,8 @@ Custom Material SVG Icons will only show up when the application is deployed on 5. **Si une nouvelle classe a été créée à l'étape 2**, dans la méthode _FormulaireService.newFormulaire()_, compléter le _switch_ pour fournir la classe à instancier. +6. Dans `config.json`, ajouter si nécessaire le numéro de CalculatorType à un ou plusieurs thèmes afin de classer le module sur la page de liste; dans le cas contraire le nouveau module apparaîtra dans une section "Autres" + # Create PDF from documentation ```sh diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json new file mode 100644 index 000000000..6a05f9cc3 --- /dev/null +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json @@ -0,0 +1,44 @@ +[ + { + "id": "fs_hydraulique", + "type": "fieldset", + "fields": [ + "Z1", + "DH" + ] + }, + { + "id": "fs_pass", + "type": "fieldset", + "fields": [ + "If", + "Ks", + "C" + ] + }, + { + "id": "fs_bloc", + "type": "fieldset", + "fields": [ + "PBD", + "PBH", + "Cd0" + ] + }, + { + "id": "fs_pass_type", + "type": "fieldset", + "fields": [ + { + "id": "select_pass_type", + "type": "select", + "source": "mrc_pass_type" + } + ] + }, + { + "type": "options", + "idCal": "Q", + "help": "pam/macrorugo-compound" + } +] \ No newline at end of file diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json new file mode 100644 index 000000000..dd0ba5be3 --- /dev/null +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json @@ -0,0 +1,17 @@ +{ + "fs_hydraulique": "Hydraulic parameters", + "fs_pass": "Fish pass parameters", + "fs_bloc": "Blocks parameters", + "fs_pass_type": "Pass type", + + "select_pass_type": "Pass type", + "If": "Slope", + "Ks": "Bottom roughness", + "C": "Block concentration", + "PBD": "Diameter", + "PBH": "Height", + "Cd0": "Shape (1 for round, 2 for square)", + + "select_pass_type_0": "Multiple aprons", + "select_pass_type_1": "Inclined apron" +} \ No newline at end of file diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json new file mode 100644 index 000000000..dc9c6c7f3 --- /dev/null +++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json @@ -0,0 +1,16 @@ +{ + "fs_hydraulique": "Paramètres hydrauliques", + "fs_pass": "Paramètres de la passe", + "fs_bloc": "Paramètres des blocs", + "fs_pass_type": "Type de passe", + "select_pass_type": "Type de passe", + "If": "Pente", + "Ks": "Rugosité de fond", + "C": "Concentration de blocs", + "PBD": "Diamètre", + "PBH": "Hauteur", + "Cd0": "Forme (1 pour rond, 2 pour carré)", + + "select_pass_type_0": "Radiers multiples", + "select_pass_type_1": "Radier incliné" +} \ No newline at end of file diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index d58d2758e..a33f00de6 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -119,6 +119,15 @@ export class CalculatorListComponent implements OnInit { } } } + // @TODO on ajoute un ouvrage après l'ouverture du module de calcul "passe à macrorugosités complexe" + /* if (f instanceof FormulaireMacrorugoCompound) { + for (const e of f.allFormElements) { + if (e instanceof FieldsetContainer) { + e.addFromTemplate(0); + break; + } + } + } */ }); } diff --git a/src/app/config.json b/src/app/config.json index 5160a729c..1d9710c5d 100644 --- a/src/app/config.json +++ b/src/app/config.json @@ -24,7 +24,7 @@ "title": "Passe à poisson sur le petit Buech, seuil de Chiala ou des Savoillons", "credits": "Catherine Tailleux / Irstea" }, - "calculators": [ 11 ] + "calculators": [ 11, 17 ] }, { "name": "HYDRAULIQUE_A_SURFACE_LIBRE", diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts new file mode 100644 index 000000000..6a9404d8f --- /dev/null +++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts @@ -0,0 +1,27 @@ +// import { Pab } from "jalhyd"; + +import { FormulaireBase } from "./form-base"; +import { FormResultFixedVar } from "../form-result-fixedvar"; +import { FormComputeFixedVar } from "../form-compute-fixedvar"; + +/** + * Formulaire pour les passes à macrorugosités complexes + */ +export class FormulaireMacrorugoCompound extends FormulaireBase { + + constructor() { + super(); + this._formResult = new FormResultFixedVar(this); + + // default properties + this._props["inclinedApron"] = "1"; + + // remove obsolete observer set by super() + this.removeObserver(this._formCompute); + this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar)); + } + + /* public get pabNub(): Pab { + return this.currentNub as Pab; + } */ +} diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts index fcfbb4e88..ac30f3e42 100644 --- a/src/app/formulaire/fieldset.ts +++ b/src/app/formulaire/fieldset.ts @@ -227,6 +227,9 @@ export class FieldSet extends FormulaireElement implements Observer { this.setSelectValueFromProperty("select_target", "varCalc"); break; + case "fs_pass_type": // macro-rugo complexe + this.setSelectValueFromProperty("select_pass_type", "inclinedApron"); + break; } } @@ -243,6 +246,7 @@ export class FieldSet extends FormulaireElement implements Observer { } const selectElement = selectField.getSelectedEntryFromValue(propVal); try { + console.log(`setting propval ${propVal} (propKey ${propertyKey}) on select ${selectId}`, selectElement, selectField); selectField.setValue(selectElement); } catch (e) { console.error(`setSelectValueFromProperty: cannot set value ${propVal} on <select> ${selectId}`); @@ -358,6 +362,9 @@ export class FieldSet extends FormulaireElement implements Observer { case "select_target": // courbes de remous, variable à calculer this.setPropValue("varCalc", data.value.value); break; + case "select_pass_type": // macro-rugo complexe + this.setPropValue("inclinedApron", data.value.value); + break; } break; } diff --git a/src/app/formulaire/select-field.ts b/src/app/formulaire/select-field.ts index 7e87dd83b..a4ad51902 100644 --- a/src/app/formulaire/select-field.ts +++ b/src/app/formulaire/select-field.ts @@ -157,6 +157,11 @@ export class SelectField extends Field { this.addEntry(e); } break; + + case "mrc_pass_type": // macrorugo complexe: type de radier + this.addEntry(new SelectEntry(this._entriesBaseId + "0", "0")); + this.addEntry(new SelectEntry(this._entriesBaseId + "1", "1")); + break; } } } diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index c88c9681a..31708213d 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -35,6 +35,7 @@ import { FieldsetContainer } from "../..//formulaire/fieldset-container"; import { ApplicationSetupService } from "../app-setup/app-setup.service"; import { NotificationsService } from "../notifications/notifications.service"; import { FormulairePab } from "../../formulaire/definition/concrete/form-pab"; +import { FormulaireMacrorugoCompound } from "../../formulaire/definition/concrete/form-macrorugo-compound"; @Injectable() export class FormulaireService extends Observable { @@ -75,6 +76,7 @@ export class FormulaireService extends Observable { this.calculatorPaths[CalculatorType.Cloisons] = "cloisons"; this.calculatorPaths[CalculatorType.MacroRugo] = "macrorugo"; this.calculatorPaths[CalculatorType.Pab] = "pab"; + this.calculatorPaths[CalculatorType.MacroRugoCompound] = "macrorugo-compound"; } private get _intlService(): I18nService { @@ -299,6 +301,10 @@ export class FormulaireService extends Observable { f = new FormulairePab(); break; + case CalculatorType.MacroRugoCompound: + f = new FormulaireMacrorugoCompound(); + break; + default: f = new FormulaireBase(); } @@ -394,6 +400,18 @@ export class FormulaireService extends Observable { f.pabNub.downWall = newDownWall; } + // @TODO add aprons for existing Aprons if needed + // (when loading session only) + /* if (f.currentNub instanceof MacrorugoCompound) { + for (const struct of f.currentNub.structures) { + for (const e of f.allFormElements) { + if (e instanceof FieldsetContainer) { // @TODO manage many containers one day ? + e.addFromTemplate(0, undefined, struct); + } + } + } + } */ + return f; }).then(fi => { diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 08c4f8864..c3c892a83 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -261,6 +261,8 @@ "INFO_LOIDEBIT_WeirVillemonte": "Notch (Villemonte 1957)", "INFO_MACRORUGO_TITRE_COURT": "Rock-ramp", "INFO_MACRORUGO_TITRE": "Rock-ramp fishpasses (beta)", + "INFO_MACRORUGOCOMPOUND_TITRE": "Compound rock-ramp fishpasses (beta)", + "INFO_MACRORUGOCOMPOUND_TITRE_COURT": "Compound RR", "INFO_MENU_EMPTY_SESSION_TITLE": "New session", "INFO_MENU_HELP_TITLE": "Help", "INFO_MENU_LOAD_SESSION_TITLE": "Load session", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index de9d932ff..a35a29bd2 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -260,6 +260,8 @@ "INFO_LOIDEBIT_WeirVillemonte": "Échancrure (Villemonte 1957)", "INFO_MACRORUGO_TITRE_COURT": "Macro-rugo.", "INFO_MACRORUGO_TITRE": "Passe à macro-rugosités (beta)", + "INFO_MACRORUGOCOMPOUND_TITRE": "Passe à macro-rugosités complexe (beta)", + "INFO_MACRORUGOCOMPOUND_TITRE_COURT": "M-Rugo complexe", "INFO_MENU_EMPTY_SESSION_TITLE": "Nouvelle session", "INFO_MENU_HELP_TITLE": "Aide", "INFO_MENU_LOAD_SESSION_TITLE": "Charger une session", -- GitLab