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(); } }
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); }
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); } } }
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(); }
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(); }
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(); } } } } } }
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++; } } }
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; } } }
public static IList <BasketItem> GetShipmentItems(object dataItem) { BasketShipment shipment = dataItem as BasketShipment; if (shipment != null) { return(GetShipmentItems(shipment)); } return(null); }
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(); } } }
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); }
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(); } }
protected void BindShippingMethods(bool recalculateShipRates) { BasketShipment shipment = _basket.Shipments.FirstOrDefault(); if (shipment != null) { BindShippingMethods(shipment.Address, recalculateShipRates); } else { BindShippingMethods(null, recalculateShipRates); } }
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; } } }
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; } }
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); }
/// <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); }
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; } } } }
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); }
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); }
/// <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); }
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())); } } } }
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); }
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(); }
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(" ({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(); } }
//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; } }
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(" ({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(); } }
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; } }
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); }
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"); }