예제 #1
0
        public async Task <LoanDetailModel> CreateLoanDetail(LoanDetailModel loanDetailModel, string username)
        {
            var loan = await this._loanRepository.GetAsync(loanDetailModel.LoanId);

            var lastLoanDetail = await this._loanDetailRepository.FindLastLoanDetail(loanDetailModel.LoanId);

            var loanDetail = new LoanDetail()
            {
                LoanId          = loanDetailModel.LoanId,
                Installment     = lastLoanDetail.Installment + 1,
                Month           = lastLoanDetail.Month.AddMonths(1),
                MonthlyInterest = lastLoanDetail.InterestType == InterestType.CompoundInterest ? lastLoanDetail.Balance * loan.Interest / 100 :
                                  loan.CapitalOutstanding * loan.Interest / 100,
                Balance = lastLoanDetail.InterestType == InterestType.CompoundInterest ?
                          lastLoanDetail.Balance + lastLoanDetail.Balance * loan.Interest / 100 :
                          loan.CapitalOutstanding + loan.CapitalOutstanding * loan.Interest / 100,
                InterestType = InterestType.SimpleInterest,
                CreatedBy    = username,
                CreatedOn    = DateTime.Now
            };

            var result = await this._loanDetailRepository.AddAsyn(loanDetail);

            loanDetailModel.Id              = result.Id;
            loanDetailModel.Installment     = result.Installment;
            loanDetailModel.Month           = result.Month;
            loanDetailModel.MonthlyInterest = result.MonthlyInterest;
            loanDetailModel.Balance         = result.Balance;
            loanDetailModel.InterestType    = result.InterestType;

            return(loanDetailModel);
        }
예제 #2
0
        private InputParameters GetDummyInput(LoanDetailModel loanDetail)
        {
            InputParameters inputs = new InputParameters()
            {
                RevolUtil           = 1,
                AllUtil             = 1,
                AnnualIncJoint      = 1,
                DtiJoint            = 1,
                IntRate             = 1,
                MthsSinceLastRecord = 3,
                TotalRecPrncp       = 5
            };

            return(inputs);
        }
예제 #3
0
        private InputParameters GetInputParameter(LoanDetailModel loanDetail)
        {
            InputParameters inputs = new InputParameters()
            {
                RevolUtil           = loanDetail.revolUtil,
                AllUtil             = loanDetail.allUtil,
                AnnualIncJoint      = loanDetail.annualIncJoint,
                DtiJoint            = loanDetail.dtiJoin,
                IntRate             = loanDetail.intRate,
                LoanAmnt            = loanDetail.loanAmnt,
                MthsSinceLastRecord = loanDetail.mthsSinceLastRecod,
                TotalRecPrncp       = loanDetail.totalRecPrncp
            };

            return(inputs);
        }
예제 #4
0
        // Details about a specific loan
        public IActionResult Detail(int id)
        {
            var loan = _loanService.GetFromID(id);

            var timeSinceLoaned = _feeService.DaysLoaned(id);

            var model = new LoanDetailModel();

            model.ID         = id;
            model.BookTitle  = _loanService.GetBookTitle(id);
            model.MemberName = _loanService.GetMemberName(id);
            model.Checkout   = loan.Checkout;
            model.Returned   = loan.Returned;
            model.MemberID   = _memberService.GetIDFromLoan(loan);
            model.TimeSpan   = timeSinceLoaned.ToString("%d");

            return(View(model));
        }
예제 #5
0
 public ActionResult Index(LoanDetailModel loanDetail)
 {
     if (ModelState.IsValid)
     {
         var    client    = GetAuthenticatedClient();
         var    inputs    = GetInputParameter(loanDetail);
         var    results   = client.LoanPredictService(inputs);
         double?loanScore = null;
         if (results != null)
         {
             loanScore = results.OutputParameters.LoanScore;
         }
         ViewBag.loanprediction = WillLoanPayOff(loanScore);
         return(View());
     }
     else
     {
         return(View(loanDetail));
     }
 }
예제 #6
0
 public void Create(LoanDetailModel modelToCreate)
 {
     try
     {
         using (OracleConnection connection = new OracleConnection())
         {
             connection.ConnectionString = ConfigurationManager.ConnectionStrings["ORACLE"].ConnectionString;
             connection.Open();
             OracleDynamicParameters parameters = new OracleDynamicParameters();
             parameters.Add("SecurityId", modelToCreate.SecurityId);
             parameters.Add("DateOfLoan", modelToCreate.DateOfLoan);
             parameters.Add("AccountType", modelToCreate.AccountType);
             parameters.Add("LoanQty", modelToCreate.LoanQty);
             int affectedRows = connection.Execute(sql: "SPINSERTTEMPDATA", param: parameters, commandType: CommandType.StoredProcedure);
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
예제 #7
0
        public List <LoanDetailModel> Retrieve(WebApiConfigModel configurations, int securityId)
        {
            try
            {
                if (configurations.ConnectionStringId.Equals("oracle", StringComparison.CurrentCultureIgnoreCase))
                {
                    using (OracleConnection connection = new OracleConnection())
                    {
                        connection.ConnectionString = ConfigurationManager.ConnectionStrings["ORACLE"].ConnectionString;
                        connection.Open();
                        OracleDynamicParameters parameters = new OracleDynamicParameters();
                        parameters.Add("SecurityId", securityId, dbType: OracleDbType.Int32, direction: ParameterDirection.Input);
                        parameters.Add("RC", dbType: OracleDbType.RefCursor, direction: ParameterDirection.Output);
                        var resultSet = connection.Query(sql: configurations.ObjectToRetrieveData, param: parameters, commandType: CommandType.StoredProcedure);
                        if (resultSet != null)
                        {
                            List <LoanDetailModel> loanDetails = new List <LoanDetailModel>();
                            foreach (var result in resultSet)
                            {
                                LoanDetailModel retrievedModel = new LoanDetailModel();

                                retrievedModel.AccountType = result.ACCNT;
                                retrievedModel.SecurityId  = Convert.ToInt32(result.SEC_ID);
                                retrievedModel.DateOfLoan  = result.DATE_OF_LOAN;

                                loanDetails.Add(retrievedModel);
                            }
                            return(loanDetails);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                }
                else if (configurations.ConnectionStringId.Equals("sqlserver", StringComparison.CurrentCultureIgnoreCase))
                {
                    using (SqlConnection connection = new SqlConnection())
                    {
                        connection.ConnectionString = ConfigurationManager.ConnectionStrings["SQLSERVER"].ConnectionString;
                        connection.Open();
                        return(connection.Query <LoanDetailModel>(sql: configurations.ObjectToRetrieveData, param: new { SecurityId = securityId }, commandType: CommandType.StoredProcedure).ToList());
                    }
                }
                else if (configurations.ConnectionStringId.Equals("oracle,sqlserver", StringComparison.CurrentCultureIgnoreCase))
                {
                    var oracleResultSet = (dynamic)null;
                    List <LoanDetailModel> sqlServerResultSet = new List <LoanDetailModel>();
                    using (OracleConnection connection = new OracleConnection())
                    {
                        connection.ConnectionString = ConfigurationManager.ConnectionStrings["ORACLE"].ConnectionString;
                        connection.Open();
                        OracleDynamicParameters parameters = new OracleDynamicParameters();
                        parameters.Add("SecurityId", securityId);
                        parameters.Add("RC", dbType: OracleDbType.RefCursor, direction: ParameterDirection.Output);
                        oracleResultSet = connection.Query(sql: configurations.ObjectToRetrieveData, param: parameters, commandType: CommandType.StoredProcedure);
                    }

                    using (SqlConnection connection = new SqlConnection())
                    {
                        connection.ConnectionString = ConfigurationManager.ConnectionStrings["SQLSERVER"].ConnectionString;
                        connection.Open();
                        sqlServerResultSet = connection.Query <LoanDetailModel>(sql: configurations.ObjectToRetrieveData, param: new { SecurityId = securityId }, commandType: CommandType.StoredProcedure).ToList();
                    }

                    if (oracleResultSet == null)
                    {
                        return(sqlServerResultSet);
                    }
                    else
                    {
                        List <LoanDetailModel> loanDetails       = new List <LoanDetailModel>();
                        List <LoanDetailModel> mergedLoanDetails = new List <LoanDetailModel>();

                        foreach (var result in oracleResultSet)
                        {
                            LoanDetailModel retrievedModel = new LoanDetailModel();
                            retrievedModel.AccountType = result.ACCNT;
                            retrievedModel.SecurityId  = Convert.ToInt32(result.SEC_ID);
                            retrievedModel.DateOfLoan  = result.DATE_OF_LOAN;
                            loanDetails.Add(retrievedModel);
                        }

                        for (int i = 0; i < loanDetails.Count; i++)
                        {
                            for (int j = i; j <= sqlServerResultSet.Count; j++)
                            {
                                if (loanDetails[j].AccountType.Equals("A", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    loanDetails[j].LoanQty = (sqlServerResultSet[j].LoanQty / 100) * 5;
                                }

                                if (loanDetails[j].AccountType.Equals("B", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    loanDetails[j].LoanQty = (sqlServerResultSet[j].LoanQty / 100) * 7;
                                }

                                if (loanDetails[j].AccountType.Equals("C", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    loanDetails[j].LoanQty = (sqlServerResultSet[j].LoanQty / 100) * 7.5;
                                }
                                break;
                            }
                            mergedLoanDetails.Add(loanDetails[i]);
                        }

                        return(mergedLoanDetails);
                    }
                }
                return(null);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #8
0
        public async Task <LoanDetailModel> UpdateLoanDetail(LoanDetailModel loanDetailModel, string username)
        {
            var _existingLoan       = this._loanRepository.GetAllIncluding(e => e.LoanDetails).Where(x => x.Id == loanDetailModel.LoanId).FirstOrDefault();
            var _existingLoanDetail = _existingLoan.LoanDetails.FirstOrDefault(x => x.Id == loanDetailModel.Id);

            if (loanDetailModel.InterestType == InterestType.SimpleInterest)
            {
                if (_existingLoanDetail.Paid == null)
                {
                    _existingLoanDetail.Balance -= loanDetailModel.Paid.Value;
                }
                else
                {
                    _existingLoanDetail.Balance += _existingLoanDetail.Paid.Value;
                    _existingLoanDetail.Balance -= loanDetailModel.Paid.Value;
                }
            }

            _existingLoanDetail.Paid      = loanDetailModel.Paid;
            _existingLoanDetail.LatePaid  = loanDetailModel.LatePaid;
            _existingLoanDetail.PaidDate  = loanDetailModel.PaidDate;
            _existingLoanDetail.UpdatedBy = username;
            _existingLoanDetail.UpdatedOn = DateTime.Now;

            if (loanDetailModel.CapitalPaid != null && loanDetailModel.CapitalPaid > 0)
            {
                if (loanDetailModel.InterestType == InterestType.SimpleInterest)
                {
                    _existingLoan.UpdatedBy = username;
                    _existingLoan.UpdatedOn = DateTime.Now;
                    if (_existingLoanDetail.CapitalPaid == null)
                    {
                        _existingLoanDetail.Balance      -= loanDetailModel.CapitalPaid.Value;
                        _existingLoan.CapitalOutstanding -= loanDetailModel.CapitalPaid.Value;
                    }
                    else
                    {
                        _existingLoanDetail.Balance += _existingLoanDetail.CapitalPaid.Value;
                        _existingLoanDetail.Balance -= loanDetailModel.CapitalPaid.Value;

                        _existingLoan.CapitalOutstanding += _existingLoanDetail.CapitalPaid.Value;
                        _existingLoan.CapitalOutstanding -= loanDetailModel.CapitalPaid.Value;
                    }
                    _existingLoanDetail.CapitalPaid = loanDetailModel.CapitalPaid;
                }
            }

            var _futureLoanDetails  = _existingLoan.LoanDetails.Where(x => x.Installment > _existingLoanDetail.Installment).OrderBy(o => o.Installment);
            var _previousBalance    = _existingLoanDetail.Balance;
            var _previousLoanDetail = _existingLoanDetail;

            foreach (var _futureLoanDetail in _futureLoanDetails)
            {
                if (_existingLoanDetail.InterestType == InterestType.SimpleInterest && _existingLoanDetail.CapitalPaid != null)
                {
                    _futureLoanDetail.MonthlyInterest = _existingLoan.CapitalOutstanding * _existingLoan.Interest / 100;
                    _futureLoanDetail.Balance         = _previousBalance + _futureLoanDetail.MonthlyInterest;
                    _futureLoanDetail.InterestType    = InterestType.SimpleInterest;
                }
                else if (_futureLoanDetail.InterestType == InterestType.SimpleInterest && _previousLoanDetail.InterestType == InterestType.SimpleInterest)
                {
                    _futureLoanDetail.MonthlyInterest = _existingLoan.CapitalOutstanding * _existingLoan.Interest / 100;
                    _futureLoanDetail.Balance         = _previousBalance + _futureLoanDetail.MonthlyInterest;
                    _futureLoanDetail.InterestType    = InterestType.SimpleInterest;
                }
                _previousBalance    = _futureLoanDetail.Balance;
                _previousLoanDetail = _futureLoanDetail;
            }

            var result = await this._loanRepository.UpdateAsyn(_existingLoan, loanDetailModel.LoanId);

            loanDetailModel.Balance = _existingLoanDetail.Balance;
            return(loanDetailModel);
        }
예제 #9
0
        public async Task <ActionResult> CreatLoanDetail(LoanDetailModel loanDetailModel)
        {
            var result = await this._loanLoanService.CreateLoanDetail(loanDetailModel, this.Username);

            return(Ok(result));
        }