Пример #1
0
		// AddItemToCart(string, MenuItemView) => async void
		// Associates a given item with an order id and sets it in the database
		// PRODUCTION: This should be called from an AJAX POST/GET script. 
		public async Task AddItemToCart(string orderId,  MenuItemView item)//string optionId, Sauce sauce, string itemId, int quantity)
		{
			if (orderId != null && orderId != "" && item != null)
			{
				// see if there is already a menuitem with that comb
				OrderItems existingItem = await this.database.OrderItems.Where(x => x.OrderId == orderId && x.MenuItemId == item.Id && x.OptionId == item.OptionSelected).FirstOrDefaultAsync();
				
				// Entry point: Item does exist already in the cart
				if (existingItem != null)
				{
					// just in case - this shouldn't be possible since there is javascript verification and currently this is AJAX only.
					// However, this is here in case we have users who don't use JS or somehow validation doesn't catch it properly
					if (item.Quantity < 0)
					{
						existingItem.Quantity = 0;
						existingItem.Removed = true;
					}
					else
					{
						// we just update the changes
						existingItem.Quantity = item.Quantity;
						existingItem.Removed = false;
						existingItem.OptionId = item.OptionSelected;
						existingItem.IsHalfOrder = item.IsHalfOrder;
						existingItem.Sauce = item.Sauce;
						existingItem.SpiceLevel = item.SpiceLevel;
						existingItem.Created = DateTime.Now;
					}
					if (this.database.Entry(existingItem).State == EntityState.Detached)
					{
						this.database.OrderItems.Attach(existingItem);
					}
					this.database.Entry(existingItem).State = EntityState.Modified;
				} // end item exists and entry item doesn't exist
				else
				{
					// we create the new item
					existingItem = new OrderItems() { MenuItemId = item.Id, OrderId = orderId, Quantity = item.Quantity, IsHalfOrder = item.IsHalfOrder, OptionId = item.OptionSelected, SpiceLevel = item.SpiceLevel, Created = DateTime.Now };
					this.database.OrderItems.Add(existingItem);
				}
			}
			await this.database.SaveChangesAsync();
		}
Пример #2
0
		// UpdateItem(string, MenuItemView) => void
		// Takes an item and updates the parameters of it
		// PRODUCTION: This is called via AJAX
		public async Task UpdateItem(string orderItemId, string orderId, MenuItemView item)
		{
			// only execute if not null
			if (item != null)
			{
				var dbItem = await this.database.OrderItems.Where(x => x.Id == orderItemId).FirstOrDefaultAsync();
				// if it doesn't exist already, we just add it
				if (dbItem == null)
				{
					await AddItemToCart(orderId, item);
				}
				else if (dbItem.MenuItemId != item.Id)
				{
					await RemoveItemFromCart(orderId, dbItem.Id, dbItem.OptionId);
					await AddItemToCart(orderId, item);
				}
				else
				{
					dbItem.Created = DateTime.Now;
					dbItem.IsHalfOrder = item.IsHalfOrder;
					dbItem.OptionId = item.OptionSelected;
					dbItem.Quantity = item.Quantity;
					dbItem.Sauce = item.Sauce;
					dbItem.SpiceLevel = item.SpiceLevel;
					if (this.database.Entry(dbItem).State == EntityState.Detached)
					{
						this.database.OrderItems.Attach(dbItem);
					}
					this.database.Entry(dbItem).State = EntityState.Modified;
				}
			}
		}
Пример #3
0
		public async Task<string> AddToCart(string itemId, bool halfOrder, string optionId, int quantity, SpicyScale ? spiceLevel, Sauce ? sauce)
		{
			try
			{
				MenuItemView newItem = new MenuItemView() { IsHalfOrder = halfOrder, OptionSelected = optionId, Quantity = quantity, SpiceLevel = spiceLevel, Sauce = sauce };
				var dbItem = await SpicyGardenDbContext.Menu.Where(m => m.Id == itemId).FirstAsync();
				newItem.Id = dbItem.Id;
				
				HttpCookie c = Request.Cookies["blowme"];
				if (!AssertNonTampered(c["cid"], c["oid"], c))
				{
					RedirectToAction("Index");
				}
				var oid = c["oid"];
				await orderHandler.AddItemToCart(oid, newItem);
				return GenerateItemHtml(await this.SpicyGardenDbContext.OrderItems.Where(x => x.OrderId == oid && x.MenuItemId == itemId && x.Removed == false).FirstOrDefaultAsync());
			}
			catch (Exception e)
			{
				return "error";
			}

		}