From a6f970cec8e0f7fffe15ee31b2ce09a4a4bc9ff4 Mon Sep 17 00:00:00 2001
From: Jon <jon@verdnatura.es>
Date: Tue, 10 Dec 2024 14:06:34 +0100
Subject: [PATCH 1/5] fix: fixed filter when searching by id

---
 src/components/ui/VnSearchbar.vue    | 11 ++++++-----
 src/pages/Ticket/Card/TicketCard.vue |  7 +++++++
 src/pages/Ticket/TicketList.vue      |  9 +++++++++
 3 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/components/ui/VnSearchbar.vue b/src/components/ui/VnSearchbar.vue
index da2d370fe09..cabc6ff18fe 100644
--- a/src/components/ui/VnSearchbar.vue
+++ b/src/components/ui/VnSearchbar.vue
@@ -51,10 +51,6 @@ const props = defineProps({
         type: Object,
         default: null,
     },
-    staticParams: {
-        type: Array,
-        default: () => [],
-    },
     exprBuilder: {
         type: Function,
         default: null,
@@ -67,6 +63,10 @@ const props = defineProps({
         type: Function,
         default: undefined,
     },
+    beforeSearch: {
+        type: Function,
+        default: undefined,
+    },
 });
 
 const searchText = ref();
@@ -103,7 +103,7 @@ async function search() {
     const staticParams = Object.entries(store.userParams);
     arrayData.reset(['skip', 'page']);
 
-    const filter = {
+    let filter = {
         params: {
             ...Object.fromEntries(staticParams),
             search: searchText.value,
@@ -117,6 +117,7 @@ async function search() {
         };
         delete filter.params.search;
     }
+    if (props.beforeSearch) filter = props.beforeSearch(filter);
     await arrayData.applyFilter(filter);
 }
 </script>
diff --git a/src/pages/Ticket/Card/TicketCard.vue b/src/pages/Ticket/Card/TicketCard.vue
index 73b6f5543c2..8832cb8b0c0 100644
--- a/src/pages/Ticket/Card/TicketCard.vue
+++ b/src/pages/Ticket/Card/TicketCard.vue
@@ -18,6 +18,13 @@ const { t } = useI18n();
             url: 'Tickets/filter',
             label: t('card.search'),
             info: t('card.searchInfo'),
+            beforeSearch: (filter) => {
+                if (filter.params.search) {
+                    delete filter.params.from;
+                    delete filter.params.to;
+                }
+                return filter;
+            },
         }"
     />
 </template>
diff --git a/src/pages/Ticket/TicketList.vue b/src/pages/Ticket/TicketList.vue
index 6f6c556ca13..c06dcfa3967 100644
--- a/src/pages/Ticket/TicketList.vue
+++ b/src/pages/Ticket/TicketList.vue
@@ -455,6 +455,15 @@ function setReference(data) {
         data-key="TicketList"
         :label="t('Search ticket')"
         :info="t('You can search by ticket id or alias')"
+        :before-search="
+            (filter) => {
+                if (filter.params.search) {
+                    delete filter.params.from;
+                    delete filter.params.to;
+                }
+                return filter;
+            }
+        "
     />
     <RightMenu>
         <template #right-panel>

From 309033c6de572ca410e82739802ae63210abe46d Mon Sep 17 00:00:00 2001
From: Jon <jon@verdnatura.es>
Date: Wed, 11 Dec 2024 06:05:38 +0100
Subject: [PATCH 2/5] fix: fixed panel function

---
 .../Item/ItemType/Card/ItemTypeSummary.vue    | 23 +++++++------
 src/pages/Item/ItemType/locale/en.yml         | 33 ++++++++++---------
 src/pages/Item/ItemType/locale/es.yml         | 33 ++++++++++---------
 src/pages/Zone/Card/ZoneEvents.vue            |  1 +
 src/pages/Zone/Card/ZoneEventsPanel.vue       | 27 +++++++++++----
 5 files changed, 69 insertions(+), 48 deletions(-)

diff --git a/src/pages/Item/ItemType/Card/ItemTypeSummary.vue b/src/pages/Item/ItemType/Card/ItemTypeSummary.vue
index c51d59e137b..9ba774ca462 100644
--- a/src/pages/Item/ItemType/Card/ItemTypeSummary.vue
+++ b/src/pages/Item/ItemType/Card/ItemTypeSummary.vue
@@ -78,29 +78,32 @@ async function setItemTypeData(data) {
                     {{ t('globals.summary.basicData') }}
                     <QIcon name="open_in_new" />
                 </router-link>
-                <VnLv :label="t('summary.id')" :value="itemType.id" />
-                <VnLv :label="t('shared.code')" :value="itemType.code" />
-                <VnLv :label="t('shared.name')" :value="itemType.name" />
-                <VnLv :label="t('shared.worker')">
+                <VnLv :label="t('itemType.summary.id')" :value="itemType.id" />
+                <VnLv :label="t('itemType.shared.code')" :value="itemType.code" />
+                <VnLv :label="t('itemType.shared.name')" :value="itemType.name" />
+                <VnLv :label="t('itemType.shared.worker')">
                     <template #value>
                         <span class="link">{{ itemType.worker?.firstName }}</span>
                         <WorkerDescriptorProxy :id="itemType.worker?.id" />
                     </template>
                 </VnLv>
-                <VnLv :label="t('shared.category')" :value="itemType.category?.name" />
                 <VnLv
-                    :label="t('shared.temperature')"
+                    :label="t('itemType.shared.category')"
+                    :value="itemType.category?.name"
+                />
+                <VnLv
+                    :label="t('itemType.shared.temperature')"
                     :value="itemType.temperature?.name"
                 />
-                <VnLv :label="t('summary.life')" :value="itemType.life" />
-                <VnLv :label="t('summary.promo')" :value="itemType.promo" />
+                <VnLv :label="t('itemType.summary.life')" :value="itemType.life" />
+                <VnLv :label="t('itemType.summary.promo')" :value="itemType.promo" />
                 <VnLv
-                    :label="t('summary.itemPackingType')"
+                    :label="t('itemType.summary.itemPackingType')"
                     :value="itemType.itemPackingType?.description"
                 />
                 <VnLv
                     class="large-label"
-                    :label="t('summary.isUnconventionalSize')"
+                    :label="t('itemType.summary.isUnconventionalSize')"
                     :value="itemType.isUnconventionalSize"
                 />
             </QCard>
diff --git a/src/pages/Item/ItemType/locale/en.yml b/src/pages/Item/ItemType/locale/en.yml
index 575d5e40277..99c6791f2ed 100644
--- a/src/pages/Item/ItemType/locale/en.yml
+++ b/src/pages/Item/ItemType/locale/en.yml
@@ -1,16 +1,17 @@
-shared:
-    code: Code
-    name: Name
-    worker: Worker
-    category: Category
-    temperature: Temperature
-    life: Life
-    itemPackingType: Item packing type
-    maxRefs: Maximum references
-    fragile: Fragile
-summary:
-    id: id
-    life: Life
-    promo: Promo
-    itemPackingType: Item packing type
-    isUnconventionalSize: Is unconventional size
+itemType:
+    shared:
+        code: Code
+        name: Name
+        worker: Worker
+        category: Category
+        temperature: Temperature
+        life: Life
+        itemPackingType: Item packing type
+        maxRefs: Maximum references
+        fragile: Fragile
+    summary:
+        id: id
+        life: Life
+        promo: Promo
+        itemPackingType: Item packing type
+        isUnconventionalSize: Is unconventional size
diff --git a/src/pages/Item/ItemType/locale/es.yml b/src/pages/Item/ItemType/locale/es.yml
index 93f8b0d0e0a..c91fb405833 100644
--- a/src/pages/Item/ItemType/locale/es.yml
+++ b/src/pages/Item/ItemType/locale/es.yml
@@ -1,16 +1,17 @@
-shared:
-    code: Código
-    name: Nombre
-    worker: Trabajador
-    category: Reino
-    temperature: Temperatura
-    life: Vida
-    itemPackingType: Tipo de embalaje
-    maxRefs: Referencias máximas
-    fragile: Frágil
-summary:
-    id: id
-    life: Vida
-    promo: Promoción
-    itemPackingType: Tipo de embalaje
-    isUnconventionalSize: Es de tamaño poco convencional
+itemType:
+    shared:
+        code: Código
+        name: Nombre
+        worker: Trabajador
+        category: Reino
+        temperature: Temperatura
+        life: Vida
+        itemPackingType: Tipo de embalaje
+        maxRefs: Referencias máximas
+        fragile: Frágil
+    summary:
+        id: id
+        life: Vida
+        promo: Promoción
+        itemPackingType: Tipo de embalaje
+        isUnconventionalSize: Es de tamaño poco convencional
diff --git a/src/pages/Zone/Card/ZoneEvents.vue b/src/pages/Zone/Card/ZoneEvents.vue
index 6d5b37096bc..923a7239130 100644
--- a/src/pages/Zone/Card/ZoneEvents.vue
+++ b/src/pages/Zone/Card/ZoneEvents.vue
@@ -52,6 +52,7 @@ onUnmounted(() => (stateStore.rightDrawer = false));
                 :last-day="lastDay"
                 :events="events"
                 v-model:formModeName="formModeName"
+                @open-zone-form="openForm"
             />
         </QScrollArea>
     </QDrawer>
diff --git a/src/pages/Zone/Card/ZoneEventsPanel.vue b/src/pages/Zone/Card/ZoneEventsPanel.vue
index da1c0cf71d1..bb8c159348b 100644
--- a/src/pages/Zone/Card/ZoneEventsPanel.vue
+++ b/src/pages/Zone/Card/ZoneEventsPanel.vue
@@ -11,10 +11,6 @@ import { dashIfEmpty } from 'src/filters';
 import { useWeekdayStore } from 'src/stores/useWeekdayStore';
 import { useVnConfirm } from 'composables/useVnConfirm';
 
-const formModeName = defineModel('formModeName', {
-    type: String,
-    required: true,
-});
 const props = defineProps({
     firstDay: {
         type: Date,
@@ -31,8 +27,18 @@ const props = defineProps({
         required: true,
         default: () => [],
     },
+    formModeName: {
+        type: String,
+        required: true,
+        default: 'include',
+    },
 });
 
+const formName = computed({
+    get: () => props.formModeName,
+    set: (value) => emit('update:formModeName', value),
+});
+const emit = defineEmits(['openZoneForm', 'update:formModeName']);
 const { t } = useI18n();
 const route = useRoute();
 const weekdayStore = useWeekdayStore();
@@ -80,6 +86,15 @@ const deleteEvent = async (id) => {
     await fetchData();
 };
 
+const openInclusionForm = (event) => {
+    formName.value = 'include';
+    emit('openZoneForm', {
+        date: event.dated,
+        event,
+        isNewMode: false,
+    });
+};
+
 onMounted(async () => {
     weekdayStore.initStore();
 });
@@ -92,13 +107,13 @@ onMounted(async () => {
                 t('eventsPanel.editMode')
             }}</span>
             <QRadio
-                v-model="formModeName"
+                v-model="formName"
                 dense
                 val="include"
                 :label="t('eventsPanel.include')"
             />
             <QRadio
-                v-model="formModeName"
+                v-model="formName"
                 dense
                 val="exclude"
                 :label="t('eventsPanel.exclude')"

From c61ad16681480d6958093a5cf534ab3ca482375f Mon Sep 17 00:00:00 2001
From: Jon <jon@verdnatura.es>
Date: Wed, 11 Dec 2024 13:38:04 +0100
Subject: [PATCH 3/5] feat: added logic to avoid other filter params when
 searching on vnsearchbar

---
 src/components/ui/VnSearchbar.vue    | 26 +++++++++++++-------------
 src/pages/Ticket/Card/TicketCard.vue |  7 -------
 src/pages/Ticket/TicketList.vue      | 13 ++-----------
 3 files changed, 15 insertions(+), 31 deletions(-)

diff --git a/src/components/ui/VnSearchbar.vue b/src/components/ui/VnSearchbar.vue
index 2b6b59a6ef5..c3a3c0a033c 100644
--- a/src/components/ui/VnSearchbar.vue
+++ b/src/components/ui/VnSearchbar.vue
@@ -63,10 +63,6 @@ const props = defineProps({
         type: Function,
         default: undefined,
     },
-    beforeSearch: {
-        type: Function,
-        default: undefined,
-    },
 });
 
 const searchText = ref();
@@ -102,22 +98,26 @@ onMounted(() => {
 async function search() {
     const staticParams = Object.entries(store.userParams);
     arrayData.reset(['skip', 'page']);
-
     let filter = {
         params: {
-            ...Object.fromEntries(staticParams),
             search: searchText.value,
         },
-        ...{ filter: props.filter },
     };
-
-    if (props.whereFilter) {
-        filter.filter = {
-            where: props.whereFilter(searchText.value),
+    if (!(searchText.value && searchText.value !== '')) {
+        filter = {
+            params: {
+                ...Object.fromEntries(staticParams),
+            },
+            ...{ filter: props.filter },
         };
-        delete filter.params.search;
+
+        if (props.whereFilter) {
+            filter.filter = {
+                where: props.whereFilter(searchText.value),
+            };
+            delete filter.params.search;
+        }
     }
-    if (props.beforeSearch) filter = props.beforeSearch(filter);
     await arrayData.applyFilter(filter);
 }
 </script>
diff --git a/src/pages/Ticket/Card/TicketCard.vue b/src/pages/Ticket/Card/TicketCard.vue
index 8832cb8b0c0..73b6f5543c2 100644
--- a/src/pages/Ticket/Card/TicketCard.vue
+++ b/src/pages/Ticket/Card/TicketCard.vue
@@ -18,13 +18,6 @@ const { t } = useI18n();
             url: 'Tickets/filter',
             label: t('card.search'),
             info: t('card.searchInfo'),
-            beforeSearch: (filter) => {
-                if (filter.params.search) {
-                    delete filter.params.from;
-                    delete filter.params.to;
-                }
-                return filter;
-            },
         }"
     />
 </template>
diff --git a/src/pages/Ticket/TicketList.vue b/src/pages/Ticket/TicketList.vue
index 9fbdea3aa9b..eb03a492721 100644
--- a/src/pages/Ticket/TicketList.vue
+++ b/src/pages/Ticket/TicketList.vue
@@ -1,6 +1,6 @@
 <script setup>
 import axios from 'axios';
-import { computed, ref, onMounted } from 'vue';
+import { computed, ref, onBeforeMount } from 'vue';
 import { useRoute, useRouter } from 'vue-router';
 import { useStateStore } from 'stores/useStateStore';
 import { useI18n } from 'vue-i18n';
@@ -46,7 +46,7 @@ const userParams = {
     from: null,
     to: null,
 };
-onMounted(() => {
+onBeforeMount(() => {
     initializeFromQuery();
     stateStore.rightDrawer = true;
     if (!route.query.createForm) return;
@@ -457,15 +457,6 @@ function setReference(data) {
         :label="t('Search ticket')"
         :info="t('You can search by ticket id or alias')"
         data-cy="ticketListSearchBar"
-        :before-search="
-            (filter) => {
-                if (filter.params.search) {
-                    delete filter.params.from;
-                    delete filter.params.to;
-                }
-                return filter;
-            }
-        "
     />
     <RightMenu>
         <template #right-panel>

From b635010972de48f428748033f6090ab3b042043f Mon Sep 17 00:00:00 2001
From: Jon <jon@verdnatura.es>
Date: Wed, 11 Dec 2024 14:03:56 +0100
Subject: [PATCH 4/5] perf: if searchtext condition

---
 src/components/ui/VnSearchbar.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/ui/VnSearchbar.vue b/src/components/ui/VnSearchbar.vue
index c3a3c0a033c..bdebfd875e9 100644
--- a/src/components/ui/VnSearchbar.vue
+++ b/src/components/ui/VnSearchbar.vue
@@ -103,7 +103,7 @@ async function search() {
             search: searchText.value,
         },
     };
-    if (!(searchText.value && searchText.value !== '')) {
+    if (!searchText.value) {
         filter = {
             params: {
                 ...Object.fromEntries(staticParams),

From 9e8c967567e77016f4da4b07e6020338d34e3033 Mon Sep 17 00:00:00 2001
From: alexm <alexm@verdnatura.es>
Date: Wed, 11 Dec 2024 15:01:28 +0100
Subject: [PATCH 5/5] fix(VnSearchbar): hotFix rollback

---
 src/components/ui/VnSearchbar.vue | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/src/components/ui/VnSearchbar.vue b/src/components/ui/VnSearchbar.vue
index bdebfd875e9..4e90245d655 100644
--- a/src/components/ui/VnSearchbar.vue
+++ b/src/components/ui/VnSearchbar.vue
@@ -98,25 +98,20 @@ onMounted(() => {
 async function search() {
     const staticParams = Object.entries(store.userParams);
     arrayData.reset(['skip', 'page']);
-    let filter = {
+
+    const filter = {
         params: {
+            ...Object.fromEntries(staticParams),
             search: searchText.value,
         },
+        ...{ filter: props.filter },
     };
-    if (!searchText.value) {
-        filter = {
-            params: {
-                ...Object.fromEntries(staticParams),
-            },
-            ...{ filter: props.filter },
-        };
 
-        if (props.whereFilter) {
-            filter.filter = {
-                where: props.whereFilter(searchText.value),
-            };
-            delete filter.params.search;
-        }
+    if (props.whereFilter) {
+        filter.filter = {
+            where: props.whereFilter(searchText.value),
+        };
+        delete filter.params.search;
     }
     await arrayData.applyFilter(filter);
 }