From d8504a8a541589f51d496c1cdd7ea1379e32a41f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr>
Date: Thu, 21 Apr 2022 16:23:13 +0200
Subject: [PATCH] fix: empty fields on session loading when 'empty fields on
 calculator creation' option is enabled

refs #530
---
 src/app/formulaire/elements/fieldset.ts        | 11 +++++------
 src/app/formulaire/elements/formulaire-node.ts |  2 +-
 src/app/services/formulaire.service.ts         |  9 +++++++++
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/app/formulaire/elements/fieldset.ts b/src/app/formulaire/elements/fieldset.ts
index cf23d79c9..e5a9ca15a 100644
--- a/src/app/formulaire/elements/fieldset.ts
+++ b/src/app/formulaire/elements/fieldset.ts
@@ -400,9 +400,6 @@ export class FieldSet extends FormulaireElement implements Observer {
                         }
                     } else {
                         if (this.parentForm instanceof FormulaireFixedVar) {
-                            // backup parameters
-                            const oldParams = this.backupParameters();
-
                             // for all select fields known by the form, apply received value
                             // to associated property
                             const selectIds = this.parentForm.selectids;
@@ -421,11 +418,13 @@ export class FieldSet extends FormulaireElement implements Observer {
                                     }
                                 }
                             }
-
-                            // restore parameters
-                            this.restoreParameters(oldParams, FormulaireNode.NeverEmptyFields);
                         }
                     }
+
+                    if (ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit) {
+                        const f = this.parentForm;
+                        f.emptyFields();
+                    }
                     break; // switch (data.action)
             }
         }
diff --git a/src/app/formulaire/elements/formulaire-node.ts b/src/app/formulaire/elements/formulaire-node.ts
index 4ce064883..0ab8a88df 100644
--- a/src/app/formulaire/elements/formulaire-node.ts
+++ b/src/app/formulaire/elements/formulaire-node.ts
@@ -156,7 +156,7 @@ export abstract class FormulaireNode implements IObservable {
             if (p instanceof NgParameter) {
                 if (
                     [ParamValueMode.SINGLE, ParamValueMode.CALCUL].includes(p.valueMode)
-                    && !except.includes(p.id)
+                    && !except.includes(p.id) && !p.isValueModified
                 ) {
                     if (p.valueMode === ParamValueMode.CALCUL) {
                         calcP = p;
diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts
index 5d3910bbf..1bfdbe14f 100644
--- a/src/app/services/formulaire.service.ts
+++ b/src/app/services/formulaire.service.ts
@@ -50,6 +50,7 @@ import { FormulairePAR } from "../formulaire/definition/form-par";
 import { FormulaireVerificateur } from "../formulaire/definition/form-verificateur";
 import { FormulaireEspece } from "../formulaire/definition/form-espece";
 import { FormulairePrebarrage } from "../formulaire/definition/form-prebarrage";
+import { ServiceFactory } from "./service-factory";
 
 @Injectable()
 export class FormulaireService extends Observable {
@@ -628,6 +629,10 @@ export class FormulaireService extends Observable {
      */
     public async loadSession(f: File, formInfos: any[] = []): Promise<{ hasErrors: boolean, loaded: string[] }> {
         try {
+            // disable "empty fields" flag temporarly
+            const emptyFields = ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit;
+            ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit = false;
+
             const s = await this.readSingleFile(f);
             const uids: string[] = [];
             formInfos.forEach((fi) => {
@@ -646,6 +651,10 @@ export class FormulaireService extends Observable {
                 }
                 await this.createFormulaire(nn.nub.calcType, nn.nub, title); // await guarantees loading order
             }
+
+            // restore "empty fields" flag
+            ServiceFactory.applicationSetupService.enableEmptyFieldsOnFormInit = emptyFields;
+
             // apply settings
             if (res.settings) {
                 // model based settings
-- 
GitLab