import {ProviderResultsComponent} from './provider-results.component';
import {ProviderAddressesComponent} from './provider-addresses.component';
import {ProviderContactsComponent} from './provider-contacts.component';
+import {ProviderInvoicesComponent} from './provider-invoices.component';
import {OrgFamilySelectModule} from '@eg/share/org-family-select/org-family-select.module';
import {FmRecordEditorModule} from '@eg/share/fm-editor/fm-editor.module';
import {ProviderRecordService} from './provider-record.service';
ProviderResultsComponent,
ProviderAddressesComponent,
ProviderContactsComponent,
+ ProviderInvoicesComponent,
AcqProviderSummaryPaneComponent
],
imports: [
--- /dev/null
+<ng-template #inv_identTmpl let-invoice="row">
+ <a href="/eg/staff/acq/legacy/invoice/view/{{invoice.id()}}"
+ target="_blank">
+ {{invoice.inv_ident()}}
+ </a>
+</ng-template>
+<ng-template #providerTmpl let-invoice="row">
+ <a href="/eg/staff/admin/acq/conify/provider/{{invoice.provider().id()}}"
+ target="_blank">
+ {{invoice.provider().code()}}
+ </a>
+</ng-template>
+<ng-template #shipperTmpl let-invoice="row">
+ <a href="/eg/staff/admin/acq/conify/provider/{{invoice.shipper().id()}}"
+ target="_blank">
+ {{invoice.shipper().code()}}
+ </a>
+</ng-template>
+
+<eg-grid #acqProviderInvoicesGrid
+ persistKey="acq.provider.invoices"
+ [stickyHeader]="true"
+ [filterable]="true"
+ [sortable]="true"
+ [cellTextGenerator]="cellTextGenerator"
+ 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" [filterable]="false" [hidden]="true"></eg-grid-column>
+ <eg-grid-column path="shipper" [cellTemplate]="shipperTmpl"></eg-grid-column>
+
+ <eg-grid-column path="id" [hidden]="true"></eg-grid-column>
+ <eg-grid-column path="recv_date" [hidden]="true"></eg-grid-column>
+ <eg-grid-column [asyncSupportsEmptyTermClick]="true" path="recv_method"></eg-grid-column>
+ <eg-grid-column [asyncSupportsEmptyTermClick]="true" path="payment_method"></eg-grid-column>
+
+</eg-grid>
+
+<eg-alert-dialog #printfail i18n-dialogBody
+ dialogBody="Could not print the selected invoices.">
+</eg-alert-dialog>
--- /dev/null
+import {Component, OnInit, AfterViewInit, Input, ViewChild} from '@angular/core';
+import {Observable} from 'rxjs';
+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';
+import {GridDataSource, GridCellTextGenerator} from '@eg/share/grid/grid';
+import {AcqSearchService, AcqSearchTerm, AcqSearch} from '../search/acq-search.service';
+import {ProviderRecord, ProviderRecordService} from './provider-record.service';
+
+@Component({
+ selector: 'eg-provider-invoices',
+ templateUrl: 'provider-invoices.component.html',
+ providers: [AcqSearchService]
+})
+export class ProviderInvoicesComponent implements OnInit {
+
+ @Input() initialSearchTerms: AcqSearchTerm[] = [];
+
+ gridSource: GridDataSource;
+ @ViewChild('acqProviderInvoicesGrid', { static: true }) providerInvoicesGrid: GridComponent;
+ @ViewChild('printfail', { static: true }) private printfail: AlertDialogComponent;
+
+ noSelectedRows: (rows: IdlObject[]) => boolean;
+
+ cellTextGenerator: GridCellTextGenerator;
+
+ constructor(
+ private router: Router,
+ private route: ActivatedRoute,
+ private printer: PrintService,
+ private evt: EventService,
+ private net: NetService,
+ private auth: AuthService,
+ private providerRecord: ProviderRecordService,
+ private acqSearch: AcqSearchService) {
+ }
+
+ ngOnInit() {
+ this.gridSource = this.acqSearch.getAcqSearchDataSource('invoice');
+ this.noSelectedRows = (rows: IdlObject[]) => (rows.length === 0);
+ this.cellTextGenerator = {
+ inv_ident: row => row.inv_ident(),
+ provider: row => row.provider().code(),
+ shipper: row => row.shipper().code(),
+ };
+ }
+
+ ngAfterViewInit() {
+ this.providerRecord.refreshCurrent().then(() => {
+ const provider = this.providerRecord.current();
+ if (provider) {
+ setTimeout(() => {
+ this.acqSearch.setSearch({
+ terms: [{
+ field: 'acqinv:provider',
+ op: '',
+ value1: provider.id(),
+ value2: '',
+ }],
+ conjunction: 'all',
+ });
+ this.providerInvoicesGrid.reload();
+ });
+ }
+ });
+ }
+
+ // TODO - copied from InvoiceResultsComponent, could be
+ // consolidated
+ printSelectedInvoices(rows: IdlObject[]) {
+ const that = this;
+ let 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'
+ })
+ );
+ }
+
+}