Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.frontend into SI-2907-Initiale-Darstellung-des-Stoerungsortes
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
index 8b24c31..7cb22ff 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
@@ -52,6 +52,7 @@
       setBranchState() {},
       setFormStateDirty() {},
       setFormStatePristine() {},
+      setFaultLocationArea() {},
       gridFailureDetailsFormState$: of({ ...INITIAL_STATE, gridFailureDetailsFormResponse } as any),
       currentFormState: INITIAL_STATE,
       disableStationAttributes: false,
@@ -165,6 +166,7 @@
         postcode: 777 as any,
         branch: Globals.BUSINESS_RULE_FIELDS.branch.power,
         voltageLevel: Globals.FAILURE_LOCATION_NS,
+        faultLocationArea: 'address' as any,
       } as any,
     });
     (component as any)._initialFailureLocationState();
@@ -189,6 +191,7 @@
         stationIds: ['1'],
         branch: Globals.BUSINESS_RULE_FIELDS.branch.power,
         voltageLevel: Globals.FAILURE_LOCATION_MS,
+        faultLocationArea: 'station' as any,
       } as any,
     });
     (component as any)._initialFailureLocationState();
@@ -210,6 +213,7 @@
         latitude: 11 as any,
         longitude: 12 as any,
         voltageLevel: Globals.FAILURE_LOCATION_MS,
+        faultLocationArea: 'map' as any,
 
         branch: Globals.BUSINESS_RULE_FIELDS.branch.power,
       } as any,
@@ -234,6 +238,7 @@
         postcode: 7373 as any,
         branch: Globals.BUSINESS_RULE_FIELDS.branch.power,
         voltageLevel: Globals.FAILURE_LOCATION_NS,
+        faultLocationArea: 'address' as any,
       } as any,
     });
     (component as any)._initialFailureLocationState();
@@ -249,21 +254,17 @@
   });
 
   it('should disable unnecessary required properties when setLocation was called', () => {
-    const spy = spyOn(gridFailureSandbox, 'setViewStateForReqProps');
     component.gridFailureDetailsSandbox.gridFailureDetailsFormState$ = of(INITIAL_STATE, {
       ...component.gridFailureDetailsSandbox.currentFormState,
       value: {
         id: 1 as any,
-        housenumber: 44 as any,
-        radius: null as any,
-        latitude: 11 as any,
-        longitude: 12 as any,
+        faultLocationArea: 'address' as any,
 
         branch: Globals.BUSINESS_RULE_FIELDS.branch.power,
       } as any,
     });
     component.setLocation();
-    expect(spy).toHaveBeenCalled();
+    expect(component.failureLocationView).toBe('NS');
   });
 
   it('should reset selected station if no value exists', () => {
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
index 3bfe548..dd67a84 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
@@ -13,7 +13,7 @@
 
 import { Component, OnInit, ViewChild, ElementRef, OnDestroy } from '@angular/core';
 import { GridFailureDetailsSandbox } from '@grid-failure-information-app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox';
-import { ModeEnum, RolesEnum, StateEnum, VoltageLevelEnum } from '@grid-failure-information-app/shared/constants/enums';
+import { ModeEnum, RolesEnum, StateEnum, VoltageLevelEnum, FaultLocationAreaEnum } from '@grid-failure-information-app/shared/constants/enums';
 import { Globals } from '@grid-failure-information-app/shared/constants/globals';
 import { GridFailure } from '@grid-failure-information-app/shared/models/grid-failure.model';
 import * as store from '@grid-failure-information-app/shared/store';
@@ -114,29 +114,28 @@
     const branch = this.gridFailureDetailsSandbox.branches.find(b => b.id === branchId);
     this.gridFailureDetailsSandbox.setBranchState(branch);
   }
-  public setLocation(versionNumber?: string) {
+  public setLocation() {
     this.gridFailureDetailsSandbox.gridFailureDetailsFormState$
       .pipe(
-        map(form => form.value),
-        skipWhile(item => (!item.id && !item.branch) || (!!versionNumber && item.versionNumber !== +versionNumber)),
+        map(form => form.value.faultLocationArea),
+        skipWhile(faultLocationArea => !faultLocationArea),
         take(1)
       )
-      .subscribe(v => {
-        const version = unboxProperties<GridFailure>(v);
-        const isBranchTelecom = version.branch === Globals.BUSINESS_RULE_FIELDS.branch.telecommunication;
-        const isBranchPower = version.branch === Globals.BUSINESS_RULE_FIELDS.branch.power;
-        const isBranchPowerMS = isBranchPower && version.voltageLevel === Globals.FAILURE_LOCATION_MS;
+      .subscribe(faultLocationArea => {
+        switch (faultLocationArea) {
+          case FaultLocationAreaEnum.Address:
+            this.failureLocationView = Globals.FAILURE_LOCATION_NS;
+            break;
+          case FaultLocationAreaEnum.Station:
+            this.failureLocationView = Globals.FAILURE_LOCATION_MS;
+            break;
+          case FaultLocationAreaEnum.Map:
+            this.failureLocationView = Globals.FAILURE_LOCATION_MAP;
+            break;
 
-        if (!!version.postcode) {
-          this.failureLocationView = Globals.FAILURE_LOCATION_NS;
-        } else if (!!unbox(version.stationIds) && !!unbox(version.stationIds).length) {
-          this.failureLocationView = Globals.FAILURE_LOCATION_MS;
-        } else if (!!version.latitude && (!unbox(version.stationIds) || !unbox(version.stationIds).length)) {
-          this.failureLocationView = Globals.FAILURE_LOCATION_MAP;
-        } else if (isBranchPowerMS || isBranchTelecom) {
-          this.failureLocationView = Globals.FAILURE_LOCATION_MS;
-        } else {
-          this.failureLocationView = Globals.FAILURE_LOCATION_NS;
+          default:
+            this.failureLocationView = Globals.FAILURE_LOCATION_NS;
+            break;
         }
         this.gridFailureDetailsSandbox.currentFormState.isEnabled && this.gridFailureDetailsSandbox.setViewStateForReqProps(this.failureLocationView);
       });
@@ -219,11 +218,13 @@
   }
   isLocationRegionActiveForAddress(): boolean {
     const ret = this.failureLocationView && this.failureLocationView !== Globals.FAILURE_LOCATION_NS;
+    this.gridFailureDetailsSandbox.setFaultLocationArea(FaultLocationAreaEnum.Address);
     return ret;
   }
   setLocationRegionToStation() {
     if (this.isLocationRegionActiveForStation()) {
       this.failureLocationView = Globals.FAILURE_LOCATION_MS;
+      this.gridFailureDetailsSandbox.setFaultLocationArea(FaultLocationAreaEnum.Station);
       this.setLocationRegion();
     }
   }
@@ -234,6 +235,7 @@
   setLocationRegionToMap() {
     if (this.isLocationRegionActiveForMap()) {
       this.failureLocationView = Globals.FAILURE_LOCATION_MAP;
+      this.gridFailureDetailsSandbox.setFaultLocationArea(FaultLocationAreaEnum.Map);
       this.setLocationRegion();
     }
   }
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
index f3ed03e..782f007 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
@@ -281,6 +281,10 @@
       });
   }
 
+  public setFaultLocationArea(area: string) {
+    this.appState$.dispatch(new SetValueAction(INITIAL_STATE.controls.faultLocationArea.id, area));
+  }
+
   public setPublishedState(): void {
     if (this.selectedPublicationChannels.length === 0) {
       this._utilService.displayNotification('PublicationRequiresAtLeastOneChannel', 'alert');
diff --git a/projects/grid-failure-information-app/src/app/shared/constants/enums.ts b/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
index 900f65a..d3a2444 100644
--- a/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
+++ b/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
@@ -88,3 +88,9 @@
   SHOW = 'show',
   HIDE = 'hide',
 }
+
+export enum FaultLocationAreaEnum {
+  Address = 'address',
+  Station = 'station',
+  Map = 'map',
+}
diff --git a/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts b/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
index 48cf0ea..6fcdf2a 100644
--- a/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
+++ b/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
@@ -74,6 +74,7 @@
   public failureInformationCondensedId: string = null;
   public addressPolygonPoints: Array<[Number, Number]> | Boxed<Array<[Number, Number]>> = null;
   public description: string = null;
+  public faultLocationArea: string = null;
 
   public constructor(data: any = null) {
     super(data);