laatzen/Common/Service/MeterProcessState/Controllers/MarriageController.cs
Roland Drabesch da19902c02 stuff
2025-03-17 16:31:54 +01:00

726 lines
45 KiB
C#

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<String> connectionString = new Lazy<String>(()
=>
System.Configuration.ConfigurationManager.ConnectionStrings["default"].ConnectionString
);
}
/// <summary>
/// Get PcbID from SerialNumber
/// </summary>
/// <param name="SerialNumber">can be Customer or internal serial number</param>
/// <returns></returns>
[Route("GetPcbId"), HttpGet]
public async Task<HttpResponseMessage> 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);
}
}
/// <summary>
/// Get SerialNumber from PcbID
/// </summary>
/// <param name="PcbID">PcbID from Meter</param>
/// <returns></returns>
[Route("GetSerialNumber"), HttpGet]
public async Task<HttpResponseMessage> 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);
}
}
/// <summary>
/// Get SerialNumber from PcbID
/// </summary>
/// <param name="PcbID">PcbID from Meter</param>
/// <returns></returns>
[Route("GetSerialNumberAndOrderNumber"), HttpGet]
public async Task<HttpResponseMessage> 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<HttpResponseMessage> 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<HttpResponseMessage> 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 = case when(IstStichprobe = 0 or(IstStichprobe = 1 and IstDicht = 1)) then 1 else null end ");
sb.AppendLine($" from Stichproben left outer join [Druckpruefung] on[FabNr] = PcbId ");
sb.AppendLine($" where[FabNr] = @PcbId and [FertigungsauftragNr] = @PcbIsPartOfOrder ");
sb.AppendLine($" order by [id] 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<HttpResponseMessage> 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 = case when(IstStichprobe = 0 or(IstStichprobe = 1 and IstDicht = 1)) then 1 else null end ");
sb.AppendLine($" from Stichproben left outer join [Druckpruefung] on[FabNr] = PcbId ");
sb.AppendLine($" where[FabNr] = @PcbId and [FertigungsauftragNr] = @PcbIsPartOfOrder ");
sb.AppendLine($" order by [id] 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);
}
}
/// <summary>
/// Set mapping to production database for PcbId and (sensus) Serial number
/// Serial number can be internal <see cref="SerialNumber"/> or Customer serial number <see cref="CustomerSerialNumber"/>
/// Checking if Serial number exists and if OrderNumer is not null, if the serial number is part of the Order
/// </summary>
/// <param name="PcbId">PcbId to map, currently it is a string</param>
/// <param name="SerialNumber"> SerialNumber to map</param>
/// <param name="OrderNumber">if not null checks if the serial number is part of the order</param>
/// <returns></returns>
[Route("SetPcbToSerial"), HttpGet]
public async Task<HttpResponseMessage> 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);
}
}
}
}