private IList <DTODivisaoQuarto> ObterDivisaoQuartos(int idEvento) { List <DTODivisaoQuarto> quartosDTO = new List <DTODivisaoQuarto>(); IList <Quarto> quartos = m_RepQuartos.ListarTodosQuartosPorEventoComParticipantes(idEvento); IList <Inscricao> listaInscricoes = m_RepInscricoes.ListarTodasInscricoesAceitasComPessoasDormemEvento(idEvento); var inscritosNosQuartos = quartos.SelectMany(x => x.Inscritos).Select(x => x.Inscricao); var inscritosSemQuartos = listaInscricoes.Where(x => !inscritosNosQuartos.Contains(x)); quartosDTO.AddRange(quartos.Select(x => new DTODivisaoQuarto { Id = x.Id, Nome = x.Nome, Capacidade = x.Capacidade, EhFamilia = x.EhFamilia, Sexo = x.Sexo, Coordenadores = x.Inscritos.Where(y => y.EhCoordenador).Select(y => y.Inscricao.ConverterBasicoResp()).ToList(), Participantes = x.Inscritos.Where(y => !y.EhCoordenador).Select(y => y.Inscricao.ConverterBasicoResp()).ToList() })); if (inscritosSemQuartos.Count() > 0) { quartosDTO.Add(new DTODivisaoQuarto { Id = 0, Nome = "Participantes sem quarto definido", Capacidade = null, EhFamilia = false, Sexo = EnumSexoQuarto.Misto, Coordenadores = new List <DTOBasicoInscricaoResp>(), Participantes = new List <DTOBasicoInscricaoResp>( inscritosSemQuartos.Select(x => x.ConverterBasicoResp()).ToList()) }); } return(quartosDTO); }
public IList <Quarto> Dividir() { var quartos = mRepQuartos.ListarTodosQuartosPorEvento(mEvento.Id); var listaInscricoes = mRepInscricoes.ListarTodasInscricoesAceitasComPessoasDormemEvento(mEvento.Id); var criancas = listaInscricoes .Where(x => x is InscricaoInfantil && x.Pessoa.CalcularIdadeEmAnos(mEvento.PeriodoRealizacaoEvento.DataInicial) <= 6) .Select(x => (InscricaoInfantil)x) .ToList(); var inscricoesFamilia = new List <InscricaoFamilia>(); foreach (var crianca in criancas) { Inscricao responsavel1 = null; Inscricao responsavel2 = null; Inscricao responsavelDefinido = null; if (crianca.InscricaoResponsavel1.DormeEvento) { responsavel1 = crianca.InscricaoResponsavel1; } if (crianca.InscricaoResponsavel2 != null && crianca.InscricaoResponsavel2.DormeEvento) { responsavel2 = crianca.InscricaoResponsavel2; } if ((responsavel1 != null && responsavel1.Pessoa.Sexo == crianca.Pessoa.Sexo) || (responsavel2 != null && responsavel2.Pessoa.Sexo == crianca.Pessoa.Sexo)) { if (responsavel1 != null && responsavel1.Pessoa.Sexo == crianca.Pessoa.Sexo) { responsavelDefinido = responsavel1; } else { responsavelDefinido = responsavel2; } } else if (responsavel1 != null) { responsavelDefinido = responsavel1; } else { responsavelDefinido = responsavel2; } var item = inscricoesFamilia.SingleOrDefault(x => x.Responsavel == responsavelDefinido); if (item != null) { item.Criancas.Add(crianca); } else { var familia = new InscricaoFamilia(); familia.Responsavel = responsavelDefinido; familia.Criancas = new List <InscricaoInfantil>() { crianca }; inscricoesFamilia.Add(familia); listaInscricoes.Remove(responsavelDefinido); } listaInscricoes.Remove(crianca); } var inscritosGeral = listaInscricoes .Where(x => !(x is InscricaoInfantil && x.Pessoa.CalcularIdadeEmAnos(mEvento.PeriodoRealizacaoEvento.DataInicial) <= 6)) .ToList(); var inscritosGeralPorSexo = inscritosGeral.GroupBy(x => x.Pessoa.Sexo); var quartosGeral = quartos.Where(x => !x.EhFamilia); var quartosFamilia = quartos.Where(x => x.EhFamilia); /*var validacao = new ValidacaoDivisaoQuartos(); * validacao.ValidarGeral(quartosGeral, inscritosGeralPorSexo); * validacao.ValidarFamilia(quartosFamilia, inscricoesFamilia);*/ foreach (var quarto in quartos) { quarto.RemoverTodosInscritos(); } RealizarDivisaoGeral(quartosGeral, inscritosGeralPorSexo); RealizarDivisaoFamilia(quartosFamilia, inscricoesFamilia); return(quartos); }