laatzen/LaaProductionWeb/LaaProduction.Search/Data/WildcardRepository.cs
2024-03-06 12:48:08 +01:00

124 lines
6.4 KiB
C#

namespace LaaProduction.Search.Data
{
using LaaProduction.Search.Data.Interfaces;
using LaaProduction.Search.Models.Wildcard;
using LaaProduction.SQL.Interfaces;
using System.Collections.Generic;
internal class WildcardRepository : IWildcardRepository
{
private readonly ISQLConnection sqlConnection;
public WildcardRepository(ISQLConnection sqlConnection)
=> this.sqlConnection = sqlConnection;
public IEnumerable<string> Fields()
=> new string[]
{
"CustomerNo",
"Customer",
"ProductionOrderNo",
"CustomerOrderNo",
"PosNo",
"SerialNo",
"CustomerSerialNo",
"KurzBez",
"Typ",
"Nennweite",
"Baulaenge",
"Quantity",
"FabricNo",
"IdentNr",
"PcbId",
"ErRadioAddress",
"GmRadioAddress",
};
public IEnumerable<WildcardResult> Find(string token, IEnumerable<string> fields)
=> sqlConnection
.CreateCommand($@"
DECLARE @serienNr TABLE([Nr] VARCHAR(50));
-----------------------------------------------------------------------------
-- 1. LOOK FOR SERIAL NUMBER ------------------------------------------------
-----------------------------------------------------------------------------
INSERT INTO @serienNr
SELECT [APS].[SerienNr]
FROM [AuftragPositionSerienNr] AS [APS]
WHERE [APS].[SerienNr] LIKE @{nameof(token)}
OR REPLACE([APS].[KundeneigeneSerienNr], ' ', '') LIKE @{nameof(token)};
-----------------------------------------------------------------------------
-- 2. LOOK FOR PCB NUMBER ---------------------------------------------------
-----------------------------------------------------------------------------
INSERT INTO @serienNr
SELECT [PCBS].[MapPcbIdToSerialNumber_SerialNumber]
FROM [MapPcbIdToSerialNumber] AS [PCBS]
WHERE [PCBS].[MapPcbIdToSerialNumber_PcbId] LIKE @{nameof(token)};
-----------------------------------------------------------------------------
-- 3. LOOK FOR FUNK ADDRESS E-REGISTER --------------------------------------
-----------------------------------------------------------------------------
INSERT INTO @serienNr
SELECT [ER].[Seriennummer]
FROM [eRegister] AS [ER]
WHERE [ER].[Adresse] LIKE @{nameof(token)};
-----------------------------------------------------------------------------
-- 4. LOOK FOR FUNK ADDRESS GENESIS -----------------------------------------
-----------------------------------------------------------------------------
INSERT INTO @serienNr
SELECT [GM].[Seriennummer]
FROM [Genesis_Meter] AS [GM]
WHERE [GM].[Adresse] LIKE @{nameof(token)};
-----------------------------------------------------------------------------
-- 5. TAKE ORDERS INFO ------------------------------------------------------
-----------------------------------------------------------------------------
SELECT DISTINCT
[KN].[KundenNr] AS [CustomerNo]
, [KN].[Name] AS [Customer]
, [AP].[FertigungsauftragNr] AS [ProductionOrderNo]
, [APS].[AuftragNr] AS [CustomerOrderNo]
, [APS].[PositionNr] AS [PosNo]
, [APS].[SerienNr] AS [SerialNo]
, [APS].[KundeneigeneSerienNr] AS [CustomerSerialNo]
, [IDN].[KurzBez] AS [KurzBez]
, [IDN].[Typ] AS [Typ]
, [IDN].[Nennweite] AS [Nennweite]
, [IDN].[Baulaenge] AS [Baulaenge]
, [AP].[Menge] AS [Quantity]
, [APS].[FabNr] AS [FabricNo]
, [IDN].[IdentNr] AS [IdentNr]
, [PCBS].[MapPcbIdToSerialNumber_PcbId] AS [PcbId]
, [ER].[Adresse] AS [ErRadioAddress]
, [GM].[Adresse] AS [GmRadioAddress]
FROM [AuftragPositionSerienNr] AS [APS]
LEFT JOIN [AuftragPosition_Gesamt] AS [AP]
ON [AP].[AuftragNr] = [APS].[AuftragNr]
AND [AP].[PositionNr] = [APS].[PositionNr]
LEFT JOIN [Auftrag_Gesamt] AS [AG]
ON [AG].[AuftragNr] = [APS].[AuftragNr]
LEFT JOIN [Kunde] AS [KN]
ON [KN].[KundenNr] = [AG].[KundenNr]
LEFT JOIN [Identnr] AS [IDN]
ON [IDN].[IdentNr] = [AP].[Identnr]
LEFT JOIN [MapPcbIdToSerialNumber] AS [PCBS]
ON [PCBS].[MapPcbIdToSerialNumber_SerialNumber] = [APS].[SerienNr]
LEFT JOIN [eRegister] AS [ER]
ON [ER].[Seriennummer] = [APS].[SerienNr]
LEFT JOIN [Genesis_Meter] AS [GM]
ON [GM].[Seriennummer] = [APS].[SerienNr]
WHERE [APS].[SerienNr] IN (SELECT [Nr] FROM @serienNr)")
.SetParameter(nameof(token), $"%{token}%")
.ExecuteReader(reader =>
{
var wildcardResult = new WildcardResult();
foreach (var field in fields)
{
wildcardResult[field] = reader.GetValue(field);
}
return wildcardResult;
});
}
}