//setar no constructor se tiver algum filtro. public static string Carrega() { //primeira linha é o cabeçalho StringBuilder objStrSaida = new StringBuilder(); objStrSaida.AppendLine("COD_CARGO;COD_MACRO_CARGO;DSC_CARGO"); //CABECALHO //Cria o data context gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //linhas nativas foreach (Negocio.ORG_CARGO o in objDs.ORG_CARGO.Where(f => f.DSC_TIPO_FUNC != "14")) { objStrSaida.AppendLine(string.Format("{0};{1};{2}", o.COD_CARGO, 1, o.DSC_CARGO)); } //linhas avulsas foreach (Negocio.ORG_FUNCIONARIO_EXPORT_GD_MDL o in objDs.ORG_FUNCIONARIO_EXPORT_GD_MDL.Where(f => f.CARGO_COD_CARGO != null && f.CARGO_DSC_CARGO != null)) { objStrSaida.AppendLine(string.Format("{0};{1};{2}", o.CARGO_COD_CARGO, 1, o.CARGO_DSC_CARGO)); } return(objStrSaida.ToString()); }
//setar no constructor se tiver algum filtro. public static string Carrega() { //primeira linha é o cabeçalho StringBuilder objStrSaida = new StringBuilder(); objStrSaida.AppendLine("COD_EMPRESA;NOM_EMPRESA"); //CABECALHO //Cria o data context gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //linhas nativas foreach (Negocio.ORG_EMPRESA o in objDs.ORG_EMPRESA) { objStrSaida.AppendLine(string.Format("{0};{1}", o.COD_EMPRESA, o.DESCRICAO)); } //linhas avulsas foreach (Negocio.ORG_FUNCIONARIO_EXPORT_GD_MDL o in objDs.ORG_FUNCIONARIO_EXPORT_GD_MDL.Where(f => f.EMPRESA_COD_EMPRESA != null && f.EMPRESA_NOM_EMPRESA != null)) { objStrSaida.AppendLine(string.Format("{0};{1}", o.EMPRESA_COD_EMPRESA, o.EMPRESA_NOM_EMPRESA)); } return(objStrSaida.ToString()); }
//setar no constructor se tiver algum filtro. public static string Carrega() { //primeira linha é o cabeçalho StringBuilder objStrSaida = new StringBuilder(); objStrSaida.AppendLine("COD_LOCAL_TRABALHO;NOM_LOCAL_TRABALHO"); //CABECALHO //Cria o data context gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //linhas nativas foreach (Negocio.ORG_LOCAL_TRABALHO o in objDs.ORG_LOCAL_TRABALHO) { objStrSaida.AppendLine(string.Format("{0};{1}", o.COD_LOCAL_TRABALHO, o.NOM_LOCAL_TRABALHO)); } //linhas avulsas foreach (Negocio.ORG_FUNCIONARIO_EXPORT_GD_MDL o in objDs.ORG_FUNCIONARIO_EXPORT_GD_MDL.Where(f => f.LOC_TRAB_COD_LOCAL != null && f.LOC_TRAB_NOM_LOCAL_TRABALHO != null)) { objStrSaida.AppendLine(string.Format("{0};{1}", o.LOC_TRAB_COD_LOCAL, o.LOC_TRAB_NOM_LOCAL_TRABALHO)); } return(objStrSaida.ToString()); }
/// <summary> /// Limpa todas as subseções que não estejam contidas na lista de seções /// </summary> private void LimpaSecoes() { using (gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext()) { StringBuilder strSecoes = new StringBuilder(); strSecoes.AppendLine("DELETE FROM ORG_FUNCIONARIO_SUBSECAO where COD_SECAO in ("); strSecoes.AppendLine("SELECT h.COD_SECAO FROM ORG_HIERARQUIA h "); strSecoes.AppendLine("LEFT OUTER JOIN ORG_SECAO s on s.cod_secao=h.cod_secao_sup "); strSecoes.AppendLine("where h.subsecao='1' and s.cod_Secao is null)"); objDs.ExecuteStoreCommand(strSecoes.ToString(), null); StringBuilder strSecoes2 = new StringBuilder(); strSecoes2.Append("DELETE FROM ORG_HIERARQUIA where COD_SECAO in ("); strSecoes2.Append("SELECT h.COD_SECAO FROM ORG_HIERARQUIA h "); strSecoes2.Append("LEFT OUTER JOIN ORG_SECAO s on s.cod_secao=h.cod_secao_sup "); strSecoes2.Append("where h.subsecao='1' and s.cod_Secao is null)"); objDs.ExecuteStoreCommand(strSecoes.ToString(), null); objDs.ExecuteStoreCommand("commit"); } }
public Validador() { //cria o contexto de dados Negocio.gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); empresas = (from s in objDs.ORG_EMPRESA select s).ToList <ORG_EMPRESA>(); objDs.Dispose(); }
/// <summary> /// Executa a consulta referente a regra: /// 5.16.1. O sistema deverá permitir a visualização em tela /// e a extração de relatórios, com as seções e subseções que não /// possuem seção superior e diretoria definidas, com exceção das /// seções que possuem o flag marcado, indicando que não possuem seção superior /// e diretoria. /// </summary> /// <returns>Validacao carregada</returns> public Validacao ConsultaSecaoSemSuperior() { //cria o contexto de dados Negocio.gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //carrega a validação var lst = (from s in objDs.ORG_LISTA_SECOES_SIMPLES where (s.COD_SECAO_SUP == null || s.COD_SECAO_SUP == "") && (s.POSSUI_SUP == null || s.POSSUI_SUP == "0") && s.COD_EMPRESA.Contains(strEmpresa) select s).OrderBy(f => f.COD_EMPRESA); if (lst.Count() <= 0) { return(null); } //cria o objeto de saída Validacao objValid = new Validacao(); objValid.Id = 1; //validacao de seções sem seção superior objValid.dtAtualizacao = DateTime.Now; //adiciona o título if (lst.Count() > 1) { objValid.Titulo = string.Format("Existem {0} seções/subseções sem seção superior/diretoria definida. Atualizado em: {1}", lst.Count(), DateTime.Now.ToString("dd/MM/yyyy HH:mm")); } else { objValid.Titulo = string.Format("Existe {0} seção/subseção sem seção superior/diretoria definida. Atualizado em: {1}", lst.Count(), DateTime.Now.ToString("dd/MM/yyyy HH:mm")); } foreach (var s in lst) { //adiciona os itens string emp = empresas.Where(f => f.COD_EMPRESA.Equals(s.COD_EMPRESA)).First().DESCRICAO; objValid.ListaValidacaoDetalhe.Add( new ValidacaoDetalhe(objValid.Id, string.Format("{0} - {1} - {2}", emp, s.NOME_SECAO, s.COD_SECAO) , "" )); } objValid.ListaValidacaoDetalhe = objValid.ListaValidacaoDetalhe.OrderBy(f => f.Titulo).ToList(); return(objValid); }
/// <summary> /// Limpa todos os funcionários e gerentes que não estão contidos na view /// org_funcionario /// </summary> private void LimpaFuncionarios() { //cria o contexto de dados using (gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext()) { StringBuilder strGestores = new StringBuilder(); strGestores.Append(" UPDATE ORG_HIERARQUIA SET GESTOR_MOD='0' , GESTOR='' "); strGestores.Append(" WHERE GESTOR in"); strGestores.Append(" (Select h.GESTOR from ORG_HIERARQUIA h Left outer join ORG_FUNCIONARIO fu on h.GESTOR = fu.CPF "); strGestores.Append(" where h.GESTOR is not null and fu.CPF is null) "); objDs.ExecuteStoreCommand(strGestores.ToString(), null); StringBuilder strAlocados = new StringBuilder(); strAlocados.Append(" DELETE FROM ORG_FUNCIONARIO_SUBSECAO WHERE CPF in "); strAlocados.Append(" (SELECT fs.CPF FROM ORG_FUNCIONARIO_SUBSECAO fs "); strAlocados.Append(" Left outer join ORG_FUNCIONARIO fu on fs.CPF=fu.CPF "); strAlocados.Append(" where fu.CPF is null)"); objDs.ExecuteStoreCommand(strAlocados.ToString(), null); objDs.ExecuteStoreCommand("commit"); /* * //apaga o funcionário da ORG_FUNCIONARIO_SUBSECAO * var tes = from f in * objDs.ORG_FUNCIONARIO_SUBSECAO.Except(from f in objDs.ORG_FUNCIONARIO_SUBSECAO * join fu in objDs.ORG_FUNCIONARIO on f.CPF equals fu.CPF * select f) * select f; * * foreach (ORG_FUNCIONARIO_SUBSECAO fu in tes) * { * AuditTrail.GravaLogAuditTrail("MANUTENÇÃO", string.Format("O funcionário: {0} foi excluído da seção: {1} por não estar presente na ORG_FUNCIONARIO ", fu.CPF, fu.COD_SECAO), ""); * objDs.ORG_FUNCIONARIO_SUBSECAO.DeleteObject(fu); * * } * * * * * * //grava as mudanças. * objDs.SaveChanges(); */ } }
/// <summary> /// Executa a validação do suposto item 4.2.2 /// </summary> /// <returns></returns> public Validacao ConsultaInconsistenciaCadastroFuncionario() { //cria o contexto de dados Negocio.gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //monta uma lista de gestores var funcionarios = (from fu in objDs.ORG_VALIDACAO_04 where fu.COD_EMPRESA.Contains(strEmpresa) select new { NOME_EMPRESA = fu.EMPRESA, NOME = fu.NOME, NOME_SECAO = fu.NOME_SECAO }).Distinct(); if (funcionarios.Count() <= 0) { return(null); } //cria o objeto de saída Validacao objValid = new Validacao(); objValid.Id = 4; //validacao funcionario cadastrado errado objValid.dtAtualizacao = DateTime.Now; //adiciona o título objValid.Titulo = string.Format("Existem {0} problema{2} no cadastro de gestores das seções/subseções {1}", funcionarios.Count(), DateTime.Now.ToString("dd/MM/yyyy HH:mm"), funcionarios.Count() > 1 ? "s":""); //adiciona as SEÇÕES no obj saída. foreach (var s in funcionarios) { //Adciona os itens de detalhe objValid.ListaValidacaoDetalhe.Add( new ValidacaoDetalhe(objValid.Id, string.Format("{0} - Subseção: {1} - Funcionário: {2}", s.NOME_EMPRESA, s.NOME_SECAO, s.NOME), "" )); } objValid.ListaValidacaoDetalhe = objValid.ListaValidacaoDetalhe.OrderBy(f => f.Descricao).ToList(); return(objValid); }
//setar no constructor se tiver algum filtro. public static string Carrega() { //primeira linha é o cabeçalho StringBuilder objStrSaida = new StringBuilder(); objStrSaida.AppendLine("COD_ORGAO;COD_ORGAO_SUPERIOR;COD_DIRETORIA;SGL_ORGAO;NOM_ORGAO;IND_ATIVO"); //CABECALHO //Cria o data context gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //linhas nativas SEÇÕES foreach (ORG_LISTA_SECOES_CONSOLIDADO s in objDs.ORG_LISTA_SECOES_CONSOLIDADO) { objStrSaida.AppendLine(string.Format("{0};{1};{2};{3};{4};{5}", s.COD_SECAO, (s.POSSUI_SUPERIOR != null && s.POSSUI_SUPERIOR.Equals("1")) ? "0" : s.COD_SECAO_SUP, (s.POSSUI_SUPERIOR != null && s.POSSUI_SUPERIOR.Equals("1")) ? "" : s.COD_DIRETORIA, "", s.NOME_SECAO, "S")); } //linhas avulsas foreach (ORG_FUNCIONARIO_EXPORT_GD_MDL s in objDs.ORG_FUNCIONARIO_EXPORT_GD_MDL.Where(f => f.ORGAOS_COD_ORGAO != null && f.ORGAOS_COD_DIRETORIA != null && f.ORGAOS_NOM_ORGAO != null)) { objStrSaida.AppendLine(string.Format("{0};{1};{2};{3};{4};{5}", s.ORGAOS_COD_ORGAO, s.ORGAOS_COD_ORGAO_SUPERIOR, s.ORGAOS_COD_DIRETORIA, "", s.ORGAOS_NOM_ORGAO, "S")); } return(objStrSaida.ToString()); }
//setar no constructor se tiver algum filtro. public static string Carrega(DateTime DataCorte) { //primeira linha é o cabeçalho StringBuilder objStrSaida = new StringBuilder(); objStrSaida.AppendLine("COD_FUNCIONARIO;NUM_MATRICULA;COD_EMPRESA;COD_ORGAO;COD_CARGO;COD_SUPERVISOR;DSC_DOMINIO;DSC_LOGON;DSC_SENHA;NOM_FUNCIONARIO;IND_SEXO;DAT_ADMISSAO;DSC_EMAIL;COD_TIPO_FUNCIONARIO;COD_TIPO_USUARIO;DAT_NASCIMENTO;COD_LOCAL_TRABALHO;COD_CPF;DSC_APELIDO;DAT_INICIO_FERIAS;DAT_FIM_FERIAS;COD_SUPERVISOR_FUNCIONAL;DSC_GRADE_SALARIAL;DAT_INICIO_CARGO;COD_IDIOMA_PREF;COD_PAIS;COD_UF"); //CABECALHO //Cria o data context gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //linhas nativas foreach (Negocio.ORG_FUNCIONARIO_EXPORT_GD o in objDs.ORG_FUNCIONARIO_EXPORT_GD.Where(f => f.COD_TIPO_FUNC != "14")) { DateTime dtAdmissao = DateTime.ParseExact(o.DAT_ADMISSAO, "yyyyMMdd", null); if (dtAdmissao <= DataCorte) { objStrSaida.AppendLine(string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11};{12};{13};{14};{15};{16};{17};{18};{19};{20};{21};{22};{23};{24};{25};{26}", o.COD_FUNCIONARIO, o.NUM_MATRICULA, o.COD_EMPRESA, o.COD_ORGAO, o.COD_CARGO, o.COD_SUPERVISOR, "", o.DSC_LOGON, "", o.NOM_FUNCIONARIO, o.SEXO, dtAdmissao.ToString("dd/MM/yyyy"), o.DSC_EMAIL, o.COD_TIPO_FUNC, "", o.DAT_NASCIMENTO, o.COD_FILIAL, "", "", "", "", "", "", "", "1", "", "")); } } foreach (Negocio.ORG_FUNCIONARIO_EXPORT_GD_MDL o in objDs.ORG_FUNCIONARIO_EXPORT_GD_MDL.Where(f => f.NOM_FUNCIONARIO != null)) { objStrSaida.AppendLine(string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11};{12};{13};{14};{15};{16};{17};{18};{19};{20};{21};{22};{23};{24};{25};{26}", o.COD_FUNCIONARIO, o.NUM_MATRICULA, o.COD_EMPRESA, o.COD_ORGAO, o.COD_CARGO, o.COD_SUPERVISOR, "", o.DSC_LOGON, "", o.NOM_FUNCIONARIO, o.SEXO, o.DAT_ADMISSAO, o.DSC_EMAIL, o.COD_TIPO_FUNC, "", o.DAT_NASCIMENTO, o.COD_FILIAL, "", "", "", "", "", "", "", "1", "", "")); } return(objStrSaida.ToString()); }
//setar no constructor se tiver algum filtro. public static string Carrega() { //primeira linha é o cabeçalho StringBuilder objStrSaida = new StringBuilder(); // objStrSaida.AppendLine("FIRSTNAME;LASTNAME;EMAIL;USERNAME;PASSWORD;PERSONSTATUS;USERSTATUS;CPF;COD_EMPRESA;EMPRESA;COD_FILIAL;NOME_FILIAL;DATA_ADMISSAO;SECAO;NOME_SECAO;CHAPA;CÓDIGO_FUNCAO;FUNCAO;CPF_GESTOR;NOME_GESTOR;EMAIL_GESTOR;SEXO;DTNASCIMENTO;CODTIPO;DESCRICAO_TIPO_FUNCIONARIO;PERFIL_PROFISSIONAL;COD_SECAO_SUPERIOR;NOME_SECAO_SUPERIOR;COD_DIRETORIA;NOME_DIRETORIA"); //CABECALHO orig objStrSaida.AppendLine("FIRST_NAME;LAST_NAME;EMAIL;USERNAME;PASSWORD;PERSONSTATUS;USERSTATUS;CPF;COD_EMPRESA;NOME_EMPRESA;COD_FILIAL;NOME_FILIAL;DAT_ADMISSAO;COD_SECAO;NOME_SECAO;CHAPA;COD_CARGO;NOME_FUNCAO;CPF_GESTOR;NOME_GESTOR;EMAIL_GESTOR;SEXO;DATA_NASCIMENTO;COD_TIPO_FUNC;DESC_TIPO_FUNC;COD_SECAO_SUP;NOME_SECAO_SUP;COD_DIRETORIA;NOME_DIRETORIA;PERFIL_PROFISSIONAL"); //cab novo //Cria o data context Negocio.gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); try { //linhas nativas foreach (Negocio.ORG_FUNCIONARIO_EXPORT_TR o in objDs.ORG_FUNCIONARIO_EXPORT_TR) { objStrSaida.AppendLine(string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11};{12};{13};{14};{15};{16};{17};{18};{19};{20};{21};{22};{23};{24};{25};{26};{27};{28};{29}", o.FIRST_NAME, o.LAST_NAME, o.EMAIL, o.USERNAME, o.PASSWORD, o.PERSONSTATUS, o.USERSTATUS, o.CPF, o.COD_EMPRESA, o.NOME_EMPRESA, o.COD_FILIAL, o.NOME_FILIAL, DateTime.ParseExact(o.DAT_ADMISSAO, "yyyyMMdd", null).ToString("dd/MM/yyyy"), o.COD_SECAO, o.NOME_SECAO, o.CHAPA, o.COD_CARGO, o.NOME_FUNCAO, o.CPF_GESTOR, o.NOME_GESTOR, o.EMAIL_GESTOR, o.SEXO, o.DATA_NASCIMENTO, o.COD_TIPO_FUNC, o.DESC_TIPO_FUNC, o.COD_SECAO_SUP, o.NOME_SECAO_SUP, o.COD_DIRETORIA, o.NOME_DIRETORIA, o.PERFIL_PROFISSIONAL )); } } catch (Exception ex) { throw (ex); } //linhas Avulsas foreach (Negocio.ORG_FUNCIONARIO_EXPORT_TR_MDL o in objDs.ORG_FUNCIONARIO_EXPORT_TR_MDL) { objStrSaida.AppendLine(string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11};{12};{13};{14};{15};{16};{17};{18};{19};{20};{21};{22};{23};{24};{25};{26};{27};{28};{29}", o.FIRST_NAME, o.LAST_NAME, o.EMAIL, o.USERNAME, o.PASSWORD, o.PERSONSTATUS, o.USERSTATUS, o.CPF, o.COD_EMPRESA, o.NOME_EMPRESA, o.COD_FILIAL, o.NOME_FILIAL, o.DAT_ADMISSAO, o.COD_SECAO, o.NOME_SECAO, o.CHAPA, o.COD_CARGO, o.NOME_FUNCAO, o.CPF_GESTOR, o.NOME_GESTOR, o.EMAIL_GESTOR, o.SEXO, o.DATA_NASCIMENTO, o.COD_TIPO_FUNC, o.DESC_TIPO_FUNC, o.COD_SECAO_SUP, o.NOME_SECAO_SUP, o.COD_DIRETORIA, o.NOME_DIRETORIA, o.PERFIL_PROFISSIONAL )); } return(objStrSaida.ToString()); }
/// <summary> /// Executa a consulta referente a regra: /// 5.16.3. O sistema deverá permitir a visualização em tela e /// a extração de relatórios, identificando os funcionários que possuam /// subseções que não são filhas da seção associada aos mesmos. /// </summary> /// <returns></returns> public Validacao ConsultaFuncionarioAlocadoSubsecaoNaoFilha() { //cria o contexto de dados gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //carrega os funcionários var funcionarios = from f in objDs.ORG_FUNCIONARIO join fs in objDs.ORG_FUNCIONARIO_SUBSECAO on f.CPF equals fs.CPF join hi in objDs.ORG_HIERARQUIA on fs.COD_SECAO equals hi.COD_SECAO where (!(hi.COD_SECAO_SUP.Equals(f.COD_SECAO)) && hi.SUBSECAO.Equals("1") ) && hi.COD_EMPRESA.Contains(strEmpresa) select new { f.NOME_EMPRESA, f.CPF, f.NOME, SECAO_ALOCADO = hi.NOME + " " + hi.COD_SECAO, SECAO_ALOCADO_SUP = hi.COD_SECAO_SUP, COD_SECAO_RM = f.COD_SECAO, NOME_SECAO = hi.NOME, NOME_SECAO_RM = f.NOME_SECAO + " " + f.COD_SECAO }; if (funcionarios.Count() <= 0) { return(null); } //cria o objeto de saída Validacao objValid = new Validacao(); objValid.Id = 3; //validacao funcionario em subsecao não filha da que vem do rm objValid.dtAtualizacao = DateTime.Now; //adiciona o título if (funcionarios.Count() > 1) { objValid.Titulo = string.Format("Existem {0} Funcionários alocados a subseções não filhas das seções originais. Atualizado em: {1}", funcionarios.Count(), DateTime.Now.ToString("dd/MM/yyyy HH:mm")); } else { objValid.Titulo = string.Format("Existe {0} Funcionário alocado a uma subseção não filha da seção original. Atualizado em: {1}", funcionarios.Count(), DateTime.Now.ToString("dd/MM/yyyy HH:mm")); } //adiciona as SEÇÕES no obj saída. foreach (var s in funcionarios) { //Adciona os itens de detalhe objValid.ListaValidacaoDetalhe.Add( new ValidacaoDetalhe(objValid.Id, string.Format("{0} - Funcionário: {1} - Subseção: {2} - Seção RH: {3} ", s.NOME_EMPRESA, s.NOME, s.SECAO_ALOCADO, s.NOME_SECAO_RM), "" )); } objValid.ListaValidacaoDetalhe = objValid.ListaValidacaoDetalhe.OrderBy(f => f.Descricao).ToList(); return(objValid); }
/// <summary> ///5.16.2. O sistema deverá permitir a visualização em tela e a extração ///de relatórios, com as seções que não possuem gestor definido. ///Para os casos das seções que possuem gestor modificado em relação ao sistema de RH, ///o sistema deverá verificar se existe um gestor definido neste campo. ///Para os casos das seções sem gestores modificados, o sistema deverá verificar se ///existe um gestor definido nos dados disponibilizados pelo sistema de RH /// </summary> /// <returns></returns> public Validacao ConsultaSecaoSemGestor() { //cria o contexto de dados gsatOrganogramaDataContext objDs = new gsatOrganogramaDataContext(); //carrega as seções sem gestor definido var secoes = from s in objDs.ORG_LISTA_SECOES_SIMPLES where (s.CPF_GESTOR == null || s.CPF_GESTOR.Equals(string.Empty)) && s.COD_EMPRESA.Contains(strEmpresa) select s; //carrega as subseções sem gestor definido. var subSecoes = from s in objDs.ORG_HIERARQUIA where (s.SUBSECAO.Equals("1") && (s.GESTOR == null || s.GESTOR.Equals(string.Empty)) ) && s.COD_EMPRESA.Contains(strEmpresa) select s; //caso não tenha nenhuma info volta zerada if (secoes.Count() <= 0 && subSecoes.Count() <= 0) { return(null); } //cria o objeto de saída Validacao objValid = new Validacao(); objValid.Id = 2; //validacao de seções sem gestor objValid.dtAtualizacao = DateTime.Now; //adiciona o título objValid.Titulo = string.Format("Existe{2} {0} seções/subseções sem gestor definido. Atualizado em: {1}", secoes.Count() + subSecoes.Count(), DateTime.Now.ToString("dd/MM/yyyy HH:mm"), (secoes.Count() + subSecoes.Count()) > 1 ? "s": string.Empty); //adiciona as SEÇÕES no obj saída. foreach (var s in secoes) { //Carrega a empresa (descrição) string emp = empresas.Where(f => f.COD_EMPRESA.Equals(s.COD_EMPRESA)).First().DESCRICAO; //Adciona os itens de detalhe objValid.ListaValidacaoDetalhe.Add( new ValidacaoDetalhe(objValid.Id, string.Format("{0} - {1} - {2}", emp, s.NOME_SECAO, s.COD_SECAO), "")); } //adiciona as SUBSEÇÕES foreach (var s in subSecoes) { //Carrega a empresa (descrição) string emp = empresas.Where(f => f.COD_EMPRESA.Equals(s.COD_EMPRESA)).First().DESCRICAO; //Adciona os itens de detalhe objValid.ListaValidacaoDetalhe.Add( new ValidacaoDetalhe(objValid.Id, string.Format("{0} - {1} - {2}", emp, s.NOME, s.COD_SECAO), "")); } objValid.ListaValidacaoDetalhe = objValid.ListaValidacaoDetalhe.OrderBy(f => f.Titulo).ToList(); return(objValid); }