public void TramitarProcesso(Tramite tramite) { SituacaoCtrl controleSituacao = new SituacaoCtrl(); conn = GetConn.getConn(); using (conn) { conn.Open(); string sqlGen = "select gen_id(GEN_WEBTRAMITE_ID,1) from rdb$database"; FbCommand cmdGen = new FbCommand(sqlGen, conn); tramite.ID = Convert.ToInt32(cmdGen.ExecuteScalar()); string sqlSit = "Select coalesce( FLAG_SITUACAO_VOLTA, 0) FLAG_SITUACAO_VOLTA FROM WEBSITUACAOPROCESSO WHERE ID= " + tramite.Situacao._id; FbCommand cmdSit = new FbCommand(sqlSit, conn); tramite._fluxo_volta = (int)cmdSit.ExecuteScalar(); string flagSituacaoVolta = retornaFlagSituacaoVolta(RetornaUltimoTramite(tramite.Proc._IDPROC.ToString()).ToString()); if (!string.IsNullOrEmpty(flagSituacaoVolta)) { tramite.Fluxo._ID = int.Parse(flagSituacaoVolta); } if (tramite.valor_pag == 0 && tramite.valor_liq == 0) { string sql = "INSERT INTO WEBTRAMITE(ID,DATAENVIO,DATARECEBIMENTO,DESPACHO,IDPROCESSO,IDSITUACAOPROJETO,IDUNDFUNCORIGEM,IDUNDFUNCDESTINO,USUARIOENVIO,USUARIORECEBIMENTO,FLUXOID,IDORGAOEXTERNO,FLAG_SITUACAO_VOLTA)" + "VALUES" + "(" + tramite.ID + "," + Util.Util.DateOrNUll(tramite._dataEnvio).Replace("/", ".") + "," + Util.Util.DateOrNUll(tramite._dataRecebimento).Replace("/", ".") + "," + "'" + tramite._despacho + "'," + tramite.Proc._IDPROC + "," + tramite.Situacao._id + "," + tramite.UndFuncOrigem.ID + "," + RetornaNULLUsuario(tramite.UndFuncDestino.ID) + "," + tramite.UsuOrigem.UsuarioID + "," + RetornaNULLUsuario(tramite.UsuDestino.UsuarioID) + "," + tramite.Fluxo._ID + "," + RetornaNULLUsuario(tramite._orgaoExterno) + "," + RetornaNULLUsuario(tramite._fluxo_volta) + ")"; //FbConnection conn2 = GetConn.getConn(); FbCommand cmdInsertTramite = new FbCommand(sql, conn); //conn2.Open(); cmdInsertTramite.ExecuteNonQuery(); //conn2.Close(); } else { if (tramite.valor_liq == 0) { tramite.notaFiscal = "null"; } else { tramite.notaFiscal = "'" + tramite.notaFiscal + "'"; } string sql = "INSERT INTO WEBTRAMITE(ID,DATAENVIO,DATARECEBIMENTO,DESPACHO,IDPROCESSO,IDSITUACAOPROJETO,IDUNDFUNCORIGEM,IDUNDFUNCDESTINO,USUARIOENVIO,USUARIORECEBIMENTO,FLUXOID,IDORGAOEXTERNO,FLAG_SITUACAO_VOLTA, VAL_PAGO,VAL_LIQUIDADO,NF_LIQUIDACAO,DATA_LIQUIDACAO,DATA_PAGAMENTO,DATA_ACEITE_NF,LIQ_RESPONSAVEL)" + "VALUES" + "(" + tramite.ID + "," + Util.Util.DateOrNUll(tramite._dataEnvio).Replace("/", ".") + "," + Util.Util.DateOrNUll(tramite._dataRecebimento).Replace("/", ".") + "," + "'" + tramite._despacho + "'," + tramite.Proc._IDPROC + "," + tramite.Situacao._id + "," + tramite.UndFuncOrigem.ID + "," + RetornaNULLUsuario(tramite.UndFuncDestino.ID) + "," + tramite.UsuOrigem.UsuarioID + "," + RetornaNULLUsuario(tramite.UsuDestino.UsuarioID) + "," + tramite.Fluxo._ID + "," + RetornaNULLUsuario(tramite._orgaoExterno) + "," + RetornaNULLUsuario(tramite._fluxo_volta) + "," + tramite.valor_pag.ToString().Replace(".", "").Replace(",", ".") + "," + tramite.valor_liq.ToString().Replace(".", "").Replace(",", ".") + "," + tramite.notaFiscal + "," + Util.Util.DateOrNUll(Convert.ToDateTime(tramite.dataLiquidacao)).Replace("/", ".") + "," + Util.Util.DateOrNUll(Convert.ToDateTime(tramite.dataPagamento)).Replace("/", ".") + "," + Util.Util.DateOrNUll(Convert.ToDateTime(tramite.dataAceiteNF)).Replace("/", ".") + ",'" + tramite.liqResponsavel + "')"; //FbConnection conn2 = GetConn.getConn(); FbCommand cmdInsertTramite = new FbCommand(sql, conn); //conn2.Open(); cmdInsertTramite.ExecuteNonQuery(); //cmdInsertTramite.Dispose(); //conn2.Close(); //FbConnection connUpd = Persist.GetConn.getConn(); string sqlDID = "update webdid set notafiscal = " + tramite.notaFiscal + " where numero = " + Control.ProcessoCtrl.RetornaNumeroProcessoByID(tramite.Proc._IDPROC.ToString()); FbCommand cmdUpdate = new FbCommand(sqlDID, conn); //connUpd.Open(); cmdUpdate.ExecuteNonQuery(); //cmdUpdate.Dispose(); //cmdUpdate = null; //connUpd.Close(); } if (controleSituacao.ehFinalDeFluxo(tramite.Situacao._id.ToString())) { ProcessoCtrl controleProcesso = new ProcessoCtrl(); controleProcesso.Excluir(tramite.Proc._IDPROC.ToString()); } } controleSituacao = null; }
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; }