Esempio n. 1
0
        public void CalculateFeeLaFullPeriodWithFeeChangeMultipleChgInOnePeriodForCustomDates()
        {
            FeeCalculatorService srv = new FeeCalculatorService();

            var schedules       = getSchedules(40);
            var invoiceResident = new InvoiceResident(40, "John", schedules);

            var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 03, 31));

            var feesPerSchedules = resident.GetSchedules();
            var amounts          = feesPerSchedules.Select(c => c.AmountDue).ToArray();
            var totalAmount      = amounts.Sum();

            // Multiple Fee changes
            // (40, 1, 1, new DateTime(2019, 01, 01), new DateTime(2020, 01, 10), 600.50M));
            // (40, 1, 1, new DateTime(2020, 01, 11), new DateTime(2020, 01, 15), 630.90M));
            // (40, 1, 1, new DateTime(2020, 01, 16), new DateTime(2050, 12, 31), 250.50M));
            // (40, 99, 2, new DateTime(2019, 01, 01), new DateTime(2020, 01, 10), 150.44M));
            // (40, 99, 2, new DateTime(2020, 01, 11), new DateTime(2020, 01, 15), 165.78M));
            // (40, 99, 2, new DateTime(2020, 01, 16), new DateTime(2050, 12, 31), 550.58M));

            // LA 600.50    CC 150.44  for 10 days
            // LA 630.90    CC 165.78  for  5 days
            // LA 250.50    CC 550.58  for 13 days  91 days

            Assert.AreEqual(10339.26M, totalAmount);
        }
Esempio n. 2
0
        public void GetInvoiceDataByDateTest()
        {
            var startDate = new DateTime(2020, 01, 01);
            var endDate   = new DateTime(2020, 01, 31);
            // arrange
            Mock <IInvoiceDataProvider>      mockInvDP            = new Mock <IInvoiceDataProvider>();
            Mock <IResidentDataProvider>     mockResDP            = new Mock <IResidentDataProvider>();
            IFeeCalculatorService            feeCalculatorService = new FeeCalculatorService();
            Mock <IUserService>              mockUserDP           = new Mock <IUserService>();
            Mock <IBillingCycleDataProvider> mockBcDP             = new Mock <IBillingCycleDataProvider>();

            mockResDP.Setup(m => m.GetResidents()).Returns(GetResidents());
            mockInvDP.Setup(m => m.GetAllSchedulesForInvoiceDate(startDate, endDate)).Returns(GetSchedulePayments());
            mockUserDP.Setup(m => m.GetUsers()).Returns(GetUsers());

            IInvoiceService srv    = new InvoiceService(mockInvDP.Object, mockResDP.Object, feeCalculatorService, mockUserDP.Object, mockBcDP.Object);
            var             actual = srv.GetInvoiceData(startDate, endDate);

            // assert
            decimal[] amountDues = { 714.29M, 285.71M, 1200.00M, 900.00M }; // calcualted based on dates. see schedule data
            decimal   wkFee      = 700.00M;

            Assert.AreEqual(wkFee, actual.InvoiceResidents.FirstOrDefault().ResidentWeeklyFee);
            var sps = actual.InvoiceResidents.FirstOrDefault().SchedulePayments.ToList();
            int i   = 0;

            sps.ForEach(s =>
            {
                Assert.AreEqual(amountDues[i], s.AmountDue);
                i++;
            });
        }
Esempio n. 3
0
        public void CalculateFeeLaResidentArrivesMidMonth()
        {
            FeeCalculatorService srv = new FeeCalculatorService();

            var schedules       = getSchedules(21);
            var invoiceResident = new InvoiceResident(21, "John", schedules);

            var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28));

            var feesPerSchedules = resident.GetSchedules();
            var amounts          = feesPerSchedules.Select(c => c.AmountDue).ToArray();
            var totalAmount      = amounts.Sum();

            // Fee = la= 678.01
            // For 8 days: 774.87
            Assert.AreEqual(774.87M, totalAmount);
        }
Esempio n. 4
0
        public void CalculateFeeLaResidentLeavesMidMonth()
        {
            FeeCalculatorService srv = new FeeCalculatorService();

            var schedules       = getSchedules(20);
            var invoiceResident = new InvoiceResident(20, "John", schedules);

            var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28));

            var feesPerSchedules = resident.GetSchedules();
            var amounts          = feesPerSchedules.Select(c => c.AmountDue).ToArray();
            var totalAmount      = amounts.Sum();

            // Fee = la= 680.10
            // For 15 days: 1457.36
            Assert.AreEqual(1457.36M, totalAmount);
        }
Esempio n. 5
0
        public void CalculateFeeLaAndCcFullPeriodNoFeeChange()
        {
            FeeCalculatorService srv = new FeeCalculatorService();

            var schedules       = getSchedules(11);
            var invoiceResident = new InvoiceResident(11, "John", schedules);

            var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28));

            var feesPerSchedules = resident.GetSchedules();
            var amounts          = feesPerSchedules.Select(c => c.AmountDue).ToArray();
            var totalAmount      = amounts.Sum();

            // Fee = la= 555.75M  cc= 245.43M
            // For 28 days: 555.75+245.43 / 7 * 28 = 3204.72
            Assert.AreEqual(3204.72M, totalAmount);
        }
Esempio n. 6
0
        public void CalculateFeeLaFullPeriodNoFeeChangeForCustomDates()
        {
            FeeCalculatorService srv = new FeeCalculatorService();

            var schedules       = getSchedules(10);
            var invoiceResident = new InvoiceResident(10, "John", schedules);

            var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 03, 31)); // <<--quarter

            var feesPerSchedules = resident.GetSchedules();
            var amounts          = feesPerSchedules.Select(c => c.AmountDue).ToArray();
            var totalAmount      = amounts.Sum();

            // Fee = 599.99M
            // For 91 days: 599.99 / 7 * 91 = 7799.87
            Assert.AreEqual(7799.87M, totalAmount);
        }
Esempio n. 7
0
        public void CalculateFeeLaFullPeriodNoFeeChange()
        {
            FeeCalculatorService srv = new FeeCalculatorService();

            // get schedules for John
            var schedules       = getSchedules(10);
            var invoiceResident = new InvoiceResident(10, "John", schedules);

            var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28));

            var feesPerSchedules = resident.GetSchedules();
            var amounts          = feesPerSchedules.Select(c => c.AmountDue).ToArray();
            var totalAmount      = amounts.Sum();

            // Fee = 599.99M
            // For 28 days: 599.99 / 7 * 28 = 2399.96
            Assert.AreEqual(2399.96M, totalAmount);
        }
Esempio n. 8
0
        public void CalculateFeeLaFullPeriodWithFeeChange()
        {
            FeeCalculatorService srv = new FeeCalculatorService();

            var schedules       = getSchedules(30);
            var invoiceResident = new InvoiceResident(30, "John", schedules);

            var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28));

            var feesPerSchedules = resident.GetSchedules();
            var amounts          = feesPerSchedules.Select(c => c.AmountDue).ToArray();
            var totalAmount      = amounts.Sum();

            // (30, 1, 1, new DateTime(2019, 01, 01), new DateTime(2020, 01, 15), 630.50M));
            // (30, 1, 1, new DateTime(2020, 01, 16), new DateTime(2050, 12, 31), 655.75M));
            // For 630.50 for 15 days = 1351.07
            // For 655.75 for 13 days = 1217.82  = 2568.89
            Assert.AreEqual(2568.89M, totalAmount);
        }
Esempio n. 9
0
        public void CalculateFeeLaAndCcWithLaMultiplePaymentsAndCcMultiplePayments()
        {
            FeeCalculatorService srv = new FeeCalculatorService();

            var schedules       = getSchedules(50);
            var invoiceResident = new InvoiceResident(50, "John", schedules);

            var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28));

            var feesPerSchedules = resident.GetSchedules();
            var amounts          = feesPerSchedules.Select(c => c.AmountDue).ToArray();
            var totalAmount      = amounts.Sum();

            // multiple payments categories from la
            // (50, 1, 1, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 499.99M));
            // (50, 1, 1, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 69.75M));
            // (50, 1, 1, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 25.55M));
            // (50, 99, 2, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 125.75M));
            // (50, 99, 2, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 13.33M));


            // For 28 days: all totals = 2937.48
            Assert.AreEqual(2937.48M, totalAmount);
        }