diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue
index 163c6cdae2..a6a8ac7d39 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue
@@ -12,7 +12,6 @@ import { storeToRefs } from "pinia";
import { APIClient } from "../../fetch/api-client.js";
export default {
- // extends: BaseResource,
props: {
routeAction: String,
embedded: { type: Boolean, default: false },
@@ -35,46 +34,43 @@ export default {
const vendorStore = inject("vendorStore");
const { vendors } = storeToRefs(vendorStore);
- const getTableFilterFormElements = () => {
- return [
- {
- name: "by_expired",
- type: "checkbox",
- label: __("Filter by expired"),
- value: false,
- onChange: function (filters) {
- if (filters.by_expired) {
- filters.max_expiration_date = new Date()
- .toISOString()
- .substring(0, 10);
- } else {
- filters.max_expiration_date = "";
- }
- return filters;
- },
- },
- {
- name: "max_expiration_date",
- type: "date",
- label: __("on"),
- componentProps: {
- disabled: {
- resourceProperty: "by_expired",
- qualifier: "!",
- },
- },
- value: "",
- },
- {
- name: "by_mine",
- type: "checkbox",
- label: __("Show mine only"),
- value: false,
- },
- ];
- };
-
const extendedAttributesResourceType = "agreement";
+ const tableFilters = [
+ {
+ name: "by_expired",
+ type: "checkbox",
+ label: __("Filter by expired"),
+ value: false,
+ onChange: function (filters) {
+ if (filters.by_expired) {
+ filters.max_expiration_date = new Date()
+ .toISOString()
+ .substring(0, 10);
+ } else {
+ filters.max_expiration_date = "";
+ }
+ return filters;
+ },
+ },
+ {
+ name: "max_expiration_date",
+ type: "date",
+ label: __("on"),
+ componentProps: {
+ disabled: {
+ resourceProperty: "by_expired",
+ qualifier: "!",
+ },
+ },
+ value: "",
+ },
+ {
+ name: "by_mine",
+ type: "checkbox",
+ label: __("Show mine only"),
+ value: false,
+ },
+ ];
const baseResource = useBaseResource({
resourceName: "agreement",
@@ -650,73 +646,68 @@ export default {
av_agreement_relationships,
agreement_table_settings,
vendors,
- tableFilters: getTableFilterFormElements(),
+ tableFilters,
props: props,
});
- baseResource.created();
- return {
- ...baseResource,
- };
- },
- data() {
- const defaults = this.getFilterValues(
- this.$route.query,
- this.tableFilters
+ const defaults = baseResource.getFilterValues(
+ baseResource.route.query,
+ tableFilters
);
- return {
- tableOptions: {
- options: {
- embed: "user_roles,vendor,extended_attributes,+strings",
- },
- url: () => this.tableUrl(defaults),
- table_settings: this.agreement_table_settings,
- add_filters: true,
- filters_options: {
- 2: () =>
- this.vendors.map(e => {
- e["_id"] = e["id"];
- e["_str"] = e["name"];
- return e;
- }),
- 4: () => this.map_av_dt_filter("av_agreement_statuses"),
- 5: () =>
- this.map_av_dt_filter("av_agreement_closure_reasons"),
- 6: [
- { _id: 0, _str: this.$__("No") },
- { _id: 1, _str: this.$__("Yes") },
- ],
- 7: () =>
- this.map_av_dt_filter(
- "av_agreement_renewal_priorities"
- ),
- },
- actions: {
- 0: ["show"],
- 1: ["show"],
- "-1": this.embedded
- ? [
- {
- select: {
- text: this.$__("Select"),
- icon: "fa fa-check",
- },
+
+ const tableOptions = {
+ options: {
+ embed: "user_roles,vendor,extended_attributes,+strings",
+ },
+ url: () => tableUrl(defaults),
+ table_settings: baseResource.agreement_table_settings,
+ add_filters: true,
+ filters_options: {
+ 2: [
+ ...vendors.value.map(e => {
+ e["_id"] = e["id"];
+ e["_str"] = e["name"];
+ return e;
+ }),
+ ],
+ 4: () => baseResource.map_av_dt_filter("av_agreement_statuses"),
+ 5: () =>
+ baseResource.map_av_dt_filter(
+ "av_agreement_closure_reasons"
+ ),
+ 6: [
+ { _id: 0, _str: __("No") },
+ { _id: 1, _str: __("Yes") },
+ ],
+ 7: () =>
+ baseResource.map_av_dt_filter(
+ "av_agreement_renewal_priorities"
+ ),
+ },
+ actions: {
+ 0: ["show"],
+ 1: ["show"],
+ "-1": baseResource.embedded
+ ? [
+ {
+ select: {
+ text: __("Select"),
+ icon: "fa fa-check",
},
- ]
- : ["edit", "delete"],
- },
- default_filters: {
- "user_roles.user_id": function () {
- return defaults.by_mine
- ? logged_in_user.borrowernumber
- : "";
- },
+ },
+ ]
+ : ["edit", "delete"],
+ },
+ default_filters: {
+ "user_roles.user_id": function () {
+ return defaults.by_mine
+ ? logged_in_user.borrowernumber
+ : "";
},
},
};
- },
- methods: {
- checkForm(agreement) {
+
+ const checkForm = agreement => {
let errors = [];
let agreement_licenses = agreement.agreement_licenses;
@@ -728,7 +719,9 @@ export default {
);
if (duplicate_license_ids.length) {
- errors.push(this.$__("A license is used several times"));
+ errors.push(
+ baseResource.$__("A license is used several times")
+ );
}
const related_agreement_ids = agreement.agreement_relationships.map(
@@ -741,7 +734,7 @@ export default {
if (duplicate_related_agreement_ids.length) {
errors.push(
- this.$__(
+ baseResource.$__(
"An agreement is used as relationship several times"
)
);
@@ -752,7 +745,7 @@ export default {
.length > 1
) {
errors.push(
- this.$__("Only one controlling license is allowed")
+ baseResource.$__("Only one controlling license is allowed")
);
}
@@ -765,31 +758,30 @@ export default {
).length >= 1
) {
errors.push(
- this.$__("File size exceeds maximum allowed: %s MB").format(
- (max_allowed_packet / (1024 * 1024)).toFixed(2)
- )
+ baseResource
+ .$__("File size exceeds maximum allowed: %s MB")
+ .format((max_allowed_packet / (1024 * 1024)).toFixed(2))
);
}
agreement.user_roles.forEach((user, i) => {
if (user.patron_str === "") {
errors.push(
- this.$__("Agreement user %s is missing a user").format(
- i + 1
- )
+ baseResource
+ .$__("Agreement user %s is missing a user")
+ .format(i + 1)
);
}
});
- this.setWarning(errors.join("
"));
+ baseResource.setWarning(errors.join("
"));
return !errors.length;
- },
- onSubmit(e, agreementToSave) {
+ };
+ const onSubmit = (e, agreementToSave) => {
e.preventDefault();
- //let agreement= Object.assign( {} ,this.agreement); // copy
let agreement = JSON.parse(JSON.stringify(agreementToSave)); // copy
let agreement_id = agreement.agreement_id;
- if (!this.checkForm(agreement)) {
+ if (!checkForm(agreement)) {
return false;
}
@@ -832,30 +824,34 @@ export default {
delete agreement.agreement_packages;
if (agreement_id) {
- this.apiClient.update(agreement, agreement_id).then(
+ baseResource.apiClient.update(agreement, agreement_id).then(
success => {
- this.setMessage(this.$__("Agreement updated"));
- this.$router.push({ name: "AgreementsList" });
+ baseResource.setMessage(
+ baseResource.$__("Agreement updated")
+ );
+ baseResource.router.push({ name: "AgreementsList" });
},
error => {}
);
} else {
- this.apiClient.create(agreement).then(
+ baseResource.apiClient.create(agreement).then(
success => {
- this.setMessage(this.$__("Agreement created"));
- this.$router.push({ name: "AgreementsList" });
+ baseResource.setMessage(
+ baseResource.$__("Agreement created")
+ );
+ baseResource.router.push({ name: "AgreementsList" });
},
error => {}
);
}
- },
- tableUrl(filters) {
- let url = this.getResourceTableUrl();
+ };
+ const tableUrl = filters => {
+ let url = baseResource.getResourceTableUrl();
if (filters?.by_expired)
url += "?max_expiration_date=" + filters.max_expiration_date;
return url;
- },
- async filterTable(filters, table, embedded = false) {
+ };
+ const filterTable = async (filters, table, embedded = false) => {
if (!embedded) {
if (filters.by_expired && !filters.max_expiration_date) {
filters.max_expiration_date = new Date()
@@ -865,12 +861,25 @@ export default {
if (!filters.by_expired) {
filters.max_expiration_date = "";
}
- let { href } = this.$router.resolve({ name: "AgreementsList" });
- let new_route = this.build_url(href, filters);
- this.$router.push(new_route);
+ let { href } = baseResource.router.resolve({
+ name: "AgreementsList",
+ });
+ let new_route = baseResource.build_url(href, filters);
+ baseResource.router.push(new_route);
}
- table.redraw(this.tableUrl(filters));
- },
+ table.redraw(tableUrl(filters));
+ };
+
+ baseResource.created();
+
+ return {
+ ...baseResource,
+ tableOptions,
+ checkForm,
+ onSubmit,
+ tableUrl,
+ filterTable,
+ };
},
emits: ["select-resource"],
name: "AgreementResource",
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-resource.js b/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-resource.js
index e6e21efe63..9aa2531397 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-resource.js
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-resource.js
@@ -1,10 +1,11 @@
import { computed, inject } from "vue";
-import { useRouter } from "vue-router";
+import { useRoute, useRouter } from "vue-router";
import { $__ } from "../i18n";
import { build_url } from "../composables/datatables";
export function useBaseResource(context) {
const router = useRouter();
+ const route = useRoute();
const { setConfirmationDialog, setMessage, setError, setWarning } =
inject("mainStore");
@@ -589,5 +590,8 @@ export function useBaseResource(context) {
map_av_dt_filter,
get_lib_from_av,
build_url,
+ route,
+ router,
+ $__,
};
}