Beispiel #1
0
        public static string Persistir(PROCESSO proc, string op)
        {
            if (op == "new")
            {
                string numeroProcesso = string.Empty;

                UsuariosControle ctrlUsu = new UsuariosControle();

                TramiteCtrl controleTramite = new TramiteCtrl();
                AcessoDados.AcessoDados.abrirConn();

                string sqlGenID = "select gen_id(GEN_WEBPROCESSO_ID,1) from rdb$database";

                FirebirdSql.Data.FirebirdClient.FbDataReader drGenPRO = AcessoDados.AcessoDados.DataReader(sqlGenID);
                while (drGenPRO.Read())
                {
                    proc._IDPROC = int.Parse(drGenPRO["GEN_ID"].ToString());
                }

                AcessoDados.AcessoDados.fecharConn();

                proc.Env._ID = EnvolvidoCtrl.Persistir(proc.Env);

                string exercicio = Configuracoes.Dados.getExercicioAtual();

                string numProcesso = Configuracoes.Dados.getNumeroProcesso();

                string sqlProcesso = "insert into WEBPROCESSO(ID,NUMERO,IDASSUNTO,IDPREFEITURA,CORPO,DATAHORACADASTRO,NOOUTROSISTEMA,RESPONSAVEL,IDENVOLVIDO,IDPRIORIDADE,EXERCICIO)VALUES" +
                "(" + proc._IDPROC + ",'" + numProcesso + "'," + proc._IDASSUNTO + "," + proc._IDPREFEITURA + ",'" + proc._CORPO + "','" + DateTime.Now.ToShortDateString().Replace("/", ".") + "'," +
                "'" + proc._NOOUTROSISTEMA + "','" + proc._RESPONSAVEL + "',"+ proc.Env._ID+","+ proc.Prio._id+",'"+ exercicio +"')";
                AcessoDados.AcessoDados.executar(sqlProcesso);

                //proc._NUMERO = proc._IDPROC.ToString() + exercicio;// DateTime.Now.Year;
                proc._NUMERO = numProcesso;

                //1º registro do tramite
                Tramite tra = new Tramite();
                tra._dataEnvio = DateTime.Now;
                tra._dataRecebimento = DateTime.Now;
                tra._despacho = null;
                tra.UsuOrigem.UsuarioID = ctrlUsu.GetUsuarioByLogin(HttpContext.Current.Session["pUId"].ToString()).UsuarioID;
                tra.UsuDestino.UsuarioID = tra.UsuOrigem.UsuarioID;
                tra.UndFuncOrigem.ID = UndFuncionalCtrl.getUndFuncByUsuID(tra.UsuOrigem.UsuarioID.ToString());
                tra.UndFuncDestino.ID = tra.UndFuncOrigem.ID;
                tra.Proc._IDPROC = proc._IDPROC;
                tra.Fluxo._ID = FluxoAssuntoCtrl.getPrimeiroFluxo("1")._ID;
                tra.Situacao._id = 46;//Novo Fluxo Maranguape
                //tra.Situacao._id = 1; //Velho Fluxo
                controleTramite.TramitarProcesso(tra);

                //2º registro do tramite
                //Tramite tra2 = new Tramite();
                //tra2._dataEnvio = DateTime.Now;
                //tra2._despacho = null;
                //tra2.UsuOrigem.UsuarioID = UsuariosControle.GetUsuarioByLogin(HttpContext.Current.Session["pUId"].ToString()).UsuarioID;
                //tra2.UndFuncOrigem.ID = UndFuncionalCtrl.getUndFuncByUsuID(tra.UsuOrigem.UsuarioID.ToString());
                //tra2.UndFuncDestino.ID = FluxoAssuntoCtrl.getPrimeiroFluxo("1").UndFunc.ID;
                //tra2.Fluxo._ID = FluxoAssuntoCtrl.getPrimeiroFluxo("1")._ID;
                //tra2.Proc._IDPROC = proc._IDPROC;
                //tra2.Situacao._id = 1;
                //TramiteCtrl.TramitarProcesso(tra2);

            }
            else {
                if(op == "edt")
                {

                }
            }

            return proc._NUMERO;
        }
Beispiel #2
0
            //Grava os dados do DID Finalizado e persiste no tramite
            public string[] gravaDID(string procNumero)
            {
                //retorno[0] = Mensagem;
                //retorno[1] = Numero do processo;

                int procID = 0;
                string[] retorno = new string[2];

                var conn = new FbConnection();
                conn = Persist.GetConn.getConn();

                using (conn) {
                    conn.Open();

                    string query = "Select id from webprocesso where numero =" + procNumero;
                    var cmd = new FbCommand(query, conn);
                    var dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        procID = (int)dr["id"];
                    }
                }

                var tramiteCtrl = new TramiteCtrl();

                if (!tramiteCtrl.processoTemPrimeiroTramite(procID.ToString()))
                {

                    string idUsu = "";
                    string idUndFunc = "";
                    string undOrc = "";
                    var usuarioCtrl = new UsuariosControle();
                    var controleTramite = new TramiteCtrl();
                    var usuarioInfo = usuarioCtrl.getSessionUsuarioInfo();
                    idUsu = usuarioInfo.Item2;
                    idUndFunc = usuarioInfo.Item3;
                    undOrc = usuarioInfo.Item4;

                    var tra = new Tramite();
                    tra._dataEnvio = DateTime.Now;
                    tra._dataRecebimento = DateTime.Now;
                    tra._despacho = null;
                    tra.UsuOrigem.UsuarioID = int.Parse(idUsu);
                    tra.UsuDestino.UsuarioID = int.Parse(idUsu);
                    tra.UndFuncOrigem.ID = int.Parse(idUndFunc);
                    tra.UndFuncDestino.ID = int.Parse(idUndFunc);
                    tra.Proc._IDPROC = procID;
                    tra.Fluxo._ID = FluxoAssuntoCtrl.getPrimeiroFluxo("1")._ID;
                    tra.Situacao._id = 46;//Novo Fluxo Maranguape
                    controleTramite.TramitarProcesso(tra);
                }
                retorno[0] = "Processo "+ procNumero + " gravado com sucesso!!!";
                retorno[1] = procNumero;

                return retorno;
            }
        protected void btnRetornar_Click(object sender, EventArgs e)
        {
            string idProc = GetSelectedRowValueRadioButton("ID");

            TramiteCtrl controleTramite = new TramiteCtrl();
            controleTramite.MarcarComoRecebido(idProc);

            DataSource.DataBind();
            Grid.DataBind();
        }
Beispiel #4
0
        public static string Persistir(PROCESSO proc, string op, string procPai, string tipoLiqPag, double valor, string notaFiscal, string dataLiquidacao, string dataAceiteNF)
        {
            if (op == "new")
            {
                UsuariosControle ctrlUsu = new UsuariosControle();
                TramiteCtrl controleTramite = new TramiteCtrl();
                AcessoDados.AcessoDados.abrirConn();
                string sqlGenID = "select gen_id(GEN_WEBPROCESSO_ID,1) from rdb$database";
                FirebirdSql.Data.FirebirdClient.FbDataReader drGenPRO = AcessoDados.AcessoDados.DataReader(sqlGenID);
                while (drGenPRO.Read())
                {
                    proc._IDPROC = int.Parse(drGenPRO["GEN_ID"].ToString());
                }
                AcessoDados.AcessoDados.fecharConn();

                proc.Env._ID = EnvolvidoCtrl.Persistir(proc.Env);

                string exercicio = Configuracoes.Dados.getExercicioAtual();

                string numProcesso = Configuracoes.Dados.getNumeroProcesso();

                string sqlProcesso = "insert into WEBPROCESSO(ID,NUMERO,IDASSUNTO,IDPREFEITURA,CORPO,DATAHORACADASTRO,NOOUTROSISTEMA,RESPONSAVEL,IDENVOLVIDO,IDPRIORIDADE,IDPROCESSOPAI,TIPOLIQPAG)VALUES" +
                "(" + proc._IDPROC + ",'" + numProcesso + "'," + proc._IDASSUNTO + "," + proc._IDPREFEITURA + ",'" + proc._CORPO + "','" + DateTime.Now.ToShortDateString().Replace("/", ".") + "'," +
                "'" + proc._NOOUTROSISTEMA + "','" + proc._RESPONSAVEL + "'," + proc.Env._ID + "," + proc.Prio._id + ","+ procPai +",'"+ tipoLiqPag +"')";
                AcessoDados.AcessoDados.executar(sqlProcesso);

                proc._NUMERO = numProcesso;

                //1º registro do tramite
                Tramite tra = new Tramite();
                tra._dataEnvio = DateTime.Now;
                tra._dataRecebimento = DateTime.Now;
                tra._despacho = null;
                tra.UsuOrigem.UsuarioID = ctrlUsu.GetUsuarioByLogin(HttpContext.Current.Session["pUId"].ToString()).UsuarioID;
                tra.UsuDestino.UsuarioID = tra.UsuOrigem.UsuarioID;
                tra.UndFuncOrigem.ID = UndFuncionalCtrl.getUndFuncByUsuID(tra.UsuOrigem.UsuarioID.ToString());
                tra.UndFuncDestino.ID = tra.UndFuncOrigem.ID;
                tra.Proc._IDPROC = proc._IDPROC;

                tra.Fluxo._ID = FluxoAssuntoCtrl.getPrimeiroFluxo(proc._IDASSUNTO.ToString())._ID;

                switch (tipoLiqPag) {
                    case "L": tra.valor_liq = valor;
                        tra.valor_pag = 0;
                        tra.Situacao._id = 47; //Novo Fluxo Maranguape
                        //tra.Situacao._id = 24;
                        tra.notaFiscal = notaFiscal;
                        tra.dataLiquidacao = dataLiquidacao;
                        tra.dataAceiteNF = dataAceiteNF;
                        break;
                    case "P": tra.valor_liq = 0;
                        tra.valor_pag = valor;
                        //tra.Situacao._id = 1;
                        tra.Situacao._id = 50;// Novo Fluxo Maranguape
                        tra.dataPagamento = dataLiquidacao;
                        break;
                }

                controleTramite.TramitarProcesso(tra);
            }
            else
            {
                if (op == "edt")
                {

                }
            }

            return proc._NUMERO;
        }
        protected void btnEncaminharFooter_Click(object sender, EventArgs e)
        {
            TramiteCtrl controleTramite = new TramiteCtrl();
            Assunto controleAssunto = new Assunto();
            UndFuncionalCtrl controleUndFuncional = new UndFuncionalCtrl();
            UsuariosControle ctrlUsu = new UsuariosControle();

            Model.Tramite tramite = new Model.Tramite();
            tramite._dataEnvio = DateTime.Now;
            tramite._despacho = txtDespacho.Text;
            tramite.Situacao._id = int.Parse(cbbSituacao.Value.ToString());
            tramite.Proc._IDPROC = int.Parse(txtTeste.Text);
            tramite.UndFuncDestino.ID = int.Parse(cbbUnidadeFuncional.SelectedItem.Value.ToString());
            tramite.UndFuncOrigem.ID = int.Parse(controleUndFuncional.getUnidadeFuncionalAtual(txtTeste.Text));
            tramite.UsuOrigem.UsuarioID = ctrlUsu.GetUsuarioByLogin(HttpContext.Current.Session["pUId"].ToString()).UsuarioID;
            if (cbbUsuario.SelectedItem != null)
            {
                tramite.UsuDestino.UsuarioID = int.Parse(cbbUsuario.SelectedItem.Value.ToString());
            }

            if (controleAssunto.AssuntoTemFluxo(controleAssunto.GetAssuntoByNome(txtAssunto.Text)))
            {
                tramite.Fluxo._ID = controleUndFuncional.getProximoFluxoByProcesso(txtTeste.Text, cbbSituacao.Value.ToString(), cbbUnidadeFuncional.SelectedItem.Value.ToString());
            }

            controleTramite.TramitarProcesso(tramite);
            DataSource.DataBind();
            Grid.DataBind();
        }
        protected void btnReceber_Click(object sender, EventArgs e)
        {
            List<object> values = GetSelectedRowValues("ID");

            foreach (object obj in values)
            {
                TramiteCtrl controleTramite = new TramiteCtrl();
                controleTramite.MarcarComoRecebido(obj.ToString());
            }

            DataSource.DataBind();
            Grid.DataBind();
        }
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            TramiteCtrl controleTramite = new TramiteCtrl();
            string idProc = GetSelectedRowValueRadioButton("ID");
            controleTramite.DeletaTramite(controleTramite.RetornaUltimoTramite(idProc));

            DataSource.DataBind();
            Grid.DataBind();

            controleTramite = null;
            GC.Collect();
        }
        protected void btnEncaminharFooterExterno_Click(object sender, EventArgs e)
        {
            Model.Tramite tramite = new Model.Tramite();
            TramiteCtrl controleTramite = new TramiteCtrl();
            FluxoAssuntoCtrl controleFluxoAssunto = new FluxoAssuntoCtrl();
            UndFuncionalCtrl controleUndFuncional = new UndFuncionalCtrl();
            UsuariosControle controleUsuarios = new UsuariosControle();

            tramite._dataEnvio = DateTime.Now;
            tramite._despacho = txtEncaminhamentoExterno.Text;

            tramite.Situacao._id = int.Parse(cbbSituacaoExterno.SelectedItem.Value.ToString());
            tramite.Proc._IDPROC = int.Parse(txtIDPROC.Text);
            tramite.UndFuncOrigem.ID = int.Parse(controleUndFuncional.getUnidadeFuncionalAtual(txtIDPROC.Text));
            tramite.UsuOrigem.UsuarioID = controleUsuarios.GetUsuarioByLogin(HttpContext.Current.Session["pUId"].ToString()).UsuarioID;

            tramite.Fluxo._ID = int.Parse(controleFluxoAssunto.getFluxoAtual(txtIDPROC.Text));
            tramite._orgaoExterno = int.Parse(cbbOrgaoExterno.SelectedItem.Value.ToString());

            controleTramite.TramitarProcesso(tramite);

            controleTramite = null;
            controleUndFuncional = null;
            controleUsuarios = null;
            controleFluxoAssunto = null;
            tramite = null;
            GC.Collect();

            DataSource.DataBind();
            Grid.DataBind();
        }
        protected void pcEncaminhar_WindowCallback(object source, DevExpress.Web.ASPxPopupControl.PopupWindowCallbackArgs e)
        {
            SituacaoCtrl controleSituacao = new SituacaoCtrl();
            CentroDeCustoCtrl controleCentroCusto = new CentroDeCustoCtrl();
            ObjetivoComumDeGastoCtrl controleObjetivo = new ObjetivoComumDeGastoCtrl();
            FluxoAssuntoCtrl controleFluxoAssunto = new FluxoAssuntoCtrl();

            //txtTeste.Text = GetSelectedRowValueRadioButton("ID", ASPxGridView2);
            //txtAssunto.Text = GetSelectedRowValueRadioButton("DESCRICAO", ASPxGridView2);
            //txtExercicio.Text = GetSelectedRowValueRadioButton("EXERCICIO", ASPxGridView2);

            List<object> dadosGrid = GetSelectRowValueRadioNovo("ID", "DESCRICAO", "EXERCICIO", "VALORDID", "TRAMITEID", ASPxGridView2);

            string valorDID = string.Empty;

            foreach (List<object> obj in dadosGrid)
            {
                txtTeste.Text = obj[0].ToString();
                txtAssunto.Text = obj[1].ToString();
                txtExercicio.Text = obj[2].ToString();
                valorDID = obj[3].ToString();
                txtTramiteID.Text = obj[4].ToString();
            }

            var ctrlTramite = new TramiteCtrl();
            txtTramiteIDBancoDados.Text = ctrlTramite.RetornaUltimoTramite(txtTeste.Text).ToString();

            Session.Remove("IDPROCESSO");
            Session.Add("IDPROCESSO", txtTeste.Text);

            string centroCusto = controleCentroCusto.getCentroCustoByProcessoNumero(int.Parse(txtTeste.Text)).ToString();
            txtCentroCusto.Text = centroCusto;

            cbbSituacao.DataSourceID = string.Empty;
            cbbSituacao.DataSource = controleSituacao.getSituacaoByPerfilAssuntoFluxo(txtAssunto.Text, txtTeste.Text, centroCusto);
            cbbSituacao.DataBind();
            if (cbbSituacao.Items.Count == 1)
            {
                cbbSituacao.SelectedIndex = 0;
            }

            ObjectDataSource3.SelectParameters["centroCusto"].DefaultValue = centroCusto;
            ObjectDataSource3.DataBind();
            gridDID.DataBind();
            //string valorDID = GetSelectedRowValueRadioButton("VALORDID", ASPxGridView2);

            ASPxTextBox1.Text = controleObjetivo.testeTelaOGC(controleFluxoAssunto.getFluxoAtual(txtTeste.Text), centroCusto);

            controleSituacao = null;
            controleCentroCusto = null;
            controleObjetivo = null;
            controleFluxoAssunto = null;
            GC.Collect();
        }
        protected void btnRetornar_Click(object sender, EventArgs e)
        {
            string idProc = GetSelectedRowValueRadioButton("ID", ASPxGridView5);

            TramiteCtrl controleTramite = new TramiteCtrl();
            controleTramite.MarcarComoRecebido(idProc);

            sqlOrgaosExternos.DataBind();
            ASPxGridView5.DataBind();
        }
        protected void btnReceber_Click(object sender, EventArgs e)
        {
            List<object> values  = GetSelectedRowValues("ID", ASPxGridView1);

            foreach (object obj in values)
            {
                TramiteCtrl controleTramite = new TramiteCtrl();
                controleTramite.MarcarComoRecebido(obj.ToString());
            }

            ASPxGridView1.DataBind();
            sqlDSCXEntrada.DataBind();
        }
        protected void ASPxCallback2_Callback(object source, DevExpress.Web.ASPxCallback.CallbackEventArgs e)
        {
            if (string.IsNullOrEmpty(DIDLPCtrl.getSituacaoLiquidacao(e.Parameter.ToString().ToString())) && e.Parameter.ToString() != "EncaminharLiquidacao")
            {
                Assunto controleAssunto = new Assunto();
                TramiteCtrl controleTramite = new TramiteCtrl();
                Model.Tramite tramite = new Model.Tramite();
                UndFuncionalCtrl controleUndFuncional = new UndFuncionalCtrl();
                UsuariosControle controleUsuarios = new UsuariosControle();

                tramite._dataEnvio = DateTime.Now;
                tramite._despacho = txtDespacho.Text;
                tramite.Situacao._id = int.Parse(cbbSituacao.Value.ToString());
                tramite.Proc._IDPROC = int.Parse(txtTeste.Text);
                tramite.UndFuncDestino.ID = int.Parse(cbbUnidadeFuncional.Value.ToString());
                tramite.UndFuncOrigem.ID = int.Parse(controleUndFuncional.getUnidadeFuncionalAtual(txtTeste.Text));
                tramite.UsuOrigem.UsuarioID = controleUsuarios.GetUsuarioByLogin(HttpContext.Current.Session["pUId"].ToString()).UsuarioID;
                if (cbbUsuario.SelectedItem != null)
                {
                    tramite.UsuDestino.UsuarioID = int.Parse(cbbUsuario.SelectedItem.Value.ToString());
                }

                if (controleAssunto.AssuntoTemFluxo(controleAssunto.GetAssuntoByNome(txtAssunto.Text)))
                {
                    tramite.Fluxo._ID = controleUndFuncional.getProximoFluxoByProcesso(txtTeste.Text, cbbSituacao.Value.ToString(), cbbUnidadeFuncional.Value.ToString());
                }

                controleTramite.TramitarProcesso(tramite);
                sqlDSCXAnalise.DataBind();
                ASPxGridView2.DataBind();

                controleAssunto = null;
                controleTramite = null;
                controleUndFuncional = null;
                controleUsuarios = null;
                tramite = null;

                GC.Collect();

                e.Result = "EncaminhadoSemLiquidacao|";
            }
            else {
                if (e.Parameter.ToString() == "EncaminharLiquidacao")
                {
                    Assunto controleAssunto = new Assunto();
                    TramiteCtrl controleTramite = new TramiteCtrl();
                    Model.Tramite tramite = new Model.Tramite();
                    UndFuncionalCtrl controleUndFuncional = new UndFuncionalCtrl();
                    UsuariosControle controleUsuarios = new UsuariosControle();

                    tramite._dataEnvio = DateTime.Now;
                    tramite._despacho = txtDespacho.Text;
                    tramite.Situacao._id = int.Parse(cbbSituacao.Value.ToString());
                    tramite.Proc._IDPROC = int.Parse(txtTeste.Text);
                    tramite.UndFuncDestino.ID = int.Parse(cbbUnidadeFuncional.Value.ToString());
                    tramite.UndFuncOrigem.ID = int.Parse(controleUndFuncional.getUnidadeFuncionalAtual(txtTeste.Text));
                    tramite.UsuOrigem.UsuarioID = controleUsuarios.GetUsuarioByLogin(HttpContext.Current.Session["pUId"].ToString()).UsuarioID;
                    tramite.valor_liq = float.Parse(txtValor.Text);
                    tramite.notaFiscal = txtNota.Text;
                    tramite.dataLiquidacao = txtData.Text;
                    tramite.dataAceiteNF = txtDataRecebimentoNota.Text;
                    tramite.liqResponsavel = controleUsuarios.GetUsuarioByLogin(HttpContext.Current.Session["pUId"].ToString()).Nome;

                    if (cbbUsuario.SelectedItem != null)
                    {
                        tramite.UsuDestino.UsuarioID = int.Parse(cbbUsuario.SelectedItem.Value.ToString());
                    }

                    if (controleAssunto.AssuntoTemFluxo(controleAssunto.GetAssuntoByNome(txtAssunto.Text)))
                    {
                        tramite.Fluxo._ID = controleUndFuncional.getProximoFluxoByProcesso(txtTeste.Text, cbbSituacao.Value.ToString(), cbbUnidadeFuncional.Value.ToString());
                    }

                    tramite.contasPagadoras = (DataTable)Session["ContasBanco"];

                    controleTramite.TramitarProcesso(tramite);

                    Model.Envolvidos env = new Model.Envolvidos();
                    env._ID = EnvolvidoCtrl.getEnvolvidoByProcessoNumero(txtProcNumero.Value.ToString())._ID;
                    env._banco = txtBanco.Value.ToString();
                    env._agencia = txtAgencia.Value.ToString();
                    env._DVagencia = txtDVAG.Value.ToString();
                    env._conta = txtConta.Value.ToString();
                    env._DVconta = txtDVCC.Value.ToString();
                    EnvolvidoCtrl.GravaDadosBancarios(env);

                    ProcessoCtrl.GravaMesReferenciaByProcesso(txtProcNumero.Value.ToString(), txtMesReferencia.Value.ToString());

                    sqlDSCXAnalise.DataBind();
                    ASPxGridView2.DataBind();
                    controleAssunto = null;
                    controleTramite = null;
                    controleUndFuncional = null;
                    controleUsuarios = null;
                    tramite = null;
                    GC.Collect();
                    e.Result = "EncaminhadoLiquidacao|" + txtTeste.Text;
                }
                else {
                    if (!string.IsNullOrEmpty(DIDLPCtrl.getSituacaoLiquidacao(e.Parameter.ToString().ToString())))
                    {
                        e.Result = "MostrarLiquidacao";
                    }
                }
            }
        }
        public System.Data.DataTable getProximaUnidadeFuncionalByFluxoNova(string processoID, string idAssunto, string situacaoID, string undOrcID)
        {
            SituacaoCtrl controleSituacao = new SituacaoCtrl();
            Assunto controleAssunto = new Assunto();
            TramiteCtrl controleTramite = new TramiteCtrl();
            FluxoAssuntoCtrl controleFluxoAssunto = new FluxoAssuntoCtrl();

            string fluxoAtual = controleFluxoAssunto.getFluxoAtual(processoID);

            string unidCod = undOrcID.ToString().Substring(2, 2);
            string unidORG = undOrcID.ToString().Substring(0, 2);

            Situacao situacao = new Situacao();
            List<string> UnidadesFuncionais = new List<string>();

            string ordenacao = "";
            string sqlAssunto = "select * from webassunto where id = " + idAssunto; //Verifica se Assunto tem fluxo definido

            FbConnection conn = Persist.GetConn.getConn();
            conn.Open();
            FbCommand cmdAssunto = new FbCommand(sqlAssunto, conn);

            FirebirdSql.Data.FirebirdClient.FbDataReader drAssunto = cmdAssunto.ExecuteReader();
            while (drAssunto.Read())
            {
                ordenacao = drAssunto["EXIGEORDENACAO"].ToString();
            }
            drAssunto.Close();
            drAssunto.Dispose();
            cmdAssunto.Dispose();

            if (!ordenacao.Equals("1")) //Se não tem fluxo definido...
            {
                string sqlUND = "Select * from webunidadefuncional where unidorccod = " + unidCod + "  unidorcorg = " + unidORG;

                FbCommand cmdUND = new FbCommand(sqlUND, conn);

                FirebirdSql.Data.FirebirdClient.FbDataReader drUND = cmdUND.ExecuteReader();
                while (drUND.Read())
                {
                    UnidadesFuncionais.Add(drUND["UNIDFUNCID"].ToString());
                }
                drUND.Close();
                drUND.Dispose();
                cmdUND.Dispose();
            }
            else//Se tem fluxo definido...
            {
                if (controleSituacao.ehFinalDeFluxo(situacaoID)) //Se Situação selecionada indicar fim de fluxo
                {
                    UndFuncionalCtrl controleUndFuncional = new UndFuncionalCtrl();
                    string undFunc = controleUndFuncional.getUnidadeFuncionalArquivo();
                    UnidadesFuncionais.Add(undFunc);
                }
                else
                {
                    if (controleSituacao.TramiteTemSituacaoDeExcessao(controleTramite.RetornaUltimoTramite(processoID).ToString())) //Se o tramite indica um Fluxo que não seja natural (volta à um passo a frente)
                    {
                        string FlagSituacaoVolta = "";
                        string sqlExcVolta = "Select FLAG_SITUACAO_VOLTA from WEBTRAMITE WHERE ID =  " + controleTramite.RetornaUltimoTramite(processoID).ToString();

                        FbCommand cmdExcVolta = new FbCommand(sqlExcVolta, conn);

                        FirebirdSql.Data.FirebirdClient.FbDataReader drEX = cmdExcVolta.ExecuteReader();
                        while (drEX.Read())
                        {
                            FlagSituacaoVolta = drEX["FLAG_SITUACAO_VOLTA"].ToString();
                        }
                        drEX.Close();
                        drEX.Dispose();
                        cmdExcVolta.Dispose();

                        string sqlExc = "select * from unidadeorcamentaria uo " +
                                        "join webunidadefuncional uf on uf.unidorccod = uo.undcodigo and uf.unidorcorg = uo.undcodorgao " +
                                        "join webfluxoassunto fa on fa.idundfuncional = uf.unidfuncid " +
                                        "where fa.fluxoID = " + FlagSituacaoVolta + " and fa.idassunto = " + idAssunto;

                        FbCommand cmdExc = new FbCommand(sqlExc, conn);

                        FirebirdSql.Data.FirebirdClient.FbDataReader dr = cmdExc.ExecuteReader();

                        while (dr.Read())
                        {
                            UnidadesFuncionais.Add(dr["UNIDFUNCID"].ToString());
                        }
                        dr.Close();
                        dr.Dispose();
                        cmdExc.Dispose();

                    }
                    else
                    {
                        object situacaoRetorno = null;
                        object flagOrigem = null;

                        string sqlSituacao = "Select * from WEBSITUACAOPROCESSO WHERE ID = " + situacaoID; //Verifica situacao do processo selecionada pelo usuario

                        FbConnection connSit = Persist.GetConn.getConn();
                        FbCommand cmdSituacao = new FbCommand(sqlSituacao, connSit);
                        connSit.Open();
                        FirebirdSql.Data.FirebirdClient.FbDataReader drSituacao = cmdSituacao.ExecuteReader();
                        while (drSituacao.Read())
                        {
                            situacaoRetorno = drSituacao["FLUXOID"];
                            flagOrigem = drSituacao["FLAGORIGEM"];
                        }
                        connSit.Close();
                        drSituacao.Close();
                        drSituacao.Dispose();
                        cmdSituacao.Dispose();

                        if (!string.IsNullOrEmpty(flagOrigem.ToString()))
                        {
                            if (string.IsNullOrEmpty(situacaoRetorno.ToString()))
                            {
                                object unidFuncional = null;
                                string sql = "select first 1 idundfuncorigem from webtramite where idprocesso = " + processoID + "ORDER BY ID ASC";

                                FbCommand cmd = new FbCommand(sql, conn);

                                FirebirdSql.Data.FirebirdClient.FbDataReader dr = cmd.ExecuteReader();
                                while (dr.Read())
                                {
                                    unidFuncional = dr["IDUNDFUNCORIGEM"];
                                    UnidadesFuncionais.Add(dr["IDUNDFUNCORIGEM"].ToString());

                                }
                                dr.Close();
                                dr.Dispose();
                                cmd.Dispose();
                            }
                            else {//ALTERACAO 04062014
                                object unidFuncional = null;
                                string sql = "select (CASE WHEN IDUNDFUNCIONAL IS NULL THEN (select first 1 idundfuncorigem from webtramite where idprocesso = " + processoID + " ORDER BY ID ASC)"+
                                            " ELSE IDUNDFUNCIONAL END) IDUNDFUNCIONAL from webfluxoassunto WHERE FLUXOID = " + situacaoRetorno;
                                FbCommand cmd = new FbCommand(sql, conn);

                                FirebirdSql.Data.FirebirdClient.FbDataReader dr = cmd.ExecuteReader();
                                while (dr.Read())
                                {
                                    unidFuncional = dr["IDUNDFUNCIONAL"];
                                    UnidadesFuncionais.Add(dr["IDUNDFUNCIONAL"].ToString());

                                }
                                dr.Close();
                                dr.Dispose();
                                cmd.Dispose();
                            }
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(situacaoRetorno.ToString()))// Se não tem parametro de retorno definido -> Segue Fluxo normal
                            {
                                object unidFuncional = null;

                                string sqlFluxo = "select fluxoID, ordem," +
                                                    "(CASE WHEN idundfuncional IS NULL then (select first 1 TRA.idundfuncorigem from webtramite TRA where idprocesso = " + processoID + " order by id ASC) " +
                                                    "    ELSE " +
                                                    "        (select IDUNDFUNCIONAL from web_fluxo_filhos flf1 join webfluxoassunto flx1 on flx1.fluxoid = flf1.id_fluxo_filho " +
                                                    "            where flf1.id_fluxo_filho = flf.id_fluxo_filho and flf1.id_fluxo_pai = flf.id_fluxo_pai) END) UNDFUNC " +
                                                    "from web_fluxo_filhos flf join webfluxoassunto flx on flf.id_fluxo_filho = flx.fluxoid " +
                                                    "where flf.id_fluxo_pai = ( select first 1 FluxoID from webtramite tra where tra.idprocesso = " + processoID + " order by ID desc)";
                                //CORREÇÃO 21/03/2014
                                FbConnection connFlx = Persist.GetConn.getConn();
                                FbCommand cmd = new FbCommand(sqlFluxo, connFlx);
                                connFlx.Open();
                                FirebirdSql.Data.FirebirdClient.FbDataReader drFluxo = cmd.ExecuteReader();
                                while (drFluxo.Read())
                                {
                                    unidFuncional = drFluxo["UNDFUNC"];
                                    UnidadesFuncionais.Add(drFluxo["UNDFUNC"].ToString());

                                }
                                connFlx.Close();
                                drFluxo.Close();
                                drFluxo.Dispose();
                                cmd.Dispose();
                            }
                            else //Se a situacao selecionada tem paramtro de retorno definido -> Buscar a Unidade Funcional referente ao fluxo definido como retorno na situacao
                            {
                                object unidFuncional = null;

                                string sqlRetorno = "Select " +
                                                    "CASE WHEN IDUNDFUNCIONAL IS NULL THEN " +
                                                    "    (SELECT FIRST 1 TRA.idundfuncorigem FROM WEBTRAMITE TRA WHERE IDPROCESSO = " + processoID + ") " +
                                                    "    ELSE IDUNDFUNCIONAL end IDUNDFUNC " +
                                                    "from WEBFLUXOASSUNTO where FLUXOID = " + situacaoRetorno.ToString();
                                FbCommand cmd = new FbCommand(sqlRetorno, conn);

                                FirebirdSql.Data.FirebirdClient.FbDataReader drRet = cmd.ExecuteReader();
                                while (drRet.Read())
                                {
                                    unidFuncional = drRet["IDUNDFUNC"].ToString();
                                    UnidadesFuncionais.Add(drRet["IDUNDFUNC"].ToString());

                                }

                                drRet.Close();
                                drRet.Dispose();
                                cmd.Dispose();
                            }
                        }
                    }
                }
                conn.Close();
            }

            System.Data.DataTable table = new System.Data.DataTable();
            table.Columns.Add("UNIDFUNCID", typeof(string));
            table.Columns.Add("UNIDFUNCNOME", typeof(string));

            foreach (string UndFunc in UnidadesFuncionais)
            {
                UnidadeFuncional undFunc = new UnidadeFuncional();
                undFunc = getUndFuncByID(UndFunc);
                System.Data.DataRow[] drow = table.Select("UNIDFUNCID =" + undFunc.ID);
                table.Rows.Add(undFunc.ID, undFunc.unidFuncNome);
            }

            conn.Close();
            //conn.Dispose();

            controleSituacao = null;
            controleAssunto = null;
            controleTramite = null;
            controleFluxoAssunto = null;
            situacao = null;

            return table;
        }