コード例 #1
0
            /// <summary>
            /// Gets the delivery preferences.
            /// </summary>
            /// <returns>The delivery preference response object.</returns>
            public async Task <ActionResult> GetDeliveryPreferences()
            {
                EcommerceContext      ecommerceContext      = ServiceUtilities.GetEcommerceContext(this.HttpContext);
                CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext);

                SessionType sessionType = ServiceUtilities.GetSessionType(this.HttpContext, isCheckoutSession: true);
                string      cartId      = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContext, sessionType);

                CartDeliveryPreferences cartDeliveryPreferences = await cartOperationsHandler.GetDeliveryPreferences(cartId);

                return(this.Json(cartDeliveryPreferences));
            }
コード例 #2
0
            /// <summary>
            /// Gets delivery preferences applicable to the current checkout cart.
            /// </summary>
            /// <param name="shoppingCartId">The shopping cart identifier.</param>
            /// <returns>The applicable delivery preferences.</returns>
            /// <exception cref="System.ArgumentNullException">Thrown when shoppingCartId is null.</exception>
            public virtual async Task <CartDeliveryPreferences> GetDeliveryPreferences(string shoppingCartId)
            {
                if (string.IsNullOrWhiteSpace(shoppingCartId))
                {
                    throw new ArgumentNullException(nameof(shoppingCartId));
                }

                ManagerFactory          managerFactory          = Utilities.GetManagerFactory(this.EcommerceContext);
                ICartManager            cartManager             = managerFactory.GetManager <ICartManager>();
                CartDeliveryPreferences cartDeliveryPreferences = await cartManager.GetDeliveryPreferences(shoppingCartId);

                return(cartDeliveryPreferences);
            }
コード例 #3
0
            /// <summary>
            /// Gets the delivery preferences applicable for each sales line individually and combined.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The delivery preferences applicable to the request.</returns>
            private static GetDeliveryPreferencesServiceResponse GetDeliveryPreferences(GetDeliveryPreferencesServiceRequest request)
            {
                ThrowIf.Null(request, "request");
                ThrowIf.Null(request.RequestContext, "request.RequestContext");
                ThrowIf.Null(request.CartId, "request.CartId");

                // Try to load the transaction
                GetCartsDataRequest getCartDataRequest = new GetCartsDataRequest(new CartSearchCriteria {
                    CartId = request.CartId
                }, QueryResultSettings.SingleRecord);
                SalesTransaction salesTransaction = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <SalesTransaction> >(getCartDataRequest, request.RequestContext).PagedEntityCollection.SingleOrDefault();

                if (salesTransaction.ActiveSalesLines == null || !salesTransaction.ActiveSalesLines.Any())
                {
                    return(new GetDeliveryPreferencesServiceResponse(new CartDeliveryPreferences()));
                }

                var dataServiceRequest = new GetDeliveryPreferencesDataRequest(salesTransaction.ActiveSalesLines);

                dataServiceRequest.QueryResultSettings = QueryResultSettings.AllRecords;
                EntityDataServiceResponse <CartLineDeliveryPreference> dataServiceResponse = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <CartLineDeliveryPreference> >(dataServiceRequest, request.RequestContext);

                ReadOnlyCollection <CartLineDeliveryPreference> salesLineDeliveryPreferences = dataServiceResponse.PagedEntityCollection.Results;

                IEnumerable <string> salesLineIdsWithoutDeliveryPreferences = salesLineDeliveryPreferences.Where(sl => (sl.DeliveryPreferenceTypes == null || !sl.DeliveryPreferenceTypes.Any())).Select(sl => sl.LineId);

                if (salesLineIdsWithoutDeliveryPreferences.Any())
                {
                    string lineIds = string.Join(" ", salesLineIdsWithoutDeliveryPreferences);
                    var    message = string.Format("No delivery preferences could be retrieved for the sales line ids : {0}.", lineIds);
                    throw new ConfigurationException(ConfigurationErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToFindDeliveryPreferences, message);
                }

                IEnumerable <DeliveryPreferenceType> headerLevelDeliveryPreferences = GetHeaderLevelDeliveryPreferences(salesLineDeliveryPreferences);
                CartDeliveryPreferences cartDeliveryPreferences = new CartDeliveryPreferences(headerLevelDeliveryPreferences, salesLineDeliveryPreferences);

                return(new GetDeliveryPreferencesServiceResponse(cartDeliveryPreferences));
            }