예제 #1
0
        private async Task <bool> AplicarVoucher(RealizarPedidoCommand message, PedidoA.Pedido pedido)
        {
            if (!message.VoucherUtilizado)
            {
                return(true);
            }

            var voucher = await _voucherRepository.ObterVoucherPorCodigo(message.VoucherCodigo);

            if (voucher == null)
            {
                AdicionarErro("O voucher informado não existe!");
                return(false);
            }

            var voucherValidation = new VoucherValidation().Validate(voucher);

            if (!voucherValidation.IsValid)
            {
                voucherValidation.Errors.ToList().ForEach(m => AdicionarErro(m.ErrorMessage));
                return(false);
            }

            pedido.AtribuirVoucher(voucher);
            voucher.DebitarQuantidade();

            _voucherRepository.Atualizar(voucher);

            return(true);
        }
예제 #2
0
        public async Task <bool> ProcessarPagamento(PedidoA.Pedido pedido, RealizarPedidoCommand message)
        {
            var pedidoIniciado = new PedidoIniciadoIntegrationEvent
            {
                PedidoId         = pedido.Id,
                ClienteId        = pedido.ClienteId,
                Valor            = pedido.ValorTotal,
                TipoPagamento    = 1,
                NomeCartao       = message.NomeCartao,
                NumeroCartao     = message.NumeroCartao,
                MesAnoVencimento = message.ExpiracaoCartao,
                CVV = message.CvvCartao
            };
            var result = await _bus.RequestAsync <PedidoIniciadoIntegrationEvent, ResponseMessage>(pedidoIniciado);

            if (result.ValidationResult.IsValid)
            {
                return(true);
            }
            foreach (var erro in result.ValidationResult.Errors)
            {
                AdicionarErro(erro.ErrorMessage);
            }
            return(false);
        }
예제 #3
0
        private PedidoA.Pedido MapearPedido(RealizarPedidoCommand message)
        {
            var endereco = new Endereco
            {
                Logradouro  = message.Endereco.Logradouro,
                Numero      = message.Endereco.Numero,
                Complemento = message.Endereco.Complemento,
                Bairro      = message.Endereco.Bairro,
                Cep         = message.Endereco.Cep,
                Cidade      = message.Endereco.Cidade,
                Estado      = message.Endereco.Estado
            };

            var pedido = new PedidoA.Pedido(message.ClienteId, message.ValorTotal, message.PedidoItems.Select(PedidoItemDTO.ParaPedidoItem).ToList(),
                                            message.VoucherUtilizado, message.Desconto);

            pedido.AtribuirEndereco(endereco);
            return(pedido);
        }
예제 #4
0
        private bool ValidarPedido(PedidoA.Pedido pedido)
        {
            var pedidoValorOriginal = pedido.ValorTotal;
            var pedidoDesconto      = pedido.Desconto;

            pedido.CalcularValorPedido();

            if (pedido.ValorTotal != pedidoValorOriginal)
            {
                AdicionarErro("O valor total do pedido não confere com o cálculo do pedido");
                return(false);
            }

            if (pedido.Desconto != pedidoDesconto)
            {
                AdicionarErro("O valor total não confere com o cálculo do pedido");
                return(false);
            }

            return(true);
        }