diff --git a/src/app/calculators/verificateur/config.json b/src/app/calculators/verificateur/config.json index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..18c5d0c81b43338138856c455c2c452b43b192c9 100644 --- a/src/app/calculators/verificateur/config.json +++ b/src/app/calculators/verificateur/config.json @@ -0,0 +1,39 @@ +[ + { + "id": "fs_pass", + "type": "fieldset", + "fields": [ + { + "id": "select_target_pass", + "type": "select_reference", + "reference": "nub", + "source": "verificateur_target" + }, + { + "type": "select", + "id": "select_pab_jet_type", + "property": "pabJetType", + "default": "SURFACE" + } + ] + }, + { + "id": "fs_species", + "type": "fieldset", + "fields": [ + { + "type": "select", + "id": "select_species_list", + "property": "speciesList", + "default": "SPECIES_1" + } + ] + }, + { + "type": "options", + "selectIds": [ "select_pab_jet_type" ], + "targetPassSelectId": "select_target_pass", + "speciesListSelectId": "select_species_list", + "help": "verification/verificateur.html" + } +] diff --git a/src/app/calculators/verificateur/en.json b/src/app/calculators/verificateur/en.json new file mode 100644 index 0000000000000000000000000000000000000000..eb48e983534bc5a83f22f944946958989c632053 --- /dev/null +++ b/src/app/calculators/verificateur/en.json @@ -0,0 +1,13 @@ +{ + "fs_pass": "Fish pass parameters", + + "select_target_pass": "Fish pass to verify", + + "select_pab_jet_type": "Jet type (PAB)", + "select_pab_jet_type_0": "Diving", + "select_pab_jet_type_1": "Surface", + + "fs_species": "Species parameters", + + "select_species_list": "Species groups" +} diff --git a/src/app/calculators/verificateur/fr.json b/src/app/calculators/verificateur/fr.json new file mode 100644 index 0000000000000000000000000000000000000000..13b6430de34ec99f1e365468b50041044f551c11 --- /dev/null +++ b/src/app/calculators/verificateur/fr.json @@ -0,0 +1,13 @@ +{ + "fs_pass": "Paramètres de la passe", + + "select_target_pass": "Passe à vérifier", + + "select_pab_jet_type": "Type de jet (PAB)", + "select_pab_jet_type_0": "Plongeant", + "select_pab_jet_type_1": "Surface", + + "fs_species": "Paramètres des espèces", + + "select_species_list": "Groupes d'espèces" +} diff --git a/src/app/formulaire/definition/form-verificateur.ts b/src/app/formulaire/definition/form-verificateur.ts new file mode 100644 index 0000000000000000000000000000000000000000..50560319a8a37fff9cb39fc273ddb48134035a81 --- /dev/null +++ b/src/app/formulaire/definition/form-verificateur.ts @@ -0,0 +1,91 @@ +import { IObservable, Nub } from "jalhyd"; + +import { SelectFieldNub } from "../elements/select-field-nub"; +import { FormulaireFixedVar } from "./form-fixedvar"; + +/** + * Formulaire pour les Vérificateurs + */ +export class FormulaireVerificateur extends FormulaireFixedVar { + + /** id of select configuring target pass Nub */ + private _targetPassSelectId: string; + + /** id of select configuring list of species */ + private _speciesListSelectId: string; + + protected parseOptions(json: {}) { + super.parseOptions(json); + this._targetPassSelectId = this.getOption(json, "targetPassSelectI"); + this._speciesListSelectId = this.getOption(json, "speciesListSelectId"); + } + + protected completeParse(json: {}, firstNotif: boolean = true) { + super.completeParse(json); + if (this._targetPassSelectId) { + const sel = this.getFormulaireNodeById(this._targetPassSelectId); + if (sel) { + sel.addObserver(this); + if (firstNotif) { + // force 1st observation + (sel as SelectFieldNub).notifySelectValueChanged(); + } + } + } + if (this._speciesListSelectId) { + const sel = this.getFormulaireNodeById(this._speciesListSelectId); + /* if (sel) { + sel.addObserver(this); + if (firstNotif) { + // force 1st observation + (sel as SelectFieldNub).notifySelectValueChanged(); + } + } */ + } + + } + + // interface Observer + + public update(sender: IObservable, data: any) { + // copied from FormDefinition, to avoid calling super.update() + if (sender instanceof Nub) { + switch (data.action) { + case "resultUpdated": + // forward Nub results update notification to FormCompute objects + this.reaffectResultComponents(); + break; + } + } + // copied from FormFixedVar, to avoid calling super.update() + if (data.action === "propertyChange") { + this.reset(); + } + + if (sender instanceof SelectFieldNub) { + if (data.action === "select") { + // update Verificateur property: Pass to check + this._currentNub.properties.setPropValue("nubToVerify", data.value.value); + // @TODO refresh jet type selector + } + }/* else if (sender instanceof SelectField) { + if (sender.id === "select_target_result") { + // refresh parameters selector + this.refreshParameterEntries(); + } + } */ + } + + /** + * Re-populate searched parameter selector with fresh entries + */ + /* private refreshParameterEntries() { + const pSel = this.getFormulaireNodeById(this._speciesListSelectId) as SelectFieldParameter; + if (pSel) { + pSel.updateEntries(); + // reflect changes in GUI + const inputYtarget = this.getFormulaireNodeById("Ytarget") as NgParameter; + inputYtarget.notifyValueModified(this); + } + } */ +} diff --git a/src/app/formulaire/elements/select-field-nub.ts b/src/app/formulaire/elements/select-field-nub.ts index 3cbcf0720c2fc42257292ebaf60c89cb202cdd88..c4c2d18baeceb5bd79bbceb06c2bfddc04c665d9 100644 --- a/src/app/formulaire/elements/select-field-nub.ts +++ b/src/app/formulaire/elements/select-field-nub.ts @@ -3,7 +3,7 @@ import { SelectEntry } from "./select-entry"; import { ServiceFactory } from "../../services/service-factory"; import { decodeHtml } from "../../util"; -import { Session, Solveur } from "jalhyd"; +import { Session, Solveur, FishPass, CalculatorType } from "jalhyd"; /** * A select field that populates itself with references to Nubs @@ -24,11 +24,12 @@ export class SelectFieldNub extends SelectFieldReference { * Populates entries with available references */ protected populate() { + const fs = ServiceFactory.instance.formulaireService; + let candidateNubs: any[]; switch (this._source) { case "solveur_target": // Solveur, module cible (à calculer) // find all Nubs having at least one link to another Nub's result - const fs = ServiceFactory.instance.formulaireService; - const candidateNubs = + candidateNubs = Session.getInstance().getDownstreamNubs().concat( Session.getInstance().getUpstreamNubsHavingExtraResults() ).filter( @@ -50,6 +51,25 @@ export class SelectFieldNub extends SelectFieldReference { } } break; + + case "verificateur_target": // Vérificateur, passe cible (à vérifier) + // find all Nubs of type FishPass + candidateNubs = Session.getInstance().getAllNubs().filter((element, index, self) => { + return ( + (element instanceof FishPass) + && element.calcType !== CalculatorType.Par // ParSimulation extends Par @TODO find something better + ); + }); + for (const cn of candidateNubs) { + const nub = fs.getFormulaireFromId(cn.uid); + if (nub) { + const label = nub.calculatorName + " (" + fs.getLocalisedTitleFromCalculatorType(nub.calculatorType) + ")"; + this.addEntry(new SelectEntry(this._entriesBaseId + cn.uid, cn.uid, decodeHtml(label))); + } else { + // silent fail, this Verificateur nub was probably loaded before all the candidate nubs are done loading + } + } + break; } } diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 101572ca12f6d88a4cc3658d284cf375357e3f4b..6be778881a247358d41619eb3170b15649c21f5d 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -40,6 +40,7 @@ import { AppComponent } from "../app.component"; import { FormulaireSPP } from "../formulaire/definition/form-spp"; import { FormulaireFixedVar } from "../formulaire/definition/form-fixedvar"; import { FormulaireSection } from "../formulaire/definition/form-section"; +import { FormulaireVerificateur } from '../formulaire/definition/form-verificateur'; @Injectable() export class FormulaireService extends Observable { @@ -307,6 +308,10 @@ export class FormulaireService extends Observable { f = new FormulaireSPP(); break; + case CalculatorType.Verificateur: + f = new FormulaireVerificateur(); + break; + default: f = new FormulaireFixedVar(); } diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index fe1494fd0242d3a6eaa1f5574616e2bb2f78a297..35ed945ba89fca8459159634fad064055979be55 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -144,9 +144,9 @@ "INFO_ENUM_STRUCTUREFLOWREGIME_1": "Partially submerged", "INFO_ENUM_STRUCTUREFLOWREGIME_2": "Submerged", "INFO_ENUM_STRUCTUREFLOWREGIME_3": "Zero flow", - "INFO_ENUM_STRUCTUREJETTYPE_0": "Not applicable", - "INFO_ENUM_STRUCTUREJETTYPE_1": "Diving", - "INFO_ENUM_STRUCTUREJETTYPE_2": "Surface", + "INFO_ENUM_STRUCTUREJETTYPE_0": "Diving", + "INFO_ENUM_STRUCTUREJETTYPE_1": "Surface", + "INFO_ENUM_STRUCTUREJETTYPE_2": "Not applicable", "INFO_CHART_BUTTON_TITLE_RESET_ZOOM": "Restore default zoom", "INFO_CHART_BUTTON_TITLE_EXPORT_IMAGE": "Save picture", "INFO_CHART_BUTTON_TITLE_ENTER_FS": "Display fullscreen", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 77aeae0e9ccc99b0cc49bfb80cf1e08de9417e71..260890161e36c6217128d2a3c0e4c09530eaf2ac 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -144,9 +144,9 @@ "INFO_ENUM_STRUCTUREFLOWREGIME_1": "Partiellement noyé", "INFO_ENUM_STRUCTUREFLOWREGIME_2": "Noyé", "INFO_ENUM_STRUCTUREFLOWREGIME_3": "Débit nul", - "INFO_ENUM_STRUCTUREJETTYPE_0": "Sans objet", - "INFO_ENUM_STRUCTUREJETTYPE_1": "Plongeant", - "INFO_ENUM_STRUCTUREJETTYPE_2": "De surface", + "INFO_ENUM_STRUCTUREJETTYPE_0": "Plongeant", + "INFO_ENUM_STRUCTUREJETTYPE_1": "De surface", + "INFO_ENUM_STRUCTUREJETTYPE_2": "Sans objet", "INFO_CHART_BUTTON_TITLE_RESET_ZOOM": "Réinitialiser le zoom", "INFO_CHART_BUTTON_TITLE_EXPORT_IMAGE": "Enregistrer l'image", "INFO_CHART_BUTTON_TITLE_ENTER_FS": "Afficher en plein écran",