sdk-payway-ventasonline
Version:
Payway SDK NODEJS ===============
234 lines (198 loc) • 6.27 kB
JavaScript
var postalcodes_hash = require('./postalCodes.json');
// La cantidad de arrays dependen del campo CSITPRODUCTDESCRIPTION, si éste desprende elementos de su array,
// los demás CSITPRODUCTxxx van con la misma cantidad de elementos.
// El parámetro str_csitproductdescription se utiliza como referencia para los demás campos que dependen
// de la cantidad de descripciones de los productos (menos de 256 la suma del total de elementos del array)
function csitFormat(str, max) {
var result = "";
if (str.length > max) {
var strings = str.split("#");
//El tamaño maximo del campo dividido la candidad de palabras me da el tamaño de cada palabra
//le resto la cantidad de palabras por los #
var maxForWord = (max / strings.length) - strings.length;
for (var i in strings) {
var word = strings[i];
result += clean(truncate(word, maxForWord)) + "#";
}
result = result.substring(0, result.length - 1);
} else {
var strings = str.split("#");
for (var i in strings) {
var word = strings[i];
result += clean(word) + "#";
}
result = result.substring(0, result.length - 1);
}
return result;
}
function word(str, parametro) {
if (!str.match(/^[\W]*$/)) {
//console.log('funcion word: '+str+ ' -> ' +parametro);
return parametro;
} else {
buildError(parametro, str);
}
}
function totalAmount(str, validacion) {
var regex = new RegExp(validacion.params[0]);
if (!regex.test(str)) {
return buildError(validacion.message, str);
} else {
return str;
}
}
//formatea a booleanos a formato valido o infiere N
function booleanFormat(value, validacion) {
if (!value.match(/^[YySsNn]$/)) {
if (validacion.default) {
return validacion.default;
} else {
buildError(validacion.message, value);
}
} else {
return value;
}
}
//infiere formatos de telefono valido
function phoneSanitize(str, parametro) {
phoneNumber = str.replace(/[\D]/, '');
if (phoneNumber.substring(0, 2) == "54") {
return phoneNumber;
}
if (phoneNumber.substring(0, 2) == "15") {
phoneNumber = phoneNumber.substring(3, phoneNumber.length);
}
if (phoneNumber.length == 8) {
return "5411" + phoneNumber;
}
if (phoneNumber.substring(0) == "0") {
return "54" + phoneNumber.substring(2, phoneNumber.length);
}
return "54" + phoneNumber;
}
//formata email
function emailFormat(str, validacion) {
var regex = new RegExp(validacion.params[0]);
if (!regex.test(str)) {
return buildError(validacion.message, str);
} else {
return str;
}
}
//formatea la ip en los casos de formato no aceptado por el agrgador
function ipFormat(value, validacion) {
var regex = new RegExp(validacion.params[0]);
if (value != undefined && regex.test(value)) {
return value;
} else {
buildError(validacion.message, value);
}
}
function notEmpty(validacion, value) {
if (validacion.default == undefined && (value == null || value.trim() == '')) {
buildError(validacion.message, value);
} else if (value != null || value.trim() != '') {
return value;
} else {
return setDefaultValue(validacion.default);
}
}
function setDefaultValue(defaultValue) {
if (defaultValue == 'random') { // NÚMERO ALEATORIO
return num_random().toString();
} else if (defaultValue == 'findState') {
return findState('C'); // el state por defecto es capital federal
} else {
return defaultValue;
}
}
function num_random() {
var idrandom = 0;
idrandom = parseInt(Math.random() * 800 + 1);
return idrandom;
}
function findState(strState) {
var s = 'C';
if (strState && (strState.trim() != '')) {
s = strState;
}
s = s.toUpperCase();
//console.log('Estado procesado: '+ s);
return postalcodes_hash[s];
}
function clean(data) { // VER QUE NO AFECTE EL MAIL
var result = data.replace(/[^A-Za-z0-9@.\s]+/g, '');
return result;
}
function truncate(data, max) {
return data.substring(0, max);
}
function hardcode(data, hardcode) {
if (!data) {
return hardcode;
}
return data;
}
function upper(data) {
return data.toUpperCase();
}
function execValidateFunction(value, validacion) {
//console.log(validacion);
switch (validacion.function) {
case 'notEmpty':
return notEmpty(validacion, value);
break;
case 'ip':
return ipFormat(value, validacion);
break;
case 'email':
return emailFormat(value, validacion);
break;
case 'word':
return word(value, validacion.message);
break;
case 'boolean':
return booleanFormat(value, validacion);
break;
case 'totalAmount':
return totalAmount(value, validacion);
break;
default:
console.log('No existe la funcion: ' + validacion.function+" campo: " + value);
break;
}
}
function execFormatFunction(data, format) {
switch (format.function) {
case 'clean':
return clean(data);
break;
case 'truncate':
return truncate(data, format.params);
break;
case 'hardcode':
return hardcode(data, format.params);
break;
case 'upper':
return upper(data);
break;
case 'csitFormat':
return csitFormat(data, format);
break;
case 'phoneSanitize':
return phoneSanitize(data, format);
break;
default:
console.log('No existe la funcion: ' + format.function+" campo: " + data);
break;
}
}
function buildError(msj, value) {
var error = '{"ResultMessage":"' + msj + '","ResultCode": 99977, "value":"' + value + '"}';
throw new Error(error);
}
module.exports = {
execValidateFunction: execValidateFunction,
execFormatFunction: execFormatFunction,
buildError: buildError
}