namespace LaaProductionWeb.Blazor.Components.HeliumTester.Models { using LaaPackages.Data.HeliumTester; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; public class HeliumTesterService(HeliumTesterDbContext heliumTesterDbContext) { private readonly HeliumTesterDbContext heliumTesterDbContext = heliumTesterDbContext; public IEnumerable LoadTestVariants() => this.heliumTesterDbContext .TestVariants .ToList(); public IEnumerable LoadHeliumRecieps() => this.heliumTesterDbContext .HeliumRecipes .Select(HeliumRecipeModel.ToModel); public IEnumerable LoadWaterRecieps() => this.heliumTesterDbContext .WaterRecipes .Select(WaterRecipeModel.ToModel); public void UpdateRecipe(object recipe) { this.heliumTesterDbContext.Update(recipe); this.heliumTesterDbContext.SaveChanges(); } public IEnumerable GetLatestResultIdents(int? ident, MatchCollectionModel matchCollectionModel) { var where = default(string); var regions = matchCollectionModel .Regions .Where(x => x.Selected) .Select(x => x.Key); if (regions.Any()) { where = $"{where}{Environment.NewLine} AND tv.RegionCode IN ('{string.Join("', '", regions)}')"; } var meterSizes = matchCollectionModel .MeterSizes .Where(x => x.Selected) .Select(x => x.Key); if (meterSizes.Any()) { where = $"{where}{Environment.NewLine} AND tv.MeterSizeCode IN ('{string.Join("', '", meterSizes)}')"; } var bodyLengths = matchCollectionModel .BodyLengths .Where(x => x.Selected) .Select(x => x.Key); if (bodyLengths.Any()) { where = $"{where}{Environment.NewLine} AND tv.BodyLengthCode IN ('{string.Join("', '", bodyLengths)}')"; } var pressureSensors = matchCollectionModel .PressureSensors .Where(x => x.Selected) .Select(x => x.Key); if (pressureSensors.Any()) { where = $"{where}{Environment.NewLine} AND tv.PressureSensorCode IN ('{string.Join("', '", pressureSensors)}')"; } if (ident is not null) { where = $"{where}{Environment.NewLine} AND oar.ResultIdent LIKE '%{ident}%'"; } var query = $@" SELECT DISTINCT oar.Id AS OverallId , oar.ResultIdent AS PcbId , CAST(0 AS BIT) AS Selected , tv.Region + ' ' + CASE WHEN tv.RegionCode = 'E' THEN 'DN' ELSE '' END + tv.MeterSize + ' L=' + CAST(tv.BodyLength AS VARCHAR(5)) + ' ' + tv.PressureSensorCode AS Description FROM ht.TestVariants AS tv LEFT JOIN ht.HeliumRecipes AS hr ON tv.Id = hr.VariantId LEFT JOIN ht.WaterRecipes AS wr ON tv.Id = wr.VariantId LEFT JOIN ht.OverallResults AS oar ON hr.Id = oar.HeliumRecipeId OR wr.Id = oar.WaterRecipeId LEFT JOIN ht.HeliumMessurementsHistory AS hmh ON oar.Id = hmh.OverallResultId LEFT JOIN ht.WaterMessurementsHistory AS wmh ON oar.Id = wmh.OverallResultId WHERE oar.Id IS NOT NULL AND (hmh.Id IS NOT NULL OR wmh.Id IS NOT NULL) {where}"; return this.heliumTesterDbContext .Database .SqlQueryRaw(query); } public IEnumerable GetHeHistory(int overallResultId) => this.heliumTesterDbContext .HeliumMessurementsHistories .Where(h => h.OverallResultId == overallResultId) .ToList(); public IEnumerable GetWaHistory(int overallResultId) => this.heliumTesterDbContext .WaterMessurementsHistories .Where(h => h.OverallResultId == overallResultId) .ToList(); public IEnumerable GetOverallMatchItems() => this.heliumTesterDbContext .Database .SqlQuery($@" SELECT DISTINCT htv.Id AS HeliumVariantId , htv.RegionCode AS HeliumRegionCode , htv.Region AS HeliumRegion , htv.MeterSizeCode AS HeliumMeterSizeCode , htv.MeterSize AS HeliumMeterSize , htv.BodyLengthCode AS HeliumBodyLengthCode , htv.BodyLength AS HeliumBodyLength , htv.PressureSensorCode AS HeliumPressureSensorCode , htv.HasPressureSensor AS HeliumHasPressureSensor , wtv.Id AS WaterVariantId , wtv.RegionCode AS WaterRegionCode , wtv.Region AS WaterRegion , wtv.MeterSizeCode AS WaterMeterSizeCode , wtv.MeterSize AS WaterMeterSize , wtv.BodyLengthCode AS WaterBodyLengthCode , wtv.BodyLength AS WaterBodyLength , wtv.PressureSensorCode AS WaterPressureSensorCode , wtv.HasPressureSensor AS WaterHasPressureSensor FROM ht.OverallResults AS oar LEFT JOIN ht.HeliumMessurementsHistory AS hmh ON oar.Id = hmh.OverallResultId LEFT JOIN ht.HeliumRecipes AS hr ON oar.HeliumRecipeId = hr.Id LEFT JOIN ht.TestVariants AS htv ON hr.VariantId = htv.Id LEFT JOIN ht.WaterMessurementsHistory AS wmh ON oar.Id = wmh.OverallResultId LEFT JOIN ht.WaterRecipes AS wr ON oar.HeliumRecipeId = wr.Id LEFT JOIN ht.TestVariants AS wtv ON hr.VariantId = wtv.Id WHERE oar.HeliumRecipeId IS NOT NULL AND oar.WaterRecipeId IS NOT NULL"); } }