예제 #1
0
        public string test(string para01, string para02)
        {
            string id     = para01;
            string pro_id = para02;

            PLAN pLAN = db.PLAN.Find(id);

            if (pLAN != null)
            {
                return("1");
            }
            PRODUCT_ATTRIBUTE pRODUCT = db.PRODUCT_ATTRIBUTE.Find(pro_id);

            if (pRODUCT == null)
            {
                return("2");
            }
            PLAN plAN = db.PLAN.Find(pro_id);

            if (pRODUCT != null)
            {
                return("3");
            }
            return("4");
        }
예제 #2
0
        public JsonResult creatRecord(string para01, string para02, string para03)
        {
            var b_id = para01;
            int num;

            int.TryParse(para02, out num);
            var date = Convert.ToDateTime(para03);

            SALES_LOT sALES_LOT = new SALES_LOT();

            PRODUCT pRODUCT = db.PRODUCT.Find(b_id);

            sALES_LOT.PRODUCT = pRODUCT;
            PRODUCT_ATTRIBUTE pRODUCT_ATTRIBUTE = db.PRODUCT_ATTRIBUTE.Find(pRODUCT.PRODUCT_ID);


            sALES_LOT.BATCH_ID           = b_id;
            sALES_LOT.PRODUCT.PRODUCT_ID = pRODUCT.PRODUCT_ID;
            sALES_LOT.PRODUCT.PRODUCT_ATTRIBUTE.PRODUCT_NAME = pRODUCT_ATTRIBUTE.PRODUCT_NAME;
            sALES_LOT.LOT_NUMBER = num;
            sALES_LOT.MONEY      = num * pRODUCT_ATTRIBUTE.SELL_PRICE * pRODUCT.DISCOUNT;
            sALES_LOT.LOT_DATE   = date;

            db.SALES_LOT.Add(sALES_LOT);
            db.SaveChanges();

            var list = db.SALES_LOT.Select(n => new { BATCH_ID = n.BATCH_ID, PRODUCT_ID = n.PRODUCT.PRODUCT_ID, PRODUCT_NAME = n.PRODUCT.PRODUCT_ATTRIBUTE.PRODUCT_NAME, LOT_NUMBER = n.LOT_NUMBER, MONEY = n.MONEY, LOT_DATE = n.LOT_DATE });

            return(Json(new { code = 0, msg = "", count = 1000, data = list }, JsonRequestBehavior.AllowGet));
        }
예제 #3
0
        public ActionResult DeleteConfirmed(string id)
        {
            PRODUCT_ATTRIBUTE pRODUCT_ATTRIBUTE = db.PRODUCT_ATTRIBUTE.Find(id);

            db.PRODUCT_ATTRIBUTE.Remove(pRODUCT_ATTRIBUTE);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
예제 #4
0
        private void saveAttributes(PRODUCT product)
        {
            string            prodAttrID, attrValID, availability;
            PRODUCT_ATTRIBUTE prodAttr;
            int id;

            foreach (ListViewDataItem item in lvAttributeValues.Items)
            {
                prodAttrID = attrValID = availability = String.Empty;

                prodAttrID   = ((HiddenField)item.FindControl("prodAttrID")).Value;
                attrValID    = ((HiddenField)item.FindControl("attrValID")).Value;
                availability = ((TextBox)item.FindControl("txtAvailability")).Text;

                id = 0;

                prodAttr = new PRODUCT_ATTRIBUTE();
                if (!String.IsNullOrEmpty(prodAttrID) && !String.IsNullOrEmpty(attrValID) && Int32.TryParse(prodAttrID, out id))
                {
                    // if availability is 0 and the attribute is never associated to this product, value is not considered
                    if (availability == "0" && id == 0)
                    {
                        continue;
                    }

                    ddlAttributes.Visible     = false;
                    prodAttr.Availability     = Int32.Parse(availability);
                    prodAttr.AttributeValueID = Int32.Parse(attrValID);
                    prodAttr.ProductID        = product.ID;
                    // old version from previous retrieval
                    prodAttr.Version = (byte[])lvAttributeValues.DataKeys[item.DataItemIndex].Value;
                    if (id != 0)
                    {
                        // not new
                        prodAttr.ID = id;
                        ApplicationContext.Current.Products.UpdateProductAttribute(prodAttr);
                    }
                    else
                    {
                        // new, quantity is set only this time
                        prodAttr.Quantity = prodAttr.Availability;
                        ApplicationContext.Current.Products.AddProductAttribute(prodAttr);
                        ((HiddenField)item.FindControl("prodAttrID")).Value = prodAttr.ID.ToString();
                        ((Label)item.FindControl("lblQuantity")).Text       = prodAttr.Quantity.ToString();
                    }
                }
            }

            // the list view is updated to reflect new versions after update
            List <PRODUCT_ATTRIBUTE> attributes = ApplicationContext.Current.Products.GetProductAttributes(ProductID);

            if (attributes.Count > 0)
            {
                populateAttributeValues(attributes.First().D_ATTRIBUTE_VALUE.AttributeID, attributes);
                updPanelAttributes.Update();
            }
        }
예제 #5
0
        public void UpdateProductAttribute(PRODUCT_ATTRIBUTE Attribute, bool Attach = true)
        {
            if (Attach)
            {
                Context.PRODUCT_ATTRIBUTE.Attach(Attribute);
            }
            var entry = Context.ObjectStateManager.GetObjectStateEntry(Attribute);

            entry.SetModifiedProperty("Availability");
        }
예제 #6
0
        public void UpdateProductAttribute(PRODUCT_ATTRIBUTE Attribute)
        {
            _productDAO.UpdateProductAttribute(Attribute);
            Context.SaveChanges();

            // EF maintains objects in context, so if during the same request the same object is read, it will not be loaded from db
            // but instead the context version will be used. Here the quantity property isn't updated, so context will have a 0 value for it
            // a refresh is needed to get the last version
            Context.Refresh(RefreshMode.StoreWins, Attribute);
        }
예제 #7
0
 public ActionResult Edit([Bind(Include = "PRODUCT_ID,SUPPLIER_ID,PRODUCT_NAME,EXP,PURCHASE_PRICE,SELL_PRICE,TOTAL")] PRODUCT_ATTRIBUTE pRODUCT_ATTRIBUTE)
 {
     if (ModelState.IsValid)
     {
         db.Entry(pRODUCT_ATTRIBUTE).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.SUPPLIER_ID = new SelectList(db.SUPPLIER, "SUPPLIER_ID", "SUPPLIER_NAME", pRODUCT_ATTRIBUTE.SUPPLIER_ID);
     return(View(pRODUCT_ATTRIBUTE));
 }
예제 #8
0
        public void Update(SHOPPING_CART Entity, int PreviousQuantity)
        {
            PRODUCT_ATTRIBUTE prodAttr = _productDAO.GetProductAttributeById(Entity.ProdAttrID);

            Context.PRODUCT_ATTRIBUTE.Detach(prodAttr);

            if (PreviousQuantity != Entity.Quantity)
            {
                int difference = Entity.Quantity - PreviousQuantity;

                // using the version that was initially retrieved from db
                // if another user modified this record an OptimisticConcurrencyException will be raised only if the new quantity is greater than the old
                // so there is the risk of a negative availability

                // if difference is negative, products are being "returned to warehouse" so the
                // concurrency check is not needed.
                if ((prodAttr.Availability - difference) < 0)
                {
                    //TODO think what to do with version
                    // set the version that was read when the product-attribute was first retrieved from user interface
                    // the entity must be detached in order to set it's concurrency-check attribute (version in this case)
                    prodAttr.Version = Entity.ProductAttributeVersion;
                }
                prodAttr.Availability -= difference;
                _productDAO.UpdateProductAttribute(prodAttr);
            }

            Entity.PRODUCT_ATTRIBUTE = null;
            _shoppingCartDAO.Update(Entity);
            try
            {
                if (prodAttr.Availability < 0)
                {
                    throw new System.Data.OptimisticConcurrencyException("Product availability negative.");
                }
                Context.SaveChanges();
            }
            catch (System.Data.OptimisticConcurrencyException)
            {
                // when an optimistic exception is raised, the old quantity is restored the old quantity
                Entity.Quantity = PreviousQuantity;
                throw;
            }
            finally
            {
                Context.Refresh(RefreshMode.StoreWins, prodAttr);
                Context.Refresh(RefreshMode.StoreWins, Entity);
                Entity.PRODUCT_ATTRIBUTE = prodAttr;

                // setting the new version for further modifications
                Entity.ProductAttributeVersion = prodAttr.Version;
            }
        }
예제 #9
0
        private void updAvailListInOptimisticScenario(DropDownList ddl, int prodAttrId, int alreadyInCart, int newQuantity, LinkButton lnk)
        {
            List <int>        qtyList;
            PRODUCT_ATTRIBUTE prodAttr = ApplicationContext.Current.Products.GetProductAvailability(prodAttrId, out qtyList, alreadyInCart);

            if (!qtyList.Contains(newQuantity))
            {
                ddl.SelectedValue = alreadyInCart.ToString();
                lnk.Text          = alreadyInCart.ToString();
                lblMessage.Text   = Resources.Lang.InsufficientAvailabilityMessage;
                CartSession.Find(c => c.ProductAttributeId == prodAttrId).Quantity = alreadyInCart;
            }
        }
예제 #10
0
        // GET: PRODUCT_ATTRIBUTE/Details/5
        public ActionResult Details(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PRODUCT_ATTRIBUTE pRODUCT_ATTRIBUTE = db.PRODUCT_ATTRIBUTE.Find(id);

            if (pRODUCT_ATTRIBUTE == null)
            {
                return(HttpNotFound());
            }
            return(View(pRODUCT_ATTRIBUTE));
        }
예제 #11
0
        // GET: PRODUCT_ATTRIBUTE/Edit/5
        public ActionResult Edit(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PRODUCT_ATTRIBUTE pRODUCT_ATTRIBUTE = db.PRODUCT_ATTRIBUTE.Find(id);

            if (pRODUCT_ATTRIBUTE == null)
            {
                return(HttpNotFound());
            }
            ViewBag.SUPPLIER_ID = new SelectList(db.SUPPLIER, "SUPPLIER_ID", "SUPPLIER_NAME", pRODUCT_ATTRIBUTE.SUPPLIER_ID);
            return(View(pRODUCT_ATTRIBUTE));
        }
예제 #12
0
        public void Delete(SHOPPING_CART Entity)
        {
            // first "put back" the product that was in cart
            // version is not needed as the availability is incremented, so no risk
            PRODUCT_ATTRIBUTE prodAttr = _productDAO.GetProductAttributeById(Entity.ProdAttrID);

            prodAttr.Availability += Entity.Quantity;
            _productDAO.UpdateProductAttribute(prodAttr, false);

            // second remove item from cart
            _shoppingCartDAO.Delete(Entity, false);

            // then save if everything was successful
            Context.SaveChanges();
        }
예제 #13
0
        public void Delete(string id)
        {
            if (id == null)
            {
                return;
            }
            PRODUCT_ATTRIBUTE pRODUCT_ATTRIBUTE = db.PRODUCT_ATTRIBUTE.Find(id);

            if (pRODUCT_ATTRIBUTE == null)
            {
                return;
            }

            db.PRODUCT_ATTRIBUTE.Remove(pRODUCT_ATTRIBUTE);
            db.SaveChanges();
        }
예제 #14
0
        public JsonResult editRecord(string para01, string para02, string para03, string para04, string para05, string para06, string para07)
        {
            string p_id    = para01;
            string name    = para02;
            string s_id    = para03;
            string p_price = para04;
            string s_price = para05;
            string exp     = para06;
            string total   = para07;

            int p_p;

            int.TryParse(p_price, out p_p);
            int s_p;

            int.TryParse(s_price, out s_p);
            int int_exp;

            int.TryParse(exp, out int_exp);
            int int_tot;

            int.TryParse(total, out int_tot);

            PRODUCT_ATTRIBUTE newPRODUCT_ATTRIBUTE = db.PRODUCT_ATTRIBUTE.Find(p_id);

            newPRODUCT_ATTRIBUTE.PRODUCT_NAME   = name;
            newPRODUCT_ATTRIBUTE.SUPPLIER_ID    = s_id;
            newPRODUCT_ATTRIBUTE.PURCHASE_PRICE = p_p;
            newPRODUCT_ATTRIBUTE.SELL_PRICE     = s_p;
            newPRODUCT_ATTRIBUTE.EXP            = int_exp;
            newPRODUCT_ATTRIBUTE.TOTAL          = int_tot;

            db.Entry(newPRODUCT_ATTRIBUTE).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                throw;
            }

            var list = db.PRODUCT_ATTRIBUTE.Select(n => new { PRODUCT_ID = n.PRODUCT_ID, PRODUCT_NAME = n.PRODUCT_NAME, SUPPLIER_ID = n.SUPPLIER_ID, PURCHASE_PRICE = n.PURCHASE_PRICE, SELL_PRICE = n.SELL_PRICE, EXP = n.EXP, TOTAL = n.TOTAL });

            return(Json(new { code = 0, msg = "", count = 1000, data = list }, JsonRequestBehavior.AllowGet));
        }
예제 #15
0
        protected void rptDetails_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandSource is LinkButton)
            {
                LinkButton lnk = e.CommandSource as LinkButton;
                if (!String.IsNullOrWhiteSpace(lnk.CommandArgument))
                {
                    int prodAttrID;
                    if (Int32.TryParse(lnk.CommandArgument, out prodAttrID))
                    {
                        if (lnk.ID == "lnkEdit")
                        {
                            RepeaterItem item = (RepeaterItem)lnk.NamingContainer;

                            DropDownList ddlQty = (DropDownList)item.FindControl("ddlQty");
                            ddlQty.Visible = true;
                            lnk.Visible    = false;

                            List <int>        qtyList;
                            PRODUCT_ATTRIBUTE prodAttr = ApplicationContext.Current.Products.GetProductAvailability(prodAttrID, out qtyList, Int32.Parse(lnk.Text));

                            // updating version
                            SessionCart cart = CartSession.Find(c => c.ProductAttributeId == prodAttrID);
                            cart.ProductAttributeVersion = prodAttr.Version;
                            ddlQty.DataSource            = qtyList;
                            ddlQty.DataBind();
                            ddlQty.SelectedValue = lnk.Text;
                        }
                        else if (lnk.ID == "lnkRemove")
                        {
                            ApplicationContext.Current.Carts.DeleteById(CartSession.First().Id, prodAttrID);
                            DataBind();
                        }
                        if (CartSession == null || CartSession.Count == 0)
                        {
                            lblMessage.Text    = Resources.Lang.EmptyCartLabel;
                            rptDetails.Visible = false;
                        }
                        else
                        {
                            lblMessage.Text = String.Empty;
                        }
                    }
                }
            }
        }
예제 #16
0
        public JsonResult Create(string para01, string para02, string para03, string para04, string para05, string para06, string para07)
        {
            string p_id    = para01;
            string name    = para02;
            string s_id    = para03;
            string p_price = para04;
            string s_price = para05;
            string exp     = para06;
            string total   = para07;

            int p_p;

            int.TryParse(p_price, out p_p);
            int s_p;

            int.TryParse(s_price, out s_p);
            int int_exp;

            int.TryParse(exp, out int_exp);
            int int_tot;

            int.TryParse(total, out int_tot);

            PRODUCT_ATTRIBUTE pRODUCT_ATTRIBUTE = db.PRODUCT_ATTRIBUTE.Find(p_id);

            PRODUCT_ATTRIBUTE newPRODUCT_ATTRIBUTE = new PRODUCT_ATTRIBUTE();

            newPRODUCT_ATTRIBUTE.PRODUCT_ID     = p_id;
            newPRODUCT_ATTRIBUTE.PRODUCT_NAME   = name;
            newPRODUCT_ATTRIBUTE.SUPPLIER_ID    = s_id;
            newPRODUCT_ATTRIBUTE.PURCHASE_PRICE = p_p;
            newPRODUCT_ATTRIBUTE.SELL_PRICE     = s_p;
            newPRODUCT_ATTRIBUTE.EXP            = int_exp;
            newPRODUCT_ATTRIBUTE.TOTAL          = int_tot;

            if (pRODUCT_ATTRIBUTE == null)
            {
                db.PRODUCT_ATTRIBUTE.Add(newPRODUCT_ATTRIBUTE);
                db.SaveChanges();
            }

            var list = db.PRODUCT_ATTRIBUTE.Select(n => new { PRODUCT_ID = n.PRODUCT_ID, PRODUCT_NAME = n.PRODUCT_NAME, SUPPLIER_ID = n.SUPPLIER_ID, PURCHASE_PRICE = n.PURCHASE_PRICE, SELL_PRICE = n.SELL_PRICE, EXP = n.EXP, TOTAL = n.TOTAL });

            return(Json(new { code = 0, msg = "", count = 1000, data = list }, JsonRequestBehavior.AllowGet));
        }
예제 #17
0
        public void Insert(SHOPPING_CART Entity)
        {
            PRODUCT_ATTRIBUTE prodAttr = _productDAO.GetProductAttributeById(Entity.ProdAttrID);

            Context.PRODUCT_ATTRIBUTE.Detach(prodAttr);

            prodAttr.Availability -= Entity.Quantity;
            if (prodAttr.Availability < 0)
            {
                // partial verification, the exception is raised only if the resulting availability is less than 0
                // using the version that was initially retrieved from db
                // if another user modified this record an OptimisticConcurrencyException will be raised
                prodAttr.Version = Entity.ProductAttributeVersion;
            }

            _productDAO.UpdateProductAttribute(prodAttr);

            _shoppingCartDAO.Insert(Entity);
            try
            {
                if (prodAttr.Availability < 0)
                {
                    throw new System.Data.OptimisticConcurrencyException("Product availability negative.");
                }
                Context.SaveChanges();
            }
            catch (System.Data.OptimisticConcurrencyException ex)
            {
                throw;
            }
            finally
            {
                Context.Refresh(RefreshMode.StoreWins, prodAttr);
                Entity.PRODUCT_ATTRIBUTE = prodAttr;

                // setting the new version for further modifications
                Entity.ProductAttributeVersion = prodAttr.Version;
            }
        }
예제 #18
0
        protected void ddlSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList ddl = sender as DropDownList;
            int          prodAttrId;

            if (ddl.SelectedValue != "-1")
            {
                if (Int32.TryParse(ddl.SelectedValue, out prodAttrId))
                {
                    List <int>        qtyList;
                    PRODUCT_ATTRIBUTE prodAttr = ApplicationContext.Current.Products.GetProductAvailability(prodAttrId, out qtyList);

                    Version                = prodAttr.Version;
                    ddlQuantity.Enabled    = true;
                    ddlQuantity.DataSource = qtyList;
                    ddlQuantity.DataBind();

                    lnkAddToBasket.Enabled = true;
                    updPanelDDL.Update();
                }
            }
        }
예제 #19
0
        public PRODUCT_ATTRIBUTE GetProductAvailability(int AttributeValueID, out List <int> AvailabilityList, int?AlreadyInCart = null)
        {
            PRODUCT_ATTRIBUTE prodAttr = Context.PRODUCT_ATTRIBUTE.Where(p => p.ID == AttributeValueID).FirstOrDefault();
            int itemNr = 0;

            if ((prodAttr.Availability >= Configuration.MaxOrderQuantityPerProduct && !AlreadyInCart.HasValue) || (AlreadyInCart.HasValue && AlreadyInCart.Value < Configuration.MaxOrderQuantityPerProduct &&
                                                                                                                   (prodAttr.Availability + AlreadyInCart.Value) >= Configuration.MaxOrderQuantityPerProduct))
            {
                itemNr = Configuration.MaxOrderQuantityPerProduct;
            }
            else if (AlreadyInCart.HasValue && AlreadyInCart.Value >= Configuration.MaxOrderQuantityPerProduct)
            {
                itemNr = AlreadyInCart.Value;
            }
            else if (prodAttr.Availability > 0 || (AlreadyInCart.HasValue && prodAttr.Availability + AlreadyInCart.Value < Configuration.MaxOrderQuantityPerProduct))
            {
                if (AlreadyInCart.HasValue)
                {
                    itemNr = prodAttr.Availability + AlreadyInCart.Value;
                }
                else
                {
                    itemNr = prodAttr.Availability;
                }
            }

            AvailabilityList = new List <int>();
            if (itemNr > 0)
            {
                for (int i = 1; i <= itemNr; i++)
                {
                    AvailabilityList.Add(i);
                }
            }

            return(prodAttr);
        }
예제 #20
0
        protected void rptDetails_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            RepeaterItem item = e.Item;

            // we need only items, footer and header aren't considered
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                DropDownList  ddlSize = (DropDownList)item.FindControl("ddlSize");
                SHOPPING_CART cart    = (SHOPPING_CART)item.DataItem;

                // loading size ddl, actually it's not possible to modify the choosen size
                List <FZAttributeAvailability> list; // = ApplicationContext.Current.Products.GetProductAttributeValues(cart.ProductID.Value);
                list = new List <FZAttributeAvailability>();
                list.Insert(0, new FZAttributeAvailability()
                {
                    Id = cart.ProdAttrID, Value = cart.ProductAttribute
                });
                ddlSize.DataSource = list;
                ddlSize.DataBind();
                ddlSize.SelectedValue = cart.ProdAttrID.ToString();

                List <int>        qtyList;
                PRODUCT_ATTRIBUTE prodAttr = ApplicationContext.Current.Products.GetProductAvailability(cart.ProdAttrID, out qtyList, cart.Quantity);

                DropDownList ddlQty = (DropDownList)item.FindControl("ddlQty");
                ddlQty.DataSource = qtyList;
                ddlQty.DataBind();
                ddlQty.SelectedValue = cart.Quantity.ToString();
            }
            else if (e.Item.ItemType == ListItemType.Footer)
            {
                // total amount in footer
                Label lblSubTotal = (Label)item.FindControl("lblSubTotal");
                lblSubTotal.Text = TotalAmount().ToString("N2");
            }
        }
예제 #21
0
 public void AddProductAttribute(PRODUCT_ATTRIBUTE Attribute)
 {
     Context.PRODUCT_ATTRIBUTE.AddObject(Attribute);
 }
예제 #22
0
 public void AddProductAttribute(PRODUCT_ATTRIBUTE Attribute)
 {
     _productDAO.AddProductAttribute(Attribute);
     Context.SaveChanges();
 }
예제 #23
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/");
        }
예제 #24
0
        private void setAttributes(List <CATEGORY> categoriesList, PRODUCT product, FZExcelProduct exProd)
        {
            // TODO when different attributes used, this should be changed to be dynamic!
            int?sizeAttribute = categoriesList.FirstOrDefault().AttributeID;

            List <D_ATTRIBUTE_VALUE> attrValueList = _attributeDAO.GetAttributeValues(sizeAttribute.Value);
            PRODUCT_ATTRIBUTE        prodAttr;
            int availability = 0;
            int attrValId    = 0;

            // TODO this should be generalized for other attributes

            // XS size
            if (int.TryParse(exProd.SizeXS, out availability) && availability != 0)
            {
                attrValId = attrValueList.Where(a => a.Value.Equals("XS")).FirstOrDefault().ID;
                prodAttr  = new PRODUCT_ATTRIBUTE()
                {
                    AttributeValueID = attrValId,
                    ProductID        = product.ID,
                    Availability     = availability,
                    Quantity         = availability,
                };
                AddProductAttribute(prodAttr);
            }

            // S size
            if (int.TryParse(exProd.SizeS, out availability) && availability != 0)
            {
                attrValId = attrValueList.Where(a => a.Value.Equals("S")).FirstOrDefault().ID;
                prodAttr  = new PRODUCT_ATTRIBUTE()
                {
                    AttributeValueID = attrValId,
                    ProductID        = product.ID,
                    Availability     = availability,
                    Quantity         = availability,
                };
                AddProductAttribute(prodAttr);
            }

            // M size
            if (int.TryParse(exProd.SizeM, out availability) && availability != 0)
            {
                attrValId = attrValueList.Where(a => a.Value.Equals("M")).FirstOrDefault().ID;
                prodAttr  = new PRODUCT_ATTRIBUTE()
                {
                    AttributeValueID = attrValId,
                    ProductID        = product.ID,
                    Availability     = availability,
                    Quantity         = availability,
                };
                AddProductAttribute(prodAttr);
            }

            // L size
            if (int.TryParse(exProd.SizeL, out availability) && availability != 0)
            {
                attrValId = attrValueList.Where(a => a.Value.Equals("L")).FirstOrDefault().ID;
                prodAttr  = new PRODUCT_ATTRIBUTE()
                {
                    AttributeValueID = attrValId,
                    ProductID        = product.ID,
                    Availability     = availability,
                    Quantity         = availability,
                };
                AddProductAttribute(prodAttr);
            }

            // XL size
            if (int.TryParse(exProd.SizeXL, out availability) && availability != 0)
            {
                attrValId = attrValueList.Where(a => a.Value.Equals("XL")).FirstOrDefault().ID;
                prodAttr  = new PRODUCT_ATTRIBUTE()
                {
                    AttributeValueID = attrValId,
                    ProductID        = product.ID,
                    Availability     = availability,
                    Quantity         = availability,
                };
                AddProductAttribute(prodAttr);
            }

            // XXL size
            if (int.TryParse(exProd.SizeXXL, out availability) && availability != 0)
            {
                attrValId = attrValueList.Where(a => a.Value.Equals("XXL")).FirstOrDefault().ID;
                prodAttr  = new PRODUCT_ATTRIBUTE()
                {
                    AttributeValueID = attrValId,
                    ProductID        = product.ID,
                    Availability     = availability,
                    Quantity         = availability,
                };
                AddProductAttribute(prodAttr);
            }
        }