From 56f687ce3603e2383b4066c48b9445132e6fc4e9 Mon Sep 17 00:00:00 2001
From: Javier Segarra <jsegarra@verdnatura.es>
Date: Fri, 23 Aug 2024 21:06:15 +0200
Subject: [PATCH] perf: sendEmail customerConsumption

---
 src/i18n/locale/en.yml                        |  1 +
 src/i18n/locale/es.yml                        |  1 +
 .../Customer/Card/CustomerConsumption.vue     | 38 ++++----
 .../Card/CustomerConsumptionFilter.vue        |  2 +-
 src/pages/Ticket/Card/TicketTransfer.vue      | 29 ++-----
 src/pages/Ticket/Card/TicketTransferForm.vue  | 86 +++++++++++++++++++
 6 files changed, 111 insertions(+), 46 deletions(-)
 create mode 100644 src/pages/Ticket/Card/TicketTransferForm.vue

diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml
index aa7e83fb3..0c0ede5f7 100644
--- a/src/i18n/locale/en.yml
+++ b/src/i18n/locale/en.yml
@@ -2,6 +2,7 @@ globals:
     lang:
         es: Spanish
         en: English
+    quantity: Quantity
     language: Language
     entity: Entity
     user: User
diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml
index 100bf54ad..e4392627c 100644
--- a/src/i18n/locale/es.yml
+++ b/src/i18n/locale/es.yml
@@ -3,6 +3,7 @@ globals:
         es: Español
         en: Inglés
     language: Idioma
+    quantity: Cantidad
     entity: Entidad
     user: Usuario
     details: Detalles
diff --git a/src/pages/Customer/Card/CustomerConsumption.vue b/src/pages/Customer/Card/CustomerConsumption.vue
index a8c34991a..eddabc154 100644
--- a/src/pages/Customer/Card/CustomerConsumption.vue
+++ b/src/pages/Customer/Card/CustomerConsumption.vue
@@ -1,6 +1,5 @@
 <script setup>
 import { computed, ref, watch } from 'vue';
-import { useQuasar } from 'quasar';
 import { useI18n } from 'vue-i18n';
 import CustomerConsumptionFilter from './CustomerConsumptionFilter.vue';
 import { useStateStore } from 'src/stores/useStateStore';
@@ -13,12 +12,12 @@ import FetchedTags from 'components/ui/FetchedTags.vue';
 import { useArrayData } from 'src/composables/useArrayData';
 import { useRoute } from 'vue-router';
 import { usePrintService } from 'src/composables/usePrintService';
-import SendEmailDialog from 'src/components/common/SendEmailDialog.vue';
+import { useVnConfirm } from 'src/composables/useVnConfirm';
 
+const { openConfirmationModal } = useVnConfirm();
 const { openReport, sendEmail } = usePrintService();
 const arrayData = useArrayData('Client');
 const { t } = useI18n();
-const quasar = useQuasar();
 
 const route = useRoute();
 const tableRef = ref();
@@ -61,7 +60,7 @@ const columns = computed(() => [
     {
         align: 'left',
         name: 'shipped',
-        label: t('Creation date'),
+        label: t('shipped'),
         format: ({ shipped }) => toDate(shipped),
         cardVisible: true,
         columnFilter: {
@@ -72,7 +71,7 @@ const columns = computed(() => [
     {
         align: 'left',
         name: 'description',
-        label: t('Description'),
+        label: t('globals.description'),
         class: 'extend',
         columnFilter: {
             inWhere: true,
@@ -81,7 +80,7 @@ const columns = computed(() => [
     {
         align: 'left',
         name: 'quantity',
-        label: t('Quantity'),
+        label: t('globals.quantity'),
         cardVisible: true,
         columnFilter: {
             inWhere: true,
@@ -102,20 +101,16 @@ const openReportPdf = () => {
 };
 
 const openSendEmailDialog = async () => {
-    quasar.dialog({
-        component: SendEmailDialog,
-        componentProps: {
-            data: {
-                address: arrayData.store.data.email,
-            },
-            promise: sendCampaignMetricsEmail,
-        },
-    });
+    openConfirmationModal(
+        t('The consumption report will be sent'),
+        t('Please, confirm'),
+        () => sendCampaignMetricsEmail({ address: arrayData.store.data.email })
+    );
 };
 const sendCampaignMetricsEmail = ({ address }) => {
-    sendEmail(`Suppliers/${route.params.id}/campaign-metrics-email`, {
+    sendEmail(`Clients/${route.params.id}/campaign-metrics-email`, {
         recipient: address,
-        ...getParams().value,
+        ...getParams(),
     });
 };
 </script>
@@ -140,7 +135,7 @@ const sendCampaignMetricsEmail = ({ address }) => {
                 @click="openSendEmailDialog()"
                 :disabled="!showActionBtns"
             >
-                <QTooltip>{{ t('globals.downloadPdf') }}</QTooltip>
+                <QTooltip>{{ t('Send to email') }}</QTooltip>
             </QBtn>
         </template>
     </VnSubToolbar>
@@ -160,7 +155,6 @@ const sendCampaignMetricsEmail = ({ address }) => {
                 {{ row.itemFk }}
                 <ItemDescriptorProxy :id="row.itemFk" />
             </span>
-            <!-- <FetchedTags :item="row" :max-length="6" /> -->
         </template>
         <template #column-description="{ row }">
             <FetchedTags :item="row" :max-length="6" />
@@ -175,7 +169,9 @@ const sendCampaignMetricsEmail = ({ address }) => {
 
 <i18n>
 es:
-    Group by item: Agrupar por artículo
-
+    Send to email: Enviar por email
+    Search by item id or name: Buscar por id de artículo o nombre
+    The consumption report will be sent: Se enviará el informe de consumo
+    Please, confirm: Por favor, confirma
     Enter a new search: Introduce una nueva búsqueda
 </i18n>
diff --git a/src/pages/Customer/Card/CustomerConsumptionFilter.vue b/src/pages/Customer/Card/CustomerConsumptionFilter.vue
index 0f5148007..52e6cdc79 100644
--- a/src/pages/Customer/Card/CustomerConsumptionFilter.vue
+++ b/src/pages/Customer/Card/CustomerConsumptionFilter.vue
@@ -24,7 +24,7 @@ defineProps({ dataKey: { type: String, required: true } });
                 <QItemSection
                     ><QCheckbox
                         v-model="params.grouped"
-                        :label="t('Group by item')"
+                        :label="t('params.grouped')"
                         @update:model-value="searchFn()"
                         dense
                 /></QItemSection>
diff --git a/src/pages/Ticket/Card/TicketTransfer.vue b/src/pages/Ticket/Card/TicketTransfer.vue
index 9a22c764c..1944b80f4 100644
--- a/src/pages/Ticket/Card/TicketTransfer.vue
+++ b/src/pages/Ticket/Card/TicketTransfer.vue
@@ -4,6 +4,7 @@ import { useI18n } from 'vue-i18n';
 import { useRouter } from 'vue-router';
 
 import VnInput from 'src/components/common/VnInput.vue';
+import TicketTransferForm from './TicketTransferForm.vue';
 
 import { toDateFormat } from 'src/filters/date.js';
 import axios from 'axios';
@@ -135,9 +136,7 @@ onMounted(() => (_transfer.value = $props.transfer));
                 :columns="destinationTicketColumns"
                 :title="t('Destination ticket')"
                 row-key="id"
-                :pagination="{ rowsPerPage: 0 }"
                 class="full-width q-mt-md"
-                :no-data-label="t('globals.noResults')"
             >
                 <template #body-cell-address="{ row }">
                     <QTd @click.stop>
@@ -158,29 +157,11 @@ onMounted(() => (_transfer.value = $props.transfer));
                     </QTd>
                 </template>
 
+                <template #no-data>
+                    <TicketTransferForm v-bind="$props" />
+                </template>
                 <template #bottom>
-                    <QForm class="q-mt-lg full-width">
-                        <VnInput
-                            v-model.number="_transfer.ticketId"
-                            :label="t('Transfer to ticket')"
-                            :clearable="false"
-                        >
-                            <template #append>
-                                <QBtn
-                                    icon="keyboard_arrow_right"
-                                    color="primary"
-                                    @click="transferSales(_transfer.ticketId)"
-                                    style="width: 30px"
-                                />
-                            </template>
-                        </VnInput>
-                        <QBtn
-                            :label="t('New ticket')"
-                            color="primary"
-                            class="full-width q-my-lg"
-                            @click="transferSales()"
-                        />
-                    </QForm>
+                    <TicketTransferForm v-bind="$props" />
                 </template>
             </QTable>
         </QCard>
diff --git a/src/pages/Ticket/Card/TicketTransferForm.vue b/src/pages/Ticket/Card/TicketTransferForm.vue
new file mode 100644
index 000000000..9507429e6
--- /dev/null
+++ b/src/pages/Ticket/Card/TicketTransferForm.vue
@@ -0,0 +1,86 @@
+<script setup>
+import { ref, onMounted } from 'vue';
+import { useI18n } from 'vue-i18n';
+import { useRouter } from 'vue-router';
+
+import VnInput from 'src/components/common/VnInput.vue';
+
+import axios from 'axios';
+
+const $props = defineProps({
+    mana: {
+        type: Number,
+        default: null,
+    },
+    newPrice: {
+        type: Number,
+        default: 0,
+    },
+    transfer: {
+        type: Object,
+        default: () => {},
+    },
+    ticket: {
+        type: Object,
+        default: () => {},
+    },
+});
+
+const emit = defineEmits(['refreshData']);
+
+const router = useRouter();
+const { t } = useI18n();
+
+const _transfer = ref(null);
+
+const transferSales = async (ticketId) => {
+    const params = {
+        ticketId: ticketId,
+        sales: $props.transfer.sales,
+    };
+
+    const { data } = await axios.post(
+        `tickets/${$props.ticket.id}/transferSales`,
+        params
+    );
+
+    if (data && data.id === $props.ticket.id) emit('refreshData');
+    else router.push({ name: 'TicketSale', params: { id: data.id } });
+};
+
+onMounted(() => (_transfer.value = $props.transfer));
+</script>
+
+<template>
+    {{ _transfer }}
+    <QForm class="q-mt-lg full-width">
+        <VnInput
+            v-model.number="_transfer.ticketId"
+            :label="t('Transfer to ticket')"
+            :clearable="false"
+        >
+            <template #append>
+                <QBtn
+                    icon="keyboard_arrow_right"
+                    color="primary"
+                    @click="transferSales(_transfer.ticketId)"
+                    style="width: 30px"
+                />
+            </template>
+        </VnInput>
+        <QBtn
+            :label="t('New ticket')"
+            color="primary"
+            class="full-width q-my-lg"
+            @click="transferSales()"
+        />
+    </QForm>
+</template>
+
+<i18n>
+es:
+    Sales to transfer: Líneas a transferir
+    Destination ticket: Ticket destinatario
+    Transfer to ticket: Transferir a ticket
+    New ticket: Nuevo ticket
+</i18n>