<div class="col-lg-12">
<ngb-tabset #acqSearchTabs [activeId]="searchType" (tabChange)="onTabChange($event)" type="pills">
<ngb-tab title="Line Items Search" i18n-title id="lineitems">
+ <ng-template ngbTabContent><eg-lineitem-results></eg-lineitem-results></ng-template>
</ngb-tab>
<ngb-tab title="Purchase Orders Search" i18n-title id="purchaseorders">
</ngb-tab>
import {NgbTabset, NgbTabChangeEvent} from '@ng-bootstrap/ng-bootstrap';
import {Router, ActivatedRoute} from '@angular/router';
import {StaffCommonModule} from '@eg/staff/common.module';
+import {LineitemResultsComponent} from './lineitem-results.component';
@Component({
templateUrl: './acq-search.component.html'
import {StaffCommonModule} from '@eg/staff/common.module';
import {AcqSearchRoutingModule} from './routing.module';
import {AcqSearchComponent} from './acq-search.component';
+import {LineitemResultsComponent} from './lineitem-results.component';
@NgModule({
declarations: [
- AcqSearchComponent
+ AcqSearchComponent,
+ LineitemResultsComponent
],
imports: [
StaffCommonModule,
--- /dev/null
+<ng-template #idTmpl let-lineitem="row">
+ <a href="/eg/staff/acq/legacy/po/view/{{lineitem.purchase_order()}}?focus_li={{lineitem.id()}}"
+ target="_blank">
+ {{lineitem.id()}}
+ </a>
+</ng-template>
+
+<ng-template #liAttrTmpl let-lineitem="row" let-col="col">
+ <ng-container *ngFor="let lia of lineitem.attributes()">
+ <ng-container *ngIf="lia.attr_name() === col.path">
+ {{lia.attr_value()}}
+ </ng-container>
+ </ng-container>
+</ng-template>
+
+<ng-template #providerTmpl let-lineitem="row">
+ <a href="/eg/staff/admin/acq/conify/provider/{{lineitem.provider().id()}}"
+ target="_blank">
+ {{lineitem.provider().name()}}
+ </a>
+</ng-template>
+
+<ng-template #liLinksTmpl let-lineitem="row">
+ <ul>
+ <li><a href="/eg/staff/cat/catalog/record/{{lineitem.eg_bib_id()}}"
+ target="_blank" i18n>Catalog</a></li>
+ <li><a href="/eg/staff/acq/legacy/lineitem/worksheet/{{lineitem.id()}}"
+ target="_blank" i18n>Worksheet</a></li>
+ <li *ngIf="lineitem.purchase_order()">
+ <a href="/eg/staff/acq/legacy/po/view/{{lineitem.purchase_order()}}"
+ target="_blank" i18n>Purchase Order</a></li>
+ <li><a href="/eg/staff/acq/requests/lineitem/{{lineitem.id()}}"
+ target="_blank" i18n>Requests</a></li>
+ <li>Invoices TODO; awaits Angular invoice search</li>
+ <li *ngIf="lineitem.queued_record()">
+ <a routerLink="/staff/cat/vandelay/queue/bib/{{lineitem.queued_record().queue()}}"
+ target="_blank" i18n>Queue</a></li>
+ <li *ngIf="lineitem.picklist()">
+ <a href="/eg/staff/acq/legacy/picklist/view/{{lineitem.picklist()}}"
+ target="_blank" i18n>Selection List</a></li>
+ </ul>
+</ng-template>
+
+<eg-grid #acqSearchLineitemsGrid
+ persistKey="acq.search.lineitems"
+ idlClass="jub" [dataSource]="gridSource"
+ [showDeclaredFieldsOnly]="true">
+
+ <eg-grid-column path="id" [cellTemplate]="idTmpl"></eg-grid-column>
+ <eg-grid-column i18n-label label="Title" path="title" [cellTemplate]="liAttrTmpl"></eg-grid-column>
+ <eg-grid-column i18n-label label="Author" path="author" [cellTemplate]="liAttrTmpl"></eg-grid-column>
+ <eg-grid-column path="provider.name" [cellTemplate]="providerTmpl"></eg-grid-column>
+ <eg-grid-column i18n-label label="Links" path="_links" [cellTemplate]="liLinksTmpl"></eg-grid-column>
+ <eg-grid-column path="claim_policy.name"></eg-grid-column>
+ <eg-grid-column i18n-label label="Status" path="state"></eg-grid-column>
+ <eg-grid-column path="estimated_unit_price"></eg-grid-column>
+</eg-grid>
--- /dev/null
+import {Component, OnInit, 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 {NetService} from '@eg/core/net.service';
+import {AuthService} from '@eg/core/auth.service';
+import {GridComponent} from '@eg/share/grid/grid.component';
+import {GridDataSource} from '@eg/share/grid/grid';
+
+@Component({
+ selector: 'eg-lineitem-results',
+ templateUrl: 'lineitem-results.component.html'
+})
+export class LineitemResultsComponent {
+
+ gridSource: GridDataSource;
+ @ViewChild('acqSearchLineitemsGrid', { static: true }) lineitemResultsGrid: GridComponent;
+
+ constructor(
+ private router: Router,
+ private route: ActivatedRoute,
+ private net: NetService,
+ private auth: AuthService) {
+
+ this.gridSource = new GridDataSource();
+
+ this.gridSource.getRows = (pager: Pager) => {
+ return this.net.request(
+ 'open-ils.acq',
+ 'open-ils.acq.lineitem.unified_search',
+ this.auth.token(),
+ {
+ jub: [{
+ id: "0",
+ __gte: true
+ }]
+ },
+ null,
+ null,
+ {
+ flesh_attrs: true,
+ flesh_cancel_reason: true,
+ flesh_notes: true,
+ flesh_provider: true,
+ flesh_claim_policy: true,
+ flesh_queued_record: true,
+ offset: pager.offset,
+ limit: pager.limit
+ }
+ );
+ };
+ }
+
+}