public FichaViewModel Estornar(FichaViewModel fichaViewModel) { var fichaDTO = _fichaRepository.BuscarPorId(fichaViewModel.Id); var valorAnterior = fichaDTO.Saldo; var ficha = Mapper.Map(fichaViewModel, fichaDTO); return(Mapper.Map <FichaViewModel>(_fichaRepository.Estornar(ficha, valorAnterior))); }
//var pagamentosComValorInformado = pagamentos.Where(p => p.ValorInformado > 0); //var pagamentosSemValorInformado = pagamentos.Where(p => p.ValorInformado == 0); ////Se existir pagamentos com valor já informados //if (pagamentosComValorInformado.Any()) //{ // var vendaTotal = TotalVenda; // var queryPagamentosComValorInformado = from pagamentoInf in pagamentosComValorInformado // select new // { // Ficha = _ficha_Repository.BuscarPorId(pagamentoInf.Ficha.Id.Value), // ValorDescontado = pagamentoInf.ValorInformado // }; // //Atualiza fichas com valor já informado // foreach (var item in queryPagamentosComValorInformado) // { // double? saldoAntigo = 0; // if (vendaTotal > 0) // { // if (item.ValorDescontado >= vendaTotal) // { // saldoAntigo = item.Ficha.Saldo; // item.Ficha.Saldo = item.Ficha.Saldo - vendaTotal; // vendaTotal = 0; // } // else if (item.ValorDescontado < vendaTotal) // { // saldoAntigo = item.Ficha.Saldo; // item.Ficha.Saldo = item.Ficha.Saldo - item.ValorDescontado; // vendaTotal = vendaTotal - item.ValorDescontado; // } // _ficha_Repository.Atualizar(item.Ficha, saldoAntigo.Value); // } // } // // Se ainda existir valor no total da venda, desconta das outras fichas sem valor informado // if (vendaTotal > 0) // { // var fichasSemValorInformado = from pagamento in pagamentosSemValorInformado // select _ficha_Repository.BuscarPorId(pagamento.Ficha.Id.Value); // foreach (var ficha in fichasSemValorInformado) // { // if (ficha.Saldo >= vendaTotal) // { // var descontado = ficha.Saldo - vendaTotal; // double saldoAntigo = ficha.Saldo.Value; // ficha.Saldo = descontado; // _ficha_Repository.Atualizar(ficha, saldoAntigo); // vendaTotal = 0; // } // else // { // var descontado = vendaTotal - ficha.Saldo; // double saldoAntigo = ficha.Saldo.Value; // ficha.Saldo = 0; // _ficha_Repository.Atualizar(ficha, saldoAntigo); // vendaTotal = descontado.Value; // } // } // } //} //else if (!pagamentosComValorInformado.Any()) //{ // var fichasAtualizadas = from pagamentosInf in vendaPagamentos // from pagamentosFicha in pagamentosInf.Venda_Pagamento_Fichas // select _ficha_Repository.BuscarPorId(pagamentosFicha.Ficha.Id.Value); // //Atualiza Saldo das Fichas // double? pagamento = TotalVenda; // foreach (var ficha in fichasAtualizadas) // { // if (ficha.Saldo >= pagamento) // { // var descontado = ficha.Saldo - pagamento; // double saldoAntigo = ficha.Saldo.Value; // ficha.Saldo = descontado; // _ficha_Repository.Atualizar(ficha, saldoAntigo); // pagamento = 0; // } // else // { // var descontado = pagamento - ficha.Saldo; // double saldoAntigo = ficha.Saldo.Value; // ficha.Saldo = 0; // _ficha_Repository.Atualizar(ficha, saldoAntigo); // pagamento = descontado; // } // } //} public VendaViewModel Calcelar(Guid Id_Venda) { var pagamento_venda_fichas = Db.Venda_Pagamento_Fichas; var venda_pagamentos = Db.Venda_Pagamentos; var movimentacoes = Db.Movimentacoes; var venda = _vendaRepository.BuscarPorId(Id_Venda); if (venda != null) { //Cancela a venda venda.Cancelada = true; var vendaAtualizada = _vendaRepository.Atualizar(venda); //Estornar as fichas com base na movimentação var query = from pagamento_venda_ficha in pagamento_venda_fichas join venda_pagamento in venda_pagamentos on pagamento_venda_ficha.Id_Venda_Pagamento equals venda_pagamento.Id join movimentacao in movimentacoes on pagamento_venda_ficha.Id_Ficha equals movimentacao.Id_Ficha where pagamento_venda_ficha.Deletado == false && venda_pagamento.Deletado == false && movimentacao.Deletado == false && venda_pagamento.Id_venda == Id_Venda select new { Ficha = pagamento_venda_ficha.Ficha, SaldoEstornado = (pagamento_venda_ficha.Ficha.Saldo + movimentacao.Valor) }; foreach (var estorno in query) { var valorAnterior = estorno.Ficha.Saldo; var fichaDTO = _ficha_Repository.BuscarPorId(estorno.Ficha.Id); fichaDTO.Saldo = estorno.SaldoEstornado; _ficha_Repository.Estornar(fichaDTO, valorAnterior); } return(Mapper.Map <VendaViewModel>(vendaAtualizada)); } return(null); }