Пример #1
0
        private IList<DTODivisaoOficina> ObterDivisaoOficinas(Evento evento)
        {
            List<DTODivisaoOficina> oficinasDTO = new List<DTODivisaoOficina>();

            IList<Oficina> oficina = m_RepOficinas.ListarTodasComParticipantesPorEvento(evento);
            IList<InscricaoParticipante> participantesSemSala = m_RepOficinas.ListarParticipantesSemOficinaNoEvento(evento);
            IList<AtividadeInscricaoOficinasCoordenacao> coordenadores =
                 m_RepInscricoes.ListarTodasInscricoesAceitasPorAtividade<AtividadeInscricaoOficinasCoordenacao>(evento);


            oficinasDTO.AddRange(oficina.Select(x => new DTODivisaoOficina
            {
                Id = x.Id,
                Nome = x.Nome,
                Coordenadores = coordenadores
                                    .Where(c => c.OficinaEscolhida == x)
                                    .Select(c => c.Inscrito.ConverterBasico()),
                Participantes = x.Participantes
                                    .Select(i => i.ConverterBasico())
            }));

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

            return oficinasDTO;
        }
        public Stream GerarImpressoPDF(int idEvento)
        {
            Stream relatorio = new MemoryStream();

            ExecutarSeguramente(() =>
            {
                var evento = m_RepEventos.ObterEventoPeloId(idEvento);
                var salas  = m_RepOficinas.ListarTodasComParticipantesPorEvento(evento);
                var atividadesOficinasCoordenadores = m_RepInscricoes.ListarTodasInscricoesAceitasPorAtividade <AtividadeInscricaoOficinasCoordenacao>(evento);

                relatorio = m_GeradorRelDivisaoOficinas.Gerar(salas, atividadesOficinasCoordenadores);
            });

            return(relatorio);
        }
Пример #3
0
        public virtual IList <Oficina> Dividir()
        {
            var oficinas = mRepositorioOficinas.ListarTodasComParticipantesPorEvento(mEvento);

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

            var listaOrdenada = new List <OrdenaDivisao>();

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

            foreach (var oficina in oficinas)
            {
                oficina.RemoverTodosParticipantes();
            }

            foreach (var inscricao in participantesDividir)
            {
                int posicao = 1;
                foreach (var oficina in inscricao.Oficinas)
                {
                    listaOrdenada.Add(new OrdenaDivisao()
                    {
                        Oficina        = oficina,
                        Inscrito       = inscricao.Inscrito,
                        PosicaoOficina = posicao
                    });

                    posicao++;
                }
            }

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

                foreach (var grupo in inscricoesSelecionadas)
                {
                    var oficina = oficinas.First(a => a == grupo.Key);

                    if (oficina.NumeroTotalParticipantes == null ||
                        (oficina.NumeroTotalParticipantes != null && oficina.Participantes.Count() < oficina.NumeroTotalParticipantes))
                    {
                        var quantosInscritosIncluir = grupo.Count();

                        if (oficina.NumeroTotalParticipantes != null &&
                            oficina.Participantes.Count() + quantosInscritosIncluir >= oficina.NumeroTotalParticipantes)
                        {
                            quantosInscritosIncluir = oficina.NumeroTotalParticipantes.Value - oficina.Participantes.Count();
                        }

                        if (oficina.DeveSerParNumeroTotalParticipantes && quantosInscritosIncluir % 2 != 0)
                        {
                            quantosInscritosIncluir = quantosInscritosIncluir - 1;
                        }

                        for (var indice = 0; indice < quantosInscritosIncluir; indice++)
                        {
                            oficina.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(oficinas);
        }