127 lines
4.7 KiB
C#
127 lines
4.7 KiB
C#
using System;
|
|
using JdpVehicle;
|
|
using Serilog;
|
|
using LCU.API.Internal.RepoApi.Repos.Utilities;
|
|
using Newtonsoft.Json;
|
|
using LCU.API.Internal.RepoApi.Repos.Models.Results;
|
|
|
|
namespace LCU.API.Internal.RepoApi.Repos.WebServices.NADA
|
|
{
|
|
public class CollateralValueService : ICollateralValueService
|
|
{
|
|
private readonly CollateralValueServiceConfig _config;
|
|
private readonly IClientHelpers _clientHelpers;
|
|
|
|
public CollateralValueService(CollateralValueServiceConfig config, ClientHelpers clientHelpers)
|
|
{
|
|
_config = config;
|
|
_clientHelpers = clientHelpers;
|
|
}
|
|
|
|
|
|
private readonly VehicleTypes[] _nadaVehicleType =
|
|
{
|
|
VehicleTypes.UsedCar,
|
|
VehicleTypes.CommercialTruck
|
|
};
|
|
|
|
public CollateralValuation GetCollateralValue(string vin,
|
|
int mileage,
|
|
int vehicleTypeKey)
|
|
{
|
|
var valueResponse = this.GetVehicleData(_config.Region, _config.Period, vin, vehicleTypeKey, mileage);
|
|
|
|
if (valueResponse != null)
|
|
{
|
|
var autoVehicle = new CollateralValuation()
|
|
{
|
|
Make = valueResponse.Make,
|
|
Model = valueResponse.Body + " " + valueResponse.Model,
|
|
Year = valueResponse.Modelyear,
|
|
UcgVehicleId = valueResponse.Ucgvehicleid.ToString(), //ucgvehicleid is the new ID and not 1:1 to legacy UID
|
|
SeriesDescription = valueResponse.Model,
|
|
BodyDescription = valueResponse.Body,
|
|
Weight = String.IsNullOrWhiteSpace(valueResponse.Curbweight) ? 0 : Int32.Parse(valueResponse.Curbweight),
|
|
Msrp = String.IsNullOrWhiteSpace(valueResponse.Basemsrp) ? 0 : Int32.Parse(valueResponse.Basemsrp),
|
|
AveMileage = valueResponse.Averagemileage,
|
|
MileageAdjustment = valueResponse.Mileageadjustment,
|
|
LookupDate = DateTime.Now,
|
|
Loan = valueResponse.Baseloan,
|
|
LoanPlusVinAccMileage = valueResponse.Adjustedloan,
|
|
Retail = valueResponse.Basecleanretail,
|
|
RetailPlusVinAccMileage = valueResponse.Adjustedcleanretail,
|
|
AvgTradeIn = valueResponse.Baseaveragetrade,
|
|
AvgTradeInPlusVinAccMileage = valueResponse.Adjustedaveragetrade,
|
|
RoughTradeIn = valueResponse.Baseroughtrade,
|
|
RoughTradeInPlusVinAccMileage = valueResponse.Adjustedroughtrade,
|
|
TradeIn = valueResponse.Basecleantrade,
|
|
TradeInPlusVinAccMileage = valueResponse.Adjustedcleantrade,
|
|
AuctionInfoUnavailable = true
|
|
};
|
|
|
|
//Try catch to prevent failure if no auction values available
|
|
try
|
|
{
|
|
var auctionResponse = this.GetAuctionValues(_config.Period, valueResponse.Ucgvehicleid, _config.Region, vehicleTypeKey, vin, mileage);
|
|
|
|
if (auctionResponse != null)
|
|
{
|
|
autoVehicle.AuctionInfoUnavailable = false;
|
|
autoVehicle.AverageAdjustedAuctionValue = auctionResponse.AvgAuction;
|
|
autoVehicle.HighAdjustedAuctionValue = auctionResponse.HighAuction;
|
|
autoVehicle.LowAdjustedAuctionValue = auctionResponse.LowAuction;
|
|
autoVehicle.DateRange = auctionResponse.DateRange;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Error(ex, "Failed to Retreive Auction Values in CollateralValueService");
|
|
}
|
|
|
|
return autoVehicle;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private VehicleData GetVehicleData(int region, int period, string vin, int vehicleTypeKey, int mileage)
|
|
{
|
|
var newURL = string.Format(_config.DefaultVehicleAndValuesByVinEndpoint + "?period={0}&vin={1}®ion={2}&mileage={3}",
|
|
period, vin, region, mileage);
|
|
|
|
var request = _clientHelpers.CreateGetHttpRequestMessage(newURL, _config.ApiKey);
|
|
var response = _clientHelpers.SendHttpRequestMessage(request);
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
throw new Exception($"Request for vehicle data for vehicle with VIN {vin} was unsuccessful.");
|
|
}
|
|
|
|
var content = response.Content.ReadAsStringAsync().Result;
|
|
|
|
var result = JsonConvert.DeserializeObject<VehicleInformation>(content);
|
|
|
|
return result.Result[0];
|
|
}
|
|
|
|
private AuctionData GetAuctionValues(int period, int ucgVehicleId, int region, int vehicleTypeKey, string vin, int mileage)
|
|
{
|
|
var newURL = string.Format(_config.WeeklyAuctionValuesByVehicleIdEndPoint + "?period={0}&vehicletype={1}&vin={2}&ucgvehicleid={3}®ion={4}&mileage={5}",
|
|
period, this._nadaVehicleType[vehicleTypeKey], vin, ucgVehicleId, region, mileage);
|
|
|
|
var request = _clientHelpers.CreateGetHttpRequestMessage(newURL, _config.ApiKey);
|
|
var response = _clientHelpers.SendHttpRequestMessage(request);
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
throw new Exception($"Request for auction data for vehicle with VIN {vin} was unsuccessful.");
|
|
}
|
|
|
|
var content = response.Content.ReadAsStringAsync().Result;
|
|
|
|
var result = JsonConvert.DeserializeObject<AuctionInformation>(content);
|
|
|
|
return result.Result[0];
|
|
}
|
|
}
|
|
} |