LP#1779158 Ang vandelay queue list page cont.
authorBill Erickson <berickxx@gmail.com>
Fri, 6 Jul 2018 22:07:29 +0000 (18:07 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 11 Oct 2018 18:56:30 +0000 (14:56 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.html
Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.ts
Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.html
Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.ts

index 0330652..8d444dc 100644 (file)
@@ -1,15 +1,16 @@
 
 <eg-progress-dialog #progressDialog></eg-progress-dialog>
 
-<div class="import-form">
+<div class="import-form form-validated">
   <h2 i18n>MARC File Upload</h2>
   <div class="row">
     <div class="col-lg-3">
       <label i18n>Record Type</label>
     </div>
     <div class="col-lg-3">
-      <eg-combobox (onChange)="recordType=$event.id" [startId]="recordType"
-        placeholder="Record Type..." i18n-placeholder>
+      <eg-combobox (onChange)="recordType=$event ? $event.id : null" 
+        [required]="true"
+        [startId]="recordType" placeholder="Record Type..." i18n-placeholder>
         <eg-combobox-entry entryId="bib" entryLabel="Bibliographic Records" 
           i18n-entryLabel></eg-combobox-entry>
         <eg-combobox-entry entryId="auth" entryLabel="Authority Records" 
@@ -23,7 +24,7 @@
     </div>
     <div class="col-lg-3">
       <eg-combobox [entries]="formatEntries('bibSources')" 
-        (onChange)="selectedBibSource=$event.id"
+        (onChange)="selectedBibSource=$event ? event.id : null"
         [startId]="selectedBibSource"
         placeholder="Record Source..." i18n-placeholder>
       </eg-combobox>
@@ -36,6 +37,7 @@
     <div class="col-lg-3">
       <eg-combobox [entries]="formatEntries('activeQueues')"
         (onChange)="selectedQueue=$event" i18n-placeholder
+        [required]="true"
         [allowFreeText]="true" placeholder="Select or Create a Queue...">
       </eg-combobox>
     </div>
@@ -44,6 +46,7 @@
     </div>
     <div class="col-lg-3">
       <eg-combobox [entries]="formatEntries('bibBuckets')" 
+        [disabled]="selectedQueue && !selectedQueue.freetext"
         (onChange)="selectedBucket=$event.id"
         placeholder="Buckets..." i18n-placeholder></eg-combobox>
     </div>
@@ -54,6 +57,7 @@
     </div>
     <div class="col-lg-3">
       <eg-combobox [entries]="formatEntries('matchSets')" 
+        [disabled]="selectedQueue && !selectedQueue.freetext"
         [startId]="defaultMatchSet"
         (onChange)="selectedMatchSet=$event.id"
         placeholder="Match Set..." i18n-placeholder></eg-combobox>
@@ -70,6 +74,7 @@
     </div>
     <div class="col-lg-3"> <!-- TODO disable for authority -->
       <eg-combobox [entries]="formatEntries('importItemDefs')"
+        [disabled]="selectedQueue && !selectedQueue.freetext"
         (onChange)="selectedHoldingsProfile=$event.id"
         placeholder="Holdings Import Profile..." i18n-placeholder>
       </eg-combobox>
     <div class="col-lg-3">
       <eg-combobox [entries]="formatEntries('mergeProfiles')"
         (onChange)="selectedFallThruMergeProfile=$event.id"
-        placeholder="Merge Profile..." i18n-placeholder>
+        placeholder="Fall-Through Merge Profile..." i18n-placeholder>
       </eg-combobox>
     </div>
     <div class="col-lg-3"><label i18n>Merge On Best Match</label></div>
     </div>
     <div class="col-lg-3">
       <input #fileSelector (change)="fileSelected($event)" 
-        class="form-control" type="file"/>
+        required class="form-control" type="file"/>
     </div>
   </div>
   <div class="row">
     <div class="col-lg-6 offset-lg-3">
       <button class="btn btn-success btn-lg btn-block font-weight-bold"
-        [disabled]="isUploading" (click)="upload()" i18n>Upload</button>
+        [disabled]="isUploading || !hasNeededData()" 
+        (click)="upload()" i18n>Upload</button>
     </div>
   </div>
   <!-- hide instead of *ngIf so ViewChild can find the progress bars -->
index 19456ac..4a17e32 100644 (file)
@@ -162,11 +162,10 @@ export class ImportComponent implements OnInit, AfterViewInit {
     }
 
     // Required form data varies depending on context.
-    confirmNeededData(): boolean {
-        if (!this.selectedQueue || !this.selectedBibSource) {
-            return false;
-        }
-        return true;
+    hasNeededData(): boolean {
+        return this.selectedQueue 
+          && Boolean(this.recordType)
+          && Boolean(this.selectedFile);
     }
 
     // 1. create queue if necessary
@@ -174,8 +173,6 @@ export class ImportComponent implements OnInit, AfterViewInit {
     // 3. Enqueue MARC records
     // 4. Import records
     upload() {
-        if (!this.confirmNeededData()) { return; }
-
         this.sessionKey = null;
         this.showProgress = true;
         this.isUploading = true;
index ac3da87..1392b72 100644 (file)
@@ -1,4 +1,94 @@
-<h2 i18n>Queue {{queueSummary ? queueSummary.queue.name() : ''}}</h2>
+<ng-container *ngIf="queueSummary">
+  <h2 i18n>Queue {{queueSummary.queue.name()}}</h2>
+
+  <div class="row pb-2">
+    <div class="col-lg-3">
+      <div class="card tight-card">
+        <h5 class="card-header" i18n>Queue Actions</h5>
+        <ul class="list-group list-group-flush">
+        </ul>
+      </div>
+    </div>
+    <div class="col-lg-3">
+      <div class="card tight-card">
+        <h5 class="card-header" i18n>Queue Summary</h5>
+        <ul class="list-group list-group-flush">
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>Records in Queue:</div>
+              <div class="col-lg-2">{{queueSummary.total}}</div>
+            </div>
+          </li>
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>Records Imported:</div>
+              <div class="col-lg-2">{{queueSummary.imported}}</div>
+            </div>
+          </li>
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>Records Import Failures:</div>
+              <div class="col-lg-2">{{queueSummary.rec_import_errors}}</div>
+            </div>
+          </li>
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>Items in Queue:</div>
+              <div class="col-lg-2">{{queueSummary.total_items}}</div>
+            </div>
+          </li>
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>Items Imported:</div>
+              <div class="col-lg-2">{{queueSummary.total_items_imported}}</div>
+            </div>
+          </li>
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>Item Import Failures:</div>
+              <div class="col-lg-2">{{queueSummary.item_import_errors}}</div>
+            </div>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div class="col-lg-3">
+      <div class="card tight-card">
+        <h5 class="card-header" i18n>Queue Filters</h5>
+        <ul class="list-group list-group-flush">
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>Limit to Records with Matches:</div>
+              <div class="col-lg-2">
+                <input type="checkbox" class="form-control" 
+                  [(ngModel)]="limitToMatches"/>
+              </div>
+            </div>
+          </li>
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>Limit to Non-Imported Records:</div>
+              <div class="col-lg-2">
+                <input type="checkbox" class="form-control" 
+                  [(ngModel)]="limitToNonImported"/>
+              </div>
+            </div>
+          </li>
+          <li class="list-group-item">
+            <div class="row">
+              <div class="col-lg-10" i18n>
+                Limit to Records with Import Errors</div>
+              <div class="col-lg-2">
+                <input type="checkbox" class="form-control" 
+                  [(ngModel)]="limitToImportErrors"/>
+              </div>
+            </div>
+          </li>
+        </ul>
+      </div>
+    </div>
+  </div>
+</ng-container>
 
 <ng-template #viewMarcTmpl let-row="row">
   <!-- TODO click -->
index 8d257ad..405559a 100644 (file)
@@ -21,6 +21,11 @@ export class QueueComponent implements AfterViewInit {
     queueSource: GridDataSource;
     queuedRecClass: string;
     queueSummary: any;
+    
+    // Filters
+    limitToMatches: boolean;
+    limitToNonImported: boolean;
+    limitToImportErrors: boolean;
 
     // keep a local copy for convenience
     attrDefs: IdlObject[];