} //TaxOrder private static decimal AdjustOrder(AjaxOrder order, BusinessRules rules) { //this method allows special order pricing to be applied based on order.campaign or Business Rules (no implementation currently). decimal adjustment = 0; return(adjustment); } //TaxOrder
public JsonResult Order(AjaxOrder model) { if (ModelState.IsValid) { IEnumerable <IOrderable> workplace = null; switch (model.Tab) { case "presentations": workplace = db.Presentations; break; case "videos": workplace = db.Videos; break; case "documents": workplace = db.Documents; break; case "files": workplace = db.Files; break; case "tests": workplace = db.Tests; break; } foreach (var item in model.Order) { var orderable = workplace.Where(o => o.Id == item.Id).FirstOrDefault(); orderable.Order = item.Order; Debug.WriteLine(item.Id + " => " + item.Order); } db.SaveChanges(); return(Json(new AjaxResult() { IsOk = true })); } return(Json(new AjaxResult() { IsOk = false })); }
} //CalculateOrderItem private static decimal SubtotalOrder(AjaxOrder order, BusinessRules rules) { decimal subtotal = 0; foreach (AjaxOrderItem item in order.Items) { subtotal += item.LineTotal; } return(subtotal); } //SubtotalOrder
public static AjaxOrder CalculateOrder(AjaxOrder order, BusinessRules busRules, TaxRate[] taxRates) { for (int j = 0; j < order.Items.Length; j++) { order.Items[j] = CalculateOrderItem(order.Items[j], order.Campaign, busRules); } order.Subtotal = SubtotalOrder(order, busRules); order.ShipHand = ShipHandOrder(order, busRules); order.Tax = TaxOrder(order, busRules, taxRates); order.Adjustment = AdjustOrder(order, busRules); order.Total = TotalOrder(order, busRules); return(order); } //CalculateOrder
} //ShipHandOrder private static decimal TaxOrder(AjaxOrder order, BusinessRules rules, TaxRate[] taxRates) { TaxRate applicableTaxRate = taxRates.SingleOrDefault(x => x.State == order.ShipState); if (applicableTaxRate.AppliesToShipHand) { return((order.Subtotal + order.ShipHand) * applicableTaxRate.Rate); } else { return(order.Subtotal * applicableTaxRate.Rate); } } //TaxOrder
//this method is an AJAX target for CalculateOrder public async Task<JsonResult> CalculateOrderAsync() { Stream req = Request.InputStream; req.Seek(0, SeekOrigin.Begin); string payload = new StreamReader(req).ReadToEnd(); AjaxOrder requestOrder = JsonConvert.DeserializeObject<AjaxOrder>(payload); BusinessRules busRules = await repository.GetBusinessRulesAsync(); TaxRate[] taxRates = await repository.GetTaxRatesAsync(); AjaxOrder responseOrder = OrderCalculator.CalculateOrder(requestOrder, busRules, taxRates); JsonResult response = Json(responseOrder); response.JsonRequestBehavior = JsonRequestBehavior.AllowGet; return response; } //CalculateOrderAsync
} //SubtotalOrder private static decimal ShipHandOrder(AjaxOrder order, BusinessRules rules) { int totalquantity = 0; foreach (AjaxOrderItem item in order.Items) { totalquantity += item.Quantity; } if (rules.ShipHandPerItem) { return(rules.ShipHandAmount * totalquantity); } else { return((totalquantity > 0) ? rules.ShipHandAmount : 0); } } //ShipHandOrder
} //TaxOrder private static decimal TotalOrder(AjaxOrder order, BusinessRules rules) { return(order.Subtotal + order.Tax + order.ShipHand + order.Adjustment); } //TotalOrder