async Task CreateLocalCartFromP4MCart(P4MCart p4mCart) { var localCart = ShoppingCart.GetCart(HttpContext); localCart.Shipping = (decimal)p4mCart.ShippingAmt; localCart.Tax = (decimal)p4mCart.Tax; if (p4mCart.Discounts != null) { foreach (var discount in p4mCart.Discounts) { localCart.Discounts.Add(new CartDiscount { DiscountCode = discount.Code, Description = discount.Description, Amount = (decimal)discount.Amount }); } } if (p4mCart.Items != null) { foreach (var item in p4mCart.Items) { var localItem = storeDB.Items.Find(Convert.ToInt32(item.Sku)); if (localItem != null) { localCart.AddToCart(localItem, (int)Math.Round(item.Qty)); } } } await storeDB.SaveChangesAsync(); }
public async Task <JsonResult> RestoreLastCart(P4MCart cart) { var result = new P4MBaseMessage(); try { await CreateLocalCartFromP4MCart(cart); } catch (Exception e) { result.Error = e.Message; } return(Json(result, JsonRequestBehavior.AllowGet)); }
P4MCart GetMostRecentCart(string localUsername) { var order = storeDB.Orders.Where(o => o.Username == localUsername).OrderByDescending(o => o.OrderDate).FirstOrDefault(); if (order == null) { return(null); } var p4mCart = new P4MCart { OrderId = order.OrderId.ToString(), SessionId = "Register", Date = order.OrderDate, PaymentType = "DB", Currency = "GBP", ShippingAmt = (double)order.Shipping, Tax = (double)order.Tax, Items = new List <P4MCartItem>() }; var items = storeDB.OrderDetails.Where(i => i.OrderId == order.OrderId); foreach (var cartItem in items) { var item = cartItem.Item;// storeDB.Items.Single(i => i.ID == cartItem.ItemId); p4mCart.Items.Add(new P4MCartItem { Make = item.Name, Sku = item.ID.ToString(), Desc = item.Name, Qty = cartItem.Quantity, Price = (double)item.Price, LinkToImage = item.ItemPictureUrl, }); } var discounts = storeDB.OrderDiscounts.Where(d => d.OrderId == order.OrderId); foreach (var disc in discounts) { if (p4mCart.Discounts == null) { p4mCart.Discounts = new List <P4MDiscount>(); } p4mCart.Discounts.Add(new P4MDiscount { Code = disc.DiscountCode.ToString(), Description = disc.Description, Amount = (double)disc.Amount }); } return(p4mCart); }
//async Task AddItemsToP4MCartAsync() //{ // // update P4M with the current cart details // var client = new HttpClient(); // var token = Request.Cookies["p4mToken"].Value; // client.SetBearerToken(token); // client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // var cart = GetP4MCartFromLocalCart(); // var cartMessage = new PostCartMessage { Cart = cart, ClearItems = true, Currency = "GBP", PaymentType = "DB", SessionId = cart.SessionId }; // var content = new System.Net.Http.ObjectContent<PostCartMessage>(cartMessage, new JsonMediaTypeFormatter()); // var result = await client.PostAsync(_urls.BaseApiAddress + "cart", content); // var messageString = await result.Content.ReadAsStringAsync(); // var message = JsonConvert.DeserializeObject<PostCartMessage>(messageString); // if (!message.Success) { // throw new Exception(message.Error); // } //} P4MCart GetP4MCartFromLocalCart() { var localCart = ShoppingCart.GetCart(this.HttpContext); this.Response.Cookies[ShoppingCart.CartSessionKey].Value = localCart.ShoppingCartId; var p4mCart = new P4MCart { SessionId = P4MConsts.SessionId, //localCart.ShoppingCartId, Date = DateTime.UtcNow, PaymentType = "PA", Currency = "GBP", ShippingAmt = (double)localCart.Shipping, Tax = (double)localCart.Tax, Items = new List <P4MCartItem>() }; foreach (var cartItem in localCart.Items) { var item = storeDB.Items.Single(i => i.ID == cartItem.ItemId); var picUrl = item.ItemPictureUrl; if (!picUrl.StartsWith("http") && !picUrl.StartsWith("/")) { picUrl = "http://localhost:3000/" + picUrl; } p4mCart.Items.Add(new P4MCartItem { Make = item.Name, Sku = item.ID.ToString(), Desc = item.Name, Qty = cartItem.Count, Price = (double)item.Price, LinkToImage = item.ItemPictureUrl, }); } if (localCart.Discounts != null && localCart.Discounts.Count > 0) { foreach (var disc in localCart.Discounts) { p4mCart.Discounts = new List <P4MDiscount> { new P4MDiscount { Code = disc.DiscountCode, Description = disc.Description, Amount = (double)disc.Amount } } } ; } return(p4mCart); }