Пример #1
0
        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);
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        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 }));
            }
        }
Пример #4
0
        public static void BorrowMovieMenu()
        {
            Member member = SelectMemberById.SelectMember("lend a book to");

            LoanProcess.BorrowAMovie(member);
        }
Пример #5
0
 public CustomList <LoanProcess> GetAllLoanProcess(string loanCode)
 {
     return(LoanProcess.GetAllLoanProcess(loanCode));
 }
Пример #6
0
        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;
            }
        }