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); }
/*{ * //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); }
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); }
// MÉTODOS public void AgendarReserva(Reserva reserva) { this.ReservasCadastradas.Add(reserva); }