示例#1
0
        private string SqlCaixaGeral(bool incluirDataIni, bool incluirDataFim, string tipoConta)
        {
            string sqlBase = @"
                Select cg.dataMov as Data, cg.idConta, Concat(pl.Descricao, ' ', Coalesce(Convert(cg.Obs Using utf8), '')) as descricao, 
                    Convert(coalesce(" + ClienteDAO.Instance.GetNomeCliente("cli") + ", " + FornecedorDAO.Instance.GetNomeFornecedor("forn") + @") using utf8) as Parceiro, 
                    cg.valorMov as Valor, cg.TipoMov, 0 as prevCustoFixo
                From caixa_geral cg
                    Left Join plano_contas pl On (cg.idConta=pl.IdConta) 
                    Left Join cliente cli On (cg.idCliente=cli.id_Cli)
                    Left Join fornecedor forn On (cg.idFornec=forn.idFornec)
                Where (cg.idConta in ({0}) {1}) and cg.tipoMov={2}" + FiltroTipoConta(null, null, tipoConta);

            if (incluirDataIni)
            {
                sqlBase += " and cg.dataMov>=?dataIni";
            }

            if (incluirDataFim)
            {
                sqlBase += " and cg.dataMov<=?dataFim";
            }

            string idsContasEstorno = UtilsPlanoConta.GetLstEstornoSaidaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Dinheiro, 0);

            string sql = String.Format(sqlBase,
                                       UtilsPlanoConta.GetLstEntradaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Dinheiro, 0, false) + "," + idsContasEstorno,
                                       "Or cg.formaSaida=" + (int)Glass.Data.Model.Pagto.FormaPagto.Dinheiro, 1) + " union all " +
                         String.Format(sqlBase, UtilsPlanoConta.GetLstSaidaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Dinheiro, 0, 1),
                                       "Or cg.formaSaida=" + (int)Glass.Data.Model.Pagto.FormaPagto.Dinheiro, 2);

            //if (!String.IsNullOrEmpty(idsContasEstorno))
            //sql += " union all " + String.Format(sqlBase, idsContasEstorno, String.Empty, 1);

            return(sql);
        }
示例#2
0
        public string GetContas(string tipoPeriodo, string dataIni, string dataFim, string tiposConta, string tipoContaSemSeparacao, string formasPagto, string idCli, string nomeCli,
                                string idLoja, string idContaBancoCliente, string idContaBancoContaReceber, string idsContas, string incluirContasAcertoParcial, string incluirContasAntecipacaoBoleto)
        {
            var sb = new StringBuilder();

            var contas = ContasReceberDAO.Instance.GetForCnab(tipoPeriodo.StrParaInt(), dataIni, dataFim, tiposConta, tipoContaSemSeparacao.StrParaInt(),
                                                              formasPagto, idCli.StrParaUint(), nomeCli, idLoja.StrParaUint(), idContaBancoCliente.StrParaInt(), idContaBancoContaReceber.StrParaInt(), idsContas,
                                                              incluirContasAcertoParcial.ToLower() == "true", incluirContasAntecipacaoBoleto.ToLower() == "true");

            foreach (var c in contas)
            {
                var formaPagto =
                    ContasReceberDAO.Instance.ObterPlanosContaConsiderarPrazoParaCnab()
                    .Contains(c.IdConta.Value)
                        ? FormaPagtoDAO.Instance.GetElementByPrimaryKey((uint)Data.Model.Pagto.FormaPagto.Prazo)
                        : UtilsPlanoConta.GetFormaPagtoByIdConta(c.IdConta.Value);

                sb.Append(c.IdContaR + "\t");
                sb.Append(c.Referencia.Replace("\t", "").Replace("\n", "") + "\t");
                sb.Append(c.NomeCli.Replace("\t", "").Replace("\n", "") + "\t");
                sb.Append(c.DataCad + "\t");
                sb.Append((c.ValorVec + c.Multa + c.Juros).ToString("C") + "\t");
                sb.Append(c.DataVec + "\t");
                sb.Append(c.DescricaoContaContabil + "\t");
                sb.Append(formaPagto.Descricao + "\t");
                sb.Append(c.NomeLoja + "\t");
                sb.Append(c.Obs + "\t");
                sb.Append(c.NumParc + "\\" + c.NumParcMax + "\t");
                sb.Append("\n");
            }

            return(sb.ToString().TrimEnd('\n'));
        }
示例#3
0
        public string Transferir(string idContaBancoOrigem, string idContaBancoDest, string valor, string data, string obs)
        {
            try
            {
                uint     idContaOrigem  = Glass.Conversoes.StrParaUint(idContaBancoOrigem);
                uint     idContaDestino = Glass.Conversoes.StrParaUint(idContaBancoDest);
                decimal  valorMov       = decimal.Parse(valor);
                DateTime dataMov        = DateTime.Parse(data);

                // Manter esta ordem, retira da conta origem e credita na conta destino, pois caso precise excluir,
                // será feito também nesta ordem

                // Debita valor da conta origem
                ContaBancoDAO.Instance.MovContaTransfConta(idContaOrigem, UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfContaBancaria),
                                                           (int)UserInfo.GetUserInfo.IdLoja, idContaDestino, 2, valorMov, dataMov, obs);

                // Credita valor na conta destino
                ContaBancoDAO.Instance.MovContaTransfConta(idContaDestino, UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfContaBancaria),
                                                           (int)UserInfo.GetUserInfo.IdLoja, idContaOrigem, 1, valorMov, dataMov, obs);

                return("Ok\tTransferência efetuada.");
            }
            catch (Exception ex)
            {
                return(Glass.MensagemAlerta.FormatErrorMsg("Erro\tFalha ao transferir valor entre contas bancárias.", ex));
            }
        }
示例#4
0
        //private EmailCobrancaDAO() { }

        #region SQL para recuperar contas a receber

        private string SqlVencidas(string data, string dataMax)
        {
            ///Verifica se é para buscar apenas contas de boletos
            var apenasContasBoletos = FinanceiroConfig.EnviarEmailCobrancaApenasContasComPlanoContasBoleto;

            ///Busca todos os plano de contas de boleto
            var planosContasBoletos = UtilsPlanoConta.ContasTodosTiposBoleto();

            var where = apenasContasBoletos ? $"AND cr.IdConta IN ({planosContasBoletos}) " : string.Empty;

            if (!string.IsNullOrWhiteSpace(dataMax))
            {
                where += $" AND DATE(cr.dataVec) >= {"'" + dataMax + "'"}";
            }

            return($@"
                SELECT COUNT(*) as NumContasVec, SUM(cr.valorVec) as ValorContasVec,
                    0 as NumContasVecHoje, 0 as ValorContasVecHoje,
                    0 as NumContasAVec, 0 as ValorContasAVec,
                    cli.Nome as NomeCli, cr.idCliente, cli.emailCobranca
                FROM contas_receber cr
                    LEFT JOIN cliente cli ON (cr.idCliente = cli.id_Cli) 
                WHERE cr.recebida <> true 
                    AND cr.ValorVec>0
                    AND coalesce(isParcelaCartao,false)=false
                    AND !coalesce(cli.NaoReceberEmailCobrancaVencida, false) 
                    AND DATE(cr.dataVec) <= '" + data + "'" + where + " GROUP BY cli.id_Cli");
        }
示例#5
0
        public string Transferir(string idLoja, string valor, string obs)
        {
            if (!Config.PossuiPermissao(Config.FuncaoMenuFinanceiro.ControleFinanceiroRecebimento))
            {
                throw new Exception("Apenas funcionário Financeiro pode efetuar transferência para o Caixa Diário.");
            }

            using (var transacao = new GDATransaction())
            {
                transacao.BeginTransaction();

                try
                {
                    decimal valorTransf = decimal.Parse(valor);

                    CaixaDiarioDAO.Instance.MovCaixa(transacao, Glass.Conversoes.StrParaUint(idLoja), null, 1, valorTransf, 0,
                                                     UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfCaixaGeralParaDiario), null, 1, obs, true, null);

                    // Movimenta caixa geral
                    CaixaGeralDAO.Instance.MovCxGeral(transacao, null, null, null, UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfCaixaGeralParaDiario),
                                                      2, 1, valorTransf, 0, null, true, obs, DateTime.Now);

                    transacao.Commit();

                    return("Ok\tTransferência efetuada com sucesso.");
                }
                catch (Exception ex)
                {
                    transacao.Rollback();
                    transacao.Close();

                    return(Glass.MensagemAlerta.FormatErrorMsg("Erro\tFalha ao efetuar retirada.", ex));
                }
            }
        }
示例#6
0
        public override int Update(GDASession session, DepositoNaoIdentificado objUpdate)
        {
            if (ObtemSituacao(session, objUpdate.IdDepositoNaoIdentificado) != DepositoNaoIdentificado.SituacaoEnum.Ativo)
            {
                throw new Exception("Não é possível editar este DNI, pois, ele não está ativo.");
            }

            DepositoNaoIdentificado objOriginal = GetElement(session, objUpdate.IdDepositoNaoIdentificado);

            bool alterouValorData = objOriginal.ValorMov != objUpdate.ValorMov || objOriginal.DataMov != objUpdate.DataMov;

            int retorno = base.Update(session, objUpdate);

            if (alterouValorData)
            {
                string idsMovs = string.Join(",", MovBancoDAO.Instance.GetByDepositoNaoIdentificado(session, objUpdate.IdDepositoNaoIdentificado)
                                             .Select(c => c.IdMovBanco.ToString()).ToArray());

                //Gera a movimentação bancaria
                ContaBancoDAO.Instance.MovContaDepositoNaoIdentificado(session, objUpdate.IdContaBanco,
                                                                       UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.DepositoNaoIdentificado), (int)UserInfo.GetUserInfo.IdLoja,
                                                                       objUpdate.IdDepositoNaoIdentificado, 1, objUpdate.ValorMov, objUpdate.DataMov);

                MovBancoDAO.Instance.DeleteByPKs(session, idsMovs, "Atualização");
            }

            LogAlteracaoDAO.Instance.LogDepositoNaoIdentificado(session, objOriginal);

            return(retorno);
        }
示例#7
0
        private Credito[] GetCreditoListFornecedor(uint idFornec, DateTime inicio, DateTime fim, string tipoMovimentacao)
        {
            List <Credito> input = new List <Credito>();

            uint[]       planosConta = UtilsPlanoConta.GetLstCredito(0).ToArray();
            CaixaGeral[] caixaGeral  = CaixaGeralDAO.Instance.GetByFornecedor(idFornec, inicio, fim, planosConta);

            foreach (CaixaGeral cg in caixaGeral)
            {
                Credito novo = new Credito();
                novo.IdCaixaGeral = cg.IdCaixaGeral;
                novo.IdConta      = cg.IdConta;
                novo.Valor        = cg.ValorMov;
                novo.Data         = cg.DataMovExibir;

                novo.IdAcerto            = cg.IdAcerto;
                novo.IdPedido            = cg.IdPedido;
                novo.IdContaR            = cg.IdContaR;
                novo.IdLiberarPedido     = cg.IdLiberarPedido;
                novo.IdObra              = cg.IdObra;
                novo.IdAntecipFornec     = cg.IdAntecipFornec;
                novo.IdTrocaDevolucao    = cg.IdTrocaDevolucao;
                novo.TipoMov             = GetTipoMov(cg.IdConta);
                novo.IdSinal             = cg.IdSinal;
                novo.IdCheque            = cg.IdCheque;
                novo.IdAcertoCheque      = cg.IdAcertoCheque;
                novo.IdCompra            = cg.IdCompra;
                novo.IdContaPg           = cg.IdContaPg;
                novo.IdDeposito          = cg.IdDeposito;
                novo.IdDevolucaoPagto    = cg.IdDevolucaoPagto;
                novo.IdPagto             = cg.IdPagto;
                novo.IdCreditoFornecedor = cg.IdCreditoFornecedor;

                input.Add(novo);
            }

            var output = new List <Credito>();

            // Caso o tipo de movimentação seja nulo então todos os tipos de movimentação devem ser considerados.
            tipoMovimentacao = String.IsNullOrEmpty(tipoMovimentacao) ? "1,2,3,4" : tipoMovimentacao;

            var tipos = tipoMovimentacao.Split(',');

            for (int i = 0; i < tipos.Length; i++)
            {
                foreach (Credito item in input)
                {
                    if (item.TipoMov == Convert.ToInt32(tipos[i]))
                    {
                        output.Add(item);
                    }
                }
            }

            return(output.ToArray());
        }
示例#8
0
        private string SqlTotalCxGeral(int tipoMov)
        {
            string contasQueNaoEntram = UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfCaixaGeral).ToString() + "," +
                                        UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.ChequeDevolvido) + "," + UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.DepositoCheque) + "," +
                                        UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevCartao) + "," + UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevCheque) + "," +
                                        UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevDeposito) + "," + UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevDinheiro) + "," +
                                        UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfBancoCheques) + "," + UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.EstornoDepositoCheque);

            return("Select 'Caixa Geral' as descricao, Sum(valorMov) as Valor From caixa_geral Where idConta Not In (" + contasQueNaoEntram + ") And " +
                   "tipoMov=" + tipoMov + " And dataMov>=?dataIni And dataMov<=?dataFim " +
                   "And (IdPedido Not In (Select IdPedido From pedido Where situacao=" + (int)Glass.Data.Model.Pedido.SituacaoPedido.Cancelado + ") Or idPedido is null)");
        }
示例#9
0
        private bool IsEstornoGerado(uint planoConta)
        {
            var estornoCreditoFornec = new List <uint>(Array.ConvertAll <string, uint>(UtilsPlanoConta.ContasEstornoCreditoFornec().Split(','),
                                                                                       x => Glass.Conversoes.StrParaUint(x)));

            return(planoConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.EstornoCreditoCompraGerado) ||
                   planoConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.EstornoCreditoVendaGerado) ||
                   planoConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.EstornoCreditoEntradaGerado) ||
                   planoConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.EstornoCreditoRecPrazoGerado) ||
                   planoConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.CreditoObraEstorno) ||
                   planoConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.CreditoAntencipFornecEstorno) ||
                   estornoCreditoFornec.Contains(planoConta));
        }
示例#10
0
        //private DevolucaoPagtoDAO() { }

        #region Busca padrão

        private string Sql(uint idDevolucaoPagto, uint idCliente, string nomeCliente, string dataIni, string dataFim, bool selecionar)
        {
            string criterio = "";
            string campos   = selecionar ? @"dp.*, c.nome as nomeCliente, group_concat(concat(cast(cg.idConta as char), ';', 
                cast(cg.valorMov as char)) separator '|') as formasPagto, f.Nome as NomeFunc, '$$$' as criterio" : "count(*)";

            string sql = @"
                select " + campos + @"
                from devolucao_pagto dp
                    inner join cliente c on (dp.idCliente=c.id_Cli)
                    left join caixa_geral cg on (dp.idDevolucaoPagto=cg.idDevolucaoPagto)
                    LEFT JOIN funcionario f ON (dp.UsuCad = f.IdFunc)
                where (cg.idConta is null or cg.idConta in (" + UtilsPlanoConta.ContasDevolucaoPagto() + "))";

            if (idDevolucaoPagto > 0)
            {
                sql      += " and dp.idDevolucaoPagto=" + idDevolucaoPagto;
                criterio += "Devolução de pagto.: " + idDevolucaoPagto + "    ";
            }

            if (idCliente > 0)
            {
                sql      += " and dp.idCliente=" + idCliente;
                criterio += "Cliente: " + ClienteDAO.Instance.GetNome(idCliente) + "    ";
            }
            else if (!String.IsNullOrEmpty(nomeCliente))
            {
                string ids = ClienteDAO.Instance.GetIds(null, nomeCliente, null, 0, null, null, null, null, 0);
                sql      += " And c.id_Cli in (" + ids + ")";
                criterio += "Cliente: " + nomeCliente + "    ";
            }

            if (!String.IsNullOrEmpty(dataIni))
            {
                sql      += " and dp.dataCad>=?dataIni";
                criterio += "Data início: " + dataIni + "    ";
            }

            if (!String.IsNullOrEmpty(dataFim))
            {
                sql      += " and dp.dataCad<=?dataFim";
                criterio += "Data fim: " + dataFim + "    ";
            }

            if (selecionar)
            {
                sql += " group by dp.idDevolucaoPagto";
            }

            return(sql.Replace("$$$", criterio));
        }
示例#11
0
        private string SqlCreditoGerado(string data, int idLoja)
        {
            var sqlBaseCreditoGerado = @"
                SELECT IdCliente, SUM(CreditoGerado) AS CreditoGerado, Data FROM
	                (SELECT cd.IdCliente, SUM(cd.Valor) AS CreditoGerado, cd.DataCad AS Data
	                FROM caixa_diario cd
	                WHERE cd.DataCad>=?dataIni AND cd.DataCad<=?dataFim {1}
		                AND cd.IdConta IN ({0})
		                AND cd.TipoMov=1
		                AND cd.IdConta
		                AND cd.Valor>0
	                GROUP BY cd.IdCliente
	                UNION
	                SELECT cd.IdCliente, SUM(cd.Valor) AS CreditoGerado, cd.DataCad AS Data
	                FROM caixa_diario cd
	                WHERE cd.DataCad>=?dataIni AND cd.DataCad<=?dataFim {1}
		                AND cd.IdConta IN ({0})
		                AND cd.TipoMov=2
		                AND cd.IdConta
		                AND cd.Valor>0
	                GROUP BY cd.IdCliente
	                UNION
	                SELECT cg.IdCliente, SUM(cg.ValorMov) AS CreditoGerado, cg.DataMov AS Data
	                FROM caixa_geral cg
	                WHERE cg.DataMov>=?dataIni AND cg.DataMov<=?dataFim {2}
		                AND cg.IdConta IN ({0})
		                AND cg.TipoMov=1
		                AND cg.IdConta
		                AND cg.ValorMov>0
	                GROUP BY cg.IdCliente
	                UNION
	                SELECT cg.IdCliente, SUM(cg.ValorMov) AS CreditoGerado, cg.DataMov AS Data
	                FROM caixa_geral cg
	                WHERE cg.DataMov>=?dataIni AND cg.DataMov<=?dataFim {2}
		                AND cg.IdConta IN ({0})
		                AND cg.TipoMov=2
		                AND cg.IdConta
		                AND cg.ValorMov>0
	                GROUP BY cg.IdCliente)
                AS temp GROUP BY IdCliente";

            var filtroLojaCaixaDiario = idLoja > 0 ? string.Format(" AND cd.IdLoja={0}", idLoja) : string.Empty;
            var filtroLojaCaixaGeral  = idLoja > 0 ? string.Format(" AND cg.IdLoja={0}", idLoja) : string.Empty;

            var sql =
                string.Format(sqlBaseCreditoGerado, UtilsPlanoConta.ResumoDiarioContasCreditoGerado(),
                              filtroLojaCaixaDiario, filtroLojaCaixaGeral);

            return(sql);
        }
示例#12
0
        //private CaixaDiarioDAO() { }

        public CaixaDiario[] GetMovimentacoes(int tipoMov, string dataIni, string dataFim)
        {
            string contasQueNaoEntram = UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfCaixaGeral).ToString();

            string sql = "Select Concat('Cx. Diário ', l.NomeFantasia) as DescrCxDiario, cast(coalesce(Sum(c.Valor), 0) as decimal(12,2)) as Total From caixa_diario c " +
                         "Left Join loja l On (c.idLoja=l.idLoja) Where c.TipoMov=" + tipoMov + " And c.idConta Not In (" + contasQueNaoEntram + ") " +
                         "And (c.IdPedido Not In (Select IdPedido From pedido Where situacao=" + (int)Glass.Data.Model.Pedido.SituacaoPedido.Cancelado + ") Or c.idPedido is null) " +
                         "And c.DataCad>=?dataIni And c.DataCad<=?dataFim Group By c.idLoja Order By l.NomeFantasia";

            List <GDAParameter> lstParam = new List <GDAParameter>();

            lstParam.Add(new GDAParameter("?dataIni", DateTime.Parse(dataIni + " 00:00")));
            lstParam.Add(new GDAParameter("?dataFim", DateTime.Parse(dataFim + " 23:59")));

            return(CurrentPersistenceObject.LoadData(sql, lstParam.ToArray()).ToList().ToArray());
        }
示例#13
0
        //private ResumoDiarioDAO() { }

        private string SqlBase(string planosContas, uint idLoja, string textoAntesCaixaDiario, string textoDepoisCaixaDiario, string textoAntesCaixaGeral,
                               string textoDepoisCaixaGeral, string textoJoinCaixaDiario, string textoJoinCaixaGeral, bool apenasRecChequeDev)
        {
            var sqlRecChequeDev = (apenasRecChequeDev ? "in" : "not in") + " (" + UtilsPlanoConta.ContasChequeDev() + "," + UtilsPlanoConta.ListaEstornosChequeDev() + "," + UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.ChequeTrocado) + ")";

            string sqlBase = @"
                select (
                    coalesce((
                        select coalesce(sum(coalesce(cd.valor,0)),0) 
                        from caixa_diario cd {7}
                        where cd.dataCad>=?dataIni and cd.dataCad<=?dataFim {1}
                            and {3} cd.idConta in ({0}) {4}
                            and cd.tipoMov=1
                            and cd.idConta {9}
                    ),0)-coalesce((
                        select coalesce(sum(coalesce(cd.valor,0)),0) 
                        from caixa_diario cd {7}
                        where cd.dataCad>=?dataIni and cd.dataCad<=?dataFim {1}
                            and {3} cd.idConta in ({0}) {4}
                            and cd.tipoMov=2
                            and cd.idConta {9}
                    ),0)+coalesce((
                        select coalesce(sum(coalesce(cg.valorMov,0)),0) 
                        from caixa_geral cg {8}
                        where cg.dataMov>=?dataIni and cg.dataMov<=?dataFim {2} 
                            and {5} cg.idConta in ({0}) {6}
                            and cg.tipoMov=1
                            and cg.idConta {9}
                    ),0)-coalesce((
                        select coalesce(sum(coalesce(cg.valorMov,0)),0) 
                        from caixa_geral cg {8}
                        where cg.dataMov>=?dataIni and cg.dataMov<=?dataFim {2} 
                            and {5} cg.idConta in ({0}) {6}
                            and cg.tipoMov=2
                            and cg.idConta {9}
                    ),0)
                )";

            var filtroLojaCxDiario = idLoja > 0 ? " And cd.idLoja=" + idLoja : String.Empty;
            var filtroLojaCxGeral  = idLoja > 0 ? " And cg.idLoja=" + idLoja : String.Empty;

            var sql = String.Format(sqlBase, planosContas, filtroLojaCxDiario, filtroLojaCxGeral, textoAntesCaixaDiario,
                                    textoDepoisCaixaDiario, textoAntesCaixaGeral, textoDepoisCaixaGeral, textoJoinCaixaDiario, textoJoinCaixaGeral, sqlRecChequeDev);

            return(sql);
        }
示例#14
0
        private string SqlVendas(string paramDataIni, string paramDataFim, int?tipo)
        {
            int tipoPrazo = tipo == null ? 0 : tipo.Value;
            int tipoVista = tipo == null ? 1 : tipo.Value;

            string sql = @"
                select tabela, tipo, idConta, cast(sum(valor) as decimal(12,2)) as valor
                from (
                    select " + (int)MovimentacaoDiaIFD.TabelaMovimentacao.Vendas + @" as tabela, 
                        " + tipoVista + @" as tipo, null as idConta, sum(valor) as valor
                    from caixa_diario
                    where idConta in (" + UtilsPlanoConta.ContasAVista() + "," + UtilsPlanoConta.ContasSinalPedido() + @")
                        {0}
                    group by idConta
                    
                    union select " + (int)MovimentacaoDiaIFD.TabelaMovimentacao.Vendas + @" as tabela, 
                        " + tipoVista + @" as tipo, null as idConta, sum(valorMov) as valor
                    from caixa_geral
                    where idConta in (" + UtilsPlanoConta.ContasAVista() + "," + UtilsPlanoConta.ContasSinalPedido() + @")
                        {0}
                    group by idConta
                    
                    union select " + (int)MovimentacaoDiaIFD.TabelaMovimentacao.Vendas + @" as tabela, 
                        " + tipoPrazo + @" as tipo, idConta, sum(valorVec) as valor
                    from contas_receber
                    where idConta in (" + UtilsPlanoConta.ContasAPrazoContasReceber() + "," + UtilsPlanoConta.ContasAPrazo() + @")
                        {0}
                    group by idConta
                ) as movimentacao_dia_ifd
                group by tabela, tipo, idConta";

            string filtro = "";

            if (!PedidoConfig.LiberarPedido)
            {
                filtro = "and idPedido in (select idPedido from pedido where situacao=" + (int)Pedido.SituacaoPedido.Confirmado + " and dataConf>={0} and dataConf<={1})";
            }
            else
            {
                filtro = "and idLiberarPedido in (select idLiberarPedido from liberarpedido where situacao=" + (int)LiberarPedido.SituacaoLiberarPedido.Liberado + " and dataLiberacao>={0} and dataLiberacao<={1})";
            }

            sql = String.Format(sql, filtro);
            sql = String.Format(sql, paramDataIni, paramDataFim);
            return(sql);
        }
示例#15
0
        //private RecebimentoTipoDAO() { }

        public IList <RecebimentoTipo> GetRecebimentoTipo(string dataIni, string dataFim, uint idLoja, uint usucad)
        {
            string sqlBoleto            = SqlReceb("Boleto", UtilsPlanoConta.ContasTipoPagto(Glass.Data.Model.Pagto.FormaPagto.Boleto), idLoja, usucad);
            string sqlCartao            = SqlReceb("Cartão", UtilsPlanoConta.ContasTipoPagto(Glass.Data.Model.Pagto.FormaPagto.Cartao), idLoja, usucad);
            string sqlCheque            = SqlReceb("Cheque", UtilsPlanoConta.ContasTipoPagto(Glass.Data.Model.Pagto.FormaPagto.ChequeProprio), idLoja, usucad);
            string sqlConstrucard       = SqlReceb("Construcard", UtilsPlanoConta.ContasTipoPagto(Glass.Data.Model.Pagto.FormaPagto.Construcard), idLoja, usucad);
            string sqlDeposito          = SqlReceb("Depósito", UtilsPlanoConta.ContasTipoPagto(Glass.Data.Model.Pagto.FormaPagto.Deposito), idLoja, usucad);
            string sqlDinheiro          = SqlReceb("Dinheiro", UtilsPlanoConta.ContasTipoPagto(Glass.Data.Model.Pagto.FormaPagto.Dinheiro), idLoja, usucad);
            string sqlCredito           = SqlReceb("Crédito", UtilsPlanoConta.ContasTipoPagto(Glass.Data.Model.Pagto.FormaPagto.Credito), idLoja, usucad);
            string sqlPermuta           = SqlReceb("Permuta", UtilsPlanoConta.ContasTipoPagto(Glass.Data.Model.Pagto.FormaPagto.Permuta), idLoja, usucad);
            string sqlMastercardCredito = SqlReceb("Mastercard Crédito", UtilsPlanoConta.ContasTipoCartao(Utils.TipoCartao.MasterCredito), idLoja, usucad);
            string sqlMastercardDebito  = SqlReceb("Mastercard Débito", UtilsPlanoConta.ContasTipoCartao(Utils.TipoCartao.MasterDebito), idLoja, usucad);
            string sqlVisaCredito       = SqlReceb("Visa Crédito", UtilsPlanoConta.ContasTipoCartao(Utils.TipoCartao.VisaCredito), idLoja, usucad);
            string sqlVisaDebito        = SqlReceb("Visa Débito", UtilsPlanoConta.ContasTipoCartao(Utils.TipoCartao.VisaDebito), idLoja, usucad);
            string sqlOutrosCredito     = SqlReceb("Outros Crédito", UtilsPlanoConta.ContasTipoCartao(Utils.TipoCartao.OutrosCredito), idLoja, usucad);
            string sqlOutrosDebito      = SqlReceb("Outros Débito", UtilsPlanoConta.ContasTipoCartao(Utils.TipoCartao.OutrosDebito), idLoja, usucad);

            string sqlReceb = @"
                select descricao, cast(valor as decimal(12,2)) as valor, 'Período: " + dataIni + " a " + dataFim + @"' as criterio
                from (
                    " + sqlBoleto + @"
                    union " + sqlCartao + @"
                    union " + sqlCheque + @"
                    union " + sqlConstrucard + @"
                    union " + sqlDeposito + @"
                    union " + sqlDinheiro + @"
                    union " + sqlCredito + @"
                    union " + sqlPermuta + @"
                    /* union " + sqlMastercardCredito + @"
                    union " + sqlMastercardDebito + @"
                    union " + sqlVisaCredito + @"
                    union " + sqlVisaDebito + @"
                    union " + sqlOutrosCredito + @"
                    union " + sqlOutrosDebito + @" */
                ) as recebimento_tipo";

            var lstParam = new List <GDAParameter>();

            lstParam.Add(new GDAParameter("?dataIni", DateTime.Parse(dataIni + " 00:00")));
            lstParam.Add(new GDAParameter("?dataFim", DateTime.Parse(dataFim + " 23:59")));

            return(objPersistence.LoadData(sqlReceb, lstParam.ToArray()).ToList());
        }
示例#16
0
        public string Buscar(uint idCxGeral)
        {
            var mov = CaixaGeralDAO.Instance.GetMovimentacao(idCxGeral);

            if (mov == null)
            {
                throw new Exception("Essa movimentação não existe, ou não foi feita hoje.");
            }

            if (!mov.LancManual ||
                mov.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfDeCxDiarioDinheiro) ||
                mov.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfDeCxDiarioCheque))
            {
                throw new Exception("Essa movimentação foi gerada pelo sistema. Só é possível cancelar movimentações manuais.");
            }

            return(mov.DescrPlanoConta + " Valor: " + mov.ValorMov.ToString("C") + " Forma Saída: " +
                   (mov.FormaSaida == 1 ? "Dinheiro" : "Cheque"));
        }
示例#17
0
        public override uint Insert(GDASession session, DepositoNaoIdentificado objInsert)
        {
            objInsert.DataCad   = DateTime.Now;
            objInsert.IdFuncCad = UserInfo.GetUserInfo.CodUser;
            objInsert.Situacao  = DepositoNaoIdentificado.SituacaoEnum.Ativo;

            objInsert.IdDepositoNaoIdentificado = base.Insert(session, objInsert);

            //Gera a movimentação bancaria
            var idMovBanco = ContaBancoDAO.Instance.MovContaDepositoNaoIdentificado(session, objInsert.IdContaBanco,
                                                                                    UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.DepositoNaoIdentificado), (int)UserInfo.GetUserInfo.IdLoja,
                                                                                    objInsert.IdDepositoNaoIdentificado, 1, objInsert.ValorMov, objInsert.DataMov);

            if (idMovBanco == 0)
            {
                throw new Exception("Não foi possível movimentar a conta bancária.");
            }

            return(objInsert.IdDepositoNaoIdentificado);
        }
示例#18
0
        /// <summary>
        /// Retornar custos fixos ativos que ainda não foram gerados no mês/ano passado
        /// </summary>
        /// <param name="mesAno"></param>
        public CustoFixo[] GetToGenerate(string mesAno, uint idLoja, uint idFornec, string sortExpression)
        {
            sortExpression = !String.IsNullOrEmpty(sortExpression) ? sortExpression : "diaVenc, descricao";
            List <CustoFixo> lst = objPersistence.LoadData(SqlGerar(mesAno, idLoja, idFornec) + " Order By " + sortExpression);

            // Procura o custo fixo relacionado ao salário para alterar seu valor
            foreach (CustoFixo c in lst)
            {
                if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.Salario))
                {
                    c.ValorVenc = ExecuteScalar <decimal>(
                        "Select Coalesce(Sum(coalesce(salario, 0) + coalesce(gratificacao, 0) + " +
                        "coalesce(auxalimentacao, 0)), 0) From funcionario Where situacao=" + (int)Situacao.Ativo +
                        " and idLoja=" + idLoja);

                    break;
                }
            }

            return(lst.ToArray());
        }
示例#19
0
        /// <summary>
        /// Sql para
        /// </summary>
        /// <param name="tipoMov"></param>
        /// <returns></returns>
        internal string SqlValorMovimentacoes(string idLoja, int tipoMov, bool agrupar)
        {
            string contasQueNaoEntram = UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.TransfCaixaGeral).ToString();

            string sql = "Select " + (agrupar ? "l.idLoja, " : "") + "cast(coalesce(Sum(c.Valor), 0) as decimal(12,2)) as valor " +
                         "From caixa_diario c Left Join loja l On (c.idLoja=l.idLoja) Where c.TipoMov=" + tipoMov;

            if (!String.IsNullOrEmpty(idLoja) && idLoja != "0")
            {
                sql += " and c.idLoja=" + idLoja;
            }

            sql += " And c.idConta Not In (" + contasQueNaoEntram + ") " +
                   "And (c.IdPedido Not In (Select IdPedido From pedido Where situacao=" + (int)Glass.Data.Model.Pedido.SituacaoPedido.Cancelado + ") Or c.idPedido is null) " +
                   "And c.DataCad>=?dataIni And c.DataCad<=?dataFim";

            if (agrupar)
            {
                sql += " group by c.idLoja";
            }

            sql += " Order By l.NomeFantasia";
            return(sql);
        }
示例#20
0
        /// <summary>
        /// Quita o débito de um funcionário.
        /// </summary>
        /// <param name="idFunc"></param>
        /// <returns></returns>
        public string Quitar(uint idFunc, decimal[] valores, uint[] formasPagto, uint[] tiposCartao, uint[] parcelasCartao,
                             uint[] contasBanco, uint[] depositoNaoIdentificado, uint[] cartaoNaoIdentificado, uint[] tiposBoleto, decimal[] taxaAntecip, string numAutConstrucard, bool recebimentoParcial,
                             bool gerarCredito, string chequesPagto, string obs)
        {
            UtilsFinanceiro.DadosRecebimento retorno = null;

            try
            {
                decimal totalASerPago = Math.Abs(GetSaldo(idFunc));

                decimal totalPago = 0;
                foreach (decimal v in valores)
                {
                    totalPago += v;
                }

                if (!recebimentoParcial && !gerarCredito && totalPago != totalASerPago)
                {
                    throw new Exception("Total pago (" + totalPago.ToString("C") + ") não confere com o total a ser pago (" + totalASerPago.ToString("C") + ").");
                }
                else if (!recebimentoParcial && gerarCredito && totalPago < totalASerPago)
                {
                    throw new Exception("Total pago (" + totalPago.ToString("C") + ") não pode ser menor que o total a ser pago (" + totalASerPago.ToString("C") + ").");
                }
                else if (recebimentoParcial && totalPago > totalASerPago)
                {
                    throw new Exception("Total pago (" + totalPago.ToString("C") + ") não pode ser maior que o total a ser pago (" + totalASerPago.ToString("C") + ").");
                }

                retorno = UtilsFinanceiro.Receber(null, UserInfo.GetUserInfo.IdLoja, null, null, null, null, null, null, null, null, null, null, null, 0, 0, null, null, totalASerPago, totalPago,
                                                  valores, formasPagto, contasBanco, depositoNaoIdentificado, cartaoNaoIdentificado, tiposCartao, tiposBoleto, taxaAntecip, 0, recebimentoParcial, false, 0,
                                                  numAutConstrucard, false, parcelasCartao, chequesPagto, false, UtilsFinanceiro.TipoReceb.CreditoValeFuncionario);

                if (retorno.ex != null)
                {
                    throw retorno.ex;
                }

                // Faz as movimentações de saída do controle de vales
                for (int i = 0; i < valores.Length; i++)
                {
                    if (valores[i] > 0 && formasPagto[i] > 0)
                    {
                        uint idConta = UtilsPlanoConta.GetPlanoContaVendaFunc(formasPagto[i], tiposCartao[i]);
                        Movimentar(idFunc, null, null, idConta, 1, valores[i], obs);
                    }
                }

                string textoRetorno = "Ok;Débito quitado";
                if (totalPago < totalASerPago)
                {
                    textoRetorno += " parcialmente. Ainda restam " + (totalASerPago - totalPago).ToString("C") + " a serem quitados.";
                }
                else
                {
                    textoRetorno += ".";
                }

                return(textoRetorno);
            }
            catch (Exception ex)
            {
                if (retorno != null)
                {
                    foreach (Cheques c in retorno.lstChequesInseridos)
                    {
                        ChequesDAO.Instance.Delete(c);
                    }

                    foreach (uint idCxDiario in retorno.idCxDiario)
                    {
                        CaixaDiarioDAO.Instance.DeleteByPrimaryKey(idCxDiario);
                    }

                    foreach (uint idCxGeral in retorno.idCxGeral)
                    {
                        CaixaGeralDAO.Instance.DeleteByPrimaryKey(idCxGeral);
                    }

                    foreach (uint idMovBanco in retorno.idMovBanco)
                    {
                        MovBancoDAO.Instance.DeleteByPrimaryKey(idMovBanco);
                    }

                    foreach (uint idParcCartao in retorno.idParcCartao)
                    {
                        ContasReceberDAO.Instance.DeleteByPrimaryKey(idParcCartao);
                    }
                }

                return("Erro;" + Glass.MensagemAlerta.FormatErrorMsg("Falha ao quitar débito.", ex));
            }
        }
示例#21
0
        protected void Page_Load(object sender, EventArgs e)
        {
            Cheques cheque      = ChequesDAO.Instance.GetElementByPrimaryKey(Glass.Conversoes.StrParaUint(Request["IdCheque"]));
            string  localizacao = String.Empty;

            if (cheque.Origem == (int)Cheques.OrigemCheque.FinanceiroPagto)
            {
                localizacao += "Cheque avulso. ";
            }

            localizacao += "Cadastrado em: " + cheque.DataCad + ", por " + FuncionarioDAO.Instance.GetNome(cheque.Usucad) + " ";

            // Verifica se este cheque foi utilizado em algum depósito
            if (cheque.IdDeposito > 0)
            {
                DepositoCheque deposito = DepositoChequeDAO.Instance.GetElement(cheque.IdDeposito.Value);

                if (deposito == null)
                {
                    localizacao += "Depósito não localizado.";
                }
                else
                {
                    localizacao += "Este cheque foi utilizado no depósito número " + cheque.IdDeposito +
                                   ". O depósito foi efetuado na conta bancária: " + deposito.DescrContaBanco + ", no dia " +
                                   deposito.DataDeposito.ToString("dd/MM/yyyy") + " por " + deposito.NomeFuncDeposito + ". ";
                }
            }

            if (cheque.IdAcertoCheque > 0)
            {
                AcertoCheque acertoCheque = AcertoChequeDAO.Instance.GetElement(cheque.IdAcertoCheque.Value);

                localizacao += "Este cheque foi utilizado no acerto de cheque número " + cheque.IdAcertoCheque +
                               ". O acerto de cheque foi feito no dia " + acertoCheque.DataAcerto.ToString("dd/MM/yyyy") +
                               " por " + acertoCheque.NomeFunc + ". ";
            }
            else
            {
                // Verifica se o cheque foi utilizado em algum pagamento
                uint idPagto = PagtoChequeDAO.Instance.GetPagtoByCheque(cheque.IdCheque);

                if (idPagto > 0)
                {
                    Pagto pagto = PagtoDAO.Instance.GetPagto(idPagto);

                    localizacao += "Este cheque foi utilizado no pagamento número " + idPagto +
                                   ". O pagamento foi efetuado no dia " + pagto.DataPagto.ToString("dd/MM/yyyy") +
                                   " por " + pagto.NomeFuncPagto + ". ";

                    if (pagto.IdFornec > 0)
                    {
                        localizacao += "Fornecedor pago: " + pagto.NomeFornec + ". ";
                    }

                    if (cheque.DataReceb != null)
                    {
                        localizacao += "Este cheque foi compensado no dia " + cheque.DataReceb.Value.ToString("dd/MM/yyyy") + ". ";
                    }
                }
                else if (cheque.IdDeposito == 0)
                {
                    localizacao += "Localização do cheque desconhecida. ";
                }
            }

            if (cheque.Situacao == (int)Cheques.SituacaoCheque.Trocado)
            {
                // Verifica se há alguma movimentação no caixa geral de quitação deste cheque
                CaixaGeral[] lstCxGeral = CaixaGeralDAO.Instance.GetByCheque(cheque.IdCheque);

                localizacao += "Este cheque foi trocado";

                foreach (CaixaGeral c in lstCxGeral)
                {
                    if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevDinheiro))
                    {
                        localizacao += " por " + c.ValorMov.ToString("C") + " em dinheiro,";
                    }
                    else if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevCartao))
                    {
                        localizacao += " por " + c.ValorMov.ToString("C") + " pago no cartão,";
                    }
                    else if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevDeposito))
                    {
                        localizacao += " por " + c.ValorMov.ToString("C") + " pago por depósito em conta,";
                    }
                    else if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevCheque))
                    {
                        localizacao += " por um cheque no valor de " + c.ValorMov.ToString("C") + ",";
                    }
                }

                localizacao = localizacao.TrimEnd(',') + ".";
            }
            else if (cheque.Situacao == (int)Cheques.SituacaoCheque.Quitado)
            {
                // Verifica se há alguma movimentação no caixa geral de quitação deste cheque
                CaixaGeral[] lstCxGeral = CaixaGeralDAO.Instance.GetByCheque(cheque.IdCheque);

                localizacao += "Este cheque foi quitado";

                var idsAcertoCheque = ItemAcertoChequeDAO.Instance.GetIdsAcertoByCheque(null, cheque.IdCheque, true);
                if (!String.IsNullOrEmpty(idsAcertoCheque))
                {
                    localizacao += " no(s) acerto(s) de cheques " + idsAcertoCheque;
                }

                foreach (CaixaGeral c in lstCxGeral)
                {
                    if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevDinheiro))
                    {
                        localizacao += " por " + c.ValorMov.ToString("C") + " em dinheiro,";
                    }
                    else if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevCartao))
                    {
                        localizacao += " por " + c.ValorMov.ToString("C") + " pago no cartão,";
                    }
                    else if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevDeposito))
                    {
                        localizacao += " por " + c.ValorMov.ToString("C") + " pago por depósito em conta,";
                    }
                    else if (c.IdConta == UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.RecChequeDevCheque))
                    {
                        localizacao += " por um cheque no valor de " + c.ValorMov.ToString("C") + ",";
                    }
                }

                localizacao = localizacao.TrimEnd(',') + ".";
            }

            lblLocalizacao.Text = localizacao;
        }
示例#22
0
        public void Cancela(uint idCreditoFornecedor, string motivo)
        {
            lock (_cancelaLock)
            {
                using (var transaction = new GDATransaction())
                {
                    try
                    {
                        transaction.BeginTransaction();

                        CreditoFornecedor cred  = ObterCreditoFornecedor(transaction, idCreditoFornecedor);
                        decimal           valor = 0;

                        var lstMov = MovBancoDAO.Instance.GetByCreditoFornec(transaction, idCreditoFornecedor, null);

                        foreach (PagtoCreditoFornecedor p in cred.Pagamentos)
                        {
                            valor += p.ValorPagto;
                        }

                        // Verifica se o fornecedor possui crédito suficiente para que este seja cancelado
                        if (FornecedorDAO.Instance.GetCredito(transaction, cred.IdFornecedor) < valor)
                        {
                            throw new Exception("O crédito gerado já foi utilizado, não é possível cancelá-lo.");
                        }

                        var cheques = ChequesDAO.Instance.GetByCreditoFornecedor(transaction, cred.IdCreditoFornecedor);

                        // Ao efetuar um pagamento com cheque próprio Compensado o campo ValorReceb fica zerado, é preenchido na quitação do cheque próprio que foi cadastrado em aberto no pagamento.
                        if (cheques.Count(f => f.Tipo == 1 && (f.ValorReceb > 0 || f.IdDeposito > 0)) > 0)
                        {
                            var idsAcertoCheques = new List <int>();

                            if (cheques.Count(f => f.Tipo == 1 && f.ValorReceb > 0) > 0)
                            {
                                foreach (var cheque in cheques.Where(f => f.Tipo == 1 && f.ValorReceb > 0).ToList())
                                {
                                    var idsAcertoCheque = ItemAcertoChequeDAO.Instance.GetIdsAcertoByCheque(transaction, cheque.IdCheque, true);

                                    if (!string.IsNullOrEmpty(idsAcertoCheque))
                                    {
                                        idsAcertoCheques.AddRange(idsAcertoCheque.Split(',').Select(f => f.StrParaInt()).ToList());
                                    }
                                }
                            }

                            if (cheques.Count(f => f.Tipo == 1 && f.IdDeposito > 0) > 0 || idsAcertoCheques.Count > 0)
                            {
                                throw new Exception(string.Format(@"Não é possível cancelar este pagamento, o(s) cheque(s) próprio de número {0} foi(ram) quitado(s):\n\n{1}{2}\n\n
                                    Cancele a quitação dos cheques e tente cancelar o pagamento novamente.",
                                                                  string.Join(", ", cheques.Where(f => f.Tipo == 1 && (f.ValorReceb > 0 || f.IdDeposito > 0)).Select(f => f.Num).ToList()),
                                                                  idsAcertoCheques.Count > 0 ? string.Format("Acerto(s) de cheque próprio {0}", string.Join(", ", idsAcertoCheques)) : string.Empty,
                                                                  cheques.Count(f => f.Tipo == 1 && f.IdDeposito > 0) > 0 ?
                                                                  string.Format("{0}Depósito(s) {1}", idsAcertoCheques.Count > 0 ? "\n" : string.Empty,
                                                                                string.Join(", ", cheques.Where(f => f.Tipo == 1 && f.IdDeposito > 0).Select(f => f.IdDeposito).ToList())) : string.Empty));
                            }
                        }

                        if (cheques.Any(f => f.Situacao == (int)Cheques.SituacaoCheque.Devolvido))
                        {
                            throw new Exception(string.Format(@"Não é possível cancelar este pagamento, o(s) cheque(s) de número {0} foi(ram) devolvido(s).
                                Cancele a devolução deles para, depois, cancelar o pagamento.",
                                                              string.Join(", ", cheques.Where(f => f.Situacao == (int)Cheques.SituacaoCheque.Devolvido).Select(f => f.Num).ToList())));
                        }

                        objPersistence.ExecuteCommand(transaction, "update credito_fornecedor set situacao=?s where idCreditoFornecedor=" +
                                                      idCreditoFornecedor, new GDAParameter("?s", (int)CreditoFornecedor.SituacaoCredito.Cancelado));

                        foreach (PagtoCreditoFornecedor p in cred.Pagamentos)
                        {
                            #region Dinheiro

                            // Se a forma de pagto for Dinheiro, gera movimentação no caixa geral
                            if (p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.Dinheiro)
                            {
                                CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, idCreditoFornecedor, cred.IdFornecedor,
                                                                              UtilsPlanoConta.GetPlanoContaEstornoCreditoFornec((uint)Glass.Data.Model.Pagto.FormaPagto.Dinheiro), 1, p.ValorPagto, 1, true, null, null);
                            }

                            #endregion

                            #region Cheques

                            // Se a forma de pagamento for cheques próprios, cadastra cheques, associa os mesmos com as contas
                            // que estão sendo pagas, debita valor da conta que foi escolhida em cada cheque
                            else if ((p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio || p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro))
                            {
                                var contadorDataUnica = 0;
                                foreach (Cheques c in cheques)
                                {
                                    // Só executa para o tipo de cheque da forma de pagamento adequada
                                    if ((c.Tipo == 1 && p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro) ||
                                        (c.Tipo == 2 && p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio))
                                    {
                                        continue;
                                    }

                                    CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, idCreditoFornecedor, cred.IdFornecedor,
                                                                                  UtilsPlanoConta.GetPlanoContaEstornoCreditoFornec(p.IdFormaPagto), 1, c.Valor, 2, true, null, contadorDataUnica++);

                                    // Cheque próprio
                                    if (c.Tipo == 1)
                                    {
                                        ChequesDAO.Instance.Delete(transaction, c);

                                        // Para cada cheque "Compensado" utilizado neste pagamento, debita o valor da conta bancária associada ao mesmo
                                        if (c.Situacao == (int)Cheques.SituacaoCheque.Compensado && c.IdContaBanco > 0)
                                        {
                                            // Pega a primeira movimentação da conta bancária referente ao pagto
                                            object obj = objPersistence.ExecuteScalar(transaction, "Select idMovBanco from mov_banco Where idContaBanco=" + c.IdContaBanco +
                                                                                      " And idCreditoFornecedor=" + idCreditoFornecedor + " and idCheque=" + c.IdCheque + " order by idMovBanco asc limit 1");

                                            uint idMovBanco = obj != null && !String.IsNullOrEmpty(obj.ToString()) ? Glass.Conversoes.StrParaUint(obj.ToString()) : 0;

                                            if (idMovBanco == 0)
                                            {
                                                return;
                                            }

                                            // Verifica a conciliação bancária
                                            ConciliacaoBancariaDAO.Instance.VerificaDataConciliacao(transaction, idMovBanco);

                                            MovBanco movAnterior = MovBancoDAO.Instance.ObtemMovAnterior(transaction, idMovBanco);

                                            // Corrige saldo
                                            objPersistence.ExecuteCommand(transaction, "Update mov_banco Set valorMov=0 Where idCheque=" + c.IdCheque + " And idCreditoFornecedor=" + idCreditoFornecedor);
                                            if (movAnterior != null)
                                            {
                                                MovBancoDAO.Instance.CorrigeSaldo(transaction, movAnterior.IdMovBanco, idMovBanco);
                                            }

                                            // Exclui movimentações geradas
                                            objPersistence.ExecuteCommand(transaction, "Delete From mov_banco Where idCheque=" + c.IdCheque + " And idCreditoFornecedor=" + idCreditoFornecedor);
                                        }
                                    }

                                    // Cheque de terceiros
                                    else if (c.Tipo == 2)
                                    {
                                        objPersistence.ExecuteCommand(transaction, @"update cheques set jurosPagto=null, multaPagto=null,
                                        idCreditoFornecedor=null, situacao=" + (int)Cheques.SituacaoCheque.EmAberto + " where idCheque=" + c.IdCheque);
                                    }
                                }
                            }

                            #endregion

                            #region Depósito (Pagto. Bancário) ou Boleto

                            else if (p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.Deposito || p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.Boleto)
                            {
                                uint idConta = UtilsPlanoConta.GetPlanoContaCreditoFornec(p.IdFormaPagto);

                                // Pega a primeira movimentação da conta bancária referente ao pagto
                                object obj = objPersistence.ExecuteScalar(transaction, "Select idMovBanco from mov_banco Where " +
                                                                          "idCreditoFornecedor=" + idCreditoFornecedor + " and idConta=" + idConta + " order by idMovBanco asc limit 1");

                                uint idMovBanco = obj != null && !String.IsNullOrEmpty(obj.ToString()) ? Glass.Conversoes.StrParaUint(obj.ToString()) : 0;

                                if (idMovBanco == 0)
                                {
                                    continue;
                                }

                                // Verifica a conciliação bancária
                                ConciliacaoBancariaDAO.Instance.VerificaDataConciliacao(transaction, idMovBanco);

                                MovBanco movAnterior = MovBancoDAO.Instance.ObtemMovAnterior(transaction, idMovBanco);

                                // Corrige saldo
                                objPersistence.ExecuteCommand(transaction, "Update mov_banco Set valorMov=0 Where idConta=" + idConta + " And idCreditoFornecedor=" + idCreditoFornecedor);
                                if (movAnterior != null)
                                {
                                    MovBancoDAO.Instance.CorrigeSaldo(transaction, movAnterior.IdMovBanco, idMovBanco);
                                }

                                // Exclui movimentações geradas
                                objPersistence.ExecuteCommand(transaction, "Delete From mov_banco Where idConta=" + idConta + " And idCreditoFornecedor=" + idCreditoFornecedor);

                                // Salva o pagto. bancário no Cx. Geral
                                CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, idCreditoFornecedor, cred.IdFornecedor,
                                                                              UtilsPlanoConta.GetPlanoContaEstornoCreditoFornec(p.IdFormaPagto), 1, p.ValorPagto, 0, false, null, null);
                            }

                            #endregion

                            #region Permuta

                            else if (p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.Permuta)
                            {
                                CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, idCreditoFornecedor, cred.IdFornecedor,
                                                                              UtilsPlanoConta.GetPlanoContaEstornoCreditoFornec((uint)Glass.Data.Model.Pagto.FormaPagto.Permuta), 1, p.ValorPagto, 0, false, null, null);
                            }

                            #endregion
                        }

                        CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, idCreditoFornecedor, cred.IdFornecedor,
                                                                      cred.IdConta, 1, valor, 0, false, null, null);

                        FornecedorDAO.Instance.DebitaCredito(transaction, cred.IdFornecedor, valor);
                        LogCancelamentoDAO.Instance.LogCreditoFornecedor(cred, motivo, true);

                        transaction.Commit();
                        transaction.Close();
                    }
                    catch
                    {
                        transaction.Rollback();
                        transaction.Close();
                        throw;
                    }
                }
            }
        }
示例#23
0
        //private LucroAproximadoDAO() { }

        public IList <LucroAproximado> GetLucroAproximado(string dataIni, string dataFim)
        {
            // Sql para buscar gasto com décimo terceiro
            string sqlDecTerc = "Select 'Décimo Terceiro' as descricao, Sum(coalesce(salario, 0) / 12) as Valor From funcionario where situacao=" + (int)Situacao.Ativo;

            // Sql para buscar gasto com férias
            string sqlFerias = "Select 'Férias' as descricao, Sum((coalesce(salario, 0) / 3) / 12) as Valor From funcionario where situacao=" + (int)Situacao.Ativo;

            // Sql para buscar gasto com IPVA
            string sqlIpva = "Select 'IPVA' as descricao, Sum(Coalesce(ValorIpva, 0) / 12) as Valor From veiculo";

            // Sql para buscar gastos com Salários
            string sqlSalarios = "Select 'Salários' as descricao, Sum(coalesce(salario, 0) + coalesce(gratificacao, 0) + coalesce(auxalimentacao, 0)) as Valor " +
                                 "From funcionario Where situacao=" + (int)Situacao.Ativo;

            // Sql para buscar cheques devolvidos
            string sqlChequesDevolvidos = "Select 'Cheques Devolvidos' as descricao, Sum(valor) as Valor From cheques Where situacao=" +
                                          (int)Glass.Data.Model.Cheques.SituacaoCheque.Devolvido + " And idCheque In (" +
                                          "Select IdCheque From mov_banco where idConta=" + UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.ChequeDevolvido) + ")";

            // Sql para buscar pagamentos efetuados com cheques próprios
            string sqlPagoChequeProprio = "Select 'Pagtos. Cheques Próprios' as descricao, Sum(valorPagto) as Valor From pagto_pagto pp inner join pagto p on " +
                                          "(pp.idPagto=p.idPagto) Where p.dataPagto>=?dataIni And p.dataPagto<=?dataFim And idFormaPagto=" + (int)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio;

            // Sql para buscar pagamentos efetuados com cheques de terceiros
            string sqlPagoChequeTerc = "Select 'Pagtos. Cheques Terceiros' as descricao, Sum(valorPagto) as Valor From pagto_pagto pp inner join pagto p on " +
                                       "(pp.idPagto=p.idPagto) Where p.dataPagto>=?dataIni And p.dataPagto<=?dataFim And idFormaPagto=" + (int)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro + "";

            // Sql para buscar total gasto com pedidos de reposição
            string sqlPedidoRepos = "Select 'Pedidos Reposição' as descricao, Sum(total) as Valor From pedido Where situacao=" +
                                    (int)Glass.Data.Model.Pedido.SituacaoPedido.Confirmado + " And tipoVenda=" + (int)Glass.Data.Model.Pedido.TipoVendaPedido.Reposição +
                                    " And dataConf>=?dataIni And dataConf<=?dataFim";

            // Sql para executar todos os sqls acima com apenas uma requisição ao banco
            string sqlFinal = @"
                select grupo, descricao, cast(valor as decimal(12,2)) as valor, 'Período: " + dataIni + " a " + dataFim + @"' as criterio
                from (
                    Select 1 as grupo, descricao, valor
                    from (
                        " + SqlTotalCxGeral(1) + @"
                        union " + SqlTotalCxDiario(1, dataIni, dataFim) + @"
                    ) as entradas
                    
                    union select 2 as grupo, descricao, valor
                    from (
                        " + SqlTotalCxGeral(2) + @"
                        union " + SqlTotalCxDiario(2, dataIni, dataFim) + @"
                        union " + sqlPagoChequeProprio + @"
                        union " + sqlPagoChequeTerc + @"
                        union " + sqlPedidoRepos + @"
                        union " + sqlSalarios + @"
                        union " + sqlDecTerc + @"
                        union " + sqlFerias + @"
                        union " + sqlIpva + @"
                        union " + sqlChequesDevolvidos + @"
                    ) as saidas
                ) as lucro_aproximado";

            var lstParam = new List <GDAParameter>();

            lstParam.Add(new GDAParameter("?dataIni", DateTime.Parse(dataIni + " 00:00")));
            lstParam.Add(new GDAParameter("?dataFim", DateTime.Parse(dataFim + " 23:59")));

            return(objPersistence.LoadData(sqlFinal, lstParam.ToArray()).ToList());
        }
示例#24
0
        /// <summary>
        /// Faz a devolução de um pagamento.
        /// </summary>
        public uint Devolver(uint idCliente, DateTime data, decimal[] valores, uint[] idFormaPagto, uint[] idContaBanco, uint[] depositoNaoIdentificado, uint[] idTipoCartao,
                             uint[] numeroParcelas, uint[] idTipoBoleto, decimal[] taxaAntecip, string chequesPagto, string numAutConstrucard, decimal creditoUtilizado,
                             string obs, bool caixaDiario)
        {
            Glass.FilaOperacoes.ReceberDevolucaoPagto.AguardarVez();

            using (var transaction = new GDATransaction())
            {
                try
                {
                    transaction.BeginTransaction();

                    UtilsFinanceiro.DadosRecebimento retorno = null;

                    decimal totalDevolucao = 0;
                    foreach (decimal v in valores)
                    {
                        totalDevolucao += v;
                    }

                    // Insere o registro da devolução
                    DevolucaoPagto dev = new DevolucaoPagto();
                    dev.IdCliente = idCliente;
                    dev.Valor     = totalDevolucao;
                    dev.Situacao  = (int)DevolucaoPagto.SituacaoDevolucao.Aberta;
                    dev.Obs       = obs;
                    uint idDevolucaoPagto = Insert(transaction, dev);
                    dev.IdDevolucaoPagto = idDevolucaoPagto;

                    if (idDevolucaoPagto == 0)
                    {
                        throw new Exception("Falha ao inserir devolução de pagamento. Registro 0.");
                    }

                    #region Cheques

                    // Cheques próprios
                    List <Cheques> lstChequesInseridos = new List <Cheques>();

                    // Guarda os ids dos cheques de terceiros
                    string idsChequeTerc = String.Empty;
                    string idsChequeProp = String.Empty;

                    for (int i = 0; i < idFormaPagto.Length; i++)
                    {
                        // Se a forma de pagamento for cheques próprios cadastra os cheques
                        if ((idFormaPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio || idFormaPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro) &&
                            !String.IsNullOrEmpty(chequesPagto))
                        {
                            Cheques cheque;

                            // Separa os cheques guardando-os em um vetor
                            string[] vetCheque = chequesPagto.TrimEnd(' ').TrimEnd('|').Split('|');

                            if (idFormaPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio)
                            {
                                #region Cadastra os cheques próprios

                                // Para cada cheque próprio informado, cadastra o mesmo, guardando os ids que cada um retorna
                                foreach (string c in vetCheque)
                                {
                                    // Divide o cheque para pegar suas propriedades
                                    string[] dadosCheque = c.Split('\t');

                                    if (dadosCheque[0] == "proprio") // Se for cheque próprio
                                    {
                                        // Insere cheque no BD
                                        cheque = ChequesDAO.Instance.GetFromString(c);
                                        if (cheque.Situacao == (int)Cheques.SituacaoCheque.Compensado)
                                        {
                                            cheque.DataReceb = data;
                                        }
                                        cheque.IdDevolucaoPagto = idDevolucaoPagto;
                                        cheque.IdCheque         = ChequesDAO.Instance.InsertBase(transaction, cheque);

                                        if (cheque.IdCheque < 1)
                                        {
                                            throw new Exception("retorno do insert do cheque=0");
                                        }

                                        // Adiciona este cheque à lista de cheques inseridos
                                        lstChequesInseridos.Add(cheque);
                                    }
                                }

                                #endregion

                                #region Gera Movimentação Bancária

                                // Salva o id de cada cheque próprio utilizado na devolução de pagamento
                                foreach (Cheques c in lstChequesInseridos)
                                {
                                    idsChequeProp += c.IdCheque.ToString() + ",";
                                }

                                // Para cada cheque "Compensado" utilizado neste pagamento, debita o valor da conta bancária associada ao mesmo
                                foreach (Cheques c in lstChequesInseridos)
                                {
                                    if (c.Situacao == (int)Cheques.SituacaoCheque.Compensado)
                                    {
                                        ContaBancoDAO.Instance.MovContaDevolucaoPagto(transaction, c.IdContaBanco.Value,
                                                                                      UtilsPlanoConta.GetPlanoContaDevolucaoPagto(idFormaPagto[i], 0, 0), (int)UserInfo.GetUserInfo.IdLoja,
                                                                                      idDevolucaoPagto, idCliente, 2, c.Valor, data);
                                    }
                                }

                                #endregion
                            }
                            // Se a forma de pagamento for cheques de terceiros
                            else if (idFormaPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro)
                            {
                                // Verifica cheque por cheque
                                foreach (string c in vetCheque)
                                {
                                    // Divide o cheque para pegar suas propriedades
                                    string[] dadosCheque = c.Split('\t');

                                    if (dadosCheque[0] == "terceiro") // Se for cheque de terceiro
                                    {
                                        // Salva o id do cheque
                                        idsChequeTerc += dadosCheque[18] + ",";
                                    }
                                }
                            }
                        }
                    }

                    #endregion

                    dev.ValorCreditoAoCriar = ClienteDAO.Instance.GetCredito(transaction, idCliente);
                    dev.Cheques             = idsChequeProp + idsChequeTerc.TrimEnd(',');

                    retorno = UtilsFinanceiro.Receber(transaction, UserInfo.GetUserInfo.IdLoja, null, null, null, null, null, null, null, null, null, null, null,
                                                      idCliente, idDevolucaoPagto, null, data.ToString(), totalDevolucao, totalDevolucao, valores, idFormaPagto, idContaBanco, depositoNaoIdentificado, new uint[] { }, idTipoCartao,
                                                      idTipoCartao, taxaAntecip, 0, false, false, creditoUtilizado, numAutConstrucard, caixaDiario, numeroParcelas, String.Concat(idsChequeTerc.TrimEnd(',')),
                                                      false, UtilsFinanceiro.TipoReceb.DevolucaoPagto);

                    if (retorno.ex != null)
                    {
                        throw retorno.ex;
                    }

                    dev.CreditoGeradoCriar    = retorno.creditoGerado;
                    dev.CreditoUtilizadoCriar = creditoUtilizado;
                    Update(transaction, dev);

                    transaction.Commit();
                    transaction.Close();

                    return(idDevolucaoPagto);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    transaction.Close();
                    throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao efetuar a devolução de pagamento.", ex));
                }
                finally
                {
                    Glass.FilaOperacoes.ReceberDevolucaoPagto.ProximoFila();
                }
            }
        }
示例#25
0
        public override uint Insert(CreditoFornecedor objInsert)
        {
            lock (_insertLock)
            {
                using (var transaction = new GDATransaction())
                {
                    try
                    {
                        transaction.BeginTransaction();

                        var lstChequesInseridos = new List <Cheques>();
                        // Guarda os ids dos cheques de terceiros
                        var idsChequeTerc = string.Empty;

                        objInsert.DataCad             = DateTime.Now;
                        objInsert.UsuCad              = UserInfo.GetUserInfo.CodUser;
                        objInsert.Situacao            = (uint)CreditoFornecedor.SituacaoCredito.Ativo;
                        objInsert.IdCreditoFornecedor = base.Insert(transaction, objInsert);

                        uint    numPagto          = 0;
                        var     contadorDataUnica = 0;
                        decimal valor             = 0;

                        for (int i = 0; i < objInsert.FormasPagto.Length; i++)
                        {
                            if (objInsert.ValoresPagto[i] > 0)
                            {
                                PagtoCreditoFornecedor pagto = new PagtoCreditoFornecedor();
                                pagto.IdContaBanco        = objInsert.ContasBancoPagto[i] == 0 ? null : (uint?)objInsert.ContasBancoPagto[i];
                                pagto.IdCreditoFornecedor = objInsert.IdCreditoFornecedor;
                                pagto.IdFormaPagto        = objInsert.FormasPagto[i] == 0 ? null : (uint?)objInsert.FormasPagto[i];
                                pagto.IdTipoCartao        = objInsert.TiposCartaoPagto[i] == 0 ? null : (uint?)objInsert.TiposCartaoPagto[i];
                                pagto.NumFormaPagto       = ++numPagto;
                                pagto.ValorPagto          = objInsert.ValoresPagto[i];

                                PagtoCreditoFornecedorDAO.Instance.Insert(transaction, pagto);

                                if (objInsert.IdFornecedor == 0)
                                {
                                    throw new Exception("Fornecedor não informado para inserção de crédito do mesmo");
                                }

                                FornecedorDAO.Instance.CreditaCredito(transaction, (uint)objInsert.IdFornecedor, pagto.ValorPagto);

                                #region Dinheiro

                                // Se a forma de pagto for Dinheiro, gera movimentação no caixa geral
                                if (objInsert.FormasPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.Dinheiro)
                                {
                                    CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor,
                                                                                  UtilsPlanoConta.GetPlanoContaCreditoFornec((uint)Glass.Data.Model.Pagto.FormaPagto.Dinheiro), 2, objInsert.ValoresPagto[i], 1, true,
                                                                                  objInsert.DatasPagto[i], null);
                                }

                                #endregion

                                #region Cheques

                                // Se a forma de pagamento for cheques próprios, cadastra cheques, associa os mesmos com as contas
                                // que estão sendo pagas, debita valor da conta que foi escolhida em cada cheque
                                else if ((objInsert.FormasPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio || objInsert.FormasPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro))
                                {
                                    Cheques cheque;

                                    // Separa os cheques guardando-os em um vetor
                                    string[] vetCheque = objInsert.ChequesPagto.TrimEnd(' ').TrimEnd('|').Split('|');

                                    if (objInsert.FormasPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio)
                                    {
                                        #region Associa cheques ao pagamento e Gera movimentações no caixa geral

                                        try
                                        {
                                            // Para cada cheque próprio informado, cadastra o mesmo, guardando os ids que cada um retorna
                                            foreach (var c in vetCheque)
                                            {
                                                // Divide o cheque para pegar suas propriedades
                                                string[] dadosCheque = c.Split('\t');

                                                if (dadosCheque[0] == "proprio") // Se for cheque próprio
                                                {
                                                    // Insere cheque no BD
                                                    cheque = ChequesDAO.Instance.GetFromString(transaction, c);
                                                    cheque.IdCreditoFornecedor = objInsert.IdCreditoFornecedor;
                                                    cheque.JurosPagto          = 0;
                                                    cheque.MultaPagto          = 0;
                                                    if (cheque.Situacao == (int)Cheques.SituacaoCheque.Compensado)
                                                    {
                                                        cheque.DataReceb = objInsert.DataCad;
                                                    }
                                                    cheque.DataCad  = DateTime.Now;
                                                    cheque.IdCheque = ChequesDAO.Instance.InsertBase(transaction, cheque);

                                                    if (cheque.IdCheque < 1)
                                                    {
                                                        throw new Exception("retorno do insert do cheque=0");
                                                    }

                                                    // Adiciona este cheque à lista de cheques inseridos
                                                    lstChequesInseridos.Add(cheque);

                                                    var idCaixaGeral = CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor,
                                                                                                                     UtilsPlanoConta.GetPlanoContaCreditoFornec((uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio), 2,
                                                                                                                     cheque.Valor, 2, true, objInsert.DatasPagto[i], null);

                                                    objPersistence.ExecuteCommand(transaction,
                                                                                  string.Format(
                                                                                      "UPDATE caixa_geral SET DataUnica=CONCAT(DATAUNICA, '_{0}') WHERE IdCaixaGeral={1}",
                                                                                      contadorDataUnica++, idCaixaGeral));
                                                }
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao associar cheques ao pagamento.", ex));
                                        }

                                        #endregion

                                        #region Associa cheques inseridos ao pagamento e Gera Movimentação Bancária

                                        try
                                        {
                                            // Para cada cheque "Compensado" utilizado neste pagamento, debita o valor da conta bancária associada ao mesmo
                                            foreach (Cheques c in lstChequesInseridos)
                                            {
                                                if (c.Situacao == (int)Cheques.SituacaoCheque.Compensado)
                                                {
                                                    ContaBancoDAO.Instance.MovContaChequeCreditoFornecedor(transaction, c.IdContaBanco.Value,
                                                                                                           UtilsPlanoConta.GetPlanoContaCreditoFornec((uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio), (int)UserInfo.GetUserInfo.IdLoja,
                                                                                                           c.IdCheque, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor, 2, c.Valor, 0, objInsert.DataCad);

                                                    // Gera movimentação de juros
                                                    if (c.JurosPagto > 0)
                                                    {
                                                        ContaBancoDAO.Instance.MovContaChequeCreditoFornecedor(transaction, c.IdContaBanco.Value, FinanceiroConfig.PlanoContaJurosPagto, (int)UserInfo.GetUserInfo.IdLoja,
                                                                                                               c.IdCheque, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor, 2, c.JurosPagto, 0, objInsert.DataCad);
                                                    }

                                                    // Gera movimentação de multa
                                                    if (c.MultaPagto > 0)
                                                    {
                                                        ContaBancoDAO.Instance.MovContaChequeCreditoFornecedor(transaction, c.IdContaBanco.Value,
                                                                                                               FinanceiroConfig.PlanoContaMultaPagto, (int)UserInfo.GetUserInfo.IdLoja,
                                                                                                               c.IdCheque, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor, 2, c.MultaPagto, 0, objInsert.DataCad);
                                                    }
                                                }
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao associar cheques às contas a pagar", ex));
                                        }

                                        #endregion
                                    }
                                    // Se a forma de pagamento for cheques de terceiros
                                    else if (objInsert.FormasPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro)
                                    {
                                        #region Associa cheques ao pagamento e Gera movimentações no caixa geral

                                        try
                                        {
                                            // Para cada cheque próprio informado, cadastra o mesmo, guardando os ids que cada um retorna
                                            foreach (string c in vetCheque)
                                            {
                                                // Divide o cheque para pegar suas propriedades
                                                string[] dadosCheque = c.Split('\t');

                                                if (dadosCheque[0] == "terceiro") // Se for cheque de terceiro
                                                {
                                                    // Associa cada cheque utilizado no pagto à cada conta paga
                                                    uint idCheque = Glass.Conversoes.StrParaUint(dadosCheque[18]);
                                                    idsChequeTerc += dadosCheque[18] + ",";

                                                    // Coloca juros e multa gerados no cheque
                                                    objPersistence.ExecuteCommand(transaction, @"update cheques set jurosPagto=?juros, multaPagto=?multa,
                                                        idCreditoFornecedor=?id where idCheque=" + idCheque, new GDAParameter("?juros", 0),
                                                                                  new GDAParameter("?multa", 0), new GDAParameter("?id", objInsert.IdCreditoFornecedor));

                                                    var idCaixaGeral = CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor,
                                                                                                                     UtilsPlanoConta.GetPlanoContaCreditoFornec((uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro), 2,
                                                                                                                     ChequesDAO.Instance.ObtemValor(transaction, idCheque), 2, true, objInsert.DatasPagto[i], null);

                                                    objPersistence.ExecuteCommand(transaction,
                                                                                  string.Format(
                                                                                      "UPDATE caixa_geral SET DataUnica=CONCAT(DATAUNICA, '_{0}') WHERE IdCaixaGeral={1}",
                                                                                      contadorDataUnica++, idCaixaGeral));
                                                }
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao associar cheques ao pagamento.", ex));
                                        }

                                        #endregion

                                        #region Altera situação dos cheques para compensado e gera movimentação se houver adicional

                                        try
                                        {
                                            // Marca cheques de terceiros utilizados no pagamento como compensados
                                            ChequesDAO.Instance.UpdateSituacao(transaction, idsChequeTerc.TrimEnd(','), Cheques.SituacaoCheque.Compensado);
                                        }
                                        catch (Exception ex)
                                        {
                                            throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao marcar cheques como compensados.", ex));
                                            ;
                                        }

                                        #endregion
                                    }
                                }

                                #endregion

                                #region Depósito (Pagto. Bancário) ou Boleto

                                else if (objInsert.FormasPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.Deposito || objInsert.FormasPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.Boleto)
                                {
                                    // Salva o pagto. bancário no Cx. Geral
                                    CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor,
                                                                                  UtilsPlanoConta.GetPlanoContaCreditoFornec(objInsert.FormasPagto[i]), 2, objInsert.ValoresPagto[i], 0, false,
                                                                                  objInsert.DatasPagto[i], null);

                                    // Gera movimentação de saída na conta bancária
                                    ContaBancoDAO.Instance.MovContaCreditoFornecedor(transaction, objInsert.ContasBancoPagto[i],
                                                                                     UtilsPlanoConta.GetPlanoContaCreditoFornec(objInsert.FormasPagto[i]), (int)UserInfo.GetUserInfo.IdLoja, objInsert.IdCreditoFornecedor, null,
                                                                                     objInsert.IdFornecedor, 2, objInsert.ValoresPagto[i], 0,
                                                                                     objInsert.DatasPagto[i].GetValueOrDefault(objInsert.DataRecebimento.GetValueOrDefault()), null);
                                }

                                #endregion

                                #region Permuta

                                else if (objInsert.FormasPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.Permuta)
                                {
                                    CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor,
                                                                                  UtilsPlanoConta.GetPlanoContaCreditoFornec((uint)Glass.Data.Model.Pagto.FormaPagto.Permuta), 2, objInsert.ValoresPagto[i], 0, false,
                                                                                  objInsert.DatasPagto[i], null);
                                }

                                #endregion

                                valor += objInsert.ValoresPagto[i];
                            }
                        }

                        CaixaGeralDAO.Instance.MovCxCreditoFornecedor(transaction, objInsert.IdCreditoFornecedor, objInsert.IdFornecedor,
                                                                      objInsert.IdConta, 2, valor, 0, false, objInsert.DataCad, null);

                        transaction.Commit();
                        transaction.Close();

                        return(objInsert.IdCreditoFornecedor);
                    }
                    catch
                    {
                        transaction.Rollback();
                        transaction.Close();
                        throw;
                    }
                }
            }
        }
示例#26
0
        /// <summary>
        /// Gera o boleto
        /// </summary>
        /// <param name="codigoContaReceber"></param>
        /// <param name="codigoNotaFiscal"></param>
        /// <param name="codigoLiberacao"></param>
        /// <param name="codigoContaBanco"></param>
        /// <param name="carteira"></param>
        /// <param name="especieDocumento"></param>
        /// <param name="instrucoes"></param>
        /// <param name="ignorarNotificacaoBoletoImpresso"></param>
        /// <param name="conteudoBoleto"></param>
        /// <returns></returns>
        public Colosoft.Business.OperationResult <IEnumerable <uint> > GerarBoleto(
            int codigoContaReceber, int codigoNotaFiscal, int codigoLiberacao, int codigoCte,
            int codigoContaBanco, string carteira, int especieDocumento, string[] instrucoes,
            System.IO.Stream conteudoBoleto)
        {
            var idsContasR = new List <uint>()
            {
                (uint)codigoContaReceber
            };

            if (codigoNotaFiscal > 0)
            {
                idsContasR = ContasReceberDAO.Instance.ObtemPelaNfe((uint)codigoNotaFiscal).ToList();
            }

            if (codigoCte > 0)
            {
                idsContasR = ContasReceberDAO.Instance.ObterIdContaRPeloIdCte((uint)codigoCte).ToList();
            }

            if ((idsContasR.Count == 0 || idsContasR.FirstOrDefault() == 0) && codigoLiberacao > 0)
            {
                var contasReceberLiberacao = ContasReceberDAO.Instance.GetByPedidoLiberacao(0, (uint)codigoLiberacao, null);

                if (contasReceberLiberacao != null && contasReceberLiberacao.Count > 0)
                {
                    if (!Glass.Configuracoes.FinanceiroConfig.EmitirBoletoApenasContaTipoPagtoBoleto)
                    {
                        idsContasR = contasReceberLiberacao.Select(f => f.IdContaR).ToList();
                    }
                    else
                    {
                        var idsContaRBoleto         = new List <ContasReceber>();
                        var contasRecebimentoBoleto = UtilsPlanoConta.ContasRecebimentoBoleto().Split(',');

                        foreach (var item in contasReceberLiberacao)
                        {
                            if (contasRecebimentoBoleto.Contains(Conversoes.UintParaStr(item.IdConta)))
                            {
                                idsContaRBoleto.Add(item);
                            }
                        }

                        if (idsContaRBoleto.Count > 0)
                        {
                            idsContasR = idsContaRBoleto.Select(f => f.IdContaR).ToList();
                        }
                        else
                        {
                            throw new Exception("Nenhuma conta encontrada para gerar o boleto");
                        }
                    }
                }
            }

            using (var outPdf = new PdfSharp.Pdf.PdfDocument())
            {
                foreach (var id in idsContasR)
                {
                    var writer     = new System.IO.StringWriter();
                    var htmlWriter = new System.Web.UI.HtmlTextWriter(writer);

                    BoletoNet.BoletoBancario.HtmlOfflineHeader(writer.GetStringBuilder());

                    DadosBoleto.Instance.ObtemDadosBoleto(id, (uint)codigoContaBanco, carteira, especieDocumento, instrucoes, htmlWriter);

                    BoletoNet.BoletoBancario.HtmlOfflineFooter(writer.GetStringBuilder());

                    htmlWriter.Flush();

                    var htmlStr = writer.GetStringBuilder().ToString();

                    var converter = new SelectPdf.HtmlToPdf(100);

                    converter.Options.MarginTop    = 30;
                    converter.Options.MarginBottom = 10;
                    converter.Options.MarginLeft   = 30;
                    converter.Options.MarginRight  = 10;

                    var doc = converter.ConvertHtmlString(htmlStr);

                    using (var stream = new System.IO.MemoryStream())
                    {
                        doc.Save(stream);
                        using (var pdfBoleto = PdfSharp.Pdf.IO.PdfReader.Open(stream, PdfSharp.Pdf.IO.PdfDocumentOpenMode.Import))
                            CopyPages(pdfBoleto, outPdf);

                        doc.Close();
                    }
                }

                outPdf.Save(conteudoBoleto, false);

                if (Configuracoes.FinanceiroConfig.EnviarEmailEmitirBoleto &&
                    !Impresso.Instance.VerificarPossuiBoletoImpresso(null, (int)idsContasR.FirstOrDefault()))
                {
                    if (codigoNotaFiscal > 0)
                    {
                        var idLoja = NotaFiscalDAO.Instance.ObtemIdLoja((uint)codigoNotaFiscal);

                        if (idLoja == 0)
                        {
                            throw new Exception("Não foi possível recuperar a loja da nota fiscal ao salvar o e-mail a ser enviado.");
                        }

                        var idCliente = NotaFiscalDAO.Instance.ObtemIdCliente((uint)codigoNotaFiscal);

                        var email = ClienteDAO.Instance.GetEmail(null, idCliente.GetValueOrDefault(0));
                        if (!string.IsNullOrWhiteSpace(email))
                        {
                            var numNfe = NotaFiscalDAO.Instance.ObtemNumeroNf(null, (uint)codigoNotaFiscal);

                            var texto = string.Format("Prezado(a) cliente,\nSegue anexo boleto da sua NF-e: {0}.\n\nAtt.\n{1}", numNfe,
                                                      LojaDAO.Instance.GetElement(null, idLoja).RazaoSocial);

                            var assunto = string.Format("Boleto NF-e: {0}", numNfe);

                            var caminho = string.Format("{0}", "BoletoNFe" + codigoNotaFiscal);

                            var anexo = new Data.Model.AnexoEmail(caminho, string.Format("boletoNFe{0}.pdf", numNfe));

                            uint idEmail = 0;

                            try
                            {
                                idEmail = Email.EnviaEmailAsyncComTransacao(idLoja, email, assunto, texto, Email.EmailEnvio.Comercial, false, anexo);

                                //Salva o pdf em uma pasta local
                                outPdf.Save(Armazenamento.ArmazenamentoIsolado.DiretorioBoletos + string.Format("\\anexo{0}.pdf", anexo.IdAnexoEmail));
                            }
                            catch (System.Exception ex)
                            {
                                ErroDAO.Instance.InserirFromException("GerarBoletoAnexoEmail", ex);

                                if (idEmail > 0)
                                {
                                    FilaEmailDAO.Instance.DeleteByPrimaryKey(idEmail);
                                }
                            }
                        }
                    }
                    else if (codigoCte > 0)
                    {
                        var idContaR = ContasReceberDAO.Instance.ObterIdContaRPeloIdCte((uint)codigoCte).FirstOrDefault();

                        var idLoja = ContasReceberDAO.Instance.ObtemIdLoja(null, idContaR);

                        if (idLoja == 0)
                        {
                            throw new Exception("Não foi possível recuperar a loja da nota fiscal ao salvar o e-mail a ser enviado.");
                        }

                        var idCliente = ContasReceberDAO.Instance.ObtemIdCliente((uint)codigoCte);

                        var email = ClienteDAO.Instance.GetEmail(null, idCliente);
                        if (!string.IsNullOrWhiteSpace(email))
                        {
                            var numCte = Data.DAL.CTe.ConhecimentoTransporteDAO.Instance.ObtemNumeroCte((uint)codigoCte);

                            var texto = string.Format("Prezado(a) cliente,\nSegue anexo boleto do seu Ct-e: {0}.\n\nAtt.\n{1}", numCte,
                                                      LojaDAO.Instance.GetElement(null, (uint)idLoja).RazaoSocial);

                            var assunto = string.Format("Boleto CT-e: {0}", numCte);

                            var caminho = string.Format("{0}", "BoletoCTe" + codigoCte);

                            var anexo = new Data.Model.AnexoEmail(caminho, string.Format("boletoCTe{0}.pdf", numCte));

                            uint idEmail = 0;

                            try
                            {
                                idEmail = Email.EnviaEmailAsyncComTransacao((uint)idLoja, email, assunto, texto, Email.EmailEnvio.Comercial, false, anexo);

                                //Salva o pdf em uma pasta local
                                outPdf.Save(Armazenamento.ArmazenamentoIsolado.DiretorioBoletos + string.Format("\\anexo{0}.pdf", anexo.IdAnexoEmail));
                            }
                            catch (System.Exception ex)
                            {
                                ErroDAO.Instance.InserirFromException("GerarBoletoAnexoEmail", ex);

                                if (idEmail > 0)
                                {
                                    FilaEmailDAO.Instance.DeleteByPrimaryKey(idEmail);
                                }
                            }
                        }
                    }
                }

                foreach (var b in idsContasR)
                {
                    Impresso.Instance.IndicarBoletoImpresso((int)b, codigoNotaFiscal, codigoLiberacao, codigoCte, codigoContaBanco, UserInfo.GetUserInfo);
                }
            }

            return(new Colosoft.Business.OperationResult <IEnumerable <uint> >(idsContasR));
        }
示例#27
0
        /// <summary>
        /// Cancela pagamento
        /// </summary>
        public void CancelarPagto(GDASession session, uint idPagto, string motivoCanc, bool estornarMovimentacaoBancaria,
                                  DateTime?dataEstornoBanco)
        {
            List <uint> lstCaixaGeral = new List <uint>(), lstMovBanco = new List <uint>();
            decimal     credito = 0;

            ContasPagar[] pagas = null, geradas = null;
            Pagto         pagto = new Pagto();

            MovBanco[] movs = MovBancoDAO.Instance.GetByPagto(session, idPagto, 0).ToArray();
            List <AntecipacaoFornecedor> lstAntecipFornec = new List <AntecipacaoFornecedor>();
            var lstCheques        = ChequesDAO.Instance.GetByPagto(session, idPagto).ToArray();
            var contadorDataUnica = 0;

            pagto = GetElementByPrimaryKey(session, idPagto);

            if (pagto.Situacao == (int)Pagto.SituacaoPagto.Cancelado)
            {
                throw new Exception("Este pagamento já foi cancelado.");
            }

            // Verifica se este pagto possui boletos gerados e pagos
            if (objPersistence.ExecuteSqlQueryCount(session, "Select Count(*) From contas_pagar Where idConta=" +
                                                    UtilsPlanoConta.GetPlanoConta(
                                                        UtilsPlanoConta.PlanoContas.PagtoRenegociacao) +
                                                    " And idPagtoRestante=" + idPagto + " And paga=true") > 0)
            {
                throw new Exception(
                          "Este pagamento gerou outras contas a pagar e as mesmas estão pagas, cancele o pagamento destas contas geradas antes de cancelar este pagamento");
            }

            // Verifica se este pagto possui valores restante já pagos
            if (
                objPersistence.ExecuteSqlQueryCount(session, "Select Count(*) From contas_pagar Where idPagtoRestante=" +
                                                    idPagto + " And paga=true") > 0)
            {
                throw new Exception(
                          "Este pagamento gerou um valor restante e o mesmo foi pago, cancele o pagamento deste valor restante antes de cancelar este pagamento");
            }

            // Verifica se este pagto gerou juros e ou multa e se os planos de conta dos mesmos estão associados
            if (ContasPagarDAO.Instance.PossuiJurosMulta(session, idPagto) &&
                (FinanceiroConfig.PlanoContaEstornoJurosPagto == 0 ||
                 FinanceiroConfig.PlanoContaEstornoMultaPagto == 0))
            {
                throw new Exception("Associe os planos de conta de estorno de juros e multa de pagamentos.");
            }

            // Ao efetuar um pagamento com cheque próprio Compensado o campo ValorReceb fica zerado, é preenchido na quitação do cheque próprio que foi cadastrado em aberto no pagamento.
            if (lstCheques.Count(f => f.Tipo == 1 && (f.ValorReceb > 0 || f.IdDeposito > 0)) > 0)
            {
                var idsAcertoCheques = new List <int>();

                if (lstCheques.Count(f => f.Tipo == 1 && f.ValorReceb > 0) > 0)
                {
                    foreach (var cheque in lstCheques.Where(f => f.Tipo == 1 && f.ValorReceb > 0).ToList())
                    {
                        var idsAcertoCheque = ItemAcertoChequeDAO.Instance.GetIdsAcertoByCheque(session, cheque.IdCheque, true);

                        if (!string.IsNullOrEmpty(idsAcertoCheque))
                        {
                            idsAcertoCheques.AddRange(idsAcertoCheque.Split(',').Select(f => f.StrParaInt()).ToList());
                        }
                    }
                }

                if (lstCheques.Count(f => f.Tipo == 1 && f.IdDeposito > 0) > 0 || idsAcertoCheques.Count > 0)
                {
                    throw new Exception(
                              string.Format("Não é possível cancelar este pagamento, o(s) cheque(s) próprio de número {0} foi(ram) quitado(s):\n\n{1}{2}\n\nCancele a quitação dos cheques e tente cancelar o pagamento novamente.",
                                            string.Join(", ", lstCheques.Where(f => f.Tipo == 1 && (f.ValorReceb > 0 || f.IdDeposito > 0)).Select(f => f.Num).ToList()),
                                            idsAcertoCheques.Count > 0 ? string.Format("Acerto(s) de cheque próprio {0}", string.Join(", ", idsAcertoCheques)) : string.Empty,
                                            lstCheques.Count(f => f.Tipo == 1 && f.IdDeposito > 0) > 0 ?
                                            string.Format("{0}Depósito(s) {1}", idsAcertoCheques.Count > 0 ? "\n" : string.Empty,
                                                          string.Join(", ", lstCheques.Where(f => f.Tipo == 1 && f.IdDeposito > 0).Select(f => f.IdDeposito).ToList())) : string.Empty));
                }
            }

            /* Chamado 52690. */
            if (lstCheques.Any(f => f.Situacao == (int)Cheques.SituacaoCheque.Devolvido))
            {
                throw new Exception(string.Format("Não é possível cancelar este pagamento, o(s) cheque(s) de número {0} foi(ram) devolvido(s). Cancele a devolução deles para, depois, cancelar o pagamento.",
                                                  string.Join(", ", lstCheques.Where(f => f.Situacao == (int)Cheques.SituacaoCheque.Devolvido).Select(f => f.Num).ToList())));
            }

            bool jurosMultaEstornado = false;

            var lstPagto = PagtoPagtoDAO.Instance.GetByPagto(session, idPagto).ToArray();

            #region Estorna Crédito

            if (FinanceiroConfig.FormaPagamento.CreditoFornecedor)
            {
                List <CaixaGeral> lstCxGeral =
                    new List <CaixaGeral>(CaixaGeralDAO.Instance.GetByPagto(session, idPagto));
                lstCxGeral.Sort(
                    delegate(CaixaGeral x, CaixaGeral y)
                {
                    int comp = y.DataMov.CompareTo(x.DataMov);
                    if (comp == 0)
                    {
                        comp = y.IdCaixaGeral.CompareTo(x.IdCaixaGeral);
                    }

                    return(comp);
                }
                    );

                if (pagto.IdFornec > 0)
                {
                    UtilsFinanceiro.ValidaValorCreditoFornecedor(session, (uint)pagto.IdFornec, lstCxGeral);
                }

                foreach (CaixaGeral cx in lstCxGeral)
                {
                    if ((cx.TipoMov == 1 && cx.IdConta !=
                         UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.PagtoCreditoFornecedor)) ||
                        (cx.TipoMov == 2 &&
                         cx.IdConta ==
                         UtilsPlanoConta.GetPlanoConta(
                             UtilsPlanoConta.PlanoContas.EstornoPagtoCreditoFornecedor)))
                    {
                        // Se for juros de venda cartão, continua
                        if (cx.IdConta == FinanceiroConfig.PlanoContaJurosCartao)
                        {
                            continue;
                        }
                        else
                        {
                            break;
                        }
                    }

                    // Se algum credito tiver sido utilizado, estorna no crédito do fornecedor
                    if (cx.IdConta ==
                        UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.PagtoCreditoFornecedor) &&
                        pagto.IdFornec != null)
                    {
                        FornecedorDAO.Instance.CreditaCredito(session, pagto.IdFornec.Value, cx.ValorMov);
                        credito += cx.ValorMov;

                        // Estorna crédito utilizado pelo fornecedor
                        lstCaixaGeral.Add(CaixaGeralDAO.Instance.MovCxPagto(session, idPagto, null,
                                                                            pagto.IdFornec,
                                                                            UtilsPlanoConta.GetPlanoConta(
                                                                                UtilsPlanoConta.PlanoContas.EstornoPagtoCreditoFornecedor), 2,
                                                                            cx.ValorMov, 0, null, null, 0, false, null));
                    }

                    //Se algum credito tiver sido gerado, estorna do crédito do fornecedor.
                    if (cx.IdConta ==
                        UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.CreditoCompraGerado) &&
                        pagto.IdFornec != null)
                    {
                        FornecedorDAO.Instance.DebitaCredito(session, pagto.IdFornec.Value, cx.ValorMov);
                        credito -= cx.ValorMov;

                        // Estorna crédito venda gerado
                        lstCaixaGeral.Add(CaixaGeralDAO.Instance.MovCxPagto(session, idPagto, null,
                                                                            pagto.IdFornec,
                                                                            UtilsPlanoConta.GetPlanoConta(
                                                                                UtilsPlanoConta.PlanoContas.EstornoCreditoCompraGerado), 1,
                                                                            cx.ValorMov, 0, null, null, 0, false, null));
                    }
                }
            }

            #endregion

            // Estorna os pagamentos
            foreach (PagtoPagto p in lstPagto)
            {
                // Não estorna os cheques ou crédito no loop (crédito: idFormaPagto = 0);
                if (p.IdFormaPagto == 0 ||
                    /* Chamado 17551. */
                    p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.Credito ||
                    p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio ||
                    p.IdFormaPagto == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro)
                {
                    continue;
                }

                #region Estorna juros

                // Calcula o total de juros e multa para esta forma de pagto
                decimal jurosMultaPagto = (pagto.Juros + pagto.Multa) / lstPagto.Length;

                // Estorna os juros
                if (p.IdContaBanco > 0)
                {
                    // Gera movimentação de estorno na conta bancária referente aos juros
                    if (pagto.Juros > 0)
                    {
                        lstMovBanco.AddRange(EstornoBancario(session, idPagto, p.IdContaBanco.Value,
                                                             FinanceiroConfig.PlanoContaJurosPagto,
                                                             FinanceiroConfig.PlanoContaEstornoJurosPagto, estornarMovimentacaoBancaria,
                                                             dataEstornoBanco, contadorDataUnica));
                    }

                    // Gera movimentação de estorno na conta bancária referente à multa
                    if (pagto.Multa > 0)
                    {
                        lstMovBanco.AddRange(EstornoBancario(session, idPagto, p.IdContaBanco.Value,
                                                             FinanceiroConfig.PlanoContaMultaPagto,
                                                             FinanceiroConfig.PlanoContaEstornoMultaPagto, estornarMovimentacaoBancaria,
                                                             dataEstornoBanco, contadorDataUnica));
                    }
                }
                else if (!jurosMultaEstornado)
                {
                    // Gera uma movimentação de estorno para o juros
                    if (pagto.Juros > 0)
                    {
                        lstCaixaGeral.Add(CaixaGeralDAO.Instance.MovCxPagto(session, idPagto, null,
                                                                            pagto.IdFornec, FinanceiroConfig.PlanoContaEstornoJurosPagto, 1,
                                                                            pagto.Juros, 0, null, null, 1, true, null));
                    }

                    // Gera uma movimentação de estorno para o juros
                    if ((pagto.Multa / lstPagto.Length) > 0)
                    {
                        lstCaixaGeral.Add(CaixaGeralDAO.Instance.MovCxPagto(session, idPagto, null,
                                                                            pagto.IdFornec, FinanceiroConfig.PlanoContaEstornoMultaPagto, 1,
                                                                            pagto.Multa, 0, null, null, 1, true, null));
                    }

                    jurosMultaEstornado = true;
                }

                #endregion

                // Recupera o plano de contas
                uint idConta = UtilsPlanoConta.GetPlanoContaEstornoPagto(p.IdFormaPagto);

                // Gera uma movimentação de estorno para cada forma de pagto
                var idCaixaGeral = CaixaGeralDAO.Instance.MovCxPagto(session, idPagto, null, pagto.IdFornec, idConta, 1,
                                                                     p.ValorPagto - jurosMultaPagto,
                                                                     jurosMultaPagto, null, null, 0,
                                                                     p.IdFormaPagto != (uint)Glass.Data.Model.Pagto.FormaPagto.AntecipFornec &&
                                                                     p.IdFormaPagto != (uint)Glass.Data.Model.Pagto.FormaPagto.Permuta &&
                                                                     (p.IdContaBanco == null || p.IdContaBanco == 0), null);

                objPersistence.ExecuteCommand(session,
                                              string.Format("UPDATE caixa_geral SET DataUnica=CONCAT(DATAUNICA, '_{0}') WHERE IdCaixaGeral={1}",
                                                            contadorDataUnica++, idCaixaGeral));
            }

            if (lstPagto.Any(f => f.IdContaBanco > 0))
            {
                var contasBanco = new List <int>();

                /* Chamado 39565. */
                foreach (var idContaBanco in lstPagto.Where(f => f.IdContaBanco > 0).Select(f => (int)f.IdContaBanco.Value))
                {
                    if (contasBanco.Contains(idContaBanco))
                    {
                        continue;
                    }
                    else
                    {
                        contasBanco.Add(idContaBanco);
                    }

                    // Gera movimentação de estorno na conta bancária
                    lstMovBanco.AddRange(EstornoBancario(session, idPagto, (uint)idContaBanco,
                                                         UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.PagtoTransfBanco),
                                                         UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.EstornoPagtoTransfBancaria),
                                                         estornarMovimentacaoBancaria, dataEstornoBanco, contadorDataUnica));

                    lstMovBanco.AddRange(EstornoBancario(session, idPagto, (uint)idContaBanco,
                                                         UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.PagtoBoleto),
                                                         UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.EstornoPagtoBoleto),
                                                         estornarMovimentacaoBancaria, dataEstornoBanco, contadorDataUnica));
                }
            }

            #region Estorna Cheques

            // Gera movimentação no caixa geral de estorno de cada cheque de terceiro
            foreach (var c in lstCheques.Where(f => f.Tipo == 2))
            {
                // Estorna valor gerado pelo cheque
                var idCaixaGeral = CaixaGeralDAO.Instance.MovCxPagto(session, idPagto, null,
                                                                     pagto.IdFornec, UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.EstornoPagtoChequeTerceiros),
                                                                     1, c.Valor - c.JurosPagto - c.MultaPagto, c.JurosPagto + c.MultaPagto, null, null, 2, true, null);

                lstCaixaGeral.Add(idCaixaGeral);

                objPersistence.ExecuteCommand(session,
                                              string.Format("UPDATE caixa_geral SET DataUnica=CONCAT(DATAUNICA, '_{0}') WHERE IdCaixaGeral={1}",
                                                            contadorDataUnica++, idCaixaGeral));

                // Estorna valor dos juros pagos pelo cheque
                if (c.JurosPagto > 0)
                {
                    idCaixaGeral = CaixaGeralDAO.Instance.MovCxPagto(session, idPagto, null,
                                                                     pagto.IdFornec, FinanceiroConfig.PlanoContaEstornoJurosPagto, 1,
                                                                     c.JurosPagto, 0, null, null, 2, true, null);

                    lstCaixaGeral.Add(idCaixaGeral);

                    objPersistence.ExecuteCommand(session,
                                                  string.Format("UPDATE caixa_geral SET DataUnica=CONCAT(DATAUNICA, '_{0}') WHERE IdCaixaGeral={1}",
                                                                contadorDataUnica++, idCaixaGeral));
                }

                // Estorna valor dos juros pagos pelo cheque
                if (c.MultaPagto > 0)
                {
                    idCaixaGeral = CaixaGeralDAO.Instance.MovCxPagto(session, idPagto, null,
                                                                     pagto.IdFornec, FinanceiroConfig.PlanoContaEstornoMultaPagto, 1,
                                                                     c.MultaPagto, 0, null, null, 2, true, null);

                    lstCaixaGeral.Add(idCaixaGeral);

                    objPersistence.ExecuteCommand(session,
                                                  string.Format("UPDATE caixa_geral SET DataUnica=CONCAT(DATAUNICA, '_{0}') WHERE IdCaixaGeral={1}",
                                                                contadorDataUnica++, idCaixaGeral));
                }
            }

            // Altera situação dos cheques de terceiros utilizados no pagto desta conta para em aberto
            var dados = ChequesDAO.Instance.CancelaChequesPagto(session, idPagto, 2,
                                                                Cheques.SituacaoCheque.EmAberto);
            lstCaixaGeral.AddRange(dados.Key);
            lstMovBanco.AddRange(dados.Value);

            // Cancela cheques próprios utilizados no pagamento desta conta
            dados = ChequesDAO.Instance.CancelaChequesPagto(session, idPagto, 1,
                                                            Cheques.SituacaoCheque.Cancelado);
            lstCaixaGeral.AddRange(dados.Key);
            lstMovBanco.AddRange(dados.Value);

            #endregion

            // Exclui contas a pagar geradas neste pagto
            geradas = ContasPagarDAO.Instance.GetRenegociadasPagto(session, idPagto);
            objPersistence.ExecuteCommand(session, "Delete from contas_pagar Where idConta=" +
                                          UtilsPlanoConta.GetPlanoConta(
                                              UtilsPlanoConta.PlanoContas.PagtoRenegociacao) +
                                          " And idPagtoRestante=" + idPagto);

            // Exclui conta a pagar restante gerada por este pagamento
            objPersistence.ExecuteCommand(session, "Delete from contas_pagar Where idPagtoRestante=" + idPagto);

            // Volta situação das contas a pagar para estado inicial
            pagas = ContasPagarDAO.Instance.GetByPagto(session, idPagto);
            objPersistence.ExecuteCommand(session, @"UPDATE contas_pagar SET Desconto=0, DataPagto=null, Paga=0, ValorPago=0, Juros=0, Multa=0,
                IdPagto=IF(IdCheque>0, IdPagtoRestante, NULL), IdChequePagto=null, DestinoPagto=null WHERE IdPagto=" + idPagto);

            string idsContasPg = "", valoresPg = "", idsChequesPg = "";
            foreach (ContasPagar c in pagas)
            {
                idsContasPg += c.IdContaPg + ",";
                valoresPg   += c.ValorPago.ToString().Replace(".", "").Replace(",", ".") + ",";
            }

            foreach (Cheques c in lstCheques)
            {
                idsChequesPg += c.IdCheque + ",";
            }

            // Atualiza situação e motivo do cancelamento do pagto
            objPersistence.ExecuteCommand(session,
                                          "Update pagto set situacao=" + (int)Pagto.SituacaoPagto.Cancelado +
                                          ", motivoCanc=?motivo, idsContasPg=?idsContasPg, valoresPg=?valoresPg, idsChequesPg=?idsChequesPg Where idPagto=" +
                                          idPagto,
                                          new GDAParameter("?motivo",
                                                           motivoCanc.Length > 500 ? motivoCanc.Substring(0, 500) : motivoCanc),
                                          new GDAParameter("?idsContasPg", idsContasPg.TrimEnd(',')),
                                          new GDAParameter("?valoresPg", valoresPg.TrimEnd(',')),
                                          new GDAParameter("?idsChequesPg", idsChequesPg.TrimEnd(',')));

            var pagtoLog = GetElementByPrimaryKey(session, idPagto);
            LogCancelamentoDAO.Instance.LogPagto(session, pagto, pagtoLog.MotivoCanc, false);

            // Corrige o saldo das antecipações de fornecedor utilizadas
            foreach (var id in lstPagto.Where(x => x.IdAntecipFornec > 0).Select(x => x.IdAntecipFornec.Value))
            {
                lstAntecipFornec.Add(AntecipacaoFornecedorDAO.Instance.GetElementByPrimaryKey(session, id));

                decimal cred;
                var     idMov = AntecipacaoFornecedorDAO.Instance.AtualizaSaldo(session, id, out cred).Key;
                credito += cred;

                if (idMov > 0)
                {
                    lstCaixaGeral.Add(idMov.Value);
                }
            }
        }
示例#28
0
        /// <summary>
        /// Gera as contas a pagar ou a receber de um encontro
        /// </summary>
        /// <param name="idEncontroContas"></param>
        /// <param name="dtVenc"></param>
        /// <param name="ContaGerar">tipo de conta gerada: 1 - Conta a pagar 2 - Conta a receber</param>
        /// <param name="valorGerar">valor gerado</param>
        public void GeraContasPagarReceber(GDASession sessao, uint idEncontroContas, DateTime dtVenc, ref int contaGerar, ref decimal valorGerar)
        {
            try
            {
                decimal valorPagar   = ObtemTotalPagar(sessao, idEncontroContas);
                decimal valorReceber = ObtemTotalReceber(sessao, idEncontroContas);

                if (valorPagar == valorReceber)
                {
                    contaGerar = 0;
                    valorGerar = 0;
                    return;
                }

                string tipoContas = ObtemTipoConta(sessao, idEncontroContas);

                if (valorPagar > valorReceber)
                {
                    valorGerar = valorPagar - valorReceber;

                    ContasPagarDAO.Instance.Insert(sessao, new ContasPagar()
                    {
                        IdEncontroContas = idEncontroContas,
                        IdFornec         = ObtemIdFornec(idEncontroContas),
                        IdLoja           = UserInfo.GetUserInfo.IdLoja,
                        IdConta          = UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.ValorExcedenteEncontroContas),
                        DataVenc         = dtVenc,
                        ValorVenc        = valorGerar,
                        NumParc          = 1,
                        NumParcMax       = 1,
                        Contabil         = tipoContas == FinanceiroConfig.ContasPagarReceber.DescricaoContaContabil
                    });

                    contaGerar = 1;
                }
                else
                {
                    valorGerar = valorReceber - valorPagar;

                    ContasReceberDAO.Instance.Insert(sessao, new ContasReceber()
                    {
                        IdLoja           = UserInfo.GetUserInfo.IdLoja,
                        IdEncontroContas = idEncontroContas,
                        IdCliente        = ObtemIdCliente(idEncontroContas),
                        IdConta          = UtilsPlanoConta.GetPlanoConta(UtilsPlanoConta.PlanoContas.ValorExcedenteEncontroContas),
                        DataVec          = dtVenc,
                        ValorVec         = valorGerar,
                        NumParc          = 1,
                        NumParcMax       = 1,
                        TipoConta        = tipoContas == FinanceiroConfig.ContasPagarReceber.DescricaoContaContabil ? (byte)ContasReceber.TipoContaEnum.Contabil :
                                           tipoContas == FinanceiroConfig.ContasPagarReceber.DescricaoContaCupomFiscal ? (byte)ContasReceber.TipoContaEnum.CupomFiscal :
                                           (byte)ContasReceber.TipoContaEnum.NaoContabil
                    });

                    contaGerar = 2;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        //private MovimentacoesFinanceirasDAO() { }

        private string Sql(string dataIni, string dataFim, bool detalhado, bool selecionar)
        {
            string planosContaDinheiroEntrada    = UtilsPlanoConta.GetLstEntradaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Dinheiro, 0, false);
            string planosContaChequeEntrada      = UtilsPlanoConta.GetLstEntradaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.ChequeProprio, 0, false);
            string planosContaConstrucardEntrada = UtilsPlanoConta.GetLstEntradaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Construcard, 0, false);

            var lstPlanosContaCartao = new Dictionary <uint, string>();

            foreach (var c in UtilsPlanoConta.ContasCartoes)
            {
                lstPlanosContaCartao.Add((uint)c.IdTipoCartao, UtilsPlanoConta.GetLstEntradaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Cartao, (uint)c.IdTipoCartao, false));
            }

            string planosContaDinheiroSaida    = UtilsPlanoConta.GetLstSaidaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Dinheiro, 0, 1);
            string planosContaChequeSaida      = UtilsPlanoConta.GetLstSaidaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.ChequeProprio, 0, 1);
            string planosContaConstrucardSaida = UtilsPlanoConta.GetLstSaidaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Construcard, 0, 1);

            string planosContaDinheiroEstorno    = UtilsPlanoConta.GetLstEstornoSaidaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Dinheiro, 0);
            string planosContaConstrucardEstorno = UtilsPlanoConta.GetLstEstornoSaidaByFormaPagto(Glass.Data.Model.Pagto.FormaPagto.Construcard, 0);

            if (string.IsNullOrEmpty(planosContaConstrucardEntrada))
            {
                planosContaConstrucardEntrada = "0";
            }

            if (string.IsNullOrEmpty(planosContaConstrucardSaida))
            {
                planosContaConstrucardSaida = "0";
            }

            if (string.IsNullOrEmpty(planosContaConstrucardEstorno))
            {
                planosContaConstrucardEstorno = "0";
            }

            string dataInicioMes = "date(date_sub(?dataIni, interval day(?dataIni)-1 day))";
            string dataFimMes    = "date_sub(date(date_add(date_sub(?dataFim, interval day(?dataFim)-1 day), interval 1 month)), interval 1 second)";

            #region SQL para caixa geral

            string camposCaixaGeral = !selecionar ? "count(*), cg.idConta" :
                                      @"2 as tipoMov, '{0}' as nomeMov, cg.idConta, (
                        select (
                                select sum(valorMov)
                                from caixa_geral
                                where (idConta in ({1},{5}) {2})
                                    and tipoMov=1
                                    and dataMov<?dataIni
                                    " + (detalhado ? "and idConta=cg.idConta" : "") + @"
                            )-(
                                select sum(valorMov)
                                from caixa_geral
                                where (idConta in ({3}) {4})
                                    and tipoMov=2
                                    and dataMov<?dataIni
                                    " + (detalhado ? "and idConta=cg.idConta" : "") + @"
                            )
                    ) as saldoAnteriorDia, sum(if(cg.tipoMov=1 and (cg.idConta in ({1}) {2}), cg.valorMov, 0)) as entradasDia,
                    sum(if(cg.tipoMov=2 and (cg.idConta in ({3}) {4}), cg.valorMov, 0)) as saidasDia, (
                        select (
                                select sum(valorMov)
                                from caixa_geral
                                where (idConta in ({1},{5}) {2})
                                    and tipoMov=1
                                    and dataMov<" + dataInicioMes + @"
                                    " + (detalhado ? "and idConta=cg.idConta" : "") + @"
                            )-(
                                select sum(valorMov)
                                from caixa_geral
                                where (idConta in ({3}) {4})
                                    and tipoMov=2
                                    and dataMov<" + dataInicioMes + @"
                                    " + (detalhado ? "and idConta=cg.idConta" : "") + @"
                            )
                    )  as saldoAnteriorMes, mes.entradas as entradasMes, mes.saidas as saidasMes";

            string sqlCaixaGeral = @"
                select " + camposCaixaGeral + @"
                from caixa_geral cg, (
                        select idConta, sum(entradas) as entradas, sum(saidas) as saidas
                        from (
                            select idConta, sum(valorMov) as entradas, 0 as saidas
                            from caixa_geral
                            where (idConta in ({1}) {2})
                                and tipoMov=1
                                and dataMov>=" + dataInicioMes + @"
                                and dataMov<=" + dataFimMes + @"
                                " + (detalhado ? "group by idConta" : "") + @"
                            
                            union select idConta, 0 as entradas, sum(valorMov) as saidas
                            from caixa_geral
                            where (idConta in ({3}) {4})
                                and tipoMov=2
                                and dataMov>=" + dataInicioMes + @"
                                and dataMov<=" + dataFimMes + @"
                                " + (detalhado ? "group by idConta" : "") + @"
                        ) as temp
                        " + (detalhado ? "group by idConta" : "") + @"
                    ) as mes
                where (cg.idConta in ({1},{3},{5}) {2} {4})
                    and cg.dataMov>=?dataIni
                    and cg.dataMov<=?dataFim
                    " + (detalhado ? "and cg.idConta=mes.idConta" : "") + @"
                    " + (detalhado ? "group by cg.idConta" : "");

            #endregion

            #region SQL para caixa diário

            string camposCaixaDiario = !selecionar ? "count(*), cd.idConta" :
                                       @"2 as tipoMov, '{0}' as nomeMov, cd.idConta, (
                        select (
                                select sum(valor)
                                from caixa_diario
                                where (idConta in ({1},{5}) {2})
                                    and tipoMov=1
                                    and dataCad<?dataIni
                                    " + (detalhado ? "and idConta=cd.idConta" : "") + @"
                            )-(
                                select sum(valor)
                                from caixa_diario
                                where (idConta in ({3}) {4})
                                    and tipoMov=2
                                    and dataCad<?dataIni
                                    " + (detalhado ? "and idConta=cd.idConta" : "") + @"
                            )
                    ) as saldoAnteriorDia, sum(if(cd.tipoMov=1 and (cd.idConta in ({1}) {2}), cd.valor, 0)) as entradasDia,
                    sum(if(cd.tipoMov=2 and (cd.idConta in ({3}) {4}), cd.valor, 0)) as saidasDia, (
                        select (
                                select sum(valor)
                                from caixa_diario
                                where (idConta in ({1},{5}) {2})
                                    and tipoMov=1
                                    and dataCad<" + dataInicioMes + @"
                                    " + (detalhado ? "and idConta=cd.idConta" : "") + @"
                            )-(
                                select sum(valor)
                                from caixa_diario
                                where (idConta in ({3}) {4})
                                    and tipoMov=2
                                    and dataCad<" + dataInicioMes + @"
                                    " + (detalhado ? "and idConta=cd.idConta" : "") + @"
                            )
                    )  as saldoAnteriorMes, mes.entradas as entradasMes, mes.saidas as saidasMes";

            string sqlCaixaDiario = @"
                select " + camposCaixaDiario + @"
                from caixa_diario cd, (
                        select idConta, sum(entradas) as entradas, sum(saidas) as saidas
                        from (
                            select idConta, sum(valor) as entradas, 0 as saidas
                            from caixa_diario
                            where (idConta in ({1}) {2})
                                and tipoMov=1
                                and dataCad>=" + dataInicioMes + @"
                                and dataCad<=" + dataFimMes + @"
                                " + (detalhado ? "group by idConta" : "") + @"
                            
                            union select idConta, 0 as entradas, sum(valor) as saidas
                            from caixa_diario
                            where (idConta in ({3}) {4})
                                and tipoMov=2
                                and dataCad>=" + dataInicioMes + @"
                                and dataCad<=" + dataFimMes + @"
                                " + (detalhado ? "group by idConta" : "") + @"
                        ) as temp
                        " + (detalhado ? "group by idConta" : "") + @"
                    ) as mes
                where (cd.idConta in ({1},{3},{5}) {2} {4})
                    and cd.dataCad>=?dataIni
                    and cd.dataCad<=?dataFim
                    " + (detalhado ? "and cd.idConta=mes.idConta" : "") + @"
                    " + (detalhado ? "group by cd.idConta" : "");

            #endregion

            #region SQL para cheques

            string dataCompCheque = "coalesce((select dataCad from caixa_geral where idCheque=c1.idCheque and idConta in ({3}) limit 1), " +
                                    "(select dataCad from mov_banco where idCheque=c1.idCheque and idConta in ({4}) limit 1))";

            string camposCheques = !selecionar ? "count(*), null as idConta" :
                                   @"2 as tipoMov, '{0}' as nomeMov, null as idConta, (
                        select sum(valor)
                        from cheques c1
                        where situacao in ({1})
                            and tipo=2
                            and dataCad<?dataIni
                            and if(situacao={2}, " + dataCompCheque + @">?dataIni, true)
                    ) as saldoAnteriorDia, dia.entradas as entradasDia, dia.saidas as saidasDia, (
                        select sum(valor)
                        from cheques c1
                        where situacao in ({1})
                            and tipo=2
                            and dataCad<" + dataInicioMes + @"
                            and if(situacao={2}, " + dataCompCheque + @">?dataIni, true)
                    ) as saldoAnteriorMes, mes.entradas as entradasMes, mes.saidas as saidasMes";

            string sqlCheques = @"
                select " + camposCheques + @"
                from (
                    select sum(entradas) as entradas, sum(saidas) as saidas
                    from (
                        select sum(valor) as entradas, 0 as saidas
                        from cheques c1
                        where situacao in ({1})
                            and tipo=2
                            and dataCad>=?dataIni
                            and dataCad<=?dataFim
                            and if(situacao={2}, " + dataCompCheque + @">=date_add(date(dataCad), interval 1 day), true)
                        
                        union select 0 as entradas, sum(valor) as saidas
                        from cheques c1
                        where situacao in ({2})
                            and tipo=2
                            and dataCad>=?dataIni
                            and dataCad<=?dataFim
                            and " + dataCompCheque + @">=date_add(date(dataCad), interval 1 day)
                    ) as temp
                ) as dia, (
                        select sum(entradas) as entradas, sum(saidas) as saidas
                        from (
                            select sum(valor) as entradas, 0 as saidas
                            from cheques c1
                            where situacao in ({1})
                                and tipo=2
                                and dataCad>=" + dataInicioMes + @"
                                and dataCad<=" + dataFimMes + @"
                                and if(situacao={2}, " + dataCompCheque + @">=date_add(date(dataCad), interval 1 day), true)
                            
                            union select 0 as entradas, sum(valor) as saidas
                            from cheques c1
                            where situacao in ({2})
                                and tipo=2
                                and dataCad>=" + dataInicioMes + @"
                                and dataCad<=" + dataFimMes + @"
                                and " + dataCompCheque + @">=date_add(date(dataCad), interval 1 day)
                        ) as temp
                    ) as mes";

            string sqlChequesDevolvidos = @"
                select " + camposCheques + @"
                from (
                    select sum(entradas) as entradas, sum(saidas) as saidas
                    from (
                        select sum(valor) as entradas, 0 as saidas
                        from cheques c1
                        where situacao in ({1})
                            and tipo=2
                            and dataCad>=?dataIni
                            and dataCad<=?dataFim
                            and if(situacao={2}, " + dataCompCheque + @">=date_add(date(dataCad), interval 1 day), true)
                        
                        union select 0 as entradas, sum(valor) as saidas
                        from cheques c1
                        where situacao in ({2})
                            and tipo=2
                            and dataCad<=?dataFim
                            and " + dataCompCheque + @">=?dataIni
                    ) as temp
                ) as dia, (
                        select sum(entradas) as entradas, sum(saidas) as saidas
                        from (
                            select sum(valor) as entradas, 0 as saidas
                            from cheques c1
                            where situacao in ({1})
                                and tipo=2
                                and dataCad>=" + dataInicioMes + @"
                                and dataCad<=" + dataFimMes + @"
                                and if(situacao={2}, " + dataCompCheque + @">=date_add(date(dataCad), interval 1 day), true)
                            
                            union select 0 as entradas, sum(valor) as saidas
                            from cheques c1
                            where situacao in ({2})
                                and tipo=2
                                and dataCad>=" + dataInicioMes + @"
                                and dataCad<=" + dataFimMes + @"
                                and " + dataCompCheque + @">=date_add(date(dataCad), interval 1 day)
                        ) as temp
                    ) as mes";

            #endregion

            #region SQL para cartões

            var sqlCartoesSaldoAnterior = @"
                SELECT SUM(ValorVec) AS Entradas
                FROM contas_receber
                WHERE IsParcelaCartao = 1 AND Recebida = 0 AND IdConta IN ({1})";

            var camposCartoes = !selecionar ? "COUNT(*), cr.IdConta" :
                                string.Format(@"2 AS TipoMov, '{0}' AS NomeMov, cr.IdConta,
                    ({1}) AS SaldoAnteriorDia, SUM(IF(cr.Recebida = 0, cr.ValorVec, 0)) AS EntradasDia,
                    SUM(IF(cr.Recebida = 1, cr.ValorVec, 0)) AS SaidasDia,
                    ({1}) AS SaldoAnteriorMes, mes.Entradas AS EntradasMes, mes.Saidas AS SaidasMes",
                                              "{0}", sqlCartoesSaldoAnterior);

            var sqlCartoesEntradaSaida =
                string.Format(@"
                    SELECT SUM(ValorVec) AS Entradas, 0 AS Saidas
                    FROM contas_receber
                    WHERE IdConta IN ({0})
                        AND IsParcelaCartao = 1
                        AND DataCad >= {1}
                        AND DataCad <= {2}
                            
                    UNION SELECT 0 AS Entradas, SUM(ValorRec) AS Saidas
                    FROM contas_receber
                    WHERE IdConta IN ({0})
                        AND IsParcelaCartao = 1
                        AND Recebida = 1
                        AND DataRec >= {1}
                        AND DataRec <= {2}", "{1}", dataInicioMes, dataFimMes);

            var sqlCartoes = string.Format(@"
                SELECT {0}
                FROM contas_receber cr, (
                        SELECT SUM(Entradas) AS Entradas, SUM(Saidas) AS Saidas
                        FROM (
                            {2}
                        ) AS temp
                    ) AS mes
                WHERE cr.IdConta IN ({1})
                    AND cr.IsParcelaCartao = 1
                    AND cr.DataVec >= ?dataIni
                    AND cr.DataVec <= ?dataFim", camposCartoes, "{1}",
                                           dataIni == dataFim ? sqlCartoesSaldoAnterior.Replace("Entradas", "Entradas, 0 AS Saidas") : sqlCartoesEntradaSaida);

            #endregion

            #region Contas bancárias

            var    orderBySaldoBanco = "DATE_FORMAT(DataMov, '%Y-%m-%d %H%i') DESC, IdMovBanco DESC";
            string camposBanco       = !selecionar ? "count(*), m.idConta" :
                                       @"1 as tipoMov, c.nome as nomeMov, m.idConta, saldoAnteriorDia.saldo as saldoAnteriorDia, 
                    dia.entradas as entradasDia, dia.saidas as saidasDia, saldoAnteriorMes.saldo as saldoAnteriorMes, 
                    mes.entradas as entradasMes, mes.saidas as saidasMes";

            string sqlBanco = @"
                select " + camposBanco + @"
                from mov_banco m
                    inner join conta_banco c on (m.idContaBanco=c.idContaBanco)
                    inner join (
                        select idContaBanco, idConta, sum(saldo) as saldo
                        from (
                            select idContaBanco, idConta, saldo
                            from (
                                select idContaBanco, idConta, saldo
                                from mov_banco 
                                where dataMov<?dataIni
                                order by " + orderBySaldoBanco + @"
                            ) as temp1
                            group by idContaBanco" + (detalhado ? ", idConta" : "") + @"
                            
                            union all select idContaBanco, null as idConta, 0 as saldo
                            from conta_banco
                        ) as temp
                        group by idContaBanco" + (detalhado ? ", idConta" : "") + @"
                    ) as saldoAnteriorDia on (saldoAnteriorDia.idContaBanco=m.idContaBanco" + (detalhado ? " and saldoAnteriorDia.idConta=m.idConta" : "") + @")
                    inner join (
                        select idContaBanco, idConta, sum(saldo) as saldo
                        from (
                            select idContaBanco, idConta, saldo
                            from (
                                select idContaBanco, idConta, saldo
                                from mov_banco
                                where dataMov<" + dataInicioMes + @"
                                order by " + orderBySaldoBanco + @"
                            ) as temp1
                            group by idContaBanco" + (detalhado ? ", idConta" : "") + @"

                            union all select idContaBanco, null as idConta, 0 as saldo
                            from conta_banco
                        ) as temp
                        group by idContaBanco" + (detalhado ? ", idConta" : "") + @"
                    ) as saldoAnteriorMes on (saldoAnteriorMes.idContaBanco=m.idContaBanco" + (detalhado ? " and saldoAnteriorMes.idConta=m.idConta" : "") + @")
                    inner join (
                        select idContaBanco, idConta, sum(entradas) as entradas, sum(saidas) as saidas
                        from (
                            select idContaBanco, idConta, sum(if(tipoMov=1, valorMov, 0)) as entradas, sum(if(tipoMov=1, 0, valorMov)) as saidas
                            from mov_banco
                            where dataMov>=?dataIni 
                                and dataMov<=?dataFim
                            group by idContaBanco" + (detalhado ? ", idConta" : "") + @"
                            
                            union all select idContaBanco, null as idConta, 0 as entradas, 0 as saidas
                            from conta_banco
                        ) as temp
                        group by idContaBanco" + (detalhado ? ", idConta" : "") + @"
                    ) as dia on (m.idContaBanco=dia.idContaBanco" + (detalhado ? " and m.idConta=dia.idConta" : "") + @")
                    inner join (
                        select idContaBanco, idConta, sum(entradas) as entradas, sum(saidas) as saidas
                        from (
                            select idContaBanco, idConta, sum(if(tipoMov=1, valorMov, 0)) as entradas, sum(if(tipoMov=1, 0, valorMov)) as saidas
                            from mov_banco
                            where dataMov>=" + dataInicioMes + @"
                                and dataMov<=" + dataFimMes + @"
                            group by idContaBanco" + (detalhado ? ", idConta" : "") + @"
                            
                            union all select idContaBanco, null as idConta, 0 as entradas, 0 as saidas
                            from conta_banco
                        ) as temp
                        group by idContaBanco" + (detalhado ? ", idConta" : "") + @"
                    ) as mes on (m.idContaBanco=mes.idContaBanco" + (detalhado ? " and m.idConta=mes.idConta" : "") + @")
                where m.idContaBanco in (select idContaBanco from conta_banco where situacao=" + (int)Glass.Situacao.Ativo + @")
                group by m.idContaBanco" + (detalhado ? ", m.idConta" : "");

            #endregion

            #region Caixa (dinheiro)

            string sqlCaixa = String.Format(sqlCaixaGeral, "Caixa (dinheiro)", planosContaDinheiroEntrada, "or formaSaida=" + (int)Glass.Data.Model.Pagto.FormaPagto.Dinheiro,
                                            planosContaDinheiroSaida, "or formaSaida=" + (int)Glass.Data.Model.Pagto.FormaPagto.Dinheiro, planosContaDinheiroEstorno);

            #endregion

            #region Cheque devolvido

            string sqlChequeDevolvido = String.Format(sqlChequesDevolvidos, "Cheque Devolvido", (int)Cheques.SituacaoCheque.Devolvido + "," + (int)Cheques.SituacaoCheque.Quitado,
                                                      (int)Cheques.SituacaoCheque.Quitado, planosContaChequeEntrada, planosContaChequeSaida);

            #endregion

            #region Nota promissória

            string camposNotaPromissoria = !selecionar ? "count(*), dia.idConta" :
                                           @"2 as tipoMov, 'Nota Promis.' as nomeMov, dia.idConta, (
                        select sum(valorVec)
                        from contas_receber
                        where (isParcelaCartao=false or isParcelaCartao is null)
                            and dataCad<?dataIni
                            and (
                                (recebida=false or recebida is null)
                                or (dataRec is null or dataRec>=?dataIni)
                            )
                            and (renegociada=false or renegociada is null)
                            " + (detalhado ? "and idConta=dia.idConta" : "") + @"
                    ) as saldoAnteriorDia, dia.entradas as entradasDia, dia.saidas as saidasDia, (
                        select sum(valorVec)
                        from contas_receber
                        where (isParcelaCartao=false or isParcelaCartao is null)
                            and dataCad<" + dataInicioMes + @"
                            and (
                                (recebida=false or recebida is null)
                                or (dataRec is null or dataRec>=" + dataInicioMes + @")
                            )
                            and (renegociada=false or renegociada is null)
                            " + (detalhado ? "and idConta=mes.idConta" : "") + @"
                    ) as saldoAnteriorMes, mes.entradas as entradasMes, mes.saidas as saidasMes";

            string sqlNotaPromissoria = @"
                select " + camposNotaPromissoria + @"
                from (
                    select idConta, sum(entradas) as entradas, sum(saidas) as saidas
                    from (
                        select idConta, sum(valorVec-if(dataRec>=date_add(date(dataCad), interval 1 day), 0, valorRec)) as entradas, 0 as saidas
                        from contas_receber
                        where (isParcelaCartao=false or isParcelaCartao is null)
                            and dataCad>=?dataIni
                            and dataCad<=?dataFim
                            and (
                                (recebida=false or recebida is null)
                                or (dataRec is null or dataRec>=date_add(date(dataCad), interval 1 day))
                            )
                            and (renegociada=false or renegociada is null)
                        " + (detalhado ? "group by idConta" : "") + @"
                        
                        /* 
                            Ao calcular o valor da saída, se o valorRec for 0, dá saída no valorVec, isso porque a conta foi renegociada 
                            para outra data, logo, ela deve dar saída no valorVec, para que ao dar entrada no valor restante gerado em outra 
                            conta a receber, não fique duplicado e para acertar o saldo anterior e atual, ao tirar este relatório dois dias seguidos
                        */
                        union all select idConta, 0 as entradas, sum(if(valorRec = 0 Or valorRec>(valorVec+coalesce(juros,0)), valorVec, valorRec-coalesce(juros,0))) as saidas
                        from contas_receber
                        where (isParcelaCartao=false or isParcelaCartao is null)
                            and recebida=true
                            and dataRec>=?dataIni
                            and dataRec<=?dataFim
                            and dataCad<date(dataRec)
                        " + (detalhado ? "group by idConta" : "") + @"
                    ) as temp
                    " + (detalhado ? "group by idConta" : "") + @"
                ) as dia, (
                        select idConta, sum(entradas) as entradas, sum(saidas) as saidas
                        from (
                            select idConta, sum(valorVec-if(dataRec>=date_add(date(dataCad), interval 1 day), 0, valorRec)) as entradas, 0 as saidas
                            from contas_receber
                            where (isParcelaCartao=false or isParcelaCartao is null)
                                and dataCad>=" + dataInicioMes + @"
                                and dataCad<=" + dataFimMes + @"
                                and (
                                    (recebida=false or recebida is null)
                                    or (dataRec is null or dataRec>=date_add(date(dataCad), interval 1 day))
                                )
                                and (renegociada=false or renegociada is null)
                            " + (detalhado ? "group by idConta" : "") + @"
                            
                            /* 
                                Ao calcular o valor da saída, se o valorRec for 0, dá saída no valorVec, isso porque a conta foi renegociada 
                                para outra data, logo, ela deve dar saída no valorVec, para que ao dar entrada no valor restante gerado em outra 
                                conta a receber, não fique duplicado e para acertar o saldo anterior e atual, ao tirar este relatório dois dias seguidos
                            */
                            union all select idConta, 0 as entradas, sum(if(valorRec=0 Or valorRec>(valorVec+coalesce(juros,0)), valorVec, valorRec-coalesce(juros,0))) as saidas
                            from contas_receber
                            where (isParcelaCartao=false or isParcelaCartao is null)
                                and recebida=true
                                and dataRec>=" + dataInicioMes + @"
                                and dataRec<=" + dataFimMes + @"
                                and dataCad<date(dataRec)
                            " + (detalhado ? "group by idConta" : "") + @"
                        ) as temp
                        " + (detalhado ? "group by idConta" : "") + @"
                    ) as mes
                where 1
                    " + (detalhado ? "and dia.idConta=mes.idConta" : "") + @"
                " + (detalhado ? "group by dia.idConta" : "");

            #endregion

            #region Cheque

            string sqlCheque = String.Format(sqlCheques, "Carteira de Cheque", (int)Cheques.SituacaoCheque.EmAberto + "," + (int)Cheques.SituacaoCheque.Compensado,
                                             (int)Cheques.SituacaoCheque.Compensado, planosContaChequeEntrada, planosContaChequeSaida);

            #endregion

            #region Cartão

            var lstSqlsCartoes = new List <string>();

            foreach (var item in lstPlanosContaCartao)
            {
                var descricao = TipoCartaoCreditoDAO.Instance.ObterDescricao(null, (int)item.Key);
                lstSqlsCartoes.Add(string.Format(sqlCartoes, descricao, item.Value));
            }

            #endregion

            #region Construcard

            var sqlConstrucard = string.Format(sqlCaixaGeral, "Construcard Cx. Geral", planosContaConstrucardEntrada, "",
                                               planosContaConstrucardSaida, "", planosContaConstrucardEstorno);

            var sqlConstrucardCxDiario = string.Format(sqlCaixaDiario, "Construcard Cx. Diário", planosContaConstrucardEntrada, "",
                                                       planosContaConstrucardSaida, "", planosContaConstrucardEstorno);

            #endregion

            string criterio = "";
            if (!String.IsNullOrEmpty(dataIni) && !String.IsNullOrEmpty(dataFim) && dataIni == dataFim)
            {
                criterio = "Data: " + dataIni + "    ";
            }
            else if (!String.IsNullOrEmpty(dataIni) || !String.IsNullOrEmpty(dataFim))
            {
                if (!String.IsNullOrEmpty(dataIni))
                {
                    criterio += "Data de início: " + dataIni + "    ";
                }

                if (!String.IsNullOrEmpty(dataFim))
                {
                    criterio += "Data de término: " + dataFim + "    ";
                }
            }

            if (detalhado)
            {
                criterio += "Relatório detalhado    ";
            }

            string campos = !selecionar ? "coalesce(count(*), 0)" :
                            @"cast(tipoMov as signed) as tipoMov, nomeMov, movimentacoes_financeiras.idConta, cast(saldoAnteriorDia as decimal(12,2)) as saldoAnteriorDia, 
                    cast(entradasDia as decimal(12,2)) as entradasDia, cast(saidasDia as decimal(12,2)) as saidasDia, cast(saldoAnteriorMes as decimal(12,2)) as saldoAnteriorMes, 
                    cast(entradasMes as decimal(12,2)) as entradasMes, cast(saidasMes as decimal(12,2)) as saidasMes, '$$$' as criterio, p.descricao as descrPlanoConta,
                    g.idGrupo as idGrupoConta, g.descricao as descrGrupoConta, c.idCategoriaConta, c.descricao as descrCategoriaConta";

            string sql = @"
                select " + campos + @"
                from (
                    " + sqlBanco + @"
                    union all " + sqlCaixa + @"
                    union all " + sqlChequeDevolvido + @"
                    union all " + sqlNotaPromissoria + @"
                    union all " + sqlCheque;

            foreach (var s in lstSqlsCartoes)
            {
                sql += " UNION ALL " + s;
            }

            sql += " union all " + sqlConstrucard + @"
                    union all " + sqlConstrucardCxDiario + @"
                ) as movimentacoes_financeiras
                    left join plano_contas p on (movimentacoes_financeiras.idConta=p.idConta)
                    left join grupo_conta g on (p.idGrupo=g.idGrupo)
                    left join categoria_conta c on (g.idCategoriaConta=c.idCategoriaConta)";

            sql = sql.Replace("$$$", criterio);
            return(sql);
        }
示例#30
0
        internal string Sql(string data, uint idLoja)
        {
            var sqlChequesAVista =
                "Select Sum(valor) From cheques Where date(IFNULL(dataVenc,dataCad))<=date(dataCad) and dataCad>=?dataIni and dataCad<=?dataFim and situacao<>" +
                (int)Cheques.SituacaoCheque.Cancelado + " And tipo=2";

            var sqlChequesAPrazo =
                "Select Sum(valor) From cheques Where date(dataVenc)>date(dataCad) and dataCad>=?dataIni and dataCad<=?dataFim and situacao<>" +
                (int)Cheques.SituacaoCheque.Cancelado + " And tipo=2";

            if (idLoja > 0)
            {
                sqlChequesAVista += " And idLoja=" + idLoja;
                sqlChequesAPrazo += " And idLoja=" + idLoja;
            }

            var sqlDinheiro                     = SqlBase(UtilsPlanoConta.ResumoDiarioContasDinheiro(), idLoja, "", "", "", "", "", "", false);
            var sqlCartaoDebito                 = SqlBase(UtilsPlanoConta.ResumoDiarioContasCartao(true), idLoja, "", "", "", "", "", "", false);
            var sqlCartaoCredito                = SqlBase(UtilsPlanoConta.ResumoDiarioContasCartao(false), idLoja, "", "", "", "", "", "", false);
            var sqlCredito                      = SqlBase(UtilsPlanoConta.ResumoDiarioContasCredito(), idLoja, "", "", "", "", "", "", false);
            var sqlCreditoGerado                = SqlBase(UtilsPlanoConta.ResumoDiarioContasCreditoGerado(), idLoja, "", "", "", "", "", "", false);
            var sqlTroca                        = SqlBase(UtilsPlanoConta.ResumoDiarioContasTroca(), idLoja, "", "", "", "", "", "", false);
            var sqlPagtoChequeDevolvido         = SqlBase(UtilsPlanoConta.ResumoDiarioContasPagtoChequeDevolvido(), idLoja, "", "", "", "", "", "", true);
            var sqlPagtoChequeDevolvidoDinheiro = SqlBase(UtilsPlanoConta.ResumoDiarioContasPagtoChequeDevolvidoDinheiro(), idLoja, "", "", "", "", "", "", true);
            var sqlPagtoChequeDevolvidoCheque   = SqlBase(UtilsPlanoConta.ResumoDiarioContasPagtoChequeDevolvidoCheque(), idLoja, "", "", "", "", "", "", true);
            var sqlPagtoChequeDevolvidoOutros   = SqlBase(UtilsPlanoConta.ResumoDiarioContasPagtoChequeDevolvidoOutros(), idLoja, "", "", "", "", "", "", true);
            var sqlBoleto                       = SqlBase(UtilsPlanoConta.ResumoDiarioContasBoleto(), idLoja, "", "", "", "", "", "", false);
            var sqlConstrucard                  = SqlBase(UtilsPlanoConta.ResumoDiarioContasConstrucard(), idLoja, "", "", "", "", "", "", false);
            var sqlNotaPromissoria              = string.Format(@"
                Select Sum(valorVec)
                From contas_receber 
                Where (isParcelaCartao=false or isParcelaCartao is null)
                    AND IdConta NOT IN ({0})
                    and dataCad>=?dataIni 
                    and dataCad<=?dataFim
                    and dataRec>?dataFim", UtilsPlanoConta.ResumoDiarioContasConstrucard());

            var sqlPagtoNotaPromissoria = string.Format(@"
                Select Sum(valorRec)
                From contas_receber 
                Where recebida=true
                    AND IdConta NOT IN ({0})
                    and (isParcelaCartao=false or isParcelaCartao is null)
                    and dataRec>=?dataIni 
                    and dataRec<=?dataFim", UtilsPlanoConta.ResumoDiarioContasConstrucard());

            if (idLoja > 0)
            {
                if (PedidoConfig.LiberarPedido)
                {
                    sqlNotaPromissoria += @" And idLiberarPedido In (Select idLiberarPedido From produtos_liberar_pedido Where idPedido In 
                        (Select p.idPedido From pedido p Where p.idLoja=" + idLoja + "))";

                    sqlPagtoNotaPromissoria += @" And idLiberarPedido In (Select idLiberarPedido From produtos_liberar_pedido Where idPedido In 
                        (Select p.idPedido From pedido p Where p.idLoja=" + idLoja + "))";
                }
                else
                {
                    sqlNotaPromissoria      += " And idPedido in (Select p.idPedido From pedido p Where p.IdLoja=" + idLoja + ")";
                    sqlPagtoNotaPromissoria += " And idPedido in (Select p.idPedido From pedido p Where p.IdLoja=" + idLoja + ")";
                }
            }

            var sqlDeposito = SqlBase(UtilsPlanoConta.ResumoDiarioContasDeposito(), idLoja, "", "", "", "", "", "", false);

            var sql = "select cast((" + sqlChequesAVista + ") as decimal(12,2)) as ChequeVista, " +
                      "cast((" + sqlChequesAPrazo + ") as decimal(12,2)) as ChequePrazo, " +
                      "cast((" + sqlDinheiro + ") as decimal(12,2)) as Dinheiro, " +
                      "cast((" + sqlCartaoDebito + ") as decimal(12,2)) as CartaoDebito, " +
                      "cast((" + sqlCartaoCredito + ") as decimal(12,2)) as CartaoCredito, " +
                      "cast((" + sqlCredito + ") as decimal(12,2)) as Credito, " +
                      "cast((" + sqlCreditoGerado + ") as decimal(12,2)) as CreditoGerado, " +
                      "cast((" + sqlTroca + ") as decimal(12,2)) as Troca, " +
                      "cast((" + sqlPagtoChequeDevolvido + ") as decimal(12,2)) as PagtoChequeDevolvido, " +
                      "cast((" + sqlPagtoChequeDevolvidoDinheiro + ") as decimal(12,2)) as PagtoChequeDevolvidoDinheiro, " +
                      "cast((" + sqlPagtoChequeDevolvidoCheque + ") as decimal(12,2)) as PagtoChequeDevolvidoCheque, " +
                      "cast((" + sqlPagtoChequeDevolvidoOutros + ") as decimal(12,2)) as PagtoChequeDevolvidoOutros, " +
                      "cast((" + sqlBoleto + ") as decimal(12,2)) as Boleto, " +
                      "CAST((" + sqlConstrucard + ") AS DECIMAL(12,2)) AS Construcard, " +
                      "cast((" + sqlNotaPromissoria + ") as decimal(12,2)) as NotaPromissoria, " +
                      "cast((" + sqlPagtoNotaPromissoria + ") as decimal(12,2)) as PagtoNotaPromissoria, " +
                      "cast((" + sqlDeposito + ") as decimal(12,2)) as Deposito";

            return(sql);
        }