From 492fe713cde36fd07047ee91bfa19faf811f475a Mon Sep 17 00:00:00 2001 From: provira Date: Fri, 7 Feb 2025 14:18:59 +0100 Subject: [PATCH] fix: refs #8335 fixed translations for errors in creation forms --- src/boot/quasar.js | 42 ++++++++++++++++++++++++++++++------------ src/i18n/locale/en.yml | 36 ++++++++++++++++++++++++++++++++++++ src/i18n/locale/es.yml | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 12 deletions(-) diff --git a/src/boot/quasar.js b/src/boot/quasar.js index 547517682..9aa92a33b 100644 --- a/src/boot/quasar.js +++ b/src/boot/quasar.js @@ -17,35 +17,53 @@ export default boot(({ app }) => { const response = error.response; const responseData = response?.data; const responseError = responseData && response.data.error; + if (responseError) { message = responseError.message; } switch (response?.status) { case 422: - if (error.name == 'ValidationError') - message += - ' "' + - responseError.details.context + - '.' + - Object.keys(responseError.details.codes).join(',') + - '"'; + const fieldErrors = responseError.details.messages; + const firstField = Object.keys(fieldErrors)[0]; + const firstErrorMessage = fieldErrors[firstField][0]; + const normalizedField = firstField.replace(/([A-Z])/g, '_$1').toLowerCase(); + console.log('normalizedField: ', normalizedField); + + message = `errors.${normalizedField}_${firstErrorMessage.replace(/\s|'|"/g, '_').toLowerCase()}`; break; case 500: - message = 'errors.statusInternalServerError'; - break; + let serverErrorMessage = responseError?.message || 'statusInternalServerError'; + + if (serverErrorMessage.includes('ER_NO_REFERENCED_ROW_2')) { + const foreignKeyMatch = serverErrorMessage.match(/FOREIGN KEY \(`(.+?)`\)/); + const fieldName = foreignKeyMatch ? foreignKeyMatch[1] : 'unknown_field'; + + message = `errors.foreign_key_${fieldName.toLowerCase()}`; + } else { + message = `errors.${serverErrorMessage + .replace(/::/g, '') + .replace(/\s|'|"/g, '_') + .toLowerCase()}`; + } + break; case 502: message = 'errors.statusBadGateway'; break; case 504: message = 'errors.statusGatewayTimeout'; break; + case 400: + message = `errors.${responseError.message + .replace(/\.$/, '') + .replace(/\s|'|"/g, '_') + .toLowerCase()}`; + break; + } - console.error(error); if (error instanceof axios.CanceledError) { - const env = process.env.NODE_ENV; - if (env && env !== 'development') return; + if (process.env.NODE_ENV !== 'development') return; message = 'Duplicate request'; } diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml index d615eef4c..0077f26ad 100644 --- a/src/i18n/locale/en.yml +++ b/src/i18n/locale/en.yml @@ -377,6 +377,42 @@ errors: updateUserConfig: Error updating user config tokenConfig: Error fetching token config writeRequest: The requested operation could not be completed + origin_fk_cannot_be_blank: Origin cannot be blank + name_can_t_be_blank: Name cannot be blank + hour_can_t_be_blank: Close cannot be blank + agency_mode_fk_agency_cannot_be_blank: Agency cannot be blank + email_is_a_required_argument: Email cannot be blank + bossFk_is_a_required_argument: Boss cannot be blank + supplier_fk_can_t_be_blank: Supplier cannot be blank + travel_fk_can_t_be_blank: Travel cannot be blank + company_fk_can_t_be_blank: Company cannot be blank + es_necesario_un_email: Email cannot be blank + el_tipo_de_negocio_debe_estar_rellenado_en_datos_básicos: Business type cannot be blank + social_name_can_t_be_blank: Social name cannot be blank + social_name_social_name_should_be_uppercase: Social name should be uppercase + street_can_t_be_blank: Street cannot be blank + street_street_should_be_uppercase: Street should be uppercase + city_can_t_be_blank: Location cannot be blank + El_correo_del_usuario_web_ya_existe: Web user email already exists + name_a_client_with_that_web_user_name_already_exists: A client with that web user name already exists + email_is_blank: Email cannot be blank + email_is_invalid: Email is invalid + id_is_a_required_argument: Client cannot be blank + landed_is_a_required_argument: Landed cannot be blank + addressid_is_a_required_argument: Address cannot be blank + agencymodeid_is_a_required_argument: Agency cannot be blank + serial_is_a_required_argument: Serial cannot be blank + elija_un_ticket_o_un_client: Choose a ticket or a clients + modelfindbyid_requires_the_id_argument: Type cannot be blank + foreign_key_intrastatfk: Intrastat cannot be blank + er_bad_null_error:_column__code__cannot_be_null: Code cannot be blank + er_bad_null_error:_column__priority__cannot_be_null: Priority cannot be blank + value_is_not_a_number: Client cannot be blank + este_ticket_ya_está_facturado: This ticket is already invoiced + no_se_puede_facturar_un_ticket_con_importe_cero: You cannot invoice a ticket with zero amount + este_cliente_no_es_facturable: This client is not invoiceable + value_is_not_a_string: Reference cannot be blank + la_fecha_límite_es_requerida: Due date cannot be blank login: title: Login username: Username diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml index ea5fa9e41..aa067db2c 100644 --- a/src/i18n/locale/es.yml +++ b/src/i18n/locale/es.yml @@ -370,6 +370,42 @@ errors: updateUserConfig: Error al actualizar la configuración de usuario tokenConfig: Error al obtener configuración de token writeRequest: No se pudo completar la operación solicitada + origin_fk_cannot_be_blank: El campo origen no puede estar en blanco + name_can_t_be_blank: El campo nombre no puede estar en blanco + hour_can_t_be_blank: El campo cierre no puede estar en blanco + agency_mode_fk_agency_cannot_be_blank: El campo agencia no puede estar en blanco + email_is_a_required_argument: El campo email no puede estar en blanco + bossFk_is_a_required_argument: El campo jefe no puede estar en blanco + supplier_fk_can_t_be_blank: El campo proveedor no puede estar en blanco + travel_fk_can_t_be_blank: El campo envío no puede estar en blanco + company_fk_can_t_be_blank: El campo empresa no puede estar en blanco + es_necesario_un_email: El campo email no puede estar en blanco + el_tipo_de_negocio_debe_estar_rellenado_en_datos_básicos: El campo tipo de negocio no puede estar en blanco + social_name_can_t_be_blank: El campo razón social no puede estar en blanco + social_name_social_name_should_be_uppercase: El campo razón social debe estar en mayúsculas + street_can_t_be_blank: El campo dirección fiscal no puede estar en blanco + street_street_should_be_uppercase: El campo dirección fiscal debe estar en mayúsculas + city_can_t_be_blank: El campo ubicación no puede estar en blanco + El_correo_del_usuario_web_ya_existe: El correo del usuario web ya existe + name_a_client_with_that_web_user_name_already_exists: Ya existe un cliente con ese nombre de usuario web + email_is_blank: El campo email no puede estar en blanco + email_is_invalid: El campo email no es válido + id_is_a_required_argument: El campo cliente no puede estar en blanco + landed_is_a_required_argument: El campo f. entrega no puede estar en blanco + addressid_is_a_required_argument: El campo dirección no puede estar en blanco + agencymodeid_is_a_required_argument: El campo agencia no puede estar en blanco + serial_is_a_required_argument: El campo serie no puede estar en blanco + elija_un_ticket_o_un_client: Elija un ticket o un cliente + modelfindbyid_requires_the_id_argument: El campo tipo no puede estar en blanco + foreign_key_intrastatfk: El campo intrastat no puede estar en blanco + er_bad_null_error:_column__code__cannot_be_null: El campo código no puede estar en blanco + er_bad_null_error:_column__priority__cannot_be_null: El campo prioridad no puede estar en blanco + value_is_not_a_number: El campo cliente no puede estar en blanco + este_ticket_ya_está_facturado: Este ticket ya ha sido facturado + no_se_puede_facturar_un_ticket_con_importe_cero: No se puede facturar un ticket con importe cero + este_cliente_no_es_facturable: Este cliente no es facturable + value_is_not_a_string: El campo referencia no puede estar en blanco + la_fecha_límite_es_requerida: El campo fecha límite no puede estar en blanco login: title: Inicio de sesión username: Nombre de usuario