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!"); } }
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>()))); }
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(""); }