예제 #1
0
        public string FinalizarVenda(FinalizacaoVendaModel finalizacaoVendaModel)
        {
            try
            {
                if (finalizacaoVendaModel.IdCliente == 0)
                {
                    return("Favor selecionar o cliente");
                }

                if (finalizacaoVendaModel.ValorPago > 0 && finalizacaoVendaModel.TipoFinalizador == TipoFinalizador.EmAberto)
                {
                    return("Favor selecionar o tipo do pagamento!");
                }

                if (finalizacaoVendaModel.ValorPago > 0 && finalizacaoVendaModel.TipoFinalizador == TipoFinalizador.Cortesia)
                {
                    return("Favor retirar o valor se for uma cortesia");
                }

                if ((finalizacaoVendaModel?.ValorPago ?? 0) == 0 &&
                    finalizacaoVendaModel.TipoFinalizador != TipoFinalizador.Saldo &&
                    finalizacaoVendaModel.TipoFinalizador != TipoFinalizador.EmAberto &&
                    finalizacaoVendaModel.TipoFinalizador != TipoFinalizador.Cortesia)
                {
                    return("Favor digite o valor a ser pago ou selecione o tipo de pagamento correto!");
                }
                var idUsuarioLogado = AutenticacaoAplicacao.ObterUsuarioLogado().Id;
                var preVendas       = PreVendaRepositorio.Filtrar(d => d.Ativo == Ativo.Ativo && d.IdUsuario == idUsuarioLogado).ToList();
                var venda           = GravarVenda(finalizacaoVendaModel.IdCliente, preVendas);

                if (finalizacaoVendaModel.TipoFinalizador == TipoFinalizador.Saldo && finalizacaoVendaModel.ValorPago > venda.Cliente.Saldo)
                {
                    return("Favor selecionar o tipo do pagamento!");
                }

                if (finalizacaoVendaModel.TipoFinalizador == TipoFinalizador.Saldo && ((venda?.Cliente?.Saldo ?? 0) + (finalizacaoVendaModel?.ValorPago ?? 0)) < venda.Valor)
                {
                    return("Cliente não possui saldo!");
                }

                GeraPagamentoVenda(finalizacaoVendaModel, venda);

                var resultado = Contexto.Salvar();
                return("");
            }
            catch (Exception ex)
            {
                return("Erro ao tentar finalizar a venda, tente novamente!");
            }
        }
예제 #2
0
        public ActionResult FinalizarVenda(FinalizacaoVendaModel finalizacaoVendaModel)
        {
            var resultado = VendaAplicacao.FinalizarVenda(finalizacaoVendaModel);

            if (resultado.TemValor())
            {
                ViewBag.erro            = resultado;
                ViewBag.valorPago       = finalizacaoVendaModel.ValorPago;
                ViewBag.tipoFinalizador = (int)finalizacaoVendaModel.TipoFinalizador;
                var preVendaModelo = VendaAplicacao.ObterPreVendaAtual();
                preVendaModelo.PaginacaoCliente.ListaModel.Add(ClienteAplicacao.BuscarClientePorId(finalizacaoVendaModel.IdCliente));
                CarregarBag();
                return(View("IncluirVenda", preVendaModelo));
            }
            return(View("FiltroVenda", VendaAplicacao.FiltrarVenda(new PaginacaoModel2 <Venda, PreVenda, FiltroVenda>())));
        }
예제 #3
0
        private string GeraPagamentoVenda(FinalizacaoVendaModel finalizacaoVendaModel, Venda venda)
        {
            if (finalizacaoVendaModel.ValorPago > 0 && finalizacaoVendaModel.TipoFinalizador == TipoFinalizador.Cortesia)
            {
                return("Favor não colocar valor pago em uma cortesia!");
            }

            Pagamento pagamento = null;

            if (finalizacaoVendaModel.TipoFinalizador == TipoFinalizador.Saldo)
            {
                var valorTotalPago = (finalizacaoVendaModel.ValorPago ?? 0) + venda.Cliente.Saldo;
                pagamento = new Pagamento
                {
                    Data        = DateTime.Now,
                    IdCliente   = venda.IdCliente,
                    ValorAberto = 0,
                    ValorTotal  = venda.Valor,
                    Situacao    = SituacaoVenda.Pago
                };
                //if (finalizacaoVendaModel.TrocoSaldo ?? false)
                //    venda.Cliente.Saldo = valorTotalPago - venda.Valor;
                //else
                //    venda.Cliente.Saldo = 0;
            }
            else if (venda.Valor > ((finalizacaoVendaModel?.ValorPago ?? 0) + (venda?.Cliente?.Saldo ?? 0)) && finalizacaoVendaModel.ValorPago > 0)
            {
                pagamento = new Pagamento
                {
                    Data        = DateTime.Now,
                    IdCliente   = venda.IdCliente,
                    ValorAberto = (double)(venda.Valor - finalizacaoVendaModel.ValorPago),
                    ValorTotal  = venda.Valor,
                    Situacao    = SituacaoVenda.Pendente
                };
            }
            else if (((finalizacaoVendaModel?.ValorPago ?? 0) + (venda?.Cliente?.Saldo ?? 0)) > venda.Valor && (finalizacaoVendaModel.TrocoSaldo ?? false))
            {
                pagamento = new Pagamento
                {
                    Data        = DateTime.Now,
                    IdCliente   = venda.IdCliente,
                    ValorAberto = 0,
                    ValorTotal  = venda.Valor,
                    Situacao    = SituacaoVenda.Pago
                };
                //if (finalizacaoVendaModel.TipoFinalizador != TipoFinalizador.Cortesia)
                //    venda.Cliente.Saldo += (finalizacaoVendaModel.ValorPago - venda.Valor);
            }
            else if (finalizacaoVendaModel.TipoFinalizador == TipoFinalizador.Cortesia)
            {
                pagamento = new Pagamento
                {
                    Data        = DateTime.Now,
                    Cliente     = venda.Cliente,
                    ValorAberto = 0,
                    ValorTotal  = venda.Valor,
                    Situacao    = SituacaoVenda.Pago,
                };
            }
            else if (finalizacaoVendaModel.ValorPago > 0)
            {
                pagamento = new Pagamento
                {
                    Data        = DateTime.Now,
                    Cliente     = venda.Cliente,
                    ValorAberto = 0,
                    ValorTotal  = venda.Valor,
                    Situacao    = SituacaoVenda.Pago,
                };
            }
            if (pagamento != null)
            {
                ParcelamentoPagamento parcelamentoPagamento = new ParcelamentoPagamento
                {
                    Pagamento       = pagamento,
                    TipoFinalizador = finalizacaoVendaModel.TipoFinalizador ?? TipoFinalizador.Dinheiro,
                    DataPagamento   = pagamento.Data,
                    IdCliente       = venda.IdCliente,
                    ValorPago       = pagamento.ValorTotal,
                };
                if (pagamento.ValorAberto > 0)
                {
                    parcelamentoPagamento.ValorPago = finalizacaoVendaModel.ValorPago ?? 0;
                }

                if (((finalizacaoVendaModel?.ValorPago ?? 0) + (venda?.Cliente?.Saldo ?? 0)) == venda.Valor || !(finalizacaoVendaModel?.TrocoSaldo ?? false))
                {
                    if (finalizacaoVendaModel.TipoFinalizador != TipoFinalizador.Cortesia)
                    {
                        venda.Cliente.Saldo = 0;
                    }
                }
                else
                {
                    venda.Cliente.Saldo = ((finalizacaoVendaModel?.ValorPago ?? 0) + (venda?.Cliente?.Saldo ?? 0)) - venda.Valor;
                }

                PagamentoRepositorio.Cadastrar(pagamento);
                ParcelamentoPagamentoRepositorio.Cadastrar(parcelamentoPagamento);
                venda.Pagamento = pagamento;
                venda.Situacao  = SituacaoVenda.Pago;
            }
            return("");
        }