LP#1942220: implement Export Single Attribute list
authorGalen Charlton <gmc@equinoxOLI.org>
Thu, 9 Dec 2021 16:59:27 +0000 (11:59 -0500)
committerGalen Charlton <gmc@equinoxOLI.org>
Thu, 9 Dec 2021 16:59:27 +0000 (11:59 -0500)
Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html
Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.ts
Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts

index 7f34a73..09d42ea 100644 (file)
@@ -4,6 +4,7 @@
 <eg-acq-delete-lineitems-dialog #deleteLineitemsDialog></eg-acq-delete-lineitems-dialog>
 <eg-acq-add-copies-dialog #addCopiesDialog></eg-acq-add-copies-dialog>
 <eg-acq-claim-policy-dialog #claimPolicyDialog></eg-acq-claim-policy-dialog>
+<eg-acq-export-attributes-dialog #exportAttributesDialog></eg-acq-export-attributes-dialog>
 
 <div class="col-lg-6 offset-lg-3" *ngIf="saving">
   <eg-progress-inline [max]="progressMax" [value]="progressValue">
@@ -21,6 +22,8 @@
           [disabled]="!canDeleteLis() || !selectedIds().length" i18n>Delete Selected Lineitems</button>
         <button ngbDropdownItem (click)="addCopiesToLineitems()" 
           [disabled]="!canAddLiCopies() || !selectedIds().length" i18n>Add Items to Selected Lineitems</button>
+        <button ngbDropdownItem (click)="exportSingleAttributeList()" 
+          [disabled]="!selectedIds().length" i18n>Export Single Attribute List for Selected Lineitems</button>
         <div class="dropdown-divider"></div>
         <h6 class="dropdown-header" i18n>Selection List Actions</h6>
         <button ngbDropdownItem (click)="createPo()" 
index 0d0b6de..f2141d3 100644 (file)
@@ -15,7 +15,9 @@ import {HoldingsService} from '@eg/staff/share/holdings/holdings.service';
 import {CancelDialogComponent} from './cancel-dialog.component';
 import {DeleteLineitemsDialogComponent} from './delete-lineitems-dialog.component';
 import {AddCopiesDialogComponent} from './add-copies-dialog.component';
+import {ExportAttributesDialogComponent} from './export-attributes-dialog.component';
 import {ClaimPolicyDialogComponent} from './claim-policy-dialog.component';
+import {saveAs} from 'file-saver';
 
 const DELETABLE_STATES = [
     'new', 'selector-ready', 'order-ready', 'approved', 'pending-order'
@@ -115,6 +117,7 @@ export class LineitemListComponent implements OnInit {
     @ViewChild('cancelDialog') cancelDialog: CancelDialogComponent;
     @ViewChild('deleteLineitemsDialog') deleteLineitemsDialog: DeleteLineitemsDialogComponent;
     @ViewChild('addCopiesDialog') addCopiesDialog: AddCopiesDialogComponent;
+    @ViewChild('exportAttributesDialog') exportAttributesDialog: ExportAttributesDialogComponent;
     @ViewChild('claimPolicyDialog') claimPolicyDialog: ClaimPolicyDialogComponent;
 
     constructor(
@@ -701,6 +704,30 @@ export class LineitemListComponent implements OnInit {
         });
     }
 
+    exportSingleAttributeList() {
+        const ids = Object.keys(this.selected).filter(id => this.selected[id]).map(i => Number(i));
+        this.exportAttributesDialog.ids = ids;
+        this.exportAttributesDialog.open().subscribe(attr => {
+            if (!attr) { return; }
+
+            const values: string[] = [];
+            this.liService.getFleshedLineitems(ids, { fromCache: true }).subscribe(
+                li => values.push(this.displayAttr(li.lineitem, attr)),
+                err => {},
+                () => {
+                    const filtered = values.filter(x => x !== '');
+                    saveAs(
+                        new Blob(
+                            [ filtered.join('\n') + '\n' ],
+                            { type: 'text/plain;charset=utf-8' }
+                        ),
+                        'export_attr_list.txt'
+                    );
+                }
+            );
+        });
+    }
+
     liHasRealCopies(li: IdlObject): boolean {
         for (let idx = 0; idx < li.lineitem_details().length; idx++) {
             if (li.lineitem_details()[idx].eg_copy_id()) {
index 0d3b34e..2503ee8 100644 (file)
@@ -20,6 +20,7 @@ import {CreateAssetsComponent} from './create-assets.component';
 import {CancelDialogComponent} from './cancel-dialog.component';
 import {DeleteLineitemsDialogComponent} from './delete-lineitems-dialog.component';
 import {AddCopiesDialogComponent} from './add-copies-dialog.component';
+import {ExportAttributesDialogComponent} from './export-attributes-dialog.component';
 import {ClaimPolicyDialogComponent} from './claim-policy-dialog.component';
 import {MarcEditModule} from '@eg/staff/share/marc-edit/marc-edit.module';
 import {UploadComponent} from '../picklist/upload.component';
@@ -38,6 +39,7 @@ import {UploadComponent} from '../picklist/upload.component';
     CancelDialogComponent,
     DeleteLineitemsDialogComponent,
     AddCopiesDialogComponent,
+    ExportAttributesDialogComponent,
     ClaimPolicyDialogComponent,
     BriefRecordComponent,
     CreateAssetsComponent,
@@ -49,6 +51,7 @@ import {UploadComponent} from '../picklist/upload.component';
     CancelDialogComponent,
     DeleteLineitemsDialogComponent,
     AddCopiesDialogComponent,
+    ExportAttributesDialogComponent,
     ClaimPolicyDialogComponent
   ],
   imports: [