GNM-1123: FE Webservice getNetworkControlsFromSingleGridmeasures aufrufen
GNM-1119: Feld "Netzführung / Netzservice / Genehmiger" zu Autocomplete-Feld machen
diff --git a/package.json b/package.json
index 317e3d5..4327418 100644
--- a/package.json
+++ b/package.json
@@ -72,4 +72,4 @@
     "tslint": "5.9.1",
     "typescript": "2.5.3"
   }
-}
+}
\ No newline at end of file
diff --git a/src/app/common/globals.ts b/src/app/common/globals.ts
index e3db557..d781c0f 100644
--- a/src/app/common/globals.ts
+++ b/src/app/common/globals.ts
@@ -21,6 +21,7 @@
     static BRANCHESNAME = 'BRANCHES';
     static BRANCHLEVELSNAME = 'BRANCHLEVELS';
     static RESPONSIBILITIESNAME = 'RESPONSIBILITIES';
+    static NETWORKCONTROLSNAME = 'NETWORKCONTROLS';
     static TERRITORY = 'TERRITORY';
     static USER_SETTINGS = 'USER_SETTINGS';
     static FILTERING_SEARCH_TEXT = 'FILTERING_SEARCH_TEXT';
diff --git a/src/app/common/session-context.ts b/src/app/common/session-context.ts
index d319ff1..6a9b862 100644
--- a/src/app/common/session-context.ts
+++ b/src/app/common/session-context.ts
@@ -182,6 +182,15 @@
         return JSON.parse(responsibilities);
     }
 
+    setNetworkControlsFromSingleGridmeasures(networkControls: string[]): void {
+        localStorage.setItem(Globals.NETWORKCONTROLSNAME, JSON.stringify(networkControls));
+    }
+
+    getNetworkControlsFromSingleGridmeasures(): string[] {
+        const networkControls = localStorage.getItem(Globals.NETWORKCONTROLSNAME);
+        return JSON.parse(networkControls);
+    }
+
     setStatuses(statuses: Status[]): void {
         localStorage.setItem(Globals.STATUSES, JSON.stringify(statuses));
     }
diff --git a/src/app/model/grid-measure.ts b/src/app/model/grid-measure.ts
index 814a85e..76d5596 100644
--- a/src/app/model/grid-measure.ts
+++ b/src/app/model/grid-measure.ts
@@ -27,8 +27,8 @@
     statusId?: number;
     switchingObject?: string;
     costCenter?: string;
-    responsibleOnSiteName?: string;
-    responsibleOnSiteDepartment?: string;
+    responsibleOnSiteName?: string; // TODO: gehört hier nicht rein, ist ein Attribut der SGM
+    responsibleOnSiteDepartment?: string; // TODO: gehört hier nicht rein, ist ein Attribut der SGM
     approvalBy?: string;
     areaOfSwitching?: string;
     appointmentRepetition?: string;
diff --git a/src/app/model/single-grid-measure.ts b/src/app/model/single-grid-measure.ts
index 69ccd0f..854f2bd 100644
--- a/src/app/model/single-grid-measure.ts
+++ b/src/app/model/single-grid-measure.ts
@@ -26,4 +26,8 @@
     delete?: boolean;
     listSteps?: Array<Step>;
     listStepsDeleted?: Array<Step>;
+    // TODO: ist ein Attribut der SGM und so wird es Ina auch im backend implementieren
+    // responsibleOnSiteName?: string;
+    // responsibleOnSiteDepartment?: string;
+    NetworkControls?: string;
 }
diff --git a/src/app/pages/single-grid-measure-detail-tab/single-grid-measure-detail-tab.component.html b/src/app/pages/single-grid-measure-detail-tab/single-grid-measure-detail-tab.component.html
index 4917586..77c007d 100644
--- a/src/app/pages/single-grid-measure-detail-tab/single-grid-measure-detail-tab.component.html
+++ b/src/app/pages/single-grid-measure-detail-tab/single-grid-measure-detail-tab.component.html
@@ -84,7 +84,7 @@
             [(ngModel)]="gridMeasureDetail.responsibleOnSiteName" class="form-control" autocomplete="off" />
           <datalist id="responsibleOnSiteNameList">
             <option value=""></option>
-            <option *ngFor="let responsibleOnSiteNameString of responsibleOnSiteNameList" value="{{ responsibleOnSiteNameString}}">{{responsibleOnSiteNameString}}</option>
+            <option *ngFor="let responsibleOnSiteNameString of responsibleOnSiteNameList" value="{{ responsibleOnSiteNameString }}">{{responsibleOnSiteNameString}}</option>
           </datalist>
         </div>
 
@@ -98,8 +98,13 @@
           </datalist>
         </div>
         <div class="col-md-4">
-          <label class="form-field-label">Netzführung / Netzservice / Genehmiger</label>
-          <input maxlength="256" [required]="false" type="text" class="form-control" autocomplete="off" />
+          <label class="form-field-label" for="NetworkControls">Netzführung / Netzservice / Genehmiger</label>
+          <input maxlength="256" [required]="false" type="text" list="NetworkControlsList" name="NetworkControls" id="NetworkControls"
+            [(ngModel)]="singleGridMeasure.NetworkControls" class="form-control" autocomplete="off" />
+          <datalist id="NetworkControlsList">
+            <option value=""></option>
+            <option *ngFor="let NetworkControlsString of NetworkControlsList" value="{{ NetworkControlsString }}">{{getNetworkControlsString}}</option>
+          </datalist>
         </div>
       </div>
 
diff --git a/src/app/pages/single-grid-measure-detail-tab/single-grid-measure-detail-tab.component.ts b/src/app/pages/single-grid-measure-detail-tab/single-grid-measure-detail-tab.component.ts
index faeccd5..ec4fe56 100644
--- a/src/app/pages/single-grid-measure-detail-tab/single-grid-measure-detail-tab.component.ts
+++ b/src/app/pages/single-grid-measure-detail-tab/single-grid-measure-detail-tab.component.ts
@@ -55,6 +55,7 @@
   subscription: Subscription;
   inactiveFields: Array<string> = [];
   responsibleOnSiteNameList: string[];
+  NetworkControlsList: string[];
   responsibleOnSiteDepartmentList: string[];
 
   @ViewChild('singleGridMeasureDetailFormCotainer') singleGridMeasureDetailFormContainer: ElementRef;
@@ -65,6 +66,7 @@
     public sessionContext: SessionContext) { }
 
   ngOnInit() {
+    this.NetworkControlsList = this.sessionContext.getNetworkControlsFromSingleGridmeasures();
     this.responsibleOnSiteNameList = this.sessionContext.getResponsiblesOnSiteFromGridmeasures();
     this.responsibleOnSiteDepartmentList = ['Abteilung1', 'Abteilung2'];
 
diff --git a/src/app/services/base-data.service.ts b/src/app/services/base-data.service.ts
index c0f7e52..1ffc7be 100644
--- a/src/app/services/base-data.service.ts
+++ b/src/app/services/base-data.service.ts
@@ -32,6 +32,12 @@
     private sessionContext: SessionContext) {
   }
 
+  public getNetworkControlsFromSingleGridmeasures(): Observable<string[]> {
+    return this.baseHttpService.callService(
+      new HttpCallInfo(Globals.GRID_MEASURES_SERVICE_NAME, HttpMethodEn.get, '/getNetworkControlsFromSingelGridmeasures', null),
+      this.sessionContext);
+  }
+
   public getResponsiblesOnSiteFromGridmeasures(): Observable<string[]> {
     return this.baseHttpService.callService(
       new HttpCallInfo(Globals.GRID_MEASURES_SERVICE_NAME, HttpMethodEn.get, '/getResponsiblesOnSiteFromGridmeasures', null),
diff --git a/src/app/services/jobs/base-data-loader.service.spec.ts b/src/app/services/jobs/base-data-loader.service.spec.ts
index 3e0c0d3..855fc6f 100644
--- a/src/app/services/jobs/base-data-loader.service.spec.ts
+++ b/src/app/services/jobs/base-data-loader.service.spec.ts
@@ -36,12 +36,14 @@
     public costCenters: CostCenter[];
     public emailAddresses: string[];
     public responsibleOnSiteNameList: string[];
+    public NetworkControlsNameList: string[];
     public areaOfSwitchingList: string[];
     public statusError;
     public branchError;
     public costCenterError;
     public departmentError;
     public responsibleOnSiteNameError;
+    public NetworkControlsNameError;
     public emailAddressesError;
     public areaOfSwitchingError;
 
@@ -59,6 +61,13 @@
       return newService;
     }
 
+    getNetworkControlsFromSingleGridmeasures() {
+      const newService = new MockDataService();
+      newService.content = this.NetworkControlsNameList;
+      newService.error = this.NetworkControlsNameError;
+      return newService;
+    }
+
     getTerritories() {
       const newService = new MockDataService();
       newService.content = this.areaOfSwitchingList;
@@ -162,6 +171,7 @@
     mockDataService.costCenters = [{ id: 1, name: 'cc1' }, { id: 2, name: 'cc2' }];
     mockDataService.emailAddresses = ['testpreconfmail@test.de', 'testpreconfmail2@test.de'];
     mockDataService.responsibleOnSiteNameList = ['harald', 'simon'];
+    mockDataService.NetworkControlsNameList = ['test', 'mich'];
     mockDataService.areaOfSwitchingList = JSON.parse(JSON.stringify(TERRITORY));
     mockUserService.userList = USERS;
     mockBackendSettings.backendSettings = [{ reminderPeriod: 48 }];
@@ -247,6 +257,9 @@
     expect(sessionContext.getResponsiblesOnSiteFromGridmeasures().length).toBe(2);
     expect(sessionContext.getResponsiblesOnSiteFromGridmeasures()[0]).toBe('harald');
 
+    expect(sessionContext.getNetworkControlsFromSingleGridmeasures().length).toBe(2);
+    expect(sessionContext.getNetworkControlsFromSingleGridmeasures()[0]).toBe('test');
+
     expect(sessionContext.getTerritories().length).toBe(3);
     expect(sessionContext.getTerritories()[0].name).toBe('h1');
 
@@ -256,6 +269,7 @@
 
     expect(sessionContext.getBackendsettings()[0].reminderPeriod).toBe(48);
     expect(roleAccessHelper.getRoleAccessDefinitions().editRoles.length > 0).toBeTruthy();
+
   }));
 
   it('should log to the console if errors occur while loading', fakeAsync(() => {
diff --git a/src/app/services/jobs/base-data-loader.service.ts b/src/app/services/jobs/base-data-loader.service.ts
index e07ebb6..0b47c65 100644
--- a/src/app/services/jobs/base-data-loader.service.ts
+++ b/src/app/services/jobs/base-data-loader.service.ts
@@ -56,6 +56,12 @@
           console.log(error);
         });
 
+    this.baseDataService.getNetworkControlsFromSingleGridmeasures()
+      .subscribe(res => this.sessionContext.setNetworkControlsFromSingleGridmeasures(res),
+        error => {
+          console.log(error);
+        });
+
     this.baseDataService.getResponsiblesOnSiteFromGridmeasures()
       .subscribe(res => this.sessionContext.setResponsiblesOnSiteFromGridmeasures(res),
         error => {