pb-results.component.ts 7.57 KiB
import { Component, Input } from "@angular/core";
import { CalculatorResults } from "../../results/calculator-results";
import { PrebarrageResults } from "../../results/prebarrage-results";
import { I18nService } from "../../services/internationalisation.service";
import { cLog, Message, MessageCode, MessageSeverity, PreBarrage, Result } from "jalhyd";
@Component({
    selector: "pb-results",
    templateUrl: "./pb-results.component.html",
    styleUrls: [
        "./pb-results.component.scss"
export class PbResultsComponent {
    /** résultats des bassins, non mis en forme */
    private _pbResults: PrebarrageResults;
    constructor(
        private i18nService: I18nService,
    ) { }
    @Input()
    public set results(rs: CalculatorResults[]) {
        this._pbResults = undefined;
        for (const r of rs) {
            if (r instanceof PrebarrageResults) {
                this._pbResults = r as PrebarrageResults;
    public get pbResults() {
        return this._pbResults;
    // true if any result is present
    public get hasResults(): boolean {
        return this._pbResults && this._pbResults.hasResults;
    // true if basin results are present
    public get hasBasinResults(): boolean {
        return this._pbResults && this._pbResults.hasBasinResults;
    // true if basin results at current iteration have data
    public get basinResultsHaveData(): boolean {
        return this._pbResults && this._pbResults.basinResultsHaveData;
    // true if wall results are present
    public get hasWallResults(): boolean {
        return this._pbResults && this._pbResults.hasWallResults;
    private mergeGlobalLog(result: Result, log: cLog) {
        if (result) {
            if (result.hasGlobalLog()) {
                log.addLog(result.globalLog);
            // if no parameter is varying, 1st element log is considered "global"
            if (this.pbResults.variatedParameters.length === 0) {
                if (result.hasResultElements() && result.resultElement.hasLog()) {
                    log.addLog(result.log);
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
} /** * Returns the number of errors, warnings, infos among children logs */ private logStats(): any { const ret = { info: 0, warning: 0, error: 0 }; if (this._pbResults.result?.hasLog()) { for (const re of this._pbResults.result.resultElements) { if (re.hasLog()) { for (const m of re.log.messages) { const s = m.getSeverity(); switch (s) { case MessageSeverity.INFO: ret.info ++; break; case MessageSeverity.WARNING: ret.warning ++; break; case MessageSeverity.ERROR: ret.error ++; break; } } } } } const pb = this._pbResults.result.sourceNub as PreBarrage; for (const pbc of pb.children) { // bassins et cloisons if (pbc.result !== undefined) { for (const re of pbc.result.resultElements) { if (re.hasLog()) { for (const m of re.log.messages) { const s = m.getSeverity(); switch (s) { case MessageSeverity.INFO: ret.info ++; break; case MessageSeverity.WARNING: ret.warning ++; break; case MessageSeverity.ERROR: ret.error ++; break; } } } } } } return ret; } /* * Retourne les logs à afficher dans le composant de log global, au dessus * du sélecteur d'itération : messages globaux et / ou résumé des messages * spécifiques à chaque ResultElement */ public get globalLog(): cLog { const l = new cLog(); /* console.log( `>> Global Log >> this._pbResults: ${this._pbResults !== undefined}` + `, vpl: ${this?._pbResults?.variatedParameters?.length}` + `, hasLog: ${this?._pbResults?.hasLog}` ); */ if (this._pbResults && this.pbResults.variatedParameters.length > 0) {
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
this.mergeGlobalLog(this._pbResults.result, l); // console.log(">>>> after merge, messages length=", l.messages.length); // un problème avec le PB en général / les cloisons / les bassins, à une étape quelconque ? if ( (this.pbResults.hasLog) && l.messages.length === 0 // existing global messages make generic message below useless ) { const logStats = this.logStats(); const m = new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED); m.extraVar.info = "" + logStats.info; // to avoid displaying fixed number of digits m.extraVar.warning = "" + logStats.warning; m.extraVar.error = "" + logStats.error; l.add(m); } } // sinon pas de log global (aucun paramètre ne varie) return l; } /** * Retourne les logs à afficher dans le composant de log local, en dessous * du sélecteur d'itération : messages concernant l'itération (le ResultElement) * en cours */ public get iterationLog(): cLog { const l = new cLog(); if (this._pbResults?.result) { const pb = this._pbResults.result.sourceNub as PreBarrage; if (this._pbResults.variatedParameters.length > 0) { // A. si un paramètre varie const vi = this._pbResults.variableIndex; // log du PB pour l'itération en cours if ( this._pbResults.result && this._pbResults.result.hasResultElements() && this._pbResults.result.resultElements[vi] && this._pbResults.result.resultElements[vi]?.hasLog() ) { l.addLog(this._pbResults.result.resultElements[vi].log); } // logs des enfants pour l'itération en cours for (const pbc of pb.children) { if (pbc?.result?.hasResultElements() && pbc.result.resultElements[vi]?.hasLog()) { l.addLog(pbc.result.resultElements[vi].log); } } } else { // B. si aucun paramètre ne varie this.mergeGlobalLog(this._pbResults.result, l); // faut bien mettre le log global quelque part // logs des enfants for (const pbc of pb.children) { if (pbc?.result?.hasResultElements() && pbc.result.resultElement?.hasLog()) { l.addLog(pbc.result.resultElement.log); } } } } return l; } public get uitextGeneralLogTitle(): string { return this.i18nService.localizeText("INFO_TITREJOURNAL_GLOBAL"); } }