public PipelineExecutionResult Execute(IPipelineArgs <AddAddressRequest, AddAddressResult> subject)
        {
            if (subject.Request.Properties.ContainsKey("FromUCommerce"))
            {
                if (!(bool)subject.Request.Properties["FromUCommerce"])
                {
                    return(PipelineExecutionResult.Success);
                }
            }

            var cartServiceProvider = new CartServiceProvider();
            var cart = _mappingLibraryInternal.MapPurchaseOrderToCart(subject.Request.PurchaseOrder);

            var party     = _orderAddressMapper.Map(subject.Response.OrderAddress);
            var partyList = new List <Party> {
                party
            };

            if (subject.Request.ExistingOrderAddress == null)
            {
                var addPartiesRequest = new AddPartiesRequest(cart, partyList);
                addPartiesRequest.Properties["FromUCommerce"] = true;
                var addPartiesResult = cartServiceProvider.AddParties(addPartiesRequest);

                return(PipelineExecutionResult.Success);
            }

            var updatePartiesRequest = new UpdatePartiesRequest(cart, partyList);

            updatePartiesRequest.Properties["FromUCommerce"] = true;
            var updatePartiesResult = cartServiceProvider.UpdateParties(updatePartiesRequest);

            return(PipelineExecutionResult.Success);
        }
예제 #2
0
        private void EditBillingInformation(AddressSaveViewModel.Address billingAddress)
        {
            var cartServiceProvider = new CartServiceProvider();
            var cart  = GetCart();
            var party = new Party()
            {
                Address1      = billingAddress.Line1,
                Address2      = billingAddress.Line2,
                City          = billingAddress.City,
                Company       = billingAddress.CompanyName,
                Country       = _countries.Select().First(x => x.CountryId == billingAddress.CountryId).Name,
                Email         = billingAddress.EmailAddress,
                FirstName     = billingAddress.FirstName,
                LastName      = billingAddress.LastName,
                PartyId       = "Billing",
                PhoneNumber   = billingAddress.PhoneNumber,
                State         = billingAddress.State,
                ZipPostalCode = billingAddress.PostalCode
            };
            var partyList = new List <Party> {
                party
            };

            if (cart.Parties.Any(x => x.PartyId == party.PartyId))
            {
                var updatePartiesRequest = new UpdatePartiesRequest(cart, partyList);
                var updatePartiesResult  = cartServiceProvider.UpdateParties(updatePartiesRequest);

                return;
            }

            var addPartiesRequest = new AddPartiesRequest(cart, partyList);
            var addPartiesResult  = cartServiceProvider.AddParties(addPartiesRequest);
        }
예제 #3
0
        public ManagerResponse <CustomerResult, IEnumerable <Party> > UpdateParties(
            CommerceCustomer customer,
            IEnumerable <Party> parties)
        {
            Assert.ArgumentNotNull(customer, nameof(customer));
            Assert.ArgumentNotNull(parties, nameof(parties));

            var updatePartiesRequest = new UpdatePartiesRequest(customer, parties.ToList());

            var updatePartiesResult = this.customerServiceProvider.UpdateParties(updatePartiesRequest);

            return(new ManagerResponse <CustomerResult, IEnumerable <Party> >(updatePartiesResult, null));
        }
예제 #4
0
        /// <summary>
        /// Updates party info on a cart
        /// </summary>
        /// <param name="storefront">The Storefront Context</param>
        /// <param name="visitorContext">The Visitor Context</param>
        /// <param name="cart">the cart</param>
        /// <param name="parties">the party info</param>
        /// <returns>the updated cart</returns>
        protected virtual CartResult UpdatePartiesInCart([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] CommerceCart cart, [NotNull] List <CommerceParty> parties)
        {
            Assert.ArgumentNotNull(cart, "cart");
            Assert.ArgumentNotNull(parties, "parties");

            var request = new UpdatePartiesRequest(cart, parties.Cast <Party>().ToList());
            var result  = this.CartServiceProvider.UpdateParties(request);

            if (!result.Success)
            {
                Helpers.LogSystemMessages(result.SystemMessages, result);
            }

            return(result);
        }
예제 #5
0
        /// <summary>
        /// Updates the parties.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="user">The user.</param>
        /// <param name="parties">The parties.</param>
        /// <returns>The manager result where the success flag is returned as the Result.</returns>
        public virtual ManagerResponse <CustomerResult, bool> UpdateParties([NotNull] CommerceStorefront storefront, [NotNull] CommerceCustomer user, List <CommerceParty> parties)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNull(user, "user");
            Assert.ArgumentNotNull(parties, "parties");

            var request = new UpdatePartiesRequest(user, parties.Cast <Party>().ToList());
            var result  = this.CustomerServiceProvider.UpdateParties(request);

            if (!result.Success)
            {
                Helpers.LogSystemMessages(result.SystemMessages, result);
            }

            return(new ManagerResponse <CustomerResult, bool>(result, result.Success));
        }
        public void ShouldHandleInvalidCustomerId()
        {
            var request = new UpdatePartiesRequest(
                new CommerceCustomer {
                ExternalId = "1234"
            },
                new List <Party>(0)
                );
            var result = new CustomerResult();
            var args   = new ServicePipelineArgs(request, result);

            _processor.Process(args);

            result.Success.Should().Be(false);
            result.SystemMessages.Should().HaveCount(x => x > 0);
        }
        public void ShouldCallServiceWithCorrectArgs()
        {
            var customerId = Guid.NewGuid();

            var request = new UpdatePartiesRequest(
                new CommerceCustomer {
                ExternalId = customerId.ToString()
            },
                new List <Party> {
                new Party(), new Party()
            }
                );
            var result = new CustomerResult();
            var args   = new ServicePipelineArgs(request, result);

            _client.UpdateAddresses(Arg.Any <Guid>(), Arg.Any <AddressModel[]>()).Returns(new Response());
            _processor.Process(args);

            _client.Received().UpdateAddresses(Arg.Is(customerId), Arg.Is <AddressModel[]>(x => x.Length == request.Parties.Count));
        }
예제 #8
0
        public ManagerResponse <CustomerResult, bool> UpdateParties(string userName, List <IParty> parties)
        {
            Assert.ArgumentNotNull(userName, nameof(userName));
            Assert.ArgumentNotNull(parties, nameof(parties));

            var getUserResponse = GetUser(userName);

            if (getUserResponse.Result == null)
            {
                throw new ArgumentException("User not found, invalid userName", nameof(userName));
            }
            var customer = new CommerceCustomer {
                ExternalId = getUserResponse.Result.ExternalId
            };
            var request = new UpdatePartiesRequest(customer, parties.Select(p => p.ToCommerceParty()).ToList());
            var result  = CustomerServiceProvider.UpdateParties(request);

            result.WriteToSitecoreLog();

            return(new ManagerResponse <CustomerResult, bool>(result, result.Success));
        }
예제 #9
0
        /// <summary>
        /// Updates party info on a cart
        /// </summary>
        /// <param name="storefront">The Storefront Context</param>
        /// <param name="visitorContext">The Visitor Context</param>
        /// <param name="cart">the cart</param>
        /// <param name="parties">the party info</param>
        /// <returns>the updated cart</returns>
        protected virtual CartResult UpdatePartiesInCart([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] CommerceCart cart, [NotNull] List<CommerceParty> parties)
        {
            Assert.ArgumentNotNull(cart, "cart");
            Assert.ArgumentNotNull(parties, "parties");

            var request = new UpdatePartiesRequest(cart, parties.Cast<Party>().ToList());
            var result = this.CartServiceProvider.UpdateParties(request);
            if (!result.Success)
            {
                Helpers.LogSystemMessages(result.SystemMessages, result);
            }

            return result;
        }
예제 #10
0
        /// <summary>
        /// Updates the parties.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="user">The user.</param>
        /// <param name="parties">The parties.</param>
        /// <returns>The manager result where the success flag is returned as the Result.</returns>
        public virtual ManagerResponse<CustomerResult, bool> UpdateParties([NotNull] CommerceStorefront storefront, [NotNull] CommerceCustomer user, List<Party> parties)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNull(user, "user");
            Assert.ArgumentNotNull(parties, "parties");

            var request = new UpdatePartiesRequest(user, parties);
            var result = this.CustomerServiceProvider.UpdateParties(request);
            if (!result.Success)
            {
                Helpers.LogSystemMessages(result.SystemMessages, result);
            }

            return new ManagerResponse<CustomerResult, bool>(result, result.Success);
        }