var sizeWeek = 15; // Tamaño de movimiento por la matriz var sFechaLoad = ""; var sFechaConsultaIni = ""; // Contiene la fecha de inicio de consulta. Empleado para anterior y siguiente. var sFechaConsulta = ""; var paDisp = /^(0|C|c|((-)?[1-9]\d{0,2}))$/ var pabase = /^(0|([1-9]\d{0,12}))((,|\.)\d{1,2})?$/ var changePrecio = false; var sDivisa = ""; // Codigo de divisa var sServBase = ""; // Codigo de servicio base var listaFecha = new Array(); var listaDispo = new Array(); var listaPrecio = new Array(); var listaHabitaciones = new Array(); var lastRequest; var pCodHotel = ""; var pCodTarifa = ""; var pCodTarifaSeg = ""; var pCodDisponibilidad = ""; var pTipo = ""; var soloLectura = "false"; // Indica si el grid es sólo lectura // ==================================================================================================== function validar(myPatron, campo){ return myPatron.test(campo); } function getPrecioFloat(precio) { var resultado = new Number(precio.replace(',','.')); return resultado; } function modPar(sPar){ if (sPar == "par") return "impar" else return "par" } function setColor(inputCelda, mod){ if (!mod) $(inputCelda).style.color ="black"; else $(inputCelda).style.color = "red"; } function mostrarAnterior(estado){ if(estado){ Element.show("pag_anterior_0"); Element.show("pag_anterior_1"); } else{ Element.hide("pag_anterior_0"); Element.hide("pag_anterior_1"); } } function mostrarSiguiente(estado){ if(estado){ Element.show("pag_siguiente_0"); Element.show("pag_siguiente_1"); } else{ Element.hide("pag_siguiente_0"); Element.hide("pag_siguiente_1"); } } // Activar o desactivar el boton salvar function mostrarGuardar(estado) { if (estado){ Element.show("bot_formulario"); } else{ Element.hide("bot_formulario"); } } //========================================================== // anterior // // Pinta el bloque anterior del calendario. // Verifica que no hay cambios para aplicar primero un guardar //========================================================== function anterior(){ var msg = ""; var tramaPrecio = getTramaPrecio(); var pCambiado = (listaPrecio.length>0 && changePrecio); if(pCambiado && getTramaDispo()!=""){msg ="Some rate or availability has been changed";} else { if (pCambiado){msg ="Some rate has been changed";} if (getTramaDispo()!="") {msg ="There are changes pending to be saved.";} } var continuar = (msg!="")?(confirm(msg + ". Do you want to save changes ?")):false; if (continuar) { salvarCalendario($("tarifa").value, ''); } var fechaArray = sFechaConsulta.split("-"); var fecha = new Date(); fecha.setDate(fechaArray[0]); fecha.setMonth(Number(fechaArray[1]) - 1); fecha.setYear(fechaArray[2]); fecha.setDate(fecha.getDate() - sizeWeek); sFechaConsulta = fecha.getDate() + "-" + (Number(fecha.getMonth()) + 1) + "-" + fecha.getFullYear(); qryCalendario(pCodHotel, pCodTarifa, pCodTarifaSeg, pCodDisponibilidad, sFechaConsulta, pTipo); } //========================================================== // siguiente // // Pinta el siguiente bloque de calendario. // Verifica que no hay cambios para aplicar primero un guardar //========================================================== function siguiente(){ var msg = ""; var tramaPrecio = getTramaPrecio(); var pCambiado = (listaPrecio.length>0 && changePrecio); if(pCambiado && getTramaDispo()!=""){msg ="Some rate or availability has been changed";} else { if (pCambiado){msg ="Some rate has been changed";} if (getTramaDispo()!="") {msg ="There are changes pending to be saved.";} } var continuar = (msg!="")?(confirm(msg + ". Do you want to save changes ?")):false; if (continuar) { salvarCalendario($("tarifa").value, ''); } var fechaArray = sFechaConsulta.split("-"); var fecha = new Date(); fecha.setDate(fechaArray[0]); fecha.setMonth(Number(fechaArray[1]) - 1); fecha.setYear(fechaArray[2]); fecha.setDate(fecha.getDate() + sizeWeek); sFechaConsulta = fecha.getDate() + "-" + (Number(fecha.getMonth()) + 1) + "-" + fecha.getFullYear(); qryCalendario(pCodHotel, pCodTarifa, pCodTarifaSeg, pCodDisponibilidad, sFechaConsulta, pTipo); } // ==================================================================================================== function celdaClass(_fecha, _diasemana, _id, _actu){ this.fecha = _fecha; this.diasemana = _diasemana; this.id = _id; this.actu = _actu; this.getFecha = function(){ return this.fecha ;} this.getDiasemana = function(){ return this.diasemana;} this.getId = function(){ return this.id ;} this.getActu = function(){ return this.actu;} this.setFecha = function(_fecha){this.fecha= _fecha;} this.setDiasemana = function(_diasemana){this.diasemana= _diasemana;} this.setId = function(_id){this.id = _id;} this.setActu = function(_actu){this.actu = _actu;} } function precioClass(_precioIni, _precioFin){ this.precioIni = _precioIni; this.precioFin = _precioFin; this.getPrecioIni = function(){ return this.precioIni;} this.getPrecioFin = function(){ return this.precioFin;} this.setPrecioIni = function(_precioIni){this.precioIni = _precioIni;} this.setPrecioFin = function(_precioFin){this.precioFin = _precioFin;} } function dispoClass(_dispoIni, _dispoFin){ this.dispoIni = _dispoIni; this.dispoFin = _dispoFin; this.getDispoIni = function(){ return this.dispoIni;} this.getDispoFin = function(){ return this.dispoFin;} this.setDispoIni = function(_dispoIni){this.dispoIni = _dispoIni;} this.setDispoFin = function(_dispoFin){this.dispoFin = _dispoFin;} } function resetComponentes(){ changePrecio = false; sServBase =""; sDivisa =""; listaFecha = new Array(); listaFecha.length=0; listaDispo = new Array(); listaDispo.length = 0; listaPrecio = new Array(); listaPrecio.length = 0; listaHabitaciones = new Array(); listaHabitaciones.length = 0; } //**************************************************** // // PRECIOS // //**************************************************** // ========================================= // cambiarPrecio // ========================================= function cambiarPrecio(columna){ var inputCeldaBase = "BASE_" + columna; var valor = $(inputCeldaBase).value; valor = valor.replace(",","."); $(inputCeldaBase).value = valor; var objPrecioBase = listaPrecio[columna][1]; var precioAnt = objPrecioBase.getPrecioIni(); if(valor.length>0){ if(!validar(pabase,valor)){ reportError('indicatorError', 'The number contains letters or not allowed characters.'); $(inputCeldaBase).value = precioAnt; return; } } var nuevoPrecioBase = getPrecioFloat(valor); if(nuevoPrecioBase==0){ $(inputCeldaBase).value = ""; objPrecioBase.setPrecioFin(""); } else{ objPrecioBase.setPrecioFin(valor); } listaPrecio[columna][1] = objPrecioBase; for (i=0; i0){ $("td_estado_"+ columna).className = "disp"; } else{ $("td_estado_"+ columna).className = "no_disp"; } $("td_estado_"+ columna).innerHTML = dispParcial; } } // ========================================= // cambiarDispo // ========================================= function cambiarDispo(sCodigoHab, columna) { var inputCelda = "DISPO_" + sCodigoHab + "_" + columna; $(inputCelda).value = $(inputCelda).value.toUpperCase(); var nuevaDispo = $(inputCelda).value; var objDispo = listaDispo[columna][1][sCodigoHab]; var dispAnt = objDispo.getDispoIni(); if(!validar(paDisp,nuevaDispo)){ reportError('indicatorError', 'The number contains letters or not allowed characters.'); if (dispAnt<0){ dispAnt = "C"; } $(inputCelda).value = dispAnt; return; } if(nuevaDispo<0){ $(inputCelda).value = "C"; } if (nuevaDispo == "C"){ if (dispAnt<0){ nuevaDispo = dispAnt; } else{ nuevaDispo = -99; } } objDispo.setDispoFin(nuevaDispo); if(objDispo.getDispoIni()!=objDispo.getDispoFin()){ setColor(inputCelda, true); } else{ setColor(inputCelda, false); } listaDispo[columna][1][sCodigoHab] = objDispo; cargaStatus(columna); } // ========================================= // getTramaDispo // ========================================= function getTramaDispo() { var trama = ""; for (i=0; i0){ var tramaPrecio = getTramaPrecio(); if(changePrecio){ salvarCalendarioPrecio(tarifa, tramaPrecio); } } if(listaDispo.length>0){ var tramaDispo = getTramaDispo(); if(tramaDispo != ""){ salvarCalendarioDispo(tarifa, tipoDisponibilidad, tramaDispo); } } } function salvarCalendarioDisponibilidadDiaria(tipoDisponibilidad){ //Para disponibilidad diaria! if(listaDispo.length>0){ var tramaDispo = getTramaDispo(); if(tramaDispo != "") { salvarCalendarioDispoDiaria(tipoDisponibilidad, tramaDispo); } } } //========================================================== // salvarCalendarioDispo //========================================================== function salvarCalendarioDispoDiaria(tipoDisponibilidad, tramaDispo) { viewProgress('indicator'); var param ='hotel=' + $("mainHotel").value +'&tipoDisponibilidad=' + tipoDisponibilidad +'&trama=' + tramaDispo + '&rand=' + get_random(); // Nos conectamos con el servidor por GET para evitar el bug de IE6 if (ie6) { var conexionGETAjax = new Ajax.Request( "../../html/void.html?rand=" + get_random(), { method:'get', asynchronous: false } ); } var conexionAjax = new Ajax.Request( "../../consolaTarifaHotel/jsp/E_ActualizarDisponibilidadDiaria.jsp", { method:'post', parameters:encodeURI(param), asynchronous: true, onFailure: function(request){reportError('indicatorError','isGeneral.ERROR_ACTUALIZAR_DISPO_DIARIA');}, onComplete: function(request){ actualizarlistaDispo(request); resetLoader("indicator"); Element.hide("indicator"); setTimeOut(); } } ); } //========================================================== // salvarCalendarioPrecio //========================================================== function salvarCalendarioPrecio(tarifa, tramaPrecios) { viewProgress('indicator'); var param ='hotel=' + $("mainHotel").value +'&tarifa=' + tarifa +'&divisa=' + sDivisa +'&fecha='+sFechaLoad+'&trama=' + tramaPrecios+'&rand=' + get_random(); // Nos conectamos con el servidor por GET para evitar el bug de IE6 if (ie6) { var conexionGETAjax = new Ajax.Request( "../../html/void.html?rand=" + get_random(), { method:'get', asynchronous: false } ); } var conexionAjax = new Ajax.Request( "../../consolaTarifaHotel/jsp/E_ActualizarPrecios.jsp", { method:'post', parameters:encodeURI(param), asynchronous: true, onFailure: function(request){reportError('indicatorError','There was an error untreated (produced by any problems with the servers) to change prices on the screen "Pricing and availability BASE."');}, onComplete: function(request){ actualizarlistaPrecio(request); resetLoader("indicator"); Element.hide("indicator"); setTimeOut(); } } ); } //========================================================== // salvarCalendarioDispo //========================================================== function salvarCalendarioDispo(tarifa, tipoDisponibilidad, tramaDispo) { viewProgress('indicator'); var param ='hotel=' + $("mainHotel").value +'&tarifa=' + tarifa +'&tipoDisponibilidad=' + tipoDisponibilidad +'&trama=' + tramaDispo + '&rand=' + get_random(); // Nos conectamos con el servidor por GET para evitar el bug de IE6 if (ie6) { var conexionGETAjax = new Ajax.Request( "../../html/void.html?rand=" + get_random(), { method:'get', asynchronous: false } ); } var conexionAjax = new Ajax.Request( "../../consolaTarifaHotel/jsp/E_ActualizarDisponibilidad.jsp", { method:'post', parameters:encodeURI(param), asynchronous: true, onFailure: function(request){reportError('indicatorError','There was an error untreated (produced by problems with the servers) to change availability on the screen "Pricing and availability BASE."');}, onComplete: function(request){ actualizarlistaDispo(request); resetLoader("indicator"); Element.hide("indicator"); setTimeOut(); } } ); } //========================================================== // loadCalendario //========================================================== function loadCalendario(codHotel, codTarifa, codTarifaSeg, codDisponibilidad, fIni, tipo, _soloLectura) { pCodHotel = codHotel; pCodTarifa = codTarifa; pcodTarifaSeg = codTarifaSeg; pCodDisponibilidad = codDisponibilidad; sFechaConsulta = fIni; sFechaConsultaIni = fIni; pTipo = tipo; soloLectura = _soloLectura; qryCalendario(pCodHotel, pCodTarifa, pCodTarifaSeg, pCodDisponibilidad, sFechaConsulta, pTipo); } //========================================================== // qryCalendario //========================================================== function qryCalendario(codHotel, codTarifa, codTarifaSeg, codDisponibilidad, fIni, tipo) { viewProgress('indicator'); mostrarAnterior(false); mostrarSiguiente(false); mostrarGuardar(false); var param = 'hotel=' +codHotel+ '&tarifa=' + codTarifa + '&inicio=' + fIni + '&tipo=' + tipo + '&disponibilidad=' + codDisponibilidad + '&rand=' + get_random(); sFechaLoad = replaceAll(fIni,"-","/"); var conexionAjax = new Ajax.Request( "../../consolaTarifaHotel/jsp/E_ObtenerCalendario.jsp", { method:'get', parameters:encodeURI(param), asynchronous: true, onFailure: function(request){ reportError('indicatorError','There was an error untreated (produced by problems with the servers) to check prices on the screens "Prices and BAR availability" and "Price Management"')}, onComplete: function(request){ resetLoader("indicator"); cargaMemoria(request); setTimeOut(); } } ); } //========================================================== // cargaMemoria // // Carga en memoria el calendario //========================================================== function cargaMemoria(request) { resetComponentes(); var xmlDoc = request.responseXML; if(xmlDoc == null){ reportError('indicatorError','Operation error'); return; } if(recuperarError(xmlDoc) != ""){ reportError('indicatorError', recuperarError(xmlDoc)); return; } // Calculo de la Divisa sDivisa = getElement(xmlDoc, "moneda").replace(" ",""); var habitaciones = xmlDoc.getElementsByTagName("ProxyCalendarioHabitacionDatos"); for (i=0; i0){ var bloqueDispo = dispos[0]; var nodosDisponibilidad = bloqueDispo.getElementsByTagName("FechaDispoBean"); for (i=0; i0){ var bloquePrecio = precios[0]; var nodosPrecios = bloquePrecio.getElementsByTagName("FechaCldBean"); for (i=0; i0) { paintCalendar(); mostrarResultados(true); var fechaArray = sFechaConsulta.split("-"); var fechaCurr = new Date(); fechaCurr.setDate(fechaArray[0]); fechaCurr.setMonth(Number(fechaArray[1]) - 1); fechaCurr.setYear(fechaArray[2]); fechaArray = sFechaConsultaIni.split("-"); var fechaIni = new Date(); fechaIni.setDate(fechaArray[0]); fechaIni.setMonth(Number(fechaArray[1]) - 1); fechaIni.setYear(fechaArray[2]); if (fechaCurr <= fechaIni) { mostrarAnterior(false); } else { mostrarAnterior(true); } } else { mostrarResultados(false); } // Guardamos el resultado de la última consulta para emplearlo en caso de resetear la edición lastRequest = request; } // ========================================== function paintCalendar() { var sCadena = ''; var sBaseRow = 'BAR Base rate'; //============================================ // Pintamos los dias //============================================ var sDiasRow =''; var encontrado = false; posIni=0; posFin=listaFecha.length-1; var fecha1 = listaFecha[posIni].getFecha().split("-"); var fecha2 = listaFecha[posFin].getFecha().split("-"); while( (!encontrado) && (posIni<=posFin)){ var fechaAux = listaFecha[posIni].getFecha().split("-"); if(fechaAux[1]==fecha2[1]){ sDiasRow += ' ' if(posIni==0){ sDiasRow += '' + yxMonths[Number(fecha1[1])-1] + ' '+fecha1[2]+'' } else{ if(posIni>1) sDiasRow += '' + yxMonths[Number(fecha1[1])-1] + ' '+fecha1[2]+''; else sDiasRow += '' + yxMonths[Number(fecha1[1])-1]+''; var iAux = (posFin+1)-posIni; if(iAux>1) sDiasRow += ''+ yxMonths[Number(fecha2[1])-1] +' '+fecha2[2]+''; else sDiasRow += '' + yxMonths[Number(fecha1[1])-1]+''; } encontrado=true; } posIni++; } sDiasRow += ' '; for(i=0; i=6) sClase = "class=\"finde\""; if(i==0) sStyle = 'style="border-left: 1px solid #8199C0;"' sDiasRow += '' + dayHeaders[intDiaSemana%7] + '
' + fecha[0]+ ''; } sDiasRow += ' '; var txtBase = ''; var sStatusRow = ''; var sHabitacionesRow =""; for (i=0; i' + sTxtHab +' '; for(j=0;j' + listaServ[j][3]+ " pax " + listaServ[j][2]+ ''; if(sCodigoServ==sServBase) {txtBase = sTxtHab +' '+listaServ[j][1]+' pax ' + listaServ[j][2];} sPar = "impar"; for(k=0; k'; } else { sBaseRow += ''; } } else{ var precioInc = listHab[sCodigoHab]!=undefined?listHab[sCodigoHab][sCodigoServ]:undefined; if(precioBase!=0){ if ((precioInc!="") && (precioInc!=undefined)){ precioFinal = getPrecioFloat(precioInc) + getPrecioFloat(precioBase); precioFinal = Math.round(100*precioFinal)/100; if(precioFinal<=0) precioFinal = ""; } } } sHabitacionesRow += '' + precioFinal + ''; sPar = modPar(sPar); } sHabitacionesRow += ''; } if(listaDispo.length>0){ sHabitacionesRow += 'Availability'; sPar = "impar"; for(k=0; k=0){ dispoFinal = dispo; } sHabitacionesRow += ''; sPar = modPar(sPar); } sHabitacionesRow += ''; } } if(listaDispo.length>0){ sStatusRow = 'Total Availability'; for(k=0; k '; } sStatusRow += ' '; } sCadena += '' +sDiasRow + sStatusRow ; if(listaPrecio.length>0) sCadena += sBaseRow; sCadena += sHabitacionesRow +'
'; if (listaPrecio.length>0) { $("txt_hab_base").innerHTML = txtBase; $("txt_moneda").innerHTML = sDivisa; } $("precio_base").innerHTML = sCadena; if(listaDispo.length>0){ for(k=0; k