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); }
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')); }
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)); } }
//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"); }
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)); } } }
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); }
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()); }
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)"); }
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)); }
//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)); }
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); }
//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()); }
//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); }
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); }
//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()); }
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")); }
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); }
/// <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()); }
/// <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); }
/// <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)); } }
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; }
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; } } } }
//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()); }
/// <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(); } } }
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; } } } }
/// <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)); }
/// <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); } } }
/// <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); }
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); }