From 7a1a5ad5015295a056e03d3fefcce6a4a3afa394 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Mon, 24 Feb 2025 12:54:41 +0100 Subject: [PATCH 1/5] fix: refs #7356 ticketService --- src/pages/Ticket/Card/TicketService.vue | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/pages/Ticket/Card/TicketService.vue b/src/pages/Ticket/Card/TicketService.vue index 6ce69a6aa..6e3ddc2c6 100644 --- a/src/pages/Ticket/Card/TicketService.vue +++ b/src/pages/Ticket/Card/TicketService.vue @@ -121,6 +121,53 @@ async function handleSave() { 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; +}