public void ModifyAddress_UserNameNotInitialized_ShouldNotReturnAddress(Database db, IContactFactory contactFactory) { // arrange FakeSiteContext.Database = db; var accountManager = new MockAccountManager() { IsCurrentCustomerPartiesInitialized = true }; var orderManager = new MockOrderManager { IsAvailableCountriesInitialized = false }; var rep = new AccountRepository(accountManager, contactFactory, orderManager); var model = new PartyInputModelItem { Name = "fake" }; using (new Sitecore.Security.Accounts.UserSwitcher("null", false)) { // act var result = rep.ModifyAddress(model); // assert result.Addresses.Count.Should().Be(0); result.Countries.Count.Should().Be(0); result.Success.Should().BeFalse(); } }
public static CommerceParty ToParty(this PartyInputModelItem item) { var party = new CommerceParty { Address1 = item.Address1, City = item.City, Country = item.Country, ExternalId = item.ExternalId, Name = item.Name, PartyId = item.PartyId, State = item.Region, ZipPostalCode = item.ZipPostalCode }; return(party); }
public static CommerceParty ToNewBillingParty(this PartyInputModelItem item) { var party = new CommerceParty { Address1 = item.Address1, City = item.City, Country = item.Country, ExternalId = Guid.NewGuid().ToString(), Name = $"Billing_{item.Name}", PartyId = item.PartyId, State = item.Region, ZipPostalCode = item.ZipPostalCode }; return(party); }
public static Party ToNewShippingParty(this PartyInputModelItem item) { var party = new CommerceParty { Address1 = item.Address1, City = item.City, Country = item.Country, ExternalId = string.IsNullOrWhiteSpace(item.PartyId) || item.PartyId == "0" ? Guid.NewGuid().ToString() : item.PartyId, Name = $"Shipping_{item.Name}", PartyId = item.PartyId, State = item.Region, ZipPostalCode = item.ZipPostalCode }; return(party); }
/// <summary> /// To the party. /// </summary> /// <param name="item">The item.</param> /// <returns>The CommerceParty instance.</returns> public static CommerceParty ToNewBillingParty(this PartyInputModelItem item) { var party = new CommerceParty { Address1 = item.Address1, City = item.City, Country = item.Country, ExternalId = Guid.NewGuid().ToString(), Name = string.Format(CultureInfo.InvariantCulture, "{0}{1}", CommerceServerStorefrontConstants.CartConstants.BillingAddressNamePrefix, item.Name), PartyId = item.PartyId, State = item.State, ZipPostalCode = item.ZipPostalCode }; return(party); }
/// <summary> /// To the party. /// </summary> /// <param name="item">The item.</param> /// <returns>The CommerceParty instance.</returns> public static Party ToNewShippingParty(this PartyInputModelItem item) { var party = new CommerceParty { Address1 = item.Address1, City = item.City, Country = item.Country, ExternalId = string.IsNullOrWhiteSpace(item.PartyId) || item.PartyId == "0" ? Guid.NewGuid().ToString() : item.PartyId, Name = string.Format(CultureInfo.InvariantCulture, "{0}{1}", CommerceServerStorefrontConstants.CartConstants.ShippingAddressNamePrefix, item.Name), PartyId = item.PartyId, State = item.State, ZipPostalCode = item.ZipPostalCode }; return party; }
private void SetShippingMethods(CheckoutViewModel model) { var inputModel = new SetShippingMethodsInputModel(); var shipItemsLines = model.Cart.Lines.Where(l => model.LineShippingOptions[l.ExternalCartLineId].Name == "Ship items"); PartyInputModelItem address = GetPartyInputModelItem(); if (address != null) { inputModel.ShippingAddresses.Add(address); } else { return; } inputModel.OrderShippingPreferenceType = "1"; var shipItemsMethod = new ShippingMethodInputModelItem(); string shippingOptionID = GetShippingOptionID(model); shipItemsMethod.ShippingMethodID = shippingOptionID; shipItemsMethod.ShippingMethodName = model.ShippingOptions[shippingOptionID]; shipItemsMethod.ShippingPreferenceType = "1"; shipItemsMethod.PartyId = "0"; shipItemsMethod.LineIDs = shipItemsLines.Select(l => l.ExternalCartLineId).ToList(); inputModel.ShippingMethods.Add(shipItemsMethod); try { var response = CartManager.SetShippingMethods(CommerceUserContext.Current.UserId, inputModel); if (!response.ServiceProviderResult.Success || response.Result == null) { throw new Exception("Error setting shipping methods: " + string.Join(",", response.ServiceProviderResult.SystemMessages.Select(sm => sm.Message))); } model.Cart = response.Result; } catch (Exception e) { throw; } }
public void ModifyAddress_AddressesAndExternalIdInitialized_ShouldUpdateAndNextReturnAllAddresses(Database db, IContactFactory contactFactory) { // arrange FakeSiteContext.Database = db; var accountManager = new MockAccountManager() { IsCurrentCustomerPartiesInitialized = true }; var rep = new AccountRepository(accountManager, contactFactory, new MockOrderManager()); var model = new PartyInputModelItem { Name = "fake", ExternalId = "fake" }; // act var result = rep.ModifyAddress(model); // assert result.Addresses.Count.Should().BeGreaterThan(0); result.Countries.Count.Should().Be(0); result.Success.Should().BeTrue(); }
public JsonResult AddressModify(PartyInputModelItem model) { try { Assert.ArgumentNotNull(model, "model"); var validationResult = new BaseJsonResult(); this.ValidateModel(validationResult); if (validationResult.HasErrors) { return(Json(validationResult, JsonRequestBehavior.AllowGet)); } var result = _accountRepository.ModifyAddress(model); return(Json(result, JsonRequestBehavior.AllowGet)); } catch (Exception e) { _logger.LogError("AddressModify", this, e); return(Json(new BaseJsonResult("AddressModify", e), JsonRequestBehavior.AllowGet)); } }
public void ModifyAddress_NumberOfAddressesExeedes_ShouldReturnError(Database db, IContactFactory contactFactory) { // arrange FakeSiteContext.Database = db; var accountManager = new MockAccountManager() { IsCurrentCustomerPartiesInitialized = true, NumOfCurrentCustomerPartiesToInitialize = StorefrontManager.CurrentStorefront.MaxNumberOfAddresses + 1 }; var rep = new AccountRepository(accountManager, contactFactory, new MockOrderManager()); var model = new PartyInputModelItem { Name = "fake" }; // act var result = rep.ModifyAddress(model); // assert result.Addresses.Count.Should().Be(0); result.HasErrors.Should().BeTrue(); result.Errors.Count.Should().BeGreaterThan(0); result.Errors.Contains($"[{StorefrontConstants.SystemMessages.MaxAddressLimitReached}]").Should().BeTrue(); result.Success.Should().BeFalse(); }
public AddressListItemJsonResult ModifyAddress(PartyInputModelItem model) { var addresses = new List <CommerceParty>(); var userResponse = this.AccountManager.GetUser(Context.User.Name); var result = new AddressListItemJsonResult(userResponse.ServiceProviderResult); if (userResponse.ServiceProviderResult.Success && userResponse.Result != null) { var commerceUser = userResponse.Result; var customer = new CommerceCustomer { ExternalId = commerceUser.ExternalId }; var party = new CommerceParty { ExternalId = model.ExternalId, Name = model.Name, Address1 = model.Address1, City = model.City, Country = model.Country, State = model.State, ZipPostalCode = model.ZipPostalCode, PartyId = model.PartyId, IsPrimary = model.IsPrimary }; if (string.IsNullOrEmpty(party.ExternalId)) { // Verify we have not reached the maximum number of addresses supported. var numberOfAddresses = this.AllAddresses(result).Count; if (numberOfAddresses >= StorefrontManager.CurrentStorefront.MaxNumberOfAddresses) { var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.MaxAddressLimitReached); result.Errors.Add(string.Format(CultureInfo.InvariantCulture, message, numberOfAddresses)); result.Success = false; } else { party.ExternalId = Guid.NewGuid().ToString("B"); var response = this.AccountManager.AddParties(this.CurrentStorefront, customer, new List <Sitecore.Commerce.Entities.Party> { party }); result.SetErrors(response.ServiceProviderResult); if (response.ServiceProviderResult.Success) { addresses = this.AllAddresses(result); } result.Initialize(addresses, null); } } else { var response = this.AccountManager.UpdateParties(this.CurrentStorefront, customer, new List <Sitecore.Commerce.Entities.Party> { party }); result.SetErrors(response.ServiceProviderResult); if (response.ServiceProviderResult.Success) { addresses = this.AllAddresses(result); } result.Initialize(addresses, null); } } return(result); }
public JsonResult AddressModify(PartyInputModelItem model) { try { Assert.ArgumentNotNull(model, nameof(model)); var validationResult = this.CreateJsonResult(); if (validationResult.HasErrors) { return(Json(validationResult, JsonRequestBehavior.AllowGet)); } var addresses = new List <IParty>(); var result = new AddressListItemApiModel(); if (CommerceUserContext.Current != null) { var user = CommerceUserContext.Current; if (string.IsNullOrEmpty(model.ExternalId)) { // Verify we have not reached the maximum number of addresses supported. var numberOfAddresses = AllAddresses(result).Count; if (numberOfAddresses >= MaxNumberOfAddresses) { var message = DictionaryPhraseRepository.Current.Get("/Accounts/Max Address Limit Reached", "The maximum number of addresses ({0}) has been reached."); result.Errors.Add(string.Format(message, numberOfAddresses)); result.Success = false; } else { model.ExternalId = Guid.NewGuid().ToString("B"); var response = AccountManager.AddParties(user.UserName, new List <IParty> { model }); result.SetErrors(response.ServiceProviderResult); if (response.ServiceProviderResult.Success) { addresses = AllAddresses(result); } result.Initialize(addresses, null); } } else { var response = AccountManager.UpdateParties(user.UserName, new List <IParty> { model }); result.SetErrors(response.ServiceProviderResult); if (response.ServiceProviderResult.Success) { addresses = AllAddresses(result); } result.Initialize(addresses, null); } } return(Json(result, JsonRequestBehavior.AllowGet)); } catch (Exception e) { return(Json(new ErrorApiModel("AddressModify", e), JsonRequestBehavior.AllowGet)); } }
public JsonResult AddressModify(PartyInputModelItem model) { try { Assert.ArgumentNotNull(model, nameof(model)); var validationResult = this.CreateJsonResult(); if (validationResult.HasErrors) { return(this.Json(validationResult, JsonRequestBehavior.AllowGet)); } var addresses = new List <IParty>(); var user = this.CommerceUserContext.Current; var result = new AddressListItemApiModel(); var customer = new CommerceCustomer { ExternalId = user.UserId }; var party = new Party { ExternalId = model.ExternalId, FirstName = model.Name, LastName = string.Empty, Address1 = model.Address1, City = model.City, Country = model.Country, State = model.State, ZipPostalCode = model.ZipPostalCode, PartyId = model.PartyId, IsPrimary = model.IsPrimary }; if (string.IsNullOrEmpty(party.ExternalId)) { // Verify we have not reached the maximum number of addresses supported. int numberOfAddresses = this.AllAddresses(result).Count; if (numberOfAddresses >= this.MaxNumberOfAddresses) { var message = "Address limit reached"; result.Errors.Add(string.Format(CultureInfo.InvariantCulture, message, numberOfAddresses)); result.Success = false; } else { var response = this.AccountManager.AddParties(user.UserName, new List <IParty> { model }); result.SetErrors(response.ServiceProviderResult); if (response.ServiceProviderResult.Success) { addresses = this.AllAddresses(result); } result.Initialize(addresses, null); } } else { var response = this.AccountManager.UpdateParties(user.UserName, new List <IParty> { model }); result.SetErrors(response.ServiceProviderResult); if (response.ServiceProviderResult.Success) { addresses = this.AllAddresses(result); } result.Initialize(addresses, null); } return(this.Json(result, JsonRequestBehavior.AllowGet)); } catch (OpenIDConnectionClosedUnexpectedlyException e) { this.CleanNotAuthorizedSession(); return(this.Json(new ErrorApiModel("Login", e), JsonRequestBehavior.AllowGet)); } catch (Exception e) { return(this.Json(new ErrorApiModel("AddressModify", e), JsonRequestBehavior.AllowGet)); } }
private void SetShippingMethods(CheckoutViewModel model) { var inputModel = new SetShippingMethodsInputModel(); var digitalLines = model.Cart.Lines.Where(l => model.LineShippingOptions[l.ExternalCartLineId].Name == "Digital"); var shipItemsLines = model.Cart.Lines.Where(l => model.LineShippingOptions[l.ExternalCartLineId].Name == "Ship items"); PartyInputModelItem address = GetPartyInputModelItem(); string email = Request.Cookies["email"]?.Value; if (digitalLines.Any() && shipItemsLines.Any() && address != null && !string.IsNullOrWhiteSpace(email)) { inputModel.OrderShippingPreferenceType = "4"; } else if (digitalLines.Any() && !shipItemsLines.Any() && !string.IsNullOrWhiteSpace(email)) { inputModel.OrderShippingPreferenceType = "3"; } else if (!digitalLines.Any() && shipItemsLines.Any() && address != null) { inputModel.OrderShippingPreferenceType = "1"; } else { return; } if (new[] { "4", "1" }.Contains(inputModel.OrderShippingPreferenceType)) { if (address != null) { inputModel.ShippingAddresses.Add(address); } var shipItemsMethod = new ShippingMethodInputModelItem(); string shippingOptionID = GetShippingOptionID(model); shipItemsMethod.ShippingMethodID = CleanGuid(shippingOptionID); shipItemsMethod.ShippingMethodName = model.ShippingOptions[shippingOptionID]; shipItemsMethod.ShippingPreferenceType = "1"; shipItemsMethod.PartyId = "0"; shipItemsMethod.LineIDs = shipItemsLines.Select(l => l.ExternalCartLineId).ToList(); inputModel.ShippingMethods.Add(shipItemsMethod); } if (new[] { "4", "3" }.Contains(inputModel.OrderShippingPreferenceType)) { var emailMethod = new ShippingMethodInputModelItem(); Item emailItem = Context.Database.GetItem("/sitecore/Commerce/Commerce Control Panel/Shared Settings/Fulfillment Options/Digital/Email"); emailMethod.ShippingMethodID = CleanGuid(emailItem.ID.ToString()); emailMethod.ShippingMethodName = "Email"; emailMethod.ShippingPreferenceType = "3"; emailMethod.ElectronicDeliveryEmail = email; emailMethod.ElectronicDeliveryEmailContent = ""; emailMethod.LineIDs = digitalLines.Select(l => l.ExternalCartLineId).ToList(); inputModel.ShippingMethods.Add(emailMethod); } try { var response = CartManager.SetShippingMethods(CommerceUserContext.Current.UserId, inputModel); if (!response.ServiceProviderResult.Success || response.Result == null) { throw new Exception("Error setting shipping methods: " + string.Join(",", response.ServiceProviderResult.SystemMessages.Select(sm => sm.Message))); } model.Cart = response.Result; } catch (Exception e) { throw; } }
public AddressListItemJsonResult ModifyAddress(PartyInputModelItem model) { throw new NotImplementedException(); }
public JsonResult AddressModify(PartyInputModelItem model) { try { Assert.ArgumentNotNull(model, "model"); var validationResult = new BaseJsonResult(); this.ValidateModel(validationResult); if (validationResult.HasErrors) { return(Json(validationResult, JsonRequestBehavior.AllowGet)); } var addresses = new List <CommerceParty>(); var userResponse = this.AccountManager.GetUser(Context.User.Name); var result = new AddressListItemJsonResult(userResponse.ServiceProviderResult); if (userResponse.ServiceProviderResult.Success && userResponse.Result != null) { var commerceUser = userResponse.Result; var customer = new CommerceCustomer { ExternalId = commerceUser.ExternalId }; var party = new CommerceParty { ExternalId = model.ExternalId, Name = model.Name, Address1 = model.Address1, City = model.City, Country = model.Country, State = model.State, ZipPostalCode = model.ZipPostalCode, PartyId = model.PartyId, IsPrimary = model.IsPrimary }; if (string.IsNullOrEmpty(party.ExternalId)) { // Verify we have not reached the maximum number of addresses supported. int numberOfAddresses = this.AllAddresses(result).Count; if (numberOfAddresses >= StorefrontManager.CurrentStorefront.MaxNumberOfAddresses) { var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.MaxAddressLimitReached); result.Errors.Add(string.Format(CultureInfo.InvariantCulture, message, numberOfAddresses)); result.Success = false; } else { var response = this.AccountManager.AddParties(this.CurrentStorefront, customer, new List <CommerceParty> { party }); result.SetErrors(response.ServiceProviderResult); if (response.ServiceProviderResult.Success) { addresses = this.AllAddresses(result); } result.Initialize(addresses, null); } } else { var response = this.AccountManager.UpdateParties(this.CurrentStorefront, customer, new List <CommerceParty> { party }); result.SetErrors(response.ServiceProviderResult); if (response.ServiceProviderResult.Success) { addresses = this.AllAddresses(result); } result.Initialize(addresses, null); } } return(Json(result, JsonRequestBehavior.AllowGet)); } catch (Exception e) { CommerceLog.Current.Error("AddressModify", this, e); return(Json(new BaseJsonResult("AddressModify", e), JsonRequestBehavior.AllowGet)); } }