public void CalculateGermanyWithOneMillionLoanAmountOK()
        {
            #region Arrange
            var request = new AmortizationScheduleRequestDto
            {
                AmortizationSchedule = new AmortizationScheduleEntiti()
                {
                    LoanAmount     = (decimal)1000000.00,
                    AnnualInterest = (decimal)12,
                    NumberPayments = 24,
                    Method         = MethodTypeEnum.Germany
                }
            };
            #endregion Arrange

            var dependenceInjection = new Mock <IAmortizationScheduleService>();
            dependenceInjection.Setup(method => method.GetAmortizationScheduleAsync(1)).ReturnsAsync(new AmortizationScheduleEntiti());

            #region Act
            var response = new AmortizationScheduleDomain(dependenceInjection.Object, request.AmortizationSchedule.Method).GetAmortizationSchedule(request);
            #endregion Act

            #region Assert
            Assert.IsNotNull(response.AmortizationSchedule);
            #endregion Assert
        }
        public AmortizationScheduleResponseDto Calculate(AmortizationScheduleRequestDto request)
        {
            var response = new AmortizationScheduleResponseDto();

            var validator = new FrenchValidator();

            var validationResult = validator.Validate(request);

            if (!validationResult.IsValid)
            {
                response = validationResult.ToErrorEntiti <ValidationResult, AmortizationScheduleResponseDto>();

                return(response);
            }
            response.Status = 200;

            InitPeriods(ref response, request.AmortizationSchedule.NumberPayments);

            var previousPeriod = new PeriodEntiti();

            response.AmortizationSchedule.PeriodsList.ToList().ForEach(period =>
            {
                CalculatePeriod(ref period, request, previousPeriod);

                previousPeriod = period;
            });

            return(response);
        }
        public void GetAllAmortizationScheduleAsync()
        {
            #region Arrange
            var request = new AmortizationScheduleRequestDto
            {
                AmortizationSchedule = new AmortizationScheduleEntiti()
                {
                    LoanAmount     = (decimal)41990.00,
                    AnnualInterest = (decimal)8.25,
                    NumberPayments = 24,
                    Method         = MethodTypeEnum.French
                }
            };

            var dependenceInjection = new Mock <IAmortizationScheduleService>();
            dependenceInjection.Setup(method => method.GetAmortizationScheduleAsync(1)).ReturnsAsync(new AmortizationScheduleEntiti());

            #endregion Arrange

            #region Act
            var response = new AmortizationScheduleDomain(dependenceInjection.Object, request.AmortizationSchedule.Method).GetAmortizationSchedule(request);
            #endregion Act

            #region Assert

            Assert.IsNotNull(response.AmortizationSchedule);
            Assert.IsTrue(response.AmortizationSchedule.PeriodsList.Count == request.AmortizationSchedule.NumberPayments);
            //Assert.IsTrue(response.TotalAmount == (decimal)100032.343);
            #endregion Assert
        }
Example #4
0
        private void CalculatePeriod(ref PeriodEntiti period, AmortizationScheduleRequestDto request, PeriodEntiti previousPeriod)
        {
            var interesMensual = (request.AmortizationSchedule.AnnualInterest / int.Parse(FinantialDefinitionsResource.Porcent)) / int.Parse(FinantialDefinitionsResource.MonthsInAYear);

            if (period.NumPeriod == int.Parse(FinantialDefinitionsResource.InitialPeriod))
            {
                previousPeriod.SaldoFinal   = request.AmortizationSchedule.LoanAmount;
                previousPeriod.AbonoCapital = request.AmortizationSchedule.LoanAmount / request.AmortizationSchedule.NumberPayments;
                period.Intereses            = Math.Truncate(100 * (previousPeriod.SaldoFinal * interesMensual)) / 100;
            }

            period.SaldoInicial = previousPeriod.SaldoFinal;
            period.Intereses    = Math.Truncate(100 * (period.SaldoInicial * interesMensual)) / 100;
            period.AbonoCapital = Math.Truncate(100 * (previousPeriod.AbonoCapital)) / 100;
            period.Cuota        = Math.Truncate(100 * (period.Intereses + period.AbonoCapital)) / 100;
            period.SaldoFinal   = period.SaldoInicial - previousPeriod.AbonoCapital;
        }
        private void CalculatePeriod(ref PeriodEntiti period, AmortizationScheduleRequestDto request, PeriodEntiti previousPeriod)
        {
            var interesMensual = (request.AmortizationSchedule.AnnualInterest / int.Parse(FinantialDefinitionsResource.Porcent)) / int.Parse(FinantialDefinitionsResource.MonthsInAYear);

            if (period.NumPeriod == int.Parse(FinantialDefinitionsResource.InitialPeriod))
            {
                previousPeriod.SaldoFinal = request.AmortizationSchedule.LoanAmount;

                var numberOne  = int.Parse(FinantialDefinitionsResource.OneNumber);
                var baseNumber = (double)(numberOne + interesMensual);
                var pow        = (decimal)Math.Pow(baseNumber, request.AmortizationSchedule.NumberPayments);

                previousPeriod.Cuota = request.AmortizationSchedule.LoanAmount * ((pow * interesMensual) / (pow - numberOne));
            }

            period.SaldoInicial = previousPeriod.SaldoFinal;
            period.Cuota        = previousPeriod.Cuota;
            period.Intereses    = period.SaldoInicial * interesMensual;
            period.AbonoCapital = period.Cuota - period.Intereses;
            period.SaldoFinal   = period.SaldoInicial - period.AbonoCapital;
        }
        public void CalculateGermanyWithNegativeInteresFail()
        {
            #region Arrange
            var request = new AmortizationScheduleRequestDto
            {
                AmortizationSchedule = new AmortizationScheduleEntiti()
                {
                    LoanAmount     = (decimal)25000.00,
                    AnnualInterest = (decimal) - 8.25,
                    NumberPayments = 12,
                    Method         = MethodTypeEnum.Germany
                }
            };
            #endregion Arrange

            #region Act
            var response = new AmortizationScheduleDomain(null, request.AmortizationSchedule.Method).GetAmortizationSchedule(request);
            #endregion Act

            #region Assert
            Assert.IsNull(response.AmortizationSchedule);
            #endregion Assert
        }
        public AmortizationScheduleResponseDto Calculate(AmortizationScheduleRequestDto request)
        {
            var response = new AmortizationScheduleResponseDto();

            return(response);
        }
Example #8
0
        public IActionResult GetAmortizationSchedule([FromBody] AmortizationScheduleRequestDto request)
        {
            var response = new AmortizationScheduleDomain(amortizationScheduleService, request.AmortizationSchedule.Method).GetAmortizationSchedule(request);

            return(response.GetActionResult((uint)response.Status));
        }
 public AmortizationScheduleResponseDto GetAmortizationSchedule(AmortizationScheduleRequestDto request)
 {
     return(AmortizationScheduleContract.Calculate(request));
 }