internal BasketItem GetBasketItem(int index, Basket basket) { WishlistItem item = this[index]; BasketItem basketItem = BasketItemDataSource.CreateForProduct(item.ProductId, item.Desired, item.OptionList, item.KitList); basketItem.BasketId = basket.BasketId; if (item.Product.UseVariablePrice) { basketItem.Price = item.Price; if (basketItem.Price < item.Product.MinimumPrice) { basketItem.Price = item.Product.MinimumPrice; } if (basketItem.Price > item.Product.MaximumPrice) { basketItem.Price = item.Product.MaximumPrice; } } basketItem.WishlistItemId = item.WishlistItemId; basketItem.LineMessage = item.LineMessage; //COPY OVER ITEM INPUTS foreach (WishlistItemInput input in item.Inputs) { BasketItemInput cloneInput = new BasketItemInput(); cloneInput.InputFieldId = input.InputFieldId; cloneInput.InputValue = input.InputValue; basketItem.Inputs.Add(cloneInput); } return(basketItem); }
public async Task <UpdateBasketPayload> UpdateBasketItemAsync( BasketItemInput input, [ScopedService] ApplicationDbContext dbContext) { (Guid ownerId, Guid itemId, var quantity) = input; Model.Basket basket = await dbContext .Baskets.Where(b => b.OwnerId == ownerId) .Include(b => b.BasketItems) .FirstOrDefaultAsync(); if (basket == null) { var extensions = new Dictionary <string, object?>() { { "code", "1001" }, { "id", ownerId } }; Error error = new("Invalid basket owner id", extensions : extensions); throw new QueryException(error); } // Check that the item exists BasketItem?item = basket.BasketItems.FirstOrDefault(i => i.ItemId == itemId); if (item == null) { var extensions = new Dictionary <string, object?>() { { "code", "1002" }, { "id", itemId } }; Error error = new("Invalid basket item id", extensions : extensions); throw new QueryException(error); } if (quantity > 0) { item.Quantity = quantity; } else { basket.BasketItems.Remove(item); dbContext.Remove(item); } await dbContext.SaveChangesAsync(); return(new UpdateBasketPayload(basket)); }
public async Task <UpdateBasketPayload> AddBasketItemAsync( BasketItemInput input, [ScopedService] ApplicationDbContext dbContext) { (Guid ownerId, Guid itemId, var quantity) = input; if (quantity == 0) { Error error = new("Invalid item quantity", "1003"); throw new QueryException(error); } Model.Basket basket = await dbContext .Baskets.Where(b => b.OwnerId == ownerId) .Include(b => b.BasketItems) .FirstOrDefaultAsync(); if (basket == null) { var extensions = new Dictionary <string, object?>() { { "code", "1001" }, { "id", ownerId } }; Error error = new("Invalid basket owner id", extensions : extensions); throw new QueryException(error); } // See if there is an item with this ID already, if so then increase it's quantity BasketItem?item = basket.BasketItems.FirstOrDefault(i => i.ItemId == itemId); if (item != null) { item.Quantity += quantity; } else { item = new BasketItem { BasketId = basket.Id, ItemId = itemId, Quantity = quantity }; basket.BasketItems.Add(item); } await dbContext.SaveChangesAsync(); return(new UpdateBasketPayload(basket)); }
private async Task <dynamic> AddItemToBasket(Guid ownerId, Guid itemId, int quantity) { var basketItemInput = new BasketItemInput(ownerId, itemId, quantity); IExecutionResult result = await ServiceProvider.ExecuteRequestAsync( QueryRequestBuilder .New() .SetQuery(@" mutation AddBasketItem($input: BasketItemInput!) { addBasketItem(input: $input) { basket { id ownerId items { id name quantity } } } } ") .SetVariableValue(name : "input", value : basketItemInput) .Create() ); // Check against the snapshot, the existing basket was returned var json = await result.ToJsonAsync(); Assert.NotNull(json); ExpandoObject response = JsonConvert.DeserializeObject <ExpandoObject>(json, new ExpandoObjectConverter()); Assert.NotNull(response); return(response); }
public static void CollectProductTemplateInput(BasketItem item, Control container) { // COLLECT ANY ADDITIONAL INPUTS Product product = item.Product; if (product != null) { foreach (ProductTemplate template in product.ProductTemplates) { foreach (InputField input in template.InputFields) { //ONLY LOOK FOR CUSTOMER INPUT FIELDS if (!input.IsMerchantField) { //SEE IF WE CAN LOCATE THE CONTROL WebControl inputControl = (WebControl)AbleCommerce.Code.PageHelper.RecursiveFindControl(container, input.UniqueId); if (inputControl != null) { // look for existing input item BasketItemInput itemInput = item.Inputs.FirstOrDefault(bi => bi.InputFieldId == input.Id); if (itemInput == null) { // need to add the input item itemInput = new BasketItemInput(); itemInput.InputFieldId = input.Id; itemInput.BasketItem = item; item.Inputs.Add(itemInput); } // update input value itemInput.InputValue = input.GetControlValue(inputControl); } } } } } }
public void ProcessRequest(HttpContext context) { HttpResponse Response = context.Response; //GET THE ORDER ID FROM THE URL int orderId = AlwaysConvert.ToInt(context.Request.QueryString["o"]); Order order = OrderDataSource.Load(orderId); if (order != null) { //MAKE SURE ORDER IS FOR CURRENT USER User user = AbleContext.Current.User; if (order.User != null && order.User.Id == user.Id) { //CLEAR THE EXISTING BASKET List <string> basketMessages = new List <string>(); Basket basket = user.Basket; IBasketService basketService = AbleContext.Resolve <IBasketService>(); basketService.Clear(basket); foreach (OrderItem item in order.Items) { if ((item.OrderItemType == OrderItemType.Product) && (!item.IsChildItem)) { Product product = item.Product; if ((product != null) && (product.Visibility != CommerceBuilder.Catalog.CatalogVisibility.Private)) { BasketItem basketItem; try { basketItem = BasketItemDataSource.CreateForProduct(item.Product.Id, item.Quantity, item.OptionList, item.KitList); basketItem.IsSubscription = item.IsSubscription; if (!item.IsSubscription && item.Product != null) { basketItem.IsSubscription = item.Product.IsSubscription; } basketItem.Frequency = item.Frequency; basketItem.FrequencyUnit = item.FrequencyUnit; } catch { string itemName = item.Name; if (!string.IsNullOrEmpty(item.VariantName)) { itemName += " (" + item.VariantName + ")"; } basketMessages.Add("The item " + itemName + " is no longer available."); basketItem = null; } if (basketItem != null) { //SEE IF A PRODUCT TEMPLATE IS ASSOCIATED foreach (ProductTemplate template in product.ProductTemplates) { if (template != null) { foreach (InputField inputField in template.InputFields) { if (!inputField.IsMerchantField) { //COPY OVER ANY CUSTOMER INPUTS BasketItemInput itemInput = new BasketItemInput(); itemInput.BasketItem = basketItem; itemInput.InputField = inputField; itemInput.InputValue = GetItemInputValue(item, inputField.Name); basketItem.Inputs.Add(itemInput); } } } } if ((basketItem.OrderItemType == OrderItemType.Product) && (basketItem.Product.UseVariablePrice)) { basketItem.Price = item.Price; } basketItem.Basket = basket; basket.Items.Add(basketItem); //WE HAVE TO SAVE THE BASKET IN CASE IT IS NOT YET CREATED basket.Save(); } } } } if (context.Session != null) { context.Session["BasketMessage"] = basketMessages; } Response.Redirect(NavigationHelper.GetBasketUrl()); } } Response.Redirect(NavigationHelper.GetHomeUrl()); }
public static Basket GetAcBasket(AutoGen.ShoppingCart shoppingcart, bool clearShipNTax) { TraceContext trace = WebTrace.GetTraceContext(); string traceKey = "GoogleCheckout.AC.AcHelper"; trace.Write(traceKey, "Begin AcHelper.GetAcBasket"); int basketId = AcHelper.GetAcBasketId(shoppingcart); trace.Write(traceKey, "Look for basket ID " + basketId.ToString()); Basket basket = BasketDataSource.Load(basketId, false); if (basket == null) { trace.Write(traceKey, "Basket not found. Creating New Basket."); basket = new Basket(); } else { //basket found. check if content hash matches string contentHash = GetReportedBasketHash(shoppingcart); if (contentHash.Equals(GetAcBasketHash(basket))) { //hash matched. basket has not changed. if (clearShipNTax) { ClearShippingAndTaxes(basket); } return(basket); } } trace.Write(traceKey, "Clear existing Basket contents and populate with Google Input."); basket.Clear(); if (shoppingcart.items != null) { trace.Write(traceKey, "Looping " + shoppingcart.items.Length.ToString() + " items in Google cart"); } foreach (Item thisItem in shoppingcart.items) { trace.Write(traceKey, "itemName: " + thisItem.itemname); BasketItem basketItem = new BasketItem(); basketItem.Name = thisItem.itemname; basketItem.Quantity = (short)thisItem.quantity; basketItem.Price = thisItem.unitprice.Value; XmlNode[] privateNodes = thisItem.merchantprivateitemdata.Any; foreach (XmlNode privateNode in privateNodes) { trace.Write(traceKey, "privateNode.Name: " + privateNode.Name); switch (privateNode.Name) { case "productId": basketItem.ProductId = AlwaysConvert.ToInt(privateNode.InnerText); break; case "orderItemType": basketItem.OrderItemType = (OrderItemType)AlwaysConvert.ToEnum(typeof(OrderItemType), privateNode.InnerText, OrderItemType.Product, true); break; case "shippable": basketItem.Shippable = (Shippable)AlwaysConvert.ToEnum(typeof(Shippable), privateNode.InnerText, Shippable.Yes, true); break; case "taxCodeId": basketItem.TaxCodeId = AlwaysConvert.ToInt(privateNode.InnerText); break; case "weight": basketItem.Weight = AlwaysConvert.ToDecimal(privateNode.InnerText); break; case "wrapStyleId": basketItem.WrapStyleId = AlwaysConvert.ToInt(privateNode.InnerText); break; case "optionList": basketItem.OptionList = privateNode.InnerText; break; case "giftMessage": basketItem.GiftMessage = privateNode.InnerText; break; case "lineMessage": basketItem.LineMessage = privateNode.InnerText; break; case "lastModifiedDate": basketItem.LastModifiedDate = AlwaysConvert.ToDateTime(privateNode.InnerText, LocaleHelper.LocalNow); break; case "orderBy": basketItem.OrderBy = AlwaysConvert.ToInt16(privateNode.InnerText); break; case "parentItemId": basketItem.ParentItemId = AlwaysConvert.ToInt(privateNode.InnerText); break; case "sku": basketItem.Sku = privateNode.InnerText; break; case "wishlistItemId": basketItem.WishlistItemId = AlwaysConvert.ToInt(privateNode.InnerText); break; case "basketItemKitProducts": List <string> kitList = new List <string>(); foreach (XmlNode subNode in privateNode.ChildNodes) { if (subNode.Name.Equals("kitProductId")) { int kitProductId = AlwaysConvert.ToInt(subNode.InnerText); KitProduct kitProd = KitProductDataSource.Load(kitProductId); if (kitProd != null) { kitList.Add(kitProductId.ToString()); } } } if (kitList.Count > 0) { basketItem.KitList = string.Join(",", kitList.ToArray()); } break; case "inputs": foreach (XmlNode subNode in privateNode.ChildNodes) { if (subNode.Name.Equals("itemInput")) { int inputFieldId = 0; foreach (XmlAttribute attr in subNode.Attributes) { if (attr.Name.Equals("inputFieldId")) { inputFieldId = AlwaysConvert.ToInt(attr.InnerText); break; } } InputField inputField = InputFieldDataSource.Load(inputFieldId); if (inputField != null) { BasketItemInput bInput = new BasketItemInput(); bInput.InputFieldId = inputFieldId; bInput.InputValue = subNode.InnerText; basketItem.Inputs.Add(bInput); } } } break; case "couponCode": basketItem.Sku = privateNode.InnerText; break; } } basket.Items.Add(basketItem); } trace.Write(traceKey, "Saving basket"); basket.Save(); string key = "Basket_" + basket.BasketId.ToString(); ContextCache.SetObject(key, basket); trace.Write(traceKey, "Basket created, returning to caller (End GetAcBasket)"); return(basket); }