public static int Inserir(System.String Hie_Descri, System.String Hie_Funcao)
        {

            string sql = @"
INSERT INTO CadeiaAutorizacao.Hierarquia
(
 Hie_Descri, 
 Hie_Funcao, 
 Hie_DatInc, 
 Hie_UsuInc, 
 Hie_UsuTra, 
 Hie_DatHor
)
    VALUES 
(
@Hie_Descri, 
@Hie_Funcao, 
GetDate(), 
@Hie_UsuInc, 
@Hie_UsuTra, 
GetDate()
); SELECT SCOPE_IDENTITY();
";
            BdUtil bd = new BdUtil(sql);
            bd.AdicionarParametro("@Hie_Descri", System.Data.DbType.String, 50, Hie_Descri);
            bd.AdicionarParametro("@Hie_Funcao", System.Data.DbType.String, 100, Hie_Funcao);
            bd.AdicionarParametro("@Hie_UsuInc", System.Data.DbType.String, 15, System.Threading.Thread.CurrentPrincipal.Identity.Name);
            bd.AdicionarParametro("@Hie_UsuTra", System.Data.DbType.String, 15, System.Threading.Thread.CurrentPrincipal.Identity.Name);

            object objRetorno = bd.ExecuteScalar();
            return (objRetorno == null || Convert.IsDBNull(objRetorno)) ? 0 : Convert.ToInt32(objRetorno);
        }
	public static int Inserir (System.String Cau_Descri, System.Int32 Cau_TipoAprovacao, System.String Cau_UrlAprovacao, System.Int32? Hie_Id, System.String Cau_ClasseRetorno, System.String Cau_MetodoRetorno){

      string sql = @"
INSERT INTO CadeiaAutorizacao.Cadeia
(
 Cau_Descri, 
 Cau_TipoAprovacao, 
 Cau_UrlAprovacao, 
 Hie_Id, 
 Cau_ClasseRetorno, 
 Cau_MetodoRetorno
)
    VALUES 
(
@Cau_Descri, 
@Cau_TipoAprovacao, 
@Cau_UrlAprovacao, 
@Hie_Id, 
@Cau_ClasseRetorno, 
@Cau_MetodoRetorno
); SELECT SCOPE_IDENTITY();
";
	BdUtil bd = new BdUtil(sql); 
	bd.AdicionarParametro("@Cau_Descri", System.Data.DbType.String, 50, Cau_Descri );
	bd.AdicionarParametro("@Cau_TipoAprovacao", System.Data.DbType.Int32, -1, Cau_TipoAprovacao );
	bd.AdicionarParametro("@Cau_UrlAprovacao", System.Data.DbType.String, 100, Cau_UrlAprovacao );
	bd.AdicionarParametro("@Hie_Id", System.Data.DbType.Int32, -1, Hie_Id );
	bd.AdicionarParametro("@Cau_ClasseRetorno", System.Data.DbType.String, 100, Cau_ClasseRetorno );
	bd.AdicionarParametro("@Cau_MetodoRetorno", System.Data.DbType.String, 50, Cau_MetodoRetorno );

	 object objRetorno = bd.ExecuteScalar();
	 return ( objRetorno == null || Convert.IsDBNull(objRetorno)) ? 0 : Convert.ToInt32(objRetorno);
	}
 public static DataTable Obter_Usuario_Por_Hierarquia(string hie_ID)
 {
     string sql = @"
     SELECT
     Hus_Id,
     Hie_Id,
     u.Usu_Id,
     u.Usu_Nome,
     Hus_Alcada,
     u1.Usu_Nome Supervisor
     FROM CadeiaAutorizacao.HierarquiaUsuario hu
     join USUARIO u on hu.Usu_Id = u.usu_id
     left join Usuario u1 on hu.Usu_IdSuperior = u1.usu_id
     WHERE ( Hie_Id LIKE @Hie_Id )
     ";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@Hie_Id", System.Data.DbType.Int32, -1, hie_ID);
     return bd.ObterDataTable();
 }
	public static DataTable ObterPor_PK_CadeiaAutorizacao (System.Int32 Cau_Id){
string sql = @"
SELECT 
	
	Cau_Id, 
	Cau_Descri, 
	Cau_TipoAprovacao, 
	Cau_UrlAprovacao, 
	Hie_Id, 
	Cau_ClasseRetorno, 
	Cau_MetodoRetorno 
FROM 
	CadeiaAutorizacao.Cadeia
	  
 WHERE 
	( Cau_Id LIKE @Cau_Id )";
	BdUtil bd = new BdUtil(sql);
	bd.AdicionarParametro("@Cau_Id", System.Data.DbType.Int32, -1, Cau_Id );
      return bd.ObterDataTable();
    }
        public static DataTable ObterPor_PK_Hierarquia(System.Int32 Hie_Id)
        {
            string sql = @"
SELECT 
	
	Hie_Id, 
	Hie_Descri, 
	Hie_Funcao, 
	Hie_DatInc, 
	Hie_UsuInc, 
	Hie_UsuTra, 
	Hie_DatHor 
FROM 
	CadeiaAutorizacao.Hierarquia
	  
 WHERE 
	( Hie_Id LIKE @Hie_Id )";
            BdUtil bd = new BdUtil(sql);
            bd.AdicionarParametro("@Hie_Id", System.Data.DbType.Int32, -1, Hie_Id);
            return bd.ObterDataTable();
        }
        public static DataTable ObterPor_PK_HierarquiaUsuario(System.Int32 Hus_Id)
        {
            string sql = @"
SELECT 
	
	Hus_Id, 
	Hie_Id, 
	Usu_Id, 
	Hus_Alcada, 
	Usu_IdSuperior, 
	Hus_DatInc, 
	Hus_UsuInc, 
	Hus_DatHor, 
	Hus_UsuTra 
FROM 
	CadeiaAutorizacao.HierarquiaUsuario
	  
 WHERE 
	( Hus_Id LIKE @Hus_Id )";
            BdUtil bd = new BdUtil(sql);
            bd.AdicionarParametro("@Hus_Id", System.Data.DbType.Int32, -1, Hus_Id);
            return bd.ObterDataTable();
        }
        public static int Inserir(System.Int32 Hie_Id, System.Int32 Usu_Id, System.Decimal? Hus_Alcada, System.Int32? Usu_IdSuperior)
        {

            string sql = @"
INSERT INTO CadeiaAutorizacao.HierarquiaUsuario
(
 Hie_Id, 
 Usu_Id, 
 Hus_Alcada, 
 Usu_IdSuperior, 
 Hus_DatInc, 
 Hus_UsuInc, 
 Hus_DatHor, 
 Hus_UsuTra
)
    VALUES 
(
@Hie_Id, 
@Usu_Id, 
@Hus_Alcada, 
@Usu_IdSuperior, 
GetDate(), 
@Hus_UsuInc, 
GetDate(), 
@Hus_UsuTra
); SELECT SCOPE_IDENTITY();
";
            BdUtil bd = new BdUtil(sql);
            bd.AdicionarParametro("@Hie_Id", System.Data.DbType.Int32, -1, Hie_Id);
            bd.AdicionarParametro("@Usu_Id", System.Data.DbType.Int32, -1, Usu_Id);
            bd.AdicionarParametro("@Hus_Alcada", System.Data.DbType.Decimal, -1, Hus_Alcada);
            bd.AdicionarParametro("@Usu_IdSuperior", System.Data.DbType.Int32, -1, Usu_IdSuperior);
            bd.AdicionarParametro("@Hus_UsuInc", System.Data.DbType.String, 15, System.Threading.Thread.CurrentPrincipal.Identity.Name);
            bd.AdicionarParametro("@Hus_UsuTra", System.Data.DbType.String, 15, System.Threading.Thread.CurrentPrincipal.Identity.Name);

            object objRetorno = bd.ExecuteScalar();
            return (objRetorno == null || Convert.IsDBNull(objRetorno)) ? 0 : Convert.ToInt32(objRetorno);
        }
 /// <summary>
 /// Obtém os superiores do usuário executando a stored function de hierarquia
 /// </summary>
 /// <param name="IdCadeia">Id da cadeia</param>
 /// <param name="IdUsuario">Id do usuário</param>
 /// <param name="parametrosFuncaoHierarquia">Parâmetros para executar a stored function de hierarquia</param>
 /// <returns></returns>
 private static DataTable ObterSuperioresPorFuncao(int IdCadeia, int IdUsuario,
     CadeiaAutorizacaoDataSet.ParemetroFuncaoHierarquiaDataTable parametrosFuncaoHierarquia)
 {
     // Obtendo o nome da funcao para a hierarquia da cadeia
     string nomeFuncao = ObterNomeFuncaHierarquia(IdCadeia);
     if (string.IsNullOrEmpty(nomeFuncao))
     {
         throw new SecvException("Função de hirarquia não encontrada");
     }
     BdUtil bd = new BdUtil(nomeFuncao);
     //bd.Command.CommandType = CommandType.Text;// StoredProcedure;
     // Preparando os parâmetros
     foreach (DataRow parametro in parametrosFuncaoHierarquia)
     {
         string nome = parametro["nome"].ToString();
         DbType tipo = (DbType)Enum.Parse(typeof(DbType), parametro["tipo"].ToString(), true);
         object valor = parametro["valor"];
         bd.AdicionarParametro(nome, tipo, valor);
     }
     return bd.ObterDataTable();
 }
 /// <summary>
 /// Obtém o nome da função de hierarquia para uma determinada cadeia
 /// </summary>
 /// <param name="IdCadeia">Id da cadeia</param>
 /// <returns>Nome da stored function de hierarquia</returns>
 private static string ObterNomeFuncaHierarquia(int IdCadeia)
 {
     string sql = @"SELECT h.Hie_Funcao
                      FROM CadeiaAutorizacao.Hierarquia h
                      INNER JOIN CadeiaAutorizacao.Cadeia c on c.Hie_Id = h.Hie_Id
                      WHERE c.cau_Id = @IdCadeia";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdCadeia", DbType.Int32, IdCadeia);
     return Convert.ToString(bd.ExecuteScalar());
 }
 private static void InserirSubstituicao(int IdUsuario, int IdSubstituto)
 {
     string sql = @"INSERT INTO CadeiaAutorizacao.Substituicao (Sub_IdUsuario, Sub_IdSubstituto)
                          VALUES (@IdUsuario, @IdSubstituto)";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdUsuario", DbType.Int32, IdUsuario);
     bd.AdicionarParametro("@IdSubstituto", DbType.Int32, IdSubstituto);
     bd.ExecuteNonQuery();
 }
 public static int ObterIDInstaciaPelaParticipacao(int IdParticipacao)
 {
     //Obtendo o Id da instância
     string sql = @"
     SELECT Cai_Id
        FROM CadeiaAutorizacao.UsuarioParticipacao
        WHERE Usp_Id = @IdParticipacao";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdParticipacao", DbType.Int32, IdParticipacao);
     return bd.ExecuteScalar<int>();
 }
    public static void Apagar (System.Int32 original_Cau_Id)
	{
      string sql = 
@"DELETE FROM CadeiaAutorizacao.Cadeia
    WHERE Cau_Id = @Cau_Id";	BdUtil bd = new BdUtil(sql);
	bd.AdicionarParametro("@Cau_Id", System.Data.DbType.Int32, -1, original_Cau_Id );
      bd.ExecuteNonQuery();
    }
        public static void Alterar(System.Int32 original_Hus_Id, System.Int32 Hie_Id, System.Int32 Usu_Id, System.Decimal? Hus_Alcada, System.Int32? Usu_IdSuperior)
        {
            string sql =
      @"UPDATE CadeiaAutorizacao.HierarquiaUsuario SET
	Hie_Id= @Hie_Id
, 	Usu_Id= @Usu_Id
, 	Hus_Alcada= @Hus_Alcada
, 	Usu_IdSuperior= @Usu_IdSuperior
, 	Hus_DatHor= GetDate()
, 	Hus_UsuTra= @Hus_UsuTra

    WHERE Hus_Id = @original_Hus_Id";
            BdUtil bd = new BdUtil(sql);
            bd.AdicionarParametro("@Hie_Id", System.Data.DbType.Int32, -1, Hie_Id);
            bd.AdicionarParametro("@Usu_Id", System.Data.DbType.Int32, -1, Usu_Id);
            bd.AdicionarParametro("@Hus_Alcada", System.Data.DbType.Decimal, -1, Hus_Alcada);
            bd.AdicionarParametro("@Usu_IdSuperior", System.Data.DbType.Int32, -1, Usu_IdSuperior);
            bd.AdicionarParametro("@Hus_UsuTra", System.Data.DbType.String, 15, System.Threading.Thread.CurrentPrincipal.Identity.Name);

            bd.AdicionarParametro("@original_Hus_Id", System.Data.DbType.Int32, -1, original_Hus_Id);

            bd.ExecuteNonQuery();
        }
 /// <summary>
 /// Retorna o substituto de um usuário
 /// </summary>
 /// <param name="IdUsario">Id do usuário</param>
 /// <returns>DataTable com o substituto do usuário.</returns>
 public static DataTable ObterSubstituto(int IdUsario)
 {
     string sql = @"SELECT usu.Usu_Id, usu.Usu_Nome
                      FROM CadeiaAutorizacao.Substituicao sub
                      INNER JOIN Usuario usu on usu.Usu_Id = sub.Sub_IdSubstituto
                      WHERE sub.Sub_IdUsuario = @IdUsuario";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdUsuario", DbType.Int32, IdUsario);
     return bd.ObterDataTable();
 }
 public static int ObterQuantidadeParticipacoesAtivas(int usu_ID)
 {
     string sql = @"SELECT count(*)
                       FROM CadeiaAutorizacao.UsuarioParticipacao usp
                       JOIN CadeiaAutorizacao.CadeiaInstancia cai on cai.Cai_Id = usp.Cai_Id
                       WHERE usp.Usp_Autorizacao = 0 AND
                             cai.cai_status = 0 AND
                             usp.Usu_Id = @IdUsuario";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdUsuario", DbType.Int32, usu_ID);
     return bd.ExecuteScalar<int>();
 }
 /// <summary>
 /// Retorna todas as participações pendentes do usuário
 /// </summary>
 /// <param name="IdUsuario">Id do usuário</param>
 /// <returns>DataTable com as todas as participações pendentes do usuário.</returns>
 public static DataTable ObterParticipacoesUsuario(int IdUsuario)
 {
     string sql = @"SELECT
                            -- Cadeia
                            cau.Cau_Descri, cau.Cau_UrlAprovacao,
                            -- CadeiaInstancia
                            cai.Cai_Id, cai.Cai_Descri, cai.Cai_Data, cai.Cai_Valor, cai.Cai_Conteudo,
                            CASE cai.Cai_Status
                              WHEN 0 THEN 'Aberta'
                              WHEN 1 THEN 'Aprovada'
                              WHEN 2 THEN 'Reprovada'
                            END AS InstanciaStatus,
                            -- UsuarioParticipacao
                            usp.Usp_Id,
                            Usp_Tipo,
                            CASE usp.Usp_Tipo
                              WHEN 1 THEN 'Responsavel'
                              WHEN 2 THEN 'Colaborador'
                              WHEN 3 THEN 'Leitor'
                            END AS ParticipacaoTipo,
                            usp.Usp_Mensagem
                       FROM CadeiaAutorizacao.UsuarioParticipacao usp
                       INNER JOIN CadeiaAutorizacao.CadeiaInstancia cai on cai.Cai_Id = usp.Cai_Id
                       INNER JOIN CadeiaAutorizacao.Cadeia cau on cau.Cau_Id = cai.Cau_Id
                       WHERE usp.Usp_Autorizacao = 0 AND
                             cai.cai_status = 0 AND
                             usp.Usu_Id = @IdUsuario
                         order by Cai_Data";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdUsuario", DbType.Int32, IdUsuario);
     return bd.ObterDataTable();
 }
 /// <summary>
 /// Obtém as participações dos usuário para uma determinada instância de cadeia
 /// </summary>
 /// <param name="IdInstancia">Id da instância</param>
 /// <returns></returns>
 public static DataTable ObterParticipacoesCadeia(int IdInstancia)
 {
     string sql = @"SELECT usp.Usp_Id,
                        CASE usp.Usp_Autorizacao
                          WHEN 1 THEN 'Autorizado'
                          WHEN 2 THEN 'Não Autorizado'
                        END AS AutorizacaoTipo,
                        Case usp.Usp_Tipo
                         When 1 then 'Responsavel'
                         When 2 then 'Colaborador'
                         When 3 then 'Leitor'
                        end as Tipo,
                        usp.Usp_Mensagem,
                        usp.usp_Data,
                        u.Usu_Nome
                   FROM CadeiaAutorizacao.UsuarioParticipacao usp
                   INNER JOIN Usuario u on u.Usu_Id = usp.Usu_Id
                   WHERE usp.Cai_Id = @IdCadeia";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdCadeia", DbType.Int32, IdInstancia);
     return bd.ObterDataTable();
 }
 /// <summary>
 /// Para uma cadeia retorna os parâmetros definidos para a sua função armazenada de hierarquia
 /// O objetivo desse método é facilitar a criação do DataTable para o parâmetro parametrosFuncaoHierarquia
 /// do método Incluir
 /// </summary>
 /// <returns>Superiores hierárquicos do funcionário</returns>
 public static CadeiaAutorizacaoDataSet.ParemetroFuncaoHierarquiaDataTable ObterParametrosFuncaoHierarquia(int IdCadeia)
 {
     string sql = @"SELECT Hpr_Nome AS nome, tpa.Tpa_Descri AS tipo, Hpr_Tamanho AS tamanho, null AS valor
                      FROM CadeiaAutorizacao.HierarquiaParametro hpr
                      INNER JOIN CadeiaAutorizacao.Hierarquia hie on hie.Hie_Id = hpr.Hie_Id
                      INNER JOIN CadeiaAutorizacao.Cadeia cau on cau.Hie_Id = hie.Hie_Id
                      INNER JOIN Manutencao.TipoADO tpa on tpa.Tpa_Id = hpr.Tpa_Id
                      WHERE cau.Cau_Id = @IdCadeia";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdCadeia", DbType.Int32, IdCadeia);
     return bd.ObterDataTable<CadeiaAutorizacaoDataSet.ParemetroFuncaoHierarquiaDataTable>();
 }
 /// <summary>
 /// Retorna os dados da instância da cadeia.
 /// </summary>
 /// <param name="IdInstancia">Id da instância</param>
 /// <returns>DataTable com a linha da instância</returns>
 public static DataTable ObterInstancia(int IdInstancia)
 {
     string sql = @"SELECT cau.Cau_Descri,
                           cai.Cai_Id, cai.Cai_Descri, cai.Cai_Data,
                           cai.Cai_Status,
                           CASE cai.Cai_Status
                             WHEN 0 THEN 'Aberta'
                             WHEN 1 THEN 'Aprovada'
                             WHEN 2 THEN 'Reprovada'
                           END AS InstanciaStatus,
                           cai.Cai_Valor, cai.Cai_Conteudo,
                           usu.usu_Nome
                      FROM CadeiaAutorizacao.Cadeia cau
                      INNER JOIN CadeiaAutorizacao.CadeiaInstancia cai on cau.Cau_Id = cai.Cau_Id
                      INNER JOIN Usuario usu on usu.Usu_Id = cai.Usu_IdProprietario
                      WHERE cai.Cai_Id = @IdInstancia";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdInstancia", DbType.Int32, IdInstancia);
     return bd.ObterDataTable();
 }
        /// <summary>
        /// Obtém os superiores do usuário baseado na estrutura de tabelas para hierarquia
        /// </summary>
        /// <param name="IdCadeia">Id da cadeia</param>
        /// <param name="IdUsuario">Id do usuário</param>
        /// <returns>Superiores do usuário</returns>
        private static DataTable ObterSuperioresPorTabelas(int IdCadeia, int IdUsuario)
        {
            string sql = @"WITH Superior (IdSuperior, alcada) AS
                           (
                             SELECT hus.Usu_IdSuperior, hus.Hus_Alcada
                               FROM  CadeiaAutorizacao.HierarquiaUsuario hus
                               JOIN CadeiaAutorizacao.Cadeia cau on cau.Hie_Id = hus.Hie_Id
                               WHERE hus.Usu_Id = @Usu_Id and
                                     cau.Cau_Id = @Cau_Id

                              UNION ALL

                              SELECT Hus.Usu_IdSuperior, hus.Hus_Alcada
                               FROM CadeiaAutorizacao.HierarquiaUsuario hus
                               JOIN CadeiaAutorizacao.Cadeia cau on cau.Hie_Id = hus.Hie_Id
                               JOIN Superior ON hus.Usu_Id = Superior.IdSuperior
                                    and Cau_Id = @Cau_Id
                           )
                           SELECT IdSuperior, alcada
                             FROM Superior
                             WHERE IdSuperior IS NOT NULL;";
            BdUtil bd = new BdUtil(sql);
            bd.AdicionarParametro("@Usu_Id", DbType.Int32, IdUsuario);
            bd.AdicionarParametro("@Cau_Id", DbType.Int32, IdCadeia);
            return bd.ObterDataTable();
        }
 /// <summary>
 /// Verifica as autorizações para a instância de uma cadeia a partir de uma participação
 /// </summary>
 /// <param name="IdParticipacao">Id da participação</param>
 /// <returns>Status da instância da cadeia de acordo com a participação fornecida</returns>
 private static int VerificarAutorizacao(int IdInstacia, int IdParticipacao)
 {
     //BdUtil bd = new BdUtil("select CadeiaAutorizacao.UF_VerificarAutorizacao(@IdInstancia, @IdParticipacao)");
     BdUtil bd = new BdUtil("select CadeiaAutorizacao.UF_VerificarAutorizacao(@IdParticipacao)");
     //bd.AdicionarParametro("@IdInstancia", DbType.Int32, IdInstacia);
     bd.AdicionarParametro("@IdParticipacao", DbType.Int32, IdParticipacao);
     return bd.ExecuteScalar<int>();
 }
 /// <summary>
 /// Retorna o substituto de um usuário
 /// </summary>
 /// <param name="IdUsario">Id do usuário</param>
 /// <param name="NmUsuario">Valor para ser usado como filtro</param>
 /// <returns>DataTable com os usuários.</returns>
 public static DataTable ObterUsuarios(int IdUsario, string NmUsuario)
 {
     string sql = @"
     SELECT Usu_Id, Usu_Nome
     FROM  Usuario
     where usu_id <> @IdUsuario
       and usu_nome like @NmUsuario
     order by usu_nome";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdUsuario", DbType.Int32, IdUsario);
     bd.AdicionarParametro("@NmUsuario", DbType.String, NmUsuario);
     return bd.ObterDataTable();
 }
 /// <summary>
 /// Incluir um participante na instância da cadeia de autorizacao
 /// </summary>
 /// <param name="IdInstancia">Id da instância</param>
 /// <param name="IdParticipante">Id do usuário participante</param>
 /// <param name="data">Data da criação da participação</param>
 /// <param name="tipo">Tipo da participação: 1 = Responsável; 2 = Colaborador; 3 = Leitor</param>
 public static void IncluirParticipante(int IdInstancia, int IdParticipante,
     DateTime data, TipoParticipacao tipoParticipacao)
 {
     string sql = @"INSERT INTO CadeiaAutorizacao.UsuarioParticipacao
                      (Cai_Id, Usu_Id, Usp_Tipo, Usp_Data)
                      VALUES (@Cai_Id, @Usu_Id, @Usp_Tipo, @Usp_Data)";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@Cai_Id", DbType.Int32, IdInstancia);
     bd.AdicionarParametro("@Usu_Id", DbType.Int32, IdParticipante);
     bd.AdicionarParametro("@Usp_Tipo", DbType.Int16, (int)tipoParticipacao);
     bd.AdicionarParametro("@Usp_Data", DbType.DateTime, data);
     bd.ExecuteNonQuery();
 }
 /// <summary>
 /// Cancela uma instância de cadeia. Altera o status para StatusCadeia.Cancelada (-1)
 /// </summary>
 /// <param name="IdInstancia">Id da Instância</param>
 public static void Cancelar(int IdInstancia)
 {
     //using (Escopo escopo = new Escopo(OpcaoTransacao.Requerido))
     //{
         string sql = @"UPDATE CadeiaAutorizacao.CadeiaInstancia
                      SET Cai_Status = -1
                      WHERE Cai_Id = @Cai_Id";
         BdUtil bd = new BdUtil(sql);
         bd.AdicionarParametro("@Cai_Id", DbType.Int32, IdInstancia);
         bd.ExecuteNonQuery();
     //}
 }
 public static void AtualizarStatusInstancia(int IdInstancia, int status)
 {
     string sql = @"UPDATE CadeiaAutorizacao.CadeiaInstancia
                      SET Cai_Status = @Status
                      WHERE Cai_Id = @IdInstancia";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdInstancia", DbType.Int32, IdInstancia);
     bd.AdicionarParametro("@Status", DbType.Int32, status);
     bd.ExecuteNonQuery();
 }
 /// <summary>
 /// Insere no banco de dados uma instância de cadeia de autorização
 /// </summary>
 /// <param name="descricao">Descrição da instância</param>
 /// <param name="data">Data</param>
 /// <param name="statusCadeia">Status</param>
 /// <param name="valor">Valor</param>
 /// <param name="conteudo">Conteúdo</param>
 /// <param name="IdCadeia">Id da cadeia</param>
 /// <param name="IdProprietario">Id do usuário que iniciou a instância da cadeia</param>
 /// <returns></returns>
 private static int IncluirInstancia(string descricao, DateTime data, StatusCadeia statusCadeia, float? valor, string conteudo,
     int IdCadeia, int IdProprietario)
 {
     string sql = @"INSERT INTO CadeiaAutorizacao.CadeiaInstancia
                      (Cai_Descri, Cai_Data, Cai_Status, Cau_Id, Usu_IdProprietario, Cai_Valor, Cai_Conteudo)
                      VALUES (@Cai_Descri, @Cai_Data, @Cai_Status, @Cau_Id, @Usu_IdProprietario, @Cai_Valor, @Cai_Conteudo);
                    SELECT SCOPE_IDENTITY();";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@Cai_Descri", DbType.String, descricao);
     bd.AdicionarParametro("@Cai_Data", DbType.DateTime, data);
     bd.AdicionarParametro("@Cai_Status", DbType.Int16, (int)statusCadeia);
     bd.AdicionarParametro("@Cau_Id", DbType.Int32, IdCadeia);
     bd.AdicionarParametro("@Usu_IdProprietario", DbType.Int32, IdProprietario);
     bd.AdicionarParametro("@Cai_Valor", DbType.Decimal, valor);
     bd.AdicionarParametro("@Cai_Conteudo", DbType.String, conteudo);
     object objRetorno = bd.ExecuteScalar();
     return (objRetorno == null) ? 0 : Convert.ToInt32(objRetorno);
 }
 /// <summary>
 /// Remove o substituto do usuário
 /// </summary>
 /// <param name="IdUsuario">Id do usuário</param>
 public static void RemoverSubstituto(int IdUsuario)
 {
     string sql = @"DELETE FROM CadeiaAutorizacao.Substituicao
                     WHERE Sub_IdUsuario = @IdUsuario";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@IdUsuario", DbType.Int32, IdUsuario);
     bd.ExecuteNonQuery();
 }
 /// <summary>
 /// Retorna o chamado para o Usp_ID
 /// </summary>
 /// <param name="usp_ID"></param>
 /// <returns></returns>
 public static int ObterCai_IDPorUsp_ID(int usp_ID)
 {
     string sql = @"SELECT Cai_ID
                 FROM CadeiaAutorizacao.UsuarioParticipacao
                 WHERE Usp_ID = @Usp_ID";
     BdUtil bd = new BdUtil(sql);
     bd.AdicionarParametro("@Usp_ID", DbType.Int32, usp_ID);
     return bd.ExecuteScalar<int>();
 }
public static void Alterar (System.Int32 original_Cau_Id, System.String Cau_Descri, System.Int32 Cau_TipoAprovacao, System.String Cau_UrlAprovacao, System.Int32? Hie_Id, System.String Cau_ClasseRetorno, System.String Cau_MetodoRetorno){
      string sql = 
@"UPDATE CadeiaAutorizacao.Cadeia SET
	Cau_Descri= @Cau_Descri
, 	Cau_TipoAprovacao= @Cau_TipoAprovacao
, 	Cau_UrlAprovacao= @Cau_UrlAprovacao
, 	Hie_Id= @Hie_Id
, 	Cau_ClasseRetorno= @Cau_ClasseRetorno
, 	Cau_MetodoRetorno= @Cau_MetodoRetorno

    WHERE Cau_Id = @Cau_Id";
	BdUtil bd = new BdUtil(sql);
	bd.AdicionarParametro("@Cau_Id", System.Data.DbType.Int32, -1, original_Cau_Id );
	bd.AdicionarParametro("@Cau_Descri", System.Data.DbType.String, 50, Cau_Descri );
	bd.AdicionarParametro("@Cau_TipoAprovacao", System.Data.DbType.Int32, -1, Cau_TipoAprovacao );
	bd.AdicionarParametro("@Cau_UrlAprovacao", System.Data.DbType.String, 100, Cau_UrlAprovacao );
	bd.AdicionarParametro("@Hie_Id", System.Data.DbType.Int32, -1, Hie_Id );
	bd.AdicionarParametro("@Cau_ClasseRetorno", System.Data.DbType.String, 100, Cau_ClasseRetorno );
	bd.AdicionarParametro("@Cau_MetodoRetorno", System.Data.DbType.String, 50, Cau_MetodoRetorno );
      bd.ExecuteNonQuery();
    }
        /// <summary>
        /// Executa o método do sistema fornecendo o Id da participação
        /// </summary>
        /// <param name="IdParticipacao">Id da participação</param>
        private static void ExecutarMetodoSistema(int IdParticipacao, Autorizacao Autorizacao, string Mensagem)
        {
            string sql = @"SELECT cau.Cau_ClasseRetorno, cau.Cau_MetodoRetorno, cai.Cai_Id, usp.Usu_ID
                             FROM CadeiaAutorizacao.UsuarioParticipacao usp
                             INNER JOIN CadeiaAutorizacao.CadeiaInstancia cai on cai.Cai_Id = usp.Cai_Id
                             INNER JOIN CadeiaAutorizacao.Cadeia cau on cau.Cau_Id = cai.Cau_Id
                             WHERE usp.Usp_Id = @IdParticipacao";
            BdUtil bd = new BdUtil(sql);
            bd.AdicionarParametro("@IdParticipacao", DbType.Int32, IdParticipacao);
            DataTable dt = bd.ObterDataTable();
            if (dt.Rows.Count == 0)
            {
                throw new SecvException("Erro ao obter o método do sistema e id da instância");
            }
            string nomeClasse = dt.Rows[0]["Cau_ClasseRetorno"].ToString();
            string nomeMetodo = dt.Rows[0]["Cau_MetodoRetorno"].ToString();
            int IdInstancia = Convert.ToInt32(dt.Rows[0]["Cai_Id"]);
            Type tipo = Type.GetType(nomeClasse);
            if (tipo == null)
            {
                throw new SecvException("Classe não encontrada.");
            }
            MethodInfo metodo = tipo.GetMethod(nomeMetodo);
            if (metodo == null)
            {
                throw new SecvException("Método não encontrado.");
            }

            int i = 0;
            List<object> parametros = new List<object>();
            parametros.Add(IdInstancia);
            parametros.Add(Autorizacao);
            foreach (ParameterInfo parametro in metodo.GetParameters())
            {
                switch (i)
                {
                    case 0:
                        {
                            if (parametro.ParameterType != typeof(int))
                            {
                                throw new SecvException("A ordem dos parâmetros tem que ser System.Int32, Autorizacao.");
                            }
                            i++;
                        }
                        break;
                    case 1:
                        {
                            if (parametro.ParameterType != typeof(Autorizacao))
                            {
                                throw new SecvException("A ordem dos parâmetros tem que ser System.Int32, Autorizacao.");
                            }
                            i++;
                        }
                        break;
                    case 2:
                        {
                            if (parametro.ParameterType == typeof(String))
                            {
                                parametros.Add(Mensagem);
                            }
                            else if (parametro.ParameterType == typeof(int))
                            {

                                parametros.Add(Convert.ToInt32(dt.Rows[0]["Usu_ID"]));
                            }
                            else
                            {
                                throw new SecvException("A ordem dos parâmetros tem que ser [System.Int32 cai_ID, Autorizacao autorizacao, System.String mensagem] ou [System.Int32 cai_ID, Autorizacao autorizacao, System.Int32 UsuarioAprovador].");
                            }

                            i++;
                        }
                        break;
                }
            }
            if ( i < 2 && i > 3)
                throw new SecvException("Quantidade de parametros inválida");
            metodo.Invoke(null, parametros.ToArray());
        }