Ejemplo n.º 1
0
        public Task Invoke()
        {
            _logger.LogInformation("> PedidoPagamentoSituacaoJob: Iniciando");
            var pedidosRealizados = _pedidoRepository.ObterTodosPedidosPorSituacao(PedidoSituacaoConstant.PEDIDO_REALIZADO);

            foreach (var pedido in pedidosRealizados)
            {
                string situacao    = null;
                var    transaction = _gerenciarPagarMe.ObterTransacao(pedido.TransactionId);

                int toleranciaDias = _configuration.GetValue <int>("Pagamento:PagarMe:BoletoDiaExpiracao") + _configuration.GetValue <int>("Pagamento:PagarMe:BoletoDiaToleranciaVencido");
                if (transaction.Status == TransactionStatus.WaitingPayment && transaction.PaymentMethod == PaymentMethod.Boleto && DateTime.Now > pedido.DataRegistro.AddDays(toleranciaDias))
                {
                    situacao = PedidoSituacaoConstant.PAGAMENTO_NAO_REALIZADO;
                    _produtoRepository.DevolverProdutosEstoque(pedido);
                }

                if (transaction.Status == TransactionStatus.Refused)
                {
                    situacao = PedidoSituacaoConstant.PAGAMENTO_REJEITADO;
                    _produtoRepository.DevolverProdutosEstoque(pedido);
                }

                if (transaction.Status == TransactionStatus.Authorized || transaction.Status == TransactionStatus.Paid)
                {
                    situacao = PedidoSituacaoConstant.PAGAMENTO_APROVADO;

                    //ENVIAR E-MAIL CONFIRMAÇÃO DO PAGAMENTO
                    _gerenciarEmail.EnviarConfirmacaoPagamento(pedido);
                }

                if (transaction.Status == TransactionStatus.Refunded)
                {
                    situacao = PedidoSituacaoConstant.ESTORNO;
                    _produtoRepository.DevolverProdutosEstoque(pedido);
                }

                if (situacao != null)
                {
                    TransacaoPagarMe transacaoPagarMe = _mapper.Map <Transaction, TransacaoPagarMe>(transaction);
                    transacaoPagarMe.Customer.Gender = (pedido.Cliente.Sexo == "M") ? Gender.Male : Gender.Female;

                    PedidoSituacao pedidoSituacao = new PedidoSituacao();
                    pedidoSituacao.PedidoId = pedido.Id;
                    pedidoSituacao.Situacao = situacao;
                    pedidoSituacao.Data     = transaction.DateUpdated.Value;
                    pedidoSituacao.Dados    = JsonConvert.SerializeObject(transacaoPagarMe);

                    _pedidoSituacaoRepository.Cadastrar(pedidoSituacao);

                    pedido.Situacao = situacao;
                    _pedidoRepository.Atualizar(pedido);
                }
            }

            _logger.LogInformation("> PedidoPagamentoSituacaoJob: Finalizado");

            return(Task.CompletedTask);
        }