/// <summary> /// Atualiza uma ContaCaixa no Banco de Dados /// </summary> /// <param name="contaCaixa">Obj ContaCaixa</param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Atualizar(ContaCaixa contaCaixa) { var bd = new Persistencia(); try { bd.Cmd.CommandText = @"UPDATE contasCaixa SET descricao = @descricao, banco_id = @banco, agencia = @agencia, cc = @cc WHERE id = @id"; bd.Cmd.Parameters.AddWithValue("@id", contaCaixa.Id); bd.Cmd.Parameters.AddWithValue("@descricao", contaCaixa.Descricao); bd.Cmd.Parameters.AddWithValue("@banco", contaCaixa.Banco.Id == 0 ? (object)DBNull.Value : contaCaixa.Banco.Id); bd.Cmd.Parameters.AddWithValue("@agencia", contaCaixa.Agencia == "" ? (object)DBNull.Value : contaCaixa.Agencia); bd.Cmd.Parameters.AddWithValue("@cc", contaCaixa.ContaNum == "" ? (object)DBNull.Value : contaCaixa.ContaNum); if (!(bd.ExecuteNonQuery() > 0)) { return false; } } catch (Exception) { return false; } return true; }
public Cheque(bool credito, decimal valor, ContaCaixa contaCaixa, string numero, string emitente, DateTime emissao, string ag, string cc, Banco banco) : base(credito,valor,contaCaixa) { _numero = numero; _emitente = emitente; _emissao = emissao; _ag = ag; _cc = cc; _banco = banco; }
/// <summary> /// Atualiza o saldo da conta de caixa /// </summary> /// <param name="contaCaixa">conta a ser atualiza com saldo atualizado</param> /// <param name="bd">conexao com banco</param> /// <returns>verdadeiro se tudo ok</returns> public bool AtualizarSaldo(ContaCaixa contaCaixa, Persistencia bd) { bd.Cmd.Parameters.Clear(); try { bd.Cmd.CommandText = @"update contasCaixa set saldo = @saldo where id = @caixaid"; bd.Cmd.Parameters.AddWithValue("@caixaid", contaCaixa.Id); bd.Cmd.Parameters.AddWithValue("@saldo", contaCaixa.Saldo); } catch (Exception) { return false; } return true; }
/// <summary> /// Grava uma Conta de Caixa inserindo ou atualizando 14/04/2014 /// </summary> /// <param name="conta">objeto conta de caixa</param> /// <param name="notificacoes">mensagens de retorno </param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Gravar(ContaCaixa conta, out List<Notificacao> notificacoes) { bool cadastro = conta.Id == 0;//para informar se notificacoes = ValidaCampos(conta); if (notificacoes.Count > 0)//este ponto identifica erros de validacao return false; if (!(cadastro ? new ContaCaixaBD().Inserir(conta) : new ContaCaixaBD().Atualizar(conta))) { notificacoes.Add(new Notificacao("Erro de banco de dados, notifique o administrador", 'e')); return false; } notificacoes.Add(cadastro ? new Notificacao("Conta Caixa cadastrada com Sucesso", 's') : new Notificacao("Conta Caixa atualizada com Sucesso", 's')); return true; }
/// <summary> /// Exclui uma Conta de Caixa do banco de dados /// </summary> /// <param name="conta">Objeto conta de caixa</param> /// <param name="notificacao">Informativo sobre a operacao </param> /// <returns>verdadeiro em caso de exclusao com sucesso</returns> public bool Excluir(ContaCaixa conta, out Notificacao notificacao) { if (conta.Id <= 0) { notificacao = new Notificacao("Não foi possivel identificar o codigo do contato a ser excluido", 'e'); return false; } if(conta.Saldo !=0) { notificacao = new Notificacao("A conta não pode ser excluida, o saldo deve ser igual a Zero para realizar esta operação", 'e'); return false; } if (new ContaCaixaBD().Excluir(conta)) { notificacao = new Notificacao("Conta de Caixa excluida com sucesso", 's'); return true; } notificacao = new Notificacao("Não foi possivel excluir a Conta de Caixa informada, tente novamente, se o erro persistir contate o adminsitrador", 'e'); return false; }
//usado para lançar movimentacao necessario somente Id da contaCaixa; public MovimentoCaixa(bool credito, decimal valor, ContaCaixa contaCaixa) { _credito = credito; _valor = valor; _contaCaixa = contaCaixa; }
/// <summary> /// Lista as movimentações de caixa no periodo selecionado ! /// </summary> private bool ListarMovimentosCaixa() { Notificacao notificacao; bool listou; DateTime dti; DateTime dtf; DateTime.TryParse(dtInicial.Value, out dti); DateTime.TryParse(dtFinal.Value, out dtf); //informa a data inicial e final para filtrar as movimentações var conta = new ContaCaixa(Convert.ToInt32(contaId.Value), dti, dtf); if (new MovimentoCaixaCtrl().RecuperarMovimentacoes(conta, out notificacao)) { listou = true; #region Caso Recupere os movimentos da conta if (!ContaView.Visible) { lblContaDescricao.Text = "Conta: " + conta.Descricao; lblAgNumero.Text = conta.Agencia.Length > 0 ? "AG: " + conta.Agencia : "AG: N/A"; lblContaNumero.Text = conta.ContaNum.Length > 0 ? "C/C: " + conta.ContaNum : "C/C: N/A"; lblBancoConta.Text = conta.Banco.Descricao.Length > 0 ? "Banco: " + conta.Banco.Descricao : "Banco: N/A"; ContaView.Visible = true; ContaSelect.Visible = false; TextoPeriodoFiltro(); } lblSaldoConta.Text = "Saldo Atual: " + conta.Saldo; if (conta.Movimentacoes.Count == 0) notificacoes.Add(notificacao); //só gera relatório se houver lançamentos para imprimir =) btnRelatorio.Visible = conta.Movimentacoes.Count > 0; if (conta.Movimentacoes.Count > 0) { decimal tcredito = 0;//total de creditos no periodo decimal tdebido = 0;//total de debitos no periodo foreach (MovimentoCaixa mov in conta.Movimentacoes) { if (mov.Credito) { tcredito += mov.Valor; } else { tdebido += mov.Valor; } } totalCredito.Value = tcredito.ToString(); totalDebito.Value = "-" + tdebido.ToString(); } rpLancamentos.Visible = conta.Movimentacoes.Count > 0; rpLancamentos.DataSource = conta.Movimentacoes; rpLancamentos.DataBind(); #endregion } else { listou = false; notificacoes.Add(notificacao); } ListarNotificacoes(); return listou; }
/// <summary> /// Recupera uma ContaCaixa no Banco de Dados /// </summary> /// <param name="contaCaixa">Obj categoria com Descricao</param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Recuperar(ContaCaixa contaCaixa) { var bd = new Persistencia(); try { bd.Cmd.CommandText = @"select descricao, data, saldo, banco_id, agencia, cc from contasCaixa where id = @id"; bd.Cmd.Parameters.AddWithValue("@id", contaCaixa.Id); DataTable dadosBd = bd.ExecuteReader(); contaCaixa.Descricao = dadosBd.Rows[0]["descricao"].ToString(); DateTime dataCriacao; DateTime.TryParse(dadosBd.Rows[0]["data"].ToString(), out dataCriacao); contaCaixa.DataCriacao = dataCriacao; contaCaixa.Agencia = dadosBd.Rows[0]["agencia"].ToString(); contaCaixa.ContaNum = dadosBd.Rows[0]["cc"].ToString(); contaCaixa.Saldo = Convert.ToDecimal(dadosBd.Rows[0]["saldo"].ToString()); if (dadosBd.Rows[0]["banco_id"].ToString() != "") { var banco = new Banco(Convert.ToInt32(dadosBd.Rows[0]["banco_id"])); contaCaixa.Banco = banco; } } catch { return false; } return true; }
/// <summary> /// Insere uma ContaCaixa no Banco de dados /// </summary> /// <param name="contaCaixa">Obj ContaCaixa</param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Inserir(ContaCaixa contaCaixa) { var bd = new Persistencia(); try { bd.Cmd.CommandText = @"INSERT INTO `contasCaixa` (`descricao`, `data`, `banco_id`, `agencia`, `cc`) VALUES (@descricao, @data, @banco, @agencia, @cc); SELECT LAST_INSERT_ID()"; bd.Cmd.Parameters.AddWithValue("@descricao", contaCaixa.Descricao); bd.Cmd.Parameters.AddWithValue("@data", DateTime.Now);//data de abertura bd.Cmd.Parameters.AddWithValue("@banco", contaCaixa.Banco.Id == 0 ? (object)DBNull.Value : contaCaixa.Banco.Id); bd.Cmd.Parameters.AddWithValue("@agencia", contaCaixa.Agencia == "" ? (object)DBNull.Value : contaCaixa.Agencia); bd.Cmd.Parameters.AddWithValue("@cc", contaCaixa.ContaNum == "" ? (object)DBNull.Value : contaCaixa.ContaNum); contaCaixa.Id = Convert.ToInt32(bd.ExecuteScalar()); } catch (Exception) { return false; } return true; }
/// <summary> /// Exclui fisica/logicamente uma ContaCaixa no Banco de Dados /// </summary> /// <param name="contaCaixa">Obj ContaCaixa</param> /// <returns>verdadeiro em caso de sucesso</returns> public bool Excluir(ContaCaixa contaCaixa) { var bd = new Persistencia(); try { bd.Cmd.CommandText = @"delete from contasCaixa where id = @id"; bd.Cmd.Parameters.AddWithValue("@id", contaCaixa.Id); bd.ExecuteNonQuery(); } catch (Exception) { //se nao excluir faz exclusao logica try { bd.Cmd.Parameters.Clear(); bd.Cmd.CommandText = @"UPDATE contasCaixa SET excluida = @value WHERE id = @id"; bd.Cmd.Parameters.AddWithValue("@value", 1); bd.ExecuteNonQuery(); } catch (Exception) { return false; } } //se excluiu ou desativou =sucesso return true; }
/// <summary> /// Recupera lista de movimentações da conta no banco de dados! /// </summary> /// <param name="contaCaixa">Conta de Caixa </param> /// <param name="notificacao">mensagem de erro ou sucesso</param> /// <returns></returns> public bool RecuperarMovimentacoes(ContaCaixa contaCaixa, out Notificacao notificacao) { if (contaCaixa.DataInicial > contaCaixa.DataFinal || contaCaixa.DataInicial.ToShortDateString() == "01/01/0001" || contaCaixa.DataFinal.ToShortDateString() == "01/01/0001") { notificacao = new Notificacao("<p>Periodo informado é invalido!<p/> <p>Certifique-se que as datas estão corretas, a data inicial não pode ser maior que a data final<p/>", 'e'); return false; } if (!new ContaCaixaCtrl().Recuperar(contaCaixa, out notificacao)) { return false; } if (!new MovimentoCaixaBD().RecuperarMovimentos(contaCaixa)) { notificacao = new Notificacao("Não foi possivel recuperar as movimentações<br/>Problema com Banco de Dados, notifique o administrador", 'e'); return false; } notificacao = contaCaixa.Movimentacoes.Count <= 0 ? new Notificacao("Não há lançamentos no periodo informado.", 'i') : new Notificacao("Lançamentos recuperados com Sucesso", 'e'); return true; }
protected void BtnOpcoes(object sender, CommandEventArgs e) { switch (e.CommandName) { case "gravar"://ok 14/04 { var conta = new ContaCaixa(Convert.ToInt32(contaId.Value), ttbDescricao.Text, ttbAgencia.Text, ttbConta.Text, new Banco(Convert.ToInt32(bancoId.Value), ttbBanco.Text)); bool gravou = new ContaCaixaCtrl().Gravar(conta, out notificacoes); if (gravou) { LimparCampos(); ListarContas(); } else {//só lista notificacoes sem atualizar o repeater ((Sistema)Master).ExibirNotificacoes(notificacoes); } } break; case "cancelar"://ok 14/04 { LimparCampos(); ListarContas(); } break; case "remover"://ok 14/04 { Notificacao notificacao; var conta = new ContaCaixa(Convert.ToInt32(contaId.Value)); if (!new ContaCaixaCtrl().Recuperar(conta, out notificacao)) { notificacoes.Add(new Notificacao("Não foi possivel identificar o saldo da conta, tente novamente, se o erro persistir, informe o administrador do sistema", 'e')); ((Sistema)Master).ExibirNotificacoes(notificacoes); } else { bool excluiu = new ContaCaixaCtrl().Excluir(conta, out notificacao); notificacoes.Add(notificacao); if (excluiu) { LimparCampos();//zera id e limpa caso o amado usuário tenha solicitado edicao antes de excluir a categoria... ListarContas(); } else ((Sistema)Master).ExibirNotificacoes(notificacoes); } } break; case "editar"://ok 14/04 { Notificacao notificacao; var conta = new ContaCaixa(Convert.ToInt32(e.CommandArgument)); if (new ContaCaixaCtrl().Recuperar(conta, out notificacao)) { btnCancelar.Visible = true; contaId.Value = conta.Id.ToString();//salva a id em edicao ttbDescricao.Text = conta.Descricao; ttbAgencia.Text = conta.Agencia; ttbConta.Text = conta.ContaNum; bancoId.Value = conta.Banco.Id.ToString(); ttbBanco.Text = conta.Banco.Descricao; } else {//informa o erro notificacoes.Add(notificacao); } ListarContas(); } break; } }
//usado para estornar movimentacao necessario somente Id da contaCaixa id do movimento e justificativa do estorno; public MovimentoCaixa(int id, ContaCaixa contaCaixa, string estorno) { _id = id; _contaCaixa = contaCaixa; _estorno = estorno; }
/// <summary> /// Recupera do banco de dados as movimentacoes de uma conta de caixa em um determinado periodo /// </summary> /// <param name="contaCaixa">Conta de Caixa</param> /// <returns></returns> public bool RecuperarMovimentos(ContaCaixa contaCaixa) { _bd = new Persistencia(); contaCaixa.Movimentacoes = new List<MovimentoCaixa>();//limpa lista try { _bd.Cmd.CommandText = @"select mc.id, mc.credito, mc.data, mc.valor, mc.quitacao_id, mc.estorno, ((select coalesce(sum(cr.valor),0) from movimentosCaixa cr where (cr.data<=mc.data AND cr.credito = 1 and cr.caixa_id = mc.caixa_id)) - (select coalesce(sum(de.valor),0) from movimentosCaixa de where (de.data<=mc.data AND de.credito = 0 and de.caixa_id = mc.caixa_id))) as saldo from movimentosCaixa mc where mc.data between @dataI AND @dataF and mc.caixa_id = @caixa_id ORDER BY mc.data asc "; _bd.Cmd.Parameters.AddWithValue("@caixa_id", contaCaixa.Id); _bd.Cmd.Parameters.AddWithValue("@dataI", contaCaixa.DataInicial); _bd.Cmd.Parameters.AddWithValue("@dataF", contaCaixa.DataFinal); DataTable listaMovimentos = _bd.ExecuteReader(); foreach (DataRow movimento in listaMovimentos.Rows) { var mov = new MovimentoCaixa( Convert.ToInt32(movimento["id"].ToString()), Convert.ToBoolean(movimento["credito"].ToString()), Convert.ToDateTime(movimento["data"].ToString()), Convert.ToDecimal(movimento["valor"].ToString()), movimento["estorno"].ToString(), //justificativa do estorno! new Quitacao(string.IsNullOrEmpty(movimento["quitacao_id"].ToString())? 0 : Convert.ToInt32(movimento["quitacao_id"])),//se nao tiver vinculo informa zero "0" Convert.ToDecimal(movimento["saldo"].ToString()) ); contaCaixa.Movimentacoes.Add(mov); } } catch (Exception) { contaCaixa.Movimentacoes = new List<MovimentoCaixa>();//limpa lista return false; } return true; }
/// <summary> /// Checa se a descrição ja existe evitando duplicidade de conta! /// </summary> /// <param name="conta">conta a ser gravada!</param> /// <returns></returns> private bool CausaDuplicidade(ContaCaixa conta) { var lista = BuscaDescricao(conta.Descricao); if (lista.Count > 0) if (lista[0].Descricao == conta.Descricao && lista[0].Id != conta.Id)//causa duplicidade return true; //se a id for a mesma significa que é update, ou seja a descricao será igual e pode ser aceita, //agora se a id for diferente e a descrição for igual deve se considerar duplicado! return false; }
/// <summary> /// traz uma lista de erros das validacoes do campos informados 14/04/2014 /// </summary> /// <param name="conta">Obj conta Caixa</param> /// <returns>Lista de Erros</returns> public List<Notificacao> ValidaCampos(ContaCaixa conta) { var list = new List<Notificacao>(); if (conta.Descricao.Length < 3) list.Add(new Notificacao("A descrição deve conter pelo menos 3 caracteres", 'e')); if (CausaDuplicidade(conta)) list.Add(new Notificacao("A descrição informada já existe, por favor escolha uma diferete", 'e')); if (conta.Banco.Descricao.Length > 0) if (conta.Banco.Id <= 0 || conta.Banco.Id > 103) list.Add(new Notificacao("Banco informado é inválido, selecione na lista se necessário! caso ela não apareça notifique o Administrador", 'e')); return list; }
/// <summary> /// recupera um Conta de Caixa do banco de dados 14/04/2014 /// </summary> /// <param name="conta">objeto conta de caixa com id desejada</param> /// <param name="notificacao"> </param> /// <returns>Dados do contato do banco de dados</returns> public bool Recuperar(ContaCaixa conta, out Notificacao notificacao) { if (conta.Id <= 0) { notificacao = new Notificacao("Conta informada é inválida", 'e'); return false; } if (!new ContaCaixaBD().Recuperar(conta)) { notificacao = new Notificacao("Problema com Banco de Dados, notifique o administrador", 'e'); return false; } if (conta.Banco != null) new BancoCtrl().Recuperar(conta.Banco, out notificacao);//recupera o banco else { conta.Banco = new Banco(0, ""); } notificacao = new Notificacao("Conta de Caixa recuperada com sucesso", 's'); return true; }
//Opcoes de Lancamento protected void BtnOpcoes(object sender, CommandEventArgs e) { switch (e.CommandName) { //--Acoes Filtro Periodo case "filtrarMes": { #region Filtro Mes DateTime dtI = Convert.ToDateTime(dtInicial.Value); DateTime dtF = Convert.ToDateTime(dtFinal.Value); switch (e.CommandArgument.ToString()) { case "periodo": { string aux;//salva copia da data anterior ao filtro selecionado! aux = dtInicial.Value; dtInicial.Value = ttbDtInicio.Text; ttbDtInicio.Text = aux; aux = dtFinal.Value; dtFinal.Value = ttbDtFim.Text; ttbDtFim.Text = aux; if (!ListarMovimentosCaixa())//ouve erro volta periodo que estava setado anteriormente { dtInicial.Value = ttbDtInicio.Text; dtFinal.Value = ttbDtFim.Text; } ttbDtInicio.Text = ""; ttbDtFim.Text = ""; } break; case "esteMes": { FiltroMesAtual(); } break; default: { //incrementa ou decrementa um mes no filtro de data atual int mesAdd = e.CommandArgument.ToString() == "add" ? +1 : -1; dtInicial.Value = dtI.AddMonths(mesAdd).ToString(); //se se o periodo cobrir o mes fechado pula para o proximo mes correte, senão só acrescenta um mes ao filtro corrente! if (dtI.Day == 1) { if (dtF.Day == DateTime.DaysInMonth(dtF.Year, dtF.Month)) { dtF = dtF.AddMonths(mesAdd);//acrescenta um mes na data final atual! dtF = new DateTime(dtF.Year, dtF.Month, DateTime.DaysInMonth(dtF.Year, dtF.Month));//ultimo dia do mes setado } } else { dtF = dtF.AddMonths(mesAdd);//somente acrescenta um mes na data final atual! } dtFinal.Value = dtF.ToString(); } break; } TextoPeriodoFiltro(); ListarMovimentosCaixa(); #endregion } break; //--acoes lançamento case "lancar": { #region Efetuar Lançamento Notificacao notificacao; decimal valor; DateTime dtEmissao; decimal.TryParse(ttbValor.Text, out valor); DateTime.TryParse(ttbChData.Text, out dtEmissao); var movimento = new MovimentoCaixa(rblTipoMov.SelectedValue == "c", valor, new ContaCaixa(Convert.ToInt32(contaId.Value))); if (new MovimentoCaixaCtrl().Lancar(movimento, out notificacao)) { rblTipoMov.SelectedIndex = 0; ttbValor.Text = "";//limpa notificacoes.Add(notificacao); ListarMovimentosCaixa(); } else { notificacoes.Add(notificacao); ListarNotificacoes(); } #endregion } break; case "estornar": { Notificacao notificacao; if (e.CommandArgument != "")//ou seja é a confirmação! { var movimento = new MovimentoCaixa(Convert.ToInt32(movimentoId.Value), new ContaCaixa(Convert.ToInt32(contaId.Value)), ttbJustificativa.Text); if (new MovimentoCaixaCtrl().Estornar(movimento, out notificacao)) { notificacoes.Add(notificacao); ListarMovimentosCaixa(); } else { notificacoes.Add(notificacao); ListarNotificacoes(); } } else { ListarNotificacoes();//limpa notificaçoes } ttbJustificativa.Text = ""; movimentoId.Value = "0"; } break; //-- mudar conta case "trocarConta": { ContaView.Visible = false; ContaSelect.Visible = true; ttbConta.Text = ""; contaId.Value = "0"; ListarNotificacoes(); ttbValor.Text = ""; FiltroMesAtual(); } break; case "relatorio": { DateTime dti; DateTime dtf; DateTime.TryParse(dtInicial.Value, out dti); DateTime.TryParse(dtFinal.Value, out dtf); //informa a data inicial e final para filtrar as movimentações var conta = new ContaCaixa(Convert.ToInt32(contaId.Value), dti, dtf); Session["fluxocaixa"] = conta; Response.Redirect("/View/financeiro/relatorios/fluxodecaixa.aspx"); } break; } }