Beispiel #1
0
        public Stream GerarImpressoPDF(int idEvento)
        {
            Stream relatorio = new MemoryStream();

            ExecutarSeguramente(() =>
            {
                var evento = m_RepEventos.ObterEventoPeloId(idEvento);
                var salas  = m_RepSalasEstudo.ListarTodasSalasEstudoComParticipantesDoEvento(evento);
                var atividadesSalasCoordenadores = m_RepInscricoes.ListarTodasInscricoesAceitasPorAtividade <AtividadeInscricaoSalaEstudoCoordenacao>(evento);

                relatorio = m_GeradorRelDivisaoSalas.Gerar(salas, atividadesSalasCoordenadores);
            });

            return(relatorio);
        }
Beispiel #2
0
        private IList <DTODivisaoSalaEstudo> ObterDivisaoSalas(Evento evento)
        {
            Dictionary <EnumModeloDivisaoSalasEstudo, Func <Evento, IList <InscricaoParticipante> > > pesquisasParticipantesSemSala =
                new Dictionary <EnumModeloDivisaoSalasEstudo, Func <Evento, IList <InscricaoParticipante> > >()
            {
                { EnumModeloDivisaoSalasEstudo.PorIdadeCidade, m_RepSalas.ListarParticipantesSemSalaEstudoNormal },
                { EnumModeloDivisaoSalasEstudo.PorOrdemEscolhaInscricao, m_RepSalas.ListarParticipantesSemSalaEstudoPorOrdem },
            };

            List <DTODivisaoSalaEstudo> salasDTO = new List <DTODivisaoSalaEstudo>();

            IList <SalaEstudo>            salas = m_RepSalas.ListarTodasSalasEstudoComParticipantesDoEvento(evento);
            IList <InscricaoParticipante> participantesSemSala            = pesquisasParticipantesSemSala[evento.ConfiguracaoSalaEstudo.Value](evento);
            IList <AtividadeInscricaoSalaEstudoCoordenacao> coordenadores =
                m_RepInscricoes.ListarTodasInscricoesAceitasPorAtividade <AtividadeInscricaoSalaEstudoCoordenacao>(evento);


            salasDTO.AddRange(salas.Select(x => new DTODivisaoSalaEstudo
            {
                Id            = x.Id,
                Nome          = x.Nome,
                Coordenadores = coordenadores
                                .Where(c => c.SalaEscolhida == x)
                                .Select(c => c.Inscrito.ConverterBasico()),
                Participantes = x.Participantes
                                .Select(i => i.ConverterBasico())
            }));

            if (participantesSemSala.Count > 0)
            {
                salasDTO.Add(new DTODivisaoSalaEstudo
                {
                    Id            = 0,
                    Nome          = "Participantes sem sala definida",
                    Coordenadores = new List <DTOBasicoInscricao>(),
                    Participantes = new List <DTOBasicoInscricao>(
                        participantesSemSala.Select(x => x.ConverterBasico()))
                });
            }

            return(salasDTO);
        }
        public virtual IList <SalaEstudo> Dividir()
        {
            var salas = mRepositorioSalas.ListarTodasSalasEstudoComParticipantesDoEvento(mEvento);

            if (salas.Count == 0)
            {
                throw new InvalidOperationException("Não há salas para realizar a divisão.");
            }

            var listaOrdenada = new List <OrdenaDivisao>();

            var participantesDividir = mRepositorioInscricoes
                                       .ListarTodasInscricoesAceitasPorAtividade <AtividadeInscricaoSalaEstudoOrdemEscolha>(mEvento)
                                       .ToList();

            int capacidadeParticipantesPorSala = participantesDividir.Count / salas.Count;

            if (participantesDividir.Count % salas.Count != 0)
            {
                capacidadeParticipantesPorSala = capacidadeParticipantesPorSala + 1;
            }

            foreach (var afrac in salas)
            {
                afrac.RemoverTodosParticipantes();
            }

            foreach (var inscricao in participantesDividir)
            {
                int posicao = 1;
                foreach (var sala in inscricao.Salas)
                {
                    listaOrdenada.Add(new OrdenaDivisao()
                    {
                        Sala        = sala,
                        Inscrito    = inscricao.Inscrito,
                        PosicaoSala = posicao
                    });

                    posicao++;
                }
            }

            for (var posicao = 1; posicao <= salas.Count; posicao++)
            {
                var inscricoesSelecionadas = listaOrdenada
                                             .Where(i => i.PosicaoSala == posicao)
                                             .OrderBy(i => i.Sala.Id)
                                             .ThenBy(i => i.Inscrito.DataRecebimento)
                                             .GroupBy(x => x.Sala);

                foreach (var grupo in inscricoesSelecionadas)
                {
                    var sala = salas.First(a => a == grupo.Key);

                    if (sala.Participantes.Count() < capacidadeParticipantesPorSala)
                    {
                        var quantosInscritosIncluir = grupo.Count();

                        if (sala.Participantes.Count() + quantosInscritosIncluir >= capacidadeParticipantesPorSala)
                        {
                            quantosInscritosIncluir = capacidadeParticipantesPorSala - sala.Participantes.Count();
                        }

                        for (var indice = 0; indice < quantosInscritosIncluir; indice++)
                        {
                            sala.AdicionarParticipante(grupo.ElementAt(indice).Inscrito);
                            listaOrdenada.RemoveAll(l => l.Inscrito.Id == grupo.ElementAt(indice).Inscrito.Id);
                        }
                    }
                }

                foreach (var item in inscricoesSelecionadas.SelectMany(grupo => grupo))
                {
                    listaOrdenada.Remove(item);
                }
            }

            return(salas);
        }