/* Documentado creado el 19 de Octubre de 2007.
*/
var error='Debe elegir una opción válida'; //Mensaje de error
var mostrar = false; //Bandera para mostrar|ocultar la tabla de búsqueda avanzada
var cuenta_producto = 0; //Número de productos en la lista
var cons = 0;
var clave_producto = Array(); //Almacena las claves de los productos, impidiendo que se anexe más de una vez el mismo.
var datos_producto = Array();
//set_origenpedido(valor) asigna al campo hidden temporal (tmp_pedido) el valor 0 contrato o 1 particular
function set_origenpedido(valor){
var input, combo, tmp;
combo = document.getElementById('cliente_nombre');
input = document.getElementById('clave_contrato');
if(valor == 0){
combo.setAttribute('disabled', true);
input.removeAttribute('disabled');
}
else{
input.value='';
input.setAttribute('disabled', true);
combo.removeAttribute('disabled');
}
tmp = document.getElementById('tmp_pedido');
tmp.value = valor;
//Si es un contrato agregar buscar clave del cliente. Si es un particular remover clave del cliente.
var combo_box = document.getElementById('tipo_busqueda');
if(tmp.value == 0 && combo_box.options.length == 5){ //Agregar
var choice;
choice = document.createElement('option');
choice.value = 5;
choice.appendChild(document.createTextNode('Clave del Cliente'));
combo_box.appendChild(choice);
}
else if(tmp.value == 1 && combo_box.options.length == 6){ //Quitar
combo_box.removeChild(combo_box.lastChild);
}
return;
}
//showHidden() Muestra u oculta la tabla de búsqueda avanzada
function showHidden(){
var tabla_busqueda = document.getElementById('b_avanzada');
if(!mostrar){
mostrar = true;
tabla_busqueda.style.display = 'block';
}
else{
mostrar = false;
tabla_busqueda.style.display = 'none';
}
return;
}
//reiniciaControles() Limpia los controles principales de búsqueda avanzada
function reiniciaControles(){
var criterio = document.getElementById('criterio');
criterio.removeAttribute('value');
criterio.value = '';
var combo_box = document.getElementById('resultado');
while(combo_box.childNodes.length > 0)
combo_box.removeChild(combo_box.childNodes[0]);
var choice;
choice = document.createElement('option');
choice.appendChild(document.createTextNode('---SELECCIONE---'));
combo_box.appendChild(choice);
//limpiaPuntosEntrega();
activarAdd();
return;
}
//buscarCriterio() Búsqueda Avanzada según el tipo seleccionado y el criterio escrito en la Tabla Productos con el script get_producto.
function buscarCriterio(){
activarAdd();
var tipo_busqueda = document.getElementById('tipo_busqueda').value;
var criterio = document.getElementById('criterio').value;
if(tipo_busqueda != "" && tipo_busqueda != "---SELECCIONE---"){
if(criterio != ""){
if(tipo_busqueda == 5)
return alert('Aún no esta implementada la opción\nClave del Cliente');
var ajaxReq = ajaxFunction();
if(ajaxReq){
// Create a function that will receive data sent from the server
ajaxReq.onreadystatechange = function(){
if(ajaxReq.readyState == 4){
if(ajaxReq.status == 200){
//Activese solo para debuguear
//var valor = ajaxReq.responseText;
//alert(valor);
var valor = ajaxReq.responseXML.getElementsByTagName('evaluado')[0].firstChild.data;
var mensaje = ajaxReq.responseXML.getElementsByTagName('mensaje')[0].firstChild.data;
if(valor == 1){ //Existen Clientes
//alert(mensaje);
var xmlDoc = ajaxReq.responseXML;
var listaNombres = xmlDoc.getElementsByTagName('nombres')[0];
var nombresProductoXML = listaNombres.getElementsByTagName('nombre_producto');
var listaClaves = xmlDoc.getElementsByTagName('claves')[0];
var clavesClienteXML = listaClaves.getElementsByTagName('clave_producto');
var nombre_producto = new Array();
var clave_producto = new Array();
var currentState = null;
for(var i=0; i< nombresProductoXML.length; i++){
currentState = nombresProductoXML[i];
nombre_producto[i] = currentState.childNodes[0].nodeValue;
currentState = null;
currentState = clavesClienteXML[i];
clave_producto[i] = currentState.childNodes[0].nodeValue;
}
//Generar el combo
var combo_box = document.getElementById('resultado');
while(combo_box.childNodes.length > 0)
combo_box.removeChild(combo_box.childNodes[0]);
// Agrega algunas opciones:
var choice;
choice = document.createElement('option');
choice.appendChild(document.createTextNode('---SELECCIONE---'));
combo_box.appendChild(choice);
for(var i=0; i < nombre_producto.length; i++){
choice = document.createElement('option');
choice.value = clave_producto[i];
choice.appendChild(document.createTextNode(nombre_producto[i]));
combo_box.appendChild(choice);
}
}
else{//No existen Productos
var combo_box = document.getElementById('resultado');
while(combo_box.childNodes.length > 0)
combo_box.removeChild(combo_box.childNodes[0]);
var choice;
choice = document.createElement('option');
choice.appendChild(document.createTextNode('---SELECCIONE---'));
combo_box.appendChild(choice);
alert(mensaje);
}
}//Valida Status
}//Valida State
}//onreadystatechange
criterio = encodeURI(criterio);
var aleatorio=Math.random();
ajaxReq.open("GET", "get_producto.php?act=1&tipo_busqueda="+tipo_busqueda+"&criterio="+criterio+"&rnd="+aleatorio, true);
ajaxReq.send(null);
}//Valida Ajax
else
alert("El Navegador no soporta llamados al objeto XMLHttpRequest");
}//Valida Criterio y Tipo_Busqueda
else
return alert("Debe escribir un criterio de búsqueda");
}//Valida Tipo_Busqueda
else
return alert(error);
}
//Activa el boton para agregar los puntos de entrega en función del cliente seleccionado.
function activarAdd(){
var resultado = document.getElementById('resultado').value;
var anexa_fila = document.getElementById('anexa_producto');
if(resultado != "" && resultado != "---SELECCIONE---"){
anexa_fila.removeAttribute("disabled");
}
else{
anexa_fila.setAttribute('disabled', true);
}
}
function getDatos(producto_clave){ //Cero (0) busca si la clave es válida, uno (1) crea la fila con la información de la BD /*accion, */
var ajaxReq = ajaxFunction();
if(ajaxReq){
ajaxReq.onreadystatechange = function(){
if(ajaxReq.readyState == 4){
if(ajaxReq.status == 200){ //Activese solo para debuguear
//var valor = ajaxReq.responseText; alert(valor);
var valor = ajaxReq.responseXML.getElementsByTagName('evaluado')[0].firstChild.data;
var mensaje = ajaxReq.responseXML.getElementsByTagName('mensaje')[0].firstChild.data;
if(valor == 1){ //Existe la Clave del producto
//alert(mensaje);
var claveXML = ajaxReq.responseXML.getElementsByTagName('clave_producto')[0].firstChild.data;
var nombreXML = ajaxReq.responseXML.getElementsByTagName('nombre_producto')[0].firstChild.data;
var umedidaXML = ajaxReq.responseXML.getElementsByTagName('umedida_producto')[0].firstChild.data;
var precioXML = ajaxReq.responseXML.getElementsByTagName('precio_producto')[0].firstChild.data;
//---------------------- Inicia declaración de variables ---------------------------
var col_nombre= Array('filaprod','producto_id','cantidad','descripcion','umedida','precio','importe', 'Quitar');
var tabla='valores_producto';
var valores_control = document.getElementById(tabla); //tbody valores_producto
var consecutivo = cons++;
var id_control = cuenta_producto++;
//---------------------- Termina declaración de variables ---------------------------
var fila_control = document.createElement("tr");
fila_control.setAttribute('id',col_nombre[0]+consecutivo);
var columna_clave = document.createElement('input'); //Tipo text
var columna_cantidad = document.createElement('input'); //Tipo text
var columna_descripcion = document.createElement('input'); //Tipo text
var columna_umedida = document.createElement('input'); //Tipo text
var columna_precio = document.createElement('input'); //Tipo text
var columna_importe = document.createElement('input'); //Tipo text
var btnBorrar = document.createElement('input'); //Tipo button
set_Atributos(columna_clave, col_nombre[1]+'[]', col_nombre[1]+id_control, claveXML, 8, 0); //Columna de Clave
columna_clave.onfocus= function(){ this.blur(); };
set_Atributos(columna_cantidad, col_nombre[2]+'[]', col_nombre[2]+id_control, 0, 4, 0); //Columna de Cantidad
columna_cantidad.onkeyup=
function(){
if(!isNaN(this.value) && this.value > 0){ //alert('Cantidad Válida para '+this.id);
this.value = parseInt(this.value,10)
calculaImporte(this.id);
}
else{
var tam = this.id.charAt(this.id.length-1);
var importe = document.getElementById('importe'+tam);
importe.value = 0;
alert('Cantidad Inválida\nPor Favor escriba el # de productos');
}
};
set_Atributos(columna_descripcion, col_nombre[3]+'[]', col_nombre[3]+id_control, nombreXML, 20, 0); //Columna de Descripción
columna_descripcion.onfocus= function(){ this.blur(); };
set_Atributos(columna_umedida, col_nombre[4]+'[]', col_nombre[4]+id_control, umedidaXML, 10, 0); //Columna de Unidad de Medida
columna_umedida.onfocus= function(){ this.blur(); };
set_Atributos(columna_precio, col_nombre[5]+'[]', col_nombre[5]+id_control, precioXML, 6, 0); //Columna de Precio
columna_precio.onfocus= function(){ this.blur(); };
set_Atributos(columna_importe, col_nombre[6]+'[]', col_nombre[6]+id_control, 0, 6, 0); //Columna de Importe
columna_importe.onfocus= function(){ this.blur(); };
set_Atributos(btnBorrar,col_nombre[7]+'[]',col_nombre[7]+consecutivo,'Quitar', 6,2); //Columna del botón Quitar
btnBorrar.onclick= function(){ remove_fila(tabla, col_nombre[0]+consecutivo); }
fila_control.appendChild(crearColumna(columna_clave)); //Clave
fila_control.appendChild(crearColumna(columna_cantidad)); //Cantidad
fila_control.appendChild(crearColumna(columna_descripcion));//Descripción
fila_control.appendChild(crearColumna(columna_umedida)); //Unidad de Medida
fila_control.appendChild(crearColumna(columna_precio)); //Precio
fila_control.appendChild(crearColumna(columna_importe)); //Importe
fila_control.appendChild(crearColumna(btnBorrar)); //Borrar
valores_control.appendChild(fila_control);
}
else{//No existe el Producto
alert(mensaje);
}
}//Valida Status
}//Valida State
}//onreadystatechange
var aleatorio=Math.random();
ajaxReq.open("GET", "get_producto.php?act=2&producto_clave="+producto_clave+"&rnd="+aleatorio, true);
ajaxReq.send(null);
}//Valida Ajax
else
alert("El Navegador no soporta llamados al objeto XMLHttpRequest");
return;
}
//addFila() Agrega los productos del pedido a la tabla TBODY valores_producto, recibe hotkey (false|true) anexo por clave o B. Avanz.
function addFila(hotkey){
var arr_ = Array();
var producto;
arr_= clave_producto;
if(hotkey){
producto = document.getElementById('clave_producto').value;
if(producto == '' || producto == ' ' || isNaN(producto))
return alert('Debe escribir la clave del producto!!');
}
else{
producto = document.getElementById('resultado').value;
}
var existe = false;
for(var i=0; i < arr_.length; i++){
if(producto == arr_[i]){
existe = true;
break;
}
}
if(existe){
alert('El elemento ya fue agregado, por favor ingrese uno diferente');
return;
}
else{
add_Clave(producto,'producto'); //producto
//Busqueda de datos consulta ajax
getDatos(producto); //Crea fila de inputs con la información de la BD /*1, */
}
return;
}
//set_Atributos() Establece los atributos del elemento creado, en este caso input
function set_Atributos(input_pe, nombre, id, valor, tamanio, tipo){
var tipo_input;
switch(tipo){
case 0: tipo_input = 'text';
break;
case 1: tipo_input = 'hidden';
break;
case 2: tipo_input = 'button';
break;
default: alert('La opción no es válida');
break;
}
input_pe.setAttribute('type',tipo_input);
input_pe.setAttribute('name',nombre);
input_pe.setAttribute('id',id);
input_pe.setAttribute('value',valor);
input_pe.setAttribute('size',tamanio);
return input_pe;
}
//crearColumna() Crea una columna para los Inputs recibidos
function crearColumna(elemento){
var columna = document.createElement("td");
columna.appendChild(elemento);
return columna;
}
//remove_fila(tabla, id_elem)
function remove_fila(tabla, id_elem){
var cadena ='';
var tipo;
switch(tabla){
case 'valores_producto': cadena = 'Producto'; tipo=0;
break;
default: alert('La opción no es válida');
break;
}
var valores_ = document.getElementById(tabla); //tbody
var val_ = document.getElementById(id_elem);
if(confirm('Desea Quitar este '+cadena+'\nAl presionar Aceptar será eliminado')){
//busqueda del valor a borrar
if (val_.hasChildNodes()){
var children = val_.childNodes;
for (var i = 0; i < children.length; i++){
if(children[i].nodeType == 1){ //http://developer.mozilla.org/en/docs/DOM:element.nodeType //alert(children[i].nodeName);
if(children[i].hasChildNodes()){
var td = children[i].childNodes;
for (var j = 0; j < td.length; j++){ //alert(td[j].nodeName); //Paso por INPUTS
//alert('nombre: '+td[j].nodeName +'\ntipo: '+td[j].nodeType +'\nvalor: '+td[j].value+'\nid: '+td[j].id+'\nname: '+td[j].name);
if(tipo == 0){
if(td[j].name == 'producto_id[]'){
remove_Clave(td[j].value,'producto');//alert('valor a buscar: '+td[j].value);
}
}
}//Recorrido por lo elementos de la fila (Inputs), tomando solo el valor del campo vehiculo_id o chofer_id
}//Si tiene hijos (columnas) los revisara uno por uno
}//Recorre los items de la fila solo si son de tipo Elemento
}//Pasa el ID de la fila como parametro.
}//Si tiene hijos entra
//fin busqueda
valores_.removeChild(val_);
alert('Se ha borrado el elemento de la Tabla '+cadena);
if(tipo == 0){
cuenta_producto--; //alert('cuenta producto:'+cuenta_producto);
}
corrigeID(tabla);
}
else{
alert('El elemento '+cadena+' No será borrado');
}
return;
}
//add_Clave() Agregar la clave del vehiculo, chofer
function add_Clave(clave, nombre_arreglo){
var i=0;
switch(nombre_arreglo){
case 'producto': i = clave_producto.length; clave_producto[i]= clave; //var arr_= clave_producto; //contenido
break;
default: alert('La opción no es válida');
break;
}
return;
}
//remove_Clave() Agregar la clave del productos
function remove_Clave(clave, nombre_arreglo){
var i=0;
var existe=false;
var pos;
switch(nombre_arreglo){
case 'producto': var arr_= clave_producto;
break;
default: alert('La opción no es válida');
break;
}
var tmp = new Array();
for(i=0; i < arr_.length; i++){
if(arr_[i] == clave){
pos = i;
existe = true;
break;
}
}
if(existe){
for(j=0, i=0; j < arr_.length; j++){
if(j != pos){
tmp[i++]=arr_[j];
}
}
clave_producto = tmp;
}
return;
}
/* Esta Función cambiará los ID del grupo pasado como parámetro donde 0.- valores_producto
* Los ID deben quedar en forma secuencial para que las funciones no tengan problemas para acceder a los datos y realizar las operaciones.
*/
//corrige_ID(tabla_valores)
function corrigeID(tabla_valores){
var valores_ = document.getElementById(tabla_valores);
var nuevo_id = -1;
var tipo;
switch(tabla_valores){
case 'valores_producto': tipo=0; break;
default: alert('La opción no es válida'); break;
}
if (valores_.hasChildNodes()){
var children = valores_.childNodes;
for (var i = 0; i < children.length; i++){
if(children[i].nodeType == 1){ //http://developer.mozilla.org/en/docs/DOM:element.nodeType //alert(children[i].nodeName);
if(children[i].hasChildNodes()){
var tr = children[i].childNodes;
for (var j = 0; j < tr.length; j++){ //alert(tr[j].nodeName);
if(tr[j].hasChildNodes()){
var ele = tr[j].childNodes;
for (var k = 0; k < ele.length; k++){ //alert('nombre: '+ele[k].nodeName +'\ntipo: '+ele[k].nodeType +'\nvalor: '+ele[k].value+'\nid: '+ele[k].id+'\nname: '+ele[k].name);
if(ele[k].nodeType == 1){ //alert(nuevo_id);
if(tipo == 0){
if(ele[k].name == 'producto_id[]')
ele[k].id = 'producto_id'+nuevo_id;
if(ele[k].name == 'cantidad[]')
ele[k].id = 'cantidad'+nuevo_id;
if(ele[k].name == 'descripcion[]')
ele[k].id = 'descripcion'+nuevo_id;
if(ele[k].name == 'umedida[]')
ele[k].id = 'umedida'+nuevo_id;
if(ele[k].name == 'precio[]')
ele[k].id = 'precio'+nuevo_id;
if(ele[k].name == 'importe[]')
ele[k].id = 'importe'+nuevo_id;
}
}//Cambio de IDs
}//Recorrido de elementos Input
}//Evalua si tiene hijos
}//Recorrido de elementos TD
nuevo_id++;
}//Evalua si tiene hijos
}//Evalua si el nodo es de tipo elemento
}//Recorrido de los hijos de valores_pe, valores_caseta, valores_vehiculo, valores_chofer
//Se corrije el contador variable global
if(tipo == 0)
cuenta = nuevo_id;
}//Evalua si tiene hijos el Nodo
return true;
}
//calculaImporte(id_cantidad) recibe el ID del campo cantidad y a partir de este obtiene el precio (multiplica) y lo fija en importe
function calculaImporte(id_cantidad){
var tam = id_cantidad.charAt(id_cantidad.length-1);
var cantidad = document.getElementById(id_cantidad);
var precio = document.getElementById('precio'+tam);
var importe = document.getElementById('importe'+tam);
importe.value = precio.value * cantidad.value;
return;
}
//function validar_llenado() Comprueba que los importes sean mayor a cero y devuelve TRUE. Si no es asi envia un mensaje de error y devuelve FALSE
function validar_llenado(){
var i, importe;
if(cuenta_producto > 0){
for(i=0; i < cuenta_producto; i++){
importe = document.getElementById('importe'+i);
if(importe.value == 0){
alert('Debe escribir una cantidad para los productos');
return false;
}
}
}
else{
alert('Debe agregar productos a su pedido antes de guardar\nSi no desea guardar presione Cancelar');
return false;
}
return true;
}