/// <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)); }
/// <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); }
/// <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)); }