/// <summary> /// Insere uma movimentacao na conta bancária e atualiza os dados da conta associada /// </summary> /// <param name="movimentacaoConta">movimentacao da conta</param> /// <param name="conta">conta associada</param> /// <returns></returns> public Int64 Inserir(MovimentacaoConta movimentacaoConta) { try { MovimentacaoContaE _movimentacaoContaE = new MovimentacaoContaE(); Atribuir(movimentacaoConta, _movimentacaoContaE); repMovimentacaoConta.Inserir(_movimentacaoContaE); saceContext.SaveChanges(); // Atualiza saldo da conta bancária var query = from conta in saceContext.ContaSet where conta.codConta == _movimentacaoContaE.codConta select conta; ContaE _contaE = query.FirstOrDefault(); if (_contaE != null) { AtualizaSituacaoConta(_contaE, _movimentacaoContaE, false); AtualizaSituacaoPagamentosEntrada(_contaE); AtualizaSituacaoPagamentosSaida(_contaE, _movimentacaoContaE, false); } return(_movimentacaoContaE.codMovimentacao); } catch (Exception e) { throw new DadosException("Movimentação de Conta", e.Message, e); } }
/// <summary> /// Atribui a classe entidade para entidade persistente /// </summary> /// <param name="movimentacaoConta"></param> /// <param name="_movimentacaoE"></param> private void Atribuir(MovimentacaoConta movimentacaoConta, MovimentacaoContaE _movimentacaoE) { _movimentacaoE.codConta = movimentacaoConta.CodConta; _movimentacaoE.codContaBanco = movimentacaoConta.CodContaBanco; _movimentacaoE.codResponsavel = movimentacaoConta.CodResponsavel; _movimentacaoE.codTipoMovimentacao = movimentacaoConta.CodTipoMovimentacao; _movimentacaoE.dataHora = movimentacaoConta.DataHora; _movimentacaoE.valor = movimentacaoConta.Valor; }
private void btnSalvar_Click(object sender, EventArgs e) { if (MessageBox.Show("Confirma registro de pagamento?", "Confirmar Pagamento", MessageBoxButtons.YesNo) == DialogResult.Yes) { Cursor.Current = Cursors.WaitCursor; int formaPagamento = int.Parse(codFormaPagamentoComboBox.SelectedValue.ToString()); decimal valorPagamento = Convert.ToDecimal(valorPagamentoTextBox.Text); decimal totalPago = Convert.ToDecimal(totalPagamentosTextBox.Text); decimal faltaReceber = Convert.ToDecimal(faltaReceberTextBox.Text); if (valorPagamento > faltaReceber) { codFormaPagamentoComboBox.Focus(); Cursor.Current = Cursors.Default; throw new TelaException("O valor do pagamento não pode ser maior que o valor a receber."); } // Adicionar todas as saídas e totais para impressão do documento fiscal List <SaidaPedido> listaSaidaPedido = new List <SaidaPedido>(); List <long> listaContas = new List <long>(); for (int i = contasPessoaDataGridView.SelectedRows.Count - 1; i >= 0; i--) { listaContas.Add(Convert.ToInt64(contasPessoaDataGridView.SelectedRows[i].Cells[0].Value.ToString())); //codConta long codSaidaTemp = Convert.ToInt64(contasPessoaDataGridView.SelectedRows[i].Cells[1].Value.ToString()); //codSaida decimal valorAVistaTemp = Convert.ToDecimal(contasPessoaDataGridView.SelectedRows[i].Cells[9].Value.ToString()); //totalAVista if (listaSaidaPedido.Where(sp => sp.CodSaida.Equals(codSaidaTemp)).Count() == 0) { listaSaidaPedido.Add(new SaidaPedido() { CodSaida = codSaidaTemp, TotalAVista = valorAVistaTemp }); } } // cupom fiscal pode ser impresso quando todas as contas associadas a uma saída estiverem selecionadas bool podeImprimirCF = (valorPagamento == faltaReceber); if (podeImprimirCF) { foreach (SaidaPedido saidaPedido in listaSaidaPedido) { List <Conta> contas = (List <Conta>)GerenciadorConta.GetInstance(null).ObterPorSaida(saidaPedido.CodSaida); foreach (Conta conta in contas) { if ((!listaContas.Contains(conta.CodConta)) || ((conta.CF != null) && !conta.CF.Trim().Equals(""))) { podeImprimirCF = false; break; } } if (!podeImprimirCF) { break; } } } //if (formaPagamento.Equals(FormaPagamento.CARTAO) && !podeImprimirCF) //{ // Cursor.Current = Cursors.Default; // throw new TelaException("Não é possível realizar o pagamento com cartão de crédito. Verifique se alguma NFe referente às contas selecionadas já foi impresso OU se todas as contas referente às saídas escolhidas estão selecionadas."); //} if (formaPagamento.Equals(FormaPagamento.DINHEIRO) || formaPagamento.Equals(FormaPagamento.DEPOSITO) || formaPagamento.Equals(FormaPagamento.CARTAO)) //&& podeImprimirCF)) { AtualizarValoresDescontosContas(); if (formaPagamento.Equals(FormaPagamento.DINHEIRO) || formaPagamento.Equals(FormaPagamento.DEPOSITO)) { MovimentacaoConta movimentacao = new MovimentacaoConta(); movimentacao.CodConta = listaContas.ElementAt(0); // valor é irrelevante if (formaPagamento.Equals(FormaPagamento.DINHEIRO)) { movimentacao.CodContaBanco = Global.CAIXA_PADRAO; } else { movimentacao.CodContaBanco = (int)codContaBancoComboBox.SelectedValue; } movimentacao.CodResponsavel = pessoa.CodPessoa; movimentacao.CodTipoMovimentacao = TipoMovimentacaoConta.RECEBIMENTO_CREDIARIO; movimentacao.DataHora = DateTime.Now; movimentacao.Valor = valorPagamento; List <MovimentacaoConta> listaMovimentacaoConta = (List <MovimentacaoConta>)movimentacaoContaBindingSource.DataSource; GerenciadorMovimentacaoConta.GetInstance(null).Inserir(movimentacao, listaContas, listaMovimentacaoConta); Cursor.Current = Cursors.Default; if (podeImprimirCF && MessageBox.Show("Deseja imprimir NFe/NFCe das contas selecionadas?", "Confirmar Impressão", MessageBoxButtons.YesNo) == DialogResult.Yes) { SaidaPagamento saidaPagamento = new SaidaPagamento(); FormaPagamento formaPagamentoDinheiro = GerenciadorFormaPagamento.GetInstance().Obter(FormaPagamento.DINHEIRO).ElementAt(0); saidaPagamento.CodFormaPagamento = formaPagamentoDinheiro.CodFormaPagamento; saidaPagamento.MapeamentoFormaPagamento = formaPagamentoDinheiro.Mapeamento; saidaPagamento.DescricaoFormaPagamento = formaPagamentoDinheiro.Descricao; saidaPagamento.Valor = valorPagamento; saidaPagamento.CodCartaoCredito = Global.CARTAO_LOJA; //saidaPagamento.CodContaBanco long codSolicitacao = GerenciadorSolicitacaoDocumento.GetInstance().InserirSolicitacaoDocumento(listaSaidaPedido, new List <SaidaPagamento>() { saidaPagamento }, DocumentoFiscal.TipoSolicitacao.NFCE, false, false); FrmSaidaAutorizacao frmSaidaAutorizacao = new FrmSaidaAutorizacao(listaSaidaPedido.FirstOrDefault().CodSaida, pessoa.CodPessoa, DocumentoFiscal.TipoSolicitacao.NFCE); frmSaidaAutorizacao.ShowDialog(); frmSaidaAutorizacao.Dispose(); } else if (!podeImprimirCF && MessageBox.Show("Deseja imprimir CRÉDITO para o cliente?", "Confirmar Impressão", MessageBoxButtons.YesNo) == DialogResult.Yes) { movimentacao.Valor = valorPagamento; GerenciadorSaida.GetInstance(null).ImprimirCreditoPagamento(movimentacao); } } else if (formaPagamento.Equals(FormaPagamento.CARTAO)) { List <SaidaPagamento> listaSaidaPagamento = new List <SaidaPagamento>(); //if (totalPago > 0) //{ // SaidaPagamento saidaPagamentoDinheiro = new SaidaPagamento(); // FormaPagamento formaPagamentoDinheiro = GerenciadorFormaPagamento.GetInstance().Obter(FormaPagamento.DINHEIRO).ElementAt(0); // saidaPagamentoDinheiro.CodFormaPagamento = FormaPagamento.DINHEIRO; // saidaPagamentoDinheiro.MapeamentoFormaPagamento = formaPagamentoDinheiro.Mapeamento; // saidaPagamentoDinheiro.DescricaoFormaPagamento = formaPagamentoDinheiro.Descricao; // saidaPagamentoDinheiro.Valor = totalPago; // listaSaidaPagamento.Add(saidaPagamentoDinheiro); //} SaidaPagamento saidaPagamentoCartao = new SaidaPagamento(); int codCartao = Convert.ToInt32(codCartaoComboBox.SelectedValue.ToString()); int parcelas = Convert.ToInt32(parcelasTextBox.Text); CartaoCredito cartaoCredito = GerenciadorCartaoCredito.GetInstance().Obter(codCartao).ElementAt(0); saidaPagamentoCartao.CodFormaPagamento = FormaPagamento.CARTAO; saidaPagamentoCartao.MapeamentoFormaPagamento = cartaoCredito.Mapeamento; saidaPagamentoCartao.MapeamentoCartao = cartaoCredito.Mapeamento; saidaPagamentoCartao.NomeCartaoCredito = cartaoCredito.Nome; saidaPagamentoCartao.DescricaoFormaPagamento = cartaoCredito.Nome; saidaPagamentoCartao.Valor = valorPagamento; saidaPagamentoCartao.Parcelas = parcelas; saidaPagamentoCartao.CodCartaoCredito = codCartao; listaSaidaPagamento.Add(saidaPagamentoCartao); if (podeImprimirCF) { long codSolicitacao = GerenciadorSolicitacaoDocumento.GetInstance().InserirSolicitacaoDocumento(listaSaidaPedido, listaSaidaPagamento, DocumentoFiscal.TipoSolicitacao.NFCE, false, false); FrmSaidaAutorizacao frmSaidaAutorizacao = new FrmSaidaAutorizacao(listaSaidaPedido.FirstOrDefault().CodSaida, pessoa.CodPessoa, DocumentoFiscal.TipoSolicitacao.NFCE); frmSaidaAutorizacao.ShowDialog(); frmSaidaAutorizacao.Dispose(); } if (MessageBox.Show("A compra foi confirmada pela administradora do cartão selecionado?", "Confirma Cartão de Crédito", MessageBoxButtons.YesNo) == DialogResult.Yes) { GerenciadorConta.GetInstance(null).QuitarContasCartaoCredito(listaContas, valorPagamento, cartaoCredito, parcelas); } } codClienteComboBox_Leave(sender, e); } } habilitaBotoes(true); btnNovo.Focus(); }
/// <summary> /// Insere o valor de uma movimentacao, inserindo uma nova movimentacao para cada conta /// </summary> /// <param name="movimentacaoConta"></param> /// <param name="listaContas"></param> /// <returns></returns> public Int64 Inserir(MovimentacaoConta movimentacaoConta, List <long> listaContas, List <MovimentacaoConta> listaMovimentacaoConta) { try { using (TransactionScope transaction = new TransactionScope()) { decimal totalMovimentacao = movimentacaoConta.Valor; var queryContas = from conta in saceContext.ContaSet where listaContas.Contains(conta.codConta) orderby conta.dataVencimento select conta; IEnumerable <ContaE> contasE = queryContas.ToList(); // adiciona os créditos de devolução ao valor da movimentação decimal totalCreditos = contasE.Where(c => c.valor < 0).Sum(c => (c.valor - c.desconto)); totalMovimentacao += Math.Abs(totalCreditos); foreach (ContaE _contaE in contasE) { // Se conta de devolução já dá baixa if (_contaE.valor < 0) { movimentacaoConta.CodConta = _contaE.codConta; movimentacaoConta.Valor = Math.Round(_contaE.valor - _contaE.desconto, 2); MovimentacaoContaE _movimentacaoE = new MovimentacaoContaE(); Atribuir(movimentacaoConta, _movimentacaoE); repMovimentacaoConta.Inserir(_movimentacaoE); saceContext.SaveChanges(); AtualizaSituacaoConta(_contaE, _movimentacaoE, false); AtualizaSituacaoPagamentosEntrada(_contaE); AtualizaSituacaoPagamentosSaida(_contaE, _movimentacaoE, false); } else if (totalMovimentacao > 0) { if (!_contaE.codSituacao.Equals(SituacaoConta.SITUACAO_QUITADA)) { movimentacaoConta.CodConta = _contaE.codConta; decimal totalPago = listaMovimentacaoConta.Where(m => m.CodConta == _contaE.codConta).Sum(m => m.Valor); decimal valorPagar = Math.Round(_contaE.valor - _contaE.desconto, 2) - totalPago; if (valorPagar <= totalMovimentacao) { movimentacaoConta.Valor = valorPagar; } else { movimentacaoConta.Valor = totalMovimentacao; } totalMovimentacao -= movimentacaoConta.Valor; totalPago = 0; MovimentacaoContaE _movimentacaoE = new MovimentacaoContaE(); Atribuir(movimentacaoConta, _movimentacaoE); repMovimentacaoConta.Inserir(_movimentacaoE); saceContext.SaveChanges(); AtualizaSituacaoConta(_contaE, _movimentacaoE, false); AtualizaSituacaoPagamentosEntrada(_contaE); AtualizaSituacaoPagamentosSaida(_contaE, _movimentacaoE, false); } } } transaction.Complete(); } } catch (Exception e) { throw new DadosException("Movimentação de Conta", e.Message, e); } return(0); }
/// <summary> /// REgistra os pagamentos associando para cada um dele uma conta a pagar /// </summary> /// <param name="pagamentos"></param> /// <param name="entrada"></param> private void RegistrarPagamentosEntrada(List <EntradaPagamento> pagamentos, Entrada entrada, SaceEntities saceContext) { foreach (EntradaPagamento pagamento in pagamentos) { // Para cada pagamento é criada uma nova conta Conta conta = new Conta(); if (pagamento.PagamentoDoFrete) { conta.CodPessoa = entrada.CodEmpresaFrete; } else { conta.CodPessoa = entrada.CodFornecedor; } conta.CodPlanoConta = PlanoConta.ENTRADA_PRODUTOS; conta.CodEntrada = entrada.CodEntrada; conta.CodSaida = Global.SAIDA_PADRAO; // saída não válida conta.CodPagamento = pagamento.CodEntradaFormaPagamento; conta.Desconto = 0; // Quando o pagamento é realizado em dinheiro a conta já é inserido quitada if (pagamento.CodFormaPagamento == FormaPagamento.DINHEIRO) { conta.CodSituacao = SituacaoConta.SITUACAO_QUITADA.ToString(); } else { conta.CodSituacao = SituacaoConta.SITUACAO_ABERTA.ToString(); } conta.TipoConta = Conta.CONTA_PAGAR.ToString(); conta.Valor = pagamento.Valor; if (pagamento.CodFormaPagamento == FormaPagamento.BOLETO) { conta.FormatoConta = Conta.FORMATO_CONTA_BOLETO; } else { conta.FormatoConta = Conta.FORMATO_CONTA_FICHA; } conta.DataVencimento = pagamento.Data; conta.CodConta = GerenciadorConta.GetInstance(saceContext).Inserir(conta); if (pagamento.CodFormaPagamento == FormaPagamento.DINHEIRO) { MovimentacaoConta movimentacao = new MovimentacaoConta(); movimentacao.CodContaBanco = pagamento.CodContaBanco; movimentacao.CodConta = conta.CodConta; movimentacao.CodResponsavel = GerenciadorLoja.GetInstance().Obter(Global.LOJA_PADRAO).ElementAt(0).CodPessoa; movimentacao.CodTipoMovimentacao = MovimentacaoConta.PAGAMENTO_FORNECEDOR; movimentacao.DataHora = DateTime.Now; movimentacao.Valor = pagamento.Valor; GerenciadorMovimentacaoConta.GetInstance(saceContext).Inserir(movimentacao); } } }
public ActionResult ListarExtrato(int idConta, int TipoMovimentacao, string DataInicio, string DataFim) { //Inicializando variáveis decimal saldoInicial = 0; decimal saldoFinal = 0; EstruturaRetornoListarExtrato retornoExtrato = new EstruturaRetornoListarExtrato(); if (string.IsNullOrEmpty(DataInicio) || string.IsNullOrEmpty(DataFim)) { retornoExtrato.IndicadorRetorno = -1; retornoExtrato.DescricaoRetorno = "Favor preencher os campos de Data Inicio e Data Fim!"; return(NotFound(retornoExtrato)); } try { //Conversão de string para DateTime DateTime DataInicial = Convert.ToDateTime(DataInicio); DateTime DataFinal = Convert.ToDateTime(DataFim); //Setando a data para o final do dia DataFinal = DataFinal.AddHours(23).AddMinutes(59).AddSeconds(59); //Consulta LINQ var query = from m in _context.Movimentacao where m.IdConta == idConta && m.DataMovimentacao >= DataInicial && m.DataMovimentacao <= DataFinal select new { Movimentacao = m }; // Caso deseje filtrar por crédito ou debito if (TipoMovimentacao != 0) { query = query.Where(t => t.Movimentacao.IdTipoMovimentacao == TipoMovimentacao); } var retorno = query.ToList(); //Verifica se a query retornou registros if (retorno.Count > 0) { saldoInicial = retorno[0].Movimentacao.SaldoAnterior; saldoFinal = retorno[retorno.Count - 1].Movimentacao.SaldoPosterior; List <MovimentacaoConta> movimentacoesFiltradas = new List <MovimentacaoConta>(); //Preenchendo a lista de acordo com o resultado da query LINQ foreach (var item in retorno) { MovimentacaoConta movimentacao = new MovimentacaoConta(); movimentacao.IdMovimentacao = item.Movimentacao.IdMovimentacao; movimentacao.IdConta = item.Movimentacao.IdConta; movimentacao.Descricao = item.Movimentacao.Descricao; movimentacao.TipoMovimentacao.IdTipoMovimentacao = item.Movimentacao.IdTipoMovimentacao; movimentacao.TipoMovimentacao.Descricao = _context.TipoMovimentacao.Find(item.Movimentacao.IdTipoMovimentacao).Descricao; movimentacao.Valor = string.Format("{0:0,0.00}", item.Movimentacao.Valor); movimentacao.SaldoAnterior = string.Format("{0:0,0.00}", item.Movimentacao.SaldoAnterior); movimentacao.SaldoPosterior = string.Format("{0:0,0.00}", item.Movimentacao.SaldoPosterior); movimentacao.DataMovimentacao = item.Movimentacao.DataMovimentacao.ToString("dd/MM/yyyy HH:mm"); movimentacoesFiltradas.Add(movimentacao); } // Preparando estrutura de retorno com sucesso retornoExtrato.SaldoInicial = string.Format("{0:0,0.00}", saldoInicial); retornoExtrato.SaldoFinal = string.Format("{0:0,0.00}", saldoFinal); retornoExtrato.Movimentacoes = movimentacoesFiltradas; } else { retornoExtrato.DescricaoRetorno = "Não há registros no extrato"; } } catch (Exception ex) { retornoExtrato.IndicadorRetorno = -1; retornoExtrato.DescricaoRetorno = ex.Message; } return(Ok(retornoExtrato)); }