diff --git a/services/client/common/models/client.js b/services/client/common/models/client.js index 4c99400c7..96f9a2381 100644 --- a/services/client/common/models/client.js +++ b/services/client/common/models/client.js @@ -45,11 +45,12 @@ module.exports = function(Client) { allowBlank: true, min: 3, max: 10 }); - Client.validatesLengthOf('iban', { - allowNull: true, - allowBlank: true, - max: 23 + + var validateIban = require('../validations/validateIban'); + Client.validateBinded('iban',validateIban,{ + message:'El iban no tiene el formato correcto' }); + Client.validate('payMethod', hasSalesMan, { message: 'No se puede cambiar la forma de pago si no hay comercial asignado' }); diff --git a/services/client/common/validations/validateIban.js b/services/client/common/validations/validateIban.js new file mode 100644 index 000000000..1f0fc333a --- /dev/null +++ b/services/client/common/validations/validateIban.js @@ -0,0 +1,56 @@ +module.exports = function (iban){ + + if (iban == null) return true; + if (typeof iban != 'string') return false; + + //Se pasa a Mayusculas + iban = iban.toUpperCase(); + //Se quita los blancos de principio y final. + iban = trim(iban); + iban = iban.replace(/\s/g, ""); //Y se quita los espacios en blanco dentro de la cadena + + //La longitud debe ser siempre de 24 caracteres + if (iban.length != 24) { + return false; + } + + // Se coge las primeras dos letras y se pasan a números + var letter1 = iban.substring(0, 1); + var letter2 = iban.substring(1, 2); + var num1 = getIbanNumber(letter1); + var num2 = getIbanNumber(letter2); + //Se sustituye las letras por números. + var isbanaux = String(num1) + String(num2) + iban.substring(2); + // Se mueve los 6 primeros caracteres al final de la cadena. + isbanaux = isbanaux.substring(6) + isbanaux.substring(0,6); + + //Se calcula el resto, llamando a la función module97, definida más abajo + var resto = module97(isbanaux); + if (resto == 1){ + return true; + }else{ + return false; + } + + function module97(iban) { + var parts = Math.ceil(iban.length/7); + var remainer = ""; + + for (var i = 1; i <= parts; i++) { + remainer = String(parseFloat(remainer+iban.substr((i-1)*7, 7))%97); + } + + return remainer; + } + + function getIbanNumber(letra) { + var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + return letters.search(letra) + 10; + } + + function trim (text) { + return (text || "").replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" ); + } + +} +