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") }}
+
@@ -151,6 +175,19 @@
:options="authorisedValues.av_lang"
/>
+
+
+
+
@@ -181,6 +218,7 @@