Skip to content
Snippets Groups Projects
Commit 11057ede authored by Mathias Chouet's avatar Mathias Chouet Committed by mathias.chouet
Browse files

Added new component log-drawer

update Verificateur results with log-drawer
parent 586f6525
No related branches found
No related tags found
1 merge request!82Resolve "Ajout de la fonctionnalité "Respect des critères""
......@@ -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,
......
<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>
: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;
}
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");
}
}
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") + ""
......
......@@ -4,5 +4,5 @@
<variable-results-selector [results]="verificateurResults" (indexChange)="variableIndexChanged()">
</variable-results-selector>
<log #iterationLog></log>
<log-drawer #iterationLog></log-drawer>
</div>
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);
}
}
}
......
......@@ -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&nbsp;: %maxDHP%)",
"ERROR_VERIF_PAB_DHMAX_DW": "Downwall: fall %DH% too high (maximum for surface jet: %maxDHS%, maximum for diving jet&nbsp;: %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",
......
......@@ -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%&nbsp;: chute %DH% trop importante (maximum pour jet de surface&nbsp;: %maxDHS%, maximum pour jet plongeant&nbsp;: %maxDHP%)",
"ERROR_VERIF_PAB_DHMAX_DW": "Cloison aval&nbsp;: chute %DH% trop importante (maximum pour jet de surface&nbsp;: %maxDHS%, maximum pour jet plongeant&nbsp;: %maxDHP%)",
"ERROR_VERIF_PAB_DHMAX_JET": "Cloison n°%N%&nbsp;: chute %DH% trop importante pour le jet %jetType% (maximum&nbsp;: %maxDH%)",
"ERROR_VERIF_PAB_DHMAX_JET_DW":"Cloison aval&nbsp;: chute %DH% trop importante pour le jet %jetType% (maximum&nbsp;: %maxDH%)",
"WARNING_VERIF_PAB_DHMAX_JET": "Cloison n°%N%&nbsp;: chute %DH% trop importante pour le jet %jetType% (maximum&nbsp;: %maxDH%)",
"WARNING_VERIF_PAB_DHMAX_JET_DW": "Cloison aval&nbsp;: chute %DH% trop importante pour le jet %jetType% (maximum&nbsp;: %maxDH%)",
"ERROR_VERIF_PAB_DHMAX_JET": "Cloison n°%N%&nbsp;: chute %DH% trop importante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (maximum&nbsp;: %maxDH%)",
"ERROR_VERIF_PAB_DHMAX_JET_DW":"Cloison aval&nbsp;: chute %DH% trop importante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (maximum&nbsp;: %maxDH%)",
"WARNING_VERIF_PAB_DHMAX_JET": "Cloison n°%N%&nbsp;: chute %DH% trop importante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (maximum&nbsp;: %maxDH%)",
"WARNING_VERIF_PAB_DHMAX_JET_DW": "Cloison aval&nbsp;: chute %DH% trop importante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (maximum&nbsp;: %maxDH%)",
"ERROR_VERIF_PAB_BMIN": "Cloison n°%NC%, ouvrage %NS%&nbsp;: largeur de l'échancrure ou de la fente %L% insuffisante (minimum&nbsp;: %minB%)",
"ERROR_VERIF_PAB_BMIN_DW": "Cloison aval, ouvrage %NS%&nbsp;: largeur de l'échancrure ou de la fente %L% insuffisante (minimum&nbsp;: %minB%)",
"WARNING_VERIF_PAB_BMIN": "Cloison n°%NC%, ouvrage %NS%&nbsp;: largeur de l'échancrure ou de la fente %L% insuffisante (minimum&nbsp;: %minB%)",
"WARNING_VERIF_PAB_BMIN_DW": "Cloison aval, ouvrage %NS%&nbsp;: largeur de l'échancrure ou de la fente %L% insuffisante (minimum&nbsp;: %minB%)",
"ERROR_VERIF_PAB_LMIN": "Cloison n°%N%&nbsp;: longueur de bassin %LB% insuffisante (minimum&nbsp;: %minLB%)",
"ERROR_VERIF_PAB_LMIN": "Cloison n°%N%&nbsp;: longueur de bassin %LB% insuffisante (minimum pour jet de surface&nbsp;: %minLBS%, minimum pour jet plongeant&nbsp;: %minLBP%)",
"ERROR_VERIF_PAB_LMIN_JET": "Cloison n°%N%&nbsp;: longueur de bassin %LB% insuffisante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (minimum&nbsp;: %minLB%)",
"WARNING_VERIF_PAB_LMIN_JET": "Cloison n°%N%&nbsp;: longueur de bassin %LB% insuffisante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (minimum&nbsp;: %minLB%)",
"ERROR_VERIF_PAB_HMIN": "Cloison n°%NC%, ouvrage %NS%&nbsp;: charge sur l'échancrure %h1% insuffisante (minimum&nbsp;: %minH%)",
"ERROR_VERIF_PAB_HMIN_DW": "Cloison aval, ouvrage %NS%&nbsp;: charge sur l'échancrure %h1% insuffisante (minimum&nbsp;: %minH%)",
"WARNING_VERIF_PAB_HMIN": "Cloison n°%NC%, ouvrage %NS%&nbsp;: charge sur l'échancrure %h1% insuffisante (minimum&nbsp;: %minH%)",
......@@ -632,18 +634,21 @@
"ERROR_VERIF_PAB_SMIN_DW": "Cloison aval, ouvrage %NS%&nbsp;: surface de l'orifice %S% insuffisante (minimum: %minS%)",
"WARNING_VERIF_PAB_SMIN": "Cloison n°%NC%, ouvrage %NS%&nbsp;: surface de l'orifice %S% insuffisante (minimum: %minS%)",
"WARNING_VERIF_PAB_SMIN_DW": "Cloison aval, ouvrage %NS%&nbsp;: surface de l'orifice %S% insuffisante (minimum: %minS%)",
"ERROR_VERIF_PAB_YMOY": "Cloison n°%N%&nbsp;: profondeur de bassin %PB% insuffisante (minimum&nbsp;: %minPB%)",
"ERROR_VERIF_PAB_YMOY": "Cloison n°%N%&nbsp;: profondeur de bassin %PB% insuffisante (minimum pour jet de surface&nbsp;: %minPBS%, minimum pour jet plongeant&nbsp;: %minPBP%)",
"ERROR_VERIF_PAB_YMOY_JET": "Cloison n°%N%&nbsp;: profondeur de bassin %PB% insuffisante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (minimum&nbsp;: %minPB%)",
"WARNING_VERIF_PAB_YMOY_JET": "Cloison n°%N%&nbsp;: profondeur de bassin %PB% insuffisante pour le jet ENUM_STRUCTUREJETTYPE_%jetType% (minimum&nbsp;: %minPB%)",
"ERROR_VERIF_PAB_YMOY_2_DH": "Cloison n°%N%&nbsp;: profondeur de bassin %PB% inférieure à 2x la chute %DH%",
"WARNING_VERIF_PAB_YMOY_2_DH": "Cloison n°%N%&nbsp;: 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&nbsp;: %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%&nbsp;: franchissement impossible",
"WARNING_VERIF_SPECIES_NUB_OK_BUT": "FORM_ID_%uid%&nbsp;: OK, avec des avertissements",
"INFO_VERIF_SPECIES_NUB_OK": "FORM_ID_%uid%&nbsp;: 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"
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment