public void TestPlatformDeliveryOptions() { var json = LoadJson(@"D:\Works\Greenspot\Greenspot.Stall\Greenspot.Stall.Tests\platform.setting.json"); var stall = new Models.Stall(); stall.SettingJson = json; var delivery = StallApplication.GetDeliveryOptions(stall, new DateTime(2016, 10, 20, 16, 30, 0), 7, "nz:auckland:auckland:auckland-city", null, null); Assert.AreEqual(3, delivery.Count); }
public OperationResult <IList <DeliveryOptionCollectionViewModel> > GetDeliveryOptions(int id, [FromUri] string country, [FromUri] string city, [FromUri] string suburb, [FromUri] string area, [FromUri] decimal orderAmount) { string areaStr = $"{country}:{city}:{area.Replace(' ', '-')}".ToLower(); var result = new OperationResult <IList <DeliveryOptionCollectionViewModel> >(true) { Data = new List <DeliveryOptionCollectionViewModel>() }; Models.Stall stall = null; //get stall using (var db = new StallEntities()) { stall = Models.Stall.FindById(id, db); if (stall == null) { result.Succeeded = false; result.Message = "Can not load delivery schedule for stall " + id; return(result); } } //minimum delivery order amount if (stall.Setting.Delivery.MinOrderAmount != null && orderAmount < stall.Setting.Delivery.MinOrderAmount) { return(result); } // var advDays = stall.Setting.MaxAdvancedOrderDays > StallApplication.Setting.MaxAdvancedOrderDays ? StallApplication.Setting.MaxAdvancedOrderDays : stall.Setting.MaxAdvancedOrderDays; var advMins = stall.Setting.MinDeliveryAdvancedMinutes < StallApplication.Setting.MinDeliveryAdvancedMinutes ? StallApplication.Setting.MinDeliveryAdvancedMinutes : stall.Setting.MinDeliveryAdvancedMinutes; //get distance var distance = stall.GetDistance(country, city, suburb); IList <DeliveryOrPickupOption> deliveryOpts; if (stall.Setting.Delivery.DeliveryType == Models.Settings.DeliveryTypes.StoreOnly) { //get store delivery deliveryOpts = stall.GetDeliveryOptions(DateTime.Now.AddMinutes(advMins), advDays, areaStr, distance, orderAmount); } else { //get platform deliveryOpts = StallApplication.GetDeliveryOptions(stall, DateTime.Now.AddMinutes(advMins), advDays, areaStr, distance, orderAmount); } DeliveryOptionCollectionViewModel collection = null; DateTime currDate = DateTime.MinValue.Date; foreach (var opt in deliveryOpts) { //free delivery if (stall.Setting.Delivery.FreeDeliveryOrderAmount != null && orderAmount >= stall.Setting.Delivery.FreeDeliveryOrderAmount) { opt.Fee = 0; } var optObjs = opt.Divide(); foreach (var optObj in optObjs) { if (!optObj.IsApplicableToArea(areaStr)) { //has suitable area = available continue; } if (opt.From.Date != currDate) { //new date group collection = new DeliveryOptionCollectionViewModel(); result.Data.Add(collection); currDate = opt.From.Date; } //add collection.Options.Add(optObj); } } return(result); }