/// <summary> /// Empties the cart and creates a new Guid /// </summary> public void Destroy() { CartSession = null; Versions = null; // deletes shopping cart from db and returns items to warehouse ApplicationContext.Current.Carts.DeleteShoppingCart(CartID); // generates a new id Guid g = Guid.NewGuid(); UniqueIdGenerator unique = UniqueIdGenerator.GetInstance(); string cartId = unique.GetBase32UniqueId(g.ToByteArray(), 20).ToLower(); CartID = cartId; DataBind(null); NeedRefresh(null, null); }
protected void lnkAddToBasket_Click(object sender, EventArgs e) { string CartID = String.Empty; Guid g = Guid.NewGuid(); UniqueIdGenerator unique = UniqueIdGenerator.GetInstance(); string cartId = unique.GetBase32UniqueId(g.ToByteArray(), 20).ToLower(); if (CartSession == null || CartSession.Count == 0) { CartID = cartId; CartSession = new List <SessionCart>(); } else { List <SessionCart> cSession = CartSession.OrderByDescending(c => c.DateAdded).ToList(); SessionCart sessionCart = cSession.First(); if (sessionCart.DateAdded.AddMinutes(Configuration.CartExpirationValue) < DateTime.Now) { RefreshCart(); CartID = cartId; } else { CartID = CartSession.First().Id; } } SHOPPING_CART cart = new SHOPPING_CART(); cart.ID = CartID; cart.FrontEnd = true; cart.CampaignID = CampaignID; cart.CustomerID = CurrentCustomer.Id; cart.DateAdded = DateTime.Now; cart.ProductID = ProductID; int num = 0; if (!Int32.TryParse(ddlSize.SelectedValue, out num)) { return; } cart.ProdAttrID = num; num = 0; if (!Int32.TryParse(ddlQuantity.SelectedValue, out num) || num == 0) { return; } cart.Quantity = num; // the versions list of lists is created each time the product popup is shown, and destroyed each time it is closed if (Version != null) { cart.ProductAttributeVersion = Version; } else { throw new ApplicationException("Session is compromised! Cannot proceed."); } SessionCart sC; try { // already in the cart if (CartSession != null && CartSession.Count > 0 && (sC = CartSession.Find(c => c.ProductAttributeId == cart.ProdAttrID)) != null) { // sum with old quantity cart.Quantity += sC.Quantity; ApplicationContext.Current.Carts.Update(cart, sC.Quantity); // updating session with last quantity and last prod-attr version sC.Quantity = cart.Quantity; sC.ProductAttributeVersion = cart.ProductAttributeVersion; } else { ApplicationContext.Current.Carts.Insert(cart); sC = new SessionCart(cart); CartSession.Add(sC); } TotalAmount = ApplicationContext.Current.Carts.GetShoppingCartTotalAmount(CartID); } catch (Exception ex) { //TODO log error Log(ex, ex.Message, ex.StackTrace, "Product.AddToCart"); List <int> qtyList; PRODUCT_ATTRIBUTE prodAttr = ApplicationContext.Current.Products.GetProductAvailability(cart.ProdAttrID, out qtyList); Version = prodAttr.Version; ddlQuantity.DataSource = qtyList; ddlQuantity.DataBind(); if (!qtyList.Contains(cart.Quantity)) { lblMessage.Text = Resources.Lang.InsufficientAvailabilityMessage; } if (qtyList.Count == 0) { ddlQuantity.Enabled = false; lnkAddToBasket.Enabled = false; loadProductAttributes(); } //refreshing the size ddl loadProductAttributes(); updPanelDDL.Update(); return; } Version = null; Response.Redirect("/cart/mycart/"); }
/// <summary> /// Adds a new product to this session cart /// </summary> /// <param name="CustomerID"></param> /// <param name="CampaignID"></param> /// <param name="ProductId"></param> /// <param name="ProdAttrId"></param> /// <param name="Quantity"></param> public void AddProductToCart(int CustomerID, int CampaignID, int ProductId, int ProdAttrId, int Quantity, string BrandName) { if (CartID == null) { Guid g = Guid.NewGuid(); UniqueIdGenerator unique = UniqueIdGenerator.GetInstance(); string cartId = unique.GetBase32UniqueId(g.ToByteArray(), 20).ToLower(); CartID = cartId; } SHOPPING_CART cart = new SHOPPING_CART(); cart.ID = CartID; cart.FrontEnd = false; cart.CampaignID = CampaignID; cart.CustomerID = CustomerID; cart.DateAdded = DateTime.Now; cart.ProductID = ProductId; cart.ProdAttrID = ProdAttrId; cart.Quantity = Quantity; cart.BrandName = BrandName; // the versions list of lists is created each time the product popup is shown, and destroyed each time it is closed if (Versions != null) { cart.ProductAttributeVersion = Versions.Where(x => x.Key == ProductId).FirstOrDefault().Value.Where(y => y.Key == ProdAttrId).FirstOrDefault().Value; } else { throw new ApplicationException("Session is compromised! Cannot proceed."); } if (CartSession == null) { CartSession = new List <SHOPPING_CART>(); } List <SHOPPING_CART> carts = CartSession; SHOPPING_CART sc; // already in the cart if (carts.Count > 0 && (sc = carts.Where(c => c.ID == cart.ID && c.ProdAttrID == cart.ProdAttrID).FirstOrDefault()) != null) { cart.Quantity += sc.Quantity; ApplicationContext.Current.Carts.Update(cart, sc.Quantity); // updating session with last quantity and last prod-attr version sc.Quantity = cart.Quantity; sc.ProductAttributeVersion = cart.ProductAttributeVersion; //sc = cart; } else { ApplicationContext.Current.Carts.Insert(cart); // already has the last version set from the context saving CartSession.Add(cart); } // refreshing session, optional //ApplicationContext.Current.Carts.GetShoppingCartItems(CartID); DataBind(CartSession); }
public string Insert(ORDERS Order, bool FrontEnd, bool SaveContext = true) { string retString = String.Empty; //if there is any used bonus, decrease the remainder if (Order.ORDER_BONUS.Count > 0) { BONUS bonus; foreach (ORDER_BONUS bon in Order.ORDER_BONUS) { bonus = _bonusDAO.GetById(bon.BonusID); // object must be detached from context, otherwise Version field for concurrency check will not be updated!!! Context.BONUS.Detach(bonus); // using the version that was initially retrieved from db // if another user modified this record an OptimisticConcurrencyException will be raised if (bon.Value > bonus.ValueRemainder) { //TODO think what to do with version //bonus.Version = bon.BONUS.Version; throw new System.Data.OptimisticConcurrencyException("Bonus not sufficient."); } bonus.ValueRemainder -= bon.Value; _bonusDAO.Update(bonus); bon.BONUS = null; } } CUSTOMER customer = _customerDAO.GetById(Order.CustomerID.Value); // for electronic payments insert directly if ((Order.PAYMENT.Type == (int)PaymentType.PP && Order.PAYMENT.PAYPAL_PAYMENT.TransactionStatus == "Completed") || (Order.PAYMENT.Type == (int)PaymentType.EP && Order.PAYMENT.EASYPAY_PAYMENT.TransactionStatus == "Success") || (Order.PAYMENT.Type == (int)PaymentType.CA && !FrontEnd && Order.Completed)) { if (!customer.FirstBuy.HasValue || !customer.FirstBuy.Value) { // set first buy of user customer.FirstBuy = true; _customerDAO.Update(customer, true, false); // first buy of this customer & invited by someone if (customer.InvitedFrom.HasValue) { insertCustomerBonus(customer); retString = "Bonus added to inviter " + customer.CUSTOMER2.Email; Util.Mailer.SendBonus(customer, customer.CUSTOMER2.Email, Configuration.BonusValue + " € bonus per ju ne FZone"); } } } Guid g = Guid.NewGuid(); UniqueIdGenerator unique = UniqueIdGenerator.GetInstance(); string vNum = unique.GetBase32UniqueId(g.ToByteArray(), 20).ToLower(); Order.VerificationNumber = vNum; _orderDAO.Insert(Order); // payment if (Order.PAYMENT != null) { Context.ObjectStateManager.ChangeObjectState(Order.PAYMENT, EntityState.Added); if (Order.PAYMENT.Type == (int)PaymentType.CA) { Context.ObjectStateManager.ChangeObjectState(Order.PAYMENT.CASH_PAYMENT, System.Data.EntityState.Added); } else if (Order.PAYMENT.Type == (int)PaymentType.PP) { Context.ObjectStateManager.ChangeObjectState(Order.PAYMENT.PAYPAL_PAYMENT, System.Data.EntityState.Added); } else if (Order.PAYMENT.Type == (int)PaymentType.EP) { Context.ObjectStateManager.ChangeObjectState(Order.PAYMENT.EASYPAY_PAYMENT, System.Data.EntityState.Added); } } if (SaveContext) { Context.SaveChanges(); } return(retString); }