Bugzilla – Attachment 147713 Details for
Bug 33066
We need a KohaTable Vue component
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 33066: Fix search by vendor
Bug-33066-Fix-search-by-vendor.patch (text/plain), 21.58 KB, created by
Agustín Moyano
on 2023-03-03 16:18:39 UTC
(
hide
)
Description:
Bug 33066: Fix search by vendor
Filename:
MIME Type:
Creator:
Agustín Moyano
Created:
2023-03-03 16:18:39 UTC
Size:
21.58 KB
patch
obsolete
>From f9721e0153dfc9e0b4b544b9e61aa60a114e3190 Mon Sep 17 00:00:00 2001 >From: Agustin Moyano <agustinmoyano@theke.io> >Date: Fri, 3 Mar 2023 13:04:48 -0300 >Subject: [PATCH] Bug 33066: Fix search by vendor > >--- > .../js/vue/components/ERM/AgreementsList.vue | 347 +----------------- > .../prog/js/vue/components/ERM/Main.vue | 52 +-- > 2 files changed, 41 insertions(+), 358 deletions(-) > >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue >index e6af6a4e26..87c8ba9f17 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue >@@ -1,8 +1,7 @@ > <template> >- <div v-if="!initialized">{{ $__("Loading") }}</div> >- <div v-else-if="agreements" id="agreements_list"> >+ <div id="agreements_list"> > <Toolbar v-if="before_route_entered" /> >- <fieldset v-if="agreements.length" class="filters"> >+ <fieldset class="filters"> > <label for="expired_filter">{{ $__("Filter by expired") }}:</label> > <input > type="checkbox" >@@ -24,7 +23,7 @@ > :value="$__('Filter')" > /> > </fieldset> >- <div v-if="agreements.length" class="page-section"> >+ <div class="page-section"> > <KohaTable > ref="table" > v-bind="tableOptions" >@@ -33,9 +32,6 @@ > @delete="doDelete" > ></KohaTable> > </div> >- <div v-else-if="initialized" class="dialog message"> >- {{ $__("There are no agreements defined") }} >- </div> > </div> > </template> > >@@ -92,29 +88,22 @@ export default { > 0: ["show"], > "-1": ["edit", "delete"], > }, >+ options: { >+ embed: ["vendor"], >+ }, > }, > } > }, > beforeRouteEnter(to, from, next) { > next(vm => { > 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() >- vm.initialized = true >- } > }) > }, > methods: { > async getAgreements() { > const client = APIClient.erm >- await client.agreements.getAll().then( >- agreements => { >- this.agreements = agreements >- this.initialized = true >- }, >- error => {} >- ) >+ this.agreements = await client.agreements.getAll() >+ this.initialized = true > }, > doShow: function (agreement, dt, event) { > event.preventDefault() >@@ -181,308 +170,9 @@ export default { > } > this.$refs.table.redraw(this.table_url()) > }, >- build_datatable: function () { >- let show_agreement = this.show_agreement >- let edit_agreement = this.edit_agreement >- let delete_agreement = this.delete_agreement >- let select_agreement = this.select_agreement >- let get_lib_from_av = this.get_lib_from_av >- let map_av_dt_filter = this.map_av_dt_filter >- let datatable_url = this.datatable_url >- let default_search = this.$route.query.q >- let actions = this.before_route_entered ? "edit_delete" : "select" >- let table_id = this.table_id >- >- window["vendors"] = this.vendors.map(e => { >- e["_id"] = e["id"] >- e["_str"] = e["name"] >- return e >- }) >- let vendors_map = this.vendors.reduce((map, e) => { >- map[e.id] = e >- return map >- }, {}) >- let avs = [ >- "av_agreement_statuses", >- "av_agreement_closure_reasons", >- "av_agreement_renewal_priorities", >- ] >- avs.forEach(function (av_cat) { >- window[av_cat] = map_av_dt_filter(av_cat) >- }) >- >- window["av_agreement_is_perpetual"] = [ >- { _id: 0, _str: _("No") }, >- { _id: 1, _str: _("Yes") }, >- ] >- >- const table = $("#" + table_id).kohaTable( >- { >- ajax: { >- url: datatable_url, >- }, >- order: [[0, "asc"]], >- autoWidth: false, >- search: { search: default_search }, >- columnDefs: [ >- { >- targets: [0, 2], >- render: function (data, type, row, meta) { >- if (type == "display") { >- return escape_str(data) >- } >- return data >- }, >- }, >- ], >- columns: [ >- { >- title: __("Name"), >- data: "me.agreement_id:me.name", >- searchable: true, >- orderable: true, >- render: function (data, type, row, meta) { >- // Rendering done in drawCallback >- return "" >- }, >- }, >- { >- title: __("Vendor"), >- data: "vendor_id", >- searchable: true, >- orderable: true, >- render: function (data, type, row, meta) { >- return row.vendor_id != undefined >- ? escape_str( >- vendors_map[row.vendor_id].name >- ) >- : "" >- }, >- }, >- { >- title: __("Description"), >- data: "description", >- searchable: true, >- orderable: true, >- }, >- { >- title: __("Status"), >- data: "status", >- searchable: true, >- orderable: true, >- render: function (data, type, row, meta) { >- return escape_str( >- get_lib_from_av( >- "av_agreement_statuses", >- row.status >- ) >- ) >- }, >- }, >- { >- title: __("Closure reason"), >- data: "closure_reason", >- searchable: true, >- orderable: true, >- render: function (data, type, row, meta) { >- return escape_str( >- get_lib_from_av( >- "av_agreement_closure_reasons", >- row.closure_reason >- ) >- ) >- }, >- }, >- { >- title: __("Is perpetual"), >- data: "is_perpetual", >- searchable: true, >- orderable: true, >- render: function (data, type, row, meta) { >- return escape_str( >- row.is_perpetual ? _("Yes") : _("No") >- ) >- }, >- }, >- { >- title: __("Renewal priority"), >- data: "renewal_priority", >- searchable: true, >- orderable: true, >- render: function (data, type, row, meta) { >- return escape_str( >- get_lib_from_av( >- "av_agreement_renewal_priorities", >- row.renewal_priority >- ) >- ) >- }, >- }, >- { >- title: __("Actions"), >- data: function (row, type, val, meta) { >- return '<div class="actions"></div>' >- }, >- className: "actions noExport", >- searchable: false, >- orderable: false, >- }, >- ], >- drawCallback: function (settings) { >- var api = new $.fn.dataTable.Api(settings) >- >- if (actions == "edit_delete") { >- $.each( >- $(this).find("td .actions"), >- function (index, e) { >- let tr = $(this).parent().parent() >- let agreement_id = api >- .row(tr) >- .data().agreement_id >- let agreement_name = api.row(tr).data().name >- let editButton = createVNode( >- "a", >- { >- class: "btn btn-default btn-xs", >- role: "button", >- onClick: () => { >- edit_agreement(agreement_id) >- }, >- }, >- [ >- createVNode("i", { >- class: "fa fa-pencil", >- "aria-hidden": "true", >- }), >- __("Edit"), >- ] >- ) >- >- let deleteButton = createVNode( >- "a", >- { >- class: "btn btn-default btn-xs", >- role: "button", >- onClick: () => { >- delete_agreement( >- agreement_id, >- agreement_name >- ) >- }, >- }, >- [ >- createVNode("i", { >- class: "fa fa-trash", >- "aria-hidden": "true", >- }), >- __("Delete"), >- ] >- ) >- >- let n = createVNode("span", {}, [ >- editButton, >- " ", >- deleteButton, >- ]) >- render(n, e) >- } >- ) >- } else { >- $.each( >- $(this).find("td .actions"), >- function (index, e) { >- let tr = $(this).parent().parent() >- let agreement_id = api >- .row(tr) >- .data().agreement_id >- let selectButton = createVNode( >- "a", >- { >- class: "btn btn-default btn-xs", >- role: "button", >- onClick: () => { >- select_agreement(agreement_id) >- }, >- }, >- [ >- createVNode("i", { >- class: "fa fa-check", >- "aria-hidden": "true", >- }), >- __("Select"), >- ] >- ) >- >- let n = createVNode("span", {}, [ >- selectButton, >- ]) >- render(n, e) >- } >- ) >- } >- >- $.each( >- $(this).find("tbody tr td:first-child"), >- function (index, e) { >- let tr = $(this).parent() >- let row = api.row(tr).data() >- if (!row) return // Happen if the table is empty >- let n = createVNode( >- "a", >- { >- role: "button", >- onClick: () => { >- show_agreement(row.agreement_id) >- }, >- }, >- `${row.name} (#${row.agreement_id})` >- ) >- render(n, e) >- } >- ) >- }, >- preDrawCallback: function (settings) { >- $("#" + table_id) >- .find("thead th") >- .eq(1) >- .attr("data-filter", "vendors") >- $("#" + table_id) >- .find("thead th") >- .eq(3) >- .attr("data-filter", "av_agreement_statuses") >- $("#" + table_id) >- .find("thead th") >- .eq(4) >- .attr("data-filter", "av_agreement_closure_reasons") >- $("#" + table_id) >- .find("thead th") >- .eq(5) >- .attr("data-filter", "av_agreement_is_perpetual") >- $("#" + table_id) >- .find("thead th") >- .eq(6) >- .attr( >- "data-filter", >- "av_agreement_renewal_priorities" >- ) >- }, >- }, >- agreement_table_settings, >- 1 >- ) >- }, > getTableColumns: function () { > let get_lib_from_av = this.get_lib_from_av > let escape_str = this.escape_str >- window["vendors"] = this.vendors.map(e => { >- e["_id"] = e["id"] >- e["_str"] = e["name"] >- return e >- }) >- let vendors_map = this.vendors.reduce((map, e) => { >- map[e.id] = e >- return map >- }, {}) > let avs = [ > "av_agreement_statuses", > "av_agreement_closure_reasons", >@@ -514,13 +204,11 @@ export default { > }, > { > title: __("Vendor"), >- data: "vendor_id", >+ data: "vendor.name", > searchable: true, > orderable: true, > render: function (data, type, row, meta) { >- return row.vendor_id != undefined >- ? escape_str(vendors_map[row.vendor_id].name) >- : "" >+ return row.vendor.name > }, > }, > { >@@ -577,24 +265,9 @@ export default { > ) > }, > }, >- { >- title: __("Actions"), >- data: function (row, type, val, meta) { >- return '<div class="actions"></div>' >- }, >- className: "actions noExport", >- searchable: false, >- orderable: false, >- }, > ] > }, > }, >- mounted() { >- if (!this.building_table) { >- this.building_table = true >- this.getAgreements() >- } >- }, > components: { flatPickr, Toolbar, KohaTable }, > name: "AgreementsList", > emits: ["select-agreement", "close"], >diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/Main.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/Main.vue >index d997c5fd9b..19c82e27c6 100644 >--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/Main.vue >+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/Main.vue >@@ -6,7 +6,7 @@ > <div class="col-sm-10 col-sm-push-2"> > <main> > <Dialog /> >- <router-view/> >+ <router-view v-if="vendorStore.vendors.length" /> > </main> > </div> > >@@ -147,22 +147,22 @@ export default { > component: "agreement", > } > }, >- beforeCreate() { >- if(!this.ERMModule) { >- return this.setError(this.$__( >- 'The e-resource management module is disabled, turn on <a href="/cgi-bin/koha/admin/preferences.pl?tab=&op=search&searchfield=ERMModule">ERMModule</a> to use it' >- ), false); >+ async beforeCreate() { >+ if (!this.ERMModule) { >+ return this.setError( >+ this.$__( >+ 'The e-resource management module is disabled, turn on <a href="/cgi-bin/koha/admin/preferences.pl?tab=&op=search&searchfield=ERMModule">ERMModule</a> to use it' >+ ), >+ false >+ ) > } > this.loading() > > const acq_client = APIClient.acquisition >- acq_client.vendors.getAll().then( >- vendors => { >- this.vendorStore.vendors = vendors >- this.initialized = true >- }, >- error => {} >- ) >+ const vendors = await acq_client.vendors.getAll() >+ >+ this.vendorStore.vendors = vendors >+ this.initialized = true > > const av_client = APIClient.authorised_values > const authorised_values = { >@@ -179,15 +179,25 @@ export default { > av_title_publication_types: "ERM_TITLE_PUBLICATION_TYPE", > } > >- let av_cat_array = Object.keys(authorised_values).map(function(av_cat){return "\""+authorised_values[av_cat]+"\""}); >- >- av_client.values.getCategoriesWithValues(av_cat_array).then(av_categories => { >- Object.entries(authorised_values).forEach(([av_var, av_cat]) => { >- const av_match = av_categories.find(element => element.category_name == av_cat); >- this.AVStore[av_var] = av_match.authorised_values; >- >+ let av_cat_array = Object.keys(authorised_values).map(function ( >+ av_cat >+ ) { >+ return '"' + authorised_values[av_cat] + '"' >+ }) >+ >+ av_client.values >+ .getCategoriesWithValues(av_cat_array) >+ .then(av_categories => { >+ Object.entries(authorised_values).forEach( >+ ([av_var, av_cat]) => { >+ const av_match = av_categories.find( >+ element => element.category_name == av_cat >+ ) >+ this.AVStore[av_var] = av_match.authorised_values >+ } >+ ) > }) >- }).then(() => (this.loaded())); >+ .then(() => this.loaded()) > }, > components: { > Breadcrumb, >-- >2.25.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 33066
:
147352
|
147353
|
147354
|
147692
|
147693
|
147694
|
147713
|
147846
|
147847
|
147848
|
147849
|
147850
|
147851
|
147852
|
147853
|
147855
|
147856
|
147857
|
147858
|
147862
|
147865
|
147902
|
147903
|
147904
|
147905
|
147906
|
147907
|
147908
|
147909
|
147910
|
147911
|
147912
|
147913
|
147914
|
147915
|
147916
|
147917
|
147918
|
147921
|
147922
|
147923
|
147925
|
147926
|
147928
|
147957
|
147960
|
147971
|
147972
|
148718
|
149158
|
149159
|
149160
|
149161
|
149162
|
149163
|
149164
|
149165
|
149166
|
149167
|
149168
|
149169
|
149170
|
149171
|
149172
|
149173
|
149174
|
149175
|
149176
|
149177
|
149178
|
149179
|
149180
|
149181
|
149182
|
149183