From 37201625023eefc65ef7e00a4f2dbeebc32c740b Mon Sep 17 00:00:00 2001 From: Matt Blenkinsop Date: Wed, 23 Apr 2025 12:53:41 +0100 Subject: [PATCH] Bug 38010: (QA follow-up) Add a config endpoint for permissions Signed-off-by: Michaela Sieber Signed-off-by: Jonathan Druart --- Koha/REST/V1/Acquisitions/Vendors.pm | 21 ++++++++++ .../swagger/definitions/vendors_config.yaml | 7 ++++ .../paths/acquisitions_vendors_config.yaml | 38 +++++++++++++++++++ api/v1/swagger/swagger.yaml | 4 ++ .../prog/js/fetch/acquisition-api-client.js | 9 +++++ .../prog/js/vue/components/Vendors/Main.vue | 27 +++++++------ 6 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 api/v1/swagger/definitions/vendors_config.yaml create mode 100644 api/v1/swagger/paths/acquisitions_vendors_config.yaml diff --git a/Koha/REST/V1/Acquisitions/Vendors.pm b/Koha/REST/V1/Acquisitions/Vendors.pm index 1ae2bde2c97..8b61de68797 100644 --- a/Koha/REST/V1/Acquisitions/Vendors.pm +++ b/Koha/REST/V1/Acquisitions/Vendors.pm @@ -169,4 +169,25 @@ sub delete { }; } +=head3 config + +Return the configuration options needed for the ERM Vue app + +=cut + +sub config { + my $c = shift->openapi->valid_input or return; + + my $patron = $c->stash('koha.user'); + my $userflags = C4::Auth::getuserflags( $patron->flags, $patron->id ); + my $permissions = Koha::Auth::Permissions->get_authz_from_flags( { flags => $userflags } ); + + return $c->render( + status => 200, + openapi => { + permissions => $permissions, + }, + ); +} + 1; diff --git a/api/v1/swagger/definitions/vendors_config.yaml b/api/v1/swagger/definitions/vendors_config.yaml new file mode 100644 index 00000000000..f9e71160cd1 --- /dev/null +++ b/api/v1/swagger/definitions/vendors_config.yaml @@ -0,0 +1,7 @@ +--- +type: object +properties: + permissions: + type: object + description: List of permissions for the user +additionalProperties: false diff --git a/api/v1/swagger/paths/acquisitions_vendors_config.yaml b/api/v1/swagger/paths/acquisitions_vendors_config.yaml new file mode 100644 index 00000000000..4bc3e814ece --- /dev/null +++ b/api/v1/swagger/paths/acquisitions_vendors_config.yaml @@ -0,0 +1,38 @@ +--- +/acquisitions/vendors/config: + get: + x-mojo-to: Acquisitions::Vendors#config + operationId: getVendorsconfig + description: This resource returns a list of options needed for the Vendors Vue app + summary: get the Vendors config + tags: + - vendors_config + produces: + - application/json + responses: + 200: + description: The Vendors config + schema: + $ref: "../swagger.yaml#/definitions/vendors_config" + 400: + description: Bad request + schema: + $ref: "../swagger.yaml#/definitions/error" + 403: + description: Access forbidden + schema: + $ref: "../swagger.yaml#/definitions/error" + 500: + description: | + Internal server error. Possible `error_code` attribute values: + + * `internal_server_error` + schema: + $ref: "../swagger.yaml#/definitions/error" + 503: + description: Under maintenance + schema: + $ref: "../swagger.yaml#/definitions/error" + x-koha-authorization: + permissions: + acquisition: 1 diff --git a/api/v1/swagger/swagger.yaml b/api/v1/swagger/swagger.yaml index e583215a8be..cbb6fa338f8 100644 --- a/api/v1/swagger/swagger.yaml +++ b/api/v1/swagger/swagger.yaml @@ -188,6 +188,8 @@ definitions: $ref: ./definitions/vendor.yaml vendor_issue: $ref: ./definitions/vendor_issue.yaml + vendors_config: + $ref: ./definitions/vendors_config.yaml paths: /acquisitions/baskets: $ref: ./paths/acquisitions_baskets.yaml#/~1acquisitions~1baskets @@ -207,6 +209,8 @@ paths: $ref: "./paths/acquisitions_orders.yaml#/~1acquisitions~1orders~1{order_id}" /acquisitions/vendors: $ref: ./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors + /acquisitions/vendors/config: + $ref: ./paths/acquisitions_vendors_config.yaml#/~1acquisitions~1vendors~1config "/acquisitions/vendors/{vendor_id}": $ref: "./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors~1{vendor_id}" "/acquisitions/vendors/{vendor_id}/issues": 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 0316beb3b33..165d93948e2 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 @@ -5,6 +5,15 @@ export class AcquisitionAPIClient { }); } + get config() { + return { + get: moduleEndpoint => + this.httpClient.get({ + endpoint: moduleEndpoint + "/config", + }), + }; + } + get vendors() { return { get: id => 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 87d76eec324..17b7ceda9de 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 @@ -32,6 +32,7 @@ import LeftMenu from "../LeftMenu.vue"; import Dialog from "../Dialog.vue"; import "vue-select/dist/vue-select.css"; import { storeToRefs } from "pinia"; +import { APIClient } from "../../fetch/api-client.js"; export default { setup() { @@ -61,18 +62,22 @@ export default { this.loadAuthorisedValues(this.authorisedValues, this.vendorStore).then( () => { - this.userPermissions = userPermissions; - this.config.settings.edifact = edifact; - 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, - }; + const client = APIClient.acquisition; + client.config.get("vendors").then(config => { + this.userPermissions = config.permissions; + this.config.settings.edifact = edifact; + 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; }); - this.loaded(); - this.initialized = true; } ); }, -- 2.34.1