8713-testToMaster #1539

Merged
alexm merged 118 commits from 8713-testToMaster into master 2025-03-04 06:57:15 +00:00
1 changed files with 51 additions and 0 deletions
Showing only changes of commit 7a1a5ad501 - Show all commits

View File

@ -121,6 +121,53 @@ async function handleSave() {
isSaving.value = false; isSaving.value = false;
} }
} }
function validateFields(item, isUpdate = false) {
// Only validate fields that are being updated
const shouldValidate = (field) => !isUpdate || field in item;
if (shouldValidate('ticketServiceTypeFk') && !item.ticketServiceTypeFk) {
notify('Descriptssion is required', 'negative');
return false;
}
if (shouldValidate('quantity') && (!item.quantity || item.quantity <= 0)) {
notify('Quantity must be greater than 0', 'negative');
return false;
}
if (shouldValidate('price') && (item.price === null || item.price < 0)) {
notify('Price must be valid', 'negative');
return false;
}
return true;
}
function beforeSave(data) {
const { creates = [], updates = [] } = data;
const validData = { creates: [], updates: [] };
// Validate creates
if (creates.length) {
for (const create of creates) {
if (validateFields(create)) {
validData.creates.push(create);
}
create.ticketFk = route.params.id;
}
}
// Validate updates
if (updates.length) {
for (const update of updates) {
if (validateFields(update, true)) {
validData.updates.push(update);
return false;
}
}
}
return validData;
}
</script> </script>
<template> <template>
@ -141,6 +188,7 @@ async function handleSave() {
v-model:selected="selected" v-model:selected="selected"
:order="['description ASC']" :order="['description ASC']"
:default-remove="false" :default-remove="false"
:beforeSaveFn="beforeSave"
> >
<template #moreBeforeActions> <template #moreBeforeActions>
<QBtn <QBtn
@ -170,6 +218,7 @@ async function handleSave() {
option-value="id" option-value="id"
hide-selected hide-selected
sort-by="name ASC" sort-by="name ASC"
:required="true"
> >
<template #form> <template #form>
<TicketCreateServiceType <TicketCreateServiceType
@ -185,6 +234,7 @@ async function handleSave() {
:label="col.label" :label="col.label"
v-model.number="row.quantity" v-model.number="row.quantity"
type="number" type="number"
:required="true"
min="0" min="0"
:info="t('service.quantityInfo')" :info="t('service.quantityInfo')"
/> />
@ -196,6 +246,7 @@ async function handleSave() {
:label="col.label" :label="col.label"
v-model.number="row.price" v-model.number="row.price"
type="number" type="number"
:required="true"
min="0" min="0"
@keyup.enter="handleSave" @keyup.enter="handleSave"
/> />