From 4641adbae3c4b8604006e18a8c268f8ad70cc61f Mon Sep 17 00:00:00 2001
From: Javier Segarra <jsegarra@verdnatura.es>
Date: Wed, 5 Mar 2025 23:20:23 +0100
Subject: [PATCH] feat: refs #8725 init

---
 src/components/FormModel.vue                   | 15 +++++++++++++--
 src/components/FormModelPopup.vue              |  5 +++--
 src/pages/Customer/Card/CustomerFiscalData.vue |  2 ++
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/components/FormModel.vue b/src/components/FormModel.vue
index c4d9a4149..b36f0998e 100644
--- a/src/components/FormModel.vue
+++ b/src/components/FormModel.vue
@@ -119,7 +119,9 @@ const defaultButtons = computed(() => ({
         color: 'primary',
         icon: 'save',
         label: 'globals.save',
-        click: async () => await save(),
+        click: async () => {
+            submitForm();
+        },
         type: 'submit',
     },
     reset: {
@@ -132,6 +134,14 @@ const defaultButtons = computed(() => ({
     ...$props.defaultButtons,
 }));
 
+const submitForm = () => {
+    myForm.value.validate().then((success) => {
+        if (success) {
+            save();
+        }
+    });
+};
+
 onMounted(async () => {
     nextTick(() => (componentIsRendered.value = true));
 
@@ -312,6 +322,7 @@ async function onKeyup(evt) {
 }
 
 defineExpose({
+    myForm,
     save,
     isLoading,
     hasChanges,
@@ -325,7 +336,7 @@ defineExpose({
         <QForm
             ref="myForm"
             v-if="formData"
-            @submit.prevent
+            @submit.prevent="save"
             @keyup.prevent="onKeyup"
             @reset="reset"
             class="q-pa-md"
diff --git a/src/components/FormModelPopup.vue b/src/components/FormModelPopup.vue
index 85943e91e..c6d901b23 100644
--- a/src/components/FormModelPopup.vue
+++ b/src/components/FormModelPopup.vue
@@ -43,7 +43,7 @@ const onDataSaved = async (formData, requestResponse) => {
 
 const onClick = async (saveAndContinue) => {
     isSaveAndContinue.value = saveAndContinue;
-    await formModelRef.value.save();
+    formModelRef.value.myForm.submit();
 };
 
 defineExpose({
@@ -61,6 +61,7 @@ defineExpose({
         :default-actions="false"
         v-bind="$attrs"
         @on-data-saved="onDataSaved"
+        @submit.prevent
     >
         <template #form="{ data, validate }">
             <span ref="closeButton" class="close-icon" v-close-popup>
@@ -87,7 +88,7 @@ defineExpose({
                     :flat="showSaveAndContinueBtn"
                     :label="t('globals.save')"
                     :title="t('globals.save')"
-                    @click="onClick(false)"
+                    type="submit"
                     color="primary"
                     class="q-ml-sm"
                     :disabled="isLoading"
diff --git a/src/pages/Customer/Card/CustomerFiscalData.vue b/src/pages/Customer/Card/CustomerFiscalData.vue
index 93909eb9c..d3f1f937a 100644
--- a/src/pages/Customer/Card/CustomerFiscalData.vue
+++ b/src/pages/Customer/Card/CustomerFiscalData.vue
@@ -112,6 +112,7 @@ async function acceptPropagate({ isEqualizated }) {
                     v-model="data.sageTaxTypeFk"
                     data-cy="sageTaxTypeFk"
                     :required="data.isTaxDataChecked"
+                    :rules="[(val) => val !== null || 'Please type your age']"
                 />
                 <VnSelect
                     :label="t('Sage transaction type')"
@@ -122,6 +123,7 @@ async function acceptPropagate({ isEqualizated }) {
                     data-cy="sageTransactionTypeFk"
                     v-model="data.sageTransactionTypeFk"
                     :required="data.isTaxDataChecked"
+                    :rules="[(val) => val !== null || 'Please type your age']"
                 >
                     <template #option="scope">
                         <QItem v-bind="scope.itemProps">