예제 #1
0
        public async System.Threading.Tasks.Task <IHttpActionResult> Post3Async(HotelFiltro hotelFiltro)
        {
            var hotelManager = new HotelManagement();

            apiResponse = new ApiResponse();
            var hotels = await hotelManager.RetrieveAllByFiltroV2(hotelFiltro);

            apiResponse.Data = hotels;
            return(Ok(apiResponse));
        }
        public SqlOperation GetRetrieveAllByFiltroStatement(HotelFiltro hotelFiltro)
        {
            var operation = new SqlOperation {
                ProcedureName = $"RET_ALL_HOTELES_DISPONIBLES_PR"
            };

            operation.AddVarcharParam("HOTEL_NOMBRE", hotelFiltro.HotelNombre);
            operation.AddIntParam("TIPO_HABITACION_PERSONAS", hotelFiltro.TipoHabitacionPersonas);
            operation.AddDateParam("FECHA_INICIO", hotelFiltro.FechaInicio);
            operation.AddDateParam("FECHA_FIN", hotelFiltro.FechaFin);
            return(operation);
        }
        public async Task <List <object> > RetrieveAllByFiltroV2(HotelFiltro hotelFiltro)
        {
            hotelFiltro.HotelNombre = hotelFiltro.HotelNombre ?? "";
            var roomsManagement = new AvailableRoomsManagement();
            var hoteles         = crudHotel.RetrieveAllByFiltro(hotelFiltro);

            Task <List <AvailableRooms> >[] tasks = new Task <List <AvailableRooms> > [hoteles.Count];

            Task <List <AvailableRooms> > getAvailableRooms(int idHotel,
                                                            int cantPersonas,
                                                            DateTime checkin,
                                                            DateTime checkout)
            {
                return(Task.Run(() => roomsManagement.RetrieveAll(idHotel, cantPersonas, checkin, checkout)));
            }

            for (int ctr = 0; ctr < hoteles.Count; ctr++)
            {
                var hotel = hoteles[ctr];
                tasks[ctr] = Task.Run(async() => {
                    // execute get rooms
                    return(await getAvailableRooms(hotel.Id, hotelFiltro.TipoHabitacionPersonas, hotelFiltro.FechaInicio, hotelFiltro.FechaFin));
                });
            }


            Task.WaitAll(tasks.ToArray());
            var hotelesResult = new List <object>(hoteles.Count);

            for (int i = 0; i < tasks.Length; i++)
            {
                hotelesResult.Add(new {
                    hotel          = hoteles[i],
                    availableRooms = tasks[i].Result
                });
            }

            return(hotelesResult);
        }
        public List <Hotel> RetrieveAllByFiltro(HotelFiltro hotelFiltro)
        {
            try
            {
                var lstResult = SqlDao.GetInstance()
                                .ExecuteQueryProcedure(
                    hotelMapper.GetRetrieveAllByFiltroStatement(hotelFiltro)
                    );

                if (lstResult.Count <= 0)
                {
                    return(default(List <Hotel>));
                }

                var obj = EntityObjectMapper.BuildObjects(lstResult);

                return(obj.Cast <Hotel>().ToList());
            }
            catch (Exception e)
            {
                ManageException(e);
            }
            return(null);
        }
        public List <Hotel> RetrieveAllByFiltro(HotelFiltro hotelFiltro)
        {
            hotelFiltro.HotelNombre = hotelFiltro.HotelNombre ?? "";

            return(crudHotel.RetrieveAllByFiltro(hotelFiltro));
        }