namespace LaaProductionWeb.Services { using LaaProductionWeb.Data.Interfaces; using LaaProductionWeb.Services.Interfaces; using LaaProductionWeb.Services.Models; public class OrdersService : IOrdersService { private readonly ISqlClient sqlClient; public OrdersService(ISqlClient sqlClient) => this.sqlClient = sqlClient; public OrdersFoundModel FindOrders(string search) { var ordersFound = this.sqlClient.ExecuteReader( query: $@" SELECT DISTINCT [AlleAuftragPositionen].[AuftragNr] -- 0 , [AlleAuftragPositionen].[FertigungsauftragNr] -- 1 , [Kunde].[Name] -- 2 FROM [AlleAuftragPositionen] LEFT JOIN [Kunde] ON [Kunde].[KundenNr] = [AlleAuftragPositionen].[KundenNr] WHERE [AlleAuftragPositionen].[Versand_Ist_datum] IS NOT NULL AND [AlleAuftragPositionen].[AuftragNr] LIKE @{nameof(search)} ORDER BY [AlleAuftragPositionen].[AuftragNr] , [AlleAuftragPositionen].[FertigungsauftragNr] , [Kunde].[Name]", parameters: parameters => parameters.Add(nameof(search), $"%{search}%"), reader: reader => new OrderInfoModel { OrderNr = reader.GetValue(0), ProductionOrderNr = reader.GetValue(1), ClientName = reader.GetValue(2), }); return new OrdersFoundModel(ordersFound); } public OrderPositions FindPositions(string orderNr) { var positionsFound = this.sqlClient.ExecuteReader( query: $@" SELECT DISTINCT [AlleAuftragPositionen].[PositionNr] -- 0 FROM [AlleAuftragPositionen] WHERE [AlleAuftragPositionen].[AuftragNr] = @{nameof(orderNr)} OR [AlleAuftragPositionen].[FertigungsauftragNr] = @{nameof(orderNr)} ORDER BY [AlleAuftragPositionen].[PositionNr]", parameters: parameters => parameters.Add(nameof(orderNr), orderNr), reader: reader => (int)reader.GetValue(0)); return new OrderPositions(positionsFound); } public ProductionOrders FindProductionOrders(string productionNr) { var ordersFound = this.sqlClient.ExecuteReader($@" SELECT DISTINCT [AlleAuftragPositionen].[FertigungsauftragNr] -- 1 FROM [AlleAuftragPositionen] WHERE [AlleAuftragPositionen].[Versand_Ist_datum] IS NOT NULL AND [AlleAuftragPositionen].[AuftragNr] LIKE @{nameof(productionNr)} ORDER BY [AlleAuftragPositionen].[FertigungsauftragNr]", parameters => parameters.Add(nameof(productionNr), $"{productionNr}%"), reader => reader.GetValue()); return new ProductionOrders(ordersFound); } } }