From bca1726aa295ad600642136a2bf9ab78c7be8b00 Mon Sep 17 00:00:00 2001
From: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com>
Date: Thu, 14 Sep 2023 12:35:08 +0000
Subject: [PATCH] Bug 34788: Add Vue components, api client and navigation
route
This patch adds a new component to handle the file import, a route to that component and the API client route needed to access the API
Signed-off-by: Clemens Tubach <clemens.tubach@kit.edu>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
---
.../ERM/EHoldingsLocalTitlesKBARTImport.vue | 124 ++++++++++++++++++
.../ERM/EHoldingsLocalTitlesList.vue | 17 +++
.../prog/js/vue/fetch/erm-api-client.js | 5 +
.../intranet-tmpl/prog/js/vue/routes/erm.js | 9 ++
4 files changed, 155 insertions(+)
create mode 100644 koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesKBARTImport.vue
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesKBARTImport.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesKBARTImport.vue
new file mode 100644
index 00000000000..6d2269db54d
--- /dev/null
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesKBARTImport.vue
@@ -0,0 +1,124 @@
+<template>
+ <h2>{{ $__("Import from a KBART file") }}</h2>
+ <div class="page-section" id="files">
+ <form @submit="addDocument($event)" class="file_upload">
+ <label>{{ $__("File") }}:</label>
+ <div class="file_information">
+ <span v-if="!file.filename">
+ {{ $__("Select a file") }}
+ <input
+ type="file"
+ @change="selectFile($event)"
+ :id="`import_file`"
+ :name="`import_file`"
+ />
+ </span>
+ <ol>
+ <li v-show="file.filename">
+ {{ $__("File name") }}:
+ <span>{{ file.filename }}</span>
+ </li>
+ <li v-show="file.file_type">
+ {{ $__("File type") }}:
+ <span>{{ file.file_type }}</span>
+ </li>
+ </ol>
+ </div>
+ <fieldset class="action">
+ <ButtonSubmit />
+ <a @click="clearForm($event)" role="button" class="cancel">{{
+ $__("Clear form")
+ }}</a>
+ </fieldset>
+ </form>
+ </div>
+</template>
+
+<script>
+import ButtonSubmit from "../ButtonSubmit.vue"
+import { APIClient } from "../../fetch/api-client.js"
+import { setMessage, setWarning } from "../../messages"
+
+export default {
+ data() {
+ return {
+ file: {
+ filename: null,
+ file_content: null,
+ },
+ }
+ },
+ methods: {
+ selectFile(e) {
+ let files = e.target.files
+ if (!files) return
+ let file = files[0]
+ const reader = new FileReader()
+ reader.onload = e => this.loadFile(file.name, e.target.result)
+ reader.readAsBinaryString(file)
+ },
+ loadFile(filename, content) {
+ this.file.filename = filename
+ this.file.file_content = btoa(content)
+ },
+ addDocument(e) {
+ e.preventDefault()
+ const client = APIClient.erm
+ client.localTitles.import_kbart(this.file).then(
+ success => {
+ let message = ""
+ if (success.job_ids) {
+ if (success.job_ids.length > 1) {
+ message += this.__(
+ "<li>Your file was too large to process in one job, the file has been split into %s jobs to meet the maximum size limits.</li>"
+ ).format(success.job_ids.length)
+ }
+ success.job_ids.forEach((job, i) => {
+ message += this.$__(
+ '<li>Job for uploaded file %s has been queued, <a href="/cgi-bin/koha/admin/background_jobs.pl?op=view&id=%s" target="_blank">click here</a> to check its progress.</li>'
+ ).format(i + 1, job)
+ })
+ setMessage(message, true)
+ }
+ if (success.invalid_columns) {
+ message +=
+ "<p>Invalid columns were detected in your report, please check the list below:</p>"
+ success.invalid_columns.forEach(column => {
+ message += this.$__(
+ `<li style="font-weight: normal; font-size: medium;">%s</li>`
+ ).format(column)
+ })
+ message +=
+ '<p style="margin-top: 1em;">Below is a list of columns allowed in a KBART phase II report:</p>'
+ success.valid_columns.forEach(column => {
+ message += this.$__(
+ `<li style="font-weight: normal; font-size: medium;">%s</li>`
+ ).format(column)
+ })
+ setWarning(message)
+ }
+ },
+ error => {}
+ )
+ },
+ clearForm(e) {
+ e.preventDefault()
+ this.file = {
+ filename: null,
+ file_type: null,
+ file_content: null,
+ }
+ },
+ },
+ components: {
+ ButtonSubmit,
+ },
+ name: "EHoldingsLocalTitlesKBARTImport",
+}
+</script>
+
+<style scoped>
+label {
+ margin: 0px 10px 0px 0px;
+}
+</style>
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue
index 7a0dc98edc4..3c261bc8976 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitlesList.vue
@@ -102,6 +102,23 @@ export default {
},
},
cannot_search: false,
+ toolbar_options: [
+ {
+ to: "EHoldingsLocalTitlesFormAdd",
+ icon: "plus",
+ button_title: this.$__("New title"),
+ },
+ {
+ to: "EHoldingsLocalTitlesFormImport",
+ icon: "plus",
+ button_title: this.$__("Import from list"),
+ },
+ {
+ to: "EHoldingsLocalTitlesKBARTImport",
+ icon: "plus",
+ button_title: this.$__("Import from KBART file"),
+ },
+ ],
}
},
beforeRouteEnter(to, from, next) {
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/erm-api-client.js b/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/erm-api-client.js
index f563f617019..c69dada53ba 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/erm-api-client.js
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/erm-api-client.js
@@ -189,6 +189,11 @@ export class ERMAPIClient extends HttpClient {
endpoint: "eholdings/local/titles/import",
body,
}),
+ import_kbart: body =>
+ this.post({
+ endpoint: "eholdings/local/titles/import_kbart",
+ body,
+ }),
};
}
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/routes/erm.js b/koha-tmpl/intranet-tmpl/prog/js/vue/routes/erm.js
index 4f2331bdda6..46c10babbf4 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/routes/erm.js
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/routes/erm.js
@@ -7,6 +7,7 @@ import AgreementsFormAdd from "../components/ERM/AgreementsFormAdd.vue";
import EHoldingsLocalPackagesFormAdd from "../components/ERM/EHoldingsLocalPackagesFormAdd.vue";
import EHoldingsLocalTitlesFormAdd from "../components/ERM/EHoldingsLocalTitlesFormAdd.vue";
import EHoldingsLocalTitlesFormImport from "../components/ERM/EHoldingsLocalTitlesFormImport.vue";
+import EHoldingsLocalTitlesKBARTImport from "../components/ERM/EHoldingsLocalTitlesKBARTImport.vue";
import EHoldingsLocalPackagesList from "../components/ERM/EHoldingsLocalPackagesList.vue";
import EHoldingsLocalPackagesShow from "../components/ERM/EHoldingsLocalPackagesShow.vue";
import EHoldingsLocalResourcesShow from "../components/ERM/EHoldingsLocalResourcesShow.vue";
@@ -200,6 +201,14 @@ export const routes = [
),
title: $__("Import from a list"),
},
+ {
+ path: "kbart-import",
+ name: "EHoldingsLocalTitlesKBARTImport",
+ component: markRaw(
+ EHoldingsLocalTitlesKBARTImport
+ ),
+ title: $__("Import from a KBART file"),
+ },
{
path: "/cgi-bin/koha/erm/eholdings/local/resources/:resource_id",
name: "EHoldingsLocalResourcesShow",
--
2.39.2