Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.frontend into SI-3105-Spannungsebene-Pflichtfeld
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 cf20d89..d78ff29 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
@@ -267,6 +267,7 @@
                   type="text"
                   class="form-control"
                   id="voltageLevel"
+                  name="voltageLevel"
                   [ngrxFormControlState]="formState.controls['voltageLevel']"
                   (change)="gridFailureDetailsSandbox.resetFailureLocationValues(); setLocation()"
                 >
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 5f9277e..c352742 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
@@ -491,10 +491,12 @@
     service.noBranchId = '123';
     const spy1 = spyOn(service as any, '_setNoBranchId');
     const spy2 = spyOn(service as any, '_setGasBranchId');
+    const spy3 = spyOn(service as any, '_setPowerBranchId');
     (service as any)._setBranchIds();
     expect(service.noBranchId).toBe('123');
     expect(spy1).toHaveBeenCalled();
     expect(spy2).toHaveBeenCalled();
+    expect(spy3).toHaveBeenCalled();
   });
 
   it('should not set the noBranchId value null if not found OS Brnach', () => {
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 c84afc8..4ad2c62 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
@@ -27,6 +27,7 @@
   INITIAL_STATE,
   NO_BRANCH_ID_KEY,
   GAS_BRANCH_ID_KEY,
+  POWER_BRANCH_ID_KEY,
 } from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer';
 import { navigateHome, stationToStationDescriptionConverter, sortAlphaNum } from '@grid-failure-information-app/shared/utility';
 import { unboxProperties } from '@grid-failure-information-app/shared/utility/form-utils';
@@ -82,6 +83,7 @@
   public maxVersionNumber: number;
   public currentGridFailureDetailsCoords: models.FailureCoordsInformation = new models.FailureCoordsInformation();
   public noBranchId: string;
+  public powerBranchId: string;
   public isFieldRequiredDependingOnBranchId: boolean = false;
 
   public addressCommunities$: Observable<Array<string>> = this.actionsSubject.pipe(
@@ -801,6 +803,7 @@
       if (branches.length > 0) {
         this._setNoBranchId(branches);
         this._setGasBranchId(branches);
+        this._setPowerBranchId(branches);
       }
     });
   }
@@ -811,6 +814,12 @@
     this.appState$.dispatch(new SetUserDefinedPropertyAction(FORM_ID, NO_BRANCH_ID_KEY, this.noBranchId));
   }
 
+  private _setPowerBranchId(branches: models.FailureBranch[]): void {
+    const powerBranch: models.FailureBranch = branches.find(branch => branch.name === enums.BranchNameEnum.POWER);
+    this.powerBranchId = !!powerBranch ? powerBranch.id : null;
+    this.appState$.dispatch(new SetUserDefinedPropertyAction(FORM_ID, POWER_BRANCH_ID_KEY, this.powerBranchId));
+  }
+
   private _setGasBranchId(branches: models.FailureBranch[]): void {
     let gasBranchId: string;
     const gasBranch: models.FailureBranch = branches.find(branch => branch.name === enums.BranchNameEnum.GAS);
diff --git a/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.ts b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.ts
index d65ebed..fb78969 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.ts
@@ -37,6 +37,7 @@
 export const FORM_CONTROLS: FormGroupControls<GridFailure> = INITIAL_STATE.controls;
 export const NO_BRANCH_ID_KEY: string = 'NO_BRANCH_ID';
 export const GAS_BRANCH_ID_KEY: string = 'GAS_BRANCH_ID';
+export const POWER_BRANCH_ID_KEY: string = 'POWER_BRANCH_ID';
 
 /**
  * Helper method checks if one of dependet fields (field nameIds passed as controlNames:string[]) is set to null.
@@ -106,7 +107,7 @@
   return validateForm(formState, currentAction);
 }
 
-export function requiredIf(propState: any, formState: any, controlId: string, dependencyPropertyKey: string): any {
+export function notRequiredIf(propState: any, formState: any, controlId: string, dependencyPropertyKey: string): any {
   const dependencyProperty: string = getDependencyPropertyFromControlId(controlId);
   if (formState.controls[dependencyProperty].value !== formState.userDefinedProperties[dependencyPropertyKey]) {
     return validate(propState, required);
@@ -114,6 +115,14 @@
   return validate(propState, item => null);
 }
 
+export function requiredIf(propState: any, formState: any, controlId: string, dependencyPropertyKey: string): any {
+  const dependencyProperty: string = getDependencyPropertyFromControlId(controlId);
+  if (formState.controls[dependencyProperty].value === formState.userDefinedProperties[dependencyPropertyKey]) {
+    return validate(propState, required);
+  }
+  return validate(propState, item => null);
+}
+
 export const validateForm: ActionReducer<FormState<GridFailure>> = createFormStateReducerWithUpdate<GridFailure>(
   updateGroup<GridFailure>(
     {
@@ -190,28 +199,31 @@
     },
     {
       postcode: (propState, formState): any => {
-        return requiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+        return notRequiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
       },
       city: (propState, formState): any => {
-        return requiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+        return notRequiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
       },
       street: (propState, formState): any => {
-        return requiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+        return notRequiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
       },
       latitude: (propState, formState): any => {
-        return requiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+        return notRequiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
       },
       longitude: (propState, formState): any => {
-        return requiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+        return notRequiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
       },
       district: (propState, formState): any => {
-        return requiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+        return notRequiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
       },
       housenumber: (propState, formState): any => {
-        return requiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+        return notRequiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
       },
       radiusId: (propState, formState): any => {
-        return requiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+        return notRequiredIf(propState, formState, formState.controls.branchId.id, NO_BRANCH_ID_KEY);
+      },
+      voltageLevel: (propState, formState): any => {
+        return requiredIf(propState, formState, formState.controls.branchId.id, POWER_BRANCH_ID_KEY);
       },
     },
     {
@@ -221,6 +233,7 @@
     },
     {
       branchId: validate(required),
+      // voltageLevel: validate(required),
       failureBegin: validate(required),
       expectedReasonId: validate(required),
       __formBranch: validate(required),