From eb373f10b39671fc1dcb6a28e6355e6ffa786921 Mon Sep 17 00:00:00 2001 From: jorgep Date: Wed, 23 Apr 2025 18:29:53 +0200 Subject: [PATCH] fix: refs #8388 update VnTable integration in InvoiceInDueDay component and enhance input handling --- src/components/VnTable/VnTable.vue | 1 + src/pages/InvoiceIn/Card/InvoiceInDueDay.vue | 288 +++++++------------ 2 files changed, 111 insertions(+), 178 deletions(-) diff --git a/src/components/VnTable/VnTable.vue b/src/components/VnTable/VnTable.vue index 7e9ab85cb..f1f26d706 100644 --- a/src/components/VnTable/VnTable.vue +++ b/src/components/VnTable/VnTable.vue @@ -432,6 +432,7 @@ async function renderInput(rowId, field, clickedElement) { const row = CrudModelRef.value.formData[rowId]; const oldValue = CrudModelRef.value.formData[rowId][column?.name]; + if (column.disable) return; if (!clickedElement) clickedElement = document.querySelector( `[data-row-index="${rowId}"][data-col-field="${field}"]`, diff --git a/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue b/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue index 62fa4be09..2346ee301 100644 --- a/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue +++ b/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue @@ -6,81 +6,107 @@ import axios from 'axios'; import { toDate } from 'src/filters'; import { useArrayData } from 'src/composables/useArrayData'; import { getTotal } from 'src/composables/getTotal'; -import CrudModel from 'src/components/CrudModel.vue'; +// import CrudModel from 'src/components/CrudModel.vue'; // Removed CrudModel import import VnSelect from 'src/components/common/VnSelect.vue'; import useNotify from 'src/composables/useNotify.js'; import VnInputDate from 'src/components/common/VnInputDate.vue'; import VnInputNumber from 'src/components/common/VnInputNumber.vue'; import { toCurrency } from 'filters/index'; +import VnTable from 'src/components/VnTable/VnTable.vue'; // Added VnTable import const route = useRoute(); -const { notify } = useNotify(); +const { notify } = useNotify(); // Keep notify if used elsewhere, otherwise remove const { t } = useI18n(); const arrayData = useArrayData(); const invoiceIn = computed(() => arrayData.store.data); const currency = computed(() => invoiceIn.value?.currency?.code); const rowsSelected = ref([]); -const invoiceInFormRef = ref(); +const invoiceInDueDayTableRef = ref(); // Renamed ref for VnTable const invoiceId = +route.params.id; const filter = { where: { invoiceInFk: invoiceId } }; const areRows = ref(false); const totalTaxableBase = ref(); const totalVat = ref(); + +// Access formData from VnTable's internal CrudModelRef +const tableRows = computed( + () => invoiceInDueDayTableRef.value?.CrudModelRef?.formData || [], +); +const totalAmount = computed(() => getTotal(tableRows.value, 'amount')); + const noMatch = computed( () => totalAmount.value != totalTaxableBase.value && totalAmount.value != totalVat.value, ); + const columns = computed(() => [ { - name: 'duedate', + name: 'dueDated', label: t('Date'), - field: (row) => toDate(row.dueDated), sortable: true, tabIndex: 1, align: 'left', + component: 'date', + isEditable: true, + create: true, }, { - name: 'bank', + name: 'bankFk', label: t('Bank'), - field: (row) => row.bankFk, - model: 'bankFk', - optionLabel: 'bank', - url: 'Accountings', sortable: true, tabIndex: 2, align: 'left', + component: 'select', + attrs: { + url: 'Accountings', + optionLabel: 'bank', + optionValue: 'id', + fields: ['id', 'bank'], + 'emit-value': true, + }, + format: ({ bank }) => bank?.bank, + isEditable: true, + create: true, }, { name: 'amount', label: t('Amount'), - field: (row) => row.amount, sortable: true, tabIndex: 3, align: 'left', + component: 'number', + attrs: { + clearable: true, + 'clear-icon': 'close', + }, + isEditable: true, + create: true, }, { - name: 'foreignvalue', + name: 'foreignValue', label: t('Foreign value'), - field: (row) => row.foreignValue, sortable: true, tabIndex: 4, align: 'left', + component: 'number', + isEditable: true, + create: true, + disable: true, }, ]); -const totalAmount = computed(() => getTotal(invoiceInFormRef.value.formData, 'amount')); - const isNotEuro = (code) => code != 'EUR'; async function insert() { await axios.post('/InvoiceInDueDays/new', { id: +invoiceId }); - await invoiceInFormRef.value.reload(); + await invoiceInDueDayTableRef.value.reload(); notify(t('globals.dataSaved'), 'positive'); } - async function setTaxableBase() { + const ref = invoiceInDueDayTableRef.value; + if (ref) ref.create = null; const { data } = await axios.get(`InvoiceIns/${invoiceId}/getTotals`); totalTaxableBase.value = data.totalTaxableBase; totalVat.value = data.totalVat; @@ -89,189 +115,93 @@ async function setTaxableBase() { onBeforeMount(async () => await setTaxableBase());