[SI-536]: total commit (without unit tests)

Signed-off-by: Dennis Schmitt <dennis.schmitt@pta.de>
diff --git a/i18n/grid-failure.de.json b/i18n/grid-failure.de.json
index 0d5bab2..39df1cc 100644
--- a/i18n/grid-failure.de.json
+++ b/i18n/grid-failure.de.json
@@ -19,6 +19,7 @@
     "SubTitle2": "Störungsdetails",
     "SubTitle3": "Störungsort [NS]",
     "SubTitle4": "Stationsattribute [MS]",
+    "SubTitle5": "Störungsort",
     "Version": "Version",
     "CreatedOn": "erstellt am",
     "CreatedFrom": "von User",
@@ -46,7 +47,7 @@
     "Street": "Straße (betroffene Straße)",
     "VoltageLevel": "Spannungsebene",
     "PublicationStatus": "Veröffentlichungsstatus",
-    "MapView": "Kartenansicht",
+    "Map": "Karte",
     "Description": "Beschreibung"
   },
   "GridFailureTemp": {
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
index c609427..020c494 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
@@ -152,15 +152,15 @@
             <div class="form-group row">
               <label for="statusIntern" class="col-sm-2 col-form-label">{{ 'GridFailure.StatusIntern' | translate }}</label>
               <div class="col-sm-4">
-                <input
-                  id="statusIntern"
+                <select
+                  required
                   type="text"
-                  maxlength="255"
                   class="form-control"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['statusIntern']"
-                  autocomplete="off"
-                  readonly
-                />
+                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['statusInternId']"
+                >
+                  <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                  <option *ngFor="let state of gridFailureDetailsSandbox.gridFailureInternalStates$ | async" [value]="state.id">{{ state.status }}</option>
+                </select>
               </div>
             </div>
 
@@ -168,15 +168,15 @@
             <div class="form-group row">
               <label for="statusExtern" class="col-sm-2 col-form-label">{{ 'GridFailure.StatusExtern' | translate }}</label>
               <div class="col-sm-4">
-                <input
-                  id="statusExtern"
+                <select
+                  required
                   type="text"
-                  maxlength="255"
                   class="form-control"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['statusExtern']"
-                  autocomplete="off"
-                  readonly
-                />
+                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['statusExternId']"
+                >
+                  <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                  <option *ngFor="let state of gridFailureDetailsSandbox.gridFailureExternalStates$ | async" [value]="state.id">{{ state.status }}</option>
+                </select>
               </div>
             </div>
 
@@ -387,21 +387,6 @@
               </div>
             </div>
 
-            <!-- description -->
-            <div class="form-group row">
-              <label for="description" class="col-sm-2 col-form-label">{{ 'GridFailure.Description' | translate }}</label>
-              <div class="col-sm-4">
-                <input
-                  type="text"
-                  maxlength="255"
-                  class="form-control"
-                  id="description"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['description']"
-                  autocomplete="off"
-                />
-              </div>
-            </div>
-
             <!-- internalRemark -->
             <div class="form-group row">
               <label for="internalRemark" class="col-sm-2 col-form-label">{{ 'GridFailure.InternalRemark' | translate }}</label>
@@ -420,147 +405,188 @@
         </app-expandable>
 
         <app-expandable [showBodyInitially]="true">
-          <label header>{{ 'GridFailure.SubTitle3' | translate }}</label>
+          <label header>{{ 'GridFailure.SubTitle5' | translate }}</label>
 
           <div class="expandable-content" body>
-            <!-- postcode -->
-            <div class="form-group row">
-              <label for="postcode" class="col-sm-2 col-form-label">{{ 'GridFailure.Postcode' | translate }}</label>
-              <div class="col-sm-4">
-                <input
-                  [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
-                  type="text"
-                  maxlength="255"
-                  class="form-control"
-                  id="postcode"
-                  [ngbTypeahead]="gridFailureDetailsSandbox.searchForAddressPostalcodes"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['postcode']"
-                  autocomplete="off"
-                />
+            <div class="nav col-xs-4 center">
+              <div class="btn-group">
+                <button
+                  class="btn btn-primary non-outline"
+                  (click)="
+                    mapInteractionMode = false;
+                    failureLocationView = 'NS';
+                    saveWithoutHideRequiredProperties();
+                    gridFailureDetailsSandbox.resetFailureLocationValues()
+                  "
+                  [class.active]="failureLocationView === 'NS'"
+                >
+                  {{ 'GridFailure.SubTitle3' | translate }}
+                </button>
+                <button
+                  class="btn btn-primary non-outline"
+                  (click)="
+                    mapInteractionMode = false;
+                    failureLocationView = 'MS';
+                    saveWithoutHideRequiredProperties();
+                    gridFailureDetailsSandbox.resetFailureLocationValues()
+                  "
+                  [class.active]="failureLocationView === 'MS'"
+                >
+                  {{ 'GridFailure.SubTitle4' | translate }}
+                </button>
+                <button
+                  class="btn btn-primary non-outline"
+                  (click)="
+                    mapInteractionMode = true;
+                    failureLocationView = 'map';
+                    saveWithoutHideRequiredProperties();
+                    gridFailureDetailsSandbox.resetFailureLocationValues()
+                  "
+                  [class.active]="failureLocationView === 'map'"
+                >
+                  {{ 'GridFailure.Map' | translate }}
+                </button>
               </div>
             </div>
 
-            <!-- city -->
-            <div class="form-group row">
-              <label for="city" class="col-sm-2 col-form-label">{{ 'GridFailure.City' | translate }}</label>
-              <div class="col-sm-4">
-                <select
-                  [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
-                  type="text"
-                  class="form-control"
-                  id="city"
-                  [disabled]="!gridFailureDetailsSandbox.saveEnabled"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['city']"
-                >
-                  <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
-                  <option *ngFor="let item of gridFailureDetailsSandbox.addressCommunities$ | async" [value]="item">{{ item }}</option>
-                </select>
-              </div>
-            </div>
+            <div class="fault-location-container">
+              <div class="NS-fields" *ngIf="failureLocationView === 'NS'">
+                <!-- postcode -->
+                <div class="form-group row">
+                  <label for="postcode" class="col-sm-5 col-form-label">{{ 'GridFailure.Postcode' | translate }}</label>
+                  <div class="col-sm-6">
+                    <input
+                      [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
+                      type="text"
+                      maxlength="255"
+                      class="form-control"
+                      id="postcode"
+                      [ngbTypeahead]="gridFailureDetailsSandbox.searchForAddressPostalcodes"
+                      [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['postcode']"
+                      autocomplete="off"
+                    />
+                  </div>
+                </div>
 
-            <!-- district -->
-            <div class="form-group row">
-              <label for="district" class="col-sm-2 col-form-label">{{ 'GridFailure.District' | translate }}</label>
-              <div class="col-sm-4">
-                <select
-                  [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
-                  type="text"
-                  class="form-control"
-                  id="district"
-                  [disabled]="!gridFailureDetailsSandbox.saveEnabled"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['district']"
-                >
-                  <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
-                  <option *ngFor="let item of gridFailureDetailsSandbox.addressDistricts$ | async" [value]="item">{{ item }}</option>
-                </select>
-              </div>
-            </div>
+                <!-- city -->
+                <div class="form-group row">
+                  <label for="city" class="col-sm-5 col-form-label">{{ 'GridFailure.City' | translate }}</label>
+                  <div class="col-sm-6">
+                    <select
+                      [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
+                      type="text"
+                      class="form-control"
+                      id="city"
+                      [disabled]="!gridFailureDetailsSandbox.saveEnabled"
+                      [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['city']"
+                    >
+                      <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                      <option *ngFor="let item of gridFailureDetailsSandbox.addressCommunities$ | async" [value]="item">{{ item }}</option>
+                    </select>
+                  </div>
+                </div>
 
-            <!-- street -->
-            <div class="form-group row">
-              <label for="street" class="col-sm-2 col-form-label">{{ 'GridFailure.Street' | translate }}</label>
-              <div class="col-sm-4">
-                <select
-                  [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
-                  type="text"
-                  class="form-control"
-                  id="street"
-                  [disabled]="!gridFailureDetailsSandbox.saveEnabled"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['street']"
-                >
-                  <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
-                  <option *ngFor="let item of gridFailureDetailsSandbox.addressStreets$ | async" [value]="item">{{ item }}</option>
-                </select>
-              </div>
-            </div>
+                <!-- district -->
+                <div class="form-group row">
+                  <label for="district" class="col-sm-5 col-form-label">{{ 'GridFailure.District' | translate }}</label>
+                  <div class="col-sm-6">
+                    <select
+                      [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
+                      type="text"
+                      class="form-control"
+                      id="district"
+                      [disabled]="!gridFailureDetailsSandbox.saveEnabled"
+                      [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['district']"
+                    >
+                      <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                      <option *ngFor="let item of gridFailureDetailsSandbox.addressDistricts$ | async" [value]="item">{{ item }}</option>
+                    </select>
+                  </div>
+                </div>
 
-            <!-- housenumber -->
-            <div class="form-group row">
-              <label for="housenumber" class="col-sm-2 col-form-label">{{ 'GridFailure.Housenumber' | translate }}</label>
-              <div class="col-sm-4">
-                <select
-                  [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
-                  type="text"
-                  class="form-control"
-                  id="housenumber"
-                  [disabled]="!gridFailureDetailsSandbox.saveEnabled"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['housenumber']"
-                >
-                  <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
-                  <option *ngFor="let housenumber of gridFailureDetailsSandbox.addressHouseNumbers$ | async" [value]="housenumber">{{ housenumber }} </option>
-                </select>
-              </div>
-            </div>
-          </div>
-        </app-expandable>
-        <app-expandable [showBodyInitially]="true">
-          <label header>{{ 'GridFailure.SubTitle4' | translate }}</label>
-          <div class="expandable-content" body>
-            <!-- stationDescription -->
-            <div class="form-group row">
-              <label for="stationDescription" class="col-sm-2 col-form-label">{{ 'GridFailure.StationDescription' | translate }}</label>
-              <div class="col-sm-4">
-                <input
-                  type="text"
-                  maxlength="255"
-                  id="stationDescription"
-                  class="form-control"
-                  autocomplete="off"
-                  (input)="resetCoords($event.target.value)"
-                  (selectItem)="gridFailureDetailsSandbox.latLonMapping($event.item); gridFailureDetailsSandbox.setStationId($event.item.stationId)"
-                  [ngbTypeahead]="gridFailureDetailsSandbox.searchForStation"
-                  [ngrxValueConverter]="gridFailureDetailsSandbox.stationValueConverter"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['stationDescription']"
-                  [resultFormatter]="gridFailureDetailsSandbox.formatter"
-                  [inputFormatter]="gridFailureDetailsSandbox.formatter"
-                />
-              </div>
-            </div>
-            <!-- radius -->
-            <div class="form-group row">
-              <label for="radius" class="col-sm-2 col-form-label">{{ 'GridFailure.RadiusInMeter' | translate }}</label>
-              <div class="col-sm-4">
-                <select
-                  required
-                  type="text"
-                  class="form-control"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['radiusId']"
-                >
-                  <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
-                  <option *ngFor="let item of gridFailureDetailsSandbox.gridFailureRadii$ | async" [value]="item.id">{{ item.radius }}</option>
-                </select>
-              </div>
-            </div>
-          </div>
-        </app-expandable>
+                <!-- street -->
+                <div class="form-group row">
+                  <label for="street" class="col-sm-5 col-form-label">{{ 'GridFailure.Street' | translate }}</label>
+                  <div class="col-sm-6">
+                    <select
+                      [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
+                      type="text"
+                      class="form-control"
+                      id="street"
+                      [disabled]="!gridFailureDetailsSandbox.saveEnabled"
+                      [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['street']"
+                    >
+                      <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                      <option *ngFor="let item of gridFailureDetailsSandbox.addressStreets$ | async" [value]="item">{{ item }}</option>
+                    </select>
+                  </div>
+                </div>
 
-        <app-expandable [showBodyInitially]="true">
-          <label header>{{ 'GridFailure.MapView' | translate }}</label>
-          <div class="expandable-content map-container" body>
-            <div class="map-detail-view">
-              <openk-grid-failure-information-map
-                [mapDetailData]="gridFailureDetailsSandbox.currentGridFailureDetailsCoords"
-              ></openk-grid-failure-information-map>
+                <!-- housenumber -->
+                <div class="form-group row">
+                  <label for="housenumber" class="col-sm-5 col-form-label">{{ 'GridFailure.Housenumber' | translate }}</label>
+                  <div class="col-sm-6">
+                    <select
+                      [required]="gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId"
+                      type="text"
+                      class="form-control"
+                      id="housenumber"
+                      [disabled]="!gridFailureDetailsSandbox.saveEnabled"
+                      [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['housenumber']"
+                    >
+                      <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                      <option *ngFor="let housenumber of gridFailureDetailsSandbox.addressHouseNumbers$ | async" [value]="housenumber"
+                        >{{ housenumber }}
+                      </option>
+                    </select>
+                  </div>
+                </div>
+              </div>
+
+              <div class="MS-fields" *ngIf="failureLocationView === 'MS'">
+                <!-- stationDescription -->
+                <div class="form-group row">
+                  <label for="stationDescription" class="col-sm-5 col-form-label">{{ 'GridFailure.StationDescription' | translate }}</label>
+                  <div class="col-sm-6">
+                    <input
+                      type="text"
+                      maxlength="255"
+                      id="stationDescription"
+                      class="form-control"
+                      autocomplete="off"
+                      (input)="resetCoords($event.target.value)"
+                      (selectItem)="gridFailureDetailsSandbox.latLonMapping($event.item); gridFailureDetailsSandbox.setStationId($event.item.stationId)"
+                      [ngbTypeahead]="gridFailureDetailsSandbox.searchForStation"
+                      [ngrxValueConverter]="gridFailureDetailsSandbox.stationValueConverter"
+                      [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['stationDescription']"
+                      [resultFormatter]="gridFailureDetailsSandbox.formatter"
+                      [inputFormatter]="gridFailureDetailsSandbox.formatter"
+                    />
+                  </div>
+                </div>
+                <!-- radius -->
+                <div class="form-group row">
+                  <label for="radius" class="col-sm-5 col-form-label">{{ 'GridFailure.RadiusInMeter' | translate }}</label>
+                  <div class="col-sm-6">
+                    <select
+                      required
+                      type="text"
+                      class="form-control"
+                      [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['radiusId']"
+                    >
+                      <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                      <option *ngFor="let item of gridFailureDetailsSandbox.gridFailureRadii$ | async" [value]="item.id">{{ item.radius }}</option>
+                    </select>
+                  </div>
+                </div>
+              </div>
+              <div class="map-detail-view">
+                <openk-grid-failure-information-map
+                  [mapDetailData]="gridFailureDetailsSandbox.currentGridFailureDetailsCoords"
+                  [setInteractionMode]="mapInteractionMode"
+                  (latLong)="gridFailureDetailsSandbox.latLonMapping($event)"
+                ></openk-grid-failure-information-map>
+              </div>
             </div>
           </div>
         </app-expandable>
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.scss b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.scss
index 8ac0d62..234e5fd 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.scss
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.scss
@@ -62,11 +62,19 @@
   margin-left: 0px;
 }
 .expandable-content {
+  position: relative;
   padding: 20px 35px 20px 35px;
 }
-.map-container {
-  height: 600px;
+.nav {
   width: 100%;
+  padding-bottom: 30px;
+  justify-content: center;
+}
+.fault-location-container {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  justify-content: flex-start;
 }
 .header-container {
   display: flex;
@@ -82,5 +90,17 @@
 }
 .map-detail-view {
   position: relative;
-  height: -webkit-fill-available;
+  flex-grow: 2;
+  min-width: 300px;
+  height: 430px;
+}
+.NS-fields,
+.MS-fields {
+  min-width: 530px;
+}
+.non-outline {
+  box-shadow: none !important;
+}
+.form-group:last-child {
+  margin-bottom: 10px;
 }
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 896f64a..9ace7a4 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
@@ -15,7 +15,7 @@
 import { Store } from '@ngrx/store';
 import { of } from 'rxjs';
 
-describe('GridFailureDetailsComponent', () => {
+fdescribe('GridFailureDetailsComponent', () => {
   let component: GridFailureDetailsComponent;
   let gridFailureSandbox: any;
   let gridFailureDetailsFormResponse: any = {
@@ -29,16 +29,17 @@
 
   beforeEach(() => {
     appState = { dispatch: () => {}, pipe: () => of(true), select: () => of(true) } as any;
-    gridFailureSandbox = {
-      clearGridFailureData() {},
-      setGridFailureDateTime(dateISOString: string, actionType: string) {},
-      registerEvents() {},
-      endSubscriptions() {},
-      resetCoords() {},
-      resetStationId() {},
-      resetPostCode() {},
-      gridFailureDetailsFormState$: of(gridFailureDetailsFormResponse),
-    } as any;
+    const gridFailureDetailsFormState = { value: { postcode: 67854 } },
+      gridFailureSandbox = {
+        clearGridFailureData() {},
+        setGridFailureDateTime(dateISOString: string, actionType: string) {},
+        registerEvents() {},
+        endSubscriptions() {},
+        resetCoords() {},
+        resetStationId() {},
+        resetPostCode() {},
+        gridFailureDetailsFormState$: of(gridFailureDetailsFormResponse),
+      } as any;
     component = new GridFailureDetailsComponent(gridFailureSandbox, appState);
   });
 
@@ -98,4 +99,11 @@
     expect(spy1).toHaveBeenCalled();
     expect(spy2).toHaveBeenCalled();
   });
+
+  // it('checks if saveWithoutRequiredProperties()-function works fine', () => {
+  //   let spy1 = spyOn(gridFailureSandbox, 'saveFailureLocationSpecificParts');
+  //   component.failureLocationView = 'MS';
+  //   component.saveWithoutHideRequiredProperties();
+  //   expect(spy1).toHaveBeenCalled();
+  // });
 });
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 a0e9cfd..f935225 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
@@ -1,3 +1,4 @@
+import { AfterViewInit } from '@angular/core';
 /********************************************************************************
  * Copyright (c) 2020 Contributors to the Eclipse Foundation
  *
@@ -18,6 +19,7 @@
 import * as store from '@grid-failure-information-app/shared/store';
 import { Store } from '@ngrx/store';
 import { Observable } from 'rxjs';
+import { take, takeUntil } from 'rxjs/operators';
 
 @Component({
   selector: 'app-grid-failure-details',
@@ -29,11 +31,14 @@
   public RolesEnum = RolesEnum;
   public StateEnum = StateEnum;
   public gridFailureVersions$: Observable<GridFailure[]> = this.appState$.select(store.getGridFailureVersionsData);
+  public failureLocationView: string;
+  public mapInteractionMode: boolean;
 
   constructor(public gridFailureDetailsSandbox: GridFailureDetailsSandbox, protected appState$: Store<store.State>) {}
 
   ngOnInit() {
     this.gridFailureDetailsSandbox.registerEvents();
+    this._initialFailureLocationState();
   }
 
   public setGridFailureDateTime(dateTime: any, actionType: string): void {
@@ -52,6 +57,10 @@
     }
   }
 
+  public saveWithoutHideRequiredProperties() {
+    this.gridFailureDetailsSandbox.saveFailureLocationSpecificParts(this.failureLocationView);
+  }
+
   private _createDateTime(dateTime: any): Date {
     let date: Date = new Date();
     date.setDate(dateTime.day);
@@ -63,6 +72,32 @@
     return date;
   }
 
+  private _initialFailureLocationState() {
+    this.gridFailureDetailsSandbox.isAdressLoaded().subscribe(() => {
+      if (!!this.gridFailureDetailsSandbox.currentFormState.controls.postcode.value) {
+        this.failureLocationView = Globals.FAILURE_LOCATION_NS;
+        this.gridFailureDetailsSandbox.saveFailureLocationSpecificParts(this.failureLocationView);
+        this.mapInteractionMode = false;
+      } else if (!!this.gridFailureDetailsSandbox.currentFormState.controls.stationDescription.value) {
+        this.failureLocationView = Globals.FAILURE_LOCATION_MS;
+        this.gridFailureDetailsSandbox.saveFailureLocationSpecificParts(this.failureLocationView);
+        this.mapInteractionMode = false;
+      } else if (
+        !this.gridFailureDetailsSandbox.currentFormState.controls.postcode.value &&
+        !this.gridFailureDetailsSandbox.currentFormState.controls.stationDescription.value &&
+        this.gridFailureDetailsSandbox.currentFormState.controls.latitude.value
+      ) {
+        this.failureLocationView = Globals.FAILURE_LOCATION_MAP;
+        this.gridFailureDetailsSandbox.saveFailureLocationSpecificParts(this.failureLocationView);
+        this.mapInteractionMode = true;
+      } else {
+        this.failureLocationView = Globals.FAILURE_LOCATION_NS;
+        this.gridFailureDetailsSandbox.saveFailureLocationSpecificParts(this.failureLocationView);
+        this.mapInteractionMode = false;
+      }
+    });
+  }
+
   ngOnDestroy() {
     this.gridFailureDetailsSandbox.endSubscriptions();
   }
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
index 7c731a6..5b2b9cf 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
@@ -1,3 +1,4 @@
+import { SetValueAction } from 'ngrx-forms';
 /********************************************************************************
  * Copyright (c) 2020 Contributors to the Eclipse Foundation
  *
@@ -580,4 +581,49 @@
     (service as any).setNoBranchId();
     expect(service.noBranchId).toBe(null);
   });
+
+  it('should call resetFailureLocationValues and dispatch an setValueAction', () => {
+    const gfdetail = new GridFailure();
+    gfdetail.id = 'id';
+    gfdetail.responsibility = 'test';
+    gfdetail.stationId = 'test';
+
+    service.currentFormState = {
+      ...service.currentFormState,
+      isValid: true,
+      value: gfdetail,
+    };
+
+    service.resetFailureLocationValues();
+    expect(dispatchSpy).toHaveBeenCalled();
+  });
+
+  it('should call saveFailureLocationSpecificParts', () => {
+    service.saveEnabled = false;
+    let part: string = 'NS';
+    service.saveFailureLocationSpecificParts(part);
+    expect(service.saveEnabled).toBeTruthy();
+
+    service.saveEnabled = false;
+    part = 'MS';
+    service.saveFailureLocationSpecificParts(part);
+    expect(service.saveEnabled).toBeTruthy();
+
+    service.saveEnabled = false;
+    part = 'map';
+    service.saveFailureLocationSpecificParts(part);
+    expect(service.saveEnabled).toBeTruthy();
+
+    service.saveEnabled = false;
+    part = 'test';
+    service.saveFailureLocationSpecificParts(part);
+    expect(service.saveEnabled).toBeFalsy();
+  });
+
+  it('should call saveFailureLocationSpecificParts', () => {
+    const subject = service.isAdressLoaded();
+    subject.subscribe(item => {
+      expect(item).toBeTruthy();
+    });
+  });
 });
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 b04ec10..4c49391 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
@@ -10,6 +10,7 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
+import { loadAddressCommunities } from './../../../shared/store/actions/grid-failures.action';
 import { Injectable } from '@angular/core';
 import { Router } from '@angular/router';
 import { SafetyQueryDialogComponent } from '@grid-failure-information-app/shared/components/dialogs/safety-query-dialog/safety-query-dialog.component';
@@ -460,6 +461,57 @@
       map(term => (term.length < 2 ? [] : this._addressPostalcodes.filter(v => v.toLowerCase().indexOf(term.toLowerCase()) > -1)))
     );
 
+  public resetFailureLocationValues() {
+    this.appState$.dispatch(
+      new SetValueAction(this.currentFormState.id, {
+        ...this.currentFormState.value,
+        stationDescription: null,
+        stationId: null,
+        latitude: null,
+        longitude: null,
+        postcode: null,
+        district: null,
+        city: null,
+        street: null,
+        housenumber: null,
+        radius: null,
+        radiusId: null,
+      })
+    );
+  }
+
+  public saveFailureLocationSpecificParts(part: string): void {
+    //disable required proteries that are not needed
+    switch (part) {
+      case Globals.FAILURE_LOCATION_NS:
+        this.appState$.dispatch(new EnableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.postcode.id));
+        this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.radiusId.id));
+        this.saveEnabled = true;
+        break;
+      case Globals.FAILURE_LOCATION_MS:
+        this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.postcode.id));
+        this.appState$.dispatch(new EnableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.radiusId.id));
+        this.saveEnabled = true;
+        break;
+      case Globals.FAILURE_LOCATION_MAP:
+        this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.postcode.id));
+        this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.radiusId.id));
+        this.saveEnabled = true;
+        break;
+      default:
+        break;
+    }
+  }
+  /**
+   * isAdressLoaded
+   */
+  public isAdressLoaded(): Observable<boolean> {
+    return this.actionsSubject.pipe(
+      ofType(loadAddressCommunities.type),
+      map(item => true),
+      take(1)
+    );
+  }
   private _loadInitialDependentFieldValues(formState: FormGroupState<GridFailure>) {
     if (!formState.value || !formState.controls) return;
     this.appState$.dispatch(gridFailureActions.loadAddressCommunities({ payload: formState.value.postcode }));
diff --git a/projects/grid-failure-information-app/src/app/shared/constants/globals.ts b/projects/grid-failure-information-app/src/app/shared/constants/globals.ts
index a0be42a..85bfb6d 100644
--- a/projects/grid-failure-information-app/src/app/shared/constants/globals.ts
+++ b/projects/grid-failure-information-app/src/app/shared/constants/globals.ts
@@ -19,6 +19,9 @@
   public static STATUS_INTERN_FIELD: string = 'statusIntern';
   public static SET_FILTER_COMPONENT: string = 'setFilterComponent';
   public static NO_BRANCH_NAME: string = 'OS';
+  public static FAILURE_LOCATION_NS: string = 'NS';
+  public static FAILURE_LOCATION_MS: string = 'MS';
+  public static FAILURE_LOCATION_MAP: string = 'map';
 
   public static LOCALE_TEXT: any = {
     equals: 'ist gleich',
diff --git a/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.ts b/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.ts
index fc63408..cc785d3 100644
--- a/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.ts
+++ b/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.ts
@@ -1,3 +1,4 @@
+import { on } from '@ngrx/store';
 /********************************************************************************
  * Copyright (c) 2020 Contributors to the Eclipse Foundation
  *
@@ -10,7 +11,7 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
-import { Component, AfterViewInit, Input } from '@angular/core';
+import { Component, AfterViewInit, Input, Output, EventEmitter } from '@angular/core';
 import * as L from 'leaflet';
 import { Globals } from '@openk-libs/grid-failure-information-map/constants/globals';
 import { GridFailureMapInformation } from '@openk-libs/grid-failure-information-map/shared/models/grid-failure-coordinates.model';
@@ -26,6 +27,7 @@
 export class GridFailureInformationMapComponent implements AfterViewInit {
   private _mapData: Array<GridFailureMapInformation> = [];
   private _mapDetailData: GridFailureMapInformation;
+  private _interactionMode: boolean;
 
   @Input()
   public set mapData(data: Array<any>) {
@@ -53,6 +55,13 @@
     this._setDetailMarker();
   }
 
+  @Input()
+  public set setInteractionMode(interactionMode: boolean) {
+    this._interactionMode = interactionMode;
+  }
+
+  @Output() latLong: EventEmitter<any> = new EventEmitter();
+
   private _map: any;
   private _icon = L.icon({
     iconUrl: './marker-icon.png',
@@ -77,6 +86,8 @@
       crossOrigin: null,
     });
     tiles.addTo(this._map);
+
+    this._map.on('click', this._emitLatLongValues.bind(this));
   }
 
   private _setMultipleMarkers(): void {
@@ -125,4 +136,11 @@
       }).addTo(this._map);
     }
   }
+
+  private _emitLatLongValues(event) {
+    if (this._interactionMode) {
+      const latLonValues = { latitude: event.latlng.lat, longitude: event.latlng.lng };
+      this.latLong.emit(latLonValues);
+    }
+  }
 }