private void RegistrarResultadoFechamento(OperacaoCaixa operacaoCaixaFechamento, decimal valorContabilizadoNoFechamento) { var vendas = _vendaRepositorio.RecuperarListaDasVendasDaOperacaoDeAbertura(CaixaCorrente.CodigoOperacaoDeAbertura); if (vendas != null && vendas.Count > 0) { var operacoesCaixa = _repositorio.RecuperarOperacoesCaixaPorCodigoDeAbertura(CaixaCorrente.CodigoOperacaoDeAbertura); var operacaoCaixaAbertura = operacoesCaixa.SingleOrDefault(x => x.TipoOperacao == EnumCaixaTipoOperacao.Abertura.ToString()); if (operacaoCaixaAbertura != null) { var resultadoFechamento = new ResultadoOperacaoFechamento(); resultadoFechamento.CodigoResultado = GerarCodigoUnico(); resultadoFechamento.OperacaoCaixa_CodigoOperacaoCaixa = operacaoCaixaFechamento.CodigoOperacaoCaixa; resultadoFechamento.ValorAbertura = operacaoCaixaAbertura.ValorOperacao; resultadoFechamento.ValorContabilizadoNoFechamento = valorContabilizadoNoFechamento; resultadoFechamento.ValorTotalReforco = operacoesCaixa.Where(x => x.TipoOperacao == EnumCaixaTipoOperacao.Reforco.ToString()).Sum(x => x.ValorOperacao); resultadoFechamento.ValorTotalSangria = operacoesCaixa.Where(x => x.TipoOperacao == EnumCaixaTipoOperacao.Sangria.ToString()).Sum(x => x.ValorOperacao); vendas.ForEach(venda => { var vendaPagamentos = _vendaRepositorio.RecuperarListaDosPagamentosDaVenda(venda.CodigoVenda); resultadoFechamento.ValorTotalDescontoVenda += venda.ValorTotalDescontoVenda; TipoDoPagamento.ListaDeTiposDePagamento.Where(x => x.Nome.Contains("Dinheiro")).ToList().ForEach(item => { resultadoFechamento.ValorTotalPagamentoDinheiro += vendaPagamentos.Where( x => x.TipoPagamento_CodigoTipoPagamento == item.CodigoTipoPagamento).Sum(x => x.ValorPagamento) - venda.ValorTroco; }); TipoDoPagamento.ListaDeTiposDePagamento.Where(x => x.Nome.Contains("Crédito")).ToList().ForEach(item => { resultadoFechamento.ValorTotalPagamentoCredito += vendaPagamentos.Where(x => x.TipoPagamento_CodigoTipoPagamento == item.CodigoTipoPagamento).Sum(x => x.ValorPagamento); resultadoFechamento.ValorRecebimentoCretito = resultadoFechamento.ValorTotalPagamentoCredito - (item.PercentualDesconto / 100 * resultadoFechamento.ValorTotalPagamentoCredito); }); TipoDoPagamento.ListaDeTiposDePagamento.Where(x => x.Nome.Contains("Débito")).ToList().ForEach(item => { resultadoFechamento.ValorTotalPagamentoDebito += vendaPagamentos.Where(x => x.TipoPagamento_CodigoTipoPagamento == item.CodigoTipoPagamento).Sum(x => x.ValorPagamento); resultadoFechamento.ValorRecebimentoDebito = resultadoFechamento.ValorTotalPagamentoDebito - (item.PercentualDesconto / 100 * resultadoFechamento.ValorTotalPagamentoDebito); }); TipoDoPagamento.ListaDeTiposDePagamento.Where(x => x.Nome.Contains("Tiket")).ToList().ForEach(item => { resultadoFechamento.ValorTotalPagamentoTicket += vendaPagamentos.Where(x => x.TipoPagamento_CodigoTipoPagamento == item.CodigoTipoPagamento).Sum(x => x.ValorPagamento); resultadoFechamento.ValorRecebimentoTicket += resultadoFechamento.ValorTotalPagamentoTicket - (item.PercentualDesconto / 100 * resultadoFechamento.ValorTotalPagamentoTicket); }); }); resultadoFechamento.ValorTotalPagamento = resultadoFechamento.ValorTotalPagamentoDinheiro + resultadoFechamento.ValorTotalPagamentoCredito + resultadoFechamento.ValorTotalPagamentoDebito + resultadoFechamento.ValorTotalPagamentoTicket; resultadoFechamento.ValorTotalEstimadoEmEspecie = resultadoFechamento.ValorAbertura + resultadoFechamento.ValorTotalReforco + resultadoFechamento.ValorTotalPagamentoDinheiro - resultadoFechamento.ValorTotalSangria; resultadoFechamento.DiferencaNoCaixa = resultadoFechamento.ValorContabilizadoNoFechamento - resultadoFechamento.ValorTotalEstimadoEmEspecie; _repositorio.Inserir <ResultadoOperacaoFechamento>(resultadoFechamento); Task.Factory.StartNew(() => { EnviarEmail(resultadoFechamento); }); } } }