Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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)
            });
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
 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, "");
 }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        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);
        }