/* * Funciones javascript de Verifarma * Version: 3.4 * Fecha: 2014-02-27 */ var version_funciones = '3.4'; // Get the HTTP Object var sorter = null; function getHTTPObject(){ if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP"); else if (window.XMLHttpRequest) return new XMLHttpRequest(); else { alert("Your browser does not support AJAX."); return null; } } function limpiaDivs(elemento){ var diva = document.getElementById(elemento); diva.innerHTML = ' '; } /* * Hace una llamada AJAX */ function doWork(urlAjax, varData, elemento_dst){ cargando(elemento_dst); $.ajax({ type: "POST", url: urlAjax, cache: false, data: varData, success: function(msg) { $('#'+elemento_dst).html(msg); } }); return ""; } function cargando(obj){ $('#'+obj).html('
'); } function parseDataGrafica(texto){ var strStartMatch=new String("|INIDATA|"); var strEndMatch=new String("|FINDATA|"); var intStart=texto.indexOf(strStartMatch, 0) var intEnd=texto.indexOf(strEndMatch, intStart); var rta = texto.substring(intStart+9, intEnd); return rta; } function redirect(location){ document.location.href=location; } function grabaListado(){ // obtengo dato de hidden con listado var diva = document.getElementById('arre_resul'); //grabo cookie SetCookie('arre_result',diva.value + "|" + getCookie('arre_result'),1); alert('Guardada'); } function SetCookie(cookieName,cookieValue,nDays) { var today = new Date(); var expire = new Date(); if (nDays==null || nDays==0) nDays=1; expire.setTime(today.getTime() + 3600000*24*nDays); document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString(); } function getCookie(c_name) { if (document.cookie.length>0) { c_start=document.cookie.indexOf(c_name + "="); if (c_start!=-1) { c_start=c_start + c_name.length+1; c_end=document.cookie.indexOf(";",c_start); if (c_end==-1) c_end=document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; } function fnCreateSelect( aData ){ var r=''; } /* * Para login */ function getAvailablesVips(){ var username = $("input[name=txtuser]").val(); var pass = $("input[name=txtpassword]").val(); if(username!='' && pass!=''){ $.ajax({ type: "POST", url: '/modulos/general/login', cache: false, data: "txtuser="+username+"&txtpassword="+pass+"&txtvipcode=getvip", success: function(msg) { if(msg!=''){ $('.trvipcode').remove(); var re = jQuery.parseJSON(msg); var vipSelect = '" + pi_texto1 + "
"); }else{ $("#iFrame").html(""); } } /* * Pop up para informacion de elemento desde el listado */ //inicia el div que tendra el dialog function iniciaPop(pop){ pop.dialog({ modal: false, autoOpen: false, title: "Verifarma", resizable: true, draggable: true, show: "clip" }); $(".link-listado").click(function(){ var ide = $(this).attr("ide"); var title_alt = $(this).attr("title_alt"); var title = $(this).attr("title"); if(ide=='' || ide==undefined){ ide = $(this).text(); } if(title=='' || title==undefined){ title = ''; } if(title_alt=='' || title_alt==undefined){ title_alt = $(this).text(); } title += ' ' + title_alt; pop.dialog("option", "title", title); pop.dialog("option", "height", $(this).attr("pheight")); pop.dialog("option", "width", $(this).attr("pwidth")); doWork($(this).attr("href"), 'id='+ide.replace(/\+/g,"%2B"), "poplistado"); pop.dialog('open'); return false; }); } //inicia el link-estado que se cargan por ajax function iniciaPopLink(pop){ $(".link-listado").click(function(){ var ide = $(this).attr("ide"); if(ide=='' || ide==undefined){ ide = $(this).text(); } pop.dialog("option", "title", $(this).attr("title")+' '+$(this).text()); pop.dialog("option", "height", $(this).attr("pheight")); pop.dialog("option", "width", $(this).attr("pwidth")); doWork($(this).attr("href"), 'id='+ide.replace(/\+/g,"%2B"), "poplistado"); pop.dialog('open'); return false; }); } // Autocomplete en inputs function crearAutocomplete(inp){ inp.each(function(){ $(this).autocomplete({ source: $(this).attr("url"), minLength: 2, select: function( event, ui ) { if($(this).attr("out")!=undefined && $(this).attr("out")!=''){ $($(this).attr("out")).val(ui.item.id); } if($(this).attr("callback")!=undefined && $(this).attr("callback")!=''){ eval($(this).attr("callback")); } } }); }); } // Autocomplete para lote_original function crearAutocompleteLoteOriginal(inp){ inp.each(function(){ $(this).autocomplete({ source: $(this).attr("url"), minLength: 2, select: function( event, ui ) { if($(this).attr("out")!=undefined && $(this).attr("out")!=''){ $($(this).attr("out")).val(ui.item.id); $($(this).attr("out")).attr("desactivado", ui.item.desactivado); } if($(this).attr("callback")!=undefined && $(this).attr("callback")!=''){ eval($(this).attr("callback")); } } }); }); } // autocomplete especial para lotes en comprobantes function crearAutocompleteLote(inp,from){ var completeFrom = ( from && from != '' ) ? "&from="+from : ""; inp.each(function(){ $(this).autocomplete({ minLength: 1, search: function(){ $(this).autocomplete( "option", "source", $(this).attr("url")+"?idm="+$(this).parent().parent().attr("idm")+completeFrom); }, open: function(){ $(this).attr("busca","1"); }, select: function( event, ui ) { if($(this).attr("out")!=undefined && $(this).attr("out")!=''){ $($(this).attr("out")).val(ui.item.id); if(ui.item.code != undefined){ $($(this).attr("out")).attr("code", ui.item.code); } } }, close: function( event, ui ) { $(this).attr("busca","0"); if($(this).attr("callback")!=undefined && $(this).attr("callback")!=''){ eval($(this).attr("callback")); } } }); }); } function crearAutocompleteLoteWithMed(inp,med){ inp.each(function(){ $(this).autocomplete({ minLength: 1, search: function(){ $(this).autocomplete( "option", "source", $(this).attr("url")+"?idm="+med); }, open: function(){ $(this).attr("busca","1"); }, select: function( event, ui ) { if($(this).attr("out")!=undefined && $(this).attr("out")!=''){ $($(this).attr("out")).val(ui.item.id); } }, close: function( event, ui ) { $(this).attr("busca","0"); if($(this).attr("callback")!=undefined && $(this).attr("callback")!=''){ eval($(this).attr("callback")); } } }); }); } function crearAutocompleteLoteWithMedIfExist(inp){ inp.each(function(){ $(this).autocomplete({ minLength: 1, search: function(){ $(this).autocomplete( "option", "source", $(this).attr("url")+"?idm="+$('#cmdIdMedicamento').val()); }, open: function(){ $(this).attr("busca","1"); }, select: function( event, ui ) { if($(this).attr("out")!=undefined && $(this).attr("out")!=''){ $($(this).attr("out")).val(ui.item.id); } }, close: function( event, ui ) { $(this).attr("busca","0"); if($(this).attr("callback")!=undefined && $(this).attr("callback")!=''){ eval($(this).attr("callback")); } } }); }); } // Borrar el id generado por el autocomplete function resetIdAutocomplete ( e ) { $( e ).keypress( function(){ $( this ).next().val( '' ) }); } // Funcion para limpiar codigos cuando se ingresan function sanitaze_codigo(str) { return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); } function trim(text){ return text.replace(/([\s]){1,}/g, ''); } /* Unas utilidades */ function console_log(mensaje){ //console.log(mensaje); } //******************* GS1-RFID ***************** /** * Recibe un string con el formato de la lectura del rfid, * lo descifra y devuelve el gtin + serie, que es ni mas ni menos * que el viejo y querido id_item */ var Rfid2IdItemConverter = new function() { var _errorValue = undefined; // Defino metodos /** * Saca todos los espacios de afuera y adentro de la cadena */ var trimAllSpaces = function(text) { return text.replace(/([\s]){1,}/g, ''); }; /** * Verifica si el valor es hexadecimal */ var isHexaValue = function(hexa_value) { return /^[0-9A-Fa-f]{1,}$/.test(hexa_value); }; /** * Llena el string con ceros al principio hasta cierto largo */ var zerosPad = function(str, len ){ str = "" + str; return str.length < len ? zerosPad("0"+ str, len) : str; }; /** * Devuelve el binario para el hexa que se le pasa como parametro */ var getBinaryStringFromHexa = function(hexa_value) { var binaryStringValue = ""; for ( var i in hexa_value ) { if( isHexaValue(hexa_value[i]) ) { binaryStringValue += zerosPad(parseInt(hexa_value[i],16).toString(2), 4); } } return binaryStringValue; }; /** * Devuelve un objeto con las partes del string */ var getBinarySections = function(binaryString) { var parts = { header: binaryString.substr(0, 8), filter: binaryString.substr(8, 3), // 3 partition: binaryString.substr(11, 3), // 3 company_prefix: binaryString.substr(14, 24), // 24 company: binaryString.substr(38, 20), // 20 serial: binaryString.substr(58, 38) // 38 }; return parts; } /** * Verifica si es valido el string segun sus partes */ var isValidBinaryStringBySections = function(binaryParts) { if( binaryParts.header != "00110000" ) { return false; } if( binaryParts.partition != "101" ) { return false; } return true; } /** * Devuelve los datos extraidos del binario pasados de formato * y completos si es necesario */ var getDataFromBinarySections = function(binarySections) { var data = { codigo_pais: zerosPad(parseInt(binarySections.company_prefix,2).toString(10), 7), codigo_empresa: zerosPad(parseInt(binarySections.company,2).toString(10), 6), serial: parseInt(binarySections.serial,2).toString(10) }; return data; } /** * Calcula el digito verificador para el gtin de 13 (ccc13) */ var getGtin13CheckDigit = function(text12) { var factor = 3; var sum = 0; for ( var i = text12.length; i > 0; --i ) { sum = sum + text12.substring (i-1, i) * factor; factor = 4 - factor; } var ccc13 = ((1000 - sum) % 10); return ccc13; }; /** * Devuelve el gtin para los datos pasados */ var getGtinFromData = function(data) { var codigos = data.codigo_empresa.toString().substr(0, 1) + data.codigo_pais.toString() + data.codigo_empresa.toString().substr(1) ; var gtin = codigos + getGtin13CheckDigit(codigos); return gtin; }; // Metodos publicos /** * Testea si es un valor SGtin-96 * */ this.isSgtin96 = function(value) { var clean_value = trimAllSpaces(value); if( clean_value.length != 24 || clean_value.substr(0,2) != "30" ) { // 30 = 00110000 return false; } return true; } /** * Devuelve el id_item convertido del valor del rfid */ this.getIdItem = function(rfid_value) { var clean_value = trimAllSpaces(rfid_value); if( clean_value.length != 24 ) { return _errorValue; } var binaryString = getBinaryStringFromHexa(clean_value); if( binaryString.length != ( 24 * 4 ) ) { return _errorValue; } var binarySections = getBinarySections(binaryString); // Verifica las secciones if( !isValidBinaryStringBySections(binarySections) ) { return _errorValue; } // Si esta bien, tomo los datos: var data = getDataFromBinarySections(binarySections); var gtin = getGtinFromData(data); var serial = data.serial; var id_item = "01" + gtin + "21" + serial; return id_item; }; /** * Testea si es un valor rfid sgtin96 y lo devuelve * Sino devuelve el mismo valor que se le paso * */ this.testAndGetIdItem = function(value) { if( !this.isSgtin96(value) ) { return value; } var id_item = this.getIdItem(value); if( id_item == _errorValue ) { return value; } return id_item; }; }; //******************* / GS1-RFID ***************** /* Ingreso manual prevent */ var m = 0; var _ingreso = { solo_scanner: false, solo_scanner_global: false, caracter_inicio_ok: false, largo: 0, fuePegado: false, caracteres_reservados: [36], letras_reservadas: ['$'], inputsForClear: ['codigo'], setSoloScanner: function() { this.solo_scanner = true; }, setSoloScannerGlobal: function(seteado) { this.solo_scanner_global = seteado; }, setFuePegado: function() { this.fuePegado = true; if(this.solo_scanner && !this.caracterInicioIsOk()){ window.setTimeout(this.addBombKey,4); } }, addBombKey: function(){ _ingreso.resetCodigoInIfNotEnableManualType(97); }, resetSoloScanner: function() { this.solo_scanner = false; }, caracterInicioIsOk: function() { return this.caracter_inicio_ok; }, resetIngreso: function() { this.caracter_inicio_ok = false; }, isCaracterReservado: function(tecla) { for( i in this.caracteres_reservados ) { if( this.caracteres_reservados[i] == tecla ) { return true; } } return false; }, isLetraReservada: function(letra) { for( i in this.letras_reservadas ) { if( this.letras_reservadas[i] == letra ) { return true; } } return false; }, setInputsForClear: function(inputs) { this.inputsForClear = inputs; }, clearCodigo: function() { codigo_in = ''; for( j in this.inputsForClear ) { $('#'+this.inputsForClear[j]).val(''); } this.largo = 0; }, resetCodigoInIfNotEnableManualType: function(tecla) { if(this.isCaracterReservado(tecla) && this.largo==0) { this.caracter_inicio_ok = true; this.clearCodigo(); return; } if(this.solo_scanner && tecla == 13 && this.fuePegado && !this.caracterInicioIsOk()){ this.clearCodigo(); this.fuePegado = false; return; } if(this.solo_scanner && !this.caracterInicioIsOk()) { this.clearCodigo(); return; } if(tecla == 13){ this.resetIngreso(); this.largo = 0; return; } this.largo++; }, resetCodigosIfNotLetraManualType: function() { if(this.solo_scanner_global){ var inputActual = $("input:focus"); if(inputActual.length==0){ inputActual = $("textarea:focus"); if(inputActual.length==0){ return false; } } var letra = inputActual.val(); for( j in this.inputsForClear ) { if(letra!='' && this.inputsForClear[j]==inputActual.attr("id") && this.solo_scanner && (!this.caracterInicioIsOk() || this.isLetraReservada(letra[0])) ) { $('#'+this.inputsForClear[j]).val(''); } } if(letra!='' && this.isLetraReservada(letra[0])){ inputActual.val(''); } } } }; //_ingreso.setSoloScanner(); /*** Zoom prevent ****/ var _g = { ctrlOn: false, ctrlKey: 17, plusKeys: [187, 107, 43, 171, 61, 93], gsKeys: [0, 18, 29, 93, 221, 186, 119], getTecla: function(e) { var tecla = null; e = e || window.event; if( e.keyCode ) tecla = e.keyCode; if( e.which ) tecla = e.which; return tecla; } }; document.onkeypress = function(e) { var tecla = _g.getTecla(e); if(_ingreso.solo_scanner_global){ // Sino esta habilitado el ingreso manual borra todo _ingreso.resetCodigoInIfNotEnableManualType(tecla); } }; document.onkeyup = function(e) { var tecla = _g.getTecla(e); DEBUG_SCANNER.debugMessage("onkeyup", tecla, codigo_in); if(_ingreso.solo_scanner_global){ _ingreso.resetCodigosIfNotLetraManualType(); } if( tecla == _g.ctrlKey ) { _g.ctrlOn = false; } }; // el evento onpaste se agrega de esta forma para compatibilidad con IE // los eventos de teclado se habilitan solo para cuando solo_scanner_global esta activado $(document).ready(function() { if(_ingreso.solo_scanner_global){ $('body').bind('paste', function() { _ingreso.setFuePegado(); _ingreso.resetCodigosIfNotLetraManualType(); }); $('body input').bind('blur', function() { _ingreso.largo = 0; }); } }); document.onkeydown = function(e) { var tecla = _g.getTecla(e); DEBUG_SCANNER.debugMessage("onkeydown", tecla, codigo_in); if( tecla == _g.ctrlKey ) { DEBUG_SCANNER.debugMessage("CTRL Detected", tecla, codigo_in); _g.ctrlOn = true; } if( _g.ctrlOn ) { for( i in _g.plusKeys ) { if( _g.plusKeys[i] == tecla ) { DEBUG_SCANNER.debugMessage("GS Detected (CTRL)", tecla, codigo_in); codigo_in += '