예제 #1
0
        public List <Roteiro> ObterRoteirosPorAtividades(List <Atividade> atividades)
        {
            List <Roteiro> roteiros = new List <Roteiro>();

            if (atividades == null || atividades.Count <= 0)
            {
                return(roteiros);
            }

            Roteiro roteiroPadrao = _listaBus.RoteiroPadrao.FirstOrDefault(x => x.Setor == atividades[0].SetorId);

            if (roteiroPadrao != null)
            {
                roteiroPadrao = ObterSimplificado(roteiroPadrao.Id);
            }

            List <String> titulos = new List <String>();

            foreach (var atividade in atividades)
            {
                foreach (var finalidade in atividade.Finalidades)
                {
                    finalidade.AtividadeId      = atividade.Id;
                    finalidade.AtividadeNome    = atividade.NomeAtividade;
                    finalidade.AtividadeSetorId = atividade.SetorId;

                    String modeloTituloNaoAdicionadoRoteiro = _da.ModeloTituloNaoAdicionadoRoteiro(finalidade);
                    if (!String.IsNullOrWhiteSpace(modeloTituloNaoAdicionadoRoteiro))
                    {
                        titulos.Add("\"" + modeloTituloNaoAdicionadoRoteiro + "\"");
                        continue;
                    }

                    Roteiro roteiroAux = _da.ObterRoteirosPorAtividades(finalidade);
                    if (roteiroAux == null)
                    {
                        roteiroPadrao.AtividadeTexto = atividade.NomeAtividade;
                        roteiros.Add(roteiroPadrao);
                        continue;
                    }

                    roteiros.Add(roteiroAux);
                }
            }

            if (titulos.Count > 0)
            {
                Validacao.Add(Mensagem.Roteiro.TituloNaoAdicionadoRoteiroInterno(Mensagem.Concatenar(titulos)));
            }

            #region Faz a magica de agrupar os resultados

            roteiros = roteiros.GroupBy(x => x.Id).Select(y => new Roteiro
            {
                Id             = y.First().Id,
                Nome           = y.First().Nome,
                VersaoAtual    = y.First().VersaoAtual,
                Tid            = y.First().Tid,
                AtividadeTexto = y.Select(w => w.AtividadeTexto).Distinct().Aggregate((total, atual) => total + " / " + atual)
            }).ToList();

            #endregion

            return(roteiros);
        }