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); }
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); }