public void LoanFullyPaid() { var s = new LoanFullyPaid(3060, "fdsfdf"); s.Execute(); }
public override void Execute() { SafeReader sr = DB.GetFirst( "GetLoanStatus", CommandSpecies.StoredProcedure, new QueryParameter("LoanId", this.loanID) ); //TODO in the futuere replace with this call. //var numOfActiveLoans = DB.ExecuteScalar<long>( //"NL_GetNumOfActiveLoans", //CommandSpecies.StoredProcedure, //new QueryParameter("CustomerID", this.customerID)); //SafeReader sr = DB.GetFirst( // "NL_LoanStatusGet", // CommandSpecies.StoredProcedure, // new QueryParameter("LoanId", this.loanID) //); if ((this.balance == null) || (this.isPaidOff == null)) { this.balance = sr["Balance"]; string loanStatus = sr["Status"]; this.isPaidOff = (loanStatus == "PaidOff"); } bool wasLate = sr["WasLate"]; decimal loanAmount = sr["LoanAmount"]; string loanRefNum = sr["RefNum"]; int numOfActiveLoans = sr["NumOfActiveLoans"]; DateTime loanDate = sr["LoanDate"]; DateTime now = DateTime.UtcNow; double monthsSinceLoanWasTaken = (now - loanDate).TotalDays / (365.0 / 12.0); this.origin = sr["Origin"]; Log.Info("LoanStatusAfterPayment customer {0}, loan {1}, is paid off {2}, loan amount {3}, balance {4}, paid {5}, was late {6}, numOfActiveLoans {7}, monthsSinceLoanWasTaken {8}", this.customerID, this.loanID, this.isPaidOff, loanAmount, this.balance, this.paymentAmount, wasLate, numOfActiveLoans, monthsSinceLoanWasTaken); if ((bool)this.isPaidOff) { if (!wasLate && numOfActiveLoans < CurrentValues.Instance.NumofAllowedActiveLoans && monthsSinceLoanWasTaken > CurrentValues.Instance.MinLoanLifetimeMonths) { SalesForce.AddOpportunity addOpportunity = new AddOpportunity(this.customerID, new OpportunityModel { CreateDate = DateTime.UtcNow, Email = this.customerEmail, Origin = this.origin, Stage = OpportunityStage.s5.DescriptionAttr(), Type = OpportunityType.FinishLoan.DescriptionAttr(), Name = this.customerEmail + OpportunityType.FinishLoan.DescriptionAttr() }); addOpportunity.Execute(); } if (this.sendMail) { LoanFullyPaid loanFullyPaid = new LoanFullyPaid(this.customerID, loanRefNum); loanFullyPaid.Execute(); } } else { decimal repaidPercent = (decimal)(loanAmount == 0 ? 0 : (loanAmount - this.balance) / loanAmount); decimal repaidPercentBeforePayment = (decimal)(loanAmount == 0 ? 0 : (loanAmount - this.balance - this.paymentAmount) / loanAmount); const decimal fiftyPercent = 0.5M; if (repaidPercent >= fiftyPercent && repaidPercentBeforePayment < fiftyPercent && !wasLate && numOfActiveLoans < CurrentValues.Instance.NumofAllowedActiveLoans && monthsSinceLoanWasTaken > CurrentValues.Instance.MinLoanLifetimeMonths) { AddSalesForceFiftyPercentOpportunity(); } //if } //if } //Execute