예제 #1
0
        public async Task <IActionResult> DadosPagamento(CheckoutViewModel model)
        {
            model.EnderecosUsuario = await _enderecoStore.ObterDoUsuario(User.Identity.Name);

            model.Carrinho = await _carrinhoStore.ObterCarrinho(User.Identity.Name);

            if (model.Carrinho == null)
            {
                TempData["ERRO"] = "Não há itens no carrinho";
                return(RedirectToAction("Index", "Carrinho"));
            }
            if (!model.IsValid())
            {
                model.Erro = "Concorde com os termos";
                return(View(model));
            }


            var pedido = model.GerarPedido(model.Carrinho, model.EnderecosUsuario);
            await _pedidoService.SalvarPedido(pedido, User.Identity.Name);

            await _carrinhoService.LimparCarrinho(User.Identity.Name);

            return(View("ConfirmarPedido", pedido));
        }
예제 #2
0
        public override bool Validate(ModelState modelState, CheckoutViewModel viewModel)
        {
            var validationRules = new List <ValidationRuleItem <CheckoutViewModel> >()
            {
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.PhoneNumber)),
                    Rule         = model => !string.IsNullOrWhiteSpace(viewModel.CustomerDetails?.PhoneNumber),
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.PhoneNumber)),
                    Rule         = model => _userValidationService.IsValidPhone(viewModel.CustomerDetails?.PhoneNumber),
                    ErrorMessage = "validation.phone".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.FirstName)),
                    Rule         = model => !string.IsNullOrWhiteSpace(model.CustomerDetails?.FirstName),
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.LastName)),
                    Rule         = model => !string.IsNullOrEmpty(model.CustomerDetails?.LastName),
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = nameof(viewModel.SelectedDeliveryMethod),
                    Rule         = model => model.SelectedDeliveryMethod.HasValue && model.SelectedDeliveryMethod.Value != Guid.Empty,
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.Email)),
                    Rule         = model => !string.IsNullOrEmpty(model.CustomerDetails?.Email),
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.Email)),
                    Rule         = model => _userValidationService.IsValidEmail(model.CustomerDetails?.Email),
                    ErrorMessage = "validation.email".AsWebSiteString()
                },
            };

            if (viewModel.IsBusinessCustomer)
            {
                validationRules.Add(new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = nameof(viewModel.SelectedCompanyAddressId),
                    Rule         = model => viewModel.SelectedCompanyAddressId.HasValue && viewModel.SelectedCompanyAddressId.Value != Guid.Empty,
                    ErrorMessage = "validation.required".AsWebSiteString()
                });

                return(viewModel.IsValid(validationRules, modelState));
            }

            validationRules.AddRange(new List <ValidationRuleItem <CheckoutViewModel> >()
            {
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.Address)),
                    Rule         = model => !string.IsNullOrWhiteSpace(model.CustomerDetails?.Address),
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.ZipCode)),
                    Rule         = model => !string.IsNullOrWhiteSpace(model.CustomerDetails?.ZipCode),
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.City)),
                    Rule         = model => !string.IsNullOrWhiteSpace(model.CustomerDetails?.City),
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
                new ValidationRuleItem <CheckoutViewModel>
                {
                    Field        = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.Country)),
                    Rule         = model => !string.IsNullOrWhiteSpace(model.CustomerDetails?.Country),
                    ErrorMessage = "validation.required".AsWebSiteString()
                },
            });

            if (viewModel.SignUp && !_securityContextService.GetIdentityUserSystemId().HasValue)
            {
                validationRules.Add(new ValidationRuleItem <CheckoutViewModel>
                {
                    Field = ToModelStateField(nameof(viewModel.CustomerDetails), nameof(viewModel.CustomerDetails.Email)),
                    Rule  = model =>
                    {
                        var existingUserId = _securityContextService.GetPersonSystemId(viewModel.CustomerDetails.Email);
                        return(existingUserId == null || !existingUserId.HasValue);
                    },
                    ErrorMessage = "validation.emailinused".AsWebSiteString()
                });
            }

            if (viewModel.ShowAlternativeAddress && !(string.IsNullOrEmpty(viewModel.AlternativeAddress.FirstName) && string.IsNullOrEmpty(viewModel.AlternativeAddress.LastName) && string.IsNullOrEmpty(viewModel.AlternativeAddress.Address) &&
                                                      string.IsNullOrEmpty(viewModel.AlternativeAddress.ZipCode) && string.IsNullOrEmpty(viewModel.AlternativeAddress.City) && string.IsNullOrEmpty(viewModel.AlternativeAddress.PhoneNumber)))
            {
                validationRules.AddRange(new List <ValidationRuleItem <CheckoutViewModel> >()
                {
                    new ValidationRuleItem <CheckoutViewModel>
                    {
                        Field        = ToModelStateField(nameof(viewModel.AlternativeAddress), nameof(viewModel.AlternativeAddress.PhoneNumber)),
                        Rule         = model => !string.IsNullOrWhiteSpace(viewModel.AlternativeAddress?.PhoneNumber),
                        ErrorMessage = "validation.required".AsWebSiteString()
                    },
                    new ValidationRuleItem <CheckoutViewModel>
                    {
                        Field        = ToModelStateField(nameof(viewModel.AlternativeAddress), nameof(viewModel.AlternativeAddress.PhoneNumber)),
                        Rule         = model => _userValidationService.IsValidPhone(viewModel.AlternativeAddress?.PhoneNumber),
                        ErrorMessage = "validation.phone".AsWebSiteString()
                    },
                    new ValidationRuleItem <CheckoutViewModel>
                    {
                        Field        = ToModelStateField(nameof(viewModel.AlternativeAddress), nameof(viewModel.AlternativeAddress.FirstName)),
                        Rule         = model => !string.IsNullOrWhiteSpace(model.AlternativeAddress?.FirstName),
                        ErrorMessage = "validation.required".AsWebSiteString()
                    },
                    new ValidationRuleItem <CheckoutViewModel>
                    {
                        Field        = ToModelStateField(nameof(viewModel.AlternativeAddress), nameof(viewModel.AlternativeAddress.LastName)),
                        Rule         = model => !string.IsNullOrEmpty(model.AlternativeAddress?.LastName),
                        ErrorMessage = "validation.required".AsWebSiteString()
                    },
                    new ValidationRuleItem <CheckoutViewModel>
                    {
                        Field        = ToModelStateField(nameof(viewModel.AlternativeAddress), nameof(viewModel.AlternativeAddress.Address)),
                        Rule         = model => !string.IsNullOrWhiteSpace(model.AlternativeAddress?.Address),
                        ErrorMessage = "validation.required".AsWebSiteString()
                    },
                    new ValidationRuleItem <CheckoutViewModel>
                    {
                        Field        = ToModelStateField(nameof(viewModel.AlternativeAddress), nameof(viewModel.AlternativeAddress.ZipCode)),
                        Rule         = model => !string.IsNullOrWhiteSpace(model.AlternativeAddress?.ZipCode),
                        ErrorMessage = "validation.required".AsWebSiteString()
                    },
                    new ValidationRuleItem <CheckoutViewModel>
                    {
                        Field        = ToModelStateField(nameof(viewModel.AlternativeAddress), nameof(viewModel.AlternativeAddress.City)),
                        Rule         = model => !string.IsNullOrWhiteSpace(model.AlternativeAddress?.City),
                        ErrorMessage = "validation.required".AsWebSiteString()
                    },
                    new ValidationRuleItem <CheckoutViewModel>
                    {
                        Field        = ToModelStateField(nameof(viewModel.AlternativeAddress), nameof(viewModel.AlternativeAddress.Country)),
                        Rule         = model => !string.IsNullOrWhiteSpace(model.AlternativeAddress?.Country),
                        ErrorMessage = "validation.required".AsWebSiteString()
                    },
                });
            }

            return(viewModel.IsValid(validationRules, modelState));
        }