private async Task <decimal> CalcTermAsync(LoanProcess loanProcess, decimal vlAmout, decimal vlFree, int iScore) { var lstInterestRate = await interestRateService.GetByFilterAsync(d => d.Id == d.Id); var lstTerms = await termsService.GetByFilterAsync(d => d.Term >= loanProcess.LoanRequest.Terms.Term); decimal vlTermRecalc = 0; foreach (var d in lstTerms.OrderBy(d => d.Term)) { var objInterestRate = lstInterestRate.Where(t => t.IdTerm == d.Id && iScore >= t.StartScore && iScore <= t.EndScore).FirstOrDefault(); if (objInterestRate != null) { vlTermRecalc = Math.Round(vlAmout / d.Term, 2); vlTermRecalc += Math.Round(vlTermRecalc * (objInterestRate.VlInterest / 100), 2); if (vlTermRecalc < vlFree) { loanProcess.LoanRequest.Terms.Id = d.Id; loanProcess.LoanRequest.Terms = d; break; } else { vlTermRecalc = 0; } } } return(vlTermRecalc); }
private void MainMenuOptions() { bool exit = false; while (!exit) { PrintMainMenu(); string mainMenuChoice = Console.ReadLine(); switch (mainMenuChoice) { case "1": PrintListsFromDB.PrintBooksList(); break; case "2": LoanProcess.BorrowABook(thisMember); break; case "3": PrintListsFromDB.PrintMoviesList(); break; case "4": LoanProcess.BorrowAMovie(thisMember); break; case "5": ReturnItem.UpdateBookLoan(thisMember); break; case "6": break; case "7": break; case "8": break; case "9": break; case "10": break; case "0": exit = true; break; default: break; } } }
public async Task <IActionResult> Post([FromBody] LoanRequestViewModel requestObject) { try { if (requestObject == null) { arrError.Add("No data found!"); } if (string.IsNullOrEmpty(requestObject.name)) { arrError.Add("Empty Name!"); } if (string.IsNullOrEmpty(requestObject.cpf)) { arrError.Add("Empty CPF!"); } if (requestObject.terms <= 0) { arrError.Add("Invalid Terms!"); } if (requestObject.income <= 0) { arrError.Add("Invalid Income!"); } if (requestObject.birthDate == null || requestObject.birthDate == DateTime.MinValue) { arrError.Add("Invalid BirthDate!"); } var lstTerms = await termsService.GetByFilterAsync(t => t.Id == t.Id); var objTerms = (lstTerms.Where(t => t.Term == Convert.ToInt32(requestObject.terms)).FirstOrDefault() != null ? lstTerms.Where(t => t.Term == Convert.ToInt32(requestObject.terms)).FirstOrDefault() : null); if (objTerms == null || string.IsNullOrEmpty(objTerms.Id)) { arrError.Add($"Invalid Term. It can be: {string.Join(",", lstTerms.Select(t => t.Term))} !"); } if (arrError.Count > 0) { return(BadRequest(new { errors = arrError })); } #region Customer object var cpfParam = requestObject.cpf.Replace(".", "").Replace("-", "").Replace("/", "").Replace(@"\", ""); var objCustomer = new Customer { CpfCnpj = cpfParam, Name = requestObject.name, BirthDate = Convert.ToDateTime(requestObject.birthDate.ToString()), Modificado = DateTime.Now }; var objCustomerExist = await customerService.GetByFilterAsync(c => c.CpfCnpj == cpfParam); if (objCustomerExist != null && objCustomerExist.ToList().Count > 0) { objCustomer.Id = objCustomerExist.FirstOrDefault().Id; objCustomer.StatusRow = "U"; //Update objCustomer.IdUserUpdate = -1; //System customerService.Put <CustomerValidator>(objCustomer); } else { objCustomer.Id = Customer.GetNewId(); objCustomer.StatusRow = "I"; //Insert objCustomer.IdUserInsert = 1; customerService.Post <CustomerValidator>(objCustomer); } #endregion Customer object var loanRequestId = LoanRequest.GetNewId(); #region Request object var objLoanRequest = new LoanRequest { Id = loanRequestId, IdCustomer = objCustomer.Id, VlAmout = Convert.ToDecimal(requestObject.amount), VlIncome = Convert.ToDecimal(requestObject.income), IdTerms = objTerms.Id, Modificado = DateTime.Now, StatusRow = "I", //Insert IdUserInsert = -1, //System }; loanRequestService.Post <LoanRequestValidator>(objLoanRequest); objLoanRequest.Customer = objCustomer; objLoanRequest.Terms = objTerms; #endregion Request object #region Process object var loanProcessId = LoanProcess.GetNewId(); var objLoanProcess = new LoanProcess { Id = loanProcessId, IdLoanRequest = loanRequestId, IdStatus = Status.Processing, IdTerms = objTerms.Id, VlAmout = Convert.ToDecimal(requestObject.amount), Modificado = DateTime.Now, StatusRow = "I", //Insert IdUserInsert = -1, //System }; loanProcessService.Post <LoanProcessValidator>(objLoanProcess); objLoanProcess.LoanRequest = objLoanRequest; #endregion Process object var sqsMessage = new SQSHelpers(); sqsMessage.attibutes = new Dictionary <string, string> { { "Id", loanProcessId } }; var sendMessageOk = await sqsMessage.SendMessage(JsonConvert.SerializeObject(objLoanProcess), configuration["ProcessQueue"].ToString()); if (sendMessageOk != System.Net.HttpStatusCode.OK) { return(BadRequest("Temporary error. Try again!")); } return(new ObjectResult(new { Id = loanRequestId })); } catch (ArgumentNullException ex) { arrError.Add(ex); return(NotFound(new { errors = arrError })); } catch (Exception ex) { arrError.Add(ex); return(BadRequest(new { errors = arrError })); } }
public static void BorrowMovieMenu() { Member member = SelectMemberById.SelectMember("lend a book to"); LoanProcess.BorrowAMovie(member); }
public CustomList <LoanProcess> GetAllLoanProcess(string loanCode) { return(LoanProcess.GetAllLoanProcess(loanCode)); }
private async Task ProcessMessageAsync(SQSEvent.SQSMessage message, ILambdaContext context) { try { context.Logger.LogLine($"Processed message {message.Body}"); var loanProcessId = string.Empty; if (message.MessageAttributes != null) { loanProcessId = (message.MessageAttributes.ContainsKey("Id") ? message.MessageAttributes["Id"].StringValue : string.Empty); } else if (message.Attributes != null) { loanProcessId = (message.Attributes.ContainsKey("Id") ? message.Attributes["Id"].ToString() : string.Empty); } if (string.IsNullOrEmpty(loanProcessId)) { context.Logger.LogLine($"LoanProcessId doens't included on request."); return; } var loanProcessObjectRequest = JsonConvert.DeserializeObject <LoanProcess>(message.Body); #region Process object var loanProcessObject = new LoanProcess { Id = loanProcessId, IdLoanRequest = loanProcessObjectRequest.LoanRequest.Id, IdStatus = Status.Completed, Modificado = DateTime.Now, StatusRow = "U", //Update IdUserUpdate = -1, VlAmout = loanProcessObjectRequest.VlAmout, IdTerms = loanProcessObjectRequest.LoanRequest.Terms.Id }; var vlTerm = Math.Round(loanProcessObject.VlAmout / loanProcessObjectRequest.LoanRequest.Terms.Term, 2); #region Age Policy if (DateTime.Now.Year - loanProcessObjectRequest.LoanRequest.Customer.BirthDate.Year < 18) { loanProcessObjectRequest.RefusedPolicy = "age"; } #endregion Age Policy var objRequestApiNoverde = JObject.FromObject(new { cpf = loanProcessObjectRequest.LoanRequest.Customer.CpfCnpj }); #region Score Policy (bool restSuccessScore, string restMessageReturnScore, JObject resultSCore) = new RestHelpers().PostAsync <JObject, JObject>(RestApi.NOVERDE, "score", objRequestApiNoverde, TypeOfAuth.KEY); if (!restSuccessScore) { throw new Exception($"Score API: {restMessageReturnScore}"); } var iScore = 0; Int32.TryParse(resultSCore["score"].ToString(), out iScore); if (iScore < 600) { loanProcessObjectRequest.RefusedPolicy = (string.IsNullOrEmpty(loanProcessObjectRequest.RefusedPolicy) ? "score" : loanProcessObjectRequest.RefusedPolicy += ", score"); } #endregion Score Policy #region Commitment Policy (bool restSuccessCom, string restMessageReturnCom, JObject resultCommitment) = new RestHelpers().PostAsync <JObject, JObject>(RestApi.NOVERDE, "commitment", objRequestApiNoverde, TypeOfAuth.KEY); if (!restSuccessCom) { throw new Exception($"Commitment API: {restMessageReturnCom}"); } decimal iCommitment = 0; decimal.TryParse(resultCommitment["commitment"].ToString(), out iCommitment); var vlCommitment = Math.Round(loanProcessObjectRequest.LoanRequest.VlIncome * iCommitment, 2); var vlFree = Math.Round(loanProcessObjectRequest.LoanRequest.VlIncome - vlCommitment, 2); vlTerm = await CalcTermAsync(loanProcessObjectRequest, loanProcessObjectRequest.LoanRequest.VlAmout, vlFree, iScore); if (vlTerm <= 0) { loanProcessObject.RefusedPolicy = (string.IsNullOrEmpty(loanProcessObjectRequest.RefusedPolicy) ? "commitment" : loanProcessObjectRequest.RefusedPolicy += ", commitment"); } if (!string.IsNullOrEmpty(loanProcessObject.RefusedPolicy)) { loanProcessObject.Result = LoanProcess.refused; } else { loanProcessObject.Result = LoanProcess.approved; } loanProcessObject.IdTerms = loanProcessObjectRequest.LoanRequest.Terms.Id; loanProcessObject.Terms = loanProcessObjectRequest.LoanRequest.Terms; loanProcessObject.IdStatus = Status.Completed; loanProcessObject.LoanRequest = loanProcessObjectRequest.LoanRequest; #endregion Commitment Policy loanProcessService.Put <LoanProcessValidator>(loanProcessObject); #endregion Process object context.Logger.LogLine($"Finished {message.Body}"); // TODO: Do interesting work based on the new message await Task.CompletedTask; } catch (Exception ex) { context.Logger.LogLine($"[ERRO] Detalhe: {ex.ToString()}"); throw ex; } }