public void TestMoneyCanAddAndFormatAsTime(double worktime, double value, MoneyChargeRate chargeRate, double tax, string expected)
        {
            var wt       = new Worktime(worktime, WorktimePrecision.Minutes);
            var money    = Money.Get(wt, value, chargeRate);
            var taxValue = money.GetTax(tax);

            money = money.Add(taxValue);
            Assert.That(money.ToString(null, CultureInfo.InvariantCulture), Is.EqualTo(expected));
        }
Exemple #2
0
        /// <summary>
        ///		Calculates money based on the <see cref="Worktime"/> and the <see cref="MoneyChargeRate"/>
        /// </summary>
        /// <param name="worktime"></param>
        /// <param name="value"></param>
        /// <param name="chargeRate"></param>
        /// <returns></returns>
        public static Money Get(Worktime worktime, double value, MoneyChargeRate chargeRate)
        {
            var minuteWorktime =
                Worktime.ConvertValue(worktime.TimeWorked, worktime.Precision, WorktimePrecision.Minutes);
            double val;

            switch (chargeRate)
            {
            case MoneyChargeRate.PerMinute:
                val = minuteWorktime * value;
                break;

            case MoneyChargeRate.PerHour:
                val = (minuteWorktime / 60) * value;
                break;

            case MoneyChargeRate.PerQuarterHour:
                val = (minuteWorktime / 15) * value;
                break;

            case MoneyChargeRate.PerHalfHour:
                val = (minuteWorktime / 30) * value;
                break;

            case MoneyChargeRate.PerDay:
                val = (minuteWorktime / 1440) * value;
                break;

            case MoneyChargeRate.PerStartedHour:
                var hours    = minuteWorktime / 60;
                var fraction = hours % 60;
                if (fraction != 0)
                {
                    hours -= hours % 1;
                    hours += 1;
                }
                val = hours * value;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(chargeRate), chargeRate, null);
            }
            return(new Money(val));
        }
Exemple #3
0
 public static Money GetMoney([SourceObject] Worktime worktime, double rate, MoneyChargeRate chargeRate)
 {
     return(Get(worktime, rate, chargeRate));
 }