示例#1
0
        public OTA_HotelResNotifRS reservations(OTA_HotelResNotifRQ request)
        {
            OTA_HotelResNotifRS response = new OTA_HotelResNotifRS();

            response = procesa(request);
            return(response);
        }
示例#2
0
        // POST: api/Reservations
        public HttpResponseMessage Post(HttpRequestMessage request)
        {
            String     input = "";
            string     response = "", numeroBooking = "";
            Serializer ser = new Serializer();

            var doc = new XmlDocument();

            doc.Load(request.Content.ReadAsStreamAsync().Result);

            XmlNodeList nodeList = doc.GetElementsByTagName("HotelReservationID");

            foreach (XmlNode node in nodeList)
            {
                if (node.Attributes.GetNamedItem("ResID_Source").Value == "BookingChannel")
                {
                    numeroBooking = node.Attributes.GetNamedItem("ResID_Value").Value;
                }
            }

            File.WriteAllText(@"C:\ASP\WS\InterfaceOTA\documents\" + numeroBooking + ".xml", doc.InnerXml);

            XmlNodeList elemList = doc.GetElementsByTagName("soapenv:Body");

            input = elemList[0].InnerXml;

            XmlNodeList nodeAgencia = doc.GetElementsByTagName("CompanyName");

            try
            {
                if (nodeAgencia[0].InnerText == "BestDay" || nodeAgencia[0].InnerText == "PriceTravel")
                {
                    OTA_HotelResNotifRQ   soap        = ser.Deserialize <OTA_HotelResNotifRQ>(input);
                    ReservationRepository reservation = new ReservationRepository();

                    response = reservation.ProcesaReservacion(soap);
                }
                else
                {
                    return(Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, new HttpError("This Channel isn't available")));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            var res = Request.CreateResponse(HttpStatusCode.OK);

            res.Content = new StringContent(response, Encoding.UTF8, "text/xml");
            return(res);
        }
示例#3
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);
        }