Bug 32807: Fetch count instead of all entries for agreements and licenses
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 22 Feb 2023 07:48:48 +0000 (08:48 +0100)
committerTomas Cohen Arazi <tomascohen@theke.io>
Mon, 27 Mar 2023 10:50:00 +0000 (12:50 +0200)
To list agreements and licenses we are retrieving the whole list to
simply know if at least one exists (and display the table that will
fetch the X first elements to display).

We should call count instead.

Test plan:
List agreements and licenses.
If none exists, the table is not displayed but a "There are no...
defined" message instead.
If at least one exists the table must be there

Signed-off-by: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue
koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackagesList.vue
koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue
koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicensesList.vue
koha-tmpl/intranet-tmpl/prog/js/vue/fetch/erm-api-client.js

index e14b114..51e63a9 100644 (file)
@@ -1,8 +1,8 @@
 <template>
     <div v-if="!initialized">{{ $__("Loading") }}</div>
-    <div v-else-if="agreements" id="agreements_list">
+    <div v-else-if="agreement_count" id="agreements_list">
         <Toolbar v-if="before_route_entered" />
-        <fieldset v-if="agreements.length" class="filters">
+        <fieldset v-if="agreement_count > 0" class="filters">
             <label for="expired_filter">{{ $__("Filter by expired") }}:</label>
             <input
                 type="checkbox"
@@ -32,7 +32,7 @@
                 :value="$__('Filter')"
             />
         </fieldset>
-        <div v-if="agreements.length" class="page-section">
+        <div v-if="agreement_count > 0" class="page-section">
             <table :id="table_id"></table>
         </div>
         <div v-else-if="initialized" class="dialog message">
@@ -75,7 +75,7 @@ export default {
     data: function () {
         return {
             fp_config: flatpickr_defaults,
-            agreements: [],
+            agreement_count: null,
             initialized: false,
             filters: {
                 by_expired: this.$route.query.by_expired || false,
@@ -92,7 +92,7 @@ export default {
             vm.before_route_entered = true // FIXME This is ugly, but we need to distinguish when it's used as main component or child component (from EHoldingsEBSCOPAckagesShow for instance)
             if (!vm.building_table) {
                 vm.building_table = true
-                vm.getAgreements().then(() => vm.build_datatable())
+                vm.getAgreementCount().then(() => vm.build_datatable())
             }
         })
     },
@@ -106,11 +106,11 @@ export default {
         },
     },
     methods: {
-        async getAgreements() {
+        async getAgreementCount() {
             const client = APIClient.erm
-            await client.agreements.getAll().then(
-                agreements => {
-                    this.agreements = agreements
+            await client.agreements.count().then(
+                count => {
+                    this.agreement_count = count
                     this.initialized = true
                 },
                 error => {}
@@ -481,7 +481,7 @@ export default {
     mounted() {
         if (!this.building_table) {
             this.building_table = true
-            this.getAgreements().then(() => this.build_datatable())
+            this.getAgreementCount().then(() => this.build_datatable())
         }
     },
     components: { flatPickr, Toolbar },
index 9fd12f7..5196712 100644 (file)
@@ -48,7 +48,7 @@ export default {
     },
     data: function () {
         return {
-            package_count: [],
+            package_count: null,
             initialized: false,
             filters: {
                 package_name: this.$route.query.package_name || "",
index d9cec18..598d54b 100644 (file)
@@ -46,7 +46,7 @@ export default {
     },
     data: function () {
         return {
-            title_count: undefined,
+            title_count: null,
             initialized: false,
             filters: {
                 publication_title: this.$route.query.publication_title || "",
index b423556..1ff7243 100644 (file)
@@ -1,8 +1,8 @@
 <template>
     <div v-if="!initialized">{{ $__("Loading") }}</div>
-    <div v-else-if="licenses" id="licenses_list">
+    <div v-else-if="license_count" id="licenses_list">
         <Toolbar />
-        <div v-if="licenses.length" class="page-section">
+        <div v-if="license_count > 0" class="page-section">
             <table :id="table_id"></table>
         </div>
         <div v-else-if="initialized" class="dialog message">
@@ -42,21 +42,21 @@ export default {
     },
     data: function () {
         return {
-            licenses: [],
+            license_count: null,
             initialized: false,
         }
     },
     beforeRouteEnter(to, from, next) {
         next(vm => {
-            vm.getLicenses().then(() => vm.build_datatable())
+            vm.getLicenseCount().then(() => vm.build_datatable())
         })
     },
     methods: {
-        async getLicenses() {
+        async getLicenseCount() {
             const client = APIClient.erm
-            await client.licenses.getAll().then(
-                licenses => {
-                    this.licenses = licenses
+            await client.licenses.count().then(
+                count => {
+                    this.license_count = count
                     this.initialized = true
                 },
                 error => {}
index 8dbd9e5..5cf28a9 100644 (file)
@@ -35,7 +35,16 @@ export class ERMAPIClient extends HttpClient {
                     endpoint: "agreements/" + id,
                     body: agreement,
                 }),
-            //count: () => this.count("agreements"), //TODO: Implement count method
+            count: (query = {}) =>
+                this.count({
+                    endpoint:
+                        "agreements?" +
+                        new URLSearchParams({
+                            _page: 1,
+                            _per_page: 1,
+                            ...(query && { q: JSON.stringify(query) }),
+                        }),
+                }),
         };
     }
 
@@ -70,6 +79,16 @@ export class ERMAPIClient extends HttpClient {
                     endpoint: "licenses/" + id,
                     body: license,
                 }),
+                count: (query = {}) =>
+                this.count({
+                    endpoint:
+                        "licenses?" +
+                        new URLSearchParams({
+                            _page: 1,
+                            _per_page: 1,
+                            ...(query && { q: JSON.stringify(query) }),
+                        }),
+                }),
         };
     }