예제 #1
0
        public async Task <JsonResult> GetValuePremium(PremiumCalculatorModel premiumCalculatorRequest)
        {
            PremiumCalculatorRequest premiumCalculatorRequestApi = new PremiumCalculatorRequest
            {
                Age       = (int)premiumCalculatorRequest.Age,
                BirthDate = premiumCalculatorRequest.DateBirth.ToString(Configuration.GetSection("MySettings").GetSection("BirthDateFormat").Value),
                State     = premiumCalculatorRequest.State
            };

            using (var httpClient = new HttpClient())
            {
                StringContent content = new StringContent(JsonConvert.SerializeObject(premiumCalculatorRequestApi), Encoding.UTF8, Configuration.GetSection("MySettings").GetSection("JsonFormat").Value);

                using var response = await httpClient.PostAsync(Configuration.GetSection ("MySettings").GetSection ("UrlApi").Value, content);

                string apiResponse = await response.Content.ReadAsStringAsync();

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    PremiumCalculatorResponse responseCalculator = new PremiumCalculatorResponse();
                    responseCalculator = JsonConvert.DeserializeObject <PremiumCalculatorResponse>(apiResponse);
                    premiumCalculatorRequest.PremiumValue = responseCalculator.Premium;
                    premiumCalculatorRequest.IsSuccess    = true;
                }
                else
                {
                    premiumCalculatorRequest.ErrorMessage = apiResponse;
                    premiumCalculatorRequest.IsSuccess    = false;
                }
            }

            return(Json(premiumCalculatorRequest));
        }
예제 #2
0
        public PremiumCalculatorResponse CalculatePremium(PremiumCalculatorDTO calculatorDTO)
        {
            DataTable dt = GetPremiumRules();

            var availableStates = (from states in dt.AsEnumerable()
                                   where states.Field <string>(StaticColumns.StateColumn) != StaticStrings.GenericCodeState
                                   select states.Field <string>(StaticColumns.StateColumn)
                                   ).Distinct().ToList();

            var availableMonths = (from months in dt.AsEnumerable()
                                   where months.Field <int>(StaticColumns.MonthColumn) != StaticNumbers.GenericCodeMonth
                                   select months.Field <int>(StaticColumns.MonthColumn)
                                   ).Distinct().ToList();

            if (availableStates.Contains(calculatorDTO.State))
            {
                if (!availableMonths.Contains(calculatorDTO.NumberOfMonth))
                {
                    calculatorDTO.NumberOfMonth = StaticNumbers.GenericCodeMonth;
                }
            }
            else
            {
                calculatorDTO.State         = StaticStrings.GenericCodeState;
                calculatorDTO.NumberOfMonth = StaticNumbers.GenericCodeMonth;
            }

            try
            {
                PremiumCalculatorResponse premiumResponse = new PremiumCalculatorResponse
                {
                    Premium = (from stateMonthsPremium in dt.AsEnumerable()
                               where stateMonthsPremium.Field <string>(StaticColumns.StateColumn) == calculatorDTO.State
                               where stateMonthsPremium.Field <int>(StaticColumns.MinimumAgeColumn) <= calculatorDTO.Age
                               where stateMonthsPremium.Field <int>(StaticColumns.MaximumAgeColumn) >= calculatorDTO.Age
                               where stateMonthsPremium.Field <int>(StaticColumns.MonthColumn) == calculatorDTO.NumberOfMonth
                               select stateMonthsPremium.Field <double>(StaticColumns.PremiumColumn)).ToList().ElementAt(0)
                };

                return(premiumResponse);
            }
            catch (Exception)
            {
                throw new Exception(ValidateMessages.RuleValidation);
            }
        }