From 953304ff6422d7f20595b2126556c36c65f3433a Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Fri, 12 Jul 2019 16:49:38 +0200
Subject: [PATCH] PAB global log: added count for each severity level

---
 .../pab-results/pab-results.component.ts      | 82 +++++++++++++++++--
 src/app/results/pab-results.ts                |  6 +-
 src/locale/messages.en.json                   |  2 +-
 src/locale/messages.fr.json                   |  2 +-
 4 files changed, 79 insertions(+), 13 deletions(-)

diff --git a/src/app/components/pab-results/pab-results.component.ts b/src/app/components/pab-results/pab-results.component.ts
index cd5fe967e..ff73e62cb 100644
--- a/src/app/components/pab-results/pab-results.component.ts
+++ b/src/app/components/pab-results/pab-results.component.ts
@@ -1,6 +1,6 @@
 import { Component, ViewChild, DoCheck } from "@angular/core";
 
-import { Result, cLog, Message, MessageCode } from "jalhyd";
+import { Result, cLog, Message, MessageCode, MessageSeverity } from "jalhyd";
 
 import { LogComponent } from "../../components/log/log.component";
 import { CalculatorResults } from "../../results/calculator-results";
@@ -118,19 +118,77 @@ export class PabResultsComponent implements DoCheck {
     }
 
     /**
-     * Retourne true si au moins une des cloisons a un message de log dans
-     * un de ses ResultElement
+     * Returns the number of errors, warnings, infos among children logs
      */
-    private childrenHaveLogs(): boolean {
+    private logStats(): any {
+        const ret = {
+            info: 0,
+            warning: 0,
+            error: 0
+        };
+        if (this._pabResults.result && this._pabResults.result.hasLog) {
+            for (const re of this._pabResults.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;
+                        }
+                    }
+                }
+            }
+        }
         for (const cr of this._pabResults.cloisonsResults) {
             if (cr && cr.hasLog) {
-                return true;
+                for (const re of cr.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;
+                            }
+                        }
+                    }
+                }
             }
         }
         if (this._pabResults.cloisonAvalResults && this._pabResults.cloisonAvalResults.hasLog) {
-            return true;
+            for (const re of this._pabResults.cloisonAvalResults.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 false;
+        return ret;
     }
 
     /*
@@ -144,10 +202,16 @@ export class PabResultsComponent implements DoCheck {
             this.mergeGlobalLog(this._pabResults.result, l);
             // un problème avec la PAB en général / les cloisons, à une étape quelconque ?
             if (
-                (this.pabResults.hasLog || this.childrenHaveLogs())
+                (this.pabResults.hasLog)
                 && l.messages.length === 0 // existing global messages make generic message below useless
             ) {
-                l.add(new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED));
+                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);
+                // l.add(new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED));
             }
         } // sinon pas de log global (aucun paramètre ne varie)
         return l;
diff --git a/src/app/results/pab-results.ts b/src/app/results/pab-results.ts
index b30a28cfa..317914470 100644
--- a/src/app/results/pab-results.ts
+++ b/src/app/results/pab-results.ts
@@ -69,8 +69,10 @@ export class PabResults extends CalculatedParamResults {
         this.Z2 = [];
     }
 
-    // returns true if at least one log message is present in the PAB result or any
-    // of the children result
+    /**
+     * Returns true if at least one log message is present in the PAB result or any
+     * of the children results
+     */
     public get hasLog(): boolean {
         if (this.cloisonsResults) {
             for (const cr of this.cloisonsResults) {
diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json
index cbd1869b3..78e3384d6 100644
--- a/src/locale/messages.en.json
+++ b/src/locale/messages.en.json
@@ -302,7 +302,7 @@
     "INFO_PARAMFIELD_VARIATED": "Variated",
     "INFO_PARAMMODE_LIST": "Values list",
     "INFO_PARAMMODE_MINMAX": "Min/max",
-    "WARNING_PROBLEMS_ENCOUNTERED": "Problems occurred during calculation",
+    "WARNING_PROBLEMS_ENCOUNTERED": "Problems occurred during calculation (info: %info%, warning: %warning%, error: %error%)",
     "INFO_REGIMEUNIFORME_TITRE_COURT": "Uniform flow",
     "INFO_REGIMEUNIFORME_TITRE": "Uniform flow calculation",
     "INFO_REMOUS_CALCUL_FLUVIAL": "Downstream boundary condition >= Critical elevation: calculation of subcritical part from downstream",
diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json
index a789665c6..e9135bada 100644
--- a/src/locale/messages.fr.json
+++ b/src/locale/messages.fr.json
@@ -302,7 +302,7 @@
     "INFO_PARAMFIELD_VARIATED": "Varié",
     "INFO_PARAMMODE_LIST": "Liste de valeurs",
     "INFO_PARAMMODE_MINMAX": "Min/max",
-    "WARNING_PROBLEMS_ENCOUNTERED": "Des problèmes sont survenus durant le calcul",
+    "WARNING_PROBLEMS_ENCOUNTERED": "Des problèmes sont survenus durant le calcul (info: %info%, avertissement: %warning%, erreur: %error%)",
     "INFO_REGIMEUNIFORME_TITRE_COURT": "R. uniforme",
     "INFO_REGIMEUNIFORME_TITRE": "Régime uniforme",
     "INFO_REMOUS_CALCUL_FLUVIAL": "Condition limite aval >= Hauteur critique&nbsp;: calcul de la partie fluviale à partir de l'aval",
-- 
GitLab