Пример #1
0
        protected override decimal GetPayAdjustment(TaxCode taxCode, PayPeriods periods /*, int period*/)
        {
            if (taxCode.IsNoAdjustmentCode || !taxCode.TaxCodeNumber.HasValue || taxCode.TaxCodeNumber.Value == 0)
            {
                return(0);
            }

            var codeNumber = taxCode.TaxCodeNumber.Value;
            var remainder  = ((codeNumber - 1m) % 500) + 1m;
            var quotient   = Math.Floor(codeNumber - remainder) / 500m;

            var payPeriodForQuotient = (periods == PayPeriods.Monthly ? PayPeriods.Monthly : PayPeriods.Weekly);
            var quotientMult         = TaxMath.UpRound(500 * (10 / (decimal)payPeriodForQuotient), 2);

            remainder = ((remainder * 10) + 9) / (int)payPeriodForQuotient;
            remainder = Math.Ceiling(remainder * 100) / 100;
            //remainder *= Math.Round((decimal)payPeriodForQuotient / (decimal)periods);
            quotient = quotient * quotientMult;

            var adjustment = (quotient + remainder);// * period;

            adjustment *= Math.Round((decimal)payPeriodForQuotient / (decimal)periods);

            if (taxCode.IsPrefixCode)
            {
                adjustment *= -1;
            }

            return(adjustment);
        }
Пример #2
0
 public void UpRoundingTest()
 {
     Assert.AreEqual(1m, TaxMath.UpRound(0.99999m, 2));
     Assert.AreEqual(1.96m, TaxMath.UpRound(1.956m, 2));
     Assert.AreEqual(2.96m, TaxMath.UpRound(2.9555555m, 2));
     Assert.AreEqual(2.48m, TaxMath.UpRound(2.4719m, 2));
     Assert.AreEqual(978.55m, TaxMath.UpRound(978.54823m, 2));
     Assert.AreEqual(8956.55m, TaxMath.UpRound(8956.54168m, 2));
     Assert.AreEqual(654.17m, TaxMath.UpRound(654.168749m, 2));
     Assert.AreEqual(236514.47m, TaxMath.UpRound(236514.46984m, 2));
     Assert.AreEqual(784.47m, TaxMath.UpRound(784.4687m, 2));
 }