LP#1942220: implement LI search action Link Invoice
authorGalen Charlton <gmc@equinoxOLI.org>
Wed, 15 Dec 2021 19:56:58 +0000 (14:56 -0500)
committerGalen Charlton <gmc@equinoxOLI.org>
Wed, 15 Dec 2021 19:56:58 +0000 (14:56 -0500)
Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Open-ILS/src/eg2/src/app/staff/acq/search/lineitem-results.component.html
Open-ILS/src/eg2/src/app/staff/acq/search/lineitem-results.component.ts

index 09b6669..28243a8 100644 (file)
@@ -6,6 +6,7 @@
 <eg-acq-claim-policy-dialog #claimPolicyDialog></eg-acq-claim-policy-dialog>
 <eg-acq-cancel-dialog #cancelDialog></eg-acq-cancel-dialog>
 <eg-acq-delete-lineitems-dialog #deleteLineitemsDialog></eg-acq-delete-lineitems-dialog>
+<eg-acq-link-invoice-dialog #linkInvoiceDialog></eg-acq-link-invoice-dialog>
 
 <eg-string #claimPolicyAppliedString i18n-text text="Claim Policy Applied to Selected Line Item(s)"></eg-string>
 <eg-string #lineItemsReceivedString i18n-text text="Line Item(s) Received"></eg-string>
     (onClick)="createInvoiceFromSelected($event)" [disableOnRows]="noSelectedRows">
   </eg-grid-toolbar-action>
   <eg-grid-toolbar-action label="Link Selected Line Items to Invoice" i18n-label
-    (onClick)="linkToInvoice($event)" [disableOnRows]="noSelectedRows">
+    (onClick)="linkInvoiceFromSelected($event)" [disableOnRows]="noSelectedRows">
   </eg-grid-toolbar-action>
   <eg-grid-toolbar-action label="Cancel Selected" i18n-label
     (onClick)="cancelLineitems($event)" [disableOnRows]="noSelectedRows">
index a53e132..e64e2c3 100644 (file)
@@ -18,6 +18,7 @@ import {AlertDialogComponent} from '@eg/share/dialog/alert.component';
 import {ClaimPolicyDialogComponent} from '../lineitem/claim-policy-dialog.component';
 import {CancelDialogComponent} from '../lineitem/cancel-dialog.component';
 import {DeleteLineitemsDialogComponent} from '../lineitem/delete-lineitems-dialog.component';
+import {LinkInvoiceDialogComponent} from '../lineitem/link-invoice-dialog.component';
 
 @Component({
   selector: 'eg-lineitem-results',
@@ -34,6 +35,7 @@ export class LineitemResultsComponent implements OnInit {
     @ViewChild('claimPolicyDialog') claimPolicyDialog: ClaimPolicyDialogComponent;
     @ViewChild('cancelDialog') cancelDialog: CancelDialogComponent;
     @ViewChild('deleteLineitemsDialog') deleteLineitemsDialog: DeleteLineitemsDialogComponent;
+    @ViewChild('linkInvoiceDialog') linkInvoiceDialog: LinkInvoiceDialogComponent;
     @ViewChild('claimPolicyAppliedString', { static: false }) claimPolicyAppliedString: StringComponent;
     @ViewChild('lineItemsReceivedString', { static: false }) lineItemsReceivedString: StringComponent;
     @ViewChild('lineItemsUnReceivedString', { static: false }) lineItemsUnReceivedString: StringComponent;
@@ -228,6 +230,24 @@ export class LineitemResultsComponent implements OnInit {
         });
     }
 
+    linkInvoiceFromSelected(rows: IdlObject[]) {
+        // must be attached to PO
+        const lis = rows.filter(l => l.purchase_order());
+        if (lis.length === 0) {
+            this.noActionableLIs.open();
+            return;
+        }
+
+        this.linkInvoiceDialog.liIds = lis.map(i => Number(i.id()));
+        this.linkInvoiceDialog.open().subscribe(invId => {
+            if (!invId) { return; }
+
+            const path = '/eg/staff/acq/legacy/invoice/view/' + invId + '?' +
+                     lis.map(x => 'attach_li=' + x.id()).join('&');
+            window.location.href = path;
+        });
+    }
+
     markReceived(rows: IdlObject[]) {
         // must be on-order
         const lis = rows.filter(l => l.state() === 'on-order');