protected void ContinueButton_Click(object sender, EventArgs e)
        {
            List <ShippableItem> shippableItems = GetShippableItems(false);

            foreach (GridViewRow gridRow in BasketGrid.Rows)
            {
                if (gridRow.RowType == DataControlRowType.DataRow)
                {
                    int          basketItemId    = (int)BasketGrid.DataKeys[gridRow.DataItemIndex].Value;
                    DropDownList shippingAddress = (DropDownList)gridRow.FindControl("ShippingAddress");
                    int          addressId       = AlwaysConvert.ToInt(shippingAddress.SelectedValue);
                    int          index           = IndexOfShippableItem(shippableItems, basketItemId);
                    if (index > -1)
                    {
                        ShippableItem shippableItem = shippableItems[index];
                        if (shippableItem.Destinations.ContainsKey(addressId))
                        {
                            shippableItem.Destinations[addressId] += 1;
                        }
                        else
                        {
                            shippableItem.Destinations[addressId] = 1;
                        }
                    }
                }
            }
            //CLEAR ALL DESTINATIONS IN THE EXISTING SHIPMENTS
            ClearShipments();
            //NOW LOOP SHIPPABLE ITEMS AND ADJUST BASKET AS NEEDED
            RepackageBasket(shippableItems);
            Response.Redirect("ShipMethod.aspx");
        }
        protected BasketItem GetBasketItem(object dataItem)
        {
            ShippableItem si = dataItem as ShippableItem;

            if (si != null)
            {
                return(GetBasketItem(si.BasketItemId));
            }
            return(null);
        }
Example #3
0
 public PurchasableSnapshot()
 {
     ProductId       = string.Empty;
     VariantId       = string.Empty;
     Name            = string.Empty;
     Sku             = string.Empty;
     Description     = string.Empty;
     BasePrice       = 0m;
     IsTaxExempt     = false;
     TaxScheduleId   = 0;
     SelectionData   = new OptionSelections();
     ShippingDetails = new ShippableItem();
     IsBundle        = false;
     IsGiftCard      = false;
     IsRecurring     = false;
 }
        /// <summary>
        /// Gets the ShippableItem list for the current basket
        /// </summary>
        /// <param name="multiplyQuantity">If true, creates a ShippableItem record for each quantity of the basket items.</param>
        /// <returns>A ShippableItem list for the current basket.</returns>
        private List <ShippableItem> GetShippableItems(bool multiplyQuantity)
        {
            List <ShippableItem> shippableItems = new List <ShippableItem>();
            // KEEP TRACK OF MASTER KIT PRODUCTS THAT ARE ADDED TO THE SHIPPABLE ITEMS LIST
            List <int> kitMasterItems = new List <int>();
            Basket     basket         = _Basket;

            basket.Items.Sort(new BasketItemComparer());
            foreach (BasketItem basketItem in basket.Items)
            {
                ShippableItem shippableItem = GetShippableItem(basketItem, kitMasterItems);
                if (shippableItem != null)
                {
                    if (multiplyQuantity)
                    {
                        // MUST DUPLICATE THE ITEM FOR EACH QUANTITY TO ALLOW MULTIPLE SHIPPING ADDRESSES
                        // IF THE ITEM IS A CHILD ITEM, ONLY DUPLICATE FOR PARENT QUANTITY
                        int shippableQuantity;
                        if (basketItem.IsChildItem)
                        {
                            BasketItem parentItem = basketItem.GetParentItem(true);
                            if (parentItem != null)
                            {
                                shippableQuantity = parentItem.Quantity;
                            }
                            else
                            {
                                shippableQuantity = basketItem.Quantity;
                            }
                        }
                        else
                        {
                            shippableQuantity = basketItem.Quantity;
                        }
                        for (int i = 0; i < shippableQuantity; i++)
                        {
                            shippableItems.Add(shippableItem);
                        }
                    }
                    else
                    {
                        shippableItems.Add(shippableItem);
                    }
                }
            }
            return(shippableItems);
        }
        private List <int> RepackageBasketItem(BasketItem originalBasketItem, List <int> parentItemIds, ShippableItem shippableItem, int quantityMultiplier, Product kitMasterProduct)
        {
            List <int> newBasketItemIds = new List <int>();
            int        i = 0;

            foreach (int addressId in shippableItem.Destinations.Keys)
            {
                int warehouseId;
                if (kitMasterProduct != null && !kitMasterProduct.Kit.ItemizeDisplay)
                {
                    warehouseId = kitMasterProduct.Warehouse.Id;
                }
                else
                {
                    warehouseId = originalBasketItem.Product.Warehouse.Id;
                }
                BasketShipment shipment = GetShipment(warehouseId, addressId, true);
                if (i == 0)
                {
                    //ADJUST THE FIRST ITEM
                    originalBasketItem.Shipment = shipment;
                    originalBasketItem.Quantity = (short)(shippableItem.Destinations[addressId] * quantityMultiplier);
                    if (parentItemIds != null)
                    {
                        originalBasketItem.ParentItemId = GetParentItemId(parentItemIds, addressId, originalBasketItem.ParentItemId);
                    }
                    originalBasketItem.Save();
                    newBasketItemIds.Add(originalBasketItem.Id);
                }
                else
                {
                    //CREATE ADDITIONAL ITEMS TO SPLIT DESTINATIONS
                    BasketItem splitBasketItem = originalBasketItem.Copy();
                    splitBasketItem.Basket   = _Basket;
                    splitBasketItem.Quantity = (short)(shippableItem.Destinations[addressId] * quantityMultiplier);
                    splitBasketItem.Shipment = shipment;
                    if (parentItemIds != null)
                    {
                        splitBasketItem.ParentItemId = GetParentItemId(parentItemIds, addressId, splitBasketItem.ParentItemId);
                    }
                    _Basket.Items.Add(splitBasketItem);
                    splitBasketItem.Save();
                    if (splitBasketItem.ParentItemId == 0)
                    {
                        splitBasketItem.ParentItemId = splitBasketItem.Id;
                        splitBasketItem.Save();
                    }
                    newBasketItemIds.Add(splitBasketItem.Id);
                }
                i++;
            }
            return(newBasketItemIds);
        }