public void CalculateExpectedOLB2() { LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.Flat, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1 } }; package.KeepExpectedInstallment = false; package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB; Loan myContract = new Loan(package, 20000, 0.02m, 10, 0, new DateTime(2009, 1, 17), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.Repay(1, new DateTime(2009, 1, 17), 1000, true, false); Assert.AreEqual(19000, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(17100, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(15200, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(13300, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(11400, myContract.CalculateExpectedOlb(5, false).Value); Assert.AreEqual(9500, myContract.CalculateExpectedOlb(6, false).Value); Assert.AreEqual(7600, myContract.CalculateExpectedOlb(7, false).Value); Assert.AreEqual(5700, myContract.CalculateExpectedOlb(8, false).Value); Assert.AreEqual(3800, myContract.CalculateExpectedOlb(9, false).Value); Assert.AreEqual(1900, myContract.CalculateExpectedOlb(10, false).Value); }
public void CalculateExpectedOLB_Flat_Accrual() { ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.ACCOUNTINGPROCESS, OAccountingProcesses.Accrual); LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.Flat, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1, UseCents = true} }; package.KeepExpectedInstallment = false; package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB; Loan myContract = new Loan(package, 1000, 0.03m, 6, 1, new DateTime(2009, 2, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.Repay(1, new DateTime(2009, 3, 2), 31.07m, true, false); myContract.Repay(2, new DateTime(2009, 4, 1), 230, true, false); myContract.Repay(3, new DateTime(2009, 4, 7), 806m, true, false); Assert.AreEqual(1000, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(800m, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(0m, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(0m, myContract.CalculateExpectedOlb(5, false).Value); Assert.AreEqual(0m, myContract.CalculateExpectedOlb(6, false).Value); }
public void TestCalculateOLBWith2MonthOfGracePeriodWhenDecliningExotic() { Assert.Ignore(); LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.DecliningFixedInstallments, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1 } }; ExoticInstallmentsTable exoticProduct = new ExoticInstallmentsTable(); exoticProduct.Add(new ExoticInstallment(1, 0.1, null)); exoticProduct.Add(new ExoticInstallment(2, 0.1, null)); exoticProduct.Add(new ExoticInstallment(3, 0.1, null)); exoticProduct.Add(new ExoticInstallment(4, 0.1, null)); exoticProduct.Add(new ExoticInstallment(5, 0.1, null)); exoticProduct.Add(new ExoticInstallment(6, 0.5, null)); package.ExoticProduct = exoticProduct; Loan myContract = new Loan(package, 1000, 0.03m, 8, 2, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.Repay(1, new DateTime(2006, 2, 1), 100, true, false); Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(930m, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(930m, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(837m, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(744m, myContract.CalculateExpectedOlb(5, false).Value); Assert.AreEqual(651m, myContract.CalculateExpectedOlb(6, false).Value); Assert.AreEqual(558m, myContract.CalculateExpectedOlb(7, false).Value); Assert.AreEqual(465m, myContract.CalculateExpectedOlb(8, false).Value); }
public void TestCalculateOLBWith2MonthOfGracePeriod() { ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.CALCULATIONLATEFEESDURINGPUBLICHOLIDAYS, true); LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.Flat, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1 } }; package.KeepExpectedInstallment = false; package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB; Loan myContract = new Loan(package, 1000, 0.03m, 7, 2, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.AnticipatedTotalRepaymentPenalties = 0.03; Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(800m, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(600m, myContract.CalculateExpectedOlb(5, false).Value); Assert.AreEqual(400m, myContract.CalculateExpectedOlb(6, false).Value); Assert.AreEqual(200m, myContract.CalculateExpectedOlb(7, false).Value); }
public void TestCalculateOLB6() { LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.Flat, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1 } }; package.KeepExpectedInstallment = false; package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB; Loan myContract = new Loan(package, 1000, 0.03m, 6, 1, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.AnticipatedTotalRepaymentPenalties = 0.03; myContract.Repay(1, new DateTime(2006, 2, 1), 30, false, false); RepaymentEvent rE = myContract.Repay(2, new DateTime(2006, 3, 3), 1000, false, true); Assert.AreEqual(0m, rE.Fees.Value); Assert.AreEqual(150m, rE.Interests.Value); Assert.AreEqual(850m, rE.Principal.Value); Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(1, true).Value); Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(2, true).Value); Assert.AreEqual(800m, myContract.CalculateExpectedOlb(3, true).Value); Assert.AreEqual(600m, myContract.CalculateExpectedOlb(4, true).Value); Assert.AreEqual(400m, myContract.CalculateExpectedOlb(5, true).Value); Assert.AreEqual(200m, myContract.CalculateExpectedOlb(6, true).Value); }
public void TestCalculateOLB4() { LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.DecliningFixedInstallments, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1, UseCents = true} }; package.KeepExpectedInstallment = false; package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB; Loan myContract = new Loan(package, 1000, 0.03m, 6, 0, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.AnticipatedTotalRepaymentPenalties = 0.03; Assert.AreEqual(1000m, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(845.40m, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(686.16m, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(522.14m, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(353.21m, myContract.CalculateExpectedOlb(5, false).Value); Assert.AreEqual(179.22m, myContract.CalculateExpectedOlb(6, false).Value); myContract.Repay(1,new DateTime(2006,2,1),184.60m,false,false); RepaymentEvent rE = myContract.Repay(2,new DateTime(2006,4,3),369.2m,false,false); Assert.AreEqual(0m, rE.Fees.Value); Assert.AreEqual(45.94m, rE.Interests.Value); Assert.AreEqual(323.26m, rE.Principal.Value); Assert.AreEqual(1000, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(845.40m, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(686.16m, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(522.14m, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(353.21m, myContract.CalculateExpectedOlb(5, false).Value); Assert.AreEqual(179.22m, myContract.CalculateExpectedOlb(6, false).Value); }
public void TestCalculateOLB3() { ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.CALCULATIONLATEFEESDURINGPUBLICHOLIDAYS, true); ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.ACCOUNTINGPROCESS, OAccountingProcesses.Accrual); LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.Flat, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1, UseCents = true } }; package.KeepExpectedInstallment = false; package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB; Loan myContract = new Loan(package, 1000, 0.03m, 6, 1, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.AnticipatedTotalRepaymentPenalties = 0.03; myContract.Repay(1, new DateTime(2006, 2, 1), 30, false, false); RepaymentEvent rE = myContract.Repay(2, new DateTime(2006, 3, 3), 1055.82m, false, false); Assert.AreEqual(24, rE.Fees.Value); Assert.AreEqual(31.82m, rE.Interests.Value); Assert.AreEqual(1000, rE.Principal.Value); Assert.AreEqual(1000, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(1000, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(800m, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(0, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(0, myContract.CalculateExpectedOlb(5, false).Value); Assert.AreEqual(0, myContract.CalculateExpectedOlb(6, false).Value); }
public void OLB_DecliningFixedInstallments_OneRepayment_OneMonthGracePeriod_Overdue_KeepNotExpectedInstallment() { ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.ACCOUNTINGPROCESS, OAccountingProcesses.Accrual); LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.DecliningFixedInstallments, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1, UseCents = true} }; Loan myContract = new Loan(package, 750, 0.03m, 9, 1, new DateTime(2006, 2, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.Repay(1, new DateTime(2006, 3, 1), 740, false, false); Assert.AreEqual(750, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(32.5m, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(28.85m, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(25.09m, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(21.21m, myContract.CalculateExpectedOlb(5, false).Value); Assert.AreEqual(17.22m, myContract.CalculateExpectedOlb(6, false).Value); Assert.AreEqual(13.11m, myContract.CalculateExpectedOlb(7, false).Value); Assert.AreEqual(8.87m, myContract.CalculateExpectedOlb(8, false).Value); Assert.AreEqual(4.51m, myContract.CalculateExpectedOlb(9, false).Value); }
public void TestRepayFlat_GracePeriod_KeepNotExpectedInstallments() { ApplicationSettings.GetInstance("").UpdateParameter(OGeneralSettings.ACCOUNTINGPROCESS, OAccountingProcesses.Accrual); LoanProduct package = new LoanProduct { InstallmentType = new InstallmentType(1, "Monthly", 0, 1), LoanType = OLoanTypes.Flat, ChargeInterestWithinGracePeriod = true, Currency = new Currency { Id = 1, UseCents = true } }; package.KeepExpectedInstallment = false; package.AnticipatedTotalRepaymentPenaltiesBase = OAnticipatedRepaymentPenaltiesBases.RemainingOLB; Loan myContract = new Loan(package, 50000, 0.01m, 8, 2, new DateTime(2006, 1, 1), new User(), ApplicationSettings.GetInstance(""), NonWorkingDateSingleton.GetInstance(""), ProvisionTable.GetInstance(new User()), ChartOfAccounts.GetInstance(new User())); myContract.BadLoan = false; myContract.Repay(1, new DateTime(2006, 2, 1), 1050, true, true); myContract.Repay(2, new DateTime(2006, 6, 1), 40000, true, true); Assert.AreEqual(50000, myContract.CalculateExpectedOlb(1, false).Value); Assert.AreEqual(50000, myContract.CalculateExpectedOlb(2, false).Value); Assert.AreEqual(50000m, myContract.CalculateExpectedOlb(3, false).Value); Assert.AreEqual(41666.67m, myContract.CalculateExpectedOlb(4, false).Value); Assert.AreEqual(33333.34m, myContract.CalculateExpectedOlb(5, false).Value); //Assert.AreEqual(11428m, myContract.CalculateExpectedOLB(6, false).Value); //Assert.AreEqual(7618.67m, myContract.CalculateExpectedOLB(7, false).Value); //Assert.AreEqual(3809.34m, myContract.CalculateExpectedOLB(8, false).Value); }
/// <summary> /// Cancels last event from given contract, restores associated installment status. /// and restores Client(individual, corporate) status /// </summary> /// <param name="contract">Contract</param> /// <param name="pClient"></param> /// <param name="comment"> </param> /// <returns>Cancelled event</returns> public Event CancelLastEvent(Loan contract, IClient pClient, string comment) { using (SqlConnection conn = _loanManager.GetConnection()) using (SqlTransaction sqlTransaction = conn.BeginTransaction()) { Event cancelledEvent; try { Event evnt = contract.GetLastNonDeletedEvent(); if (null == evnt) throw new OpenCbsContractSaveException(OpenCbsContractSaveExceptionEnum.EventIsNull); if (!evnt.Cancelable) throw new OpenCbsContractSaveException(OpenCbsContractSaveExceptionEnum.EventNotCancelable); if (string.IsNullOrEmpty(comment)) throw new OpenCbsContractSaveException(OpenCbsContractSaveExceptionEnum.EventCommentIsEmpty); if (pClient is Person) evnt.ClientType = OClientTypes.Person; else if (pClient is Group) evnt.ClientType = OClientTypes.Group; else if (pClient is Corporate) evnt.ClientType = OClientTypes.Corporate; else if (pClient is Village) evnt.ClientType = OClientTypes.Village; evnt.Comment = comment; evnt.CancelDate = TimeProvider.Now; // if event is loan close event, we delete it first if (evnt is LoanCloseEvent) { _ePs.CancelFireEvent(evnt, sqlTransaction, contract, contract.Product.Currency.Id); evnt.Deleted = true; evnt = contract.GetLastNonDeletedEvent(); if (pClient is Person) evnt.ClientType = OClientTypes.Person; else if (pClient is Group) evnt.ClientType = OClientTypes.Group; else if (pClient is Corporate) evnt.ClientType = OClientTypes.Corporate; else if (pClient is Village) evnt.ClientType = OClientTypes.Village; evnt.Comment = comment; evnt.CancelDate = TimeProvider.Now; } _ePs.CancelFireEvent(evnt, sqlTransaction, contract, contract.Product.Currency.Id); _ePs.UpdateCommentForLoanEvent(evnt, sqlTransaction); evnt.Deleted = true; //in case total repayment there could be several rep events foreach (RepaymentEvent evt in contract.Events.GetRepaymentEvents()) { if ((evt.ParentId == evnt.ParentId && evnt.ParentId != null) || (evt.Id == evnt.ParentId)) { evt.Deleted = true; evt.Comment = evnt.Comment; _ePs.UpdateCommentForLoanEvent(evt, sqlTransaction); } } if (evnt.Code == "ATR" || evnt.Code == "RBLE") { foreach (Event cie in contract.Events) { if (cie is CreditInsuranceEvent) if (cie.Deleted == false && cie.Code == "LCIP") { _ePs.CancelFireEvent(cie, sqlTransaction, contract, contract.Product.Currency.Id); cie.Deleted = true; } } } cancelledEvent = evnt; // Restore the installment status. UnarchiveInstallments(contract, cancelledEvent, sqlTransaction); contract.InstallmentList = _instalmentManager.SelectInstallments(contract.Id, sqlTransaction); contract.GivenTranches = _loanManager.SelectTranches(contract.Id, sqlTransaction); contract.NbOfInstallments = contract.InstallmentList.Count; foreach (Installment installment in contract.InstallmentList) { installment.OLB = contract.CalculateExpectedOlb(installment.Number, true); } if (evnt is LoanDisbursmentEvent) { contract.Disbursed = false; } else if (evnt is RescheduleLoanEvent) { contract.Rescheduled = false; } else if (cancelledEvent is TrancheEvent) { contract.Amount = contract.Amount - (cancelledEvent as TrancheEvent).Amount; TrancheEvent trancheEventToDelete = new TrancheEvent(); foreach (var trancheEvent in contract.GivenTranches) { if (trancheEvent.Id == cancelledEvent.Id) { trancheEventToDelete = trancheEvent; } } contract.GivenTranches.Remove(trancheEventToDelete); if (contract.AllInstallmentsRepaid) { contract.ContractStatus = OContractStatus.Closed; contract.Closed = true; //Restore interest rate contract.InterestRate = contract.GivenTranches[contract.GivenTranches.Count - 1].InterestRate.Value; } } else if (cancelledEvent is RepaymentEvent) { //restor a person of the corporate _clientManager.RestorMemberOfGroupByEventId(cancelledEvent.Id, contract, sqlTransaction); contract.EscapedMember = null; if (cancelledEvent.RepaymentType == OPaymentType.TotalPayment) { if (contract.HasCompulsoryAmount()) { SavingEvent savingUnblockEvent = contract.CompulsorySavings.Events.FirstOrDefault(e => e.LoanEventId == cancelledEvent.Id); if (savingUnblockEvent != null) { _savingEventManager.DeleteSavingsEventByLoanEventId( cancelledEvent.ParentId ?? cancelledEvent.Id, sqlTransaction); savingUnblockEvent.Deleted = true; } } } } if (!contract.WrittenOff && !contract.AllInstallmentsRepaid) { contract.Closed = false; if (evnt is LoanDisbursmentEvent) contract.ContractStatus = OContractStatus.Validated; else { contract.ContractStatus = evnt is LoanValidationEvent ? OContractStatus.Pending : OContractStatus.Active; } } //come back after write off if (evnt is WriteOffEvent) { contract.WrittenOff = false; contract.ContractStatus = OContractStatus.Active; CreditInsuranceEvent lciw = contract.GetNotDeletedInsuranceWriteOff(); if (lciw != null) { _ePs.CancelFireEvent(lciw, sqlTransaction, contract, contract.Product.Currency.Id); lciw.Deleted = true; } } _loanManager.UpdateLoan(contract, sqlTransaction); FundingLineEvent flFundingLineEvent; if (cancelledEvent is LoanDisbursmentEvent) { if (contract.HasCompulsoryAmount()) { _savingEventManager.DeleteSavingsEventByLoanEventId( cancelledEvent.ParentId ?? cancelledEvent.Id, sqlTransaction); SavingBlockCompulsarySavingsEvent savingBlockEvent = contract.CompulsorySavings.GetBlockCompulsorySavingEvent(); savingBlockEvent.Deleted = true; } LoanDisbursmentEvent temp = (LoanDisbursmentEvent)cancelledEvent; flFundingLineEvent = new FundingLineEvent { Code = String.Concat("DE_", contract.Code), Type = OFundingLineEventTypes.Disbursment, Amount = temp.Amount, Movement = OBookingDirections.Debit, CreationDate = TimeProvider.Now, FundingLine = contract.FundingLine }; DeleteFundingLineEvent(ref contract, flFundingLineEvent, sqlTransaction); _clientManager.DecrementLoanCycleByContractId(contract.Id, sqlTransaction); // delete entry fee events foreach (Event contractEvent in contract.Events) { if (contractEvent.Deleted) continue; if (contractEvent is LoanEntryFeeEvent) { _ePs.CancelFireEvent(contractEvent, sqlTransaction, contract, contract.Product.Currency.Id); contractEvent.Deleted = true; } if (contractEvent is CreditInsuranceEvent) { _ePs.CancelFireEvent(contractEvent, sqlTransaction, contract, contract.Product.Currency.Id); contractEvent.Deleted = true; } } if (evnt.ClientType == OClientTypes.Person) { if (_econimcActivityServices.EconomicActivityLoanHistoryExists(contract.Id, pClient.Id, sqlTransaction)) _econimcActivityServices.UpdateDeletedEconomicActivityLoanHistory(contract.Id, pClient.Id, ((Person)pClient).Activity.Id, sqlTransaction, true); } else if (evnt.ClientType == OClientTypes.Group) { foreach (Member member in ((Group)pClient).Members) { if (_econimcActivityServices.EconomicActivityLoanHistoryExists(contract.Id, member.Tiers.Id, sqlTransaction)) _econimcActivityServices.UpdateDeletedEconomicActivityLoanHistory(contract.Id, member.Tiers.Id, ((Person)member.Tiers).Activity.Id, sqlTransaction, true); } } else if (evnt.ClientType == OClientTypes.Corporate) { if (_econimcActivityServices.EconomicActivityLoanHistoryExists(contract.Id, pClient.Id, sqlTransaction)) _econimcActivityServices.UpdateDeletedEconomicActivityLoanHistory(contract.Id, pClient.Id, ((Corporate)pClient).Activity.Id, sqlTransaction, true); } } else if (cancelledEvent is RepaymentEvent) { RepaymentEvent temp = (RepaymentEvent)cancelledEvent; decimal amountCalc = (temp.Principal.HasValue ? temp.Principal.Value : 0) + (ApplicationSettings.GetInstance(_user != null ? _user.Md5 : ""). InterestsCreditedInFL ? ((temp.Interests.HasValue ? temp.Interests.Value : 0) + (temp.Penalties.HasValue ? temp.Penalties.Value : 0)) : 0); if (amountCalc > 0 || ApplicationSettings.GetInstance(_user != null ? _user.Md5 : "").InterestsCreditedInFL) { flFundingLineEvent = new FundingLineEvent { Code = String.Concat("RE_", contract.Code, "_INS_", temp.InstallmentNumber), Type = OFundingLineEventTypes.Repay, Amount = amountCalc, CreationDate = TimeProvider.Now, FundingLine = _fundingLineServices.SelectFundingLineById(contract.FundingLine.Id, sqlTransaction) }; //temporary line to check whether funding line has enough amount to debit repayment event flFundingLineEvent.Movement = OBookingDirections.Debit; _fundingLineServices.ApplyRulesAmountEventFundingLine(flFundingLineEvent); flFundingLineEvent.Movement = OBookingDirections.Credit; DeleteFundingLineEvent(ref contract, flFundingLineEvent, sqlTransaction); } } CancelSavingsEvent(cancelledEvent, sqlTransaction); sqlTransaction.Commit(); sqlTransaction.Dispose(); SetClientStatus(contract, pClient); } catch (Exception) { sqlTransaction.Rollback(); throw; } return cancelledEvent; } }