Esempio n. 1
0
        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();
                }
            }
        }
Esempio n. 2
0
        public static string DeletarLoteCH(TRegistro_LoteCH val, BancoDados.TObjetoBanco banco)
        {
            if (val.St_registro.Trim().ToUpper().Equals("P"))
            {
                throw new Exception("Não é permitido excluir lote <PROCESSADO>.");
            }
            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;
                }
                if (val.St_registro.Trim().ToUpper().Equals("E"))
                {
                    val.lCheques.ForEach(p =>
                    {
                        //transferir os cheques 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_enviolote;
                        //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);
                    });
                }
                //Deletar cheques amarrados
                val.lCheques.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));
                //Deletar lote
                qtb_lote.DeletarLoteCH(val);
                if (st_transacao)
                {
                    qtb_lote.Banco_Dados.Commit_Tran();
                }
                return("OK");
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_lote.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro excluir lote: " + ex.Message.Trim());
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_lote.deletarBanco_Dados();
                }
            }
        }