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);
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 12
0
        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));
            }
        }
Esempio n. 14
0
        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();
 }
Esempio n. 16
0
        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));
            }
        }