/// <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;
 }
Exemple #3
0
        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);
        }
Exemple #5
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);
                }
            }
        }
Exemple #6
0
        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));
        }