private bool InsertarNombre(Freserno frn, MapeoHoteles mph) { UConnection DB = new UConnection(mph.Hotel_ip, mph.Hotel_cn, mph.Hotel_un, mph.Hotel_pw); string sql = ""; int filas = 0; sql = "insert into freserno (VN_RESERVA,VN_SECUENCIA,VN_APELLIDO,VN_NOMBRE) VALUES (" + "'" + frn.Vn_reserva + "'," + "'" + frn.Vn_secuencia + "'," + "'" + frn.Vn_apellido + "'," + "'" + frn.Vn_nombre + "')"; bool ok = DB.EjecutaSQL(sql, ref filas); DB.Dispose(); return(filas > 0); }
private OTA_HotelResNotifRS procesa(OTA_HotelResNotifRQ reservation) { Reservacion rv = new Reservacion(); List <HotelReservationIDrs> reservations = new List <HotelReservationIDrs>(); // rutina momentanea para guardar el xml enviado var StringWriter = new System.IO.StringWriter(); var serializer = new XmlSerializer(reservation.GetType()); serializer.Serialize(StringWriter, reservation); try { rv.Rva_echotoken = reservation.EchoToken; foreach (HotelReservation g in reservation.HotelReservations.HotelReservation) { switch (g.ResStatus) { case "Booked": { rv.Rva_action = g.ResStatus; rv.Rva_uniqueID = g.UniqueID.ID; rv.Rva_ResID_Type = g.UniqueID.Type; rv.Rva_ResID_Source = g.UniqueID.ID_Context; rv.Rva_create_datetime = Convert.ToDateTime(g.CreateDateTime); foreach (Service sv in g.Services.Service) { rv.Rva_servicio = sv.ServiceDetails.ServiceDescription.Text; rv.Rva_serv_price_type = sv.ServicePricingType; } foreach (Source s in g.POS.Source) { rv.Rva_agencia_obees = s.PseudoCityCode; rv.Rva_companycode_obees = s.BookingChannel.CompanyName.Code; rv.Rva_codecontext_obees = s.BookingChannel.CompanyName.CodeContext; rv.Rva_chanelname_obees = s.BookingChannel.CompanyName.Value; } if (!Util.isNull(g.RoomStays.RoomStay)) { foreach (RoomStay rs in g.RoomStays.RoomStay) { rv.Rva_llegada = Convert.ToDateTime(rs.TimeSpan.Start); rv.Rva_salida = Convert.ToDateTime(rs.TimeSpan.End); foreach (RoomRate rr in rs.RoomRates.RoomRate) { rv.Rva_hab_renta = rr.RoomTypeCode; rv.Rva_plan = rr.RatePlanCode; rv.Rva_grupo = rr.GroupCode; rv.Rva_tarifa = rr.RoomTypeCode; rv.Rva_moneda = rr.Total.CurrencyCode; rv.Rva_importe = rr.Total.AmountAfterTax; } foreach (GuestCount gc in rs.GuestCounts.GuestCount) { // valido los adultos - juniors - menores - bebes if (gc.AgeQualifyingCode == 10) { rv.Rva_adulto = gc.Count; } else { // junior if (gc.Age >= 12 && gc.Age <= 17) { rv.Rva_junior = gc.Count; } else if (gc.Age >= 3 && gc.Age <= 11) // menor { rv.Rva_menor = gc.Count; } else { rv.Rva_bebe = gc.Count; } } } foreach (RatePlan rp in rs.RatePlans.RatePlan) { rv.Rva_planindicador = Convert.ToBoolean(rp.MealsIncluded.MealPlanIndicator); rv.Rva_plancode = rp.MealsIncluded.MealPlanCodes; rv.Rva_tipo_garantia = rp.Guarantee.GuaranteeType; } } } foreach (ResGuest rg in g.ResGuests.ResGuest) { // si la bandera es true, quiere decir que es el huesped principal if (rg.PrimaryIndicator == "true") { rv.Rva_sec = "1"; } else { rv.Rva_sec = rg.ResGuestRPH; } foreach (ProfileInfo pi in rg.Profiles.ProfileInfo) { rv.Rva_nombre = pi.Profile.Customer.PersonName.GivenName; rv.Rva_apell = pi.Profile.Customer.PersonName.Surname; rv.Rva_email = pi.Profile.Customer.Email; rv.Rva_pais = pi.Profile.Customer.Address.CountryName.Code; UConnection DB = new UConnection(Properties.Settings.Default.ipBD, Properties.Settings.Default.serverBD, Properties.Settings.Default.usuarioBD, Properties.Settings.Default.passBD); string sql = ""; int filas = 0; sql = "insert into OBNOMBRES (ON_RESERVA,ON_SECUENCIA,ON_APELLIDO,ON_NOMBRE) VALUES (" + "'" + g.UniqueID.ID + "'," + "'" + rv.Rva_sec + "'," + "'" + rv.Rva_apell + "'," + "'" + rv.Rva_nombre + "')"; bool ok = DB.EjecutaSQL(sql, ref filas); DB.Dispose(); if (filas == 0) { rv.Rva_error = "OCURRIO UN ERROR EN EL GUARDADO DE NOMBRES: " + sql; return(null); } } } rv.Rva_hotel_renta = g.ResGlobalInfo.BasicPropertyInfo.HotelCode; rv.Rva_chaincode = g.ResGlobalInfo.BasicPropertyInfo.ChainCode; rv.Rva_importe = g.ResGlobalInfo.Total.AmountAfterTax; foreach (Comment cm in g.ResGlobalInfo.Comments.Comment) { rv.Rva_notas = cm.Text.Value; } // inserto el request completo como referencia bool ok2 = GuardaReservaOMNI(rv); DateTime Hoy = new DateTime(); fecha_actual = Hoy.ToString(); // guardado temporal del xml en el servidor File.WriteAllText(@"C:\AppServ\www\interface_ota\docs\" + rv.Rva_uniqueID + ".xml", StringWriter.ToString()); ///////////////////////////////////////////////////////// primera fase //////////////////////////////////////////////////////////////////////////////// int stop = 0; // un bloqueo momentaneo para no afectar reservas reales if (ok2) { // obtengo los parametros de base de datos del hotel a donde va la reserva MapeoHoteles mh = new MapeoHoteles(); mh = ObtenerParamsBDHotel(g.ResGlobalInfo.BasicPropertyInfo.HotelCode); // verifico si existen parametros para este hotel if (mh.Hotel_cn != null) { // obtengo el numero de reservacion rv.Rva_oasis_rva = ObtenerIdReservacion(mh); if (!string.IsNullOrEmpty(rv.Rva_oasis_rva)) { Freserno frn = new Freserno(); frn.Vn_reserva = rv.Rva_oasis_rva; // una vez que ya tengo el numero de reservacion, guardo primero los nombres en freserno foreach (ResGuest rg2 in g.ResGuests.ResGuest) { // si la bandera es true, quiere decir que es el huesped principal if (rg2.PrimaryIndicator == "true") { frn.Vn_secuencia = 1; } else { frn.Vn_secuencia = Convert.ToInt16(rg2.ResGuestRPH); } foreach (ProfileInfo pi2 in rg2.Profiles.ProfileInfo) { frn.Vn_nombre = pi2.Profile.Customer.PersonName.GivenName; frn.Vn_apellido = pi2.Profile.Customer.PersonName.Surname; bool ok6 = InsertarNombre(frn, mh); } } // valido el plan switch (rv.Rva_plancode) { case 1: rv.Rva_mealplan = "AI"; break; case 14: rv.Rva_mealplan = "EP"; break; case 19: rv.Rva_mealplan = "DI"; break; default: rv.Rva_mealplan = "NA"; break; } // CONSULTO EL CODIGO DE LA AGENCIA por su canal y plan de comida rv.Rva_agen = ObtenerCodigoAgencia(rv.Rva_chanelname_obees, rv.Rva_mealplan); // obtengo los datos de la agencia Agencia ag = new Agencia(); ag = ObtenerDatosAgencia(rv.Rva_agen, mh); rv.Rva_pais = ag.Pais; rv.Rva_may = ag.Mayorista; // verifico el timpo de huesped switch (rv.Rva_may) { case "MEX": case "BRA": case "SDA": { if (rv.Rva_agen.Substring(0, 2) == "FI" || rv.Rva_agen.Substring(0, 2) == "BK") { rv.Rva_tipo_huesped = "WB"; } else { rv.Rva_tipo_huesped = "EM"; } break; } case "COR": case "USO": { rv.Rva_tipo_huesped = "CO"; break; } case "DIR": case "AME": case "EUR": case "SUD": { rv.Rva_tipo_huesped = "WB"; break; } case "INT": { rv.Rva_tipo_huesped = "CE"; break; } } // tipo de huesped // diferencia de fechas para determinar las noches System.TimeSpan ts = Convert.ToDateTime(rv.Rva_salida) - Convert.ToDateTime(rv.Rva_llegada); rv.Rva_noches = ts.Days; // verifico la fecha del prepago, por el momento queda null //if (ag.Dias_prepago > 0) //{ // // obtengo la fecha del prepago //} // obtengo el tipo de cambio por la moneda enviada rv.Rva_tc = ObtenerTipoCambio(rv.Rva_moneda, mh); // inserto la cabecera en freserva bool ok8 = InsertaReserva(rv, mh); HotelReservationIDrs hris = new HotelReservationIDrs(); hris.ResID_Type = "10"; hris.ResID_Value = rv.Rva_oasis_rva; hris.ResID_Source = "PMS"; reservations.Add(hris); //rv.Rva_oasis_rva = Reserva; rv.Rva_oasis_errcode = ErrorCode; rv.Rva_oasis_errdesc = ErrDesc; } else { // guardo el proceso que falló al tratar de obtener el id de la reserva bool ok5 = GuardarSuceso(mh.Hotel_siglas, rv.Rva_uniqueID, "NO SE PUDO OBTENER EL ID DE LA RESERVA PARA ESTE HOTEL"); rv.Rva_error = "OCURRIO UN ERROR EN EL GUARDADO DE LA RESERVA."; return(obtenerMensajeError(rv, reservations)); } } else { // guardo el proceso que falló al tratar de OBTENER los parametros de conexion para el hotel bool ok3 = GuardarSuceso(rv.Rva_hotel_renta, rv.Rva_uniqueID, "NO SE OBTUVIERON PARAMETROS DE BASE DE DATOS PARA EL HOTEL"); rv.Rva_error = "OCURRIO UN ERROR EN EL GUARDADO DE LA RESERVA."; return(obtenerMensajeError(rv, reservations)); } // parametros de conexion del hotel } else { // guardo el proceso que falló al tratar de guardar en la principal, tal cual la envió Omnibees // SE PONE MENSAJE PROVISIONAL PARA ANALIZAR LOS XML ENVIADOS POR OMNI bool ok4 = GuardarSuceso(rv.Rva_hotel_renta, rv.Rva_uniqueID, "SE OBTUVO EL XML SATISFACTORIAMENTE"); rv.Rva_error = "SE RECIBIO LA RESERVACION SATISFACTORIAMENTE."; return(obtenerMensajeError(rv, reservations)); } // inserta tabla principal break; } case "Modified": { break; } case "Cancelled": { break; } } // accion de la reserva resstatus } // hotelreservation return(obtenerMensajeSatisfaccion(rv, reservations)); } catch (Exception ex) { rv.Rva_error = ex.Message; } return(null); }