Files
Joseph Doherty 26ff8d9b4f Initial commit: JDE Scoping Tool migration project
Set up repository with legacy .NET Framework 4.8 source (OLD/),
new .NET 10 Blazor solution (NEW/), OpenSpec specifications,
documentation, and project configuration.
2026-01-02 07:43:29 -05:00

311 lines
9.6 KiB
Transact-SQL
Executable File

CREATE FUNCTION [dbo].[MatchMIS] (
@workOrderNumber BIGINT,
@itemNumber VARCHAR(25),
@branchCode VARCHAR(12),
@routingType VARCHAR(3),
@issueDate DATETIME,
@workCenterCode VARCHAR(12),
@sequenceNumber DECIMAL(7, 2),
@steptimestamp DATETIME,
@functionCode VARCHAR(15),
@functionOperationDescription VARCHAR(80)
)
RETURNS @MIS TABLE
(
WorkOrderNumber BIGINT,
ItemNumber VARCHAR(25),
ItemDescription VARCHAR(30),
BranchCode VARCHAR(12),
WorkCenterCode VARCHAR(12),
StepTimestamp DATETIME,
SequenceNumber DECIMAL(7, 2),
FunctionCode VARCHAR(15),
FunctionOperationDescription VARCHAR(80),
MatchedSequenceNumber DECIMAL(7, 2),
RoutingMatch BIT,
MasterMatch BIT,
MisNumber VARCHAR(32),
RevID VARCHAR(32),
CharNumber VARCHAR(32),
MisSequenceNumber VARCHAR(32),
TestDescription VARCHAR(2000),
SamplingType VARCHAR(32),
SamplingValue VARCHAR(32),
ToolsGauges VARCHAR(2000),
WorkInstructions VARCHAR(2000),
Status VARCHAR(32),
ReleaseDate DATETIME
)
BEGIN
--Lookup item description
DECLARE @itemDescription VARCHAR(30);
SELECT TOP 1 @itemDescription = i.Description FROM dbo.Item AS i WHERE i.ItemNumber = @itemNumber;
--Find aliases for sequence number
DECLARE @alias TABLE
(
SequenceNumber DECIMAL(7, 2),
RoutingMatch BIT,
MasterMatch BIT
);
--Lookup parent work order info
DECLARE @p_WorkOrderNumber BIGINT;
SELECT @p_WorkOrderNumber = COALESCE(TRY_CONVERT(BIGINT, wo.ParentWorkOrderNumber), wo.WorkOrderNumber) FROM dbo.WorkOrder AS wo WHERE wo.WorkOrderNumber = @workOrderNumber;
--Add F3112Z1 records to aliases
WITH routing_cte AS (
SELECT DISTINCT wor.StepNumber AS SequenceNumber
FROM dbo.WorkOrderRouting AS wor
WHERE wor.WorkOrderNumber = @p_WorkOrderNumber AND
wor.WorkCenterCode = @workCenterCode AND
wor.FunctionCode = @functionCode AND
wor.TransactionDate = (SELECT MIN(wor2.TransactionDate) FROM dbo.WorkOrderRouting AS wor2 WHERE wor2.WorkOrderNumber = @p_WorkOrderNumber)
)
MERGE @alias AS TARGET
USING routing_cte AS SOURCE ON (TARGET.SequenceNumber = SOURCE.SequenceNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.RoutingMatch = 1
WHEN NOT MATCHED BY TARGET THEN
INSERT(SequenceNumber, RoutingMatch, MasterMatch)
VALUES (SOURCE.SequenceNumber, 1, 0);
--Add F3003 records to aliases
IF(NOT EXISTS(SELECT * FROM @alias AS a)) BEGIN
WITH master_cte AS
(
SELECT DISTINCT rm.SequenceNumber
FROM dbo.RouteMaster AS rm
WHERE rm.BranchCode = @branchCode AND
rm.ItemNumber = @itemNumber AND
rm.RoutingType = @routingType AND
@issueDate BETWEEN rm.StartDate AND rm.EndDate AND
rm.WorkCenterCode = @workCenterCode AND
rm.FunctionCode = @functionCode
)
MERGE @alias AS TARGET
USING master_cte AS SOURCE ON (TARGET.SequenceNumber = SOURCE.SequenceNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.MasterMatch = 1
WHEN NOT MATCHED BY TARGET THEN
INSERT(SequenceNumber, RoutingMatch, MasterMatch)
VALUES(SOURCE.SequenceNumber, 0, 1);
END
ELSE BEGIN
WITH master_cte AS
(
SELECT DISTINCT rm.SequenceNumber
FROM dbo.RouteMaster AS rm
WHERE rm.BranchCode = @branchCode AND
rm.ItemNumber = @itemNumber AND
rm.RoutingType = @routingType AND
@issueDate BETWEEN rm.StartDate AND rm.EndDate AND
rm.WorkCenterCode = @workCenterCode AND
rm.FunctionCode = @functionCode
)
MERGE @alias AS TARGET
USING master_cte AS SOURCE ON (TARGET.SequenceNumber = SOURCE.SequenceNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.MasterMatch = 1;
END
--Try to match to 'Current'
INSERT INTO @MIS
(
WorkOrderNumber,
ItemNumber,
ItemDescription,
BranchCode,
WorkCenterCode,
StepTimestamp,
SequenceNumber,
FunctionCode,
FunctionOperationDescription,
MatchedSequenceNumber,
RoutingMatch,
MasterMatch,
MisNumber,
RevID,
CharNumber,
MisSequenceNumber,
TestDescription,
SamplingType,
SamplingValue,
ToolsGauges,
WorkInstructions,
Status,
ReleaseDate
)
SELECT @workOrderNumber,
@itemNumber,
@itemDescription,
@branchCode,
@workCenterCode,
@steptimestamp,
@sequenceNumber,
@functionCode,
@functionOperationDescription,
a.SequenceNumber AS MatchedSequenceNumber,
a.RoutingMatch,
a.MasterMatch,
md.MisNumber,
md.RevID,
md.CharNumber,
md.SequenceNumber AS MisSequenceNumber,
md.TestDescription,
md.SamplingType,
md.SamplingValue,
md.ToolsGauges,
md.WorkInstructions,
md.Status,
md.ReleaseDate
FROM @alias AS a INNER JOIN
dbo.MisData AS md ON (
md.BranchCode = @branchCode AND
md.ItemNumber = @itemNumber AND
md.SequenceNumber = CAST(CAST(a.SequenceNumber AS INT) AS VARCHAR(32)) AND
@steptimestamp BETWEEN COALESCE(md.ReleaseDate, '1970-01-01') AND COALESCE(md.ObsoleteDate, '2029-01-01')
)
WHERE md.Status = 'Current';
--Exit if any MIS info found
IF (EXISTS ( SELECT *FROM @MIS ))
BEGIN
RETURN;
END
--Try to match to 'BackLevel'
INSERT INTO @MIS
(
WorkOrderNumber,
ItemNumber,
ItemDescription,
BranchCode,
WorkCenterCode,
StepTimestamp,
SequenceNumber,
FunctionCode,
FunctionOperationDescription,
MatchedSequenceNumber,
RoutingMatch,
MasterMatch,
MisNumber,
RevID,
CharNumber,
MisSequenceNumber,
TestDescription,
SamplingType,
SamplingValue,
ToolsGauges,
WorkInstructions,
Status,
ReleaseDate
)
SELECT @workOrderNumber,
@itemNumber,
@itemDescription,
@branchCode,
@workCenterCode,
@steptimestamp,
@sequenceNumber,
@functionCode,
@functionOperationDescription,
a.SequenceNumber AS MatchedSequenceNumber,
a.RoutingMatch,
a.MasterMatch,
md.MisNumber,
md.RevID,
md.CharNumber,
md.SequenceNumber AS MisSequenceNumber,
md.TestDescription,
md.SamplingType,
md.SamplingValue,
md.ToolsGauges,
md.WorkInstructions,
md.Status,
md.ReleaseDate
FROM @alias AS a INNER JOIN
dbo.MisData AS md ON (
md.BranchCode = @branchCode AND
md.ItemNumber = @itemNumber AND
md.SequenceNumber = CAST(CAST(a.SequenceNumber AS INT) AS VARCHAR(32)) AND
md.ReleaseDate BETWEEN @issueDate AND @steptimestamp
)
WHERE md.Status = 'BackLevel';
--Exit if any MIS info found
IF (EXISTS ( SELECT * FROM @MIS ))
BEGIN
RETURN;
END
INSERT INTO @MIS
(
WorkOrderNumber,
ItemNumber,
ItemDescription,
BranchCode,
WorkCenterCode,
StepTimestamp,
SequenceNumber,
FunctionCode,
FunctionOperationDescription,
MatchedSequenceNumber,
RoutingMatch,
MasterMatch
)
SELECT @workOrderNumber,
@itemNumber,
@itemDescription,
@branchCode,
@workCenterCode,
@steptimestamp,
@sequenceNumber,
@functionCode,
@functionOperationDescription,
a.SequenceNumber,
a.RoutingMatch,
a.MasterMatch
FROM @alias AS a;
--Exit if any MIS info found
IF (EXISTS ( SELECT * FROM @MIS ))
BEGIN
RETURN;
END
--Insert parameter data if no MIS or alias found
INSERT INTO @MIS
(
WorkOrderNumber,
ItemNumber,
ItemDescription,
BranchCode,
WorkCenterCode,
StepTimestamp,
SequenceNumber,
FunctionCode,
FunctionOperationDescription,
MatchedSequenceNumber,
RoutingMatch,
MasterMatch
)
VALUES
(
@workOrderNumber,
@itemNumber,
@itemDescription,
@branchCode,
@workCenterCode,
@steptimestamp,
@sequenceNumber,
@functionCode,
@functionOperationDescription,
NULL,
0,
0
);
RETURN;
END;