Print Selected Invoices action for invoice grid
authorJason Etheridge <jason@EquinoxInitiative.org>
Wed, 20 Nov 2019 13:31:54 +0000 (08:31 -0500)
committerGalen Charlton <gmc@equinoxinitiative.org>
Thu, 16 Jan 2020 21:38:28 +0000 (16:38 -0500)
Signed-off-by: Jason Etheridge <jason@EquinoxInitiative.org>
Open-ILS/src/eg2/src/app/staff/acq/search/invoice-results.component.html
Open-ILS/src/eg2/src/app/staff/acq/search/invoice-results.component.ts

index 2f85b98..5991f55 100644 (file)
   [stickyHeader]="true"
   idlClass="acqinv" [dataSource]="gridSource">
 
+  <eg-grid-toolbar-action label="Print Selected Invoices" i18n-label
+    (onClick)="printSelectedInvoices($event)" [disableOnRows]="noSelectedRows">
+  </eg-grid-toolbar-action>
+
   <eg-grid-column path="inv_ident" [cellTemplate]="inv_identTmpl"></eg-grid-column>
   <eg-grid-column path="provider" [cellTemplate]="providerTmpl"></eg-grid-column>
   <eg-grid-column path="shipper" [cellTemplate]="shipperTmpl"></eg-grid-column>
@@ -30,3 +34,7 @@
   <eg-grid-column path="recv_date" [hidden]="true"></eg-grid-column>
 
 </eg-grid>
+
+<eg-alert-dialog #printfail i18n-dialogBody
+  dialogBody="Could not print the selected invoices.">
+</eg-alert-dialog>
index 9dbb627..20a6011 100644 (file)
@@ -4,6 +4,9 @@ import {map} from 'rxjs/operators';
 import {Router, ActivatedRoute, ParamMap} from '@angular/router';
 import {Pager} from '@eg/share/util/pager';
 import {IdlObject} from '@eg/core/idl.service';
+import {EventService} from '@eg/core/event.service';
+import {AlertDialogComponent} from '@eg/share/dialog/alert.component';
+import {PrintService} from '@eg/share/print/print.service';
 import {NetService} from '@eg/core/net.service';
 import {AuthService} from '@eg/core/auth.service';
 import {GridComponent} from '@eg/share/grid/grid.component';
@@ -19,10 +22,15 @@ export class InvoiceResultsComponent implements OnInit {
 
     gridSource: GridDataSource;
     @ViewChild('acqSearchInvoicesGrid', { static: true }) invoiceResultsGrid: GridComponent;
+    @ViewChild('printfail', { static: true }) private printfail: AlertDialogComponent;
+
+    noSelectedRows: (rows: IdlObject[]) => boolean;
 
     constructor(
         private router: Router,
         private route: ActivatedRoute,
+        private printer: PrintService,
+        private evt: EventService,
         private net: NetService,
         private auth: AuthService,
         private acqSearch: AcqSearchService) {
@@ -30,6 +38,35 @@ export class InvoiceResultsComponent implements OnInit {
 
     ngOnInit() {
         this.gridSource = this.acqSearch.getAcqSearchDataSource('invoice');
+        this.noSelectedRows = (rows: IdlObject[]) => (rows.length === 0);
     }
 
+    printSelectedInvoices(rows: IdlObject[]) {
+      var that = this;
+      var html = "<style type='text/css'>.acq-invoice-" +
+        "voucher {page-break-after:always;}" +
+        "</style>\n";
+      this.net.request(
+        'open-ils.acq',
+        'open-ils.acq.invoice.print.html',
+        this.auth.token(), rows.map( invoice => invoice.id() )
+      ).subscribe(
+        (res) => {
+          if (this.evt.parse(res)) {
+            console.error(res);
+            this.printfail.open();
+          } else {
+            html +=  res.template_output().data();
+          }
+        },
+        (err) => {
+          console.error(err);
+          this.printfail.open();
+        },
+        () => this.printer.print({
+          text: html,
+          printContext: 'default'
+        })
+      );
+    }
 }