public void CalculateShipping(string address, double addressLatitude, double addressLongitude, Guid shippingMethodId) { if (_items == null || _items.Count == 0) { throw new Exception("No item to calculate"); } if (string.IsNullOrEmpty(address) || shippingMethodId == Guid.Empty) { throw new Exception("address and shipping method required"); } if (_isPreCalculated == false) { PreCalculate(); } var id = Guid.Parse(Id); long shippingFee = ShippingMethodServices.ShippingCost(id, shippingMethodId, address, addressLatitude, addressLongitude); var orderPromotionId = Guid.Empty; var orderPromo = OrderPromotionServices.CalculateForShipping(id); if (orderPromo != null) { if (orderPromo.FreeShip) { shippingFee = 0; } orderPromotionId = orderPromo.Id; } ApplyChange(new ShoppingCartPromotionCalulatedForOrderShipping(id, orderPromotionId)); ApplyChange(new ShoppingCartCalculatedShipping(id, shippingMethodId, shippingFee)); }
public long CalculateCost(Guid shoppingCartId, ShippingMethod config, string address, double latitude, double longitude) { var distance = ShippingMethodServices.CalculateDistance(shoppingCartId, address, latitude, longitude); if (distance > 1) { return((long)(distance * config.UnitCost)); } return(config.UnitCost); }
public JsonResult EstimateShippingCost(Guid shippingMethodId, string address, double addressLatitude, double addressLongitude) { if (shippingMethodId == Guid.Empty || string.IsNullOrEmpty(address)) { return(Json(new { Ok = false, Data = new { }, Message = "shipping method, address required" }, JsonRequestBehavior.AllowGet)); } var id = GetShoppingCartId(); MemoryMessageBuss.PushCommand(new EstimateShippingCostForShoppingCart(id, shippingMethodId, address, addressLatitude, addressLongitude)); ShoppingCart cart; using (var db = new CoreEcommerceDbContext()) { cart = db.ShoppingCarts.SingleOrDefault(i => i.Id == id); } double distance = ShippingMethodServices.CalculateDistance(id, address, addressLatitude, addressLongitude); return(Json(new { Ok = true, Data = new { Cart = cart, Distance = distance }, Message = "Success" }, JsonRequestBehavior.AllowGet)); }