using Logic.ProductionToProductMapper.Cordonel; using System; using System.Data; using System.Net; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web.Http; using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Logic.ServiceCore; namespace Xylem.Common.Service.MeterProcessState.Controllers { [RoutePrefix("api/Marriage")] public class MarriageController : ApiController { public static class GlobalConfig { public static Lazy connectionString = new Lazy(() => System.Configuration.ConfigurationManager.ConnectionStrings["default"].ConnectionString ); } /// /// Get PcbID from SerialNumber /// /// can be Customer or internal serial number /// [Route("GetPcbId"), HttpGet] public async Task GetPcbID(String SerialNumber) { try { return await Task.Run(() => { Int32 internalSerialNumber = 0; int.TryParse(SerialNumber, out internalSerialNumber); Int32? fromOrderData = null; if (internalSerialNumber == 0) { fromOrderData = getSerialNumberFromOrderData(SerialNumber); if (fromOrderData.HasValue) { internalSerialNumber = fromOrderData.Value; } } using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var sb = new StringBuilder(); sb.AppendLine($" SELECT distinct [MapPcbIdToSerialNumber_PcbId]"); sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber]"); sb.AppendLine($" where [MapPcbIdToSerialNumber_SerialNumber] = {internalSerialNumber}"); var MapData = dataacces.ExecuteQuery(sb.ToString()); if (MapData.Rows.Count != 1) { return Request.CreateResponse(HttpStatusCode.InternalServerError, "Can not find unique PcbId for your request"); } return Request.CreateResponse(HttpStatusCode.OK, MapData.Rows[0]["MapPcbIdToSerialNumber_PcbId"].ToString()); } }); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex); } } /// /// Get SerialNumber from PcbID /// /// PcbID from Meter /// [Route("GetSerialNumber"), HttpGet] public async Task GetSerialNumber(String PcbID) { try { return await Task.Run(() => { using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var sb = new StringBuilder(); sb.AppendLine($" SELECT distinct [MapPcbIdToSerialNumber_SerialNumber] "); sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber]"); sb.AppendLine($" where [MapPcbIdToSerialNumber_PcbId] = '{PcbID}'"); var MapData = dataacces.ExecuteQuery(sb.ToString()); if (MapData.Rows.Count != 1) { return Request.CreateResponse(HttpStatusCode.InternalServerError, "Can not find unique serial number for your request"); } return Request.CreateResponse(HttpStatusCode.OK, MapData.Rows[0]["MapPcbIdToSerialNumber_SerialNumber"].ToString()); } }); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex); } } /// /// Get SerialNumber from PcbID /// /// PcbID from Meter /// [Route("GetSerialNumberAndOrderNumber"), HttpGet] public async Task GetSerialNumberAndOrderNumber(String PcbID, Boolean withRadioAdress = false) { try { return await Task.Run(() => { using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) { StringBuilder sb = new StringBuilder(); sb.AppendLine($" SELECT distinct [MapPcbIdToSerialNumber_SerialNumber], mapOrder.CordonelAssignedPicking_FertigungsAuftragsNr ,KundeneigeneSerienNr as CustomerSerialNr "); if (withRadioAdress) { sb.AppendLine($" , meter.[Adresse] "); } sb.AppendLine($" FROM Auftrag.dbo.Cordonel_AssignedPicking mapOrder "); sb.AppendLine($" left outer join [Auftrag].[dbo].[MapPcbIdToSerialNumber] map on mapOrder.CordonelAssignedPicking_PcbId = map.MapPcbIdToSerialNumber_PcbId and MapPcbIdToSerialNumber_Deleted = 0 "); sb.AppendLine($" left outer join Auftrag.dbo.AuftragPositionSerienNr mapSrn on map.[MapPcbIdToSerialNumber_SerialNumber] = mapSrn.SerienNr and mapSrn.Pruefgangnr = 0 "); sb.AppendLine($" left outer join Auftrag.dbo.AuftragPosition_gesamt auftraginfo on auftraginfo.AuftragNr = mapSrn.AuftragNr and auftraginfo.PositionNr = mapSrn.PositionNr "); if (withRadioAdress) { sb.AppendLine($" left outer join [Auftrag].[dbo].[Genesis_Meter] meter on meter.Seriennummer = MapPcbIdToSerialNumber_SerialNumber "); } sb.AppendLine($" where mapOrder.CordonelAssignedPicking_IsDeleted = 0 and mapOrder.CordonelAssignedPicking_PcbId = '{PcbID}'"); var MapData = dataacces.ExecuteQuery(sb.ToString()); if (MapData.Rows.Count != 1) { return Request.CreateResponse(HttpStatusCode.OK, new String[] { string.Empty, string.Empty, string.Empty }); //return Request.CreateResponse(HttpStatusCode.InternalServerError, "Can not find unique serial number for your request"); } var ret = new String[] { MapData.Rows[0]["MapPcbIdToSerialNumber_SerialNumber"].ToString(), MapData.Rows[0]["CordonelAssignedPicking_FertigungsAuftragsNr"].ToString() }; if (withRadioAdress) { ret = new String[] { MapData.Rows[0]["MapPcbIdToSerialNumber_SerialNumber"].ToString(), MapData.Rows[0]["CordonelAssignedPicking_FertigungsAuftragsNr"].ToString(), MapData.Rows[0]["Adresse"].ToString(), MapData.Rows[0]["CustomerSerialNr"].ToString(), }; } return Request.CreateResponse(HttpStatusCode.OK, ret); } }); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex); } } private Int32? getSerialNumberFromOrderData(String CustomerSerialNumber = null, Int32? SerialNumber = null, Int32? OrderNumber = null) { using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var sb = new StringBuilder(); sb.AppendLine($" Declare @CustomerSerialNumber Nvarchar(50) "); sb.AppendLine($" Declare @SerialNumber int "); sb.AppendLine($" Declare @OrderNumber int "); if (SerialNumber.HasValue) { sb.AppendLine($" set @SerialNumber = {SerialNumber} "); } if (OrderNumber.HasValue) { sb.AppendLine($" set @OrderNumber = {OrderNumber} "); } sb.AppendLine($" set @CustomerSerialNumber = '{CustomerSerialNumber}' "); sb.AppendLine($"SELECT DISTINCT "); sb.AppendLine($" [SerienNr] "); sb.AppendLine($" ,[AuftragNr] "); sb.AppendLine($" ,[PositionNr] "); sb.AppendLine($" ,[KundeneigeneSerienNr] "); sb.AppendLine($"FROM [Auftrag].[dbo].[AuftragPositionSerienNr] "); sb.AppendLine($"WHERE (@SerialNumber IS NULL OR[SerienNr] = @SerialNumber) "); sb.AppendLine($"AND (@CustomerSerialNumber IS NULL OR REPLACE(KundeneigeneSerienNr, ' ', '') like '%{CustomerSerialNumber}%' ) "); sb.AppendLine($"AND (@OrderNumber IS NULL OR[AuftragNr] = @OrderNumber) "); var OrderData = dataacces.ExecuteQuery(sb.ToString()); if (OrderData.Rows.Count != 1) { return null; } var tmpInt = 0; int.TryParse(OrderData.Rows[0]["SerienNr"].ToString(), out tmpInt); return tmpInt; } } [Route("GetSerialNumberFromOrderDataUnMapped"), HttpGet] public async Task GetSerialNumberFromOrderDataUnMapped(Int32 OrderNumber) { using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var sb = new StringBuilder(); sb.AppendLine($" Declare @OrderNumber int "); sb.AppendLine($" set @OrderNumber = {OrderNumber} "); sb.AppendLine($" SELECT top 1 "); sb.AppendLine($" [SerienNr] "); sb.AppendLine($" ,aps.[AuftragNr] "); sb.AppendLine($" ,aps.[PositionNr] "); sb.AppendLine($" ,[KundeneigeneSerienNr] "); sb.AppendLine($" ,MapPcbIdToSerialNumber_PcbId "); sb.AppendLine($" FROM[Auftrag].[dbo].[AuftragPositionSerienNr] "); sb.AppendLine($" aps "); sb.AppendLine($" inner join AuftragPosition_Gesamt a on aps.AuftragNr = a.AuftragNr and aps.PositionNr = a.PositionNr "); sb.AppendLine($" left outer join MapPcbIdToSerialNumber on[SerienNr] = MapPcbIdToSerialNumber_SerialNumber "); sb.AppendLine($" Where(a.FertigungsauftragNr = @OrderNumber) "); sb.AppendLine($" and MapPcbIdToSerialNumber_PcbId is null "); sb.AppendLine($" order by[SerienNr] desc "); var OrderData = dataacces.ExecuteQuery(sb.ToString()); if (OrderData.Rows.Count != 1) { return null; } return Request.CreateResponse(HttpStatusCode.OK, OrderData.Rows[0]["SerienNr"].ToString()); } } [Route("GetPreMarriageStateMSG"), HttpGet] public async Task GetPreMarriageState(String PcbId) { try { return await Task.Run(() => { try { var retSerial = ""; var retOrder = ""; var retFreeSrn = ""; var internalSerialNr = -1; using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var sb = new StringBuilder(); sb = new StringBuilder(); sb.AppendLine($" Declare @SerialNumber int "); sb.AppendLine($" Declare @PcbId Nvarchar(50) "); sb.AppendLine($" Declare @PcbIsPartOfOrder int "); sb.AppendLine($" Declare @LastHeTest int "); sb.AppendLine($" Declare @LastPressureTest int "); sb.AppendLine($" set @SerialNumber = {internalSerialNr} "); sb.AppendLine($" set @PcbId = '{PcbId}' "); sb.AppendLine($" select @PcbIsPartOfOrder = picking.CordonelAssignedPicking_FertigungsAuftragsNr, @SerialNumber = srn.SerienNr from "); sb.AppendLine($" Cordonel_AssignedPicking picking "); sb.AppendLine($" inner join AuftragPosition_gesamt apos on apos.FertigungsauftragNr=picking.CordonelAssignedPicking_FertigungsAuftragsNr "); sb.AppendLine($" inner join AuftragPositionSerienNr srn on apos.AuftragNr=srn.AuftragNr and apos.PositionNr=srn.PositionNr "); sb.AppendLine($" where picking.CordonelAssignedPicking_IsDeleted=0 and picking.CordonelAssignedPicking_PcbId=@PcbId "); sb.AppendLine($" select top 1 @LastHeTest = CordonelPressureTest_Id from Cordonel_PressureTest "); sb.AppendLine($" where CordonelPressureTest_PcbId = @PcbId and CordonelPressureTest_FertigungsAuftragsNr = @PcbIsPartOfOrder "); sb.AppendLine($" and CordonelPressureTest_Valid = 1 and CordonelPressureTest_IsDeleted = 0 "); sb.AppendLine($" "); sb.AppendLine($" select top 1 @LastPressureTest = [Pruefgang] from [Druckpruefung] "); sb.AppendLine($" where [FabNr] = @PcbId and [FertigungsauftragNr] = @PcbIsPartOfOrder "); sb.AppendLine($" and [Dicht] = 1 "); sb.AppendLine($" order by [Pruefgang] desc "); sb.AppendLine($" DECLARE @FreeSrnList varchar(max) "); sb.AppendLine($" SELECT @FreeSrnList = COALESCE(@FreeSrnList + ', ', '') + "); sb.AppendLine($" CAST(FreeSrn AS varchar(10)) "); sb.AppendLine($" FROM(select distinct SerienNr as FreeSrn from "); sb.AppendLine($" AuftragPosition_gesamt apos "); sb.AppendLine($" inner join AuftragPositionSerienNr srn on apos.AuftragNr = srn.AuftragNr and apos.PositionNr = srn.PositionNr "); sb.AppendLine($" left outer join MapPcbIdToSerialNumber map on map.MapPcbIdToSerialNumber_SerialNumber = SerienNr and map.MapPcbIdToSerialNumber_Deleted = 0 "); sb.AppendLine($" where apos.FertigungsauftragNr = @PcbIsPartOfOrder "); sb.AppendLine($" and map.MapPcbIdToSerialNumber_SerialNumber is null) "); sb.AppendLine($" as Free "); sb.AppendLine($" select @PcbId as PcbId, @SerialNumber as SerialNumber,0 as AlreadyMarried ,0 as SerialNumberBlocked ,0 as PcbBlocked ,@PcbIsPartOfOrder as PcbIsPartOfOrder, @LastHeTest as LastHeTest, @LastPressureTest as LastPressureTest, @FreeSrnList as FreeSrn "); sb.AppendLine($" union "); sb.AppendLine($" SELECT distinct "); sb.AppendLine($" [MapPcbIdToSerialNumber_PcbId] as PcbId "); sb.AppendLine($" ,[MapPcbIdToSerialNumber_SerialNumber] as SerialNumber "); sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] = @PcbId and [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber "); sb.AppendLine($" THEN 1 else 0 END as AlreadyMarried "); sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] <> @PcbId and [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber "); sb.AppendLine($" THEN 1 else 0 END as SerialNumberBlocked "); sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] = @PcbId and [MapPcbIdToSerialNumber_SerialNumber] <> @SerialNumber "); sb.AppendLine($" THEN 1 else 0 END as PcbBlocked , "); sb.AppendLine($" @PcbIsPartOfOrder as PcbIsPartOfOrder , "); sb.AppendLine($" @LastHeTest as LastHeTest , "); sb.AppendLine($" @LastPressureTest as LastPressureTest, null as FreeSrn "); sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber] "); sb.AppendLine($" where MapPcbIdToSerialNumber_Deleted = 0 "); sb.AppendLine($" and ([MapPcbIdToSerialNumber_PcbId] = @PcbId or [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber) "); var dtRet = dataacces.ExecuteQuery(sb.ToString()); var ret = MarriagePossibleEnum.None; if (dtRet.Rows.Count == 0) { ret = ret | MarriagePossibleEnum.Error; } foreach (var item in dtRet.Rows) { if (item is DataRow dr) { if (!string.IsNullOrEmpty(dr["SerialNumber"].ToString()) && dr["SerialNumber"].ToString() != "-1") { retSerial = retSerial + dr["SerialNumber"].ToString() + ";"; } if (string.IsNullOrEmpty(dr["PcbIsPartOfOrder"].ToString())) { ret = ret | MarriagePossibleEnum.PcbNotMatchingOrder; } else { retOrder = retOrder + dr["PcbIsPartOfOrder"].ToString() + ";"; } if (!string.IsNullOrEmpty(dr["FreeSrn"].ToString())) { retFreeSrn = retFreeSrn + dr["FreeSrn"].ToString() + ";"; } if (dr["AlreadyMarried"].ToString() == "1") { ret = ret | MarriagePossibleEnum.NotPossibleDueToAlreadyMarried; } if (dr["SerialNumberBlocked"].ToString() == "1") { ret = ret | MarriagePossibleEnum.NotPossibleDueSerialNumberBlocked; } if (dr["PcbBlocked"].ToString() == "1") { ret = ret | MarriagePossibleEnum.NotPossibleDuePcbLocked; } if (dr["PcbBlocked"].ToString() == "1") { ret = ret | MarriagePossibleEnum.NotPossibleDuePcbLocked; } if (dr["LastHeTest"] == DBNull.Value) { ret = ret | MarriagePossibleEnum.NotPossibleDueNoHeTestFound; } if (dr["LastPressureTest"] == DBNull.Value) { ret = ret | MarriagePossibleEnum.NotPossibleDueNoPressureTestFound; } } } if (ret == MarriagePossibleEnum.None) { ret = MarriagePossibleEnum.Possible; } return Request.CreateResponse(HttpStatusCode.OK, new Object[] { ret , retOrder, retSerial, retFreeSrn }); } } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.OK, new Object[] { MarriagePossibleEnum.Error, null, null, null } ); } }); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex); } } [Route("GetPreMarriageState"), HttpGet] public async Task GetPreMarriageState(String PcbId, String SerialNumber) { try { return await Task.Run(() => { try { var internalSerialNr = -1; var cust = ""; if (!ScanToSerialNr.ConvertScanToSerialNr(SerialNumber, out internalSerialNr, out cust)) { } using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var sb = new StringBuilder(); sb = new StringBuilder(); sb.AppendLine($" Declare @SerialNumber int "); sb.AppendLine($" Declare @PcbId Nvarchar(50) "); sb.AppendLine($" Declare @PcbIsPartOfOrder int "); sb.AppendLine($" Declare @LastHeTest int "); sb.AppendLine($" Declare @LastPressureTest int "); sb.AppendLine($" set @SerialNumber = {internalSerialNr} "); sb.AppendLine($" set @PcbId = '{PcbId}' "); sb.AppendLine($" select @PcbIsPartOfOrder = picking.CordonelAssignedPicking_FertigungsAuftragsNr, @SerialNumber = srn.SerienNr from "); sb.AppendLine($" Cordonel_AssignedPicking picking "); sb.AppendLine($" inner join AuftragPosition_gesamt apos on apos.FertigungsauftragNr=picking.CordonelAssignedPicking_FertigungsAuftragsNr "); sb.AppendLine($" inner join AuftragPositionSerienNr srn on apos.AuftragNr=srn.AuftragNr and apos.PositionNr=srn.PositionNr and "); if (internalSerialNr != -1) { sb.AppendLine($" srn.SerienNr=@SerialNumber "); } else { sb.AppendLine($" REPLACE(srn.KundeneigeneSerienNr, ' ', '') like '%{cust}%' "); } sb.AppendLine($" where picking.CordonelAssignedPicking_IsDeleted=0 and picking.CordonelAssignedPicking_PcbId=@PcbId "); sb.AppendLine($" select top 1 @LastHeTest = CordonelPressureTest_Id from Cordonel_PressureTest "); sb.AppendLine($" where CordonelPressureTest_PcbId = @PcbId and CordonelPressureTest_FertigungsAuftragsNr = @PcbIsPartOfOrder "); sb.AppendLine($" and CordonelPressureTest_Valid = 1 and CordonelPressureTest_IsDeleted = 0 "); sb.AppendLine($" "); sb.AppendLine($" select top 1 @LastPressureTest = [Pruefgang] from [Druckpruefung] "); sb.AppendLine($" where [FabNr] = @PcbId and [FertigungsauftragNr] = @PcbIsPartOfOrder "); sb.AppendLine($" and [Dicht] = 1 "); sb.AppendLine($" order by [Pruefgang] desc "); sb.AppendLine($" select @PcbId as PcbId, @SerialNumber as SerialNumber,0 as AlreadyMarried ,0 as SerialNumberBlocked ,0 as PcbBlocked ,@PcbIsPartOfOrder as PcbIsPartOfOrder, @LastHeTest as LastHeTest, @LastPressureTest as LastPressureTest "); sb.AppendLine($" union "); sb.AppendLine($" SELECT distinct "); sb.AppendLine($" [MapPcbIdToSerialNumber_PcbId] as PcbId "); sb.AppendLine($" ,[MapPcbIdToSerialNumber_SerialNumber] as SerialNumber "); sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] = @PcbId and [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber "); sb.AppendLine($" THEN 1 else 0 END as AlreadyMarried "); sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] <> @PcbId and [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber "); sb.AppendLine($" THEN 1 else 0 END as SerialNumberBlocked "); sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] = @PcbId and [MapPcbIdToSerialNumber_SerialNumber] <> @SerialNumber "); sb.AppendLine($" THEN 1 else 0 END as PcbBlocked , "); sb.AppendLine($" @PcbIsPartOfOrder as PcbIsPartOfOrder , "); sb.AppendLine($" @LastHeTest as LastHeTest , "); sb.AppendLine($" @LastPressureTest as LastPressureTest "); sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber] "); sb.AppendLine($" where MapPcbIdToSerialNumber_Deleted = 0 "); sb.AppendLine($" and ([MapPcbIdToSerialNumber_PcbId] = @PcbId or [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber) "); var dtRet = dataacces.ExecuteQuery(sb.ToString()); var ret = MarriagePossibleEnum.None; if (dtRet.Rows.Count == 0) { ret = ret | MarriagePossibleEnum.Error; } foreach (var item in dtRet.Rows) { if (item is DataRow dr) { if (string.IsNullOrEmpty(dr["PcbIsPartOfOrder"].ToString())) { ret = ret | MarriagePossibleEnum.PcbNotMatchingOrder; } if (dr["AlreadyMarried"].ToString() == "1") { ret = ret | MarriagePossibleEnum.NotPossibleDueToAlreadyMarried; } if (dr["SerialNumberBlocked"].ToString() == "1") { ret = ret | MarriagePossibleEnum.NotPossibleDueSerialNumberBlocked; } if (dr["PcbBlocked"].ToString() == "1") { ret = ret | MarriagePossibleEnum.NotPossibleDuePcbLocked; } if (dr["PcbBlocked"].ToString() == "1") { ret = ret | MarriagePossibleEnum.NotPossibleDuePcbLocked; } if (dr["LastHeTest"] == DBNull.Value) { ret = ret | MarriagePossibleEnum.NotPossibleDueNoHeTestFound; } if (dr["LastPressureTest"] == DBNull.Value) { ret = ret | MarriagePossibleEnum.NotPossibleDueNoPressureTestFound; } } } if (ret == MarriagePossibleEnum.None) { ret = MarriagePossibleEnum.Possible; } return Request.CreateResponse(HttpStatusCode.OK, ret); } } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.OK, MarriagePossibleEnum.Error); } }); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex); } } /// /// Set mapping to production database for PcbId and (sensus) Serial number /// Serial number can be internal or Customer serial number /// Checking if Serial number exists and if OrderNumer is not null, if the serial number is part of the Order /// /// PcbId to map, currently it is a string /// SerialNumber to map /// if not null checks if the serial number is part of the order /// [Route("SetPcbToSerial"), HttpGet] public async Task SetPcbToSerial(String PcbId, String Scan = null, String CustomerSerialNumber = null, Int32? SerialNumber = null, Int32? OrderNumber = null, Boolean returnMetroData = false) { try { return await Task.Run(() => { try { if (!string.IsNullOrEmpty(Scan)) { var internalSerialNr = -1; String cust = null; if (ScanToSerialNr.ConvertScanToSerialNr(Scan, out internalSerialNr, out cust)) { if (internalSerialNr != -1) { SerialNumber = internalSerialNr; } else { CustomerSerialNumber = cust; } } else { if (!string.IsNullOrEmpty(cust)) { CustomerSerialNumber = cust; } } } if (CustomerSerialNumber == null && SerialNumber == null) { return Request.CreateResponse(HttpStatusCode.InternalServerError, "Could not store mapping, because not SerialNumber and not CustomerSerialNumber is present. Please check your request"); } using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value)) { var sb = new StringBuilder(); var SerialNumberFromOrder = getSerialNumberFromOrderData(CustomerSerialNumber, SerialNumber, OrderNumber); if (!SerialNumberFromOrder.HasValue && !SerialNumber.HasValue) { return Request.CreateResponse(HttpStatusCode.InternalServerError, "Can not find unique serial number for your request"); } //If SerialNumber is empty get it from order data (mapped by CustomerSerialNumber) if (!SerialNumber.HasValue) { SerialNumber = SerialNumberFromOrder.Value; } else { } sb = new StringBuilder(); sb.AppendLine($" Declare @SerialNumber int "); sb.AppendLine($" Declare @PcbId Nvarchar(50) "); sb.AppendLine($" "); sb.AppendLine($" set @SerialNumber = {SerialNumber} "); sb.AppendLine($" set @PcbId = '{PcbId}' "); sb.AppendLine($" "); sb.AppendLine($" SELECT distinct[MapPcbIdToSerialNumber_Id] "); sb.AppendLine($" ,[MapPcbIdToSerialNumber_PcbId] "); sb.AppendLine($" ,[MapPcbIdToSerialNumber_SerialNumber] "); sb.AppendLine($" ,[MapPcbIdToSerialNumber_DateUtc] "); sb.AppendLine($" ,[MapPcbIdToSerialNumber_Deleted] "); sb.AppendLine($" FROM[Auftrag].[dbo].[MapPcbIdToSerialNumber] "); sb.AppendLine($" where MapPcbIdToSerialNumber_Deleted = 0 "); sb.AppendLine($" and ([MapPcbIdToSerialNumber_PcbId] = @PcbId "); sb.AppendLine($" or [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber) "); if (dataacces.ExecuteQuery(sb.ToString()).Rows.Count != 0) { return Request.CreateResponse(HttpStatusCode.InternalServerError, "Mapping already exist. check your marriage request"); } else { try { sb = new StringBuilder(); sb.AppendLine($" insert into [Auftrag].[dbo].[MapPcbIdToSerialNumber] "); sb.AppendLine($" select "); sb.AppendLine($" '{PcbId}'"); sb.AppendLine($" ,{SerialNumber.Value}"); sb.AppendLine($" ,GETUTCDATE()"); sb.AppendLine($" ,0"); dataacces.ExecuteQuery(sb.ToString()); if (returnMetroData) { return Request.CreateResponse(HttpStatusCode.OK, OrderProgrammingParameters.GetProgrammingParameters(PcbId, GlobalConfig.connectionString.Value)); } else { return Request.CreateResponse(HttpStatusCode.OK, "store"); } } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, $"Can not store mapping into Db {ex.Message}"); } } } } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } }); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex); } } } }