From 1be701c1f7ec644ca6dd1f69f54a84fe7f81cab4 Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Mon, 8 Jul 2019 10:12:36 +0200
Subject: [PATCH] Fix bug in hasLog() methods

---
 spec/pab/pab.spec.ts      |  2 +-
 src/pab/pab.ts            | 12 ++++++++++--
 src/util/result.ts        | 20 +++++++++++++++-----
 src/util/resultelement.ts |  7 +++++++
 4 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/spec/pab/pab.spec.ts b/spec/pab/pab.spec.ts
index 280fe0d9..6c223077 100644
--- a/spec/pab/pab.spec.ts
+++ b/spec/pab/pab.spec.ts
@@ -195,7 +195,7 @@ describe("Class Pab: ", () => {
                 )
             );
             pab.calculatedParam = pab.prms.Z1;
-            expect(pab.CalcSerie().resultElement.log.messages[0].code)
+            expect(pab.CalcSerie().globalLog.messages[0].code)
                 .toBe(MessageCode.ERROR_CLOISON_AVAL_UN_OUVRAGE_REGULE);
         });
     });
diff --git a/src/pab/pab.ts b/src/pab/pab.ts
index 1692a7a2..c749ae30 100644
--- a/src/pab/pab.ts
+++ b/src/pab/pab.ts
@@ -6,11 +6,11 @@ import { Props } from "../props";
 import { Session } from "../session";
 import { ParallelStructure } from "../structure/parallel_structure";
 import { StructureTriangularTruncWeirFree } from "../structure/structure_triangular_trunc_weir";
+import { Message, MessageCode } from "../util/message";
 import { Result } from "../util/result";
 import { CloisonAval, ParallelStructureParams } from "./cloison_aval";
 import { Cloisons } from "./cloisons";
 import { PabParams } from "./pab_params";
-import { Message, MessageCode } from "../util/message";
 
 export { PabParams };
 
@@ -93,8 +93,16 @@ export class Pab extends Nub {
         }
     }
 
+    public CalcSerie(rInit?: number, sDonnee?: any): Result {
+        if (!this.downWall.checkVanneLevante()) {
+            const emptyResult = new Result(undefined, this);
+            emptyResult.globalLog.insert(new Message(MessageCode.ERROR_CLOISON_AVAL_UN_OUVRAGE_REGULE));
+            return emptyResult;
+        }
+        return super.CalcSerie(rInit, sDonnee);
+    }
+
     /**
-     *
      * @param sVarCalc Calcul
      */
     public Calc(sVarCalc: string, rInit?: number): Result {
diff --git a/src/util/result.ts b/src/util/result.ts
index f41e7b07..485e802f 100644
--- a/src/util/result.ts
+++ b/src/util/result.ts
@@ -72,7 +72,17 @@ export class Result extends JalhydObject implements INamedIterableValues {
      * @return true si il y a au moins un message dans le log global ou dans les ResultElement
      */
     public get hasLog(): boolean {
-        return (this.nbResultElements > 0 && this.log.messages.length > 0) || this.hasGlobalLog;
+        if (this.hasGlobalLog) {
+            return true;
+        } else {
+            // Test des journaux des résultats
+            for (const r of this._resultElements) {
+                if (r.hasLog) {
+                    return true;
+                }
+            }
+        }
+        return false;
     }
 
     /**
@@ -111,7 +121,7 @@ export class Result extends JalhydObject implements INamedIterableValues {
     }
 
     /**
-     * @return le résultat de calcul du 1er ResultElement
+     * @return le résultat de calcul du ResultElement le plus récent
      */
     get vCalc(): number {
         return this.resultElement.vCalc;
@@ -122,7 +132,7 @@ export class Result extends JalhydObject implements INamedIterableValues {
     }
 
     /**
-     * retourne le journal du 1er ResultElement
+     * retourne le journal du ResultElement le plus récent
      */
     public get log() {
         // return this._globalLog;
@@ -130,14 +140,14 @@ export class Result extends JalhydObject implements INamedIterableValues {
     }
 
     /**
-     * retourne le code du 1er ResultElement
+     * retourne le code du ResultElement le plus récent
      */
     public get code(): MessageCode {
         return this.resultElement.code;
     }
 
     /**
-     * retourne les résultats complémentaires du 1er ResultElement
+     * retourne les résultats complémentaires du ResultElement le plus récent
      */
     get extraResults() {
         return this.resultElement.extraResults;
diff --git a/src/util/resultelement.ts b/src/util/resultelement.ts
index 201542bf..a2bfcae1 100644
--- a/src/util/resultelement.ts
+++ b/src/util/resultelement.ts
@@ -65,6 +65,13 @@ export class ResultElement {
         return this.log.messages.length;
     }
 
+    /**
+     * Returns true if current log has at least one message
+     */
+    public get hasLog() {
+        return this.messageCount > 0;
+    }
+
     public get hasErrorMessages(): boolean {
         for (const m of this.log.messages) {
             if (m.code !== MessageCode.ERROR_OK && m.getSeverity() === MessageSeverity.ERROR) {
-- 
GitLab