From cc50553197e4a1c7b473523f0a1b38b61938e332 Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Mon, 26 Aug 2019 17:53:17 +0200
Subject: [PATCH] MacroRugoCompound: added ZRL, ZRR, BR for inclined apron

---
 .../macrorugo-compound.config.json            |  6 ++-
 .../macrorugo-compound.en.json                |  3 ++
 .../macrorugo-compound.fr.json                |  3 ++
 .../concrete/form-macrorugo-compound.ts       | 40 ++++++++++++++++++-
 src/app/formulaire/fieldset.ts                |  1 -
 src/app/formulaire/select-field.ts            |  4 +-
 6 files changed, 52 insertions(+), 5 deletions(-)

diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json
index 6a05f9cc3..0f7bd8eab 100644
--- a/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json
+++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.config.json
@@ -33,12 +33,16 @@
                 "id": "select_pass_type",
                 "type": "select",
                 "source": "mrc_pass_type"
-            }
+            },
+            "ZRL",
+            "ZRR",
+            "BR"
         ]
     },
     {
         "type": "options",
         "idCal": "Q",
+        "apronTypeSelectId": "select_pass_type",
         "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
index dd0ba5be3..93e85029b 100644
--- a/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json
+++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.en.json
@@ -11,6 +11,9 @@
     "PBD": "Diameter",
     "PBH": "Height",
     "Cd0": "Shape (1 for round, 2 for square)",
+    "ZRL": "Left apron elevation",
+    "ZRR": "Right apron elevation",
+    "BR": "Total width",
 
     "select_pass_type_0": "Multiple aprons",
     "select_pass_type_1": "Inclined apron"
diff --git a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json
index dc9c6c7f3..aafd40280 100644
--- a/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json
+++ b/src/app/calculators/macrorugo-compound/macrorugo-compound.fr.json
@@ -10,6 +10,9 @@
     "PBD": "Diamètre",
     "PBH": "Hauteur",
     "Cd0": "Forme (1 pour rond, 2 pour carré)",
+    "ZRL": "Cote de radier gauche",
+    "ZRR": "Cote de radier droite",
+    "BR": "Largeur totale",
 
     "select_pass_type_0": "Radiers multiples",
     "select_pass_type_1": "Radier incliné"
diff --git a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts
index 6a9404d8f..8eda5e7e6 100644
--- a/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts
+++ b/src/app/formulaire/definition/concrete/form-macrorugo-compound.ts
@@ -3,25 +3,63 @@
 import { FormulaireBase } from "./form-base";
 import { FormResultFixedVar } from "../form-result-fixedvar";
 import { FormComputeFixedVar } from "../form-compute-fixedvar";
+import { IObservable } from 'jalhyd';
+import { FieldSet } from '../../fieldset';
 
 /**
  * Formulaire pour les passes à macrorugosités complexes
  */
 export class FormulaireMacrorugoCompound extends FormulaireBase {
 
+    /** id of select configuring apron type */
+    private _apronTypeSelectId: string;
+
     constructor() {
         super();
         this._formResult = new FormResultFixedVar(this);
 
         // default properties
-        this._props["inclinedApron"] = "1";
+        this._props["inclinedApron"] = false;
 
         // remove obsolete observer set by super()
         this.removeObserver(this._formCompute);
         this._formCompute = new FormComputeFixedVar(this, (this._formResult as FormResultFixedVar));
     }
 
+    protected parseOptions(json: {}) {
+        super.parseOptions(json);
+        this._apronTypeSelectId = this.getOption(json, "apronTypeSelectId");
+    }
+
     /* public get pabNub(): Pab {
         return this.currentNub as Pab;
     } */
+
+    public afterParseFieldset(fs: FieldSet) {
+        // if Fieldset contains apron type selector
+        if (this._apronTypeSelectId) {
+            const sel = fs.getFormulaireNodeById(this._apronTypeSelectId);
+            if (sel) {
+                // on abonne le formulaire aux propriétés du FieldSet
+                fs.properties.addObserver(this);
+            }
+        }
+    }
+
+    // interface Observer
+
+    update(sender: IObservable, data: any) {
+        if (sender instanceof FieldSet && data.action === "propertyChange") {
+            switch (data.name) {
+                case "inclinedApron":
+                    // reflect changes in GUI
+                    for (const fs of this.allFieldsets) {
+                        // show / hide dependent fields
+                        fs.updateFields();
+                    }
+                    this.reset();
+                    break;
+            }
+        }
+    }
 }
diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts
index ac30f3e42..053d95f2f 100644
--- a/src/app/formulaire/fieldset.ts
+++ b/src/app/formulaire/fieldset.ts
@@ -246,7 +246,6 @@ 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}`);
diff --git a/src/app/formulaire/select-field.ts b/src/app/formulaire/select-field.ts
index a4ad51902..bcf8cc69c 100644
--- a/src/app/formulaire/select-field.ts
+++ b/src/app/formulaire/select-field.ts
@@ -159,8 +159,8 @@ export class SelectField extends Field {
                 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"));
+                this.addEntry(new SelectEntry(this._entriesBaseId + "0", false));
+                this.addEntry(new SelectEntry(this._entriesBaseId + "1", true));
                 break;
         }
     }
-- 
GitLab