public ActionResult AddressEdit(CustomerAddressEditModel model, int addressId, FormCollection form) { if (!_workContext.CurrentCustomer.IsRegistered()) return new HttpUnauthorizedResult(); var customer = _workContext.CurrentCustomer; //find address (ensure that it belongs to the current customer) var address = customer.Addresses.FirstOrDefault(a => a.Id == addressId); if (address == null) //address is not found return RedirectToRoute("CustomerAddresses"); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { address = model.Address.ToEntity(address); address.CustomAttributes = customAttributes; _addressService.UpdateAddress(address); return RedirectToRoute("CustomerAddresses"); } //If we got this far, something failed, redisplay form model.Address.PrepareModel( address: address, excludeProperties: true, addressSettings: _addressSettings, localizationService: _localizationService, stateProvinceService: _stateProvinceService, addressAttributeService: _addressAttributeService, addressAttributeParser: _addressAttributeParser, loadCountries: () => _countryService.GetAllCountries(_workContext.WorkingLanguage.Id), overrideAttributesXml: customAttributes); return View(model); }
public ActionResult AddressEdit(CustomerAddressModel model, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers)) return AccessDeniedView(); var customer = _customerService.GetCustomerById(model.CustomerId); if (customer == null) //No customer found with the specified id return RedirectToAction("List"); var address = _addressService.GetAddressById(model.Address.Id); if (address == null) //No address found with the specified id return RedirectToAction("Edit", new { id = customer.Id }); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { address = model.Address.ToEntity(address); address.CustomAttributes = customAttributes; _addressService.UpdateAddress(address); SuccessNotification(_localizationService.GetResource("Admin.Customers.Customers.Addresses.Updated")); return RedirectToAction("AddressEdit", new { addressId = model.Address.Id, customerId = model.CustomerId }); } //If we got this far, something failed, redisplay form PrepareAddressModel(model, address, customer, true); return View(model); }
public ActionResult AddressAdd(CustomerAddressEditModel model, FormCollection form) { if (!_workContext.CurrentCustomer.IsRegistered()) return new HttpUnauthorizedResult(); var customer = _workContext.CurrentCustomer; //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { var address = model.Address.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; customer.Addresses.Add(address); _customerService.UpdateCustomer(customer); return RedirectToRoute("CustomerAddresses"); } //If we got this far, something failed, redisplay form model.Address.PrepareModel( address: null, excludeProperties: true, addressSettings:_addressSettings, localizationService:_localizationService, stateProvinceService: _stateProvinceService, addressAttributeService: _addressAttributeService, addressAttributeParser: _addressAttributeParser, loadCountries: () => _countryService.GetAllCountries(_workContext.WorkingLanguage.Id), overrideAttributesXml: customAttributes); return View(model); }
public ActionResult AddressCreate(CustomerAddressModel model, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers)) return AccessDeniedView(); var customer = _customerService.GetCustomerById(model.CustomerId); if (customer == null) //No customer found with the specified id return RedirectToAction("List"); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { var address = model.Address.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; address.Id = customer.Addresses.Count > 0 ? customer.Addresses.Max(x => x.Id) + 1 : 1; address._id = ObjectId.GenerateNewId().ToString(); customer.Addresses.Add(address); _customerService.UpdateCustomerinAdminPanel(customer); SuccessNotification(_localizationService.GetResource("Admin.Customers.Customers.Addresses.Added")); return RedirectToAction("AddressEdit", new { addressId = address.Id, customerId = model.CustomerId }); } //If we got this far, something failed, redisplay form PrepareAddressModel(model, null, customer, true); return View(model); }
public override ActionResult AddressCreate(CustomerAddressModel model, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageCustomers)) return AccessDeniedView(); var customer = _customerService.GetCustomerById(model.CustomerId); if (customer == null) //No customer found with the specified id return RedirectToAction("List"); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { var address = model.Address.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; customer.Addresses.Add(address); _customerService.UpdateCustomer(customer); SuccessNotification(_localizationService.GetResource("Admin.Customers.Customers.Addresses.Added")); //*********************** override begin ******************************************* //return RedirectToAction("AddressEdit", new { addressId = address.Id, customerId = model.CustomerId }); //%%%% ORIGINAL %%%%%%%%% //NJM: logic changed in AUConsignor to not redirect if child action (from AUConsignor) if (ControllerContext.IsChildAction) { ControllerContext.HttpContext.Response.Redirect(ControllerContext.HttpContext.Request.Url.ToString()); //PrepareCustomerModel(model, customer, true); return View(model); } else { //return RedirectToAction("Edit", customer.Id); //original 11111111 return RedirectToAction( "Edit", // Action name "AUConsignorAdmin", // Controller name new { id = customer.Id }); // Route values } //*********************** override end ******************************************* } //If we got this far, something failed, redisplay form PrepareAddressModel(model, null, customer, true); return View(model); }
public ActionResult NewShippingAddress(CheckoutShippingAddressModel model, FormCollection form) { //validation var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); if (cart.Count == 0) return RedirectToRoute("ShoppingCart"); if (_orderSettings.OnePageCheckoutEnabled) return RedirectToRoute("CheckoutOnePage"); if ((_workContext.CurrentCustomer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed)) return new HttpUnauthorizedResult(); if (!cart.RequiresShipping()) { _workContext.CurrentCustomer.ShippingAddress = null; _customerService.UpdateCustomer(_workContext.CurrentCustomer); return RedirectToRoute("CheckoutShippingMethod"); } //Pick up in store? if (_shippingSettings.AllowPickUpInStore) { if (model.PickUpInStore) { //customer decided to pick up in store //no shipping address selected _workContext.CurrentCustomer.ShippingAddress = null; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //set value indicating that "pick up in store" option has been chosen _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickUpInStore, true, _storeContext.CurrentStore.Id); //save "pick up in store" shipping method var pickUpInStoreShippingOption = new ShippingOption { Name = _localizationService.GetResource("Checkout.PickUpInStore.MethodName"), Rate = _shippingSettings.PickUpInStoreFee, Description = null, ShippingRateComputationMethodSystemName = null }; _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedShippingOption, pickUpInStoreShippingOption, _storeContext.CurrentStore.Id); //load next step return RedirectToRoute("CheckoutShippingMethod"); } //set value indicating that "pick up in store" option has not been chosen _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickUpInStore, false, _storeContext.CurrentStore.Id); } //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { //try to find an address with the same values (don't duplicate records) var address = _workContext.CurrentCustomer.Addresses.ToList().FindAddress( model.NewAddress.FirstName, model.NewAddress.LastName, model.NewAddress.PhoneNumber, model.NewAddress.Email, model.NewAddress.FaxNumber, model.NewAddress.Company, model.NewAddress.Address1, model.NewAddress.Address2, model.NewAddress.City, model.NewAddress.StateProvinceId, model.NewAddress.ZipPostalCode, model.NewAddress.CountryId, customAttributes); if (address == null) { address = model.NewAddress.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; _workContext.CurrentCustomer.Addresses.Add(address); } _workContext.CurrentCustomer.ShippingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); return RedirectToRoute("CheckoutShippingMethod"); } //If we got this far, something failed, redisplay form model = PrepareShippingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); }
public ActionResult OpcSaveBilling(FormCollection form) { try { //validation var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); if (cart.Count == 0) throw new Exception("Your cart is empty"); if (!_orderSettings.OnePageCheckoutEnabled) throw new Exception("One page checkout is disabled"); if ((_workContext.CurrentCustomer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed)) throw new Exception("Anonymous checkout is not allowed"); int billingAddressId; int.TryParse(form["billing_address_id"], out billingAddressId); if (billingAddressId > 0) { //existing address var address = _workContext.CurrentCustomer.Addresses.FirstOrDefault(a => a.Id == billingAddressId); if (address == null) throw new Exception("Address can't be loaded"); _workContext.CurrentCustomer.BillingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); } else { //new address var model = new CheckoutBillingAddressModel(); TryUpdateModel(model.NewAddress, "BillingNewAddress"); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } //validate model TryValidateModel(model.NewAddress); if (!ModelState.IsValid) { //model is not valid. redisplay the form with errors var billingAddressModel = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); billingAddressModel.NewAddressPreselected = true; return Json(new { update_section = new UpdateSectionJsonModel { name = "billing", html = this.RenderPartialViewToString("OpcBillingAddress", billingAddressModel) }, wrong_billing_address = true, }); } //try to find an address with the same values (don't duplicate records) var address = _workContext.CurrentCustomer.Addresses.ToList().FindAddress( model.NewAddress.FirstName, model.NewAddress.LastName, model.NewAddress.PhoneNumber, model.NewAddress.Email, model.NewAddress.FaxNumber, model.NewAddress.Company, model.NewAddress.Address1, model.NewAddress.Address2, model.NewAddress.City, model.NewAddress.StateProvinceId, model.NewAddress.ZipPostalCode, model.NewAddress.CountryId, customAttributes); if (address == null) { //address is not found. let's create a new one address = model.NewAddress.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; if (address.CountryId.HasValue && address.CountryId.Value > 0) { address.Country = _countryService.GetCountryById(address.CountryId.Value); } _workContext.CurrentCustomer.Addresses.Add(address); } _workContext.CurrentCustomer.BillingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); } if (cart.RequiresShipping()) { //shipping is required var shippingAddressModel = PrepareShippingAddressModel(prePopulateNewAddressWithCustomerFields: true); return Json(new { update_section = new UpdateSectionJsonModel { name = "shipping", html = this.RenderPartialViewToString("OpcShippingAddress", shippingAddressModel) }, goto_section = "shipping" }); } //shipping is not required _genericAttributeService.SaveAttribute<ShippingOption>(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedShippingOption, null, _storeContext.CurrentStore.Id); //load next step return OpcLoadStepAfterShippingMethod(cart); } catch (Exception exc) { _logger.Warning(exc.Message, exc, _workContext.CurrentCustomer); return Json(new { error = 1, message = exc.Message }); } }
public ActionResult OpcSaveShipping(FormCollection form) { try { //validation var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); if (cart.Count == 0) throw new Exception("Your cart is empty"); if (!_orderSettings.OnePageCheckoutEnabled) throw new Exception("One page checkout is disabled"); if ((_workContext.CurrentCustomer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed)) throw new Exception("Anonymous checkout is not allowed"); if (!cart.RequiresShipping()) throw new Exception("Shipping is not required"); //Pick up in store? if (_shippingSettings.AllowPickUpInStore) { var model = new CheckoutShippingAddressModel(); TryUpdateModel(model); if (model.PickUpInStore) { //customer decided to pick up in store //no shipping address selected _workContext.CurrentCustomer.ShippingAddress = null; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //set value indicating that "pick up in store" option has been chosen _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickUpInStore, true, _storeContext.CurrentStore.Id); //save "pick up in store" shipping method var pickUpInStoreShippingOption = new ShippingOption { Name = _localizationService.GetResource("Checkout.PickUpInStore.MethodName"), Rate = _shippingSettings.PickUpInStoreFee, Description = null, ShippingRateComputationMethodSystemName = null }; _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedShippingOption, pickUpInStoreShippingOption, _storeContext.CurrentStore.Id); //load next step return OpcLoadStepAfterShippingMethod(cart); } //set value indicating that "pick up in store" option has not been chosen _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickUpInStore, false, _storeContext.CurrentStore.Id); } int shippingAddressId; int.TryParse(form["shipping_address_id"], out shippingAddressId); if (shippingAddressId > 0) { //existing address var address = _workContext.CurrentCustomer.Addresses.FirstOrDefault(a => a.Id == shippingAddressId); if (address == null) throw new Exception("Address can't be loaded"); _workContext.CurrentCustomer.ShippingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); } else { //new address var model = new CheckoutShippingAddressModel(); TryUpdateModel(model.NewAddress, "ShippingNewAddress"); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } //validate model TryValidateModel(model.NewAddress); if (!ModelState.IsValid) { //model is not valid. redisplay the form with errors var shippingAddressModel = PrepareShippingAddressModel(selectedCountryId: model.NewAddress.CountryId); shippingAddressModel.NewAddressPreselected = true; return Json(new { update_section = new UpdateSectionJsonModel { name = "shipping", html = this.RenderPartialViewToString("OpcShippingAddress", shippingAddressModel) } }); } //try to find an address with the same values (don't duplicate records) var address = _workContext.CurrentCustomer.Addresses.ToList().FindAddress( model.NewAddress.FirstName, model.NewAddress.LastName, model.NewAddress.PhoneNumber, model.NewAddress.Email, model.NewAddress.FaxNumber, model.NewAddress.Company, model.NewAddress.Address1, model.NewAddress.Address2, model.NewAddress.City, model.NewAddress.StateProvinceId, model.NewAddress.ZipPostalCode, model.NewAddress.CountryId, customAttributes); if (address == null) { address = model.NewAddress.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //little hack here (TODO: find a better solution) //EF does not load navigation properties for newly created entities (such as this "Address"). //we have to load them manually //otherwise, "Country" property of "Address" entity will be null in shipping rate computation methods if (address.CountryId.HasValue) address.Country = _countryService.GetCountryById(address.CountryId.Value); if (address.StateProvinceId.HasValue) address.StateProvince = _stateProvinceService.GetStateProvinceById(address.StateProvinceId.Value); //other null validations if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; _workContext.CurrentCustomer.Addresses.Add(address); } _workContext.CurrentCustomer.ShippingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); } var shippingMethodModel = PrepareShippingMethodModel(cart, _workContext.CurrentCustomer.ShippingAddress); if (_shippingSettings.BypassShippingMethodSelectionIfOnlyOne && shippingMethodModel.ShippingMethods.Count == 1) { //if we have only one shipping method, then a customer doesn't have to choose a shipping method _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedShippingOption, shippingMethodModel.ShippingMethods.First().ShippingOption, _storeContext.CurrentStore.Id); //load next step return OpcLoadStepAfterShippingMethod(cart); } return Json(new { update_section = new UpdateSectionJsonModel { name = "shipping-method", html = this.RenderPartialViewToString("OpcShippingMethods", shippingMethodModel) }, goto_section = "shipping_method" }); } catch (Exception exc) { _logger.Warning(exc.Message, exc, _workContext.CurrentCustomer); return Json(new { error = 1, message = exc.Message }); } }
public ActionResult NewBillingAddress(CheckoutBillingAddressModel model, FormCollection form) { //validation var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); if (cart.Count == 0) return RedirectToRoute("ShoppingCart"); if (_orderSettings.OnePageCheckoutEnabled) return RedirectToRoute("CheckoutOnePage"); if ((_workContext.CurrentCustomer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed)) return new HttpUnauthorizedResult(); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { //try to find an address with the same values (don't duplicate records) var address = _workContext.CurrentCustomer.Addresses.ToList().FindAddress( model.NewAddress.FirstName, model.NewAddress.LastName, model.NewAddress.PhoneNumber, model.NewAddress.Email, model.NewAddress.FaxNumber, model.NewAddress.Company, model.NewAddress.Address1, model.NewAddress.Address2, model.NewAddress.City, model.NewAddress.StateProvinceId, model.NewAddress.ZipPostalCode, model.NewAddress.CountryId, customAttributes); if (address == null) { //address is not found. let's create a new one address = model.NewAddress.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; _workContext.CurrentCustomer.Addresses.Add(address); } _workContext.CurrentCustomer.BillingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); return RedirectToRoute("CheckoutShippingAddress"); } //If we got this far, something failed, redisplay form model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); }
public ActionResult AddressEdit(OrderAddressModel model, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(model.OrderId); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = order.ID }); var address = _addressService.GetAddressById(model.Address.Id); if (address == null) throw new ArgumentException("No address found with the specified id"); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { address = model.Address.ToEntity(address); address.CustomAttributes = customAttributes; _addressService.UpdateAddress(address); return RedirectToAction("AddressEdit", new { addressId = model.Address.Id, orderId = model.OrderId }); } //If we got this far, something failed, redisplay form model.OrderId = order.ID; model.Address = address.ToModel(); model.Address.FirstNameEnabled = true; model.Address.FirstNameRequired = true; model.Address.LastNameEnabled = true; model.Address.LastNameRequired = true; model.Address.EmailEnabled = true; model.Address.EmailRequired = true; model.Address.CompanyEnabled = _addressSettings.CompanyEnabled; model.Address.CompanyRequired = _addressSettings.CompanyRequired; model.Address.CountryEnabled = _addressSettings.CountryEnabled; model.Address.StateProvinceEnabled = _addressSettings.StateProvinceEnabled; model.Address.CityEnabled = _addressSettings.CityEnabled; model.Address.CityRequired = _addressSettings.CityRequired; model.Address.StreetAddressEnabled = _addressSettings.StreetAddressEnabled; model.Address.StreetAddressRequired = _addressSettings.StreetAddressRequired; model.Address.StreetAddress2Enabled = _addressSettings.StreetAddress2Enabled; model.Address.StreetAddress2Required = _addressSettings.StreetAddress2Required; model.Address.ZipPostalCodeEnabled = _addressSettings.ZipPostalCodeEnabled; model.Address.ZipPostalCodeRequired = _addressSettings.ZipPostalCodeRequired; model.Address.PhoneEnabled = _addressSettings.PhoneEnabled; model.Address.PhoneRequired = _addressSettings.PhoneRequired; model.Address.FaxEnabled = _addressSettings.FaxEnabled; model.Address.FaxRequired = _addressSettings.FaxRequired; //countries model.Address.AvailableCountries.Add(new SelectListItem { Text = _localizationService.GetResource("Admin.Address.SelectCountry"), Value = "0" }); foreach (var c in _countryService.GetAllCountries(true)) model.Address.AvailableCountries.Add(new SelectListItem { Text = c.Name, Value = c.ID.ToString(), Selected = (c.ID == address.CountryId) }); //states var states = address.Country != null ? _stateProvinceService.GetStateProvincesByCountryId(address.Country.ID, true).ToList() : new List<StateProvince>(); if (states.Count > 0) { foreach (var s in states) model.Address.AvailableStates.Add(new SelectListItem { Text = s.Name, Value = s.ID.ToString(), Selected = (s.ID == address.StateProvinceId) }); } else model.Address.AvailableStates.Add(new SelectListItem { Text = _localizationService.GetResource("Admin.Address.OtherNonUS"), Value = "0" }); //customer attribute services model.Address.PrepareCustomAddressAttributes(address, _addressAttributeService, _addressAttributeParser); return View(model); }
public ActionResult NewShippingAddress(CheckoutShippingAddressModel model, FormCollection form) { //validation var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); if (!cart.Any()) return RedirectToRoute("ShoppingCart"); if (_orderSettings.OnePageCheckoutEnabled) return RedirectToRoute("CheckoutOnePage"); if (_workContext.CurrentCustomer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed) return new HttpUnauthorizedResult(); if (!cart.RequiresShipping()) { _workContext.CurrentCustomer.ShippingAddress = null; _customerService.UpdateCustomer(_workContext.CurrentCustomer); return RedirectToRoute("CheckoutShippingMethod"); } //pickup point if (_shippingSettings.AllowPickUpInStore) { if (model.PickUpInStore) { //no shipping address selected _workContext.CurrentCustomer.ShippingAddress = null; _customerService.UpdateCustomer(_workContext.CurrentCustomer); var pickupPoint = form["pickup-points-id"].Split(new[] { "___" }, StringSplitOptions.None); var pickupPoints = _shippingService .GetPickupPoints(_workContext.CurrentCustomer.BillingAddress, pickupPoint[1], _storeContext.CurrentStore.Id).PickupPoints.ToList(); var selectedPoint = pickupPoints.FirstOrDefault(x => x.Id.Equals(pickupPoint[0])); if (selectedPoint == null) return RedirectToRoute("CheckoutShippingAddress"); var pickUpInStoreShippingOption = new ShippingOption { Name = string.Format(_localizationService.GetResource("Checkout.PickupPoints.Name"), selectedPoint.Name), Rate = selectedPoint.PickupFee, Description = selectedPoint.Description, ShippingRateComputationMethodSystemName = selectedPoint.ProviderSystemName }; _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedShippingOption, pickUpInStoreShippingOption, _storeContext.CurrentStore.Id); _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickupPoint, selectedPoint, _storeContext.CurrentStore.Id); return RedirectToRoute("CheckoutPaymentMethod"); } //set value indicating that "pick up in store" option has not been chosen _genericAttributeService.SaveAttribute<PickupPoint>(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickupPoint, null, _storeContext.CurrentStore.Id); } //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { //try to find an address with the same values (don't duplicate records) var address = _workContext.CurrentCustomer.Addresses.ToList().FindAddress( model.NewAddress.FirstName, model.NewAddress.LastName, model.NewAddress.PhoneNumber, model.NewAddress.Email, model.NewAddress.FaxNumber, model.NewAddress.Company, model.NewAddress.Address1, model.NewAddress.Address2, model.NewAddress.City, model.NewAddress.StateProvinceId, model.NewAddress.ZipPostalCode, model.NewAddress.CountryId, customAttributes); if (address == null) { address = model.NewAddress.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; _workContext.CurrentCustomer.Addresses.Add(address); } _workContext.CurrentCustomer.ShippingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); return RedirectToRoute("CheckoutShippingMethod"); } //If we got this far, something failed, redisplay form model = PrepareShippingAddressModel( selectedCountryId: model.NewAddress.CountryId, overrideAttributesXml: customAttributes); return View(model); }
public ActionResult NewBillingAddress(CheckoutBillingAddressModel model, FormCollection form) { //validation var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); if (!cart.Any()) return RedirectToRoute("ShoppingCart"); if (_orderSettings.OnePageCheckoutEnabled) return RedirectToRoute("CheckoutOnePage"); if (_workContext.CurrentCustomer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed) return new HttpUnauthorizedResult(); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { //try to find an address with the same values (don't duplicate records) var address = _workContext.CurrentCustomer.Addresses.ToList().FindAddress( model.NewAddress.FirstName, model.NewAddress.LastName, model.NewAddress.PhoneNumber, model.NewAddress.Email, model.NewAddress.FaxNumber, model.NewAddress.Company, model.NewAddress.Address1, model.NewAddress.Address2, model.NewAddress.City, model.NewAddress.StateProvinceId, model.NewAddress.ZipPostalCode, model.NewAddress.CountryId, customAttributes); if (address == null) { //address is not found. let's create a new one address = model.NewAddress.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; _workContext.CurrentCustomer.Addresses.Add(address); } _workContext.CurrentCustomer.BillingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //ship to the same address? if (_shippingSettings.ShipToSameAddress && model.ShipToSameAddress && cart.RequiresShipping()) { _workContext.CurrentCustomer.ShippingAddress = _workContext.CurrentCustomer.BillingAddress; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //reset selected shipping method (in case if "pick up in store" was selected) _genericAttributeService.SaveAttribute<ShippingOption>(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedShippingOption, null, _storeContext.CurrentStore.Id); _genericAttributeService.SaveAttribute<PickupPoint>(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickupPoint, null, _storeContext.CurrentStore.Id); //limitation - "Ship to the same address" doesn't properly work in "pick up in store only" case (when no shipping plugins are available) return RedirectToRoute("CheckoutShippingMethod"); } return RedirectToRoute("CheckoutShippingAddress"); } //If we got this far, something failed, redisplay form model = PrepareBillingAddressModel(cart, selectedCountryId: model.NewAddress.CountryId, overrideAttributesXml: customAttributes); return View(model); }
public ActionResult NewShippingAddress(CheckoutShippingAddressModel model, FormCollection form) { bool errors = false; string errorMessage = ""; //validation var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); if (cart.Count == 0) return RedirectToRoute("ShoppingCart"); if (_orderSettings.OnePageCheckoutEnabled) return RedirectToRoute("CheckoutOnePage"); if ((_workContext.CurrentCustomer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed)) return new HttpUnauthorizedResult(); if (!cart.RequiresShipping()) { _workContext.CurrentCustomer.ShippingAddress = null; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //return RedirectToRoute("CheckoutShippingMethod"); return RedirectToRoute("CheckoutConfirmAddress"); } //Pick up in store? if (_shippingSettings.AllowPickUpInStore) { if (model.PickUpInStore) { //customer decided to pick up in store //no shipping address selected _workContext.CurrentCustomer.ShippingAddress = null; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //set value indicating that "pick up in store" option has been chosen _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickUpInStore, true, _storeContext.CurrentStore.Id); //save "pick up in store" shipping method var pickUpInStoreShippingOption = new ShippingOption { Name = _localizationService.GetResource("Checkout.PickUpInStore.MethodName"), Rate = _shippingSettings.PickUpInStoreFee, Description = null, ShippingRateComputationMethodSystemName = null }; _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedShippingOption, pickUpInStoreShippingOption, _storeContext.CurrentStore.Id); //load next step //return RedirectToRoute("CheckoutShippingMethod"); return RedirectToRoute("CheckoutConfirmAddress"); } //set value indicating that "pick up in store" option has not been chosen _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.SelectedPickUpInStore, false, _storeContext.CurrentStore.Id); } //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { if (model.NewAddress.Id > 0) { var address = _workContext.CurrentCustomer.Addresses.FirstOrDefault(a => a.Id == model.NewAddress.Id); if (address != null) { var products = _workContext.CurrentCustomer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); if (products != null) { //foreach (var p in products) { for (int i = 0; i < products.Count; i++) { var p = products[i]; if (p != null) { var city = _zipcodeService.GetZipcodeByName(model.NewAddress.ZipPostalCode.Trim()); if (city != null) { ProductCities productcity = null; foreach (var item in city) { productcity = _productCitiesService.GetProductsCitiesByProductId(p.ProductId).Where(x => x.CityID == item.CityID).FirstOrDefault(); if (productcity != null) break; } if (productcity == null) { errors = true; string msg = p.Product.Name + " is not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; return RedirectToRoute("CheckoutShippingAddress"); } } else { errors = true; string msg = "Our services are not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; return RedirectToRoute("CheckoutShippingAddress"); } } } } if (errors == false) { address = model.NewAddress.ToEntity(address); address.CustomAttributes = customAttributes; _addressService.UpdateAddress(address); _workContext.CurrentCustomer.ShippingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); return RedirectToRoute("CheckoutConfirmAddress"); } } } else { //try to find an address with the same values (don't duplicate records) var address = _workContext.CurrentCustomer.Addresses.ToList().FindAddress( model.NewAddress.FirstName, model.NewAddress.LastName, model.NewAddress.PhoneNumber, model.NewAddress.Email, model.NewAddress.FaxNumber, model.NewAddress.Company, model.NewAddress.Address1, model.NewAddress.Address2, model.NewAddress.City, model.NewAddress.StateProvinceId, model.NewAddress.ZipPostalCode, model.NewAddress.CountryId, customAttributes); if (address == null) { var products = _workContext.CurrentCustomer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); if (products != null) { //foreach (var p in products) { for (int i = 0; i < products.Count; i++) { var p = products[i]; if (p != null) { var city = _zipcodeService.GetZipcodeByName(model.NewAddress.ZipPostalCode.Trim()); if (city != null) { ProductCities productcity = null; foreach (var item in city) { productcity = _productCitiesService.GetProductsCitiesByProductId(p.ProductId).Where(x => x.CityID == item.CityID).FirstOrDefault(); if (productcity != null) break; } if (productcity == null) { errors = true; string msg = p.Product.Name + " is not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; return RedirectToRoute("CheckoutShippingAddress"); } } else { errors = true; string msg = "Our services are not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; return RedirectToRoute("CheckoutShippingAddress"); } } } } if (errors == false) { address = model.NewAddress.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; _workContext.CurrentCustomer.Addresses.Add(address); } } else { var products = _workContext.CurrentCustomer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); if (products != null) { //foreach (var p in products) { for (int i = 0; i < products.Count; i++) { var p = products[i]; if (p != null) { var city = _zipcodeService.GetZipcodeByName(model.NewAddress.ZipPostalCode.Trim()); if (city != null) { ProductCities productcity = null; foreach (var item in city) { productcity = _productCitiesService.GetProductsCitiesByProductId(p.ProductId).Where(x => x.CityID == item.CityID).FirstOrDefault(); if (productcity != null) break; } if (productcity == null) { errors = true; string msg = p.Product.Name + " is not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; return RedirectToRoute("CheckoutShippingAddress"); } } else { errors = true; string msg = "Our services are not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; return RedirectToRoute("CheckoutShippingAddress"); } } } } if (errors == false) { _workContext.CurrentCustomer.ShippingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); } //return RedirectToRoute("CheckoutShippingMethod"); return RedirectToRoute("CheckoutConfirmAddress"); } } } //If we got this far, something failed, redisplay form model = PrepareShippingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); }
public ActionResult NewBillingAddress(CheckoutBillingAddressModel model, FormCollection form) { bool errors = false; string errorMessage = ""; //validation var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); if (cart.Count == 0) return RedirectToRoute("ShoppingCart"); if (_orderSettings.OnePageCheckoutEnabled) return RedirectToRoute("CheckoutOnePage"); if ((_workContext.CurrentCustomer.IsGuest() && !_orderSettings.AnonymousCheckoutAllowed)) return new HttpUnauthorizedResult(); //custom address attributes var customAttributes = form.ParseCustomAddressAttributes(_addressAttributeParser, _addressAttributeService); var customAttributeWarnings = _addressAttributeParser.GetAttributeWarnings(customAttributes); foreach (var error in customAttributeWarnings) { ModelState.AddModelError("", error); } if (ModelState.IsValid) { if (model.NewAddress.Id > 0) { var address = _workContext.CurrentCustomer.Addresses.FirstOrDefault(a => a.Id == model.NewAddress.Id); if (address != null) { //nyusoft var products = _workContext.CurrentCustomer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); if (products != null) { //foreach (var p in products) { for (int i = 0; i < products.Count; i++) { var p = products[i]; if (p != null) { var city = _zipcodeService.GetZipcodeByName(model.NewAddress.ZipPostalCode.Trim()); if (city != null) { ProductCities productcity = null; foreach (var item in city) { productcity = _productCitiesService.GetProductsCitiesByProductId(p.ProductId).Where(x => x.CityID == item.CityID).FirstOrDefault(); if (productcity != null) break; } if (productcity == null) { errors = true; string msg = p.Product.Name + " is not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; //return RedirectToRoute("CheckoutBillingAddress",model); model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); } } else { errors = true; string msg = "Our services are not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); //return RedirectToRoute("CheckoutBillingAddress"); } } } } if (errors == false) { address = model.NewAddress.ToEntity(address); address.CustomAttributes = customAttributes; _addressService.UpdateAddress(address); _workContext.CurrentCustomer.BillingAddress = address; _workContext.CurrentCustomer.ShippingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //return RedirectToRoute("CheckoutShippingAddress"); return RedirectToRoute("CheckoutConfirmAddress"); } else { //return RedirectToRoute("CheckoutBillingAddress"); model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); } } } else { //try to find an address with the same values (don't duplicate records) var address = _workContext.CurrentCustomer.Addresses.ToList().FindAddress( model.NewAddress.FirstName, model.NewAddress.LastName, model.NewAddress.PhoneNumber, model.NewAddress.Email, model.NewAddress.FaxNumber, model.NewAddress.Company, model.NewAddress.Address1, model.NewAddress.Address2, model.NewAddress.City, model.NewAddress.StateProvinceId, model.NewAddress.ZipPostalCode, model.NewAddress.CountryId, customAttributes); if (address == null) { var products = _workContext.CurrentCustomer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); if (products != null) { //foreach (var p in products) { for (int i = 0; i < products.Count; i++) { var p = products[i]; if (p != null) { var city = _zipcodeService.GetZipcodeByName(model.NewAddress.ZipPostalCode.Trim()); if (city != null) { ProductCities productcity = null; foreach (var item in city) { productcity = _productCitiesService.GetProductsCitiesByProductId(p.ProductId).Where(x => x.CityID == item.CityID).FirstOrDefault(); if (productcity != null) break; } if (productcity == null) { errors = true; string msg = p.Product.Name + " is not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; //return RedirectToRoute("CheckoutBillingAddress"); model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); } } else { errors = true; string msg = "Our services are not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; //return RedirectToRoute("CheckoutBillingAddress"); model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); } } } } if (errors == false) { //address is not found. let's create a new one address = model.NewAddress.ToEntity(); address.CustomAttributes = customAttributes; address.CreatedOnUtc = DateTime.UtcNow; //some validation if (address.CountryId == 0) address.CountryId = null; if (address.StateProvinceId == 0) address.StateProvinceId = null; _workContext.CurrentCustomer.Addresses.Add(address); _workContext.CurrentCustomer.BillingAddress = address; _workContext.CurrentCustomer.ShippingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); return RedirectToRoute("CheckoutConfirmAddress"); } } else { var products = _workContext.CurrentCustomer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); if (products != null) { //foreach (var p in products) { for (int i = 0; i < products.Count; i++) { var p = products[i]; if (p != null) { var city = _zipcodeService.GetZipcodeByName(model.NewAddress.ZipPostalCode.Trim()); if (city != null) { ProductCities productcity = null; foreach (var item in city) { productcity = _productCitiesService.GetProductsCitiesByProductId(p.ProductId).Where(x => x.CityID == item.CityID).FirstOrDefault(); if (productcity != null) break; } if (productcity == null) { errors = true; string msg = p.Product.Name + " is not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; //return RedirectToRoute("CheckoutBillingAddress"); model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); } } else { errors = true; string msg = "Our services are not available on your zip code."; errorMessage = msg; TempData["message"] = errorMessage; //return RedirectToRoute("CheckoutBillingAddress"); model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); } } } } if (errors == false) { _workContext.CurrentCustomer.BillingAddress = address; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //return RedirectToRoute("CheckoutShippingAddress"); return RedirectToRoute("CheckoutConfirmAddress"); } } } } //If we got this far, something failed, redisplay form model = PrepareBillingAddressModel(selectedCountryId: model.NewAddress.CountryId); return View(model); }