public static string GravarLoteCH(TRegistro_LoteCH val, BancoDados.TObjetoBanco banco) { bool st_transacao = false; TCD_LoteCH qtb_lote = new TCD_LoteCH(); try { if (banco == null) { st_transacao = qtb_lote.CriarBanco_Dados(true); } else { qtb_lote.Banco_Dados = banco; } //Gravar lote string retorno = qtb_lote.GravarLoteCH(val); val.Id_lote = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(retorno, "@P_ID_LOTE")); //Desamarrar lista de cheques val.lChequesesc.ForEach(p => TCN_LoteCH_X_Titulo.DeletarLoteCh_X_Titulo( new TRegistro_LoteCH_X_Titulo() { Cd_banco = p.Cd_banco, Cd_empresa = p.Cd_empresa, Id_lote = val.Id_lote, Nr_lanctocheque = p.Nr_lanctocheque }, qtb_lote.Banco_Dados)); //Gravar lote x cheques val.lCheques.ForEach(p => { TCN_LoteCH_X_Titulo.GravarLoteCh_X_Titulo( new TRegistro_LoteCH_X_Titulo() { Cd_banco = p.Cd_banco, Cd_empresa = p.Cd_empresa, Id_lote = val.Id_lote, Nr_lanctocheque = p.Nr_lanctocheque }, qtb_lote.Banco_Dados); }); if (st_transacao) { qtb_lote.Banco_Dados.Commit_Tran(); } return(retorno); } catch (Exception ex) { if (st_transacao) { qtb_lote.Banco_Dados.RollBack_Tran(); } throw new Exception("Erro gravar lote: " + ex.Message.Trim()); } finally { if (st_transacao) { qtb_lote.deletarBanco_Dados(); } } }
public static void ProcessarLoteCH(TRegistro_LoteCH val, BancoDados.TObjetoBanco banco) { bool st_transacao = false; TCD_LoteCH qtb_lote = new TCD_LoteCH(); try { if (banco == null) { st_transacao = qtb_lote.CriarBanco_Dados(true); } else { qtb_lote.Banco_Dados = banco; } //Buscar config para descontar cheque CamadaDados.Financeiro.Cadastros.TList_CFGCheque lCfg = CamadaNegocio.Financeiro.Cadastros.TCN_CFGCheque.Buscar(val.Cd_empresa, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, 1, string.Empty, qtb_lote.Banco_Dados); if (lCfg.Count < 1) { throw new Exception("Não existe configuração para processar desconto de cheques."); } if (lCfg[0].Cd_historico_desconto.Trim().Equals(string.Empty)) { throw new Exception("Não existe configuração de historico de desconto para processar cheques."); } if (lCfg[0].Cd_historico_taxa.Trim().Equals(string.Empty)) { throw new Exception("Não existe configuração de historico de taxa para processar cheques."); } if (lCfg[0].Cd_historico_creddesconto.Trim().Equals(string.Empty)) { throw new Exception("Não existe configuração de historico de credito de desconto para processar cheques."); } //Total cheque descontar decimal tot_ch_descontar = val.lCheques.Where(p => p.St_conciliar).Sum(p => p.Vl_titulo); //Total taxa decimal tot_taxa = decimal.Zero; int cont = 0; //Buscar conta de compensacao do cheque object obj = new CamadaDados.Financeiro.Cadastros.TCD_CadContaGer().BuscarEscalar( new TpBusca[] { new TpBusca() { vNM_Campo = "a.cd_contager_compensacao", vOperador = "=", vVL_Busca = "'" + val.lCheques[0].Cd_contager.Trim() + "'" } }, "a.cd_contager"); if (obj == null) { throw new Exception("Não existe conta de compensação configurada para a conta gerencial " + val.lCheques[0].Cd_contager.Trim()); } if (obj.ToString().Trim().Equals(string.Empty)) { throw new Exception("Não existe conta de compensação configurada para a conta gerencial " + val.lCheques[0].Cd_contager.Trim()); } val.lCheques.ForEach(p => { if (p.St_conciliar) { //Compensar cheque descontado p.Dt_compensacao = val.Dt_processamento; p.Cd_contager_destino = obj.ToString(); CamadaNegocio.Financeiro.Titulo.TCN_LanTitulo.CompensarCheques( new TList_RegLanTitulo() { p }, qtb_lote.Banco_Dados); decimal taxa = Math.Round((val.Vl_taxa * (p.Vl_titulo / tot_ch_descontar * 100) / 100), 2); if (cont.Equals(val.lCheques.Count - 1)) { taxa += (val.Vl_taxa - (tot_taxa + taxa)); } //Gravar lancamento de caixa devolvendo credito adiantado pelo banco string ret_caixa = CamadaNegocio.Financeiro.Caixa.TCN_LanCaixa.GravaLanCaixa( new CamadaDados.Financeiro.Caixa.TRegistro_LanCaixa() { Cd_ContaGer = obj.ToString(), Cd_Empresa = p.Cd_empresa, Cd_Historico = lCfg[0].Cd_historico_desconto, Cd_LanctoCaixa = 0, ComplHistorico = "DEVOLUCAO CREDITO DESCONTO CHEQUE " + p.Nr_cheque.Trim(), Dt_lancto = val.Dt_processamento, NM_Clifor = p.Nomeclifor, Nr_Docto = p.Nr_cheque, Vl_PAGAR = Math.Round(p.Vl_titulo - taxa, 2), Vl_RECEBER = decimal.Zero }, qtb_lote.Banco_Dados); //Gravar Cheque X Caixa CamadaNegocio.Financeiro.Titulo.TCN_TituloXCaixa.GravarTituloCaixa( new TRegistro_LanTituloXCaixa() { Cd_banco = p.Cd_banco, Cd_contager = obj.ToString(), Cd_empresa = p.Cd_empresa, Cd_lanctocaixa = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(ret_caixa, "@P_CD_LANCTOCAIXA")), Nr_lanctocheque = p.Nr_lanctocheque }, qtb_lote.Banco_Dados); //Gravar Lote X Caixa CamadaNegocio.Financeiro.Titulo.TCN_LoteCH_X_Caixa.GravarLoteCH_X_Caixa( new TRegistro_LoteCH_X_Caixa() { Cd_banco = p.Cd_banco, Cd_contager = obj.ToString(), Cd_empresa = p.Cd_empresa, Cd_lanctocaixa = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(ret_caixa, "@P_CD_LANCTOCAIXA")), Nr_lanctocheque = p.Nr_lanctocheque }, qtb_lote.Banco_Dados); //Gravar lancamento de caixa debitando taxa cobrada pelo banco string ret_taxa = CamadaNegocio.Financeiro.Caixa.TCN_LanCaixa.GravaLanCaixa( new CamadaDados.Financeiro.Caixa.TRegistro_LanCaixa() { Cd_ContaGer = obj.ToString(), Cd_Empresa = p.Cd_empresa, Cd_Historico = lCfg[0].Cd_historico_taxa, Cd_LanctoCaixa = 0, ComplHistorico = "TAXA DESCONTO CHEQUE " + p.Nr_cheque.Trim(), Dt_lancto = val.Dt_processamento, NM_Clifor = p.Nomeclifor, Nr_Docto = p.Nr_cheque, Vl_PAGAR = taxa, Vl_RECEBER = decimal.Zero }, qtb_lote.Banco_Dados); //Gravar cheque X Caixa CamadaNegocio.Financeiro.Titulo.TCN_TituloXCaixa.GravarTituloCaixa( new TRegistro_LanTituloXCaixa() { Cd_banco = p.Cd_banco, Cd_contager = obj.ToString(), Cd_empresa = p.Cd_empresa, Cd_lanctocaixa = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(ret_taxa, "@P_CD_LANCTOCAIXA")), Nr_lanctocheque = p.Nr_lanctocheque }, qtb_lote.Banco_Dados); //Gravar Lote X Caixa CamadaNegocio.Financeiro.Titulo.TCN_LoteCH_X_Caixa.GravarLoteCH_X_Caixa( new TRegistro_LoteCH_X_Caixa() { Cd_banco = p.Cd_banco, Cd_contager = obj.ToString(), Cd_empresa = p.Cd_empresa, Cd_lanctocaixa = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(ret_taxa, "@P_CD_LANCTOCAIXA")), Nr_lanctocheque = p.Nr_lanctocheque }, qtb_lote.Banco_Dados); //Totalizar taxas tot_taxa += taxa; } else { //Os cheques que nao forem descontados, //transferir de volta para a conta de origem CamadaDados.Financeiro.Titulo.TList_TransfTitulo lTransf = CamadaNegocio.Financeiro.Titulo.TCN_TransfTitulo.Buscar(p.Cd_empresa, string.Empty, p.Cd_contager, decimal.Zero, decimal.Zero, decimal.Zero, p.Cd_banco, 1, string.Empty, qtb_lote.Banco_Dados); if (lTransf.Count < 1) { throw new Exception("Registro transferencia nao encontrado."); } //Realizar a transferencia dos cheques entre contas p.Cd_contager_destino = lTransf[0].Cd_conta_orig; p.Dt_compensacao = val.Dt_processamento; //Setar status do cheque para enviado p.Status_compensado = "N"; //A Compensar TCN_LanTitulo.TransferirTitulo(p, qtb_lote.Banco_Dados); //Gravar somente o cheque sem mecher no lancamento de caixa p.St_lancarcaixa = false; TCN_LanTitulo.GravarTitulo(p, qtb_lote.Banco_Dados); //Deletar amarracao do cheque com o lote TCN_LoteCH_X_Titulo.DeletarLoteCh_X_Titulo( new TRegistro_LoteCH_X_Titulo() { Cd_banco = p.Cd_banco, Cd_empresa = p.Cd_empresa, Id_lote = val.Id_lote, Nr_lanctocheque = p.Nr_lanctocheque }, qtb_lote.Banco_Dados); } cont++; }); //Gravar lancamento de caixa creditando o valor adiantado pelo banco string ret_cred = CamadaNegocio.Financeiro.Caixa.TCN_LanCaixa.GravaLanCaixa( new CamadaDados.Financeiro.Caixa.TRegistro_LanCaixa() { Cd_ContaGer = obj.ToString(), Cd_Empresa = val.Cd_empresa, Cd_Historico = lCfg[0].Cd_historico_creddesconto, Cd_LanctoCaixa = 0, ComplHistorico = "CREDITO DESCONTO CHEQUE DO LOTE" + val.Id_lote.ToString(), Dt_lancto = val.Dt_processamento, NM_Clifor = string.Empty, Nr_Docto = val.Id_lote.ToString(), Vl_PAGAR = decimal.Zero, Vl_RECEBER = val.Vl_credito }, qtb_lote.Banco_Dados); //Gravar lote val.St_registro = "P";//Processado val.Cd_contager = string.Empty; val.Cd_lanctocaixa = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(ret_cred, "@P_CD_LANCTOCAIXA")); qtb_lote.GravarLoteCH(val); if (st_transacao) { qtb_lote.Banco_Dados.Commit_Tran(); } } catch (Exception ex) { if (st_transacao) { qtb_lote.Banco_Dados.RollBack_Tran(); } throw new Exception("Erro processar lote: " + ex.Message.Trim()); } finally { if (st_transacao) { qtb_lote.deletarBanco_Dados(); } } }