Example #1
0
        public ActionResult Create([Bind(Include = "ID,CreditAmount,NumberOfMonths,TypeID")] CreditApplication creditApplication)
        {
            if (ModelState.IsValid)
            {
                HttpPostedFileBase file = Request.Files["ScannedDocument"];

                if (file.ContentLength != 0)
                {
                    Image image = Image.FromStream(file.InputStream, true, true);
                    creditApplication.ScannedDocument = imageToByteArray(image);
                }


                creditApplication.TotalRepayment   = GetMonthRepayment(creditApplication.CreditAmount, creditApplication.NumberOfMonths, creditApplication.TypeID) * creditApplication.NumberOfMonths;
                creditApplication.MonthRepayment   = GetMonthRepayment(creditApplication.CreditAmount, creditApplication.NumberOfMonths, creditApplication.TypeID);
                creditApplication.DateOfSubmission = DateTime.Now;
                creditApplication.State            = null;
                db.CreditApplications.Add(creditApplication);
                db.Profiles.Single(p => p.Email == User.Identity.Name).CreditApplications.Add(creditApplication);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            ViewBag.Types = db.CreditTypes.ToList();
            return(View(creditApplication));
        }
Example #2
0
        public ActionResult Edit([Bind(Include = "ID,CreditAmount,State")] CreditApplication creditApplication)
        {
            if (ModelState.IsValid)
            {
                var creditApplicationEdit = db.CreditApplications.Single(c => c.ID == creditApplication.ID);
                creditApplicationEdit.State           = creditApplication.State;
                db.Entry(creditApplicationEdit).State = EntityState.Modified;

                if (creditApplicationEdit.State == true)
                {
                    var profile = db.Profiles
                                  .Single(p => p.CreditApplications
                                          .Any(c => c.ID == creditApplicationEdit.ID));

                    var toBankAccount = profile.BankAccounts
                                        .First(b => b.BankAccountType.Type == "PAY_ACC_FOR_YOUNG" || b.BankAccountType.Type == "PAY_ACC_FOR_ADULT");

                    var value = creditApplicationEdit.CreditAmount;

                    toBankAccount.Balance         += value;
                    toBankAccount.AvailableFounds += value;

                    Credit credit = new Credit
                    {
                        CreditAmount        = creditApplicationEdit.CreditAmount,
                        TotalRepayment      = creditApplicationEdit.TotalRepayment,
                        CurrentRepayment    = 0m,
                        MonthRepayment      = creditApplicationEdit.MonthRepayment,
                        NumberOfMonths      = creditApplicationEdit.NumberOfMonths,
                        NumberOfMonthsToEnd = creditApplicationEdit.NumberOfMonths,
                        StartDate           = DateTime.Now,
                        IsPaidOff           = false,
                        Type = creditApplicationEdit.Type
                    };
                    db.Credits.Add(credit);
                    profile.Credits.Add(credit);

                    Transaction transaction = new Transaction
                    {
                        ValueTo   = value,
                        ValueFrom = value,
                        BalanceAfterTransactionUserTo = toBankAccount.Balance,
                        CurrencyTo            = toBankAccount.Currency,
                        ToBankAccountNumber   = toBankAccount.BankAccountNumber,
                        FromBankAccountNumber = toBankAccount.BankAccountNumber,

                        TransactionTypeID = db.TransactionTypes.Single(t => t.Type == "CREDIT_TRANSFER").ID,
                        Description       = $"Kredyt {credit.ID}",
                        ReceiverName      = profile.FullName,

                        Date = DateTime.Now
                    };
                    db.Transactions.Add(transaction);
                }

                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            return(View(creditApplication));
        }
        public async Task <IActionResult> Edit(int id, [Bind("CreditApplicationId,LoanAmount,APR,TermMonths,Product,ApplicantId,StatusId")] CreditApplication creditApplication)
        {
            if (id != creditApplication.CreditApplicationId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(creditApplication);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CreditApplicationExists(creditApplication.CreditApplicationId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["ApplicantId"] = new SelectList(_context.Applicants, "ApplicantId", "ApplicantId", creditApplication.ApplicantId);
            ViewData["StatusId"]    = new SelectList(_context.Status, "StatusId", "StatusId", creditApplication.StatusId);
            return(View(creditApplication));
        }
 public bool ValidatorLogic(CreditApplication creditApplication)
 {
     if (creditApplication.PostalCode <= 0 || creditApplication.PostalCode > 99999)
     {
         return(false);
     }
     return(true);
 }
Example #5
0
        public ActionResult DeleteConfirmed(int id)
        {
            CreditApplication creditApplication = db.CreditApplications.Find(id);

            db.CreditApplications.Remove(creditApplication);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Example #6
0
 public bool ValidatorLogic(CreditApplication model)
 {
     if (model.PostalCode <= 0 || model.PostalCode >= 9999)
     {
         return(false);
     }
     return(true);
 }
 public bool ValidatorLogic(CreditApplication model)
 {
     if (DateTime.Now.AddYears(-18) < model.DOB)
     {
         return(false);
     }
     if (model.Salary < 1000)
     {
         return(false);
     }
     return(true);
 }
        public (bool, IEnumerable <string>) PassAllValidations(CreditApplication creditApplication)
        {
            var errorMessages = new List <string>();

            foreach (var validation in _validations)
            {
                if (!validation.ValidatorLogic(creditApplication))
                {
                    errorMessages.Add(validation.ErrorMessage);
                }
            }
            return(!errorMessages.Any(), errorMessages);
        }
        public async Task <IActionResult> Create([Bind("CreditApplicationId,LoanAmount,APR,TermMonths,Product,ApplicantId,StatusId")] CreditApplication creditApplication)
        {
            if (ModelState.IsValid)
            {
                _context.Add(creditApplication);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["ApplicantId"] = new SelectList(_context.Applicants, "ApplicantId", "ApplicantId", creditApplication.ApplicantId);
            ViewData["StatusId"]    = new SelectList(_context.Status, "StatusId", "StatusId", creditApplication.StatusId);
            return(View(creditApplication));
        }
Example #10
0
        // GET: CreditApplications/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CreditApplication creditApplication = db.CreditApplications.Find(id);

            if (creditApplication == null)
            {
                return(HttpNotFound());
            }
            return(View(creditApplication));
        }
Example #11
0
        public void CreateTasksForNewCreditApplication(CreditApplication creditApplication)
        {
            ApprovalTask task = CreateApprovalTask(creditApplication, ApprovalType.CreditCommittee,
                                                   TaskNames.ApprovalFromCreditCommittee);

            unitOfWork.GetRepository <ApprovalTask>().InsertOrUpdate(task);
            task = CreateApprovalTask(creditApplication, ApprovalType.RiskManagment,
                                      TaskNames.ApprovalFromRiskManager);
            unitOfWork.GetRepository <ApprovalTask>().InsertOrUpdate(task);
            task = CreateApprovalTask(creditApplication, ApprovalType.SecurityService,
                                      TaskNames.ApprovalFromSecurityService);
            unitOfWork.GetRepository <ApprovalTask>().InsertOrUpdate(task);
            unitOfWork.Commit();
        }
        public async Task <(bool, IEnumerable <string>)> PassAllValidations(CreditApplication model)
        {
            bool          validationsPassed = true;
            List <string> errorMessages     = new List <string>();

            foreach (var validation in _validations)
            {
                if (!validation.ValidatorLogic(model))
                {
                    errorMessages.Add(validation.ErrorMessage);
                    validationsPassed = false;
                }
            }
            return(validationsPassed, errorMessages);
        }
Example #13
0
 private ApprovalTask CreateApprovalTask(CreditApplication creditApplication, ApprovalType type, string name)
 {
     return(new ApprovalTask
     {
         CreditApplicationId = creditApplication.Id,
         ApprovalType = type,
         DispalyText = name,
         CreateDate = DateTime.Now,
         Status = TaskStatus.New,
         CompleteDate = null,
         Outcome = null,
         RejectionReason = null,
         UserId = null,
     });
 }
Example #14
0
        public RepaymentChartViewModel GetRepaymentChartViewModel(Guid id)
        {
            RepaymentChartViewModel repaymentChartViewModel = new RepaymentChartViewModel();
            CreditApplication       creditApplication       = unitOfWork.GetRepository <CreditApplication>().GetById(id);

            if (creditApplication.Client.ClientGroup == ClientGroup.PrivatePerson)
            {
                LegalPerson client = unitOfWork.GetRepository <LegalPerson>().GetById(creditApplication.ClientId);
                repaymentChartViewModel.ClientName = client.FirstName + " " + client.LastName;
            }
            else
            {
                repaymentChartViewModel.ClientName = unitOfWork.GetRepository <JuridicalPerson>().GetById(creditApplication.ClientId).Name;
            }

            CreditCategory creditCategory = creditApplication.CreditCategory;
            List <string>  keys           = new List <string>();
            List <double>  values         = new List <double>();
            double         percent        = creditCategory.Rate;
            double         money          = Convert.ToDouble(creditCategory.MaxAmount);
            int            months         = creditCategory.Span;

            if (creditCategory.RepaymentScheme == RepaymentScheme.Annuity)
            {
                double monthlyPercent = percent / 100 / 12;
                double monthlyPayment = money * monthlyPercent / (1 - Math.Pow(1 + monthlyPercent, (-1) * months));
                for (int i = 0; i < months; i++)
                {
                    values.Add(monthlyPayment);
                }
            }
            else
            {
                DateTime date            = creditApplication.CompleteDate.Value;
                double   fixedPayment    = money / months;
                double   variablePayment = 0;
                for (int i = 0; i < months; i++)
                {
                    variablePayment = money * percent / 100 * 31 / 365;
                    money          -= fixedPayment;
                    values.Add(fixedPayment + variablePayment);
                }
            }
            keys = GetKeys(creditApplication.CompleteDate.Value, months);
            repaymentChartViewModel.Keys   = JsonConvert.SerializeObject(keys.ToArray());
            repaymentChartViewModel.Values = JsonConvert.SerializeObject(values.ToArray());
            return(repaymentChartViewModel);
        }
Example #15
0
        private ApplicationDetailsViewModel GetApplicationDetails(CreditApplication creditApplication)
        {
            ApplicationDetailsViewModel applicationDetailsModel = new ApplicationDetailsViewModel();

            if (creditApplication.Client.ClientGroup == ClientGroup.PrivatePerson)
            {
                LegalPerson client = unitOfWork.GetRepository <LegalPerson>().GetById(creditApplication.ClientId);
                applicationDetailsModel.ClientName = client.FirstName + " " + client.LastName;
            }
            else
            {
                applicationDetailsModel.ClientName = unitOfWork.GetRepository <JuridicalPerson>().GetById(creditApplication.ClientId).Name;
            }
            AutoMapper.Mapper.Map(creditApplication, applicationDetailsModel);
            var contract = applicationDetailsModel.Attachments.FirstOrDefault(x => x.IsContract);

            if (contract != null)
            {
                applicationDetailsModel.Attachments.Remove(contract);
                applicationDetailsModel.Contract = contract;
            }
            return(applicationDetailsModel);
        }
Example #16
0
 public double GetCreditApproved(CreditApplication creditApplication)
 {
     //Complex logic
     return(creditApplication.Salary * 0.3);
 }
Example #17
0
 public double GetCreditApproved(CreditApplication creditApplication)
 {
     // have a different logic to calculate approval limit
     //we will hardcore to 50% of salary
     return(creditApplication.Salary * .5);
 }
Example #18
0
 public bool ValidatorLogic(CreditApplication model)
 {
     return(model.PostalCode > 0 && model.PostalCode < 99999);
 }
Example #19
0
 public double GetCreditApproved(CreditApplication creditApplication)
 {
     return(creditApplication.Salary * .5);
 }
Example #20
0
 public IActionResult CreditApplicationGET()
 {
     CreditApplication = new CreditApplication();
     return(View(CreditApplication));
 }
Example #21
0
 public IActionResult CreditApplication()
 {
     CreditModel = new CreditApplication();
     return(View(CreditModel));
 }
Example #22
0
 public double GetCreditApproved(CreditApplication creditApplication)
 {
     //less logic
     return(creditApplication.Salary * 0.5);
 }