示例#1
0
        public List <ReservaSugestão> AnalisarSugestao(Reserva reserva)
        {
            // inicia Sugestões para retorno
            var sugestoes = new List <ReservaSugestão>();

            // Para cada sala
            foreach (var sala in this.listaSalas)
            {
                // Verifica as sugestão e retorna uma lista
                var tempSugestoes = sala.VerificarSugestao(reserva);
                // Inisere as sugestoes para retorno
                foreach (var sugestao in tempSugestoes)
                {
                    // Adiciona as sugestões
                    sugestoes.Add(sugestao);
                    // verifica se é maior ou igual a 3 e as retorna
                    if (sugestoes.Count >= 3)
                    {
                        return(sugestoes);
                    }
                }
            }
            return(sugestoes);
        }
示例#2
0
        /*{
         *   //Console.WriteLine("entrou em VerificarDisponibilidade()");
         *   if (this.ReservasCadastradas.Count == 0)
         *   {
         *       return true;
         *   }
         *   else
         *   {
         *       foreach (var reservaCadastrada in this.ReservasCadastradas)
         *       {
         *           //  OCORRE ANTES DA RESERVA CADASTRADA
         *           if ((novaReserva.DataInicio < reservaCadastrada.DataInicio) && (novaReserva.DataFim <= reservaCadastrada.DataInicio))
         *           {
         *               return true;
         *           }
         *
         *           //  OCORRE DEPOIS DA RESERVA CADASTRADA
         *           if ((novaReserva.DataInicio >= reservaCadastrada.DataFim) && (novaReserva.DataFim > reservaCadastrada.DataFim))
         *           {
         *               return true;
         *           }
         *       }
         *   }
         *
         *   return false;
         * }*/

        public List <ReservaSugestão> VerificarSugestao(Reserva reserva)
        {
            // Cria uma lista para retorno
            var listaRetorno = new List <ReservaSugestão>();
            // Calcula o tempo de duranção da reserva a ser efetuada
            var timeSpanReserva = reserva.DataFim.Subtract(reserva.DataInicio);

            // Verifica se a sala possui todos os requetimentos de quantidade, intenet e tv
            if (!(this.Capacidade >= reserva.QuantidadePessoas) && (this.PossuiInternet == reserva.PossuiInternet) && (this.PossuiTvWebcam == reserva.PossuiTvWebcam))
            {
                // Caso não possua, retorna a lista de sugestões vazias
                return(listaRetorno);
            }

            // Se possui todas as caracteristicas procura entre os horarias de cada reserva ja cadastrada se o tempo entre elas pode é maior que a a nova reserva
            // Se possui um intervalor entre as cadastradas que possa ser utilizado para a nova reserva
            for (int i = 0; i < this.ReservasCadastradas.Count() - 1; i++) // -1 no contador para não dar erro em this.ReservasCadastradas[i+1]
            {
                // Calcular a diferença de tempo entre a hora final da palesta e a procima palestra ( inicial[i+1] - final[i]
                var timeSpanCadastrado = this.ReservasCadastradas[i + 1].DataInicio.Subtract(this.ReservasCadastradas[i].DataFim);
                // Verifica se o tempo da nova reserva é menor que o intervado entre as reservas
                if (timeSpanCadastrado >= timeSpanReserva)
                {
                    // Preenche dados
                    DateTime dataInicial = this.ReservasCadastradas[i].DataFim;
                    DateTime dataFinal   = dataInicial.Add(timeSpanReserva);
                    int      quantidade  = reserva.QuantidadePessoas;
                    bool     tv          = reserva.PossuiTvWebcam;
                    bool     internet    = reserva.PossuiInternet;
                    int      idSala      = this.IdSala;
                    // Adiciona sugestão para retorno
                    listaRetorno.Add(new ReservaSugestão(dataInicial, dataFinal, quantidade, internet, tv, idSala));
                }
            }
            return(listaRetorno);
        }
示例#3
0
        public Reserva CriarReserva(string dados)
        {
            Reserva  reserva        = new Reserva();
            DateTime validacaoData1 = DateTime.Now.AddDays(1);
            DateTime validacaoData2 = DateTime.Now.AddDays(-40);

            //DateTime validacaoData2 = DateTime.Now.DayOfWeek
            string[] dadosReserva;

            dadosReserva = dados.Split(';');
            try
            {
                reserva.DataInicio = DateTime.ParseExact(dadosReserva[0] + " " + dadosReserva[1], "dd-MM-yyyy HH:mm", CultureInfo.InvariantCulture);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Erro ao converter data inicial: " + exc.Message);
                return(null);
            }

            try
            {
                reserva.DataFim = DateTime.ParseExact(dadosReserva[2] + " " + dadosReserva[3], "dd-MM-yyyy HH:mm", CultureInfo.InvariantCulture);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Erro ao converter data final: " + exc.Message);
                return(null);
            }

            //  Validação de data para certificar que reserva não dura mais que 8horas
            if ((reserva.DataFim - reserva.DataInicio).TotalHours >= 8)
            {
                Console.WriteLine("Erro ao armazenar datas! Duração da reserva não pode durar mais que 8h!");
                return(null);
            }

            //  Validação de data para certificar que data final é maior que data inicial
            if (reserva.DataFim <= reserva.DataInicio)
            {
                Console.WriteLine("Erro ao armazenar datas! Data final é igual ou menor que data inicial!");
                return(null);
            }

            //  Validação de data para certificar que reserva está sendo feita 24h antes
            if (reserva.DataInicio <= validacaoData1)
            {
                Console.WriteLine("Erro ao armazenar datas! Data da reserva só pode ser feita com no mínimo 24h de antecedência!");
                return(null);
            }

            //  Validação de data para certificar que reserva está sendo feita com no máximo 40 dias de antecedência
            if (reserva.DataInicio < validacaoData2)
            {
                Console.WriteLine("Erro ao armazenar datas! Data da reserva só pode ser feita com no máximo 40 dias de antecedência!");
                return(null);
            }

            //  Validação de data da reserva para dias úteis
            if ((reserva.DataInicio.DayOfWeek == DayOfWeek.Saturday) || (reserva.DataInicio.DayOfWeek == DayOfWeek.Sunday))
            {
                Console.WriteLine("Erro ao armazenar datas! Data da reserva só pode ser feita em dias úteis!");
                return(null);
            }

            try
            {
                reserva.QuantidadePessoas = Int32.Parse(dadosReserva[4]);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Erro ao converter quantidade de pessoas: " + exc.Message);
                return(null);
            }

            try
            {
                if (dadosReserva[5].ToUpper().Trim().CompareTo("SIM") == 0)
                {
                    reserva.PossuiInternet = true;
                }
                else if (dadosReserva[5].ToUpper().Trim().CompareTo("NÃO") == 0)
                {
                    reserva.PossuiInternet = false;
                }
                else
                {
                    Console.WriteLine("Erro ao converter flag de internet");
                    return(null);
                }
            }
            catch (Exception exc)
            {
                Console.WriteLine("Erro ao converter flag de internet: " + exc.Message);
                return(null);
            }

            try
            {
                if (dadosReserva[6].ToUpper().Trim().CompareTo("SIM") == 0)
                {
                    reserva.PossuiTvWebcam = true;
                }
                else if (dadosReserva[6].ToUpper().Trim().CompareTo("NÃO") == 0)
                {
                    reserva.PossuiTvWebcam = false;
                }
                else
                {
                    Console.WriteLine("Erro ao converter flag de tv/webcam");
                    return(null);
                }
            }
            catch (Exception exc)
            {
                Console.WriteLine("Erro ao converter flag de tv/webcam: " + exc.Message);
                return(null);
            }

            return(reserva);
        }
示例#4
0
 //  MÉTODOS
 public void AgendarReserva(Reserva reserva)
 {
     this.ReservasCadastradas.Add(reserva);
 }