LPXXX Angular Volcopy
authorBill Erickson <berickxx@gmail.com>
Thu, 4 Jun 2020 22:21:50 +0000 (18:21 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 4 Jun 2020 22:21:50 +0000 (18:21 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/staff/cat/volcopy/vol-edit.component.css [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/cat/volcopy/vol-edit.component.html
Open-ILS/src/eg2/src/app/staff/cat/volcopy/vol-edit.component.ts
Open-ILS/src/eg2/src/app/staff/cat/volcopy/volcopy.component.ts
Open-ILS/src/eg2/src/app/staff/share/holdings/holdings.service.ts

diff --git a/Open-ILS/src/eg2/src/app/staff/cat/volcopy/vol-edit.component.css b/Open-ILS/src/eg2/src/app/staff/cat/volcopy/vol-edit.component.css
new file mode 100644 (file)
index 0000000..bfbc3ef
--- /dev/null
@@ -0,0 +1,4 @@
+
+input[type="number"] {
+  width: 5em;
+}
index 664d2e1..4ff4529 100644 (file)
@@ -1,5 +1,5 @@
 
-<div class="row bg-info">
+<div class="row bg-info p-2">
   <b>BATCH</b>
 </div>
 
@@ -47,6 +47,7 @@
         <div class="p-1" [ngStyle]="{flex: flexAt(2)}">
           <ng-container *ngIf="volIdx == 0">
             <input type="number" class="form-control form-control-sm"
+              [required]="true"
               [ngModel]="orgNode.children.length"
               (ngModelChange)="volCountChanged(orgNode, $event)"/>
           </ng-container>
         <div class="p-1" [ngStyle]="{flex: flexAt(3)}">
           <ng-container *ngIf="copyIdx == 0">
             <eg-combobox 
-              [entries]="volClasses" 
+              [startId]="volNode.target.label_class()"
               [smallFormControl]="true"
               [required]="true" 
-              (onChange)="volClassChanged(volNode, $event)">
+              (onChange)="applyVolValue(volNode.target, 'label_class', $event)">
+              <eg-combobox-entry *ngFor="let cls of volClasses" 
+                [entryId]="cls.id()" [entryLabel]="cls.name()">
+              </eg-combobox-entry>
             </eg-combobox>
           </ng-container>
         </div>
         <div class="p-1" [ngStyle]="{flex: flexAt(4)}">
           <ng-container *ngIf="copyIdx == 0">
             <eg-combobox 
+              [startId]="volNode.target.prefix()"
+              [required]="true" 
               [smallFormControl]="true"
-              (onChange)="volPrefixChanged(volNode, $event)">
-              <eg-combobox-entry entryId="-1" entryLabel="<Unset>" 
-                i18n-entryLabel></eg-combobox-entry>
+              (onChange)="applyVolValue(volNode.target, 'prefix', $event)">
+              <eg-combobox-entry 
+                [entryId]="-1" 
+                entryLabel="<Unset>" i18n-entryLabel>
+              </eg-combobox-entry>
               <eg-combobox-entry *ngFor="let pfx of volPrefixes" 
                 [entryId]="pfx.id()" [entryLabel]="pfx.label()">
               </eg-combobox-entry>
           </ng-container>
         </div>
         <div class="p-1" [ngStyle]="{flex: flexAt(5)}">
+          <ng-container *ngIf="copyIdx == 0">
+            <input class="form-control form-control-sm" type="text"
+              [required]="true"
+              [ngModel]="volNode.target.label()"
+              (onChange)="applyVolValue(volNode.target, 'label', $event)">
+          </ng-container>
         </div>
         <div class="p-1" [ngStyle]="{flex: flexAt(6)}">
+          <ng-container *ngIf="copyIdx == 0">
+            <eg-combobox 
+              [startId]="volNode.target.suffix()"
+              [required]="true" 
+              [smallFormControl]="true"
+              (onChange)="applyVolValue(volNode.target, 'suffix', $event)">
+              <eg-combobox-entry 
+                [entryId]="-1" 
+                entryLabel="<Unset>" i18n-entryLabel>
+              </eg-combobox-entry>
+              <eg-combobox-entry *ngFor="let sfx of volSuffixes" 
+                [entryId]="sfx.id()" [entryLabel]="sfx.label()">
+              </eg-combobox-entry>
+            </eg-combobox>
+          </ng-container>
         </div>
         <div class="p-1" [ngStyle]="{flex: flexAt(7)}">
+          <ng-container *ngIf="copyIdx == 0">
+            <input type="number" class="form-control form-control-sm"
+              [required]="true"
+              [ngModel]="volNode.children.length"
+              (ngModelChange)="copyCountChanged(volNode, $event)"/>
+          </ng-container>
         </div>
         <div class="p-1" [ngStyle]="{flex: flexAt(8)}">
+          <input type="text" class="form-control form-control-sm"
+            [required]="true"
+            [ngModel]="copyNode.target.barcode()"
+            (ngModelChange)="applyCopyValue(copyNode.target, 'barcode', $event)"/>
         </div>
         <div class="p-1" [ngStyle]="{flex: flexAt(9)}">
+          <input type="number" class="form-control form-control-sm"
+            [ngModel]="copyNode.target.copy_number()"
+            (ngModelChange)="applyCopyValue(copyNode.target, 'copy_number', $event)"/>
         </div>
         <div class="p-1" [ngStyle]="{flex: flexAt(10)}">
+            <eg-combobox 
+              [startId]="copyNode.target.parts()[0] ? copyNode.target.parts()[0].id() : null"
+              [smallFormControl]="true"
+              (onChange)="copyPartChanged(copyNode, $event)">
+              <eg-combobox-entry *ngFor="let part of bibParts[volNode.target.record()]"
+                [entryId]="part.id()" [entryLabel]="part.label()">
+              </eg-combobox-entry>
+            </eg-combobox>
         </div>
       </div>
     </ng-container>
   </ng-container>
 </ng-container>
-
index a39f5f4..684b5a9 100644 (file)
@@ -9,7 +9,8 @@ import {HoldingsService} from '@eg/staff/share/holdings/holdings.service';
 
 @Component({
   selector: 'eg-vol-edit',
-  templateUrl: 'vol-edit.component.html'
+  templateUrl: 'vol-edit.component.html',
+  styleUrls: ['vol-edit.component.css']
 })
 
 
@@ -27,13 +28,17 @@ export class VolEditComponent implements OnInit {
     volClasses: IdlObject[] = null;
     volPrefixes: IdlObject[] = null;
     volSuffixes: IdlObject[] = null;
+    bibParts: {[bibId: number]: IdlObject[]} = {};
 
     constructor(
+        private pcrud: PcrudService,
         private holdings: HoldingsService
     ) {}
 
     ngOnInit() {
 
+        this.fetchBibParts();
+
         // TODO: Filter these to only show org-scoped values
         // plus any values otherwise needed for the current
         // holdings tree.
@@ -49,12 +54,44 @@ export class VolEditComponent implements OnInit {
             this.volSuffixes = suffixes.filter(pfx => pfx.id() !== -1));
     }
 
+    fetchBibParts() {
+
+        this.context.orgNodes().forEach(orgNode => {
+            orgNode.children.forEach(volNode =>
+                this.bibParts[volNode.target.record()] = []
+            );
+        });
+
+        this.pcrud.search('bmp',
+            {record: Object.keys(this.bibParts), deleted: 'f'})
+        .subscribe(
+            part => {
+                if (!this.bibParts[part.record()]) {
+                    this.bibParts[part.record()] = [];
+                }
+                this.bibParts[part.record()].push(part);
+            },
+            err => {},
+            () => {
+                Object.keys(this.bibParts).forEach(bibId => {
+                    this.bibParts[bibId] = this.bibParts[bibId]
+                    .sort((p1, p2) =>
+                        p1.label_sortkey() < p2.label_sortkey() ? -1 : 1)
+                });
+            }
+        );
+    }
+
     flexAt(column: number): number {
         return this.flexSettings[column];
     }
 
-    volCountChanged(orgNode: HoldingsTreeNode, value: number) {
-        console.log('vol set set to ', value);
+    volCountChanged(orgNode: HoldingsTreeNode, count: number) {
+        console.log('vol set set to ', count);
+    }
+
+    copyCountChanged(volNode: HoldingsTreeNode, count: number) {
+        console.log('vol set set to ', count);
     }
 
     applyVolValue(vol: IdlObject, key: string, value: any) {
@@ -64,19 +101,15 @@ export class VolEditComponent implements OnInit {
         }
     }
 
-    volClassChanged(volNode: HoldingsTreeNode, entry: ComboboxEntry) {
-        if (!entry) { return; }
-        this.applyVolValue(volNode.target, 'label_class', entry.id);
-    }
-
-    volPrefixChanged(volNode: HoldingsTreeNode, entry: ComboboxEntry) {
-        if (!entry) { return; }
-        this.applyVolValue(volNode.target, 'prefix', entry.id);
+    applyCopyValue(copy: IdlObject, key: string, value: any) {
+        if (copy[key]() !== value) {
+            copy[key](value);
+            copy.ischanged(true);
+        }
     }
 
-    volSuffixChanged(volNode: HoldingsTreeNode, entry: ComboboxEntry) {
-        if (!entry) { return; }
-        this.applyVolValue(volNode.target, 'suffix', entry.id);
+    copyPartChanged(copyNode: HoldingsTreeNode, entry: ComboboxEntry) {
+        // TODO
     }
 }
 
index 696406b..623075f 100644 (file)
@@ -9,7 +9,7 @@ import {VolCopyContext} from './volcopy';
 const copy_FLESH = {
     flesh: 1,
     flesh_fields: {
-        acp: ['call_number', 'location']
+        acp: ['call_number', 'location', 'parts']
     }
 }
 
@@ -19,8 +19,13 @@ const copy_FLESH = {
 export class VolCopyComponent implements OnInit {
 
     context: VolCopyContext;
+
+    // Note in multi-record mode this value will be unset.
     recordId: number;
+
+    // Load the editor for a specific copy by ID.
     copyId: number;
+
     session: string;
     loading = true;
 
@@ -70,6 +75,7 @@ export class VolCopyComponent implements OnInit {
         }
     }
 
+
     fetchCopy(): Promise<any> {
         return this.pcrud.retrieve('acp', this.copyId, copy_FLESH)
         .toPromise().then(copy => {
index 7597020..b4f6e27 100644 (file)
@@ -82,7 +82,6 @@ export class HoldingsService {
     // Returns a sorted list of call number prefixes
     fetchCallNumberPrefixes(): Promise<IdlObject[]> {
         if (this.callNumberPrefixes) {
-            console.log('H2', this.callNumberPrefixes);
             return Promise.resolve(this.callNumberPrefixes);
         }
 
@@ -108,6 +107,5 @@ export class HoldingsService {
             return this.callNumberSuffixes;
         });
     }
-
 }