Bug 32030: ERM - Agreement documents (FIXED)
[koha-ffzg.git] / koha-tmpl / intranet-tmpl / prog / js / vue / components / ERM / AgreementsFormAdd.vue
index 3997d22..9229d8c 100644 (file)
@@ -1,28 +1,30 @@
 <template>
-    <div v-if="!this.initialized">Loading...</div>
+    <div v-if="!this.initialized">{{ $t("Loading") }}</div>
     <div v-else id="agreements_add">
         <h2 v-if="agreement.agreement_id">
-            Edit agreement #{{ agreement.agreement_id }}
+            {{ $t("Edit agreement .id", { id: agreement.agreement_id }) }}
         </h2>
-        <h2 v-else>New agreement</h2>
+        <h2 v-else>{{ $t("New agreement") }}</h2>
         <div>
             <form @submit="onSubmit($event)">
                 <fieldset class="rows">
                     <ol>
                         <li>
                             <label class="required" for="agreement_name"
-                                >Agreement name:</label
+                                >{{ $t("Agreement name") }}:</label
                             >
                             <input
                                 id="agreement_name"
                                 v-model="agreement.name"
-                                placeholder="Agreement name"
+                                :placeholder="$t('Agreement name')"
                                 required
                             />
-                            <span class="required">Required</span>
+                            <span class="required">{{ $t("Required") }}</span>
                         </li>
                         <li>
-                            <label for="agreement_vendor_id">Vendor:</label>
+                            <label for="agreement_vendor_id"
+                                >{{ $t("Vendor") }}:</label
+                            >
                             <select
                                 id="agreement_vendor_id"
                                 v-model="agreement.vendor_id"
                         </li>
                         <li>
                             <label for="agreement_description"
-                                >Description:
+                                >{{ $t("Description") }}:
                             </label>
                             <textarea
                                 id="agreement_description"
                                 v-model="agreement.description"
-                                placeholder="Description"
+                                :placeholder="$t('Description')"
                                 rows="10"
                                 cols="50"
                                 required
                             />
-                            <span class="required">Required</span>
+                            <span class="required">{{ $t("Required") }}</span>
                         </li>
                         <li>
-                            <label for="agreement_status">Status: </label>
+                            <label for="agreement_status"
+                                >{{ $t("Status") }}:</label
+                            >
                             <select
                                 id="agreement_status"
                                 v-model="agreement.status"
                                     {{ status.lib }}
                                 </option>
                             </select>
-                            <span class="required">Required</span>
+                            <span class="required">{{ $t("Required") }}</span>
                         </li>
                         <li>
                             <label for="agreement_closure_reason"
-                                >Closure reason:</label
+                                >{{ $t("Closure reason") }}:</label
                             >
                             <select
                                 id="agreement_closure_reason"
                         </li>
                         <li>
                             <label for="agreement_is_perpetual" class="radio"
-                                >Is perpetual:</label
+                                >{{ $t("Is perpetual") }}:</label
                             >
                             <label for="agreement_is_perpetual_yes">
                                 <input
                         </li>
                         <li>
                             <label for="agreement_renewal_priority"
-                                >Renewal priority:</label
+                                >{{ $t("Renewal priority") }}:</label
                             >
                             <select v-model="agreement.renewal_priority">
                                 <option value=""></option>
                         </li>
                         <li>
                             <label for="agreement_license_info"
-                                >License info:
+                                >{{ $t("License info") }}:
                             </label>
                             <textarea
                                 id="agreement_license_info"
                         to="/cgi-bin/koha/erm/agreements"
                         role="button"
                         class="cancel"
-                        >Cancel</router-link
+                        >{{ $t("Cancel") }}</router-link
                     >
                 </fieldset>
             </form>
@@ -211,7 +215,7 @@ import AgreementRelationships from './AgreementRelationships.vue'
 import AgreementDocuments from './AgreementDocuments.vue'
 import { useVendorStore } from "../../stores/vendors"
 import { useAVStore } from "../../stores/authorised_values"
-import { setMessage, setError } from "../../messages"
+import { setMessage, setError, setWarning } from "../../messages"
 import { fetchAgreement } from '../../fetch'
 import { storeToRefs } from "pinia"
 
@@ -277,11 +281,45 @@ export default {
             this.agreement = agreement
             this.initialized = true
         },
+        checkForm(agreement) {
+            let errors = []
+
+            let agreement_licenses = agreement.agreement_licenses
+            // Do not use al.license.name here! Its name is not the one linked with al.license_id
+            // At this point al.license is meaningless, form/template only modified al.license_id
+            const license_ids = agreement_licenses.map(al => al.license_id)
+            const duplicate_license_ids = license_ids.filter((id, i) => license_ids.indexOf(id) !== i)
+
+            if (duplicate_license_ids.length) {
+                errors.push(this.$t("A license is used several times"))
+            }
+
+            const related_agreement_ids = agreement.agreement_relationships.map(rs => rs.related_agreement_id)
+            const duplicate_related_agreement_ids = related_agreement_ids.filter((id, i) => related_agreement_ids.indexOf(id) !== i)
+
+            if (duplicate_related_agreement_ids.length) {
+                errors.push(this.$t("An agreement is used as relationship several times"))
+            }
+
+            if (agreement_licenses.filter(al => al.status == 'controlling').length > 1) {
+                errors.push(this.$t("Only one controlling license is allowed"))
+            }
+
+            errors.forEach(function (e) {
+                setWarning(e)
+            })
+            return !errors.length
+        },
         onSubmit(e) {
             e.preventDefault()
 
             //let agreement= Object.assign( {} ,this.agreement); // copy
             let agreement = JSON.parse(JSON.stringify(this.agreement)) // copy
+
+            if (!this.checkForm(agreement)) {
+                return false
+            }
+
             let apiUrl = '/api/v1/erm/agreements'
 
             let method = 'POST'
@@ -292,6 +330,10 @@ export default {
             delete agreement.agreement_id
             agreement.is_perpetual = agreement.is_perpetual ? true : false
 
+            if (agreement.vendor_id == "") {
+                agreement.vendor_id = null
+            }
+
             agreement.periods.forEach(p => {
                 p.started_on = $date_to_rfc3339(p.started_on)
                 p.ended_on = p.ended_on ? $date_to_rfc3339(p.ended_on) : null
@@ -306,7 +348,9 @@ export default {
 
             agreement.agreement_relationships = agreement.agreement_relationships.map(({ related_agreement, ...keepAttrs }) => keepAttrs)
 
-            agreement.documents = agreement.documents.map(({ document_id, ...keepAttrs }) => keepAttrs)
+            agreement.documents = agreement.documents.map(({ file_type, uploaded_on, ...keepAttrs }) => keepAttrs)
+
+            delete agreement.agreement_packages
 
             const options = {
                 method: method,
@@ -320,10 +364,10 @@ export default {
                 .then(response => {
                     if (response.status == 200) {
                         this.$router.push("/cgi-bin/koha/erm/agreements")
-                        setMessage('Agreement updated')
+                        setMessage(this.$t("Agreement updated"))
                     } else if (response.status == 201) {
                         this.$router.push("/cgi-bin/koha/erm/agreements")
-                        setMessage('Agreement created')
+                        setMessage(this.$t("Agreement created"))
                     } else {
                         setError(response.message || response.statusText)
                     }
@@ -339,9 +383,6 @@ export default {
             }
         }
     },
-    props: {
-        agreement_id: Number,
-    },
     components: {
         AgreementPeriods,
         AgreementUserRoles,