From c500dd6346479852457472558403e5bdfcf6a1d1 Mon Sep 17 00:00:00 2001
From: wbuezas <wbuezas@verdnatura.es>
Date: Mon, 24 Jun 2024 16:58:26 -0300
Subject: [PATCH] Add allow import feature in VnDmsList

---
 src/components/common/VnDmsImportForm.vue | 81 +++++++++++++++++++++++
 src/components/common/VnDmsList.vue       | 12 ++++
 src/pages/Ticket/Card/TicketDms.vue       |  1 +
 3 files changed, 94 insertions(+)
 create mode 100644 src/components/common/VnDmsImportForm.vue

diff --git a/src/components/common/VnDmsImportForm.vue b/src/components/common/VnDmsImportForm.vue
new file mode 100644
index 000000000..b31197bbc
--- /dev/null
+++ b/src/components/common/VnDmsImportForm.vue
@@ -0,0 +1,81 @@
+<script setup>
+import { ref } from 'vue';
+import { useI18n } from 'vue-i18n';
+import { useRoute } from 'vue-router';
+
+import VnSelect from 'src/components/common/VnSelect.vue';
+import VnRow from 'components/ui/VnRow.vue';
+import FormModelPopup from 'components/FormModelPopup.vue';
+import FetchData from 'components/FetchData.vue';
+
+import useNotify from 'src/composables/useNotify.js';
+import axios from 'axios';
+
+const emit = defineEmits(['onDataSaved']);
+
+const { t } = useI18n();
+const { notify } = useNotify();
+const route = useRoute();
+
+const dmsOptions = ref([]);
+const dmsId = ref(null);
+
+const onDataSaved = (formData, requestResponse) => {
+    emit('onDataSaved', formData, requestResponse);
+};
+
+const importDms = async () => {
+    try {
+        if (!dmsId.value) throw new Error(t(`The document indentifier can't be empty`));
+
+        const data = {
+            ticketFk: route.params.id,
+            dmsFk: dmsId.value,
+        };
+
+        await axios.post('ticketDms', data);
+        notify(t('globals.dataSaved'), 'positive');
+        dmsId.value = null;
+        emit('onDataSaved');
+    } catch (e) {
+        throw new Error(e.message);
+    }
+};
+</script>
+
+<template>
+    <FetchData
+        url="Dms"
+        :filter="{ fields: ['id'], order: 'id ASC' }"
+        auto-load
+        @on-fetch="(data) => (dmsOptions = data)"
+    />
+    <FormModelPopup
+        url-create="genera"
+        model="DmsImport"
+        :title="t('Select document id')"
+        :form-initial-data="{}"
+        :save-fn="importDms"
+        @on-data-saved="onDataSaved"
+    >
+        <template #form-inputs>
+            <VnRow class="row q-gutter-md q-mb-md">
+                <VnSelect
+                    :label="t('Document')"
+                    :options="dmsOptions"
+                    hide-selected
+                    option-label="id"
+                    option-value="id"
+                    v-model="dmsId"
+                />
+            </VnRow>
+        </template>
+    </FormModelPopup>
+</template>
+
+<i18n>
+es:
+    Select document id: Introduzca id de gestion documental
+    Document: Documento
+    The document indentifier can't be empty: El número de documento no puede estar vacío
+</i18n>
diff --git a/src/components/common/VnDmsList.vue b/src/components/common/VnDmsList.vue
index 769ba9959..0576ba266 100644
--- a/src/components/common/VnDmsList.vue
+++ b/src/components/common/VnDmsList.vue
@@ -3,6 +3,7 @@ import { ref, computed } from 'vue';
 import { useI18n } from 'vue-i18n';
 import { useRoute } from 'vue-router';
 import { useQuasar, QCheckbox, QBtn, QInput } from 'quasar';
+import VnDmsImportForm from 'src/components/common/VnDmsImportForm.vue';
 import axios from 'axios';
 
 import VnPaginate from 'components/ui/VnPaginate.vue';
@@ -18,6 +19,7 @@ const { t } = useI18n();
 const rows = ref();
 const dmsRef = ref();
 const formDialog = ref({});
+const showImportDialog = ref(false);
 
 const $props = defineProps({
     model: {
@@ -45,6 +47,10 @@ const $props = defineProps({
         type: String,
         required: true,
     },
+    allowImport: {
+        type: Boolean,
+        default: false,
+    },
 });
 
 const dmsFilter = {
@@ -373,9 +379,15 @@ function shouldRenderButton(button, isExternal = false) {
             :description="$props.description"
         />
     </QDialog>
+    <QDialog v-model="showImportDialog">
+        <VnDmsImportForm @on-data-saved="dmsRef.fetch()" />
+    </QDialog>
     <QPageSticky position="bottom-right" :offset="[25, 25]">
         <QBtn fab color="primary" icon="add" @click="showFormDialog()" />
     </QPageSticky>
+    <QPageSticky v-if="allowImport" position="bottom-right" :offset="[25, 90]">
+        <QBtn fab color="primary" icon="file_copy" @click="showImportDialog = true" />
+    </QPageSticky>
 </template>
 <style scoped>
 .q-gutter-y-ms {
diff --git a/src/pages/Ticket/Card/TicketDms.vue b/src/pages/Ticket/Card/TicketDms.vue
index ae44fb795..423e15467 100644
--- a/src/pages/Ticket/Card/TicketDms.vue
+++ b/src/pages/Ticket/Card/TicketDms.vue
@@ -9,5 +9,6 @@ import VnDmsList from 'src/components/common/VnDmsList.vue';
         download-model="dms"
         default-dms-code="ticket"
         filter="ticket"
+        allow-import
     />
 </template>