2021-10-01 09:09:20 +00:00
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 ;
2022-09-23 11:52:57 +00:00
using Xylem.Common.Logic.ServiceCore ;
2021-10-01 09:09:20 +00:00
namespace Xylem.Common.Service.MeterProcessState.Controllers
{
[RoutePrefix("api/Marriage")]
public class MarriageController : ApiController
{
public static class GlobalConfig
{
2022-10-19 10:58:08 +00:00
public static Lazy < String > connectionString = new Lazy < String > ( ( )
2021-10-01 09:09:20 +00:00
= >
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]
2022-10-19 10:58:08 +00:00
public async Task < HttpResponseMessage > GetPcbID ( String SerialNumber )
2021-10-01 09:09:20 +00:00
{
try
{
return await Task . Run ( ( ) = >
{
2022-10-19 10:58:08 +00:00
Int32 internalSerialNumber = 0 ;
2021-10-01 09:09:20 +00:00
int . TryParse ( SerialNumber , out internalSerialNumber ) ;
2022-10-19 10:58:08 +00:00
Int32 ? fromOrderData = null ;
2021-10-01 09:09:20 +00:00
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]
2022-10-19 10:58:08 +00:00
public async Task < HttpResponseMessage > GetSerialNumber ( String PcbID )
2021-10-01 09:09:20 +00:00
{
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 ) ;
}
}
2022-06-21 10:54:26 +00:00
2021-10-01 09:09:20 +00:00
/// <summary>
/// Get SerialNumber from PcbID
/// </summary>
/// <param name="PcbID">PcbID from Meter</param>
/// <returns></returns>
[Route("GetSerialNumberAndOrderNumber"), HttpGet]
2022-10-19 10:58:08 +00:00
public async Task < HttpResponseMessage > GetSerialNumberAndOrderNumber ( String PcbID , Boolean withRadioAdress = false )
2021-10-01 09:09:20 +00:00
{
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 ) ;
}
}
2022-10-19 10:58:08 +00:00
private Int32 ? getSerialNumberFromOrderData ( String CustomerSerialNumber = null , Int32 ? SerialNumber = null , Int32 ? OrderNumber = null )
2021-10-01 09:09:20 +00:00
{
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 ;
}
}
2022-06-21 10:54:26 +00:00
[Route("GetSerialNumberFromOrderDataUnMapped"), HttpGet]
2022-10-19 10:58:08 +00:00
public async Task < HttpResponseMessage > GetSerialNumberFromOrderDataUnMapped ( Int32 OrderNumber )
2022-06-21 10:54:26 +00:00
{
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 ( ) ) ;
}
}
2022-09-22 14:07:58 +00:00
[Route("GetPreMarriageStateMSG"), HttpGet]
2022-10-19 10:58:08 +00:00
public async Task < HttpResponseMessage > GetPreMarriageState ( String PcbId )
2022-09-22 14:07:58 +00:00
{
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" )
{
2022-09-22 14:12:58 +00:00
ret = ret | MarriagePossibleEnum . NotPossibleDueToAlreadyMarried ;
2022-09-22 14:07:58 +00:00
}
if ( dr [ "SerialNumberBlocked" ] . ToString ( ) = = "1" )
{
ret = ret | MarriagePossibleEnum . NotPossibleDueSerialNumberBlocked ;
}
if ( dr [ "PcbBlocked" ] . ToString ( ) = = "1" )
{
2022-09-22 14:12:58 +00:00
ret = ret | MarriagePossibleEnum . NotPossibleDuePcbLocked ;
2022-09-22 14:07:58 +00:00
}
if ( dr [ "PcbBlocked" ] . ToString ( ) = = "1" )
{
2022-09-22 14:12:58 +00:00
ret = ret | MarriagePossibleEnum . NotPossibleDuePcbLocked ;
2022-09-22 14:07:58 +00:00
}
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 ;
}
2022-10-19 10:58:08 +00:00
return Request . CreateResponse ( HttpStatusCode . OK , new Object [ ] { ret , retOrder , retSerial , retFreeSrn } ) ;
2022-09-22 14:07:58 +00:00
}
}
catch ( Exception ex )
{
2022-10-19 10:58:08 +00:00
return Request . CreateResponse ( HttpStatusCode . OK , new Object [ ] { MarriagePossibleEnum . Error , null , null , null } ) ;
2022-09-22 14:07:58 +00:00
}
} ) ;
}
catch ( Exception ex )
{
return Request . CreateResponse ( HttpStatusCode . InternalServerError , ex ) ;
}
}
2021-10-01 09:09:20 +00:00
[Route("GetPreMarriageState"), HttpGet]
2022-10-19 10:58:08 +00:00
public async Task < HttpResponseMessage > GetPreMarriageState ( String PcbId , String SerialNumber )
2021-10-01 09:09:20 +00:00
{
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 " ) ;
2022-09-22 14:07:58 +00:00
sb . AppendLine ( $" Declare @LastHeTest int " ) ;
sb . AppendLine ( $" Declare @LastPressureTest int " ) ;
2021-10-01 09:09:20 +00:00
2022-09-22 14:07:58 +00:00
sb . AppendLine ( $" set @SerialNumber = {internalSerialNr} " ) ;
2021-10-01 09:09:20 +00:00
sb . AppendLine ( $" set @PcbId = '{PcbId}' " ) ;
sb . AppendLine ( $" select @PcbIsPartOfOrder = picking.CordonelAssignedPicking_FertigungsAuftragsNr, @SerialNumber = srn.SerienNr from " ) ;
sb . AppendLine ( $" Cordonel_AssignedPicking picking " ) ;
2022-09-22 14:07:58 +00:00
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 " ) ;
2021-10-01 09:09:20 +00:00
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 " ) ;
2022-09-22 14:07:58 +00:00
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 " ) ;
2021-10-01 09:09:20 +00:00
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 , " ) ;
2022-09-22 14:07:58 +00:00
sb . AppendLine ( $" @PcbIsPartOfOrder as PcbIsPartOfOrder , " ) ;
sb . AppendLine ( $" @LastHeTest as LastHeTest , " ) ;
sb . AppendLine ( $" @LastPressureTest as LastPressureTest " ) ;
2021-10-01 09:09:20 +00:00
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" )
{
2022-09-13 11:29:18 +00:00
ret = ret | MarriagePossibleEnum . NotPossibleDueToAlreadyMarried ;
2021-10-01 09:09:20 +00:00
}
if ( dr [ "SerialNumberBlocked" ] . ToString ( ) = = "1" )
{
ret = ret | MarriagePossibleEnum . NotPossibleDueSerialNumberBlocked ;
}
if ( dr [ "PcbBlocked" ] . ToString ( ) = = "1" )
{
2022-09-13 11:29:18 +00:00
ret = ret | MarriagePossibleEnum . NotPossibleDuePcbLocked ;
2021-10-01 09:09:20 +00:00
}
2022-09-22 14:07:58 +00:00
if ( dr [ "PcbBlocked" ] . ToString ( ) = = "1" )
{
2022-09-22 14:12:58 +00:00
ret = ret | MarriagePossibleEnum . NotPossibleDuePcbLocked ;
2022-09-22 14:07:58 +00:00
}
if ( dr [ "LastHeTest" ] = = DBNull . Value )
{
ret = ret | MarriagePossibleEnum . NotPossibleDueNoHeTestFound ;
}
if ( dr [ "LastPressureTest" ] = = DBNull . Value )
{
ret = ret | MarriagePossibleEnum . NotPossibleDueNoPressureTestFound ;
}
2021-10-01 09:09:20 +00:00
}
}
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]
2022-10-19 10:58:08 +00:00
public async Task < HttpResponseMessage > SetPcbToSerial ( String PcbId , String Scan = null , String CustomerSerialNumber = null , Int32 ? SerialNumber = null , Int32 ? OrderNumber = null , Boolean returnMetroData = false )
2021-10-01 09:09:20 +00:00
{
try
{
return await Task . Run ( ( ) = >
{
try
{
if ( ! string . IsNullOrEmpty ( Scan ) )
{
var internalSerialNr = - 1 ;
2022-10-19 10:58:08 +00:00
String cust = null ;
2022-09-06 14:22:09 +00:00
if ( ScanToSerialNr . ConvertScanToSerialNr ( Scan , out internalSerialNr , out cust ) )
2021-10-01 09:09:20 +00:00
{
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 ) ;
}
}
}
}