public async Task <IActionResult> SimulateQuotas([FromBody] SimulateQuotasRequest simulateQuotasRequest) { (HttpStatusCode statusCode, string message, SimulateQuotasResponse response) = await _quotaBusiness.SimulateQuotas(simulateQuotasRequest); if (statusCode != HttpStatusCode.NoContent && Response != null) { Response.StatusCode = (int)statusCode; } return(ServiceAnswer <SimulateQuotasResponse> .Response(statusCode, message, response)); }
private SimulateQuotasResponse GetResponse(InfoClientDto infoClientDto, SimulateQuotasRequest simulateQuotasRequest) { List <QuotaDataDto> quotas = CalculateQuotas(simulateQuotasRequest); return(new SimulateQuotasResponse { AvailableSpaceSimulated = infoClientDto.AvailableSpace - simulateQuotasRequest.CapitalValue, Quotas = quotas, TotalCreditValue = quotas.Sum(c => c.TotalValue) }); }
SimulateQuotas(SimulateQuotasRequest simulateQuotasRequest) { InfoClientDto infoClientDto = null; (bool isValid, HttpStatusCode validationStatusCode, string validationMessage) = SimulateQuotaValidations(simulateQuotasRequest, ref infoClientDto); if (!isValid) { return(validationStatusCode, validationMessage, null); } return(HttpStatusCode.OK, SuccessMsg, GetResponse(infoClientDto, simulateQuotasRequest)); }
SimulateQuotaValidations(SimulateQuotasRequest simulateQuotasRequest, ref InfoClientDto infoClientDto) { (bool clientIsValid, HttpStatusCode clientatusCode, string clientMessage) = ClientValidations(simulateQuotasRequest.IdClient, simulateQuotasRequest.CapitalValue, ref infoClientDto); if (!clientIsValid) { return(false, clientatusCode, clientMessage); } if (!ValidateTermMonths(simulateQuotasRequest)) { return(false, HttpStatusCode.BadRequest, TermNoAllowedMsg); } return(true, HttpStatusCode.OK, ""); }
private bool ValidateTermMonths(SimulateQuotasRequest simulateQuotasRequest) { List <TermDto> termsDto = _config.GetSection("CommonValues:Terms").Get <List <TermDto> >(); List <int> allowedTerms = new List <int>(); foreach (TermDto term in termsDto) { if ((simulateQuotasRequest.CapitalValue >= term.From && simulateQuotasRequest.CapitalValue <= term.To) || simulateQuotasRequest.CapitalValue > term.To) { allowedTerms.Add(term.Months); } } return(allowedTerms.Contains(simulateQuotasRequest.TermMonths)); }
private List <QuotaDataDto> CalculateQuotas(SimulateQuotasRequest simulateQuotasRequest) { List <QuotaDataDto> reponse = new List <QuotaDataDto>(); int quotaQuantity = simulateQuotasRequest.TermMonths * ((simulateQuotasRequest.Frequency == 15) ? 2 : 1); decimal monthRate = decimal.Parse(_config.GetSection("CommonValues:MonthlyRate").Value); decimal totalQuotaValue = (((simulateQuotasRequest.CapitalValue * monthRate) * simulateQuotasRequest.TermMonths) + simulateQuotasRequest.CapitalValue) / quotaQuantity; decimal quotaCapitalValue = simulateQuotasRequest.CapitalValue / quotaQuantity; for (int i = 1; i <= quotaQuantity; i++) { reponse.Add(new QuotaDataDto { IdQuota = i, CapitalValue = quotaCapitalValue, TotalValue = totalQuotaValue, PaymentDate = ColombianHour.GetDate(). AddDays(((simulateQuotasRequest.Frequency == 15) ? 15 : 30) * i) }); } return(reponse); }