/// <summary> /// Removes the items. /// </summary> /// <param name="isCheckoutSession">If set to <c>true</c> [is checkout session].</param> /// <param name="lineIds">The line ids.</param> /// <returns>The updated cart.</returns> public async Task <Cart> RemoveItems(bool isCheckoutSession, IEnumerable <string> lineIds) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContextBase); CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext); SessionType sessionType = ServiceUtilities.GetSessionType(this.HttpContextBase, isCheckoutSession); string cartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, sessionType); Cart cart = await cartOperationsHandler.RemoveItems(cartId, lineIds); // For checkout sessions, reflect the changes in shopping cart as well. if (sessionType == SessionType.AnonymousCheckout || sessionType == SessionType.SignedInCheckout) { string shoppingCartId = null; if (sessionType == SessionType.AnonymousCheckout) { shoppingCartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, SessionType.AnonymousShopping); } else if (sessionType == SessionType.SignedInCheckout) { shoppingCartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, SessionType.SignedInShopping); } await cartOperationsHandler.RemoveItems(shoppingCartId, lineIds); } cart = await DataAugmenter.GetAugmentedCart(ecommerceContext, cart); return(cart); }
/// <summary> /// Adds the items. /// </summary> /// <param name="isCheckoutSession">If set to <c>true</c> [is checkout session].</param> /// <param name="cartLines">The cart lines.</param> /// <returns>The updated cart.</returns> public async Task <Cart> AddItems(bool isCheckoutSession, IEnumerable <CartLine> cartLines) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContextBase); CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext); SessionType sessionType = ServiceUtilities.GetSessionType(this.HttpContextBase, isCheckoutSession); string cartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, sessionType); foreach (CartLine cartLine in cartLines) { if (cartLine.Price != null && cartLine.Price != 0) { cartLine.IsPriceKeyedIn = true; } } Cart cart = await cartOperationsHandler.AddItems(cartId, cartLines, sessionType); if (cart != null) { ServiceUtilities.SetCartIdInResponseCookie(this.HttpContextBase, sessionType, cart.Id); } cart = await DataAugmenter.GetAugmentedCart(ecommerceContext, cart); return(cart); }
/// <summary> /// Gets the promotions. /// </summary> /// <param name="isCheckoutSession">If set to <c>true</c> [is checkout session].</param> /// <returns>The service response containing the applicable promotions.</returns> public async Task <ActionResult> GetPromotions(bool isCheckoutSession) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext); SessionType sessionType = ServiceUtilities.GetSessionType(this.HttpContext, isCheckoutSession); string cartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContext, sessionType); CartPromotions cartPromotions = await cartOperationsHandler.GetPromotions(cartId); return(this.Json(cartPromotions)); }
/// <summary> /// Updates the loyalty card identifier. /// </summary> /// <param name="isCheckoutSession">If set to <c>true</c> [is checkout session].</param> /// <param name="loyaltyCardId">The loyalty card identifier.</param> /// <returns>A response containing the updated shopping cart.</returns> public async Task <ActionResult> UpdateLoyaltyCardId(bool isCheckoutSession, string loyaltyCardId) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext); SessionType sessionType = ServiceUtilities.GetSessionType(this.HttpContext, isCheckoutSession); string cartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContext, sessionType); Cart cart = await cartOperationsHandler.UpdateLoyaltyCardId(cartId, loyaltyCardId); return(this.Json(cart)); }
/// <summary> /// Gets the card payment accept point. /// </summary> /// <param name="cardPaymentAcceptSettings">The card payment accept settings.</param> /// <returns>Returns payment response.</returns> public async Task <ActionResult> GetCardPaymentAcceptPoint(CardPaymentAcceptSettings cardPaymentAcceptSettings) { 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); CardPaymentAcceptPoint cardPaymentAcceptPoint = await cartOperationsHandler.GetCardPaymentAcceptPoint(cartId, cardPaymentAcceptSettings); return(this.Json(cardPaymentAcceptPoint)); }
/// <summary> /// Updates the line delivery specifications. /// </summary> /// <param name="lineDeliverySpecifications">The line delivery specifications.</param> /// <returns>The updated shopping cart.</returns> public async Task <ActionResult> UpdateLineDeliverySpecifications(IEnumerable <LineDeliverySpecification> lineDeliverySpecifications) { 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); Cart cart = await cartOperationsHandler.UpdateLineDeliverySpecifications(cartId, lineDeliverySpecifications); return(this.Json(cart)); }
/// <summary> /// Gets the line delivery options for shipping. /// </summary> /// <param name="lineShippingAddresses">The line shipping addresses.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns> /// The service response containing the available delivery options for the specified lines. /// </returns> public async Task <ActionResult> GetLineDeliveryOptionsForShipping(IEnumerable <LineShippingAddress> lineShippingAddresses, QueryResultSettings queryResultSettings) { 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); PagedResult <SalesLineDeliveryOption> lineDeliveryOptions = await cartOperationsHandler.GetLineDeliveryOptionsForShipping(cartId, lineShippingAddresses, queryResultSettings); return(this.Json(lineDeliveryOptions.Results)); }
/// <summary> /// Gets the order delivery options for shipping. /// </summary> /// <param name="shipToAddress">The ship to address.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>The service response containing the available delivery options.</returns> public async Task <ActionResult> GetOrderDeliveryOptionsForShipping(Address shipToAddress, QueryResultSettings queryResultSettings) { 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); PagedResult <DeliveryOption> deliveryOptions = await cartOperationsHandler.GetOrderDeliveryOptionsForShipping(cartId, shipToAddress, queryResultSettings); return(this.Json(deliveryOptions)); }
/// <summary> /// Sets the cart affiliation loyalty tiers. /// </summary> /// <param name="isCheckoutSession">If set to <c>true</c> [is checkout session].</param> /// <param name="tiers">The tiers.</param> /// <returns>Returns a null response.</returns> public async Task <ActionResult> SetCartAffiliationLoyaltyTiers(bool isCheckoutSession, IEnumerable <long> tiers) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext); SessionType sessionType = ServiceUtilities.GetSessionType(this.HttpContext, isCheckoutSession); string cartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContext, sessionType); await cartOperationsHandler.SetCartAffiliationLoyaltyTiers(cartId, tiers); return(this.Json(null)); }
/// <summary> /// Adds the or remove promotion code. /// </summary> /// <param name="isCheckoutSession">If set to <c>true</c> [is checkout session].</param> /// <param name="promotionCode">The promotion code.</param> /// <param name="isAdd">If set to <c>true</c> [is add].</param> /// <returns>The service response containing the updated shopping cart.</returns> public async Task <ActionResult> AddOrRemovePromotionCode(bool isCheckoutSession, string promotionCode, bool isAdd) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext); SessionType sessionType = ServiceUtilities.GetSessionType(this.HttpContext, isCheckoutSession); string cartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContext, sessionType); Cart cart = await cartOperationsHandler.AddOrRemovePromotionCode(cartId, promotionCode, isAdd); return(this.Json(cart)); }
/// <summary> /// Creates the order. /// </summary> /// <param name="cartTenderLines">The cart tender lines.</param> /// <param name="emailAddress">The email address.</param> /// <returns>The updated shopping cart response.</returns> public async Task <ActionResult> CreateOrder(IEnumerable <CartTenderLine> cartTenderLines, string emailAddress) { 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); SalesOrder salesOrder = await cartOperationsHandler.CreateOrder(cartId, cartTenderLines, emailAddress); ServiceUtilities.SetCartIdInResponseCookie(this.HttpContext, sessionType, null); return(this.Json(salesOrder)); }
/// <summary> /// Commences the checkout. /// </summary> /// <returns>Checkout cart.</returns> public async Task <Cart> CommenceCheckout() { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContextBase); CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext); string shoppingCartId; string previousCheckoutCartId; bool isSignedIn = this.HttpContextBase.Request.IsAuthenticated; if (isSignedIn) { shoppingCartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, SessionType.SignedInShopping); previousCheckoutCartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, SessionType.SignedInCheckout); } else { shoppingCartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, SessionType.AnonymousShopping); previousCheckoutCartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, SessionType.AnonymousCheckout); } // Shopping cart would be null if the user lands on the checkout page immediately after signing in. // In this case we need to claim the anonymous shopping cart and assign it to the signed in user, // because there is no explicit GetShoppingCart call, which implicitly does the claiming, in the checkout page. if (string.IsNullOrWhiteSpace(shoppingCartId) && isSignedIn) { Cart claimedShoppingCart = await this.GetCart(isCheckoutSession : true); shoppingCartId = claimedShoppingCart.Id; ServiceUtilities.SetCartIdInResponseCookie(this.HttpContextBase, SessionType.SignedInShopping, shoppingCartId); } Cart checkoutCart = await cartOperationsHandler.CommenceCheckout(shoppingCartId, previousCheckoutCartId); if (checkoutCart == null) { string message = string.Format("Unable to create a checkout cart from shopping cart id: {0}", shoppingCartId); throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_CartNotFound.ToString(), message); } // Update the checkout cart id cookie. SessionType sessionType = isSignedIn ? SessionType.SignedInCheckout : SessionType.AnonymousCheckout; ServiceUtilities.SetCartIdInResponseCookie(this.HttpContextBase, sessionType, checkoutCart.Id); checkoutCart = await DataAugmenter.GetAugmentedCart(ecommerceContext, checkoutCart); return(checkoutCart); }
/// <summary> /// Gets the cart. /// </summary> /// <param name="isCheckoutSession">If set to <c>true</c> [is checkout session].</param> /// <returns>The cart object.</returns> public async Task <Cart> GetCart(bool isCheckoutSession) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContextBase); CartOperationsHandler cartOperationsHandler = new CartOperationsHandler(ecommerceContext); SessionType sessionType = ServiceUtilities.GetSessionType(this.HttpContextBase, isCheckoutSession); string cartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, sessionType); Cart cart = null; if (sessionType == SessionType.AnonymousCheckout || sessionType == SessionType.SignedInCheckout) { cart = await cartOperationsHandler.GetCart(cartId); } else { if (sessionType == SessionType.AnonymousShopping) { if (!string.IsNullOrEmpty(cartId)) { cart = await cartOperationsHandler.GetCart(cartId); } } else if (sessionType == SessionType.SignedInShopping) { // Get the latest cart associated with the user. Cart activeAuthenticatedShoppingCart = await cartOperationsHandler.GetActiveShoppingCart(); string anonymousShoppingCartId = ServiceUtilities.GetCartIdFromRequestCookie(this.HttpContextBase, SessionType.AnonymousShopping); bool isAnonymousShoppingCartIdSet = !string.IsNullOrWhiteSpace(anonymousShoppingCartId); if ((activeAuthenticatedShoppingCart == null) && isAnonymousShoppingCartIdSet) { // Claim the shopping cart id present in the cookie. activeAuthenticatedShoppingCart = await cartOperationsHandler.ClaimAnonymousCart(anonymousShoppingCartId); } else if ((activeAuthenticatedShoppingCart != null) && isAnonymousShoppingCartIdSet) { // Move items from the anonymous shopping cart to the authenticated shopping cart. activeAuthenticatedShoppingCart = await cartOperationsHandler.MoveItemsBetweenCarts(anonymousShoppingCartId, activeAuthenticatedShoppingCart.Id, sessionType); } // Clear anonymous shopping cart identifier. ServiceUtilities.SetCartIdInResponseCookie(this.HttpContextBase, SessionType.AnonymousShopping, string.Empty); cart = activeAuthenticatedShoppingCart; } else { string message = string.Format("Invalid session type encountered: {0}.", sessionType); throw new NotSupportedException(message); } if (cart == null) { cart = await cartOperationsHandler.CreateEmptyCart(); } } ServiceUtilities.SetCartIdInResponseCookie(this.HttpContextBase, sessionType, cart.Id); cart = await DataAugmenter.GetAugmentedCart(ecommerceContext, cart); return(cart); }