refs #5858 feat: approach to print bad field in model
gitea/salix/pipeline/head There was a failure building this commit Details

This commit is contained in:
Javier Segarra 2023-11-25 21:11:06 +01:00
parent bddb787075
commit 273db31c05
4 changed files with 189 additions and 94 deletions

View File

@ -1,4 +1,5 @@
{
"postalcode": "Código postal",
"Phone format is invalid": "El formato del teléfono no es correcto",
"You are not allowed to change the credit": "No tienes privilegios para modificar el crédito",
"Unable to mark the equivalence surcharge": "No se puede marcar el recargo de equivalencia",
@ -327,5 +328,28 @@
"The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada",
"User disabled": "Usuario desactivado",
"The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima",
"quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima"
}
"quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima",
"provinceFk must be unique": "provinceFk must be unique",
"fi cannot be empty": "fi cannot be empty",
"countryFk cannot be empty": "countryFk cannot be empty",
"Model is not valid": "El campo \" {{key}}\" no es válido",
"postcode": "Código postal",
"fi": "NIF/CIF",
"socialName": "Razón social",
"street":"Dirección fiscal",
"city":"Población",
"countryFk":"País",
"provinceFk":"Provincia",
"sageTaxTypeFk":"Tipo de impuesto Sage",
"sageTransactionTypeFk":"Tipo de transacción Sage",
"transferorFk":"",
"hasToInvoiceByAddress":"",
"isFreezed":"",
"isVies":"",
"isToBeMailed":"",
"isEqualizated":"",
"isTaxDataVerified":"",
"despiteOfClient":"",
"hasIncoterms":"",
"hasElectronicInvoice":""
}

View File

@ -0,0 +1,41 @@
const isNotNull = value => value !== null && value !== undefined && value !== '';
const validatorBodyModel = (model, body) => {
let isValid = true;
let tag = null;
Object.entries(body).forEach(([key, value]) => {
if (!isValid) return;
const bodyArg = model.find(m => m.arg === key);
if (!bodyArg) throw new Error('Property is not defined in this model');
const {type} = bodyArg;
tag = key;
if (tag !== 'any') {
isValid = isNotNull(value);
return;
}
switch (type) {
case 'number':
isValid = /^[0-9]*$/.test(value);
break;
case 'boolean':
isValid = value instanceof Boolean;
break;
case 'date':
isValid = (new Date(date) !== 'Invalid Date') && !isNaN(new Date(date));
break;
case 'string':
isValid = typeof value == 'string';
break;
default:
break;
}
});
return {isValid, tag};
};
module.exports = validatorBodyModel;

View File

@ -1,4 +1,95 @@
let UserError = require('vn-loopback/util/user-error');
const validatorBodyModel = require('./body_model_validator');
const BODY_MODEL = [
{
arg: 'socialName',
type: 'string'
},
{
arg: 'fi',
type: 'string'
},
{
arg: 'street',
type: 'string'
},
{
arg: 'postcode',
type: 'string'
},
{
arg: 'city',
type: 'string'
},
{
arg: 'countryFk',
type: 'number'
},
{
arg: 'provinceFk',
type: 'number'
},
{
arg: 'sageTaxTypeFk',
type: 'any'
},
{
arg: 'sageTransactionTypeFk',
type: 'any'
},
{
arg: 'transferorFk',
type: 'any'
},
{
arg: 'hasToInvoiceByAddress',
type: 'boolean'
},
{
arg: 'hasToInvoice',
type: 'boolean'
},
{
arg: 'isActive',
type: 'boolean'
},
{
arg: 'isFreezed',
type: 'boolean'
},
{
arg: 'isVies',
type: 'boolean'
},
{
arg: 'isToBeMailed',
type: 'boolean'
},
{
arg: 'isEqualizated',
type: 'boolean'
},
{
arg: 'isTaxDataVerified',
type: 'boolean'
},
{
arg: 'isTaxDataChecked',
type: 'boolean'
},
{
arg: 'despiteOfClient',
type: 'number'
},
{
arg: 'hasIncoterms',
type: 'boolean'
},
{
arg: 'hasElectronicInvoice',
type: 'boolean'
}
];
module.exports = Self => {
Self.remoteMethod('updateFiscalData', {
@ -17,92 +108,9 @@ module.exports = Self => {
http: {source: 'path'}
},
{
arg: 'socialName',
type: 'string'
},
{
arg: 'fi',
type: 'string'
},
{
arg: 'street',
type: 'string'
},
{
arg: 'postcode',
type: 'string'
},
{
arg: 'city',
type: 'string'
},
{
arg: 'countryFk',
type: 'number'
},
{
arg: 'provinceFk',
type: 'number'
},
{
arg: 'sageTaxTypeFk',
type: 'any'
},
{
arg: 'sageTransactionTypeFk',
type: 'any'
},
{
arg: 'transferorFk',
type: 'any'
},
{
arg: 'hasToInvoiceByAddress',
type: 'boolean'
},
{
arg: 'hasToInvoice',
type: 'boolean'
},
{
arg: 'isActive',
type: 'boolean'
},
{
arg: 'isFreezed',
type: 'boolean'
},
{
arg: 'isVies',
type: 'boolean'
},
{
arg: 'isToBeMailed',
type: 'boolean'
},
{
arg: 'isEqualizated',
type: 'boolean'
},
{
arg: 'isTaxDataVerified',
type: 'boolean'
},
{
arg: 'isTaxDataChecked',
type: 'boolean'
},
{
arg: 'despiteOfClient',
type: 'number'
},
{
arg: 'hasIncoterms',
type: 'boolean'
},
{
arg: 'hasElectronicInvoice',
type: 'boolean'
arg: 'data',
type: 'object',
http: {source: 'body'}
}
],
returns: {
@ -148,8 +156,22 @@ module.exports = Self => {
// Remove unwanted properties
delete args.ctx;
delete args.id;
const {isValid, tag} = validatorBodyModel(BODY_MODEL, args.data);
if (!isValid) {
const key = $t(`${tag}`);
throw new Error($t('Model is not valid', {key})
);
}
// const isValid = client.isValid(async function(valid) {
// if (!valid) {
// cb(new ValidationError(client), client);
// return;
// }
const updatedClient = await client.updateAttributes(args, myOptions);
// // triggerSave();
// }, args.data, myOptions);
// client.isValid(client.constructor.validations, client.data, {});
const updatedClient = await client.updateAttributes(args.data, myOptions);
if (tx) await tx.commit();

View File

@ -10,18 +10,26 @@ module.exports = Self => {
require('./client-methods')(Self);
// Validations
// Self.isValid(function(valid) {
// if (!valid)
// console.error(valid); // hash of errors {attr: [errmessage, errmessage, ...], attr: ...}
// });
Self.validatesPresenceOf('street', {
message: 'Street cannot be empty'
});
Self.validatesPresenceOf('city', {
message: 'City cannot be empty'
});
Self.validatesUniquenessOf('fi', {
message: 'TIN must be unique'
});
Self.validatesPresenceOf('fi', {
message: 'fi cannot be empty'
});
Self.validatesPresenceOf('provinceFk', {
message: 'fi cannot be empty'
});
Self.validatesPresenceOf('countryFk', {
message: 'countryFk cannot be empty'
});
Self.validatesFormatOf('email', {
message: 'Invalid email',