Ejemplo n.º 1
0
        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);
                    });
                }
            }
        }