provider purchase orders component
authorGalen Charlton <gmc@equinoxinitiative.org>
Wed, 25 Mar 2020 15:52:23 +0000 (11:52 -0400)
committerGalen Charlton <gmc@equinoxinitiative.org>
Wed, 25 Mar 2020 15:52:47 +0000 (11:52 -0400)
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/eg2/src/app/staff/acq/provider/acq-provider.component.html
Open-ILS/src/eg2/src/app/staff/acq/provider/acq-provider.module.ts
Open-ILS/src/eg2/src/app/staff/acq/provider/provider-purchase-orders.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/acq/provider/provider-purchase-orders.component.ts [new file with mode: 0644]

index 4b54031..23bce36 100644 (file)
@@ -48,7 +48,9 @@
         </ng-template>
       </ngb-tab>
       <ngb-tab title="POs" i18n-title id="purchase_orders" [disabled]="!id">
-        <ng-template ngbTabContent>PROVIDER PURCHASE ORDERS TAB</ng-template>
+        <ng-template ngbTabContent>
+          <eg-provider-purchase-orders></eg-provider-purchase-orders>
+        </ng-template>
       </ngb-tab>
     </ngb-tabset>
   </div>
index 743d3e2..a8a6925 100644 (file)
@@ -8,6 +8,7 @@ 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 {ProviderPurchaseOrdersComponent} from './provider-purchase-orders.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';
@@ -21,6 +22,7 @@ import {ProviderRecordService} from './provider-record.service';
     ProviderAddressesComponent,
     ProviderContactsComponent,
     ProviderInvoicesComponent,
+    ProviderPurchaseOrdersComponent,
     AcqProviderSummaryPaneComponent
   ],
   imports: [
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-purchase-orders.component.html b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-purchase-orders.component.html
new file mode 100644 (file)
index 0000000..eb5e293
--- /dev/null
@@ -0,0 +1,38 @@
+<ng-template #nameTmpl let-purchaseorder="row">
+  <a href="/eg/staff/acq/legacy/po/view/{{purchaseorder.id()}}"
+     target="_blank">
+    {{purchaseorder.name()}}
+  </a>
+</ng-template>
+
+<ng-template #providerTmpl let-purchaseorder="row">
+  <a href="/eg/staff/admin/acq/conify/provider/{{purchaseorder.provider().id()}}"
+     target="_blank">
+    {{purchaseorder.provider().code()}}
+  </a>
+</ng-template>
+
+<eg-grid #acqProviderPurchaseOrdersGrid
+  persistKey="acq.provider.purchaseorders"
+  [stickyHeader]="true"
+  [filterable]="true"
+  [sortable]="true"
+  [cellTextGenerator]="cellTextGenerator"
+  idlClass="acqpo" [dataSource]="gridSource">
+
+  <eg-grid-column path="name" [cellTemplate]="nameTmpl"></eg-grid-column>
+  <eg-grid-column path="id"></eg-grid-column>
+  <eg-grid-column path="provider" [hidden]="true" [filterable]="false" [cellTemplate]="providerTmpl"></eg-grid-column>
+  <eg-grid-column path="ordering_agency"></eg-grid-column>
+  <eg-grid-column path="create_time"></eg-grid-column>
+  <eg-grid-column path="edit_time"></eg-grid-column>
+  <eg-grid-column path="order_date"></eg-grid-column>
+
+  <eg-grid-column path="creator" [hidden]="true"></eg-grid-column>
+  <eg-grid-column path="editor" [hidden]="true"></eg-grid-column>
+  <eg-grid-column path="owner" [hidden]="true"></eg-grid-column>
+  <eg-grid-column [asyncSupportsEmptyTermClick]="true" i18n-label label="Status" path="state" [disableTooltip]="true"></eg-grid-column>
+  <eg-grid-column [asyncSupportsEmptyTermClick]="true" path="cancel_reason"></eg-grid-column>
+  <eg-grid-column path="prepayment_required" [sortable]="false"></eg-grid-column>
+
+</eg-grid>
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-purchase-orders.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/provider/provider-purchase-orders.component.ts
new file mode 100644 (file)
index 0000000..9fac4ab
--- /dev/null
@@ -0,0 +1,75 @@
+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-purchase-orders',
+  templateUrl: 'provider-purchase-orders.component.html',
+  providers: [AcqSearchService]
+})
+export class ProviderPurchaseOrdersComponent implements OnInit {
+
+    @Input() initialSearchTerms: AcqSearchTerm[] = [];
+
+    gridSource: GridDataSource;
+    @ViewChild('acqProviderPurchaseOrdersGrid', { static: true }) providerPurchaseOrdersGrid: 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('purchase_order');
+        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:  'acqpo:provider',
+                            op:     '',
+                            value1: provider.id(),
+                            value2: '',
+                        }],
+                        conjunction: 'all',
+                    });
+                    this.providerPurchaseOrdersGrid.reload();
+                });
+            }
+        });
+    }
+
+}