Files
Partsource/PartSource.Services/VehicleService.cs
2020-04-12 20:52:03 -04:00

138 lines
3.6 KiB
C#

using Microsoft.EntityFrameworkCore;
using PartSource.Data;
using PartSource.Data.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace PartSource.Services
{
public class VehicleService
{
private readonly PartSourceContext _partSourceContext;
public VehicleService(PartSourceContext partSourceContext)
{
_partSourceContext = partSourceContext;
}
public async Task<IList<VehicleMake>> GetAllMakes()
{
return await _partSourceContext.VehicleMakes.ToListAsync();
}
public async Task<IList<VehicleData>> GetModels(int makeId, int year)
{
return await _partSourceContext.VehicleData.Where(d =>
d.MakeId == makeId
&& d.Year == year
)
.ToListAsync();
}
public async Task<IList<BaseVehicle>> GetBaseVehicles(int makeId, int modelId, int year)
{
return await _partSourceContext.BaseVehicles.Where(d =>
d.MakeId == makeId
&& d.ModelId == modelId
&& d.Year == year
)
.ToListAsync();
}
public async Task<IList<Engine>> GetEngines(int baseVehicleId)
{
return await _partSourceContext.Engines.Where(e => e.BaseVehicleId == baseVehicleId).ToListAsync();
}
public async Task<IList<Engine>> GetEngines(int baseVehicleId, int submodelId)
{
return await _partSourceContext.Engines.Where(e =>
e.BaseVehicleId == baseVehicleId
&& e.SubmodelId == submodelId
)
.ToListAsync();
}
public async Task<IList<Submodel>> GetSubmodels(int makeId, int modelId, int year)
{
return await _partSourceContext.Submodels.Where(s =>
s.MakeId == makeId
&& s.ModelId == modelId
&& s.Year == modelId
)
.ToListAsync();
}
public async Task<VehicleData> GetVehicle(int baseVehicleId, int engineConfigId, int submodelId)
{
return await _partSourceContext.VehicleData.FirstOrDefaultAsync(d =>
d.BaseVehicleId == baseVehicleId
&& d.EngineConfigId == engineConfigId
&& d.SubmodelId == submodelId
);
}
public IList<string> GetYmmFitment(IList<VehicleData> vehicles)
{
if (vehicles.Count == 0)
{
return null;
}
IList<string> fitmentTags = new List<string>();
IList<string> makeModels = vehicles.Select(v => $"{v.MakeName},{v.ModelName}").Distinct().ToList();
foreach (string makeModel in makeModels)
{
string make = makeModel.Split(',')[0];
string model = makeModel.Split(',')[1];
List<string> years = vehicles
.Where(v => v.MakeName == make && v.ModelName == model)
.OrderBy(v => v.Year)
.Select(v => v.Year.HasValue ? v.Year.Value.ToString().Trim() : string.Empty)
.Distinct()
.ToList();
string tag = $"{string.Join('-', years)} {make.Trim()} {model.Trim()}";
Console.WriteLine(tag);
fitmentTags.Add(tag);
}
return fitmentTags;
}
public IList<int> GetVehicleIdFitment(IList<VehicleData> vehicles)
{
return vehicles.Select(v => v.VehicleToEngineConfigId).ToArray();
}
public IList<VehicleData> GetVehiclesForPart(string partNumber, string lineCode)
{
partNumber = Regex.Replace(partNumber, "[^a-zA-Z0-9]", string.Empty);
IQueryable<string> whiCodes = _partSourceContext.DcfMappings
.Where(d => d.LineCode == lineCode)
.Select(d => d.WhiCode);
IQueryable<VehicleData> vehicles = _partSourceContext.Fitments
.Where(f => f.PartNumber == partNumber && whiCodes.Contains(f.LineCode))
.Join(_partSourceContext.VehicleData,
f => new { f.BaseVehicleId, f.EngineConfigId },
v => new { v.BaseVehicleId, v.EngineConfigId },
(f, v) => v);
return vehicles.ToList();
}
}
}