Пример #1
0
        public RaiseResult Raise(EnfileirarEvent domainEvent)
        {
            RaiseResult result = new RaiseResult();

            var pedido = domainEvent.Pedido;

            try
            {
                Task.Run(async() =>
                {
                    var sku = pedido.Skus.FirstOrDefault();

                    var inserirCompraParceiroRequest = new Messages.InserirCompraParceiroRequest()
                    {
                        CompraParceiro = new Dtos.CompraParceiroDto()
                        {
                            IdCompra           = pedido.IdCompra,
                            IdCompraEntregaSku = sku.IdCompraEntregaSku,
                            IdProdutoParceiro  = sku.IdProdutoParceiro,
                            EmailEnvioAceito   = pedido.Cliente.EmailEnvioAceito,
                            EmailEnvioAtivacao = pedido.Cliente.EmailEnvioAtivacao,
                            DataEnvioAceite    = DateTime.Now,
                            DataStatusAceite   = DateTime.Now,
                            StatusAceite       = Convert.ToInt32(true).ToString(),
                            DataInclusao       = DateTime.Now
                        }
                    };

                    var inserirCompraParceiroResponse = await this._lojaHttpRepository.InserirCompraParceiro(inserirCompraParceiroRequest);

                    result.IsValid = inserirCompraParceiroResponse.Valido;

                    if (!result.IsValid)
                    {
                        result.Mensagem = new EventMessage
                        {
                            Content = "Não foi possível enfileirar pedido.",
                            Type    = MessageType.BusinessError
                        };
                    }
                }).GetAwaiter().GetResult();
            }
            catch (Exception ex)
            {
                result.IsValid  = false;
                result.Mensagem = new EventMessage
                {
                    Content = ex.InnerException.ToString(),
                    Type    = MessageType.ApplicationError
                };
            }
            return(result);
        }
Пример #2
0
        public RaiseResult Raise(AlterarStatusAceiteEvent domainEvent)
        {
            RaiseResult result = new RaiseResult();

            try
            {
                Task.Run(async() =>
                {
                    var alterar = await _compraParceiroRepository.AlterarStatusAceiteAsync(domainEvent.Compra.Map());
                }).GetAwaiter().GetResult();

                result.IsValid = true;
            }
            catch (Exception ex)
            {
                result.IsValid  = false;
                result.Mensagem = new EventMessage
                {
                    Content = ex.InnerException.ToString(),
                    Type    = MessageType.ApplicationError
                };
            }
            return(result);
        }
Пример #3
0
        public RaiseResult Raise(ObterUltimaEvent domainEvent)
        {
            RaiseResult result = new RaiseResult();

            try
            {
                Task.Run(async() =>
                {
                    domainEvent.Compra = await _compraParceiroRepository.ObterUltimaRecente();
                }).GetAwaiter().GetResult();

                result.IsValid = true;
            }
            catch (Exception ex)
            {
                result.IsValid  = false;
                result.Mensagem = new EventMessage
                {
                    Content = ex.InnerException.ToString(),
                    Type    = MessageType.ApplicationError
                };
            }
            return(result);
        }
Пример #4
0
        public RaiseResult Raise(EnviarCodigoClienteEvent domainEvent)
        {
            RaiseResult result = new RaiseResult();

            var pedido = domainEvent.Pedido;

            try
            {
                Task.Run(async() =>
                {
                    var enviarEmailsResult = new List <bool>();

                    var emailTipoCodigoAtivacao = await ObterDadosConfiguracao("EmailTipoCodigoAtivacaoBHN");

                    var skusAgrupados = pedido.Skus.GroupBy(x => x.IdSku);

                    foreach (var sku in skusAgrupados)
                    {
                        var compraEntregaSkus = pedido.Skus.Where(x => x.IdSku == sku.Key);

                        var enviarEmailRequest = pedido.Map(compraEntregaSkus);
                        enviarEmailRequest.Email.IdEmailTipo = int.Parse(emailTipoCodigoAtivacao);

                        var enviarEmailResponse = await _utilitarioHttpRepository.EnviarEmailOffline(enviarEmailRequest);
                        if (enviarEmailResponse.Valido)
                        {
                            foreach (var item in compraEntregaSkus)
                            {
                                var alterarStatusAtivacaoRequest = new Messages.AlterarStatusAtivacaoRequest()
                                {
                                    CompraAtivacao = new Dtos.AlterarStatusAtivacaoDto()
                                    {
                                        IdCompra           = pedido.IdCompra,
                                        IdCompraEntregaSku = item.IdCompraEntregaSku,
                                        DataEnvioAtivacao  = DateTime.Now
                                    }
                                };

                                var alterarStatusAtivacaoResponse = await this._lojaHttpRepository.AlterarStatusAtivacao(alterarStatusAtivacaoRequest);
                            }
                        }
                        enviarEmailsResult.Add(enviarEmailResponse.Valido);
                    }

                    result.IsValid = enviarEmailsResult.All(e => e == true);

                    if (!result.IsValid)
                    {
                        result.Mensagem = new EventMessage
                        {
                            Content = "Não foi possível enviar código pedido p/cliente.",
                            Type    = MessageType.BusinessError
                        };
                    }
                }).GetAwaiter().GetResult();
            }
            catch (Exception ex)
            {
                result.IsValid  = false;
                result.Mensagem = new EventMessage
                {
                    Content = ex.InnerException.ToString(),
                    Type    = MessageType.ApplicationError
                };
            }
            return(result);
        }
Пример #5
0
        public RaiseResult Raise(IntegrarERPEvent domainEvent)
        {
            RaiseResult result = new RaiseResult();

            var pedido = domainEvent.Pedido;

            try
            {
                Task.Run(async() =>
                {
                    var codigoUnidadeNegocio = await ObterDadosConfiguracao("CodUnidadeNegocio");

                    var sku = pedido.Skus.FirstOrDefault();

                    var enviarItemVirtualRequest = new Erp.Messages.EnviarItemVirtualRequest()
                    {
                        ItemVirtual = new Erp.Dtos.ItemEntradaVirtualDto()
                        {
                            GerencialId      = sku.GerencialId,
                            IdUnidadeNegocio = Convert.ToInt32(codigoUnidadeNegocio),
                            Sequencial       = sku.Sequencial,
                            Usuario          = "servicos-integracaoparceiro"
                        }
                    };
                    var enviarItemVirtualResponse = await this._erpHttpRepository.EnviarItemVirtual(enviarItemVirtualRequest);

                    var alterarStatusERPRequest = new Messages.AlterarStatusERPRequest()
                    {
                        CompraERP = new Dtos.CompraERPDto()
                        {
                            TentativasIntegracaoERP = !enviarItemVirtualResponse.Valido ? sku.TentativasIntegracaoERP + 1 : sku.TentativasIntegracaoERP,
                            IdCompra            = pedido.IdCompra,
                            IdCompraEntregaSku  = sku.IdCompraEntregaSku,
                            SequencialId        = sku.Sequencial,
                            StatusIntegracaoERP = (Convert.ToInt16(enviarItemVirtualResponse.Valido)).ToString(),
                            LogRetornoERP       = !enviarItemVirtualResponse.Valido ? String.Join(" | ", enviarItemVirtualResponse.Mensagens.Select(x => x.Conteudo)) : string.Empty,
                            DataIntegracaoERP   = DateTime.Now,
                            GerencialId         = sku.GerencialId
                        }
                    };
                    var alterarStatusERPResponse = await this._lojaHttpRepository.AlterarStatusERP(alterarStatusERPRequest);

                    result.IsValid = enviarItemVirtualResponse.Valido && alterarStatusERPResponse.Valido;

                    if (!result.IsValid)
                    {
                        result.Mensagem = new EventMessage
                        {
                            Content = "Não foi possível integrar ERP.",
                            Type    = MessageType.BusinessError
                        };
                    }
                }).GetAwaiter().GetResult();
            }
            catch (Exception ex)
            {
                result.IsValid  = false;
                result.Mensagem = new EventMessage
                {
                    Content = ex.InnerException.ToString(),
                    Type    = MessageType.ApplicationError
                };
            }
            return(result);
        }
Пример #6
0
        public RaiseResult Raise(IntegrarParceiroEvent domainEvent)
        {
            RaiseResult result = new RaiseResult();

            var pedido = domainEvent.Pedido;

            try
            {
                Task.Run(async() =>
                {
                    var sku = pedido.Skus.FirstOrDefault();

                    var gerarCodigoRequest = new Parceiro.Messages.GerarCodigoRequest()
                    {
                        GerarEGift = new Parceiro.Dtos.GerarEGiftDto()
                        {
                            ClienteId            = sku.ClienteId,
                            Hash                 = sku.Hash,
                            NumeroPedido         = pedido.IdCompra.ToString().PadLeft(12, '0'),
                            RequisicaoId         = sku.RequisicaoId,
                            SKUParceiro          = sku.SkuParceiro,
                            TentativasAnteriores = sku.TentativasIntegracao,
                            GerarCodigoAtivacao  = (sku.Tipo == Convert.ToInt32(true)),
                            Preco                = sku.Preco
                        }
                    };
                    var gerarCodigoResponse = await this._parceiroHttpRepository.GerarCodigo(gerarCodigoRequest);

                    var alterarStatusParceiroRequest = new Messages.AlterarStatusParceiroRequest()
                    {
                        CompraParceiro = new Dtos.AlterarStatusParceiroDto()
                        {
                            Hash = gerarCodigoResponse.Hash,
                            TentativasIntegracao     = !gerarCodigoResponse.Valido ? sku.TentativasIntegracao + 1 : sku.TentativasIntegracao,
                            Ativacao                 = gerarCodigoResponse.Ativacao,
                            ClienteId                = gerarCodigoResponse.ClienteId,
                            IdCompra                 = pedido.IdCompra,
                            IdCompraEntregaSku       = sku.IdCompraEntregaSku,
                            StatusIntegracaoParceiro = (Convert.ToInt16(gerarCodigoResponse.Valido)).ToString(),
                            LogRetornoParceiro       = !gerarCodigoResponse.Valido ? String.Join(" | ", gerarCodigoResponse.Mensagens.Select(x => x.Conteudo)) : string.Empty,
                            RequisicaoId             = gerarCodigoResponse.RequisicaoId,
                            DataIntegracaoParceiro   = DateTime.Now,
                        }
                    };
                    var alterarStatusParceiroResponse = await this._lojaHttpRepository.AlterarStatusParceiro(alterarStatusParceiroRequest);

                    result.IsValid = gerarCodigoResponse.Valido && alterarStatusParceiroResponse.Valido;

                    if (!result.IsValid)
                    {
                        result.Mensagem = new EventMessage
                        {
                            Content = "Não foi possível integrar pedido.",
                            Type    = MessageType.BusinessError
                        };
                    }
                }).GetAwaiter().GetResult();
            }
            catch (Exception ex)
            {
                result.IsValid  = false;
                result.Mensagem = new EventMessage
                {
                    Content = ex.InnerException.ToString(),
                    Type    = MessageType.ApplicationError
                };
            }
            return(result);
        }
Пример #7
0
        public RaiseResult Raise(GerarEGiftEvent domainEvent)
        {
            RaiseResult result = new RaiseResult()
            {
                Mensagem = new EventMessage()
            };

            try
            {
                Task.Run(async() =>
                {
                    try
                    {
                        var gerarEGift = domainEvent.EGift;

                        if (string.IsNullOrEmpty(gerarEGift.Hash))
                        {
                            var gerarHashResponse = await this._httpService.GerarHashEGift(new GenerateEGiftHashRequest()
                            {
                                ClienteId              = gerarEGift.ClienteId,
                                NumeroPedido           = gerarEGift.NumeroPedido,
                                Preco                  = gerarEGift.Preco,
                                ProductConfigutationId = gerarEGift.SKUParceiro,
                                RequisicaoId           = gerarEGift.RequisicaoId,
                                TentativasAnteriores   = gerarEGift.TentativasAnteriores
                            });

                            gerarEGift.ClienteId = gerarHashResponse.AccountId;
                            gerarEGift.Hash      = gerarHashResponse.EntityId;

                            if (gerarEGift.GerarCodigoAtivacao)
                            {
                                var gerarKeyResponse = await this._httpService.GerarKeyEGift(new GenerateEGiftKeyRequest()
                                {
                                    Hash      = gerarEGift.Hash,
                                    IdCliente = gerarEGift.ClienteId
                                });

                                gerarEGift.Ativacao = gerarKeyResponse.ActivationAccountNumber;

                                foreach (var mensagem in gerarKeyResponse.Mensagens)
                                {
                                    result.Mensagem.Content = result.Mensagem.Content.ConcatenarErros(mensagem.Conteudo);
                                }
                            }
                            else
                            {
                                gerarEGift.Ativacao = gerarHashResponse.ActivationUrl;
                            }

                            result.IsValid = true;
                        }
                        else if (gerarEGift.GerarCodigoAtivacao)
                        {
                            var gerarKeyResponse = await this._httpService.GerarKeyEGift(new GenerateEGiftKeyRequest()
                            {
                                Hash      = gerarEGift.Hash,
                                IdCliente = gerarEGift.ClienteId
                            });

                            foreach (var mensagem in gerarKeyResponse.Mensagens)
                            {
                                result.Mensagem.Content = result.Mensagem.Content.ConcatenarErros(mensagem.Conteudo);
                            }

                            gerarEGift.Ativacao = gerarKeyResponse.ActivationAccountNumber;

                            result.IsValid = true;
                        }
                    }
                    catch (BHNResponseException bhnEx)
                    {
                        result.IsValid          = false;
                        result.Mensagem.Content = result.Mensagem.Content.ConcatenarErros(bhnEx.ToString());

                        var erros = await _acaoEGiftRepository.ObterPorNumero((int)bhnEx.StatusCode);
                        if (erros.Any())
                        {
                            var acao = erros.Count() > 1
                                        ? (erros.FirstOrDefault(q => q.CodigoRetorno.ToLower() == bhnEx.ErrorCode.ToLower()) ?? new AcaoEGift()
                            {
                                Desfazer = false
                            })
                                        : erros.FirstOrDefault()
                            ;

                            domainEvent.EGift.DesfazimentoNecessario = acao.Desfazer;

                            if (!string.IsNullOrEmpty(acao.Descricao) && !string.IsNullOrEmpty(acao.Acao))
                            {
                                result.Mensagem.Content = result.Mensagem.Content.ConcatenarErros(acao.ToString());
                            }

                            if (acao.Desfazer)
                            {
                                var desfazimentoResponse = await _httpService.DesfazimentoEGift(new DesfazimentoEGiftRequest()
                                {
                                    RequisicaoId = domainEvent.EGift.RequisicaoId
                                });

                                domainEvent.EGift.DesfazimentoExecutado = desfazimentoResponse.Valido;

                                if (desfazimentoResponse.Valido)
                                {
                                    result.Mensagem.Content = result.Mensagem.Content.ConcatenarErros("Desfazimento realizado com sucesso.");
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                })
                .GetAwaiter()
                .GetResult()
                ;
            }
            catch (Exception e)
            {
                result.IsValid  = false;
                result.Mensagem = new EventMessage
                {
                    Content = e.InnerException.ToString(),
                    Type    = MessageType.ApplicationError
                };
            }
            return(result);
        }