Ejemplo n.º 1
0
        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);
        }