//[SoapDocumentMethod(Binding = "BindingHotelesSoap", Action = "http://www.ineltur.com/BuscarAlojamientos")] public RespuestaBuscarAlojamientos BuscarAlojamientos(PeticionBuscarAlojamientos peticion) { var operationNumber = IncreaseOperationNumber().ToString().PadLeft(8, '0'); Tracker.WriteTrace(operationNumber, "Inicio BuscarAlojamientos"); Tracker.WriteTrace(operationNumber, "IP Solicitante: " + this.Context.Request.UserHostAddress); Tracker.WriteTrace(operationNumber, "Petición: " + peticion.ToStringWithProperties()); Guid?ciudad = null; Guid?provincia = null; switch (peticion.TipoDestino) { case TipoDestino.Ciudad: ciudad = peticion.IdDestino; break; case TipoDestino.Provincia: provincia = peticion.IdDestino; break; } if (!ciudad.HasValue && !provincia.HasValue) { return(new RespuestaBuscarAlojamientos() { Estado = EstadoRespuesta.ErrorParametro, MensajeEstado = "TipoDestino" }); } try { using (var dc = NuevoDataContext()) { var idUsuario = ValidarUsuarioClave(dc, peticion); if (idUsuario == null) { var respuestaError = new RespuestaBuscarAlojamientos() { Estado = EstadoRespuesta.CredencialesNoValidas }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientos: " + respuestaError.ToStringWithProperties(), traceType: Tracker.TraceType.Fatal); return(respuestaError); } if (peticion.FechaInicio == null || peticion.FechaInicio < DateTime.Today) { return(new RespuestaBuscarAlojamientos() { Estado = EstadoRespuesta.ErrorParametro, MensajeEstado = "FechaInicio" }); } if (peticion.FechaFin == null || peticion.FechaInicio >= peticion.FechaFin) { return(new RespuestaBuscarAlojamientos() { Estado = EstadoRespuesta.ErrorParametro, MensajeEstado = "FechaFin" }); } var usuario = dc.Usuarios.SingleOrDefault(u => u.IdUsuario == idUsuario); var encontrados = dc.GetAlojamientosConDisponibilidad( peticion.Habitacion1.GetValueOrDefault(), peticion.Habitacion2.GetValueOrDefault(), peticion.Habitacion3.GetValueOrDefault(), peticion.Habitacion4.GetValueOrDefault(), peticion.Habitacion5.GetValueOrDefault(), peticion.Habitacion6.GetValueOrDefault(), peticion.FechaInicio, peticion.FechaFin, ConvertirOrdenamiento(peticion.Orden), ciudad, provincia, ConvertirTipoAlojamiento(peticion.TipoAlojamiento), peticion.Nacionalidad) .Where(a => a.montoTotalEstimadoEnPesos > 0).ToArray(); if (encontrados.Length == 0) { return(new RespuestaBuscarAlojamientos() { Estado = EstadoRespuesta.NoEncontrado }); } else { var markup = 1 / ((1 - (usuario.MarkupAAgencia) / 100) * (1 - (usuario.MarkupAConsumidorFinal) / 100)); //markupYConversion = monedaAloj.COTIZACION / ((1-usrOperaciones.MARKUPAAGENCIA/100) * (1-usrOperaciones.MARKUPACONSUMIDORFINAL/100) * moneda.COTIZACION) var cotizMonedaUsuario = ObtenerCotizacion(dc, usuario.IdMoneda); var respuesta = new RespuestaBuscarAlojamientos() { Estado = EstadoRespuesta.Ok, AlojamientosDisponibles = encontrados.Select(a => new InfoAlojamientoDisponible() { Destino = new InfoDestino() { TipoDestino = TipoDestino.Ciudad, IdDestino = a.idCiudad.GetValueOrDefault(), NombreDestino = String.Concat(a.nombreCiudad, ", ", a.nombreProvincia) }, TipoAlojamiento = ConvertirTipoAlojamiento(a.idTipoAloj), IdAlojamiento = a.idAloj.GetValueOrDefault(), Nombre = a.nombre, //Moneda = ConvertirMoneda(a.IdMoneda.GetValueOrDefault()), Moneda = ConvertirMoneda(usuario.IdMoneda), Cupo1 = a.cupoTotalDisponibleSingle, Cupo2 = a.cupoTotalDisponibleDoble, Cupo3 = a.cupoTotalDisponibleTriple, Cupo4 = a.cupoTotalDisponibleCuadruple, Cupo5 = a.cupoTotalDisponible5Personas, Cupo6 = a.cupoTotalDisponible6Personas, Tarifa1 = Decimal.Round((decimal)((a.montoUnidadSingleMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa2 = Decimal.Round((decimal)((a.montoUnidadDobleMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa3 = Decimal.Round((decimal)((a.montoUnidadTripleMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa4 = Decimal.Round((decimal)((a.montoUnidadCuadrupleMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa5 = Decimal.Round((decimal)((a.montoUnidad5PersonasMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa6 = Decimal.Round((decimal)((a.montoUnidad6PersonasMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2) }).ToArray() }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientos: Éxito"); Tracker.WriteTrace(operationNumber, "Respuesta: " + respuesta.ToStringWithProperties()); return(respuesta); } } } catch (Exception ex) { var respuestaError = new RespuestaBuscarAlojamientos() { Estado = EstadoRespuesta.ErrorInterno, MensajeEstado = string.Empty //ex.ToString() }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientos: " + respuestaError.ToStringWithProperties() + ex.Message, traceType: Tracker.TraceType.Fatal); Tracker.WriteTrace(operationNumber, "Stack Trace: " + ex.StackTrace, traceType: Tracker.TraceType.Fatal); Tracker.WriteTrace(operationNumber, "Inner Exception: " + ex.InnerException.Message, traceType: Tracker.TraceType.Fatal); return(respuestaError); } }
//[SoapDocumentMethod(Binding = "BindingHotelesSoap", Action = "http://www.ineltur.com/BuscarAlojamientos")] public RespuestaBuscarAlojamientosEInfo BuscarAlojamientosEInfo(PeticionBuscarAlojamientos peticion) { var operationNumber = IncreaseOperationNumber().ToString().PadLeft(8, '0'); Tracker.WriteTrace(operationNumber, "Inicio BuscarAlojamientosEInfo"); Tracker.WriteTrace(operationNumber, "IP Solicitante: " + this.Context.Request.UserHostAddress); Tracker.WriteTrace(operationNumber, "Petición: " + peticion.ToStringWithProperties()); Guid?ciudad = null; Guid?provincia = null; switch (peticion.TipoDestino) { case TipoDestino.Ciudad: ciudad = peticion.IdDestino; break; case TipoDestino.Provincia: provincia = peticion.IdDestino; break; } //if (!ciudad.HasValue && !provincia.HasValue) //{ // return new RespuestaBuscarAlojamientosEInfo() // { // Estado = EstadoRespuesta.ErrorParametro, // MensajeEstado = "TipoDestino" // }; //} try { using (var dc = NuevoDataContext()) { var idUsuario = ValidarUsuarioClave(dc, peticion); if (idUsuario == null) { var respuestaError = new RespuestaBuscarAlojamientosEInfo() { Estado = EstadoRespuesta.CredencialesNoValidas }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientosEInfo: " + respuestaError.ToStringWithProperties(), traceType: Tracker.TraceType.Fatal); return(respuestaError); } if (peticion.FechaInicio == null || peticion.FechaInicio < DateTime.Today) { var respuestaError = new RespuestaBuscarAlojamientosEInfo() { Estado = EstadoRespuesta.ErrorParametro, MensajeEstado = "FechaInicio" }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientosEInfo: " + respuestaError.ToStringWithProperties(), traceType: Tracker.TraceType.Error); return(respuestaError); } if (peticion.FechaFin == null || peticion.FechaInicio >= peticion.FechaFin) { var respuestaError = new RespuestaBuscarAlojamientosEInfo() { Estado = EstadoRespuesta.ErrorParametro, MensajeEstado = "FechaFin" }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientosEInfo: " + respuestaError.ToStringWithProperties(), traceType: Tracker.TraceType.Error); return(respuestaError); } var usuario = dc.Usuarios.SingleOrDefault(u => u.IdUsuario == idUsuario); var encontrados = dc.GetAlojamientosConDisponibilidadV2( peticion.Habitacion1.GetValueOrDefault(), peticion.Habitacion2.GetValueOrDefault(), peticion.Habitacion3.GetValueOrDefault(), peticion.Habitacion4.GetValueOrDefault(), peticion.Habitacion5.GetValueOrDefault(), peticion.Habitacion6.GetValueOrDefault(), peticion.FechaInicio, peticion.FechaFin, ConvertirOrdenamiento(peticion.Orden), ciudad, provincia, ConvertirTipoAlojamiento(peticion.TipoAlojamiento), peticion.Nacionalidad, peticion.NombreAlojamiento) .Where(a => a.montoTotalEstimadoEnPesos > 0).ToArray(); if (encontrados.Length == 0) { var respuestaError = new RespuestaBuscarAlojamientosEInfo() { Estado = EstadoRespuesta.NoEncontrado }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientosEInfo: " + respuestaError.ToStringWithProperties(), traceType: Tracker.TraceType.Error); return(respuestaError); } else { var markup = 1 / ((1 - (usuario.MarkupAAgencia) / 100) * (1 - (usuario.MarkupAConsumidorFinal) / 100)); var cotizMonedaUsuario = ObtenerCotizacion(dc, usuario.IdMoneda); //Agregado por AM var alojamientosDisponibles = encontrados.Select(a => new InfoAlojamientoDisponibleCompleta() { Destino = new InfoDestino() { TipoDestino = TipoDestino.Ciudad, IdDestino = a.idCiudad.GetValueOrDefault(), NombreDestino = String.Concat(a.nombreCiudad, ", ", a.nombreProvincia) }, //Alojamiento = InfoAlojamiento(new PeticionInfoAlojamiento() // { // Usuario = peticion.Usuario, // Clave = peticion.Clave, // IdiomaDeseado = peticion.IdiomaDeseado, // IdAlojamiento = a.IdAlojamiento.GetValueOrDefault() // }).Alojamiento, Alojamiento = ObtenerInfoAlojamiento(dc.Alojamientos.SingleOrDefault(aloj => aloj.IdAlojamiento == a.idAloj), usuario.IdMoneda), TipoAlojamiento = ConvertirTipoAlojamiento(a.idTipoAloj), IdAlojamiento = a.idAloj.GetValueOrDefault(), Nombre = a.nombre, Moneda = ConvertirMoneda(usuario.IdMoneda), Cupo1 = a.cupoTotalDisponibleSingle, Cupo2 = a.cupoTotalDisponibleDoble, Cupo3 = a.cupoTotalDisponibleTriple, Cupo4 = a.cupoTotalDisponibleCuadruple, Cupo5 = a.cupoTotalDisponible5Personas, Cupo6 = a.cupoTotalDisponible6Personas, //Tarifa1 = Decimal.Round((decimal)(a.MontoMasBaratoPorDia1.GetValueOrDefault() * markup), 2), //Tarifa2 = Decimal.Round((decimal)(a.MontoMasBaratoPorDia2.GetValueOrDefault() * markup), 2), //Tarifa3 = Decimal.Round((decimal)(a.MontoMasBaratoPorDia3.GetValueOrDefault() * markup), 2), //Tarifa4 = Decimal.Round((decimal)(a.MontoMasBaratoPorDia4.GetValueOrDefault() * markup), 2), //Tarifa5 = Decimal.Round((decimal)(a.MontoMasBaratoPorDia5.GetValueOrDefault() * markup), 2), //Tarifa6 = Decimal.Round((decimal)(a.MontoMasBaratoPorDia6.GetValueOrDefault() * markup), 2) Tarifa1 = Decimal.Round((decimal)((a.montoUnidadSingleMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa2 = Decimal.Round((decimal)((a.montoUnidadDobleMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa3 = Decimal.Round((decimal)((a.montoUnidadTripleMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa4 = Decimal.Round((decimal)((a.montoUnidadCuadrupleMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa5 = Decimal.Round((decimal)((a.montoUnidad5PersonasMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2), Tarifa6 = Decimal.Round((decimal)((a.montoUnidad6PersonasMasBarataPorDia.GetValueOrDefault() * markup) * (ObtenerCotizacion(dc, (Guid)a.idMoneda) / cotizMonedaUsuario)), 2) }).ToArray(); foreach (var alojamientoDisponible in alojamientosDisponibles) { //var respuestaInfoCupos = InfoCuposAlojamiento(new PeticionInfoCuposAlojamiento // { // Usuario = peticion.Usuario, // Clave = peticion.Clave, // IdiomaDeseado = peticion.IdiomaDeseado, // IdAlojamiento = alojamientoDisponible.IdAlojamiento.GetValueOrDefault(), // FechaInicio = peticion.FechaInicio, // FechaFin = peticion.FechaFin // }); //if (respuestaInfoCupos.Estado != EstadoRespuesta.Ok) //{ // return new RespuestaBuscarAlojamientosEInfo() // { // Estado = EstadoRespuesta.ErrorInterno, // MensajeEstado = respuestaInfoCupos.MensajeEstado // }; //} var disponible = dc.GetCuposAlojamientoEnRangoFechaV2(1, 1, 1, 1, 1, 1, peticion.FechaInicio, peticion.FechaFin, alojamientoDisponible.IdAlojamiento, peticion.Nacionalidad).OrderBy( d => d.MONTOPROMEDIOPORDIA).Where(d => d.MONTOPROMEDIOPORDIA > 0).ToList(); var monedaAloj = ObtenerMoneda(dc, (Guid)alojamientoDisponible.IdAlojamiento); var cotizMonedaAloj = ObtenerCotizacion(dc, (Guid)monedaAloj); alojamientoDisponible.Alojamiento.Unidades = disponible.Where(d => d.CUPODISPONIBLE.GetValueOrDefault() > 0) .Select(d => new InfoUnidad() { IdUnidad = d.IDUNIDAD_ALOJ, Fecha = d.FECHA, NombreUnidad = d.NOMBRE, Personas = d.CANTPERSONAS.GetValueOrDefault(), Camas = d.CANTCAMAS.GetValueOrDefault(), Disponibles = d.CUPODISPONIBLE.GetValueOrDefault(), //MontoPorUnidad = Decimal.Round((decimal)((d.MONTOPROMEDIOPORDIA.GetValueOrDefault() * markup) * (cotizMonedaAloj / cotizMonedaUsuario)), 2), //Decimal.Round((decimal)(d.MontoPromedioPorDia.GetValueOrDefault() * markup), 2), }).ToArray(); //alojamientoDisponible.Alojamiento.Moneda = respuestaInfoCupos.Moneda; //alojamientoDisponible.Alojamiento.Unidades = new List<InfoUnidad>(respuestaInfoCupos.Unidades).ToArray(); } var respuesta = new RespuestaBuscarAlojamientosEInfo() { Estado = EstadoRespuesta.Ok, AlojamientosDisponibles = alojamientosDisponibles }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientosEInfo: Éxito"); Tracker.WriteTrace(operationNumber, "Respuesta: " + respuesta.ToStringWithProperties()); return(respuesta); } } } catch (Exception ex) { var respuestaError = new RespuestaBuscarAlojamientosEInfo() { Estado = EstadoRespuesta.ErrorInterno, MensajeEstado = string.Empty //ex.ToString() }; Tracker.WriteTrace(operationNumber, "Fin BuscarAlojamientosEInfo: " + respuestaError.ToStringWithProperties() + ex.Message, traceType: Tracker.TraceType.Fatal); Tracker.WriteTrace(operationNumber, "Stack Trace: " + ex.StackTrace, traceType: Tracker.TraceType.Fatal); Tracker.WriteTrace(operationNumber, "Inner Exception: " + ex.InnerException.Message, traceType: Tracker.TraceType.Fatal); return(respuestaError); } }