From bd9aea767a45eda8098dce7f61345586508fdd96 Mon Sep 17 00:00:00 2001
From: jorgep <jorgep@verdnatura.es>
Date: Fri, 16 Aug 2024 18:10:10 +0200
Subject: [PATCH] fix: refs #7353 salesorderTable

---
 src/pages/Monitor/SalesOrdersTable.vue | 113 +++++++++++--------------
 1 file changed, 49 insertions(+), 64 deletions(-)

diff --git a/src/pages/Monitor/SalesOrdersTable.vue b/src/pages/Monitor/SalesOrdersTable.vue
index 74383e9a4..496d5134c 100644
--- a/src/pages/Monitor/SalesOrdersTable.vue
+++ b/src/pages/Monitor/SalesOrdersTable.vue
@@ -1,11 +1,8 @@
 <script setup>
 import { ref, computed } from 'vue';
 import { useI18n } from 'vue-i18n';
-
-import FetchData from 'components/FetchData.vue';
 import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
 import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
-import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
 import VnTable from 'components/VnTable/VnTable.vue';
 
 import { toDateFormat, toDateTimeFormat } from 'src/filters/date.js';
@@ -16,32 +13,15 @@ import axios from 'axios';
 const { t } = useI18n();
 const { openConfirmationModal } = useVnConfirm();
 
-const paginateRef = ref(null);
-const workersActiveOptions = ref([]);
-const clientsOptions = ref([]);
+const table = ref();
 const selectedRows = ref([]);
 
-const dateRange = (value) => {
-    const minHour = new Date(value);
-    minHour.setHours(0, 0, 0, 0);
-    const maxHour = new Date(value);
-    maxHour.setHours(23, 59, 59, 59);
-
-    return [minHour, maxHour];
-};
-
 function exprBuilder(param, value) {
     switch (param) {
-        case 'date_send':
-            return {
-                [`o.date_send`]: {
-                    between: dateRange(value),
-                },
-            };
         case 'clientFk':
             return { [`c.id`]: value };
         case 'salesPersonFk':
-            return { [`c.${param}`]: value };
+            return { [`c.salesPersonFk`]: value };
     }
 }
 
@@ -51,22 +31,37 @@ const columns = computed(() => [
         name: 'date',
         field: 'dated',
         align: 'left',
-        sortable: true,
-        cardVisible: true,
+        orderBy: 'date_send',
+        columnFilter: false,
     },
     {
         label: t('salesOrdersTable.client'),
-        name: 'client',
+        name: 'clientFk',
         align: 'left',
-        sortable: true,
-        cardVisible: true,
+        columnFilter: {
+            component: 'select',
+            attrs: {
+                url: 'Clients',
+                fields: ['id', 'name'],
+                sortBy: 'name ASC',
+            },
+        },
     },
     {
         label: t('salesOrdersTable.salesPerson'),
-        name: 'salesPerson',
+        name: 'salesPersonFk',
         align: 'left',
-        sortable: true,
-        cardVisible: true,
+        optionFilter: 'firstName',
+        columnFilter: {
+            component: 'select',
+            attrs: {
+                url: 'Workers/activeWithInheritedRole',
+                fields: ['id', 'name'],
+                sortBy: 'nickname ASC',
+                where: { role: 'salesPerson' },
+                useLike: false,
+            },
+        },
     },
 ]);
 
@@ -90,47 +85,23 @@ const removeOrders = async () => {
         const params = { deletes: selectedIds };
         await axios.post('SalesMonitors/deleteOrders', params);
         selectedRows.value = [];
-        await paginateRef.value.fetch();
+        await table.value.reload();
     } catch (err) {
         console.error('Error deleting orders', err);
     }
 };
 
-const redirectToOrderSummary = (orderId) => {
-    const url = `#/order/${orderId}/summary`;
-    window.open(url, '_blank');
-};
+const openTab = (id) =>
+    window.open(`#/order/${id}/summary`, '_blank', 'noopener, noreferrer');
 </script>
-
 <template>
-    <FetchData
-        url="Workers/activeWithInheritedRole"
-        :filter="{
-            fields: ['id', 'nickname'],
-            order: 'nickname ASC',
-            where: { role: 'salesPerson' },
-        }"
-        auto-load
-        @on-fetch="(data) => (workersActiveOptions = data)"
-    />
-    <FetchData
-        url="Clients"
-        :filter="{
-            fields: ['id', 'name'],
-            order: 'name ASC',
-        }"
-        auto-load
-        @on-fetch="(data) => (clientsOptions = data)"
-    />
-
-    <VnSubToolbar />
     <QCard style="max-height: 380px; overflow-y: scroll">
         <VnTable
-            ref="paginateRef"
+            ref="table"
             data-key="SalesMonitorOrders"
             url="SalesMonitors/ordersFilter"
             search-url="SalesMonitorOrders"
-            order="date_make DESC"
+            order="date_send DESC"
             :limit="6"
             :right-search="false"
             :expr-builder="exprBuilder"
@@ -142,15 +113,25 @@ const redirectToOrderSummary = (orderId) => {
                 'hide-bottom': true,
             }"
             default-mode="table"
-            :without-header="false"
-            @row-click="(_, row) => redirectToOrderSummary(row.id)"
+            :row-click="({ id }) => openTab(id)"
             v-model:selected="selectedRows"
+            :disable-option="{ card: true }"
         >
             <template #top-left>
                 <QBtn
-                    v-if="selectedRows.length > 0"
+                    icon="refresh"
+                    size="md"
+                    color="primary"
+                    dense
+                    flat
+                    @click="$refs.table.reload()"
+                />
+                <QBtn
+                    v-if="selectedRows.length"
                     icon="delete"
                     size="md"
+                    dense
+                    flat
                     color="primary"
                     @click="
                         openConfirmationModal(
@@ -176,7 +157,7 @@ const redirectToOrderSummary = (orderId) => {
                     <div>{{ toDateTimeFormat(row.date_make) }}</div>
                 </QTd>
             </template>
-            <template #column-client="{ row }">
+            <template #column-clientFk="{ row }">
                 <QTd>
                     <div class="q-mb-md">
                         <span class="link">{{ row.clientName }}</span>
@@ -186,7 +167,7 @@ const redirectToOrderSummary = (orderId) => {
                 </QTd>
             </template>
 
-            <template #column-salesPerson="{ row }">
+            <template #column-salesPersonFk="{ row }">
                 <QTd>
                     <div class="q-mb-md">
                         <span class="link">{{ row.salesPerson }}</span>
@@ -202,4 +183,8 @@ const redirectToOrderSummary = (orderId) => {
 .q-td {
     color: gray;
 }
+
+:deep(.q-table__container > div:first-child) {
+    background-color: var(--vn-section-color);
+}
 </style>