enable results grid sorting
authorGalen Charlton <gmc@equinoxinitiative.org>
Fri, 7 Feb 2020 23:41:03 +0000 (18:41 -0500)
committerGalen Charlton <gmc@equinoxinitiative.org>
Fri, 7 Feb 2020 23:41:03 +0000 (18:41 -0500)
TODO: deal with sorting provider, user, and OU columns by the
      relevant code or username

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/eg2/src/app/staff/acq/search/acq-search.service.ts
Open-ILS/src/eg2/src/app/staff/acq/search/invoice-results.component.html
Open-ILS/src/eg2/src/app/staff/acq/search/lineitem-results.component.html
Open-ILS/src/eg2/src/app/staff/acq/search/picklist-results.component.html
Open-ILS/src/eg2/src/app/staff/acq/search/purchase-order-results.component.html

index aedaeb2..2474f71 100644 (file)
@@ -9,6 +9,13 @@ import {Pager} from '@eg/share/util/pager';
 import {IdlObject} from '@eg/core/idl.service';
 import {EventService} from '@eg/core/event.service';
 
+const baseIdlClass = {
+    lineitem: 'jub',
+    purchase_order: 'acqpo',
+    picklist: 'acqpl',
+    invoice: 'acqinv'
+};
+
 const defaultSearch = {
     lineitem: {
         jub: [{
@@ -221,7 +228,7 @@ export class AcqSearchService {
         const gridSource = new GridDataSource();
 
         this.fetchAttrDefs().then(() => {
-            gridSource.getRows = (pager: Pager) => {
+            gridSource.getRows = (pager: Pager, sort: any[]) => {
 
                 // don't do a search the very first time we
                 // get invoked, which is during initialization; we'll
@@ -238,6 +245,28 @@ export class AcqSearchService {
                 opts['offset'] = pager.offset;
                 opts['limit'] = pager.limit;
                 opts['au_by_id'] = true;
+
+                if (sort.length > 0) {
+                    opts['order_by'] = [];
+                    sort.forEach(sort_clause => {
+                        if (searchType === 'lineitem' &&
+                            ['title', 'author'].indexOf(sort_clause.name) > -1) {
+                            opts['order_by'].push({
+                                class: 'acqlia',
+                                field: 'attr_value',
+                                direction: sort_clause.dir
+                            });
+                            opts['order_by_attr'] = sort_clause.name;
+                        } else {
+                            opts['order_by'].push({
+                                class: baseIdlClass[searchType],
+                                field: sort_clause.name,
+                                direction: sort_clause.dir
+                            });
+                        }
+                    });
+                }
+
                 return this.net.request(
                     'open-ils.acq',
                     'open-ils.acq.' + searchType + '.unified_search',
index e5823a4..632eb9f 100644 (file)
@@ -25,6 +25,7 @@
   persistKey="acq.search.invoices"
   [stickyHeader]="true"
   [filterable]="true"
+  [sortable]="true"
   idlClass="acqinv" [dataSource]="gridSource">
 
   <eg-grid-toolbar-action label="Print Selected Invoices" i18n-label
index 6997295..96e67eb 100644 (file)
   idlClass="jub" [dataSource]="gridSource"
   [stickyHeader]="true"
   [filterable]="true"
+  [sortable]="true"
   [showDeclaredFieldsOnly]="true">
 
   <eg-grid-column path="id" [cellTemplate]="idTmpl" [disableTooltip]="true"></eg-grid-column>
-  <!-- TODO: Title and Author filters will require special work as they're acqlia values -->
   <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" [cellTemplate]="providerTmpl"></eg-grid-column>
-  <eg-grid-column i18n-label label="Links" path="_links" [cellTemplate]="liLinksTmpl" [disableTooltip]="true" [filterable]="false"></eg-grid-column>
-  <eg-grid-column path="claim_policy.name"></eg-grid-column>
+  <eg-grid-column i18n-label label="Links" path="_links" [cellTemplate]="liLinksTmpl" [disableTooltip]="true" [filterable]="false" [sortable]="false"></eg-grid-column>
+  <eg-grid-column path="claim_policy.name" [sortable]="false"></eg-grid-column>
   <eg-grid-column i18n-label label="Status" path="state" [disableTooltip]="true"></eg-grid-column>
   <eg-grid-column path="estimated_unit_price" [disableTooltip]="true"></eg-grid-column>
 </eg-grid>
index 9994ec2..f63d691 100644 (file)
@@ -34,6 +34,7 @@
   persistKey="acq.search.selectionlists"
   [stickyHeader]="true"
   [filterable]="true"
+  [sortable]="true"
   idlClass="acqpl" [dataSource]="gridSource">
 
   <eg-grid-toolbar-action label="New Selection List" i18n-label
@@ -50,7 +51,7 @@
   </eg-grid-toolbar-action>
 
   <eg-grid-column path="name" [cellTemplate]="nameTmpl"></eg-grid-column>
-  <eg-grid-column path="entry_count" [filterable]="false"></eg-grid-column>
+  <eg-grid-column path="entry_count" [filterable]="false" [sortable]="false"></eg-grid-column>
 
   <eg-grid-column path="id" [hidden]="true"></eg-grid-column>
   <eg-grid-column path="creator" [hidden]="true"></eg-grid-column>
index 14c6d96..d29b959 100644 (file)
@@ -20,6 +20,7 @@
   persistKey="acq.search.purchaseorders"
   [stickyHeader]="true"
   [filterable]="true"
+  [sortable]="true"
   idlClass="acqpo" [dataSource]="gridSource">
 
   <eg-grid-column path="name" [cellTemplate]="nameTmpl"></eg-grid-column>