// Assumption: Subtotal and Discount have been calculated for each line item static void calculateCommission(Invoice inv) { decimal commission; commission = inv.LineItems.Sum(x => getCommissionForItem(x, COMMISSION_RATE)); // This rounding looks odd... This is to round to the nearest 50 cents, so I double it, round to the nearest whole dollar, then cut it back in half. Simple inv.Commission = Math.Round(commission * 2.0m, 0) / 2.0m; }
public static void ExerciseOne(Invoice inv) { foreach (InvoiceItem item in inv.LineItems) { calculateSubTotalForItem(item); calculateTotalForItem(item, inv.TaxRate); } }
//invoice item Total public void CalculateTotal(Invoice inv) { Total = Taxable ? ((SubTotal - getDiscount(SubTotal)) * inv.TaxRate) + (SubTotal - getDiscount(SubTotal)) : (SubTotal - getDiscount(SubTotal)); }
public void assignInvoiceNumber(Invoice inv) { InvoiceId = inv.Id; }
public void PerformCalculations(IInvoice item, Invoice inv) { item.CalculateSubTotal(); item.CalculateTotal(inv); item.CalculateCommission(); }
// Assumption: Total has been calculated static void calculateTotal(Invoice inv) { inv.Total = inv.SubTotal + inv.Shipping;// +inv.Commission; }
// Assumption: Line item totals have been calculated static void calculateSubTotal(Invoice inv) { inv.SubTotal = inv.LineItems.Sum(x => { calculateTotalForItem(x, inv.TaxRate); return x.Total; }); }
public static void ExerciseTwo(Invoice inv) { calculateSubTotal(inv); calculateTotal(inv); }
public static void ExerciseThree(Invoice inv) { calculateCommission(inv); }