|
|
@@ -116,20 +116,20 @@ public static class InvoiceUtilities
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- var fixedcharge = activity.Charge.FixedCharge;
|
|
|
-
|
|
|
var chargeperiod = !activity.Charge.ChargePeriod.Equals(TimeSpan.Zero)
|
|
|
? activity.Charge.ChargePeriod
|
|
|
: TimeSpan.FromHours(1);
|
|
|
|
|
|
var rounded = quantity.Ceiling(chargeperiod);
|
|
|
|
|
|
- var multiplier = TimeSpan.FromHours(1).TotalHours / chargeperiod.TotalHours;
|
|
|
- var rate = activity.Charge.ChargeRate * multiplier;
|
|
|
+ // Rate is charge per hour, so we must divide by the charge period time, to get dollars per hour, rather than dollars per period
|
|
|
+ // $/hr = ($/pd) * (pd/hr) = ($/pd) / (hr/pd)
|
|
|
+ // where $/pd is ChargeRate and hr/pd = chargeperiod.TotalHours
|
|
|
+ var rate = activity.Charge.ChargeRate / chargeperiod.TotalHours;
|
|
|
|
|
|
- var mincharge = activity.Charge.MinimumCharge;
|
|
|
-
|
|
|
- charge = Math.Max(fixedcharge + (rounded.TotalHours * rate), mincharge);
|
|
|
+ charge = Math.Max(
|
|
|
+ activity.Charge.FixedCharge + (rounded.TotalHours * rate),
|
|
|
+ activity.Charge.MinimumCharge);
|
|
|
}
|
|
|
|
|
|
if(!timelines.TryGetValue(id, out var timeline))
|