/// <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> /// 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> /// Gets existing customer. /// </summary> /// <param name="httpContextBase">The HTTP context base.</param> /// <param name="idToken">The identifier token.</param> /// <param name="identityProviderType">Type of the identity provider.</param> /// <returns>The customer associated with the token.</returns> private async Task <Tuple <Customer, bool> > GetExistingCustomer(HttpContextBase httpContextBase, string idToken, IdentityProviderType identityProviderType) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(httpContextBase, idToken, identityProviderType); Customer currentCustomer = null; bool isRequestToLinkToExistingCustomerPending = false; try { CustomerOperationsHandler customerOperationsHandler = new CustomerOperationsHandler(ecommerceContext); currentCustomer = await customerOperationsHandler.GetCustomer(); } catch (UserAuthorizationException ex) { if (ex.ErrorResourceId == AuthenticationErrors.CommerceIdentityNotFound) { var message = "Customer read failed. No customer is associated with external identity. It is okay to create a new customer."; RetailLogger.Log.OnlineStoreNoCustomerAssociatedWithExternalId(ecommerceContext.IdentityProviderType.ToString(), message, ex); } else if (ex.ErrorResourceId == AuthenticationErrors.UserNotActivated) { var message = "Customer read failed. There is a pending request for linking the current external id to a customer account."; RetailLogger.Log.OnlineStoreInactiveLinkBetweenAnExistingCustomerAndExternalId(ecommerceContext.IdentityProviderType.ToString(), message, ex); isRequestToLinkToExistingCustomerPending = true; } else { throw; } } return(new Tuple <Customer, bool>(currentCustomer, isRequestToLinkToExistingCustomerPending)); }
/// <summary> /// Gets the delivery options information. /// </summary> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>Response containing delivery options available for the channel.</returns> public async Task <ActionResult> GetDeliveryOptionsInfo(QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); PagedResult <DeliveryOption> deliveryOptions = await orgUnitOperationsHandler.GetDeliveryOptionsInfo(queryResultSettings); return(this.Json(deliveryOptions.Results)); }
/// <summary> /// Gets the loyalty cards. /// </summary> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>Response containing the loyalty cards associated with the current user.</returns> public async Task <ActionResult> GetLoyaltyCards(QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); CustomerOperationsHandler customerOperationsHandler = new CustomerOperationsHandler(ecommerceContext); PagedResult <LoyaltyCard> loyaltyCards = await customerOperationsHandler.GetLoyaltyCards(queryResultSettings); return(this.Json(loyaltyCards.Results)); }
/// <summary> /// Generates the loyalty card identifier. /// </summary> /// <returns> /// Response containing a newly generated loyalty card. /// </returns> public async Task <ActionResult> GenerateLoyaltyCardId() { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); CustomerOperationsHandler customerOperationsHandler = new CustomerOperationsHandler(ecommerceContext); LoyaltyCard loyaltyCard = await customerOperationsHandler.GenerateLoyaltyCardId(); return(this.Json(loyaltyCard)); }
/// <summary> /// Gets the order history of a customer. /// </summary> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>A sakes order response.</returns> public async Task <ActionResult> GetOrderHistory(QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); CustomerOperationsHandler customerOperationsHandler = new CustomerOperationsHandler(ecommerceContext); PagedResult <SalesOrder> salesOrders = await customerOperationsHandler.GetOrderHistory(queryResultSettings); return(this.Json(salesOrders)); }
/// <summary> /// Updates the customer. /// </summary> /// <param name="customer">The customer.</param> /// <returns> /// The updated customer entity. /// </returns> public async Task <ActionResult> UpdateCustomer(Customer customer) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); CustomerOperationsHandler customerOperationsHandler = new CustomerOperationsHandler(ecommerceContext); Customer updatedCustomer = await customerOperationsHandler.UpdateCustomer(customer); return(this.Json(updatedCustomer)); }
/// <summary> /// Gets the product availability. /// </summary> /// <param name="productIds">The product ids.</param> /// <param name="channelId">The channel identifier.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>Response containing available quantities for the listings inquired.</returns> public async Task <ActionResult> GetProductAvailability(IEnumerable <long> productIds, long channelId, QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); PagedResult <ProductAvailableQuantity> productAvailableQuantities = await productOperationsHandler.GetProductAvailability(productIds, channelId, queryResultSettings); return(this.Json(productAvailableQuantities.Results)); }
/// <summary> /// Gets the products. /// </summary> /// <param name="productIds">The product ids.</param> /// <returns>Response containing simple products.</returns> public async Task <ActionResult> GetSimpleProducts(IEnumerable <long> productIds) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext); IEnumerable <SimpleProduct> simpleProducts = await productOperationsHandler.GetSimpleProducts(productIds); return(this.Json(simpleProducts)); }
/// <summary> /// Gets the card types. /// </summary> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>A response containing collection of card types supported by channel..</returns> public async Task <ActionResult> GetCardTypes(QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); PagedResult <CardTypeInfo> cardTypeInfoCollection = await orgUnitOperationsHandler.GetCardTypes(queryResultSettings); return(this.Json(cardTypeInfoCollection.Results)); }
/// <summary> /// Gets the channel tender types. /// </summary> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>Tender types response.</returns> public async Task <ActionResult> GetChannelTenderTypes(QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); PagedResult <TenderType> tenderTypes = await orgUnitOperationsHandler.GetTenderTypes(queryResultSettings); return(this.Json(tenderTypes.Results)); }
/// <summary> /// Gets the channel configuration. /// </summary> /// <returns>Response containing the channel configuration.</returns> public async Task <ActionResult> GetChannelConfiguration() { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); ChannelConfiguration channelConfiguration = await orgUnitOperationsHandler.GetChannelConfiguration(); return(this.Json(channelConfiguration)); }
/// <summary> /// Gets the nearby stores. /// </summary> /// <param name="latitude">The latitude.</param> /// <param name="longitude">The longitude.</param> /// <param name="distance">The distance.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>Response containing nearby stores.</returns> public async Task <ActionResult> GetNearbyStores(decimal latitude, decimal longitude, int distance, QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); PagedResult <OrgUnitLocation> orgUnitLocations = await orgUnitOperationsHandler.GetNearbyStores(latitude, longitude, distance, queryResultSettings); return(this.Json(orgUnitLocations.Results)); }
/// <summary> /// Gets the nearby stores with availability. /// </summary> /// <param name="latitude">The latitude.</param> /// <param name="longitude">The longitude.</param> /// <param name="searchRadius">The search radius.</param> /// <param name="itemUnits">The item units.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>Response containing stores with product availability.</returns> public async Task <ActionResult> GetNearbyStoresWithAvailability(decimal latitude, decimal longitude, double searchRadius, IEnumerable <ItemUnit> itemUnits, QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); OrgUnitOperationsHandler orgUnitOperationsHandler = new OrgUnitOperationsHandler(ecommerceContext); PagedResult <OrgUnitAvailability> orgUnitAvailabilities = await orgUnitOperationsHandler.GetNearbyStoresWithAvailability(latitude, longitude, searchRadius, itemUnits, queryResultSettings); return(this.Json(orgUnitAvailabilities.Results)); }
/// <summary> /// Gets the loyalty card status. /// </summary> /// <param name="loyaltyCardNumbers">The loyalty card numbers.</param> /// <returns>Response containing the statuses of the specified loyalty card numbers.</returns> public async Task <ActionResult> GetLoyaltyCardStatus(IEnumerable <string> loyaltyCardNumbers) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); RetailOperationsHandler retailOperationsHandler = new RetailOperationsHandler(ecommerceContext); PagedResult <LoyaltyCard> loyaltyCards = await retailOperationsHandler.GetLoyaltyCardStatus(loyaltyCardNumbers); return(this.Json(loyaltyCards.Results)); }
/// <summary> /// Retrieves the card payment accept result. /// </summary> /// <param name="cardPaymentResultAccessCode">The card payment result access code.</param> /// <returns>Returns payment response.</returns> public async Task <ActionResult> RetrieveCardPaymentAcceptResult(string cardPaymentResultAccessCode) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); RetailOperationsHandler retailOperationsHandler = new RetailOperationsHandler(ecommerceContext); CardPaymentAcceptResult cardPaymentAcceptResult = await retailOperationsHandler.RetrieveCardPaymentAcceptResult(cardPaymentResultAccessCode); return(this.Json(cardPaymentAcceptResult)); }
/// <summary> /// Gets the sales order. /// </summary> /// <param name="salesOrderSearchCriteria">The sales order search criteria.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>A response containing the sales orders inquired for.</returns> public async Task <ActionResult> GetSalesOrder(SalesOrderSearchCriteria salesOrderSearchCriteria, QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); SalesOrderOperationsHandler salesOrderOperationHandler = new SalesOrderOperationsHandler(ecommerceContext); PagedResult <SalesOrder> salesOrders = await salesOrderOperationHandler.GetSalesOrder(salesOrderSearchCriteria, queryResultSettings); return(this.Json(salesOrders.Results)); }
/// <summary> /// Gets the gift card information. /// </summary> /// <param name="giftCardId">The gift card identifier.</param> /// <returns>A response containing gift card information.</returns> public async Task <ActionResult> GetGiftCardInformation(string giftCardId) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); RetailOperationsHandler retailOperationsHandler = new RetailOperationsHandler(ecommerceContext); GiftCard giftCard = await retailOperationsHandler.GetGiftCardInformation(giftCardId); return(this.Json(giftCard)); }
/// <summary> /// Gets the state province information. /// </summary> /// <param name="countryCode">The country code.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>The states/provinces for the given country.</returns> public async Task <ActionResult> GetStateProvinceInfo(string countryCode, QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); RetailOperationsHandler retailOperationsHandler = new RetailOperationsHandler(ecommerceContext); PagedResult <StateProvinceInfo> stateProvinceInfoCollection = await retailOperationsHandler.GetStateProvinces(countryCode, queryResultSettings); return(this.Json(stateProvinceInfoCollection.Results)); }
/// <summary> /// Gets the country region information. /// </summary> /// <param name="languageId">The language identifier.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>Country info response.</returns> public async Task <ActionResult> GetCountryRegionInfo(string languageId, QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); RetailOperationsHandler retailOperationsHandler = new RetailOperationsHandler(ecommerceContext); PagedResult <CountryRegionInfo> countryRegionInfoCollection = await retailOperationsHandler.GetCountryRegionInfo(languageId, queryResultSettings); return(this.Json(countryRegionInfoCollection.Results)); }
/// <summary> /// Gets the loyalty card transactions. /// </summary> /// <param name="loyaltyCardNumber">The loyalty card number.</param> /// <param name="rewardPointId">The reward point identifier.</param> /// <param name="queryResultSettings">The query result settings.</param> /// <returns>A response containing transactions for the specified loyalty card.</returns> public async Task <ActionResult> GetLoyaltyCardTransactions(string loyaltyCardNumber, string rewardPointId, QueryResultSettings queryResultSettings) { EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext); RetailOperationsHandler retailOperationsHandler = new RetailOperationsHandler(ecommerceContext); PagedResult <LoyaltyCardTransaction> loyaltyCardTransactions = await retailOperationsHandler.GetLoyaltyCardTransactions( loyaltyCardNumber, rewardPointId, queryResultSettings); return(this.Json(loyaltyCardTransactions.Results)); }
/// <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)); }