LPXXX MARC Batch update Angular port
authorBill Erickson <berickxx@gmail.com>
Thu, 21 May 2020 16:50:13 +0000 (12:50 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 May 2020 16:50:13 +0000 (12:50 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/staff/cat/marcbatch/marcbatch.component.html
Open-ILS/src/eg2/src/app/staff/cat/marcbatch/marcbatch.component.ts

index c36cd68..68c2bde 100644 (file)
@@ -1,10 +1,81 @@
 <eg-staff-banner bannerText="MARC Batch Edit" i18n-bannerText></eg-staff-banner>
 
 <div class="row">
-  <div class="col-lg-6">
+  <div class="col-lg-7">
+    <ng-container *ngFor="let rule of templateRules; let idx = index">
+      <hr *ngIf="idx > 0"/>
+      <div class="row mb-2">
+        <div class="col-lg-3 font-weight-bold" i18n>Rule Setup</div>
+        <div class="col-lg-3 font-weight-bold" i18n>Data</div>
+        <div class="col-lg-6 font-weight-bold" i18n>Help</div>
+      </div>
+      <div class="row mb-2">
+        <div class="col-lg-3" i18n>Action (Rule Type)</div>
+        <div class="col-lg-3">
+          <select class="form-control" [(ngModel)]="rule.ruleType">
+            <option value='replace' i18n>Replace</option>
+            <option value='add' i18n>Add</option>
+            <option value='delete' i18n>Delete</option>
+          </select>
+        </div>
+        <div class="col-lg-6" i18n>How to change the existing record.</div>
+      </div>
+      <div class="row mb-2">
+        <div class="col-lg-3" i18n>MARC Tag</div>
+        <div class="col-lg-3">
+          <input type="text" class="form-control" [(ngModel)]="rule.marcTag"/>
+        </div>
+        <div class="col-lg-6" i18n>
+          Three characters, no spaces, no indicators, etc. eg: 245
+        </div>
+      </div>
+      <div class="row mb-2">
+        <div class="col-lg-3" i18n>Subfields (optional)</div>
+        <div class="col-lg-3">
+          <input type="text" class="form-control" [(ngModel)]="rule.marcSubfields"/>
+        </div>
+        <div class="col-lg-6" i18n>No spaces, no delimiters, eg: abcnp</div>
+      </div>
+      <div class="row mb-2">
+        <div class="col-lg-3" i18n>MARC Data</div>
+        <div class="col-lg-3">
+          <input type="text" class="form-control" [(ngModel)]="rule.marcData"/>
+        </div>
+        <div class="col-lg-6" i18n>
+          MARC-Breaker formatted data with indicators and subfield delimiters, 
+          eg: 245 04$aThe End
+        </div>
+      </div>
+      <div class="row mt-3 mb-2 pt-2 border-top">
+        <div class="col-lg-12 justify-content-center d-flex">
+          <div class="font-weight-bold" i18n>
+            Advanced Matching Restriction (Optional)
+          </div>
+        </div>
+      </div>
+      <div class="row mb-2">
+        <div class="col-lg-3" i18n>Subfield</div>
+        <div class="col-lg-3"></div>
+        <div class="col-lg-6" i18n></div>
+      </div>
+      <div class="row mb-2">
+        <div class="col-lg-3" i18n>Expression</div>
+        <div class="col-lg-3"></div>
+        <div class="col-lg-6" i18n></div>
+      </div>
+    </ng-container>
   </div>
-  <div class="col-lg-6">
-    <div class="row">
+  <div class="col-lg-5">
+    <div class="row pb-2 pt-2 border">
+      <div class="col-lg-12">
+        <div i18n>Update Template Preview</div>
+        <div>
+          <textarea class="form-control" [(ngModel)]="templateBreaker" disabled>
+          </textarea>
+        </div>
+      </div>
+    </div>
+    <div class="row mt-2">
       <div class="col-lg-3" i18n>Record Source: </div>
       <div class="col-lg-6">
         <select class="form-control" [(ngModel)]="source">
@@ -14,7 +85,7 @@
         </select>
       </div>
     </div>
-    <div class="row mt-2 p-2 border">
+    <div class="row mt-2 pt-2 pb-2 border">
       <ng-container *ngIf="source == 'bucket'">
         <div class="col-lg-3" i18n>Bucket named: </div>
         <div class="col-lg-6">
         <div class="col-lg-12">
           <div class="row">
             <div class="col-lg-3" i18n>Column: </div>
-            <div class="col-lg-2 d-flex">
+            <div class="col-lg-3 d-flex">
               <input type="number" class="form-control" [(ngModel)]="csvColumn"/>
               <span class="pl-2" i18n> of </span>
             </div>
-            <div class="col-lg-5">
+            <div class="col-lg-6">
               <input type="file" class="form-control"
                 #fileSelector (change)="fileSelected($event)"/>
             </div>
       </ng-container>
     </div>
     <div class="row mt-2">
-      <div class="col-lg-4">
+      <div class="col-lg-12">
         <div class="form-check form-check-inline">
           <input class="form-check-input" type="checkbox" 
             id="xact-checkbox" [(ngModel)]="xactPerRecord"/>
         Use Per-Record transactions to mitigate these conflicts.
       </div>
     </div>
-    <div class="row mt-2 p-2 border">
+    <div class="row mt-2 pt-2 pb-2 border">
       <div class="col-lg-12">
         <button class="btn btn-outline-dark" (click)="process()" i18n>Go!</button>
       </div>
index 0d7863d..b79cf10 100644 (file)
@@ -6,6 +6,15 @@ import {AuthService} from '@eg/core/auth.service';
 import {PcrudService} from '@eg/core/pcrud.service';
 import {ComboboxEntry} from '@eg/share/combobox/combobox.component';
 
+interface TemplateRule {
+    ruleType: 'replace' | 'add' | 'delete';
+    marcTag?: string;
+    marcSubfields?: string;
+    marcData?: string;
+    advSubfield?: string;
+    advRegex?: string;
+}
+
 @Component({
   templateUrl: 'marcbatch.component.html'
 })
@@ -19,6 +28,8 @@ export class MarcBatchComponent implements OnInit, AfterViewInit {
     csvColumn = 0;
     selectedFile: File;
     xactPerRecord = false;
+    templateBreaker = '';
+    templateRules: TemplateRule[] = [];
 
     constructor(
         private router: Router,
@@ -38,6 +49,7 @@ export class MarcBatchComponent implements OnInit, AfterViewInit {
     }
 
     load() {
+        this.templateRules = [{ruleType: 'replace'}];
         this.getBuckets();
     }