From 11c9647eca315bf7e12317a0b904688db70abb0a Mon Sep 17 00:00:00 2001
From: "jvanboxtel@wisc.edu" <jvanboxtel@wisc.edu>
Date: Fri, 19 Jul 2019 11:44:44 -0500
Subject: [PATCH] ROENROLL-1874 working what if audits

---
 src/app/dars/dars-view/dars-view.component.ts |  14 ++-
 .../metadata-table.component.html             |  11 +-
 .../new-what-if-audit-dialog.component.ts     | 102 ++++++++++++------
 src/app/dars/services/api.service.ts          |   9 +-
 src/app/dars/store/actions.ts                 |   4 +
 src/app/dars/store/effects.ts                 |   7 +-
 6 files changed, 107 insertions(+), 40 deletions(-)

diff --git a/src/app/dars/dars-view/dars-view.component.ts b/src/app/dars/dars-view/dars-view.component.ts
index 123e713..1fac208 100644
--- a/src/app/dars/dars-view/dars-view.component.ts
+++ b/src/app/dars/dars-view/dars-view.component.ts
@@ -78,7 +78,19 @@ export class DARSViewComponent implements OnInit {
     this.dialog
       .open<any, any, NewWhatIfAuditFields>(NewWhatIfAuditDialogComponent)
       .afterClosed()
-      .subscribe(event => console.log(event));
+      // .subscribe(event => console.log(event));
+      .subscribe(event => {
+        if (event) {
+          return this.store.dispatch(
+            new StartSendingAudit({
+              darsInstitutionCode: event.darsInstitutionCode,
+              darsDegreeProgramCode: event.darsDegreeProgramCode,
+              degreePlannerPlanName: event.degreePlannerPlanName,
+              whichEnrolledCoursesIncluded: event.whichEnrolledCoursesIncluded,
+            }),
+          );
+        }
+      });
   }
 
   public openAudit(metadata: AuditMetadata) {
diff --git a/src/app/dars/metadata-table/metadata-table.component.html b/src/app/dars/metadata-table/metadata-table.component.html
index 7188dd8..74e760e 100644
--- a/src/app/dars/metadata-table/metadata-table.component.html
+++ b/src/app/dars/metadata-table/metadata-table.component.html
@@ -30,7 +30,7 @@
     <!-- Program Column -->
     <ng-container matColumnDef="program">
       <th mat-header-cell *matHeaderCellDef>Program of Study</th>
-      <td mat-cell *matCellDef="let audit">{{audit.darsDegreeProgramCode}}</td>
+      <td mat-cell *matCellDef="let audit">{{audit.darsDegreeProgramDescription}}</td>
     </ng-container>
 
     <!-- Honors Column -->
@@ -49,8 +49,13 @@
     <ng-container matColumnDef="status">
       <th mat-header-cell *matHeaderCellDef>Status</th>
       <td mat-cell *matCellDef="let audit">
-        <div>{{audit.darsStatusOfDegreeAuditRequest}}</div>
-        <div>Run {{audit.darsAuditRunDate | date:'short'}}</div>
+        <div *ngIf="audit.darsStatusOfDegreeAuditRequest == 'Done' || audit.darsStatusOfDegreeAuditRequest.indexOf('Failed') > -1; else loading">
+          <div>{{audit.darsStatusOfDegreeAuditRequest}}</div>
+          <div>Run {{audit.darsAuditRunDate | date:'short'}}</div>
+        </div>
+        <ng-template #loading>
+          <mat-progress-spinner mode="indeterminate" diameter="24"></mat-progress-spinner>
+        </ng-template>
       </td>
     </ng-container>
 
diff --git a/src/app/dars/new-what-if-audit-dialog/new-what-if-audit-dialog.component.ts b/src/app/dars/new-what-if-audit-dialog/new-what-if-audit-dialog.component.ts
index 0f87260..d9dc6b2 100644
--- a/src/app/dars/new-what-if-audit-dialog/new-what-if-audit-dialog.component.ts
+++ b/src/app/dars/new-what-if-audit-dialog/new-what-if-audit-dialog.component.ts
@@ -35,9 +35,9 @@ const inclusiveRange = (from: number, to: number) => {
 export interface NewWhatIfAuditFields {
   darsInstitutionCode: string;
   darsDegreeProgramCode: string;
-  roadmapId: number;
+  degreePlannerPlanName: string;
   darsHonorsOptionCode: string;
-  includeCoursesFrom: string;
+  whichEnrolledCoursesIncluded: string;
   fixedCredits: {
     termCode: string;
     subjectCode: string;
@@ -122,35 +122,54 @@ export class NewWhatIfAuditDialogComponent implements OnInit {
     );
 
     const degreePlanFormControl = this.chosenAuditSettings.get('degreePlan');
-    if (degreePlanFormControl) {
-      degreePlanFormControl.valueChanges.subscribe(plan => {
-        this.chosenRoadmapId$.next(plan.roadmapId);
+    // if (degreePlanFormControl) {
+    //   degreePlanFormControl.valueChanges.subscribe(plan => {
+    //     this.chosenRoadmapId$.next(plan.roadmapId);
+    //   });
+    // }
+
+    const includeCoursesFrom = this.chosenAuditSettings.get(
+      'includeCoursesFrom',
+    );
+    if (includeCoursesFrom && degreePlanFormControl) {
+      includeCoursesFrom.valueChanges.subscribe(selected => {
+        if (selected !== 'planned') {
+          degreePlanFormControl.reset();
+          degreePlanFormControl.disable();
+        } else {
+          degreePlanFormControl.enable();
+          degreePlanFormControl.valueChanges.subscribe(plan => {
+            this.chosenRoadmapId$.next(plan.roadmapId);
+          });
+        }
       });
     }
 
-    this.variableCreditCourses$ = this.chosenRoadmapId$.pipe(
-      distinctUntilChanged(),
-      flatMap(roadmapId => this.api.getAllCourses(roadmapId)),
-      map(courses => {
-        return courses.filter(course => {
-          return (
-            !!course.creditMin &&
-            !!course.creditMax &&
-            course.creditMax > course.creditMin
-          );
-        });
-      }),
-      map(courses =>
-        courses.map(course => ({
-          ...course,
-          range: inclusiveRange(
-            course.creditMin as number,
-            course.creditMax as number,
-          ),
-        })),
-      ),
-      shareReplay(),
-    );
+    if (degreePlanFormControl) {
+      this.variableCreditCourses$ = this.chosenRoadmapId$.pipe(
+        distinctUntilChanged(),
+        flatMap(roadmapId => this.api.getAllCourses(roadmapId)),
+        map(courses => {
+          return courses.filter(course => {
+            return (
+              !!course.creditMin &&
+              !!course.creditMax &&
+              course.creditMax > course.creditMin
+            );
+          });
+        }),
+        map(courses =>
+          courses.map(course => ({
+            ...course,
+            range: inclusiveRange(
+              course.creditMin as number,
+              course.creditMax as number,
+            ),
+          })),
+        ),
+        shareReplay(),
+      );
+    }
 
     this.variableCreditCourses$.subscribe(courses => {
       while (this.chosenCreditSettings.length !== 0) {
@@ -200,7 +219,7 @@ export class NewWhatIfAuditDialogComponent implements OnInit {
       return fallback;
     }
   }
-
+  // Don't think we need this
   public roadmapId<T>(fallback: T): number | T {
     const control = this.chosenAuditSettings.get('degreePlan');
     if (control !== null) {
@@ -210,6 +229,15 @@ export class NewWhatIfAuditDialogComponent implements OnInit {
     }
   }
 
+  public degreePlannerPlanName<T>(fallback: T): string | T {
+    const control = this.chosenAuditSettings.get('degreePlan');
+    if (control && control.value !== null) {
+      return control.value.name;
+    } else {
+      return fallback;
+    }
+  }
+
   public darsHonorsOptionCode<T>(fallback: T): string | T {
     const control = this.chosenAuditSettings.get('honorsOptions');
     if (control !== null) {
@@ -219,10 +247,16 @@ export class NewWhatIfAuditDialogComponent implements OnInit {
     }
   }
 
+  // If a degree plan name is included in the request we do not need this property
   public includeCoursesFrom<T>(fallback: T): string | T {
-    const control = this.chosenAuditSettings.get('includeCoursesFrom');
-    if (control !== null) {
-      return control.value.toString();
+    const controlDegreePlan = this.chosenAuditSettings.get('degreePlan');
+    if (controlDegreePlan && controlDegreePlan.status === 'DISABLED') {
+      const control = this.chosenAuditSettings.get('includeCoursesFrom');
+      if (control !== null) {
+        return control.value.toString();
+      } else {
+        return fallback;
+      }
     } else {
       return fallback;
     }
@@ -245,9 +279,9 @@ export class NewWhatIfAuditDialogComponent implements OnInit {
     this.dialogRef.close({
       darsInstitutionCode: this.darsInstitutionCode(''),
       darsDegreeProgramCode: this.darsDegreeProgramCode(''),
-      roadmapId: this.roadmapId(-1),
+      degreePlannerPlanName: this.degreePlannerPlanName(''),
       darsHonorsOptionCode: this.darsHonorsOptionCode(''),
-      includeCoursesFrom: this.includeCoursesFrom(''),
+      whichEnrolledCoursesIncluded: this.includeCoursesFrom(''),
       fixedCredits: this.fixedCredits(),
     });
   }
diff --git a/src/app/dars/services/api.service.ts b/src/app/dars/services/api.service.ts
index a4ddc66..2566764 100644
--- a/src/app/dars/services/api.service.ts
+++ b/src/app/dars/services/api.service.ts
@@ -77,11 +77,18 @@ export class DarsApiService {
   public newAudit(
     darsInstitutionCode: string,
     darsDegreeProgramCode: string,
+    degreePlannerPlanName?: string,
+    whichEnrolledCoursesIncluded?: string,
   ): Observable<AuditMetadata> {
     const url = `${environment.apiDarsUrl}/auditrequest`;
     return this.http.post<AuditMetadata>(
       url,
-      { darsInstitutionCode, darsDegreeProgramCode },
+      {
+        darsInstitutionCode,
+        darsDegreeProgramCode,
+        degreePlannerPlanName,
+        whichEnrolledCoursesIncluded,
+      },
       HTTP_OPTIONS,
     );
   }
diff --git a/src/app/dars/store/actions.ts b/src/app/dars/store/actions.ts
index aef8ce3..cd81e25 100644
--- a/src/app/dars/store/actions.ts
+++ b/src/app/dars/store/actions.ts
@@ -82,6 +82,8 @@ export class StartSendingAudit implements Action {
     public payload: {
       darsInstitutionCode: string;
       darsDegreeProgramCode: string;
+      degreePlannerPlanName?: string;
+      whichEnrolledCoursesIncluded?: string;
     },
   ) {}
 }
@@ -92,6 +94,8 @@ export class DoneSendingAudit implements Action {
     public payload: {
       darsInstitutionCode: string;
       darsDegreeProgramCode: string;
+      degreePlannerPlanName?: string;
+      whichEnrolledCoursesIncluded?: string;
     },
   ) {}
 }
diff --git a/src/app/dars/store/effects.ts b/src/app/dars/store/effects.ts
index 0448ccb..edc03ff 100644
--- a/src/app/dars/store/effects.ts
+++ b/src/app/dars/store/effects.ts
@@ -108,7 +108,12 @@ export class DARSEffects {
     flatMap((action: darsActions.StartSendingAudit) => {
       const metadata = action.payload;
       return this.api
-        .newAudit(metadata.darsInstitutionCode, metadata.darsDegreeProgramCode)
+        .newAudit(
+          metadata.darsInstitutionCode,
+          metadata.darsDegreeProgramCode,
+          metadata.degreePlannerPlanName,
+          metadata.whichEnrolledCoursesIncluded,
+        )
         .pipe(
           map(audit => {
             return new darsActions.DoneSendingAudit(action.payload);
-- 
GitLab