コード例 #1
0
        private void RecalculateBasket(bool rebindPaymentForms)
        {
            //UPDATE SHIPPING RATES
            if (DelieveryMethodsPanel.Visible)
            {
                int shipmentIndex = 0;
                foreach (RepeaterItem item in ShipmentsRepeater.Items)
                {
                    BasketShipment shipment       = _basket.Shipments[shipmentIndex];
                    DropDownList   ShipMethodList = (DropDownList)item.FindControl("ShipMethodList");
                    if (ShipMethodList != null)
                    {
                        shipment.ShipMethodId = AlwaysConvert.ToInt(ShipMethodList.SelectedValue);
                        shipment.Save();
                    }
                    shipmentIndex++;
                }
            }
            //RECALCULATE SHIPPING, TAXES, DISCOUNTS, ETC.
            _basketService.Recalculate(_basket);
            _CurrentBasketHash = _basket.GetContentHash(OrderItemType.Product);

            if (rebindPaymentForms)
            {
                PaymentWidget.DataBind();
            }
        }
コード例 #2
0
        protected BasketShipment GetShipment(int warehouseId, int addressId, bool create)
        {
            Basket    basket    = _Basket;
            Warehouse warehouse = WarehouseDataSource.Load(warehouseId);
            Address   address   = AddressDataSource.Load(addressId);

            foreach (BasketShipment shipment in basket.Shipments)
            {
                if ((shipment.Warehouse.Id == warehouseId) || (shipment.Warehouse.Id == 0))
                {
                    if ((shipment.Address.Id == addressId) || (shipment.Address.Id == 0))
                    {
                        shipment.Warehouse = warehouse;
                        shipment.Address   = address;
                        return(shipment);
                    }
                }
            }
            if (!create)
            {
                return(null);
            }

            //IF WE COME THIS FAR, AN EXISTING SHIPMENT WAS NOT AVAILABLE
            //ADD A NEW SHIPMENT
            BasketShipment newShipment = new BasketShipment();

            newShipment.Basket    = basket;
            newShipment.Warehouse = warehouse;
            newShipment.Address   = address;
            basket.Shipments.Add(newShipment);
            newShipment.Save();
            return(newShipment);
        }
コード例 #3
0
        protected void ShipmentList_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            // IF THERE ARE MULTIPLE SHIPMENTS, SHOW THE MULTI SHIPMENT HEADER
            if (this.MultiShipmentDisplay)
            {
                PlaceHolder MultiShipmentHeader = e.Item.FindControl("MultiShipmentHeader") as PlaceHolder;
                if (MultiShipmentHeader != null)
                {
                    MultiShipmentHeader.Visible = true;
                }
            }

            // PREPARE AND DISPLAY SHIPPING ESTIMATE FOR THIS SHIPMENT
            GridView ShipRateGrid = e.Item.FindControl("ShipRateGrid") as GridView;

            if (ShipRateGrid != null)
            {
                BasketShipment shipment = e.Item.DataItem as BasketShipment;
                if (shipment != null)
                {
                    // CREATE AN ADDRESS INSTANCE TO HOLD ESTIMATE DESTINATION
                    // PRESERVE THE CURRENT SHIPPING ADDRESS
                    Address savedAddress = shipment.Address;
                    // TEMPORARILY ASSIGN THE ESTIMATE ADDRESS TO THIS SHIPMENT
                    shipment.SetAddress(_EstimateAddress);
                    // GET THE RATE QUOTES AND BIND TO THE TABLE
                    ShipRateGrid.DataSource = AbleContext.Resolve <IShipRateQuoteCalculator>().QuoteForShipment(shipment);
                    ShipRateGrid.DataBind();
                    // RESTORE THE SAVED ADDRESS
                    shipment.SetAddress(savedAddress);
                }
            }
        }
コード例 #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            // locate the basket item to set gift options for
            int    basketItemId = AlwaysConvert.ToInt(Request.QueryString["i"]);
            Basket basket       = AbleContext.Current.User.Basket;

            _BasketItem = basket.Items.FirstOrDefault(bi => bi.Id.Equals(basketItemId));
            if (_BasketItem == null || _BasketItem.Product == null || _BasketItem.Product.WrapGroup == null)
            {
                // unknown item or item is not eligible for gift wrap
                Response.Redirect("ShipMethod.aspx");
            }

            // update shipping address
            BasketShipment shipment = BasketShipmentDataSource.Load(_BasketItem.ShipmentId);

            if (shipment != null && shipment.Address != null)
            {
                ShippingAddress.Text = shipment.Address.ToString();
            }

            // bind list
            GiftItemsGrid.DataSource = GetGiftItemsList(_BasketItem);
            GiftItemsGrid.DataBind();
        }
コード例 #5
0
        protected void ShipMethodList_SelectedIndexChanged(object sender, EventArgs e)
        {
            // UPDATE SHIPMENTS
            for (int i = 0; i < ShipmentList.Items.Count; i++)
            {
                RepeaterItem item = ShipmentList.Items[i];
                if (item != null)
                {
                    BasketShipment shipment       = _Basket.Shipments[i];
                    DropDownList   ShipMethodList = (DropDownList)item.FindControl("ShipMethodList");
                    if (shipment != null && ShipMethodList != null)
                    {
                        shipment.ShipMethodId = AlwaysConvert.ToInt(ShipMethodList.Items[ShipMethodList.SelectedIndex].Value);
                    }
                }
            }

            // UPDATE THE ORDER ITMES PANEL TO REFLECT ANY CHANGE
            _Basket.Save();
            IBasketService preCheckoutService = AbleContext.Resolve <IBasketService>();

            preCheckoutService.Recalculate(_Basket);

            BindPaymentMethodForms();
            BasketAjax.Update();
        }
コード例 #6
0
        protected void ShipMethods_Databound(object sender, EventArgs e)
        {
            DropDownList ddl = (DropDownList)sender;

            if (ddl != null)
            {
                int            shipmentId = AlwaysConvert.ToInt(ddl.Attributes["ShipmentId"]);
                BasketShipment shipment   = _basket.Shipments.Find(a => a.Id == shipmentId);
                if (shipment != null)
                {
                    if (shipment.ShipMethod != null)
                    {
                        ListItem item = ddl.Items.FindByValue(shipment.ShipMethodId.ToString());
                        if (item != null)
                        {
                            item.Selected = true;
                        }
                    }
                    else
                    {
                        if (ddl.Items.Count > 0)
                        {
                            var shipMethod = ShipMethodDataSource.Load(AlwaysConvert.ToInt(ddl.Items[0].Value));
                            if (shipMethod != null)
                            {
                                shipment.ShipMethod = shipMethod;
                                shipment.Save();
                            }
                        }
                    }
                }
            }
        }
コード例 #7
0
 void CheckingOut(object sender, CheckingOutEventArgs e)
 {
     //MAKE SURE WE HAVE VALIDATED THIS FORM
     Page.Validate("OPC");
     //IF ANYTHING WAS INVALID CANCEL CHECKOUT
     if (!Page.IsValid)
     {
         e.Cancel = true;
     }
     //MAKE SURE THE SHIPPING MESSAGE IS SET
     if (!e.Cancel)
     {
         int shipmentIndex = 0;
         foreach (RepeaterItem item in ShipmentList.Items)
         {
             BasketShipment shipment    = _Basket.Shipments[shipmentIndex];
             TextBox        shipMessage = (TextBox)item.FindControl("ShipMessage");
             if (shipMessage != null)
             {
                 shipment.ShipMessage = StringHelper.Truncate(shipMessage.Text, 200);
                 shipment.Save();
             }
             shipmentIndex++;
         }
     }
 }
コード例 #8
0
        protected void ShipmentRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            //CAST DATA ITEM
            BasketShipment shipment = (BasketShipment)e.Item.DataItem;

            //UPDATE SHIPPING WEIGHT
            Literal shipWeight = (Literal)e.Item.FindControl("ShipWeight");

            if (shipWeight != null)
            {
                shipWeight.Text = string.Format(weightFormat, shipment.Items.TotalWeight());
            }
            //SHOW SHIPPING METHODS
            DropDownList ShipMethodsList        = (DropDownList)e.Item.FindControl("ShipMethodsList");
            Localize     ShipMethodErrorMessage = (Localize)e.Item.FindControl("ShipMethodErrorMessage");
            PlaceHolder  phNoShippingMethods    = (PlaceHolder)e.Item.FindControl("phNoShippingMethods");
            PlaceHolder  phShipMessage          = (PlaceHolder)e.Item.FindControl("PHShipMessage");

            if (phShipMessage != null)
            {
                phShipMessage.Visible = AbleContext.Current.Store.Settings.EnableShipMessage;
            }

            if (ShipMethodsList != null)
            {
                _ShipmentIndex = e.Item.ItemIndex;
                IShipRateQuoteCalculator    shippingCalculator = AbleContext.Resolve <IShipRateQuoteCalculator>();
                ICollection <ShipRateQuote> rateQuotes         = shippingCalculator.QuoteForShipment(shipment);
                foreach (var rec in rateQuotes)
                {
                    rec.Rate = Math.Abs(rec.Rate);
                }
                ShipMethodsList.DataSource = GetShipMethodListDs(rateQuotes);
                ShipMethodsList.DataBind();
                if (rateQuotes.Count == 0)
                {
                    ShipMethodErrorMessage.Visible = true;
                    phNoShippingMethods.Visible    = true;
                    ShipMethodsList.Visible        = false;
                    Localize ShipMethodUPSErrorMessage = (Localize)e.Item.FindControl("ShipMethodUPSErrorMessage");
                    // CHECK IF UPS IS ENABLED
                    string classId = Misc.GetClassId(typeof(UPS));
                    IList <ShipGateway> gateways = ShipGatewayDataSource.LoadForClassId(classId);
                    if (gateways.Count > 0)
                    {
                        // CHECK IF PROVIDED ADDRESS IS A PO-BOX ADDRESS
                        if (ValidationHelper.IsPostOfficeBoxAddress(shipment.Address.Address1))
                        {
                            ShipMethodUPSErrorMessage.Visible = true;
                        }
                    }

                    _shippingMethodsAvailable = false;
                }
            }
        }
コード例 #9
0
        public static IList <BasketItem> GetShipmentItems(object dataItem)
        {
            BasketShipment shipment = dataItem as BasketShipment;

            if (shipment != null)
            {
                return(GetShipmentItems(shipment));
            }
            return(null);
        }
コード例 #10
0
        protected void BillingAddress_AddressUpdate(object sender, AddressEventArgs e)
        {
            // update the user instance, user instance might be changed if a new account is registered
            _user   = AbleContext.Current.User;
            _basket = _user.Basket;

            if (e.Address.IsValid)
            {
                // if anonymous user or guest checkout then validate email address, check if it is not already registerd
                string email = e.Address.Email;
                if (_user.IsAnonymousOrGuest && UserDataSource.IsEmailRegistered(email))
                {
                    EmailRegisteredPanel.Visible = true;
                }
                else
                {
                    // Update user primary address
                    Address address = _user.PrimaryAddress;
                    if (address.Id != e.Address.Id)
                    {
                        address.FirstName  = e.Address.FirstName;
                        address.LastName   = e.Address.LastName;
                        address.Nickname   = e.Address.Nickname;
                        address.FullName   = e.Address.FullName;
                        address.Address1   = e.Address.Address1;
                        address.Address2   = e.Address.Address2;
                        address.City       = e.Address.City;
                        address.Company    = e.Address.Company;
                        address.Country    = e.Address.Country;
                        address.Email      = e.Address.Email;
                        address.Fax        = e.Address.Fax;
                        address.IsBilling  = e.Address.IsBilling;
                        address.Phone      = e.Address.Phone;
                        address.PostalCode = e.Address.PostalCode;
                        address.Province   = e.Address.Province;
                    }
                    address.Save();

                    BillingAddressTextPanel.Visible = true;
                    FormattedBillingAddress.Text    = GetFormattedAddressString(e.Address);
                    BillingAddress.Visible          = false;

                    _basketService.Package(_basket, true);
                    BasketShipment shipment = _basket.Shipments.FirstOrDefault();
                    if (shipment != null)
                    {
                        if (shipment.Address == null || shipment.Address.Id == address.Id)
                        {
                            BindShippingMethods(address, true);
                        }
                    }
                    IntializeEmailLists();
                }
            }
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        protected void EditShipAddress_Click(object sender, EventArgs e)
        {
            ShippingAddressTextPanel.Visible = false;
            trShippingAddress.Visible        = true;

            BasketShipment shipment = _basket.Shipments.FirstOrDefault();

            if (shipment != null)
            {
                ShippingAddress.AddressId = shipment.AddressId;
                ShippingAddress.Reload();
            }
        }
コード例 #13
0
        protected void BindShippingMethods(bool recalculateShipRates)
        {
            BasketShipment shipment = _basket.Shipments.FirstOrDefault();

            if (shipment != null)
            {
                BindShippingMethods(shipment.Address, recalculateShipRates);
            }
            else
            {
                BindShippingMethods(null, recalculateShipRates);
            }
        }
コード例 #14
0
        protected void ShipmentRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            //CAST DATA ITEM
            BasketShipment shipment = (BasketShipment)e.Item.DataItem;

            //UPDATE SHIPPING WEIGHT
            Literal shipWeight = (Literal)e.Item.FindControl("ShipWeight");

            if (shipWeight != null)
            {
                shipWeight.Text = string.Format(weightFormat, shipment.Items.TotalWeight());
            }
            //SHOW SHIPPING METHODS
            RadioButtonList ShipMethodsList        = (RadioButtonList)e.Item.FindControl("ShipMethodsList");
            Localize        ShipMethodErrorMessage = (Localize)e.Item.FindControl("ShipMethodErrorMessage");
            PlaceHolder     phNoShippingMethods    = (PlaceHolder)e.Item.FindControl("phNoShippingMethods");

            if (ShipMethodsList != null)
            {
                _ShipmentIndex = e.Item.ItemIndex;
                IShipRateQuoteCalculator    shippingCalculator = AbleContext.Resolve <IShipRateQuoteCalculator>();
                ICollection <ShipRateQuote> rateQuotes         = shippingCalculator.QuoteForShipment(shipment);
                ShipMethodsList.DataSource = GetShipMethodListDs(rateQuotes);
                ShipMethodsList.DataBind();
                if (rateQuotes.Count == 0)
                {
                    ShipMethodErrorMessage.Visible = true;
                    phNoShippingMethods.Visible    = true;
                    ShipMethodsList.Visible        = false;
                    Localize ShipMethodUPSErrorMessage = (Localize)e.Item.FindControl("ShipMethodUPSErrorMessage");
                    // CHECK IF UPS IS ENABLED
                    string classId = Misc.GetClassId(typeof(UPS));
                    IList <ShipGateway> gateways = ShipGatewayDataSource.LoadForClassId(classId);
                    if (gateways.Count > 0)
                    {
                        // CHECK IF PROVIDED ADDRESS IS A PO-BOX ADDRESS
                        if (ValidationHelper.IsPostOfficeBoxAddress(shipment.Address.Address1))
                        {
                            ShipMethodUPSErrorMessage.Visible = true;
                        }
                    }

                    ContinueButton.Visible = false;
                }
                else
                {
                    // IN CASE WE HAVE DISABLED THE CONTINUE BUTTON BEFORE
                    ContinueButton.Visible = true;
                }
            }
        }
コード例 #15
0
        private void BindShippingAddreses()
        {
            IList <Address> addresses = _user.Addresses.FindAll(a => a.Id != _user.PrimaryAddressId);

            if (addresses.Count > 0)
            {
                trUseExistingAddress.Visible = true;
                trNewAddress.Visible         = true;
                trAddressList.Visible        = UseExistingAddress.Checked;

                AddressList.Items.Clear();
                foreach (Address address in addresses)
                {
                    string company     = string.IsNullOrEmpty(address.Company) ? string.Empty : address.Company + " ";
                    string tempAddress = company + address.FullName + " " + address.Address1;
                    if (tempAddress.Length > 45)
                    {
                        tempAddress = tempAddress.Substring(0, 42) + "...";
                    }
                    string   itemText = string.Format("{0} {1}", tempAddress, address.City);
                    ListItem listItem = new ListItem(itemText, address.Id.ToString());
                    AddressList.Items.Add(listItem);
                }

                BasketShipment shipment = _basket.Shipments.FirstOrDefault();
                if (shipment != null)
                {
                    if (shipment.AddressId > 0 && shipment.AddressId != _user.PrimaryAddressId)
                    {
                        ListItem item = AddressList.Items.FindByValue(shipment.AddressId.ToString());
                        if (item != null)
                        {
                            item.Selected = true;
                        }
                    }
                    else if (AddressList.Items.Count > 0 && AddressList.SelectedValue == string.Empty)
                    {
                        AddressList.Items[0].Selected = true;
                        AddressList_SelectedIndexChanged(null, null);
                    }
                }
            }
            else
            {
                trShippingAddress.Visible    = true;
                trAddressList.Visible        = false;
                trUseExistingAddress.Visible = false;
                trNewAddress.Visible         = false;
            }
        }
コード例 #16
0
        protected List <ListItem> GetShipMethodList(BasketShipment shipment, bool forceRecalcualte)
        {
            List <ListItem> methodList  = new List <ListItem>();
            bool            hasSelected = false;

            if (shipment != null)
            {
                IShipRateQuoteCalculator  shippingCalculator = AbleContext.Resolve <IShipRateQuoteCalculator>();
                List <LocalShipRateQuote> localQuotes        = null;
                _SavedShipRates.TryGetValue(shipment.Id, out localQuotes);
                if (forceRecalcualte || localQuotes == null)
                {
                    //RECALCULATE THE RATES
                    localQuotes = new List <LocalShipRateQuote>();
                    ICollection <ShipRateQuote> rateQuotes = shippingCalculator.QuoteForShipment(shipment);
                    foreach (ShipRateQuote quote in rateQuotes)
                    {
                        decimal totalRate     = TaxHelper.GetShopPrice(quote.TotalRate, quote.ShipMethod.TaxCodeId, null, new TaxAddress(shipment.Address));
                        string  formattedRate = totalRate.LSCurrencyFormat("ulc");
                        string  methodName    = (totalRate > 0) ? quote.Name + ": " + formattedRate : quote.Name;
                        localQuotes.Add(new LocalShipRateQuote(quote.ShipMethodId, methodName, formattedRate));
                    }
                    _SavedShipRates[shipment.Id] = localQuotes;
                }

                foreach (LocalShipRateQuote quote in localQuotes)
                {
                    ListItem item = new ListItem(quote.Name, quote.ShipMethodId.ToString());
                    if (shipment.ShipMethodId != 0 && shipment.ShipMethodId == quote.ShipMethodId)
                    {
                        item.Selected = true;
                        hasSelected   = true;
                    }
                    methodList.Add(item);
                }

                if (!hasSelected)
                {
                    if (methodList.Count > 0)
                    {
                        methodList[0].Selected = true;
                        shipment.ShipMethodId  = AlwaysConvert.ToInt(methodList[0].Value);
                        shipment.Save();
                    }
                }
            }

            return(methodList);
        }
コード例 #17
0
 /// <summary>
 /// Determines the correct parent item id based on destination
 /// </summary>
 /// <param name="parentItemIds">A list of potential parent item ids</param>
 /// <param name="destinationAddressId">The desired destination</param>
 /// <param name="defaultValue">The default return value if the parent cannot be determined</param>
 /// <returns>The best parent item id to assign</returns>
 private int GetParentItemId(List <int> parentItemIds, int destinationAddressId, int defaultValue)
 {
     foreach (BasketItem item in _Basket.Items)
     {
         if (parentItemIds.Contains(item.Id))
         {
             int            warehouseId = item.Product.Warehouse != null ? item.Product.Warehouse.Id : 0;
             BasketShipment shipment    = GetShipment(warehouseId, destinationAddressId, false);
             if (shipment != null && shipment.Id == item.ShipmentId)
             {
                 return(item.Id);
             }
         }
     }
     return(defaultValue);
 }
コード例 #18
0
ファイル: CertiCalc.cs プロジェクト: phongdevelopers/my-phong
 private void BuildTaxOrderItems(CertiTAX.Order taxOrder, Basket basket, int shipmentId)
 {
     if (this.UseLineItems)
     {
         WebTrace.Write("Process Tax Items -- Line Items Mode");
         LSDecimal productTotal = 0;
         List <CertiTAX.OrderLineItem> taxLineItems = new List <CertiTAX.OrderLineItem>();
         foreach (BasketItem item in basket.Items)
         {
             if (item.OrderItemType == OrderItemType.Product)
             {
                 CertiTAX.OrderLineItem taxLineItem = new CertiTAX.OrderLineItem();
                 taxLineItem.ItemId        = item.ProductId.ToString();
                 taxLineItem.StockingUnit  = item.Sku;
                 taxLineItem.Quantity      = item.Quantity;
                 taxLineItem.ExtendedPrice = (Decimal)item.ExtendedPrice;
                 productTotal += item.ExtendedPrice;
                 taxLineItems.Add(taxLineItem);
             }
         }
         taxOrder.LineItems = taxLineItems.ToArray();
         taxOrder.Total     = (Decimal)productTotal;
     }
     else
     {
         WebTrace.Write("Process Tax Items -- Order Total Mode");
         OrderItemType[] productTypes = { OrderItemType.Product, OrderItemType.Coupon, OrderItemType.Discount };
         if (shipmentId == 0)
         {
             //SET TOTAL FOR THE BASKET
             taxOrder.Total = (Decimal)basket.Items.TotalPrice(productTypes);
         }
         else
         {
             //SET TOTAL FOR THE SHIPMENT
             BasketShipment shipment = this.GetShipment(basket, shipmentId);
             if (shipment != null)
             {
                 taxOrder.Total = (Decimal)shipment.GetItems().TotalPrice(productTypes);
             }
             else
             {
                 taxOrder.Total = 0;
             }
         }
     }
 }
コード例 #19
0
        protected IList <BasketItem> GetShipmentItems(object dataItem)
        {
            BasketShipment     shipment    = (BasketShipment)dataItem;
            IList <BasketItem> singleItems = new List <BasketItem>();

            foreach (BasketItem item in shipment.Items)
            {
                if (item.OrderItemType == OrderItemType.Product)
                {
                    if (!item.IsChildItem || item.Product.KitStatus != CommerceBuilder.Products.KitStatus.Member)
                    {
                        singleItems.Add(item);
                    }
                }
            }
            return(singleItems);
        }
コード例 #20
0
        protected List <BasketItem> GetShipmentProducts(object dataItem)
        {
            List <BasketItem> products = new List <BasketItem>();
            BasketShipment    shipment = dataItem as BasketShipment;

            if (shipment != null)
            {
                foreach (BasketItem item in _Basket.Items)
                {
                    if (item.ShipmentId == shipment.Id &&
                        item.OrderItemType == OrderItemType.Product)
                    {
                        products.Add(item);
                    }
                }
            }
            return(products);
        }
コード例 #21
0
ファイル: Coupon.cs プロジェクト: phongdevelopers/my-phong
        /// <summary>
        /// Determines if a coupon applies to a shipment
        /// </summary>
        /// <param name="basket">The basket</param>
        /// <param name="shipment">The basket shipment</param>
        /// <returns>True if the coupon is valid for the shipment; false otherwise.</returns>
        public bool AppliesToShipment(Basket basket, BasketShipment shipment)
        {
            // DO SOME VALIDATION ON THE INPUT PARAMETERS
            if (this.CouponType != CouponType.Shipping)
            {
                throw new InvalidOperationException("This method is only applicable for shipping coupons.");
            }
            if (basket == null)
            {
                throw new ArgumentNullException("basket");
            }
            if (shipment == null)
            {
                throw new ArgumentNullException("shipment");
            }
            if (basket.BasketId != shipment.BasketId)
            {
                throw new ArgumentException("The shipment is not part of the basket.");
            }

            // MAKE SURE THE SHIPPING METHOD APPLIES
            if (!this.AppliesToShipMethod(shipment.ShipMethodId))
            {
                return(false);
            }

            // DO WE NEED TO VALIDATE MINIMUM PURCHASE?
            if (this.MinPurchase > 0)
            {
                // GET THE TOTAL PRODUCT PRICE OF THE SHIPMENT
                BasketItemCollection shipmentItems     = shipment.GetItems(basket);
                LSDecimal            totalProductPrice = shipmentItems.TotalProductPrice();

                // IF THRESHOLD IS NOT MET, THE COUPON DOES NOT APPLY
                if (totalProductPrice < this.MinPurchase)
                {
                    return(false);
                }
            }

            // NOT OTHERWISE INVALID, THE COUPON APPLIES TO SHIPMENT
            return(true);
        }
コード例 #22
0
        protected void ShipmentList_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            //SHOW SHIPPING METHODS
            DropDownList ShipMethodList = (DropDownList)e.Item.FindControl("ShipMethodList");

            if (ShipMethodList != null)
            {
                BasketShipment shipment = (BasketShipment)e.Item.DataItem;
                if (shipment != null)
                {
                    // CALCULATE THE SHIPPING RATES
                    ICollection <ShipRateQuote> rateQuotes = AbleContext.Resolve <IShipRateQuoteCalculator>().QuoteForShipment(shipment);
                    foreach (ShipRateQuote quote in rateQuotes)
                    {
                        decimal totalRate     = TaxHelper.GetShopPrice(quote.TotalRate, quote.ShipMethod.TaxCodeId, null, new TaxAddress(shipment.Address));
                        string  formattedRate = totalRate.LSCurrencyFormat("ulc");
                        string  methodName    = (totalRate > 0) ? quote.Name + ": " + formattedRate : quote.Name;
                        ShipMethodList.Items.Add(new ListItem(methodName, quote.ShipMethodId.ToString()));
                    }
                }
            }
        }
コード例 #23
0
        public static IList <BasketItem> GetShipmentItems(BasketShipment shipment)
        {
            Basket             basket           = shipment.Basket;
            IList <BasketItem> shipmentProducts = new List <BasketItem>();

            foreach (BasketItem item in basket.Items)
            {
                if (DisplayItemForShipment(item, shipment.Id))
                {
                    shipmentProducts.Add(item);
                }
            }

            //SHOW TAXES IF SPECIFIED FOR LINE ITEM DISPLAY
            if (TaxHelper.GetEffectiveInvoiceDisplay(basket.User) == TaxInvoiceDisplay.LineItem)
            {
                // LOOP ALL BASKET ITEMS
                foreach (BasketItem item in basket.Items)
                {
                    // ONLY EXAMINE TAX ITEMS
                    if (item.OrderItemType == OrderItemType.Tax)
                    {
                        // DETERMINE THE PARENT ITEM
                        BasketItem parentItem = GetTaxParentItemForShipping(item);
                        // DISPLAY TAX IF PARENT IS DISPLAYED OR IF THIS IS NOT A CHILD ITEM AND IS PART OF THE SHIPMENT
                        if (shipmentProducts.IndexOf(parentItem.Id) > -1 ||
                            (!item.IsChildItem && item.ShipmentId == shipment.Id))
                        {
                            shipmentProducts.Add(item);
                        }
                    }
                }
            }
            shipmentProducts.Sort(new BasketItemComparer());
            return(shipmentProducts);
        }
コード例 #24
0
        protected void Page_PreRender(object sender, EventArgs e)
        {
            bool hasValidBillingAddress = _user.PrimaryAddress != null && _user.PrimaryAddress.IsValid;

            LoginPanel.Visible     = _user.IsAnonymous && !EmailRegisteredPanel.Visible;
            LoginLink.NavigateUrl  = "~/Login.aspx?ReturnUrl=" + Server.UrlEncode(Request.Url.AbsolutePath);
            LoginLink2.NavigateUrl = "~/Login.aspx?ReturnUrl=" + Server.UrlEncode(Request.Url.AbsolutePath);

            if (!Page.IsPostBack)
            {
                IntializeEmailLists();
            }

            BasketShipment shipment = _basket.Shipments.FirstOrDefault();

            if (shipment != null && shipment.Address != null && shipment.Address.IsValid)
            {
                SetFormattedShipAddress(shipment.Address);

                if (!Page.IsPostBack)
                {
                    UseBillingAsShippingAddress.Checked = (shipment.Address.Id == _user.PrimaryAddress.Id);
                }

                if (shipment.AddressId == _user.PrimaryAddress.Id)
                {
                    ShippingAddressTextPanel.Visible = false;
                }
            }
            else
            {
                ShippingAddressTextPanel.Visible = false;
            }

            if (BillingAddress.Visible)
            {
                UseBillingAsShippingAddress.Visible = false;
            }

            ShippingAddressPanel.Visible = UseBillingAsShippingAddress.Visible && !UseBillingAsShippingAddress.Checked;

            if (!Page.IsPostBack)
            {
                if (hasValidBillingAddress)
                {
                    BillingAddressTextPanel.Visible     = true;
                    FormattedBillingAddress.Text        = GetFormattedAddressString(_user.PrimaryAddress);
                    BillingAddress.Visible              = false;
                    UseBillingAsShippingAddress.Visible = true;
                }
                else
                {
                    BillingAddressTextPanel.Visible     = false;
                    BillingAddress.Visible              = true;
                    UseBillingAsShippingAddress.Visible = false;
                }

                ShippingAddressPanel.Visible = UseBillingAsShippingAddress.Visible && !UseBillingAsShippingAddress.Checked;
                if (ShippingAddressPanel.Visible)
                {
                    if (UseExistingAddress.Checked)
                    {
                        trAddressList.Visible     = true;
                        trShippingAddress.Visible = false;
                        BindShippingAddreses();
                    }
                    else if (UseNewAddress.Checked)
                    {
                        trAddressList.Visible     = false;
                        trShippingAddress.Visible = true;
                    }
                }
            }

            if (_SelectUseExistingAddr)
            {
                UseExistingAddress.Checked = true;
                UseNewAddress.Checked      = false;
            }

            PageOverlay.Visible = BillingAddress.Visible || trShippingAddress.Visible;

            //PERSIST VALUES TO FORM
            SaveCustomViewState();
        }
コード例 #25
0
        protected void Page_PreRender(object sender, EventArgs e)
        {
            BasketItem basketItem = BasketItemDataSource.Load(this.BasketItemId);

            if (basketItem != null)
            {
                Product product = basketItem.Product;
                if (product != null)
                {
                    //OUTPUT THE PRODUCT NAME
                    string productName = basketItem.Name;
                    if (basketItem.ProductVariant != null)
                    {
                        string variantName = string.Format(" ({0})", basketItem.ProductVariant.VariantName);
                        if (!productName.EndsWith(variantName))
                        {
                            productName += variantName;
                        }
                    }
                    if (this.LinkProducts && product.Visibility != CatalogVisibility.Private)
                    {
                        //OUTPUT NAME AS LINK
                        string url = UrlGenerator.GetBrowseUrl(product.Id, CatalogNodeType.Product, product.Name);
                        if (!string.IsNullOrEmpty(basketItem.KitList) && !string.IsNullOrEmpty(basketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Kits={2}&Options={3}\">{4}</a>", Page.ResolveUrl(url), basketItem.Id, basketItem.KitList, basketItem.OptionList.Replace(",0", string.Empty), productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else if (!string.IsNullOrEmpty(basketItem.KitList) && string.IsNullOrEmpty(basketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Kits={2}\">{3}</a>", Page.ResolveUrl(url), basketItem.Id, basketItem.KitList, productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else if (string.IsNullOrEmpty(basketItem.KitList) && !string.IsNullOrEmpty(basketItem.OptionList))
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}&Options={2}\">{3}</a>", Page.ResolveUrl(url), basketItem.Id, basketItem.OptionList.Replace(",0", string.Empty), productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                        else
                        {
                            string link = string.Format("<a href=\"{0}?ItemId={1}\">{2}</a>", Page.ResolveUrl(url), basketItem.Id, productName);
                            phProductName.Controls.Add(new LiteralControl(link));
                        }
                    }
                    else
                    {
                        //OUTPUT NAME
                        phProductName.Controls.Add(new LiteralControl(productName));
                    }

                    if (EnableFriendlyFormat)
                    {
                        phProductName.Controls.AddAt(0, new LiteralControl(string.Format("{0} of ", basketItem.Quantity)));
                        phProductName.Controls.Add(new LiteralControl(string.Format("<span class='price'>({0})</span>", basketItem.Price.LSCurrencyFormat("ulc"))));
                    }

                    //SHOW INPUTS
                    IList <BasketItemInput> inputs = GetCustomerInputs(basketItem);
                    if (inputs.Count > 0)
                    {
                        InputList.DataSource = inputs;
                        InputList.DataBind();
                    }
                    else
                    {
                        InputList.Visible = false;
                    }
                    //SHOW KIT PRODUCTS IF AVAILABLE, AND THE PRODUCT DOES NOT USE ITEMIZED DISPLAY OR FORCE KIT DISPLAY IS ON
                    if (!string.IsNullOrEmpty(basketItem.KitList) && basketItem.Product != null &&
                        basketItem.Product.Kit != null && (!basketItem.Product.Kit.ItemizeDisplay || this.ForceKitDisplay))
                    {
                        IList <BasketItem> kitProductList = GetKitProducts(basketItem, this.IgnoreKitShipment);
                        if (kitProductList.Count > 0)
                        {
                            KitProductPanel.Visible       = true;
                            KitProductRepeater.DataSource = kitProductList;
                            KitProductRepeater.DataBind();
                        }
                    }
                    //SET THE KIT MEMBER LABEL
                    if (basketItem.OrderItemType == OrderItemType.Product && basketItem.IsChildItem)
                    {
                        BasketItem parentItem = basketItem.GetParentItem(true);
                        if (parentItem != null)
                        {
                            if ((parentItem.Product != null && basketItem.Product.Kit != null && parentItem.Product.Kit.ItemizeDisplay) ||
                                basketItem.ShipmentId != parentItem.ShipmentId)
                            {
                                //SET THE WISHLIST NAME
                                KitMemberLabel.Visible = true;
                                KitMemberLabel.Text    = string.Format(KitMemberLabel.Text, parentItem.Name);
                            }
                        }
                    }
                    //SET THE WISHLIST LABEL
                    WishlistLabel.Visible = (basketItem.WishlistItem != null);
                    if (WishlistLabel.Visible)
                    {
                        //SET THE WISHLIST NAME
                        WishlistLabel.Text = string.Format(WishlistLabel.Text, GetWishlistName(basketItem.WishlistItem.Wishlist));
                    }
                    //SET THE SHIPS TO PANEL
                    Basket         basket   = basketItem.Basket;
                    BasketShipment shipment = basketItem.Shipment;
                    Address        address  = (shipment == null) ? null : shipment.Address;
                    ShipsToPanel.Visible = (this.ShowShipTo && (address != null) && (!string.IsNullOrEmpty(address.FullName)));
                    if (ShipsToPanel.Visible)
                    {
                        ShipsTo.Text = address.FullName;
                    }
                    //SHOW GIFT WRAP
                    GiftWrapPanel.Visible = (basketItem.WrapStyle != null);
                    if (GiftWrapPanel.Visible)
                    {
                        GiftWrap.Text         = basketItem.WrapStyle.Name;
                        GiftWrapPrice.Visible = (basketItem.WrapStyle.Price != 0);
                        GiftWrapPrice.Text    = string.Format("&nbsp;({0})", basketItem.WrapStyle.Price.LSCurrencyFormat("ulc"));
                    }
                    //SHOW GIFT MESSAGE
                    GiftMessagePanel.Visible = (!string.IsNullOrEmpty(basketItem.GiftMessage));
                    if (GiftMessagePanel.Visible)
                    {
                        GiftMessage.Text = basketItem.GiftMessage;
                    }
                    //SHOW ASSETS
                    List <AbleCommerce.Code.ProductAssetWrapper> assets = AbleCommerce.Code.ProductHelper.GetAssets(this.Page, basketItem.Product, basketItem.OptionList, basketItem.KitList, "javascript:window.close()");
                    AssetsPanel.Visible = (this.ShowAssets && assets.Count > 0);
                    if (AssetsPanel.Visible)
                    {
                        AssetLinkList.DataSource = assets;
                        AssetLinkList.DataBind();
                    }
                    //SHOW SUBSCRIPTIONS
                    if (this.ShowSubscription)
                    {
                        SubscriptionPlan sp = basketItem.Product.SubscriptionPlan;
                        if (sp != null && basketItem.IsSubscription && basketItem.Frequency > 0)
                        {
                            // GET THE RECURRING PAYMENT MESSAGE FOR THIS PRODUCT
                            RecurringPaymentMessage.Text = AbleCommerce.Code.ProductHelper.GetRecurringPaymentMessage(basketItem);
                            SubscriptionPanel.Visible    = true;
                        }
                    }
                }
                else
                {
                    //OUTPUT NAME
                    phProductName.Controls.Add(new LiteralControl(basketItem.Name));
                    InputList.Visible         = false;
                    KitProductPanel.Visible   = false;
                    WishlistLabel.Visible     = false;
                    ShipsToPanel.Visible      = false;
                    GiftWrapPanel.Visible     = false;
                    GiftMessagePanel.Visible  = false;
                    AssetsPanel.Visible       = false;
                    SubscriptionPanel.Visible = false;
                }
            }
            else
            {
                //NO ITEM TO DISPLAY
                this.Controls.Clear();
            }
        }
コード例 #26
0
        //USE PRERENDER TO ALLOW FOR CALCULATIONS TO BASKET CONTENTS
        protected void Page_PreRender(object sender, EventArgs e)
        {
            decimal productsTotal = 0;
            decimal subtotal      = 0;
            decimal gstTotal      = 0;
            decimal shipping      = 0;
            decimal handling      = 0;
            Dictionary <string, decimal> taxes = new Dictionary <string, decimal>();
            decimal totalTaxAmount             = 0;
            decimal coupons          = 0;
            decimal discounts        = 0;
            decimal total            = 0;
            decimal giftwrap         = 0;
            int     numberOfProducts = 0;
            decimal giftCodes        = 0;
            Basket  basket           = AbleContext.Current.User.Basket;

            foreach (BasketItem item in basket.Items)
            {
                decimal extendedPrice = InvoiceHelper.GetInvoiceExtendedPrice(item); /*TaxHelper.GetInvoiceExtendedPrice(AbleContext.Current.User.Basket, item);*/

                switch (item.OrderItemType)
                {
                case OrderItemType.Product:
                    bool countItem = !item.IsChildItem;
                    if (!countItem)
                    {
                        BasketItem parentItem = item.GetParentItem(false);
                        if (parentItem != null)
                        {
                            countItem = parentItem.Product.IsKit && parentItem.Product.Kit.ItemizeDisplay;
                        }
                    }
                    if (countItem)
                    {
                        productsTotal    += extendedPrice;
                        subtotal         += extendedPrice;
                        gstTotal         += ((extendedPrice * (decimal)1.1) - extendedPrice);
                        numberOfProducts += item.Quantity;
                    }
                    else
                    {
                        // zero out the ext price - it is included with the parent
                        extendedPrice = 0;
                    }
                    break;

                case OrderItemType.Shipping:
                    shipping += extendedPrice;
                    break;

                case OrderItemType.Handling:
                    BasketShipment shipment = item.Shipment;
                    if (shipment != null && shipment.ShipMethod != null && shipment.ShipMethod.SurchargeIsVisible)
                    {
                        handling += extendedPrice;
                    }
                    else
                    {
                        shipping += extendedPrice;
                    }
                    break;

                case OrderItemType.Tax:
                    if (taxes.ContainsKey(item.Name + ":"))
                    {
                        taxes[item.Name + ":"] += extendedPrice;
                    }
                    else
                    {
                        taxes[item.Name + ":"] = extendedPrice;
                    }
                    totalTaxAmount += extendedPrice;
                    break;

                case OrderItemType.Coupon:
                    coupons += extendedPrice;
                    break;

                case OrderItemType.GiftWrap:
                    giftwrap += extendedPrice;
                    break;

                case OrderItemType.Discount:
                    discounts += extendedPrice;
                    subtotal  += extendedPrice;
                    break;

                case OrderItemType.GiftCertificatePayment:
                    giftCodes += extendedPrice;
                    break;

                default:
                    subtotal += extendedPrice;
                    break;
                }
                total += (extendedPrice * (decimal)1.1);
            }
            ProductTotalLabel.Text = string.Format(ProductTotalLabel.Text, numberOfProducts);
            ProductTotal.Text      = productsTotal.LSCurrencyFormat("ulc");
            Subtotal.Text          = subtotal.LSCurrencyFormat("ulc");
            GstTotal.Text          = gstTotal.LSCurrencyFormat("ulc");
            // DISCOUNT ROW VISIBILITY
            if (discounts != 0)
            {
                trDiscounts.Visible = true;
                Discounts.Text      = discounts.LSCurrencyFormat("ulc");
            }
            else
            {
                trDiscounts.Visible = false;
            }

            if (giftwrap != 0)
            {
                trGiftWrap.Visible = true;
                GiftWrap.Text      = giftwrap.LSCurrencyFormat("ulc");
            }
            else
            {
                trGiftWrap.Visible = false;
            }

            if (this.ShowTaxes &&
                AbleContext.Current.User.PrimaryAddress.IsValid &&
                TaxHelper.GetEffectiveInvoiceDisplay(AbleContext.Current.User) != TaxInvoiceDisplay.Included)
            {
                if (ShowTaxBreakdown)
                {
                    TaxesBreakdownRepeater.DataSource = taxes;
                    TaxesBreakdownRepeater.DataBind();
                    TaxesBreakdownRepeater.Visible = true;
                    trTax.Visible = false;
                }
                else
                {
                    TaxesLabel.Text = totalTaxAmount.LSCurrencyFormat("ulc");
                    TaxesBreakdownRepeater.Visible = false;
                    trTax.Visible = true;
                }
            }
            else
            {
                // TAXES ARE NOT DISPLAYED, REMOVE ANY TAX FROM THE TOTAL
                total -= totalTaxAmount;
                TaxesBreakdownRepeater.Visible = false;
                trTax.Visible = false;
                trTaxCloudTaxExemption.Visible = false;
            }

            // SHIPPING SHOULD NOT BE VISIBLE WHEN USER BILLING ADDRESS IS NOT SELECTED
            Shipping.Text = shipping.LSCurrencyFormat("ulc");
            if (!basket.User.PrimaryAddress.IsValid)
            {
                trShipping.Visible = false;
            }
            else if (shipping > 0)
            {
                trShipping.Visible = true;
            }
            else
            {
                trShipping.Visible = ShowShipping;
            }

            if (handling > 0 && trShipping.Visible)
            {
                trHandling.Visible = true;
                Handling.Text      = handling.LSCurrencyFormat("ulc");
            }
            else
            {
                trHandling.Visible = false;
            }

            if (giftCodes != 0)
            {
                trGifCodes.Visible = true;
                GifCodes.Text      = giftCodes.LSCurrencyFormat("ulc");
            }
            else
            {
                trGifCodes.Visible = false;
            }

            // COUPON ROW VISIBILITY
            if (coupons != 0)
            {
                trCoupon.Visible = true;
                Coupons.Text     = coupons.LSCurrencyFormat("ulc");
            }
            else
            {
                trCoupon.Visible = false;
            }

            trCouponsDivider.Visible = trCoupon.Visible || trGifCodes.Visible;

            Total.Text = total.LSCurrencyFormat("ulc");
            TotalPendingMessagePanel.Visible = this.ShowMessage;

            TaxCloudProvider taxProvider = ProviderHelper.LoadTaxProvider <TaxCloudProvider>();

            if (taxProvider != null && taxProvider.EnableTaxCloud && ShowTaxes && taxes.Count > 0 && taxProvider.UseTaxExemption)
            {
                trTaxCloudTaxExemption.Visible = true;
            }
        }
コード例 #27
0
 protected void Page_PreRender(object sender, EventArgs e)
 {
     if (_BasketItem != null)
     {
         Product product = _BasketItem.Product;
         if (product != null)
         {
             //OUTPUT THE PRODUCT NAME
             string productName = _BasketItem.Name;
             if (_BasketItem.ProductVariant != null)
             {
                 string variantName = string.Format(" ({0})", _BasketItem.ProductVariant.VariantName);
                 if (!productName.EndsWith(variantName))
                 {
                     productName += variantName;
                 }
             }
             if (this.LinkProducts)
             {
                 //OUTPUT NAME AS LINK TO EDIT PRODUCT PAGE
                 string url  = "~/Admin/Products/EditProduct.aspx?ProductId=" + product.Id.ToString();
                 string link = string.Format("<a href=\"{0}\" target=\"_blank\">{1}</a>", Page.ResolveUrl(url), productName);
                 phProductName.Controls.Add(new LiteralControl(link));
             }
             else
             {
                 //OUTPUT NAME
                 phProductName.Controls.Add(new LiteralControl(productName));
             }
             //SHOW INPUTS
             IList <BasketItemInput> inputs = GetCustomerInputs();
             if (inputs.Count > 0)
             {
                 InputList.DataSource = inputs;
                 InputList.DataBind();
             }
             else
             {
                 InputList.Visible = false;
             }
             //SHOW KIT PRODUCTS IF AVAILABLE, AND THE PRODUCT DOES NOT USE ITEMIZED DISPLAY
             if (!string.IsNullOrEmpty(_BasketItem.KitList) && _BasketItem.Product != null && _BasketItem.Product.Kit != null && !_BasketItem.Product.Kit.ItemizeDisplay)
             {
                 IList <BasketItem> kitProductList = GetKitProducts(_BasketItem);
                 if (kitProductList.Count > 0)
                 {
                     KitProductPanel.Visible       = true;
                     KitProductRepeater.DataSource = kitProductList;
                     KitProductRepeater.DataBind();
                 }
             }
             //SET THE KIT MEMBER LABEL
             if (_BasketItem.OrderItemType == OrderItemType.Product && _BasketItem.IsChildItem)
             {
                 BasketItem parentItem = _BasketItem.GetParentItem(true);
                 if (parentItem != null && parentItem.Product != null && parentItem.Product.Kit != null && parentItem.Product.Kit.ItemizeDisplay)
                 {
                     //SET THE WISHLIST NAME
                     KitMemberLabel.Visible = true;
                     KitMemberLabel.Text    = string.Format(KitMemberLabel.Text, parentItem.Name);
                 }
             }
             //SET THE WISHLIST LABEL
             WishlistLabel.Visible = (_BasketItem.WishlistItem != null);
             if (WishlistLabel.Visible)
             {
                 //SET THE WISHLIST NAME
                 WishlistLabel.Text = string.Format(WishlistLabel.Text, GetWishlistName(_BasketItem.WishlistItem.Wishlist));
             }
             //SET THE SHIPS TO PANEL
             Basket         basket   = _BasketItem.Basket;
             BasketShipment shipment = _BasketItem.Shipment;
             Address        address  = (shipment == null) ? null : shipment.Address;
             ShipsToPanel.Visible = (this.ShowShipTo && (address != null) && (!string.IsNullOrEmpty(address.FullName)));
             if (ShipsToPanel.Visible)
             {
                 ShipsTo.Text = address.FullName;
             }
             //SHOW GIFT WRAP
             GiftWrapPanel.Visible = (_BasketItem.WrapStyle != null);
             if (GiftWrapPanel.Visible)
             {
                 GiftWrap.Text = _BasketItem.WrapStyle.Name;
                 //GiftWrapPrice.Visible = (_BasketItem.WrapStyle.Price != 0);
                 //GiftWrapPrice.Text = string.Format("&nbsp;({0})", _BasketItem.WrapStyle.Price);
             }
             //SHOW GIFT MESSAGE
             GiftMessagePanel.Visible = (!string.IsNullOrEmpty(_BasketItem.GiftMessage));
             if (GiftMessagePanel.Visible)
             {
                 GiftMessage.Text = _BasketItem.GiftMessage;
             }
             //SHOW ASSETS
             List <AbleCommerce.Code.ProductAssetWrapper> assets = AbleCommerce.Code.ProductHelper.GetAssets(this.Page, _BasketItem.Product, _BasketItem.OptionList, _BasketItem.KitList, "javascript:window.close()");
             AssetsPanel.Visible = (this.ShowAssets && assets.Count > 0);
             if (AssetsPanel.Visible)
             {
                 AssetLinkList.DataSource = assets;
                 AssetLinkList.DataBind();
             }
             //SHOW SUBSCRIPTIONS
             SubscriptionPlan sp = _BasketItem.Product.SubscriptionPlan;
             if (sp != null && _BasketItem.IsSubscription && _BasketItem.Frequency > 0)
             {
                 // GET THE RECURRING PAYMENT MESSAGE FOR THIS PRODUCT
                 RecuringPaymentMessage.Text = AbleCommerce.Code.ProductHelper.GetRecurringPaymentMessage(_BasketItem);
                 SubscriptionPanel.Visible   = true;
             }
         }
         else
         {
             //OUTPUT NAME
             phProductName.Controls.Add(new LiteralControl(_BasketItem.Name));
             InputList.Visible         = false;
             KitProductPanel.Visible   = false;
             WishlistLabel.Visible     = false;
             ShipsToPanel.Visible      = false;
             GiftWrapPanel.Visible     = false;
             GiftMessagePanel.Visible  = false;
             AssetsPanel.Visible       = false;
             SubscriptionPanel.Visible = false;
         }
     }
     else
     {
         //NO ITEM TO DISPLAY
         this.Controls.Clear();
     }
 }
コード例 #28
0
        private void InitializeBasketContents()
        {
            decimal productsTotal = 0;
            decimal subtotal      = 0;
            decimal shipping      = 0;
            decimal handling      = 0;
            Dictionary <string, decimal> taxes = new Dictionary <string, decimal>();
            decimal totalTaxAmount             = 0;
            decimal total            = 0;
            int     numberOfProducts = 0;
            decimal giftCodes        = 0;
            Basket  basket           = AbleContext.Current.User.Basket;

            if (!_Recalculated)
            {
                IBasketService preCheckoutService = AbleContext.Resolve <IBasketService>();
                preCheckoutService.Recalculate(basket);
                preCheckoutService.Combine(basket);
                _Recalculated = true;
            }
            foreach (BasketItem item in basket.Items)
            {
                decimal extendedPrice = AbleCommerce.Code.InvoiceHelper.GetInvoiceExtendedPrice(item);
                switch (item.OrderItemType)
                {
                case OrderItemType.Product:
                    bool countItem = !item.IsChildItem;
                    if (!countItem)
                    {
                        BasketItem parentItem = item.GetParentItem(false);
                        if (parentItem != null)
                        {
                            countItem = parentItem.Product.IsKit && parentItem.Product.Kit.ItemizeDisplay;
                        }
                    }
                    if (countItem)
                    {
                        productsTotal    += extendedPrice;
                        subtotal         += extendedPrice;
                        numberOfProducts += item.Quantity;
                    }
                    else
                    {
                        // zero out the ext price - it is included with the parent
                        extendedPrice = 0;
                    }
                    break;

                case OrderItemType.Shipping:
                    shipping += extendedPrice;
                    break;

                case OrderItemType.Handling:
                    BasketShipment shipment = item.Shipment;
                    if (shipment != null && shipment.ShipMethod != null && shipment.ShipMethod.SurchargeIsVisible)
                    {
                        handling += extendedPrice;
                    }
                    else
                    {
                        shipping += extendedPrice;
                    }
                    break;

                case OrderItemType.Tax:
                    TaxInvoiceDisplay taxDisplay = TaxHelper.GetEffectiveInvoiceDisplay(AbleContext.Current.User);
                    if (taxDisplay == TaxInvoiceDisplay.Summary)
                    {
                        if (taxes.ContainsKey(item.Name))
                        {
                            taxes[item.Name] += extendedPrice;
                        }
                        else
                        {
                            taxes[item.Name] = extendedPrice;
                        }
                    }
                    else if (taxDisplay != TaxInvoiceDisplay.Included)
                    {
                        subtotal += extendedPrice;
                    }
                    totalTaxAmount += extendedPrice;
                    break;

                case OrderItemType.GiftCertificatePayment:
                    giftCodes += extendedPrice;
                    break;

                default:
                    subtotal += extendedPrice;
                    break;
                }
                total += extendedPrice;
            }

            Subtotal.Text = subtotal.LSCurrencyFormat("ulc");

            TaxInvoiceDisplay taxInvoiceDisplay = TaxHelper.GetEffectiveInvoiceDisplay(AbleContext.Current.User);

            if (AbleContext.Current.User.PrimaryAddress.IsValid &&
                taxInvoiceDisplay == TaxInvoiceDisplay.Summary)
            {
                TaxesBreakdownRepeater.DataSource = taxes;
                TaxesBreakdownRepeater.DataBind();
                if (ShowTaxBreakdown)
                {
                    TaxesBreakdownRepeater.Visible = true;
                    trTax.Visible = false;
                }
                else
                {
                    TaxesLabel.Text = totalTaxAmount.LSCurrencyFormat("ulc");
                    TaxesBreakdownRepeater.Visible = false;
                    trTax.Visible = true;
                }
            }
            else
            {
                // TAXES ARE NOT DISPLAYED, REMOVE ANY TAX FROM THE TOTAL
                if (taxInvoiceDisplay == TaxInvoiceDisplay.Included)
                {
                    total -= totalTaxAmount;
                }
                TaxesBreakdownRepeater.Visible = false;
                trTax.Visible = false;
            }

            // SHIPPING SHOULD NOT BE VISIBLE WHEN USER BILLING ADDRESS IS NOT SELECTED
            Shipping.Text = shipping.LSCurrencyFormat("ulc");
            if (!basket.User.PrimaryAddress.IsValid)
            {
                trShipping.Visible = false;
            }
            else if (shipping > 0)
            {
                trShipping.Visible = true;
            }
            else
            {
                trShipping.Visible = ShowShipping;
            }

            if (handling > 0)
            {
                trHandling.Visible = trShipping.Visible;
                Handling.Text      = handling.LSCurrencyFormat("ulc");
            }
            else
            {
                trHandling.Visible = false;
            }

            if (giftCodes != 0)
            {
                trGifCodes.Visible = true;
                GifCodes.Text      = giftCodes.LSCurrencyFormat("ulc");
            }
            else
            {
                trGifCodes.Visible = false;
            }

            trCouponsDivider.Visible = trGifCodes.Visible;

            Total.Text = total.LSCurrencyFormat("ulc");
            TotalPendingMessagePanel.Visible = this.ShowMessage;


            // ENABLE THE TAXCLOUD Exemption link only if taxcloud is configured and there are tax line items
            TaxGateway       taxGateway  = null;
            TaxCloudProvider taxProvider = null;
            int taxGatewayId             = TaxGatewayDataSource.GetTaxGatewayIdByClassId(Misc.GetClassId(typeof(TaxCloudProvider)));

            if (taxGatewayId > 0)
            {
                taxGateway = TaxGatewayDataSource.Load(taxGatewayId);
            }
            if (taxGateway != null)
            {
                taxProvider = taxGateway.GetProviderInstance() as TaxCloudProvider;
            }

            if (taxProvider == null || !taxProvider.EnableTaxCloud || taxes.Count == 0)
            {
                TaxCloudTaxExemptionCert1.Visible = false;
            }
        }
コード例 #29
0
        protected void Page_Load(object sender, EventArgs e)
        {
            _SelectUseExistingAddr = false;
            _user          = AbleContext.Current.User;
            _basket        = _user.Basket;
            _basketService = AbleContext.Resolve <IBasketService>();
            _settings      = AbleContext.Current.Store.Settings;

            // IF THERE ARE NO PRODUCTS, SEND THEN TO SEE EMPTY BASKET
            if (_basket.Items.FirstOrDefault(item => item.OrderItemType == OrderItemType.Product) == null)
            {
                Response.Redirect(AbleCommerce.Code.NavigationHelper.GetBasketUrl());
            }

            bool redirected = ValidateOrderMinMaxAmounts();

            if (redirected)
            {
                return;
            }

            //WE CANNOT RELY ON TRADITIONAL VIEWSTATE IN THE INIT METHOD
            //SO WE WILL USE HIDDEN FORM VARIABLES INSTEAD
            LoadCustomViewState();

            if (!_user.IsAnonymous || _user.PrimaryAddress.IsValid)
            {
                BillingAddress.AddressId = _user.PrimaryAddressId;
            }
            BillingAddress.OnAddressUpdate  += new AddressUpdateEventHandler(BillingAddress_AddressUpdate);
            BillingAddress.OnAddressCancel  += new EventHandler(BillingAddress_AddressCancel);
            ShippingAddress.OnAddressUpdate += new AddressUpdateEventHandler(ShippingAddress_AddressUpdate);
            ShippingAddress.OnAddressCancel += new EventHandler(ShippingAddress_AddressCancel);

            PaymentWidget.Basket         = _basket;
            PaymentWidget.CheckingOut   += new CheckingOutEventHandler(CheckingOut);
            PaymentWidget.CheckedOut    += new CheckedOutEventHandler(CheckedOut);
            PaymentWidget.CouponApplied += new CouponAppliedEventHandler(PaymentWidget_CouponApplied);

            bool hasValidBillingAddress = _user.PrimaryAddress != null && _user.PrimaryAddress.IsValid;
            bool hasShippableProducts   = _basket.Items.HasShippableProducts();

            UseBillingAsShippingAddress.Visible = hasShippableProducts;
            //UseBillingAsShippingAddress.Visible = hasShippableProducts && hasValidBillingAddress;
            ShipMultiPanel.Visible = hasShippableProducts && _settings.EnableShipToMultipleAddresses && _basket.Items.ShippableProductCount() > 1;

            if (!Page.IsPostBack)
            {
                _basketService.Package(_basket, false);
                if (hasShippableProducts)
                {
                    BasketShipment shipment = _basket.Shipments.FirstOrDefault();
                    if (shipment != null)
                    {
                        BindShippingMethods(shipment.Address, false);
                    }
                    else
                    {
                        BindShippingMethods(null, false);
                    }
                    DeliveryInstructionsForm.Visible = _settings.EnableShipMessage;
                }
                else
                {
                    DelieveryMethodsPanel.Visible = false;
                }

                // checkout terms and conditions
                if (!string.IsNullOrEmpty(_settings.CheckoutTermsAndConditions))
                {
                    TermsAndConditions.Text           = _settings.CheckoutTermsAndConditions;
                    TermsAndConditionsSection.Visible = true;
                    string TCScript = "function toggleTC(c) { document.getElementById(\"" + AcceptTC.ClientID + "\").checked = c; }\r\n" +
                                      "function validateTC(source, args) { args.IsValid = document.getElementById(\"" + AcceptTC.ClientID + "\").checked; }";
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "TCScript", TCScript, true);
                }
            }

            _CurrentBasketHash = _basket.GetContentHash(OrderItemType.Product);
        }
コード例 #30
0
        public void Process()
        {
            TraceContext trace    = WebTrace.GetTraceContext();
            string       traceKey = "GoogleCheckout.AC.NewOrderHandler";

            trace.Write(traceKey, "Begin NewOrderHandler.Process, Google order number " + N1.googleordernumber);

            Order order = OrderDataSource.LoadForGoogleOrderNumber(N1.googleordernumber);

            if (order == null) // ordernumber not already entered
            {
                trace.Write(traceKey, "Google order not present in database, get basket");
                Basket basket = AcHelper.GetAcBasket(N1.shoppingcart, true);
                if (basket == null)
                {
                    trace.Write(traceKey, "Basket could not be obtained (End NewOrderHandler.Process)");
                    return;
                }

                //basket is ready. check if there are any order adjustments to be made
                trace.Write(traceKey, "Check for order adjustments");
                OrderAdjustment orderAdj = N1.orderadjustment;
                if (orderAdj != null)
                {
                    trace.Write(traceKey, "Order adjustments present, add to basket");
                    OrderAdjustmentHelper.DoOrderAdjustments(orderAdj, basket);
                }

                trace.Write(traceKey, "set billing address");
                Users.Address primaryAddress = basket.User.PrimaryAddress;
                AcHelper.PopulateAcAddress(primaryAddress, N1.buyerbillingaddress);
                trace.Write(traceKey, "set shipping address");
                Users.Address shipAddr = AcHelper.GetAcAddress(basket.User, N1.buyershippingaddress);
                basket.User.Addresses.Add(shipAddr);
                basket.User.Save();

                trace.Write(traceKey, "package the basket");
                basket.Package(false);

                if (basket.Shipments.Count > 0)
                {
                    //there are shippable items / shipments
                    //set shipment address and shipment method
                    trace.Write(traceKey, "shippable items present, get shipping method");
                    ShipMethod shipMethod = AcHelper.GetShipMethod(basket);
                    trace.Write(traceKey, "ship method is " + shipMethod.Name + " (ID" + shipMethod.ShipMethodId.ToString() + ")");
                    foreach (BasketShipment shipment in basket.Shipments)
                    {
                        shipment.AddressId    = shipAddr.AddressId;
                        shipment.ShipMethodId = shipMethod.ShipMethodId;
                        shipment.Save();
                    }
                    //have to link the shipping charges with some shipment.
                    //we can't know which shipment. Just link to the first.
                    trace.Write(traceKey, "assign shipping charges to first shipment");
                    BasketShipment basketShipment = basket.Shipments[0];
                    foreach (BasketItem item in basket.Items)
                    {
                        if (item.OrderItemType == OrderItemType.Shipping)
                        {
                            item.BasketShipmentId = basketShipment.BasketShipmentId;
                            //update the sku and shipping method name so that scrubbed name is not used
                            item.Name = shipMethod.Name;
                            item.Sku  = string.Empty;
                        }
                    }
                }

                trace.Write(traceKey, "save basket");
                basket.Save();

                //now checkout the order with null payment.
                //this will alow payment to be processed later
                trace.Write(traceKey, "submit basket checkout");
                CheckoutRequest  acCheckout = new CheckoutRequest(null);
                CheckoutResponse acResp     = basket.Checkout(acCheckout);
                if (acResp.Success)
                {
                    trace.Write(traceKey, "checkout was successful, update the google order number for AC order number " + acResp.OrderNumber.ToString());
                    order = OrderDataSource.Load(acResp.OrderId, false);
                    if (order != null)
                    {
                        //update email address associated with order
                        order.BillToEmail       = N1.buyerbillingaddress.email;
                        order.GoogleOrderNumber = N1.googleordernumber;

                        bool isPaidByGc = false;

                        //IF THERE IS ONE PAYMENT AND IT IS A GIFT CERTIFICATE
                        //AND IT COVERS THE BALANCE OF THE ORDER THEN THIS IS THE GOOGLE PAYMENT
                        if (order.Payments.Count == 1)
                        {
                            int     gcPayMethodId = PaymentEngine.GetGiftCertificatePaymentMethod().PaymentMethodId;
                            Payment payment       = order.Payments[0];
                            if (payment.PaymentMethodId == gcPayMethodId)
                            {
                                if (payment.Amount == order.TotalCharges)
                                {
                                    isPaidByGc = true;
                                }
                            }
                        }
                        if (!isPaidByGc)
                        {
                            //We need to create a new payment with status of authorization pending
                            Payment payment = new Payment();
                            payment.PaymentMethodId   = AcHelper.GetGCPaymentMethodId(this.GatewayInstance);
                            payment.Amount            = order.GetBalance(false);
                            payment.OrderId           = order.OrderId;
                            payment.PaymentMethodName = "GoogleCheckout";
                            Transaction trans = new Transaction();
                            trans.TransactionType       = TransactionType.Authorize;
                            trans.TransactionStatus     = TransactionStatus.Pending;
                            trans.Amount                = payment.Amount;
                            trans.PaymentGatewayId      = this.GatewayInstance.PaymentGatewayId;
                            trans.ProviderTransactionId = N1.googleordernumber;
                            trans.TransactionDate       = N1.timestamp;
                            payment.Transactions.Add(trans);
                            payment.PaymentStatus = PaymentStatus.AuthorizationPending;
                            order.Payments.Add(payment);
                        }
                        order.Save();
                    }
                    else
                    {
                        OrderDataSource.UpdateGoogleOrderNumber(acResp.OrderId, N1.googleordernumber);
                    }
                }
                else
                {
                    trace.Write(traceKey, "checkout failed for google order");
                    CommerceBuilder.Utility.Logger.Warn("GoogleCheckout : New Order Checkout Failed.");
                }

                trace.Write(traceKey, "Send AC order number back to Google");
                AcNotifier.AddMerchantOrderNumber(GatewayInstance, N1.googleordernumber, acResp.OrderNumber.ToString());
            }
            else
            {
                //order number already entered. Just send notification
                trace.Write(traceKey, "Google order in database, send AC order number back to Google");
                AcNotifier.AddMerchantOrderNumber(GatewayInstance, N1.googleordernumber, order.OrderNumber.ToString());
            }
            trace.Write(traceKey, "End NewOrderHandler.Process");
        }