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)); }
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)); }