From 11057ede998c3093de5373764f749add17e9f36b Mon Sep 17 00:00:00 2001 From: Mathias Chouet <mathias.chouet@irstea.fr> Date: Tue, 5 May 2020 11:46:54 +0200 Subject: [PATCH] Added new component log-drawer update Verificateur results with log-drawer --- src/app/app.module.ts | 4 +- .../log-drawer/log-drawer.component.html | 24 +++++++++ .../log-drawer/log-drawer.component.scss | 41 ++++++++++++++++ .../log-drawer/log-drawer.component.ts | 49 +++++++++++++++++++ .../pab-results-table.component.ts | 4 +- .../verificateur-results.component.html | 2 +- .../verificateur-results.component.ts | 29 ++++++++--- src/locale/messages.en.json | 27 +++++----- src/locale/messages.fr.json | 37 ++++++++------ 9 files changed, 178 insertions(+), 39 deletions(-) create mode 100644 src/app/components/log-drawer/log-drawer.component.html create mode 100644 src/app/components/log-drawer/log-drawer.component.scss create mode 100644 src/app/components/log-drawer/log-drawer.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 2fb9161a8..5d9fd69fc 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -75,13 +75,14 @@ import { PabResultsComponent } from "./components/pab-results/pab-results.compon import { VerificateurResultsComponent } from "./components/verificateur-results/verificateur-results.component"; import { PabResultsTableComponent } from "./components/pab-results/pab-results-table.component"; import { ChartTypeSelectComponent } from "./components/results-chart/chart-type.component"; -import { LogComponent } from "./components/log/log.component"; import { CalculatorListComponent } from "./components/calculator-list/calculator-list.component"; import { ApplicationSetupComponent } from "./components/app-setup/app-setup.component"; import { BaseParamInputComponent } from "./components/base-param-input/base-param-input.component"; import { FixedResultsComponent } from "./components/fixedvar-results/fixed-results.component"; import { VarResultsComponent } from "./components/fixedvar-results/var-results.component"; +import { LogComponent } from "./components/log/log.component"; import { LogEntryComponent } from "./components/log-entry/log-entry.component"; +import { LogDrawerComponent } from './components/log-drawer/log-drawer.component'; import { ParamLinkComponent } from "./components/param-link/param-link.component"; import { PabProfileChartComponent } from "./components/pab-profile-chart/pab-profile-chart.component"; import { PabTableComponent } from "./components/pab-table/pab-table.component"; @@ -211,6 +212,7 @@ const appRoutes: Routes = [ JetResultsComponent, JetTrajectoryChartComponent, LogComponent, + LogDrawerComponent, LogEntryComponent, ModulesDiagramComponent, NgParamInputComponent, diff --git a/src/app/components/log-drawer/log-drawer.component.html b/src/app/components/log-drawer/log-drawer.component.html new file mode 100644 index 000000000..4b9bbd8ee --- /dev/null +++ b/src/app/components/log-drawer/log-drawer.component.html @@ -0,0 +1,24 @@ +<div *ngIf="hasEntries"> + <div class="hyd_log_drawer"> + <!-- titre --> + <div class="titre">{{ uitextTitreJournal }}</div> + <!-- entrées du journal --> + <div class="log-entry" *ngFor="let entry of log"> + <log-entry [_message]="entry.message"></log-entry> + <div *ngIf="entry.subLog.messages.length" class="drawer"> + <div class="open-drawer"> + <span *ngIf="! entry.isOpen"> + <a (click)="entry.isOpen = true;">{{ uitextShowDetails }}</a> + </span> + <span *ngIf="entry.isOpen"> + <a (click)="entry.isOpen = false">{{ uitextHideDetails }}</a> + </span> + </div> + <div class="drawer-contents" [hidden]="! entry.isOpen"> + <log-entry *ngFor="let m of entry.subLog.messages" [_message]="m"></log-entry> + </div> + </div> + </div> + + </div> +</div> diff --git a/src/app/components/log-drawer/log-drawer.component.scss b/src/app/components/log-drawer/log-drawer.component.scss new file mode 100644 index 000000000..2ae464717 --- /dev/null +++ b/src/app/components/log-drawer/log-drawer.component.scss @@ -0,0 +1,41 @@ +:host { + display: block; +} + +.hyd_log_drawer { + margin-top: 2.5em; + border: solid #ccc 1px; + border-radius: 2px; + padding: 1em; + padding-top : 1.3em; + + > .log-entry { + margin-bottom: 1.5em; + } +} + +.titre { + background-color: white; + border: 1px solid #ccc; + border-radius: 2px; + float: left; + font-weight: bold; + margin-bottom: -1em; + margin-top: -2.3em; + padding: 0.2em 0.5em; +} + +.open-drawer { + margin-top: -6px; + + a { + // text-decoration: underline; + cursor: pointer; + } +} + +.drawer-contents { + margin-left: 1em; + border-left: solid #ddd 1px; + padding-left: 1em; +} diff --git a/src/app/components/log-drawer/log-drawer.component.ts b/src/app/components/log-drawer/log-drawer.component.ts new file mode 100644 index 000000000..2394e46b8 --- /dev/null +++ b/src/app/components/log-drawer/log-drawer.component.ts @@ -0,0 +1,49 @@ +import { Component, Input } from "@angular/core"; + +import { cLog, Message } from "jalhyd"; + +import { I18nService } from "../../services/internationalisation.service"; + +@Component({ + selector: "log-drawer", + templateUrl: "./log-drawer.component.html", + styleUrls: [ + "./log-drawer.component.scss" + ] +}) +/** le log à tiroirs ! */ +export class LogDrawerComponent { + + /** A list of log messages accompanied by a sub-log (multiple messages) */ + public log: Array<{ message: Message, subLog: cLog }>; + + // title to display above the log + @Input() + public logTitle: string; + + constructor( + private intlService: I18nService, + ) { + this.log = []; + } + + public get uitextTitreJournal(): string { + if (this.logTitle) { + return this.logTitle; + } else { + return this.intlService.localizeText("INFO_TITREJOURNAL"); + } + } + + public get hasEntries(): boolean { + return this.log !== undefined && this.log.length !== 0; + } + + public get uitextShowDetails(): string { + return this.intlService.localizeText("INFO_LOG_SHOW_DETAILS"); + } + + public get uitextHideDetails(): string { + return this.intlService.localizeText("INFO_LOG_HIDE_DETAILS"); + } +} diff --git a/src/app/components/pab-results/pab-results-table.component.ts b/src/app/components/pab-results/pab-results-table.component.ts index 8fb591b99..45418cf16 100644 --- a/src/app/components/pab-results/pab-results-table.component.ts +++ b/src/app/components/pab-results/pab-results-table.component.ts @@ -1,6 +1,6 @@ import { Component, ViewChild, ElementRef } from "@angular/core"; -import { CloisonAval, Result } from "jalhyd"; +import { CloisonAval, Result, capitalize } from "jalhyd"; import { PabResults } from "../../results/pab-results"; import { I18nService } from "../../services/internationalisation.service"; @@ -40,7 +40,7 @@ export class PabResultsTableComponent extends ResultsComponentDirective { const devices = re.sourceNub.getChildren(); const jetTypes: string[] = devices.map((device) => { const jt = device.result.resultElements[vi].getValue("ENUM_StructureJetType"); - let jetType = this.intlService.localizeText("INFO_ENUM_STRUCTUREJETTYPE_" + jt); + let jetType = capitalize(this.intlService.localizeText("INFO_ENUM_STRUCTUREJETTYPE_" + jt)); if (devices.length > 1) { // evil HTML injection in table cell (simpler) jetType = this.intlService.localizeText("INFO_LIB_FS_OUVRAGE") + " n°" diff --git a/src/app/components/verificateur-results/verificateur-results.component.html b/src/app/components/verificateur-results/verificateur-results.component.html index dbe866617..1d0f78479 100644 --- a/src/app/components/verificateur-results/verificateur-results.component.html +++ b/src/app/components/verificateur-results/verificateur-results.component.html @@ -4,5 +4,5 @@ <variable-results-selector [results]="verificateurResults" (indexChange)="variableIndexChanged()"> </variable-results-selector> - <log #iterationLog></log> + <log-drawer #iterationLog></log-drawer> </div> diff --git a/src/app/components/verificateur-results/verificateur-results.component.ts b/src/app/components/verificateur-results/verificateur-results.component.ts index 8a00642cc..c79542673 100644 --- a/src/app/components/verificateur-results/verificateur-results.component.ts +++ b/src/app/components/verificateur-results/verificateur-results.component.ts @@ -1,6 +1,6 @@ import { Component, ViewChild, DoCheck } from "@angular/core"; -import { cLog } from "jalhyd"; +import { cLog, Message } from "jalhyd"; import { LogComponent } from "../log/log.component"; import { CalculatorResults } from "../../results/calculator-results"; @@ -8,6 +8,7 @@ import { VariableResultsSelectorComponent } from "../variable-results-selector/v import { I18nService } from "../../services/internationalisation.service"; import { VerificateurResults } from "../../results/verificateur-results"; import { ResultsComponentDirective } from '../fixedvar-results/results.component'; +import { LogDrawerComponent } from "../log-drawer/log-drawer.component"; @Component({ selector: "verificateur-results", @@ -31,7 +32,7 @@ export class VerificateurResultsComponent extends ResultsComponentDirective impl private generalLogComponent: LogComponent; @ViewChild("iterationLog") - private iterationLogComponent: LogComponent; + private iterationLogComponent: LogDrawerComponent; constructor( private i18nService: I18nService, @@ -95,24 +96,36 @@ export class VerificateurResultsComponent extends ResultsComponentDirective impl * Retourne les messages à afficher dans le composant de log "du bas" : logs de l'itération * en cours (messages non-globaux du Vérificateur et eds Espèce), que le résultat varie ou non */ - private get iterationLog(): cLog { - const l = new cLog(); + private get iterationLog(): Array<{ message: Message, subLog: cLog }> { + const l: Array<{ message: Message, subLog: cLog }> = []; if (this._verificateurResults) { // = 0 lorsque rien ne varie const vi = this._verificateurResults.variableIndex; // log du Verificateur pour l'itération en cours + const element = { message: Message, subLog: cLog }; if ( this._verificateurResults.result && this._verificateurResults.result.hasResultElements() && this._verificateurResults.result.resultElements[vi] && this._verificateurResults.result.resultElements[vi].hasLog() ) { - l.addLog(this._verificateurResults.result.resultElements[vi].log); + // every log message of Verificateur is supposed to always be a status message for the nth Espece + const verLog: cLog = this._verificateurResults.result.resultElements[vi].log; + for (const vm of verLog.messages) { + l.push({ + message: vm, + subLog: new cLog() + }); + } + } + // logs des Espece pour l'itération en cours; l.length devrait toujours être égal à this._verificateurResults.especeResults.length + if (l.length !== this._verificateurResults.especeResults.length) { + throw new Error("VerificateurResultsComponent: l.length !== this._verificateurResults.especeResults.length (" + l.length + " / " + this._verificateurResults.especeResults.length) + ")"; } - // logs des Espece pour l'itération en cours - for (const er of this._verificateurResults.especeResults) { + for (let i = 0; i < this._verificateurResults.especeResults.length; i++) { + const er = this._verificateurResults.especeResults[i]; if (er && er.hasResultElements() && er.resultElements[vi].hasLog()) { - l.addLog(er.resultElements[vi].log); + l[i].subLog.addLog(er.resultElements[vi].log); } } } diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 9184c785d..8f6a2e6fa 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -168,9 +168,9 @@ "INFO_ENUM_STRUCTUREFLOWREGIME_1": "Partially submerged", "INFO_ENUM_STRUCTUREFLOWREGIME_2": "Submerged", "INFO_ENUM_STRUCTUREFLOWREGIME_3": "Zero flow", - "INFO_ENUM_STRUCTUREJETTYPE_0": "Diving", - "INFO_ENUM_STRUCTUREJETTYPE_1": "Surface", - "INFO_ENUM_STRUCTUREJETTYPE_2": "Not applicable", + "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", @@ -612,17 +612,19 @@ "WARNING_VERIF_MRC_VMAX_APRON_N": "Apron #%N%: maximum speed %V% too high (maximum: %maxV%)", "WARNING_VERIF_MRC_YMIN_APRON_N": "Apron #%N%: water level %Y% too low (minimum: %minY%)", "ERROR_VERIF_NO_PRESET": "This species group is not compatible with this pass type", - "ERROR_VERIF_PAB_DHMAX": "Wall #%N%: fall %DH% too high (maximum for surface jet: %maxDHS%, maximum for diving jet : %maxDHP%)", - "ERROR_VERIF_PAB_DHMAX_DW": "Downwall: fall %DH% too high (maximum for surface jet: %maxDHS%, maximum for diving jet : %maxDHP%)", - "ERROR_VERIF_PAB_DHMAX_JET": "Wall #%N%: fall %DH% too high for jet type %jetType% (maximum: %maxDH%)", - "ERROR_VERIF_PAB_DHMAX_JET_DW":"Downwall: fall %DH% too high for jet type %jetType% (maximum: %maxDH%)", - "WARNING_VERIF_PAB_DHMAX_JET": "Wall #%N%: fall %DH% too high for jet type %jetType% (maximum: %maxDH%)", - "WARNING_VERIF_PAB_DHMAX_JET_DW": "Downwall: fall %DH% too high for jet type %jetType% (maximum: %maxDH%)", + "ERROR_VERIF_PAB_DHMAX": "Wall #%N%: fall %DH% too high (maximum for surface jet: %maxDHS%, maximum for diving jet: %maxDHP%)", + "ERROR_VERIF_PAB_DHMAX_DW": "Downwall: fall %DH% too high (maximum for surface jet: %maxDHS%, maximum for diving jet: %maxDHP%)", + "ERROR_VERIF_PAB_DHMAX_JET": "Wall #%N%: fall %DH% too high for jet type ENUM_STRUCTUREJETTYPE_%jetType% (maximum: %maxDH%)", + "ERROR_VERIF_PAB_DHMAX_JET_DW":"Downwall: fall %DH% too high for jet type ENUM_STRUCTUREJETTYPE_%jetType% (maximum: %maxDH%)", + "WARNING_VERIF_PAB_DHMAX_JET": "Wall #%N%: fall %DH% too high for jet type ENUM_STRUCTUREJETTYPE_%jetType% (maximum: %maxDH%)", + "WARNING_VERIF_PAB_DHMAX_JET_DW": "Downwall: fall %DH% too high for jet type ENUM_STRUCTUREJETTYPE_%jetType% (maximum: %maxDH%)", "ERROR_VERIF_PAB_BMIN": "Wall #%NC%, structure %NS%: slot/weir width %L% too low (minimum: %minB%)", "ERROR_VERIF_PAB_BMIN_DW": "Downwall, structure %NS%: slot/weir width %L% too low (minimum: %minB%)", "WARNING_VERIF_PAB_BMIN": "Wall #%NC%, structure %NS%: slot/weir width %L% too low (minimum: %minB%)", "WARNING_VERIF_PAB_BMIN_DW": "Downwall, structure %NS%: slot/weir width %L% too low (minimum: %minB%)", - "ERROR_VERIF_PAB_LMIN": "Wall #%N%: basin length %LB% too low (minimum: %minLB%)", + "ERROR_VERIF_PAB_LMIN": "Wall #%N%: basin length %LB% too low (minimum for surface jet: %minLBS%, minimum for diving jet: %minLBS%)", + "ERROR_VERIF_PAB_LMIN_JET": "Wall #%N%: basin length %LB% too low for jet type ENUM_STRUCTUREJETTYPE_%jetType% (minimum: %minLB%)", + "WARNING_VERIF_PAB_LMIN_JET": "Wall #%N%: basin length %LB% too low for jet type ENUM_STRUCTUREJETTYPE_%jetType% (minimum: %minLB%)", "ERROR_VERIF_PAB_HMIN": "Wall #%NC%, structure %NS%: head on weir %h1% too low (minimum: %minH%)", "ERROR_VERIF_PAB_HMIN_DW": "Downwall, structure %NS%: head on weir %h1% too low (minimum: %minH%)", "WARNING_VERIF_PAB_HMIN": "Wall #%NC%, structure %NS%: head on weir %h1% too low (minimum: %minH%)", @@ -631,8 +633,11 @@ "ERROR_VERIF_PAB_SMIN_DW": "Downwall, structure %NS%: orifice surface %S% is too low (minimum: %minS%)", "WARNING_VERIF_PAB_SMIN": "Wall #%NC%, structure %NS%: orifice surface %S% is too low (minimum: %minS%)", "WARNING_VERIF_PAB_SMIN_DW": "Downwall, structure %NS%: orifice surface %S% is too low (minimum: %minS%)", - "ERROR_VERIF_PAB_YMOY": "Wall #%N%: basin depth %PB% too low (minimum: %minPB%)", + "ERROR_VERIF_PAB_YMOY": "Wall #%N%: basin depth %PB% too low (minimum for surface jet: %minPBS%, minimum for diving jet: %minPBP%)", + "ERROR_VERIF_PAB_YMOY_JET": "Wall #%N%: basin depth %PB% too low for jet type ENUM_STRUCTUREJETTYPE_%jetType% (minimum: %minPB%)", + "WARNING_VERIF_PAB_YMOY_JET": "Wall #%N%: basin depth %PB% too low for jet type ENUM_STRUCTUREJETTYPE_%jetType% (minimum: %minPB%)", "ERROR_VERIF_PAB_YMOY_2_DH": "Wall #%N%: basin depth %PB% lower than 2x fall %DH%", + "WARNING_VERIF_PAB_YMOY_2_DH": "Wall #%N%: basin depth %PB% lower than 2x fall %DH%", "ERROR_VERIF_PAR_DH": "Downstream pass fall prevents crossability", "ERROR_VERIF_PAR_YMIN": "Water level %h% too low (minimum: %minY%)", "ERROR_VERIF_KO": "Crossability criteria are not met for at least one species group", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index fb1deb92f..14a4a2934 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -168,9 +168,9 @@ "INFO_ENUM_STRUCTUREFLOWREGIME_1": "Partiellement noyé", "INFO_ENUM_STRUCTUREFLOWREGIME_2": "Noyé", "INFO_ENUM_STRUCTUREFLOWREGIME_3": "Débit nul", - "INFO_ENUM_STRUCTUREJETTYPE_0": "Plongeant", - "INFO_ENUM_STRUCTUREJETTYPE_1": "De surface", - "INFO_ENUM_STRUCTUREJETTYPE_2": "Sans objet", + "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", @@ -615,15 +615,17 @@ "ERROR_VERIF_NO_PRESET": "Ce groupe d'espèces n'est pas compatible avec ce type de passe", "ERROR_VERIF_PAB_DHMAX": "Cloison n°%N% : chute %DH% trop importante (maximum pour jet de surface : %maxDHS%, maximum pour jet plongeant : %maxDHP%)", "ERROR_VERIF_PAB_DHMAX_DW": "Cloison aval : chute %DH% trop importante (maximum pour jet de surface : %maxDHS%, maximum pour jet plongeant : %maxDHP%)", - "ERROR_VERIF_PAB_DHMAX_JET": "Cloison n°%N% : chute %DH% trop importante pour le jet %jetType% (maximum : %maxDH%)", - "ERROR_VERIF_PAB_DHMAX_JET_DW":"Cloison aval : chute %DH% trop importante pour le jet %jetType% (maximum : %maxDH%)", - "WARNING_VERIF_PAB_DHMAX_JET": "Cloison n°%N% : chute %DH% trop importante pour le jet %jetType% (maximum : %maxDH%)", - "WARNING_VERIF_PAB_DHMAX_JET_DW": "Cloison aval : chute %DH% trop importante pour le jet %jetType% (maximum : %maxDH%)", + "ERROR_VERIF_PAB_DHMAX_JET": "Cloison n°%N% : chute %DH% trop importante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (maximum : %maxDH%)", + "ERROR_VERIF_PAB_DHMAX_JET_DW":"Cloison aval : chute %DH% trop importante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (maximum : %maxDH%)", + "WARNING_VERIF_PAB_DHMAX_JET": "Cloison n°%N% : chute %DH% trop importante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (maximum : %maxDH%)", + "WARNING_VERIF_PAB_DHMAX_JET_DW": "Cloison aval : chute %DH% trop importante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (maximum : %maxDH%)", "ERROR_VERIF_PAB_BMIN": "Cloison n°%NC%, ouvrage %NS% : largeur de l'échancrure ou de la fente %L% insuffisante (minimum : %minB%)", "ERROR_VERIF_PAB_BMIN_DW": "Cloison aval, ouvrage %NS% : largeur de l'échancrure ou de la fente %L% insuffisante (minimum : %minB%)", "WARNING_VERIF_PAB_BMIN": "Cloison n°%NC%, ouvrage %NS% : largeur de l'échancrure ou de la fente %L% insuffisante (minimum : %minB%)", "WARNING_VERIF_PAB_BMIN_DW": "Cloison aval, ouvrage %NS% : largeur de l'échancrure ou de la fente %L% insuffisante (minimum : %minB%)", - "ERROR_VERIF_PAB_LMIN": "Cloison n°%N% : longueur de bassin %LB% insuffisante (minimum : %minLB%)", + "ERROR_VERIF_PAB_LMIN": "Cloison n°%N% : longueur de bassin %LB% insuffisante (minimum pour jet de surface : %minLBS%, minimum pour jet plongeant : %minLBP%)", + "ERROR_VERIF_PAB_LMIN_JET": "Cloison n°%N% : longueur de bassin %LB% insuffisante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (minimum : %minLB%)", + "WARNING_VERIF_PAB_LMIN_JET": "Cloison n°%N% : longueur de bassin %LB% insuffisante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (minimum : %minLB%)", "ERROR_VERIF_PAB_HMIN": "Cloison n°%NC%, ouvrage %NS% : charge sur l'échancrure %h1% insuffisante (minimum : %minH%)", "ERROR_VERIF_PAB_HMIN_DW": "Cloison aval, ouvrage %NS% : charge sur l'échancrure %h1% insuffisante (minimum : %minH%)", "WARNING_VERIF_PAB_HMIN": "Cloison n°%NC%, ouvrage %NS% : charge sur l'échancrure %h1% insuffisante (minimum : %minH%)", @@ -632,18 +634,21 @@ "ERROR_VERIF_PAB_SMIN_DW": "Cloison aval, ouvrage %NS% : surface de l'orifice %S% insuffisante (minimum: %minS%)", "WARNING_VERIF_PAB_SMIN": "Cloison n°%NC%, ouvrage %NS% : surface de l'orifice %S% insuffisante (minimum: %minS%)", "WARNING_VERIF_PAB_SMIN_DW": "Cloison aval, ouvrage %NS% : surface de l'orifice %S% insuffisante (minimum: %minS%)", - "ERROR_VERIF_PAB_YMOY": "Cloison n°%N% : profondeur de bassin %PB% insuffisante (minimum : %minPB%)", + "ERROR_VERIF_PAB_YMOY": "Cloison n°%N% : profondeur de bassin %PB% insuffisante (minimum pour jet de surface : %minPBS%, minimum pour jet plongeant : %minPBP%)", + "ERROR_VERIF_PAB_YMOY_JET": "Cloison n°%N% : profondeur de bassin %PB% insuffisante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (minimum : %minPB%)", + "WARNING_VERIF_PAB_YMOY_JET": "Cloison n°%N% : profondeur de bassin %PB% insuffisante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (minimum : %minPB%)", "ERROR_VERIF_PAB_YMOY_2_DH": "Cloison n°%N% : profondeur de bassin %PB% inférieure à 2x la chute %DH%", + "WARNING_VERIF_PAB_YMOY_2_DH": "Cloison n°%N% : profondeur de bassin %PB% inférieure à 2x la chute %DH%", "ERROR_VERIF_PAR_DH": "La chute en pied de passe empêche le franchissement", "ERROR_VERIF_PAR_YMIN": "Tirant d'eau %h% insuffisant (minimum : %minY%)", "ERROR_VERIF_KO": "Le franchissement est impossible pour au moins un groupe d'espèces", - "ERROR_VERIF_SPECIES_GROUP_KO": "Le franchissement est impossible pour le groupe d'espèces ENUM_%speciesGroup%", - "WARNING_VERIF_SPECIES_GROUP_OK_BUT": "Le franchissement est possible pour le groupe d'espèces ENUM_%speciesGroup%, mais il y a des avertissements", - "INFO_VERIF_SPECIES_GROUP_OK": "Le franchissement est possible pour le groupe d'espèces ENUM_%speciesGroup%", - "ERROR_VERIF_SPECIES_NUB_KO": "Le franchissement est impossible pour l'espèce personnalisée FORM_ID_%uid%", - "WARNING_VERIF_SPECIES_NUB_OK_BUT": "Le franchissement est possible pour l'espèce personnalisée FORM_ID_%uid%, mais il y a des avertissements", - "INFO_VERIF_SPECIES_NUB_OK": "Le franchissement est possible pour l'espèce personnalisée FORM_ID_%uid%", - "ERROR_VERIF_PAB_WALLS_NOT_CROSSABLE": "La cloison n°%N% n'est pas franchissable", + "ERROR_VERIF_SPECIES_GROUP_KO": "ENUM_%speciesGroup% : franchissement impossible", + "WARNING_VERIF_SPECIES_GROUP_OK_BUT": "ENUM_%speciesGroup% : OK, avec des avertissements", + "INFO_VERIF_SPECIES_GROUP_OK": "ENUM_%speciesGroup% : OK", + "ERROR_VERIF_SPECIES_NUB_KO": "FORM_ID_%uid% : franchissement impossible", + "WARNING_VERIF_SPECIES_NUB_OK_BUT": "FORM_ID_%uid% : OK, avec des avertissements", + "INFO_VERIF_SPECIES_NUB_OK": "FORM_ID_%uid% : OK", + "ERROR_VERIF_PAB_WALL_NOT_CROSSABLE": "La cloison n°%N% n'est pas franchissable", "ERROR_VERIF_PAB_DW_NOT_CROSSABLE": "La cloison aval n'est pas franchissable", "WARNING_VERIF_PAR_SPECIES_GROUP": "Les groupes d'espèces 3a, 3b et 7b sont déconseillés pour ce type de passe" } -- GitLab