public override LSDecimal GetTaxResult(Order ThisOrder, AnonymousAddress Address, LSDecimal ShippingRate) { CommerceBuilder.Orders.Basket basket = ThisOrder.AcBasket; if (basket == null) { basket = AcHelper.GetAcBasket(ThisOrder.ShoppingCart, true); if (basket != null) { basket.Package(false); } ThisOrder.AcBasket = basket; } if (basket != null) { Orders.BasketItem basketItem = null; if (ShippingRate > 0) { //only temporarily add basket item for tax calculations basketItem = new Orders.BasketItem(); basketItem.OrderItemType = Orders.OrderItemType.Shipping; basketItem.Price = ShippingRate; basketItem.Quantity = 1; basketItem.Name = "Temp_GoogleCheckout"; //this basket item should be linked to the shipment if (basket.Shipments.Count > 0) { basketItem.BasketShipmentId = basket.Shipments[0].BasketShipmentId; } basket.Items.Add(basketItem); basketItem.BasketId = basket.BasketId; basketItem.Save(); } CommerceBuilder.Users.Address acAddress = AcHelper.GetAnonAcAddress(basket.User, Address); UpdateBillingAddress(basket.User, acAddress); foreach (Orders.BasketShipment shipment in basket.Shipments) { UpdateShipmentAddress(shipment, acAddress); } LSDecimal RetVal = Taxes.TaxCalculator.Calculate(basket); //now that the tax rate is calculated, we can remove the additional basket item if (basketItem != null) { basket.Items.Remove(basketItem); basketItem.Delete(); } return(RetVal); } else { return(0); } }
private void UpdateBillingAddress(CommerceBuilder.Users.User user, CommerceBuilder.Users.Address acAddress) { if (user.Addresses.Count == 0) { user.Addresses.Add(acAddress); } else { user.PrimaryAddress.FirstName = acAddress.FirstName; user.PrimaryAddress.LastName = acAddress.LastName; user.PrimaryAddress.Address1 = acAddress.Address1; user.PrimaryAddress.City = acAddress.City; user.PrimaryAddress.CountryCode = acAddress.CountryCode; user.PrimaryAddress.PostalCode = acAddress.PostalCode; user.PrimaryAddress.Province = acAddress.Province; user.PrimaryAddress.Residence = acAddress.Residence; } }
public override ShippingResult GetShippingResult(string ShipMethodName, Order ThisOrder, AnonymousAddress Address) { TraceContext trace = WebTrace.GetTraceContext(); ShippingResult RetVal = new ShippingResult(); RetVal.Shippable = false; CommerceBuilder.Orders.Basket basket = ThisOrder.AcBasket; if (basket == null) { basket = AcHelper.GetAcBasket(ThisOrder.ShoppingCart, true); if (basket != null) { basket.Package(false); } ThisOrder.AcBasket = basket; } if (basket == null || basket.Shipments.Count == 0) { return(RetVal); } ShipMethodCollection shipMethods = ThisOrder.AcShipMethods; if (shipMethods == null) { shipMethods = ShipMethodDataSource.LoadForStore(); ThisOrder.AcShipMethods = shipMethods; } if (shipMethods == null || shipMethods.Count == 0) { return(RetVal); } ShipMethod shipMethod; string methodName = ""; int shipMethodId = AcHelper.ExtractShipMethodId(ShipMethodName, out methodName); if (shipMethodId != 0) { shipMethod = AcHelper.FindShipMethod(shipMethods, shipMethodId); } else { shipMethod = AcHelper.FindShipMethod(shipMethods, methodName); } if (shipMethod == null) { return(RetVal); } CommerceBuilder.Users.Address acAddress = AcHelper.GetAnonAcAddress(basket.User, Address); if (!shipMethod.IsApplicableTo(acAddress)) { return(RetVal); } ShipRateQuote rateQuote; //TODO : should assign a default ship rate RetVal.ShippingRate = 0; bool isValid = true; foreach (Orders.BasketShipment bshipment in basket.Shipments) { bshipment.SetAddress(acAddress); if (!bshipment.IsShipMethodApplicable(shipMethod)) { isValid = false; break; } rateQuote = shipMethod.GetShipRateQuote(bshipment); if (rateQuote != null && rateQuote.TotalRate > 0) { RetVal.ShippingRate += rateQuote.TotalRate; } else if (rateQuote == null) { //this ship method is not applicable isValid = false; break; } } if (isValid) { RetVal.Shippable = true; } return(RetVal); }
public static AddressService.BaseAddress GetBaseAddressForAddressService(CommerceBuilder.Users.Address address) { return(GetBaseAddressForAddressService(address.Address1, address.Address2, address.City, address.Province, address.PostalCode, address.CountryCode)); }