Beispiel #1
0
        public PendenciasCliente GerarPagamento(ParcelamentoPagamento parcelamentoPagamento)
        {
            parcelamentoPagamento.ValorPago += (parcelamentoPagamento.Saldo ?? 0);
            Pagamento pagamento = null;

            if (parcelamentoPagamento.IdPagamento != null)
            {
                pagamento = PagamentoRepositorio.Buscar((long)parcelamentoPagamento.IdPagamento);
                if (pagamento.ValorAberto - parcelamentoPagamento.ValorPago <= 0)
                {
                    //pagamento.ValorAberto = 0;
                    pagamento.Situacao = Dominio.Enumeradores.SituacaoVenda.Pago;
                    pagamento.Data     = DateTime.Now;
                }
                else
                {
                    pagamento.ValorAberto = pagamento.ValorAberto - parcelamentoPagamento.ValorPago;
                    pagamento.Situacao    = Dominio.Enumeradores.SituacaoVenda.Pendente;
                }
                if (parcelamentoPagamento.TrocoSaldo ?? false)
                {
                    parcelamentoPagamento.Saldo = parcelamentoPagamento.ValorPago - pagamento.ValorAberto;
                }

                AtualizaSaldoCliente(pagamento.IdCliente, parcelamentoPagamento.TrocoSaldo, parcelamentoPagamento.Saldo, pagamento);
                PagamentoRepositorio.Atualizar(pagamento);
                GerarParcelamentoPagamento(parcelamentoPagamento, pagamento);
                var result = Contexto.Salvar();
            }
            else
            {
                pagamento = new Pagamento
                {
                    Data      = DateTime.Now,
                    IdCliente = (long)parcelamentoPagamento.IdCliente
                };

                var pendencias = ObterPendenciaCliente((long)parcelamentoPagamento.IdCliente);
                if (pendencias != null)
                {
                    string troco       = "";
                    var    valorAntigo = pendencias.ValorTotal;
                    pagamento.ValorTotal = pendencias.ValorTotal + pendencias.TorneiosCliente.Sum(d => d.ValorPago ?? 0);
                    if ((valorAntigo - parcelamentoPagamento.ValorPago) <= 0 || parcelamentoPagamento.TipoFinalizador == TipoFinalizador.Cortesia)
                    {
                        //pagamento.ValorAberto = 0;
                        pagamento.Situacao = Dominio.Enumeradores.SituacaoVenda.Pago;
                        if (parcelamentoPagamento.ValorPago > 0)
                        {
                            troco = (valorAntigo - parcelamentoPagamento.ValorPago).ToString("C2");
                        }
                    }
                    else
                    {
                        pagamento.ValorAberto = pendencias.ValorTotal - parcelamentoPagamento.ValorPago;
                        pagamento.Situacao    = Dominio.Enumeradores.SituacaoVenda.Pendente;
                    }
                    if (pendencias.TorneiosCliente.Sum(d => d.ValorPago) > 0)
                    {
                        foreach (var torneioCliente in pendencias.TorneiosCliente)
                        {
                            var parcela = new ParcelamentoPagamento();
                            parcela.DataPagamento   = torneioCliente.DataAlteracao ?? torneioCliente.DataCadastro;
                            parcela.Pagamento       = pagamento;
                            parcela.TipoFinalizador = TipoFinalizador.Dinheiro;
                            parcela.ValorPago       = torneioCliente.ValorPago ?? 0;
                            ParcelamentoPagamentoRepositorio.Cadastrar(parcela);
                        }
                    }
                    if (parcelamentoPagamento.ValorPago - valorAntigo > 0)
                    {
                        parcelamentoPagamento.Saldo = parcelamentoPagamento.ValorPago - valorAntigo;
                    }
                    AtualizaSaldoCliente(pagamento.IdCliente, parcelamentoPagamento.TrocoSaldo, parcelamentoPagamento.Saldo, pagamento);
                    PagamentoRepositorio.Cadastrar(pagamento);
                    GerarParcelamentoPagamento(parcelamentoPagamento, pagamento);
                    AtualizaPendencias(pendencias, pagamento);
                    Contexto.Salvar();
                }
            }
            return(ObterPendenciaCliente((long)parcelamentoPagamento.IdCliente));
        }