From f9721e0153dfc9e0b4b544b9e61aa60a114e3190 Mon Sep 17 00:00:00 2001 From: Agustin Moyano 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 @@ @@ -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 '
' - }, - 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 '
' - }, - 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 @@
- +
@@ -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 ERMModule to use it' - ), false); + async beforeCreate() { + if (!this.ERMModule) { + return this.setError( + this.$__( + 'The e-resource management module is disabled, turn on ERMModule 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