コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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/");
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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);
        }