From 37042b437d5f4a8330b0bfb1b19dbf224a349908 Mon Sep 17 00:00:00 2001 From: Matt Blenkinsop Date: Tue, 29 Oct 2024 16:53:18 +0000 Subject: [PATCH] Bug 38290: Add fields to the UI for CRUD --- acqui/vendors.pl | 11 +- admin/library_groups.pl | 4 + api/v1/swagger/definitions/vendor.yaml | 8 + .../swagger/paths/acquisitions_vendors.yaml | 1 + .../prog/en/modules/acqui/vendors.tt | 2 + .../prog/en/modules/admin/library_groups.tt | 24 ++- .../prog/js/fetch/acquisition-api-client.js | 2 +- .../prog/js/vue/components/Vendors/Main.vue | 52 +++++-- .../vue/components/Vendors/VendorDetails.vue | 44 +++++- .../vue/components/Vendors/VendorFormAdd.vue | 16 ++ .../prog/js/vue/stores/vendors.js | 138 ++++++++++++++++++ 11 files changed, 278 insertions(+), 24 deletions(-) diff --git a/acqui/vendors.pl b/acqui/vendors.pl index 89ddc38398a..5e2862d5ffa 100644 --- a/acqui/vendors.pl +++ b/acqui/vendors.pl @@ -39,11 +39,12 @@ my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user( my @gst_values = map { option => $_ + 0.0 }, split( '\|', C4::Context->preference("TaxRates") ); $template->param( - currencies => Koha::Acquisition::Currencies->search->unblessed, - gst_values => \@gst_values, - edifact => C4::Context->preference('EDIFACT'), - marc_orders => C4::Context->preference('MarcOrderingAutomation'), - erm_module => C4::Context->preference('ERMModule') + currencies => Koha::Acquisition::Currencies->search->unblessed, + gst_values => \@gst_values, + edifact => C4::Context->preference('EDIFACT'), + marc_orders => C4::Context->preference('MarcOrderingAutomation'), + erm_module => C4::Context->preference('ERMModule'), + logged_in_branch => { branchcode => C4::Context::mybranch }, ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/admin/library_groups.pl b/admin/library_groups.pl index 80021876d59..56ef228add6 100755 --- a/admin/library_groups.pl +++ b/admin/library_groups.pl @@ -52,6 +52,7 @@ if ( $op eq 'cud-add' ) { my $ft_search_groups_staff = $cgi->param('ft_search_groups_staff') || 0; my $ft_local_hold_group = $cgi->param('ft_local_hold_group') || 0; my $ft_local_float_group = $cgi->param('ft_local_float_group') || 0; + my $ft_acquisitions = $cgi->param('ft_acquisitions') || 0; if ( !$branchcode && Koha::Library::Groups->search( { title => $title } )->count() ) { $template->param( error_duplicate_title => $title ); @@ -68,6 +69,7 @@ if ( $op eq 'cud-add' ) { ft_local_hold_group => $ft_local_hold_group, ft_limit_item_editing => $ft_limit_item_editing, ft_local_float_group => $ft_local_float_group, + ft_acquisitions => $ft_acquisitions, branchcode => $branchcode, } )->store(); @@ -88,6 +90,7 @@ if ( $op eq 'cud-add' ) { my $ft_search_groups_staff = $cgi->param('ft_search_groups_staff') || 0; my $ft_local_hold_group = $cgi->param('ft_local_hold_group') || 0; my $ft_local_float_group = $cgi->param('ft_local_float_group') || 0; + my $ft_acquisitions = $cgi->param('ft_acquisitions') || 0; if ($id) { my $group = Koha::Library::Groups->find($id); @@ -102,6 +105,7 @@ if ( $op eq 'cud-add' ) { ft_search_groups_staff => $ft_search_groups_staff, ft_local_hold_group => $ft_local_hold_group, ft_local_float_group => $ft_local_float_group, + ft_acquisitions => $ft_acquisitions, } )->store(); diff --git a/api/v1/swagger/definitions/vendor.yaml b/api/v1/swagger/definitions/vendor.yaml index 0b3a3736aed..22c7e7f833f 100644 --- a/api/v1/swagger/definitions/vendor.yaml +++ b/api/v1/swagger/definitions/vendor.yaml @@ -124,6 +124,14 @@ properties: - string - "null" description: Language + lib_group_visibility: + type: + - string + - "null" + description: Language + lib_group_limits: + type: array + description: Library groups this vendor belongs to aliases: type: array description: List of aliases diff --git a/api/v1/swagger/paths/acquisitions_vendors.yaml b/api/v1/swagger/paths/acquisitions_vendors.yaml index a7eedfae4a0..245c2dfe713 100644 --- a/api/v1/swagger/paths/acquisitions_vendors.yaml +++ b/api/v1/swagger/paths/acquisitions_vendors.yaml @@ -158,6 +158,7 @@ - contracts - extended_attributes - +strings + - lib_group_limits collectionFormat: csv produces: - application/json diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/vendors.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/vendors.tt index 5ee5bcc68ec..81faca702c6 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/vendors.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/vendors.tt @@ -36,6 +36,8 @@ const edifact = [% To.json(edifact) | $raw %]; const marcOrderAutomation = [% To.json(marc_orders) | $raw %]; const ermModule = [% To.json(erm_module) | $raw %]; + const loggedInUser = [% To.json(logged_in_user.unblessed) | $raw %]; + const loggedInBranch = [% To.json(logged_in_branch) | $raw %]; [% Asset.js("js/vue/dist/acquisitions.js") | $raw %] [% INCLUDE 'select2.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/library_groups.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/library_groups.tt index 059b66b9b04..84ad30733a3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/library_groups.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/library_groups.tt @@ -152,6 +152,12 @@ Is local float group

+

+ +

@@ -235,6 +241,12 @@ Is local float group

+

+ +

@@ -331,7 +343,8 @@ var ft_search_groups_staff = $(this).data("groupFt_search_groups_staff"); var ft_local_hold_group = $(this).data("groupFt_local_hold_group"); var ft_local_float_group = $(this).data("groupFt_local_float_group"); - edit_group(id, parent_id, title, description, ft_hide_patron_info, ft_search_groups_opac, ft_search_groups_staff, ft_local_hold_group, ft_limit_item_editing, ft_local_float_group); + var ft_acquisitions = $(this).data("groupFt_acquisitions"); + edit_group(id, parent_id, title, description, ft_hide_patron_info, ft_search_groups_opac, ft_search_groups_staff, ft_local_hold_group, ft_limit_item_editing, ft_local_float_group, ft_acquisitions); }); $(".delete-group").on("click", function (e) { @@ -368,6 +381,7 @@ $("#add-group-modal-ft_search_groups_staff").prop("checked", false); $("#add-group-modal-ft_local_hold_group").prop("checked", false); $("#add-group-modal-ft_local_float_group").prop("checked", false); + $("#add-group-modal-ft_acquisitions").prop("checked", false); if (parent_id) { $("#root-group-features-add").hide(); } else { @@ -376,7 +390,7 @@ $("#add-group-modal").modal("show"); } - function edit_group(id, parent_id, title, description, ft_hide_patron_info, ft_search_groups_opac, ft_search_groups_staff, ft_local_hold_group, ft_limit_item_editing, ft_local_float_group) { + function edit_group(id, parent_id, title, description, ft_hide_patron_info, ft_search_groups_opac, ft_search_groups_staff, ft_local_hold_group, ft_limit_item_editing, ft_local_float_group, ft_acquisitions) { $("#edit-group-modal-id").val(id); $("#edit-group-modal-title").val(title); $("#edit-group-modal-description").val(description); @@ -387,6 +401,7 @@ $("#edit-group-modal-ft_search_groups_staff").prop("checked", false); $("#edit-group-modal-ft_local_hold_group").prop("checked", false); $("#edit-group-modal-ft_local_float_group").prop("checked", false); + $("#edit-group-modal-ft_acquisitions").prop("checked", false); $("#root-group-features-edit").hide(); } else { $("#edit-group-modal-ft_hide_patron_info").prop("checked", ft_hide_patron_info ? true : false); @@ -395,6 +410,7 @@ $("#edit-group-modal-ft_search_groups_staff").prop("checked", ft_search_groups_staff ? true : false); $("#edit-group-modal-ft_local_hold_group").prop("checked", ft_local_hold_group ? true : false); $("#edit-group-modal-ft_local_float_group").prop("checked", ft_local_float_group ? true : false); + $("#edit-group-modal-ft_acquisitions").prop("checked", ft_acquisitions ? true : false); $("#root-group-features-edit").show(); } @@ -455,6 +471,9 @@ [% IF group.ft_local_float_group %]
  • Is local float group
  • [% END %] + [% IF group.ft_acquisitions %] +
  • Use in the acquisitions module
  • + [% END %] [% END %] @@ -486,6 +505,7 @@ data-group-ft_local_hold_group="[% group.ft_local_hold_group | html %]" data-group-ft_limit_item_editing="[% group.ft_limit_item_editing | html %]" data-group-ft_local_float_group="[% group.ft_local_float_group | html %]" + data-group-ft_acquisitions="[% group.ft_acquisitions | html %]" > Edit diff --git a/koha-tmpl/intranet-tmpl/prog/js/fetch/acquisition-api-client.js b/koha-tmpl/intranet-tmpl/prog/js/fetch/acquisition-api-client.js index 7c7a8d7345c..aebe9336432 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/fetch/acquisition-api-client.js +++ b/koha-tmpl/intranet-tmpl/prog/js/fetch/acquisition-api-client.js @@ -12,7 +12,7 @@ export class AcquisitionAPIClient { endpoint: "vendors/" + id, headers: { "x-koha-embed": - "aliases,subscriptions+count,interfaces,contacts,contracts,baskets,extended_attributes,+strings", + "aliases,subscriptions+count,interfaces,contacts,contracts,baskets,extended_attributes,+strings,lib_group_limits", }, }), getAll: (query, params) => diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/Main.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/Main.vue index 5933106235d..504c998eeb5 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/Main.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/Main.vue @@ -37,8 +37,15 @@ import { APIClient } from "../../fetch/api-client.js"; export default { setup() { const vendorStore = inject("vendorStore"); - const { config, authorisedValues } = storeToRefs(vendorStore); - const { loadAuthorisedValues } = vendorStore; + const { + config, + authorisedValues, + user, + currencies, + libraryGroups, + gstValues, + } = storeToRefs(vendorStore); + const { loadAuthorisedValues, setLibraryGroups } = vendorStore; const mainStore = inject("mainStore"); const { loading, loaded, setError } = mainStore; @@ -55,6 +62,11 @@ export default { config, loadAuthorisedValues, authorisedValues, + user, + currencies, + libraryGroups, + gstValues, + setLibraryGroups, }; }, beforeCreate() { @@ -63,19 +75,29 @@ export default { this.loadAuthorisedValues(this.authorisedValues, this.vendorStore).then( () => { this.loadUserPermissions().then(() => { - this.config.settings.edifact = edifact; - this.config.settings.ermModule = ermModule; - this.config.settings.marcOrderAutomation = - marcOrderAutomation; - this.vendorStore.currencies = currencies; - this.vendorStore.gstValues = gstValues.map(gv => { - return { - label: `${Number(gv.option * 100).format_price()}%`, - value: gv.option, - }; - }); - this.loaded(); - this.initialized = true; + const libraryClient = APIClient.libraries; + libraryClient.libraryGroups.getAll().then( + libraryGroups => { + this.setLibraryGroups(libraryGroups); + this.config.settings.edifact = edifact; + this.config.settings.ermModule = ermModule; + this.config.settings.marcOrderAutomation = + marcOrderAutomation; + this.vendorStore.currencies = currencies; + this.user.loggedInUser = loggedInUser; + this.user.loggedInUser.loggedInBranch = + loggedInBranch.branchcode; + this.vendorStore.gstValues = gstValues.map(gv => { + return { + label: `${Number(gv.option * 100).format_price()}%`, + value: gv.option, + }; + }); + this.loaded(); + this.initialized = true; + }, + error => {} + ); }); } ); diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/VendorDetails.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/VendorDetails.vue index b97678fab11..bc51d555016 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/VendorDetails.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/VendorDetails.vue @@ -59,6 +59,30 @@ {{ get_lib_from_av("av_lang", vendor.language) }} +
  • + + + + + + + + + + + + + + +
    {{ $__("ID") }}{{ $__("Title") }}
    {{ libGroup.id }}{{ libGroup.title }}
    +
  • +
  • + + {{ $__("All library groups") }} +