internal void Generate(Settings.InstalmentPolicyDetail instalmentPolicyDetail, decimal instalmentAmount, int totalPeriod, DateTime tradeDay, int sequenceOffset = 1) { decimal monthRate = this.CalculateMonthRate(instalmentPolicyDetail.InterestRate, _instalment.Frequence); decimal remainAmount = instalmentAmount; decimal principle; decimal interest; for (int period = 0; period < totalPeriod; period++) { if (this.IsInstalmentDetailExist(period + 1)) { continue; } if (_instalment.InstalmentType == InstalmentType.EqualPrincipal || monthRate == 0m) { principle = InstalmentDetailCalculator.Round(instalmentAmount / totalPeriod); interest = InstalmentDetailCalculator.Round(remainAmount * monthRate); } else { var item = this.CalculateEqualInstalmentPrincipleAndInterest(monthRate, period, totalPeriod, instalmentAmount, remainAmount); principle = item.Item1; interest = item.Item2; } remainAmount -= principle; if (period == totalPeriod - 1 && remainAmount != 0) { principle += remainAmount; remainAmount = 0m; } DateTime dateTimeOnPlan = this.CalculateDateTimeOnPlan(tradeDay, _instalment.Frequence, period); _order.AddInstalmentDetail(new InstalmentDetail(_order, (sequenceOffset - 1) + period + 1, principle, interest, 0m, dateTimeOnPlan, null), OperationType.AsNewRecord); } }
internal void GenerateInstalmentDetails(Settings.InstalmentPolicyDetail instalmentPolicyDetail, decimal instalmentAmount, int totalPeriod, DateTime tradeDay, int sequenceOffset) { _instalmentDetailManager.Generate(instalmentPolicyDetail, instalmentAmount, totalPeriod, tradeDay, sequenceOffset); }