add course terms to UI
authorJane Sandberg <sandbej@linnbenton.edu>
Sat, 15 Aug 2020 18:08:13 +0000 (11:08 -0700)
committerJane Sandberg <sandbej@linnbenton.edu>
Sat, 15 Aug 2020 18:08:13 +0000 (11:08 -0700)
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-list.component.html
Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-page.component.html
Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-page.component.ts

index 54d0c7d..293edb9 100644 (file)
@@ -9,26 +9,41 @@
 <eg-string #archiveSuccessString i18n-text text="Archival of {{tableName}} succeeded"></eg-string>
 <eg-string #flairTooltip i18n-text text="Limited Editing"></eg-string>
 
-<div class="w-100 mt-2 mb-2">
-  <eg-grid #grid idlClass={{idlClass}}
-    [dataSource]="grid_source"
-    [sortable]="true">
-    <eg-grid-toolbar-button
-      label="Create {{tableName}}" (onClick)="createNew()" i18n-label>
-    </eg-grid-toolbar-button>
-    <eg-grid-toolbar-action label="Edit Selected" i18n-label (onClick)="editSelected($event)">
-    </eg-grid-toolbar-action>
-    <eg-grid-toolbar-action label="Delete Selected" i18n-label (onClick)="deleteSelected($event)">
-    </eg-grid-toolbar-action>
-    <eg-grid-toolbar-action label="Archive Selected" i18n-label (onClick)="archiveSelected($event)">
-    </eg-grid-toolbar-action>
-    <eg-grid-column label="ID" path="id" [index]=true [hidden]="true" i18n-label></eg-grid-column>
-    <eg-grid-column label="Title" name="name" i18n-label></eg-grid-column>
-    <eg-grid-column label="CourseNumber" name="course_number" i18n-label></eg-grid-column>
-    <eg-grid-column label="Section Number" name="section_number" i18n-label></eg-grid-column>
-    <eg-grid-column label="Is Archived?" name="is_archived" i18n-label datatype="bool"></eg-grid-column>
-  </eg-grid>
-</div>
+<ul ngbNav #courseListNav="ngbNav" class="nav-tabs">
+  <li ngbNavItem>
+    <a ngbNavLink i18n>Course list</a>
+    <ng-template ngbNavContent>
+      <div class="w-100 mt-2 mb-2">
+        <eg-grid #grid idlClass={{idlClass}}
+          [dataSource]="grid_source"
+          [sortable]="true">
+          <eg-grid-toolbar-button
+            label="Create {{tableName}}" (onClick)="createNew()" i18n-label>
+          </eg-grid-toolbar-button>
+          <eg-grid-toolbar-action label="Edit Selected" i18n-label (onClick)="editSelected($event)">
+          </eg-grid-toolbar-action>
+          <eg-grid-toolbar-action label="Delete Selected" i18n-label (onClick)="deleteSelected($event)">
+          </eg-grid-toolbar-action>
+          <eg-grid-toolbar-action label="Archive Selected" i18n-label (onClick)="archiveSelected($event)">
+          </eg-grid-toolbar-action>
+          <eg-grid-column label="ID" path="id" [index]=true [hidden]="true" i18n-label></eg-grid-column>
+          <eg-grid-column label="Terms taught" name="terms_map" i18n-label [cellTemplate]="termMapLink"></eg-grid-column>
+          <eg-grid-column label="Title" name="name" i18n-label></eg-grid-column>
+          <eg-grid-column label="CourseNumber" name="course_number" i18n-label></eg-grid-column>
+          <eg-grid-column label="Section Number" name="section_number" i18n-label></eg-grid-column>
+          <eg-grid-column label="Is Archived?" name="is_archived" i18n-label datatype="bool"></eg-grid-column>
+        </eg-grid>
+      </div>      
+    </ng-template>
+  </li>
+  <li ngbNavItem>
+    <a ngbNavLink i18n>Terms</a>
+    <ng-template ngbNavContent>
+      <eg-admin-page idlClass="acmt"></eg-admin-page>
+    </ng-template>
+  </li>
+</ul>
+<div [ngbNavOutlet]="courseListNav"></div>
 
 <eg-fm-record-editor #editDialog
   idlClass="acmc"
@@ -36,3 +51,9 @@
   [preloadLinkedValues]="true"
   hiddenFields="id,is_archived">
 </eg-fm-record-editor>
+
+<ng-template #termMapLink let-row="row" let-col="col">
+  <a routerLink="/staff/admin/local/asset/course_module_term_course_map?gridFilters={'course': {{col['id']}}}" i18n>
+    Terms taught
+  </a>
+</ng-template>
index 39397d5..1c1039a 100644 (file)
       </eg-course-associate-users-dialog>
     </ng-template>
   </li>
+
+  <!-- Terms Tab -->
+  <li [ngbNavItem]="'courseTerms'">
+    <a ngbNavLink i18n>Course terms</a>
+    <ng-template ngbNavContent>
+      <eg-admin-page idlClass="acmtcm" readonlyFields="id"
+        hideGridFields="id" dataSource="termsDataSource">
+      </eg-admin-page>
+    </ng-template>
+  </li>
 </ul>
 <div [ngbNavOutlet]="coursePageNav" class="mb-3"></div>
 
index df7a41a..721c4f9 100644 (file)
@@ -1,12 +1,14 @@
-import {Component, Input, ViewChild, OnInit, TemplateRef} from '@angular/core';
+import {Component, ViewChild, OnInit} from '@angular/core';
 import {ActivatedRoute} from '@angular/router';
 import {PcrudService} from '@eg/core/pcrud.service';
-import {IdlObject, IdlService} from '@eg/core/idl.service';
+import {IdlObject} from '@eg/core/idl.service';
+import {GridDataSource} from '@eg/share/grid/grid';
 import {StringComponent} from '@eg/share/string/string.component';
 import {ToastService} from '@eg/share/toast/toast.service';
 import {CourseService} from '@eg/staff/share/course.service';
 import {CourseAssociateUsersComponent} from './course-associate-users.component';
 import {CourseAssociateMaterialComponent} from './course-associate-material.component';
+import {Pager} from '@eg/share/util/pager';
 
 @Component({
     selector: 'eg-course-page',
@@ -18,6 +20,7 @@ export class CoursePageComponent implements OnInit {
     currentCourse: IdlObject;
     courseId: any;
 
+    // Materials Tab
     @ViewChild('courseMaterialDialog', {static: true})
         private courseMaterialDialog: CourseAssociateMaterialComponent;
     @ViewChild('courseUserDialog', {static: true})
@@ -29,7 +32,8 @@ export class CoursePageComponent implements OnInit {
     @ViewChild('archiveSuccessString', { static: true })
         archiveSuccessString: StringComponent;
 
-    // Materials Tab
+    // Course Tab
+    termsDataSource: GridDataSource = new GridDataSource();
 
     constructor(
         private course: CourseService,
@@ -44,6 +48,21 @@ export class CoursePageComponent implements OnInit {
         this.course.getCourses([this.courseId]).then(course => {
             this.currentCourse = course[0];
         });
+        this.termsDataSource.getRows = (pager: Pager, sort: any[]) => {
+
+            const orderBy: any = {};
+            if (sort.length) {
+                orderBy.acmtcm = sort[0].name + ' ' + sort[0].dir;
+            }
+
+            const searchOps = {
+                offset: pager.offset,
+                limit: pager.limit,
+                order_by: orderBy
+            };
+
+            return this.pcrud.search('acmtcm', {course: this.courseId}, searchOps);
+        };
     }
 
     // Edit Tab