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.
This commit is contained in:
Joseph Doherty
2026-01-02 07:43:29 -05:00
commit 26ff8d9b4f
1761 changed files with 596509 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
--Add any work orders issued material from flagged work orders
WITH CWO_D AS(
SELECT DISTINCT wo.WorkOrderNumber,
wo.LotNumber,
wo.BranchCode,
wo.ShortItemNumber
FROM dbo.WorkOrderComponent AS woc INNER JOIN
dbo.WorkOrder AS wo ON (woc.WorkOrderNumber = wo.WorkOrderNumber) INNER JOIN
#Temp_WO AS t_wo ON (woc.LotNumber = t_wo.LotNumber AND woc.ShortItemNumber = t_wo.ShortItemNumber)
)
MERGE #Temp_WO AS TARGET
USING CWO_D AS SOURCE
ON (TARGET.WorkOrderNumber = SOURCE.WorkOrderNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.PartsList = 1
WHEN NOT MATCHED THEN
INSERT (WorkOrderNumber, LotNumber, BranchCode, ShortItemNumber, PartsList)
VALUES (SOURCE.WorkOrderNumber, COALESCE(SOURCE.LotNumber, CAST(SOURCE.WorkOrderNumber AS VARCHAR(8))), SOURCE.BranchCode, SOURCE.ShortItemNumber, 1);
WITH CWO_D AS(
SELECT DISTINCT wo.WorkOrderNumber,
wo.LotNumber,
wo.BranchCode,
wo.ShortItemNumber
FROM dbo.LotUsage AS lu INNER JOIN
dbo.WorkOrder AS wo ON (lu.WorkOrderNumber = wo.WorkOrderNumber) INNER JOIN
#Temp_WO AS t_wo ON (lu.LotNumber = t_wo.LotNumber AND lu.ShortItemNumber = t_wo.ShortItemNumber)
)
MERGE #Temp_WO AS TARGET
USING CWO_D AS SOURCE
ON (TARGET.WorkOrderNumber = SOURCE.WorkOrderNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.CARDEX = 1
WHEN NOT MATCHED THEN
INSERT (WorkOrderNumber, LotNumber, BranchCode, ShortItemNumber, CARDEX)
VALUES (SOURCE.WorkOrderNumber, COALESCE(SOURCE.LotNumber, CAST(SOURCE.WorkOrderNumber AS VARCHAR(8))), SOURCE.BranchCode, SOURCE.ShortItemNumber, 1);
+28
View File
@@ -0,0 +1,28 @@
/* Add downlevel work orders that were issued material from flagged work orders */
MERGE INTO TEMP_WO TARGET
USING
(
select distinct WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
from F3111_WOC woc inner join
F4801_WO wo on (woc.WMDOCO = wo.WADOCO) inner join
TEMP_WO t_wo on (woc.WMLOTN = t_wo.LOTNUMBER and woc.WMCPIT = t_wo.SHORTITEMNUMBER)
) SOURCE on (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN MATCHED THEN
UPDATE SET PARTSLIST = 'T'
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, PARTSLIST)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
MERGE INTO TEMP_WO TARGET
USING
(
select distinct WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
from F4111_CARDEX lu inner join
F4801_WO wo on (lu.ILDOCO = wo.WADOCO) inner join
TEMP_WO t_wo on (lu.ILLOTN = t_wo.LOTNUMBER and lu.ILITM = t_wo.SHORTITEMNUMBER)
) SOURCE on (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN MATCHED THEN
UPDATE SET CARDEX = 'T'
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, CARDEX)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
File diff suppressed because it is too large Load Diff
+480
View File
@@ -0,0 +1,480 @@
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="WorkerService.Models.Reporting" #>
<#@ import namespace="WorkerService.Helpers" #>
--Setup flagged work order temp table
IF OBJECT_ID('tempdb.dbo.#Temp_WO', 'U') IS NOT NULL
BEGIN
DROP TABLE #Temp_WO;
END
CREATE TABLE #Temp_WO (
WorkOrderNumber BIGINT NOT NULL,
LotNumber VARCHAR(30) NULL,
BranchCode VARCHAR(12) NULL,
ShortItemNumber BIGINT NOT NULL,
ManuallySpecified BIT NOT NULL DEFAULT 0,
SplitOrder BIT NOT NULL DEFAULT 0,
CARDEX BIT NOT NULL DEFAULT 0,
PartsList BIT NOT NULL DEFAULT 0,
Flagged BIT NOT NULL DEFAULT 0,
PRIMARY KEY CLUSTERED(WorkOrderNumber)
);
CREATE INDEX TIX_Temp_WO_Lookup ON #Temp_WO(LotNumber, BranchCode, ShortItemNumber);
<# if(Model.WorkOrderFilterEnabled) { #>
--Add manually specified work order numbers to flagged list
WITH WOP_CTE AS(
SELECT DISTINCT wo.WorkOrderNumber,
wo.LotNumber,
wo.BranchCode,
wo.ShortItemNumber
FROM dbo.WorkOrder AS wo INNER JOIN
@p_WorkOrderFilter AS pwof ON (wo.WorkOrderNumber = pwof.WorkOrderNumber)
)
MERGE #Temp_WO AS TARGET
USING WOP_CTE AS SOURCE
ON (TARGET.WorkOrderNumber = SOURCE.WorkOrderNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.ManuallySpecified = 1
WHEN NOT MATCHED BY TARGET THEN
INSERT(WorkOrderNumber, LotNumber, BranchCode, ShortItemNumber, ManuallySpecified)
VALUES(SOURCE.WorkOrderNumber, SOURCE.LotNumber, SOURCE.BranchCode, SOURCE.ShortItemNumber, 1);
<#@ include file="SplitWorkOrderQuery.txt" #>
<# } #>
<# if(Model.ItemNumberFilterEnabled) { #>
--Setup item number filter temp table
IF OBJECT_ID('tempdb.dbo.#P_ItemNumbers', 'U') IS NOT NULL
BEGIN
DROP TABLE #P_ItemNumbers;
END
CREATE TABLE #P_ItemNumbers (
ItemNumber VARCHAR(25) NOT NULL,
PRIMARY KEY CLUSTERED(ItemNumber)
);
INSERT INTO #P_ItemNumbers(ItemNumber)
SELECT DISTINCT LTRIM(RTRIM(pinf.ItemNumber))
FROM @p_ItemNumberFilter AS pinf
WHERE LTRIM(RTRIM(pinf.ItemNumber)) IS NOT NULL;
<# } #>
<# if(Model.ProfitCenterFilterEnabled || Model.WorkCenterFilterEnabled) { #>
--Setup profit center / work center filter temp table
IF OBJECT_ID('tempdb.dbo.#P_WorkCenters', 'U') IS NOT NULL
BEGIN
DROP TABLE #P_WorkCenters;
END
CREATE TABLE #P_WorkCenters (
Code VARCHAR(12) NOT NULL,
PRIMARY KEY CLUSTERED(Code)
);
<# } #>
<# if(Model.ProfitCenterFilterEnabled) { #>
WITH WCF_CTE AS(
SELECT LTRIM(RTRIM(oh.WorkCenterCode)) AS Code
FROM @p_ProfitCenterFilter AS ppcf INNER JOIN
dbo.OrgHierarchy AS oh ON (LTRIM(RTRIM(ppcf.Code)) = oh.ProfitCenterCode)
)
MERGE INTO #P_WorkCenters AS TARGET
USING WCF_CTE AS SOURCE
ON (TARGET.Code = SOURCE.Code)
WHEN NOT MATCHED BY TARGET THEN
INSERT(Code)
VALUES(SOURCE.Code);
<# } #>
<# if(Model.WorkCenterFilterEnabled) { #>
WITH WCF_CTE AS(
SELECT DISTINCT pwcf.Code
FROM @p_WorkCenterFilter AS pwcf
WHERE LTRIM(RTRIM(pwcf.Code)) IS NOT NULL
)
MERGE INTO #P_WorkCenters AS TARGET
USING WCF_CTE AS SOURCE
ON (TARGET.Code = SOURCE.Code)
WHEN NOT MATCHED BY TARGET THEN
INSERT(Code)
VALUES(SOURCE.Code);
<# } #>
<# if(Model.ComponentLotFilterEnabled) { #>
--Add downstream product for manually specified component lots
WITH CLN_CTE AS(
SELECT DISTINCT l.LotNumber,
l.ShortItemNumber,
l.BranchCode
FROM @p_ComponentLotFilter AS pclf INNER JOIN
dbo.Lot AS l ON (LTRIM(RTRIM(pclf.ComponentLotNumber)) = l.LotNumber AND LTRIM(RTRIM(pclf.ItemNumber)) = l.ItemNumber)
),
CLN_WO AS(
SELECT wo.WorkOrderNumber,
wo.BranchCode,
wo.LotNumber,
wo.ShortItemNumber
FROM CLN_CTE cln INNER JOIN
dbo.WorkOrderComponent AS woc ON (cln.LotNumber = woc.LotNumber AND cln.ShortItemNumber = woc.ShortItemNumber AND cln.BranchCode = woc.BranchCode) INNER JOIN
dbo.WorkOrder AS wo ON (woc.WorkOrderNumber = wo.WorkOrderNumber)
UNION ALL
SELECT wo.WorkOrderNumber,
wo.BranchCode,
wo.LotNumber,
wo.ShortItemNumber
FROM CLN_CTE cln INNER JOIN
dbo.LotUsage AS lu ON(cln.LotNumber = lu.LotNumber AND cln.ShortItemNumber = lu.ShortItemNumber AND cln.BranchCode = lu.BranchCode) INNER JOIN
dbo.WorkOrder AS wo ON(lu.WorkOrderNumber = wo.WorkOrderNumber)
),
CLN_FILTERED_WO AS(
SELECT DISTINCT cln.WorkOrderNumber,
cln.BranchCode,
cln.LotNumber,
cln.ShortItemNumber
FROM CLN_WO cln
)
MERGE INTO #Temp_WO AS TARGET
USING CLN_FILTERED_WO AS SOURCE
ON (TARGET.WorkOrderNumber = SOURCE.WorkOrderNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.CARDEX = 1
WHEN NOT MATCHED BY TARGET THEN
INSERT (WorkOrderNumber, LotNumber, BranchCode, ShortItemNumber, CARDEX)
VALUES (SOURCE.WorkOrderNumber, COALESCE(SOURCE.LotNumber, CAST(SOURCE.WorkOrderNumber AS VARCHAR(8))), SOURCE.BranchCode, SOURCE.ShortItemNumber, 1);
<#@ include file="SplitWorkOrderQuery.txt" #>
<# } #>
<# if(Model.OperatorFilterEnabled) { #>
--Setup operator filter temp table
IF OBJECT_ID('tempdb.dbo.#P_OperatorIDs', 'U') IS NOT NULL
BEGIN
DROP TABLE #P_OperatorIDs;
END
CREATE TABLE #P_OperatorIDs(
AddressNumber BIGINT NOT NULL,
UserID VARCHAR(10) NOT NULL,
PRIMARY KEY CLUSTERED(AddressNumber)
);
WITH O_CTE AS(
SELECT ju.AddressNumber,
ju.UserID,
ROW_NUMBER() OVER(PARTITION BY ju.AddressNumber ORDER BY ju.UserID DESC) RN
FROM @p_OperatorFilter AS pof INNER JOIN
dbo.JdeUser AS ju ON (LTRIM(RTRIM(pof.UserName)) = ju.UserID)
)
INSERT INTO #P_OperatorIDs(AddressNumber, UserID)
SELECT o.AddressNumber,
o.UserID
FROM O_CTE o
WHERE o.RN = 1;
<# } #>
<# if(Model.ItemOperationMisFilterEnabled) { #>
--Setup item/operation/mis filter temp table
IF OBJECT_ID('tempdb.dbo.#P_PartOperations', 'U') IS NOT NULL
BEGIN
DROP TABLE #P_PartOperations;
END
CREATE TABLE #P_PartOperations(
ItemNumber VARCHAR(32) NOT NULL,
OperationNumber VARCHAR(32) NOT NULL,
MisNumber VARCHAR(32) NOT NULL,
MisRevision VARCHAR(32) NOT NULL,
PRIMARY KEY CLUSTERED(ItemNumber,OperationNumber, MisNumber, MisRevision)
);
INSERT INTO #P_PartOperations(ItemNumber, OperationNumber, MisNumber, MisRevision)
SELECT DISTINCT LTRIM(RTRIM(piomf.ItemNumber)),
LTRIM(RTRIM(piomf.OperationNumber)),
LTRIM(RTRIM(piomf.MisNumber)),
LTRIM(RTRIM(piomf.MisRevision))
FROM @p_ItemOperationMisFilter AS piomf
WHERE LTRIM(RTRIM(piomf.ItemNumber)) IS NOT NULL AND
LTRIM(RTRIM(piomf.OperationNumber)) IS NOT NULL AND
LTRIM(RTRIM(piomf.MisNumber)) IS NOT NULL AND
LTRIM(RTRIM(piomf.MisRevision)) IS NOT NULL;
<# } #>
<# if(Model.ExtractMisData) { #>
IF OBJECT_ID('tempdb.dbo.#TempMisData', 'U') IS NOT NULL
BEGIN
DROP TABLE #TempMisData;
END
CREATE TABLE #TempMisData (
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
);
<# } #>
<# if(Model.ShouldSearchSteps()) { #>
--Query data
WITH LU_WO AS(
SELECT DISTINCT
step.WorkOrderNumber,
step.LotNumber,
step.BranchCode,
step.ShortItemNumber
FROM (
SELECT DISTINCT
wo.WorkOrderNumber,
COALESCE(wo.LotNumber, CAST(wo.WorkOrderNumber AS VARCHAR(8))) AS LotNumber,
wo.BranchCode,
wo.ShortItemNumber
FROM dbo.WorkOrder wo INNER JOIN <# if(Model.ItemNumberFilterEnabled) { #>
#P_ItemNumbers p_in ON (wo.ItemNumber = p_in.ItemNumber) INNER JOIN<# } #>
dbo.WorkOrderStep wos ON (wo.WorkOrderNumber = wos.WorkOrderNumber) LEFT OUTER JOIN
dbo.WorkOrderTime wot ON (wos.WorkOrderNumber = wot.WorkOrderNumber AND wos.StepNumber = wot.StepNumber)<# if(Model.ProfitCenterFilterEnabled || Model.WorkCenterFilterEnabled) { #> INNER JOIN
#P_WorkCenters p_wc ON (wos.WorkCenterCode = p_wc.Code)<# } if(Model.OperatorFilterEnabled) { #> INNER JOIN
#P_OperatorIDs p_oi ON (wot.AddressNumber = p_oi.AddressNumber)<# } if(Model.ItemOperationMisFilterEnabled) { #> CROSS APPLY
dbo.MatchMIS(wo.WorkOrderNumber, wo.ItemNumber, wo.BranchCode, wo.RoutingType, wo.IssueDate, wos.WorkCenterCode,
wos.StepNumber, wos.EndDT, wos.FunctionCode, wos.FunctionOperationDescription) AS mm INNER JOIN
#P_PartOperations p_po on (mm.ItemNumber = p_po.ItemNumber AND mm.MisSequenceNumber = p_po.OperationNumber AND mm.MisNumber = p_po.MisNumber AND mm.RevID = p_po.MisRevision) <# } #>
<# this.Write("\r\n");
if(Model.TimespanFilterEnabled) { #>
WHERE (wos.EndDT <= @p_MaximumDT AND wos.EndDT >= @p_MinimumDT) OR
(wot.GlDate <= @p_MaximumDT AND wot.GlDate >= @p_MinimumDT)
<# } if(!Model.ItemOperationMisFilterEnabled) { #>
UNION
SELECT DISTINCT
wo.WorkOrderNumber,
COALESCE(wo.LotNumber, CAST(wo.WorkOrderNumber AS VARCHAR(8))) AS LotNumber,
wo.BranchCode,
wo.ShortItemNumber
FROM dbo.WorkOrder wo INNER JOIN <# if(Model.ItemNumberFilterEnabled) { #>
#P_ItemNumbers p_in ON (wo.ItemNumber = p_in.ItemNumber) INNER JOIN<# } #>
dbo.WorkOrderTime wot ON (wo.WorkOrderNumber = wot.WorkOrderNumber)<# if(Model.ProfitCenterFilterEnabled || Model.WorkCenterFilterEnabled) { #> INNER JOIN
#P_WorkCenters p_wc ON (wot.WorkCenterCode = p_wc.Code)<# } if(Model.OperatorFilterEnabled) { #> INNER JOIN
#P_OperatorIDs p_oi ON (wot.AddressNumber = p_oi.AddressNumber)<# } #>
<# this.Write("\r\n");
if(Model.MinimumDT.HasValue && Model.MaximumDT.HasValue) { #>
WHERE (wot.GlDate <= @p_MaximumDT AND wot.GlDate >= @p_MinimumDT)
<# } } #>
) step
)
MERGE INTO #Temp_WO AS TARGET
USING LU_WO AS SOURCE
ON (TARGET.WorkOrderNumber = SOURCE.WorkOrderNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.Flagged = 1
WHEN NOT MATCHED BY TARGET THEN
INSERT(WorkOrderNumber, LotNumber, BranchCode, ShortItemNumber, Flagged)
VALUES(SOURCE.WorkOrderNumber, SOURCE.LotNumber, SOURCE.BranchCode, SOURCE.ShortItemNumber, 1);
<# } #>
--Add downlevel work orders that were issued material from flagged work orders
DECLARE @c_MAX_RUNS INT = 20;
DECLARE @v_NumWO INT = -1;
DECLARE @v_NewNumWO INT;
DECLARE @v_NumRuns INT = 0;
WHILE(1 = 1) BEGIN
SET @v_NumWO = @v_NewNumWO;
<# this.PushIndent(" "); #>
<#@ include file="ComponentUsageQuery.txt" #>
<#@ include file="SplitWorkOrderQuery.txt" #>
<# this.PopIndent(); #>
SELECT @v_NewNumWO = COUNT(*) FROM #Temp_WO;
SET @v_NumRuns = @v_NumRuns + 1;
IF(@v_NumWO = @v_NewNumWO OR @v_NumRuns = @c_MAX_RUNS) BEGIN
BREAK;
END
END;
--Lookup flagged work order details
WITH LAST_WOS AS
(
SELECT wos.WorkOrderNumber,
wos.BranchCode,
wos.StepNumber,
wos.StepDescription,
wos.FunctionOperationDescription,
wos.LastUpdateDT,
ROW_NUMBER() OVER (PARTITION BY wos.WorkOrderNumber ORDER BY wos.EndDT DESC, wos.StepNumber DESC) AS RN
FROM dbo.WorkOrderStep AS wos LEFT OUTER JOIN
#Temp_WO t_wo ON (wos.WorkOrderNumber = t_wo.WorkOrderNumber)
)
SELECT wo.WorkOrderNumber,
wo.BranchCode AS WorkOrderBranchCode,
wo.LotNumber,
wo.ItemNumber,
i.PlanningFamily,
t_wo.ManuallySpecified,
t_wo.SplitOrder,
t_wo.CARDEX,
t_wo.PartsList,
t_wo.Flagged,
wo.OrderQuantity,
wo.HeldQuantity,
COALESCE(wots.TotalScrappedQuantity, 0) AS ScrappedQuantity,
wo.ShippedQuantity,
LTRIM(RTRIM(lwos.BranchCode)) AS StepBranchCode,
lwos.StepNumber,
lwos.StepDescription,
lwos.FunctionOperationDescription,
lwos.LastUpdateDT AS StepUpdateDT,
wo.StatusCode,
sc.Description AS StatusDescription,
wo.StatusCodeUpdateDT AS StatusUpdateDT
FROM dbo.WorkOrder AS wo INNER JOIN
#Temp_WO AS t_wo ON (t_wo.WorkOrderNumber = wo.WorkOrderNumber) LEFT OUTER JOIN
dbo.Item i on (wo.ShortItemNumber = i.ShortItemNumber) INNER JOIN
dbo.StatusCode AS sc ON (sc.Code = wo.StatusCode) LEFT OUTER JOIN
LAST_WOS lwos ON (wo.WorkOrderNumber = lwos.WorkOrderNumber) LEFT OUTER JOIN
dbo.WorkOrderTotalScrap wots ON (wo.WorkOrderNumber = wots.WorkOrderNumber)
WHERE lwos.RN IS NULL OR
lwos.RN = 1;
<# if(Model.ExtractMisData) { #>
WITH MIS_CTE AS(
SELECT DISTINCT wo.WorkOrderNumber,
wo.ItemNumber,
wo.BranchCode,
wo.RoutingType,
wo.IssueDate,
wos.WorkCenterCode,
wos.StepNumber,
wos.EndDT,
wos.FunctionCode,
wos.FunctionOperationDescription
FROM dbo.WorkOrderStep AS wos INNER JOIN
dbo.WorkOrder AS wo ON (wos.WorkOrderNumber = wo.WorkOrderNumber) LEFT OUTER JOIN
dbo.WorkOrderTime AS wot ON (wos.WorkOrderNumber = wot.WorkOrderNumber AND LTRIM(wos.BranchCode) = wot.BranchCode AND wos.StepNumber = wot.StepNumber) <# if(Model.ItemNumberFilterEnabled) { #> INNER JOIN
#P_ItemNumbers p_in ON (wo.ItemNumber = p_in.ItemNumber)<# } if(Model.ProfitCenterFilterEnabled || Model.WorkCenterFilterEnabled) { #> INNER JOIN
#P_WorkCenters p_wc ON (wos.WorkCenterCode = p_wc.Code)<# } if(Model.OperatorFilterEnabled) { #> INNER JOIN
#P_OperatorIDs p_oi ON (wot.AddressNumber = p_oi.AddressNumber)<# } #>
<# if(Model.MinimumDT.HasValue && Model.MaximumDT.HasValue) { #>
WHERE (((wos.EndDT <= @p_MaximumDT) AND (wos.EndDT >= @p_MinimumDT)) OR
((wot.GlDate <= @p_MaximumDT) AND (wot.GlDate >= @p_MinimumDT)))
<# } else if(Model.MinimumDT.HasValue && !Model.MaximumDT.HasValue) { #>
WHERE (wos.EndDT >= @p_MinimumDT OR wot.GlDate >= @p_MinimumDT)
<# } else if(!Model.MinimumDT.HasValue && Model.MaximumDT.HasValue) { #>
WHERE (wos.EndDT <= @p_MaximumDT OR wot.GlDate <= @p_MaximumDT))
<# } #>
)
INSERT INTO #TempMISData
(
WorkOrderNumber,
ItemNumber,
ItemDescription,
BranchCode,
WorkCenterCode,
StepTimestamp,
SequenceNumber,
FunctionCode,
FunctionOperationDescription,
MatchedSequenceNumber,
RoutingMatch,
MasterMatch,
MisNumber,
RevID,
CharNumber,
MisSequenceNumber,
TestDescription,
SamplingType,
SamplingValue,
ToolsGauges,
WorkInstructions,
Status,
ReleaseDate
)
SELECT mm.WorkOrderNumber,
mm.ItemNumber,
mm.ItemDescription,
mm.BranchCode,
mm.WorkCenterCode,
mm.StepTimestamp,
mm.SequenceNumber,
mm.FunctionCode,
mm.FunctionOperationDescription,
mm.MatchedSequenceNumber,
mm.RoutingMatch,
mm.MasterMatch,
mm.MisNumber,
mm.RevID,
mm.CharNumber,
mm.MisSequenceNumber,
mm.TestDescription,
mm.SamplingType,
mm.SamplingValue,
mm.ToolsGauges,
mm.WorkInstructions,
mm.Status,
mm.ReleaseDate
FROM MIS_CTE c CROSS APPLY
dbo.MatchMIS(c.WorkOrderNumber, c.ItemNumber, c.BranchCode, c.RoutingType,
c.IssueDate, c.WorkCenterCode, c.StepNumber, c.EndDT,
c.FunctionCode, c.FunctionOperationDescription) AS mm;
--Get MIS search results
SELECT DISTINCT tmd.ItemNumber,
tmd.ItemDescription,
tmd.BranchCode,
tmd.MisSequenceNumber AS SequenceNumber,
tmd.FunctionCode,
tmd.FunctionOperationDescription,
tmd.SequenceNumber AS JobStepSequenceNumber,
tmd.MatchedSequenceNumber,
tmd.RoutingMatch,
tmd.MasterMatch,
tmd.MisNumber,
tmd.RevID,
tmd.CharNumber,
tmd.TestDescription,
tmd.SamplingType,
tmd.SamplingValue,
tmd.ToolsGauges,
tmd.WorkInstructions,
tmd.Status,
tmd.ReleaseDate
FROM #TempMisData AS tmd
ORDER BY tmd.ItemNumber,
tmd.BranchCode,
tmd.SequenceNumber,
tmd.MatchedSequenceNumber;
--Get no-match MIS search results
SELECT DISTINCT tmd.WorkCenterCode,
tmd.WorkOrderNumber,
wo.IssueDate AS WorkOrderStartDate,
tmd.SequenceNumber AS JobStepNumber,
tmd.FunctionOperationDescription AS JobStepDescription,
tmd.StepTimestamp AS JobStepEndDate,
tmd.FunctionCode,
tmd.ItemNumber,
i.Description AS ItemDescription,
wo.RoutingType
FROM #TempMisData AS tmd INNER JOIN
dbo.WorkOrder AS wo ON (tmd.WorkOrderNumber = wo.WorkOrderNumber) LEFT OUTER JOIN
dbo.Item AS i ON (wo.ShortItemNumber = i.ShortItemNumber)
WHERE (tmd.RoutingMatch = 0 AND
tmd.MasterMatch = 0) OR
tmd.MisNumber IS NULL
ORDER BY tmd.WorkOrderNumber,
tmd.SequenceNumber;
<# } #>
File diff suppressed because it is too large Load Diff
+381
View File
@@ -0,0 +1,381 @@
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="WorkerService.Models.Reporting" #>
<#@ import namespace="WorkerService.Helpers" #>
<# if(AddData){ #>
DELETE FROM WORKORDER_FILTER;
DELETE FROM COMPONENT_LOT_FILTER;
DELETE FROM PROFIT_CENTER_FILTER;
DELETE FROM WORK_CENTER_FILTER;
DELETE FROM ITEM_NUMBER_FILTER;
DELETE FROM OPERATOR_FILTER;
DELETE FROM PART_OPERATIONS_FILTER;
DELETE FROM TEMP_WO;
DELETE FROM TEMP_MIS;
/* Add filter criteria to temp tables */
<# } #>
<# if(Model.WorkOrderFilterEnabled) { #>
<# if(AddData){ #>
INSERT ALL
<# foreach(var woNumber in Model.WorkOrderFilter.Select(wo=>wo.WorkOrderNumber)) { #>
INTO WORKORDER_FILTER(WORKORDERNUMBER) VALUES(<#= woNumber #>)
<# } #>
SELECT 1 FROM DUAL;
<# }#>
/* Add manually specified work orders to flagged work orders */
MERGE INTO TEMP_WO TARGET
USING
(
SELECT DISTINCT WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
FROM F4801_WO wo INNER JOIN
WORKORDER_FILTER p_wo ON (wo.WADOCO = p_wo.WORKORDERNUMBER)
) SOURCE ON (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, MANUALLYSPECIFIED)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
<# } #>
<# if(Model.ItemNumberFilterEnabled) { #>
<# if(AddData){ #>
INSERT ALL
<# foreach(var item in Model.ItemNumberFilter) { #>
INTO ITEM_NUMBER_FILTER(ITEMNUMBER) VALUES('<#= item.ItemNumber #>')
<# } #>
SELECT 1 FROM DUAL;
<# } #>
<# } #>
<# if(Model.ProfitCenterFilterEnabled) { #>
<# if(AddData){ #>
INSERT ALL
<# foreach(var profitCenter in Model.ProfitCenterFilter) { #>
INTO PROFIT_CENTER_FILTER(CODE) VALUES('<#= profitCenter.Code #>')
<# } #>
SELECT 1 FROM DUAL;
/* Add work centers in specified profit centers to work center filter */
INSERT INTO WORK_CENTER_FILTER(CODE)
SELECT DISTINCT TRIM(IWMCU)
FROM F30006_GIW91 oh INNER JOIN
PROFIT_CENTER_FILTER p_pc ON (TRIM(oh.IWMCUW) = TRIM(p_pc.CODE));
<# } #>
<# } #>
<# if(Model.WorkCenterFilterEnabled) { #>
<# if(AddData){ #>
INSERT ALL
<# foreach(var workCenter in Model.WorkCenterFilter) { #>
INTO WORK_CENTER_FILTER(CODE) VALUES('<#= workCenter.Code #>')
<# } #>
SELECT 1 FROM DUAL;
<# } #>
<# } #>
<# if(Model.ComponentLotFilterEnabled) { #>
<# if(AddData){ #>
INSERT ALL
<# foreach(var componentLot in Model.ComponentLotFilter) { #>
INTO COMPONENT_LOT_FILTER(LOTNUMBER, ITEMNUMBER) VALUES('<#= componentLot.LotNumber #>', '<#= componentLot.ItemNumber #>')
<# } #>
SELECT 1 FROM DUAL;
<# } #>
/* Add downstream product for manually specified component lots */
MERGE INTO TEMP_WO TARGET
USING
(
SELECT DISTINCT WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
FROM COMPONENT_LOT_FILTER p_clf INNER JOIN
F4108_LOT lot ON (p_clf.LOTNUMBER = lot.IOLOTN and p_clf.ITEMNUMBER = lot.IOLITM) INNER JOIN
F3111_WOC woc ON (lot.IOLOTN = woc.WMLOTN AND lot.IOITM = woc.WMCPIT ) INNER JOIN
F4801_WO wo ON (woc.WMDOCO = wo.WADOCO)
) SOURCE ON (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN MATCHED THEN
UPDATE SET PARTSLIST = 'T'
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, PARTSLIST)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
MERGE INTO TEMP_WO TARGET
USING
(
SELECT DISTINCT WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
FROM COMPONENT_LOT_FILTER p_clf INNER JOIN
F4108_LOT lot ON (p_clf.LOTNUMBER = lot.IOLOTN and p_clf.ITEMNUMBER = lot.IOLITM) INNER JOIN
F4111_CARDEX lu ON (lot.IOLOTN = lu.ILLOTN AND lot.IOITM = lu.ILITM ) INNER JOIN
F4801_WO wo ON (lu.ILDOCO = wo.WADOCO)
) SOURCE ON (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN MATCHED THEN
UPDATE SET CARDEX = 'T'
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, CARDEX)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
<# } #>
<# if(Model.OperatorFilterEnabled) { #>
<# if(AddData){ #>
INSERT ALL
<# foreach(var oper in Model.OperatorFilter) { #>
INTO OPERATOR_FILTER(ADDRESSNUMBER) VALUES('<#= oper.AddressNumber #>')
<# } #>
SELECT 1 FROM DUAL;
<# } #>
<# } #>
<# if(Model.ItemOperationMisFilterEnabled) { #>
<# if(AddData){ #>
INSERT ALL
<# foreach(var itemOp in Model.ItemOperationMisFilter) { #>
INTO PART_OPERATIONS_FILTER(ITEMNUMBER, OPERATIONNUMBER, MISNUMBER, MISREVISION) VALUES('<#= itemOp.ItemNumber #>', '<#= itemOp.OperationNumber #>', '<#= itemOp.MisNumber #>', '<#= itemOp.MisRevision #>')
<# } #>
SELECT 1 FROM DUAL;
<# } #>
<# } #>
<# if(Model.ShouldSearchSteps()) { #>
/* Find work orders matching filter criteria and add to flagged work orders */
MERGE INTO TEMP_WO TARGET
USING (
SELECT DISTINCT WADOCO, WALOTN, WAMMCU, WAITM FROM (
SELECT wo.WADOCO, COALESCE(wo.WALOTN, to_char(wo.WADOCO)) AS WALOTN, wo.WAMMCU, wo.WAITM
FROM F4801_WO wo <# if(Model.ItemNumberFilterEnabled) { #> INNER JOIN
ITEM_NUMBER_FILTER p_in ON (wo.WALITM = p_in.ITEMNUMBER)<# } #> INNER JOIN
F3112_WOS wos ON (wo.WADOCO = wos.WLDOCO) <# if(Model.ProfitCenterFilterEnabled || Model.WorkCenterFilterEnabled) { #>INNER JOIN
WORK_CENTER_FILTER p_wc ON (wos.WLMCU = p_wc.CODE)<# } #> LEFT OUTER JOIN
F31122_WOT wot ON (wos.WLDOCO = wot.WTDOCO and wos.WLOPSQ = wot.WTOPSQ) <# if(Model.OperatorFilterEnabled) { #>INNER JOIN
OPERATOR_FILTER p_o ON (wot.WTAN8 = p_o.ADDRESSNUMBER)<# } #><# if(Model.ItemOperationMisFilterEnabled) {#> INNER JOIN
MIS m ON (wos.WLDOCO = m.WORKORDERNUMBER and wos.WLOPSQ/10 = m.SEQUENCENUMBER and wos.WLMMCU = m.BRANCHCODE ) INNER JOIN
PART_OPERATIONS_FILTER p_po ON (m.ITEMNUMBER = p_po.ITEMNUMBER and m.SEQUENCENUMBER = p_po.OPERATIONNUMBER and m.MISNUMBER = p_po.MISNUMBER and m.REVID = p_po.MISREVISION)
<# } #>
WHERE <#= $"(wos.WLSTRX between 1{Model.MinimumDT:yy}{Model.MinimumDT.Value.DayOfYear:000} and 1{Model.MaximumDT:yy}{Model.MaximumDT.Value.DayOfYear:000})" #> OR
<#= $"(wot.WTDGL between 1{Model.MinimumDT:yy}{Model.MinimumDT.Value.DayOfYear:000} and 1{Model.MaximumDT:yy}{Model.MaximumDT.Value.DayOfYear:000})" #>
<#if(!Model.ItemOperationMisFilterEnabled) { #>UNION
SELECT wo.WADOCO, COALESCE(wo.WALOTN, to_char(wo.WADOCO)) AS WALOTN, wo.WAMMCU, wo.WAITM
FROM F4801_WO wo<# if(Model.ItemNumberFilterEnabled) { #> INNER JOIN
ITEM_NUMBER_FILTER p_in ON (wo.WALITM = p_in.ITEMNUMBER)<# } #> INNER JOIN
F31122_WOT wot ON (wo.WADOCO = wot.WTDOCO)<# if(Model.ProfitCenterFilterEnabled || Model.WorkCenterFilterEnabled) { #> INNER JOIN
WORK_CENTER_FILTER p_wc ON (wot.WTMCU = p_wc.CODE)<# } #><# if(Model.OperatorFilterEnabled) { #>INNER JOIN
OPERATOR_FILTER p_o ON (wot.WTAN8 = p_o.ADDRESSNUMBER)<# } #>
WHERE <#= $"(wot.WTDGL between 1{Model.MinimumDT:yy}{Model.MinimumDT.Value.DayOfYear:000} and 1{Model.MaximumDT:yy}{Model.MaximumDT.Value.DayOfYear:000})" #>
<# } #>)
) SOURCE ON (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN NOT MATCHED THEN
INSERT(WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, FLAGGED)
VALUES(SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
<# } #>
/* Add downstream product */
DECLARE
v_NumWO NUMBER := -1;
v_NewNumWO NUMBER := 0;
v_NumRuns NUMBER := 0;
BEGIN
WHILE (1 = 1) LOOP
/* Search parts list */
MERGE INTO TEMP_WO TARGET
USING
(
SELECT DISTINCT WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
FROM TEMP_WO t_wo INNER JOIN
F4108_LOT lot ON (t_wo.LOTNUMBER = lot.IOLOTN and t_wo.SHORTITEMNUMBER = lot.IOITM) INNER JOIN
F3111_WOC woc ON (lot.IOLOTN = woc.WMLOTN AND lot.IOITM = woc.WMCPIT ) INNER JOIN
F4801_WO wo ON (woc.WMDOCO = wo.WADOCO)
) SOURCE ON (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN MATCHED THEN
UPDATE SET PARTSLIST = 'T'
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, PARTSLIST)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
/* Search CARDEX */
MERGE INTO TEMP_WO TARGET
USING
(
SELECT DISTINCT WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
FROM TEMP_WO t_wo INNER JOIN
F4108_LOT lot ON (t_wo.LOTNUMBER = lot.IOLOTN and t_wo.SHORTITEMNUMBER = lot.IOITM) INNER JOIN
F4111_CARDEX lu ON (lot.IOLOTN = lu.ILLOTN AND lot.IOITM = lu.ILITM ) INNER JOIN
F4801_WO wo ON (lu.ILDOCO = wo.WADOCO)
) SOURCE ON (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN MATCHED THEN
UPDATE SET CARDEX = 'T'
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, CARDEX)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
/* Add any work orders split from flagged work orders */
MERGE INTO TEMP_WO TARGET
USING
(
SELECT DISTINCT WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
FROM F4801_WO wo INNER JOIN
TEMP_WO t_wo ON wo.WAPARS = CAST(t_wo.WORKORDERNUMBER AS char(8))
) SOURCE ON (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN MATCHED THEN
UPDATE SET SPLITORDER = 'T'
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, SPLITORDER)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');
/* Increment run counter and check updated number of flagged work orders */
v_NumRuns := v_NumRuns + 1;
SELECT COUNT(*) INTO v_NewNumWO FROM TEMP_WO;
/* Stop when no new flagged work orders were found OR when max recursion counter reached */
IF v_NumWO = v_NewNumWO OR v_NumRuns >= 20 THEN
EXIT;
END IF;
END LOOP;
END;
/* Lookup flagged work order details */
SELECT t_wo.WORKORDERNUMBER,
t_wo.BRANCHCODE,
t_wo.LOTNUMBER,
COALESCE(item.IMLITM, wo.WALITM) ItemNumber,
item.IMPRP4 PlanningFamily,
item.IMSTKT StockingType,
wo.WAUORG / 100 OrderQuantity,
wo.WASOBK / 100 HeldQuantity,
(SELECT COALESCE(sum(WLSOCN), 0) / 100
FROM F3112_SCRAP scrap
WHERE scrap.WLDOCO = t_wo.WORKORDERNUMBER AND
MOD(scrap.WLOPSQ, 1) = 0) ScrappedQuantity,
wo.WASOQS / 100 ShippedQuantity,
last_step.WLMMCU OperationStepBranchCode,
last_step.WLOPSQ / 10 OperationStep,
last_step.WLDSC1 OperationStepDescription,
last_step.CFDS80 FunctionOperationDescription,
last_step.LASTUPDATEDT OperationStepUpdateTimestamp,
wo.WASRST StatusCode,
sc.DRDL01 StatusDescription,
TO_DATE(wo.WADCG + 1900000, 'YYYYDDD') StatusUpdateTimestamp,
CASE
WHEN t_wo.MANUALLYSPECIFIED = 'T' THEN 'ManuallySpecified'
WHEN t_wo.FLAGGED = 'T' THEN 'Flagged'
WHEN t_wo.SPLITORDER = 'T' THEN 'Split'
WHEN t_wo.CARDEX = 'T' AND t_wo.PARTSLIST = 'F' THEN 'ComponentUsage (CARDEX)'
WHEN (t_wo.CARDEX = 'F' AND t_wo.PARTSLIST = 'T') THEN 'ComponentUsage (Parts List)'
WHEN (t_wo.CARDEX = 'T' AND t_wo.PARTSLIST = 'T') THEN 'ComponentUsage (CARDEX + Parts List)'
ELSE ''
END InclusionReason
FROM TEMP_WO t_wo INNER JOIN
F4801_WO wo ON (t_wo.WORKORDERNUMBER = wo.WADOCO) LEFT OUTER JOIN
F4101_ITEM item ON (t_wo.SHORTITEMNUMBER = item.IMITM) LEFT OUTER JOIN
(SELECT wos.WLDOCO, wos.WLMMCU, wos.WLOPSQ, wos.WLDSC1, wos.CFDS80, wos.LASTUPDATEDT,
ROW_NUMBER() OVER (PARTITION BY wos.WLDOCO ORDER BY WLSTRX DESC, WLOPSQ DESC) RN
FROM F3112_WOS wos) last_step ON (t_wo.WORKORDERNUMBER = last_step.WLDOCO and last_step.RN = 1) LEFT OUTER JOIN
F0005_SC sc ON (sc.DRKY = wo.WASRST);
<# if(Model.ExtractMisData) { #>
/* Extract MIS data */
INSERT INTO TEMP_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 m.*
FROM F4801_WO wo<# if(Model.ItemNumberFilterEnabled) { #> INNER JOIN
ITEM_NUMBER_FILTER p_in ON (wo.WALITM = p_in.ITEMNUMBER)<# } #> INNER JOIN
F3112_WOS wos ON (wo.WADOCO = wos.WLDOCO)<# if(Model.ProfitCenterFilterEnabled || Model.WorkCenterFilterEnabled) { #> INNER JOIN
WORK_CENTER_FILTER p_wc ON (wos.WLMCU = p_wc.CODE)<# } #> LEFT OUTER JOIN
F31122_WOT wot ON (wos.WLDOCO = wot.WTDOCO and wos.WLOPSQ = wot.WTOPSQ)<# if(Model.OperatorFilterEnabled) { #> INNER JOIN
OPERATOR_FILTER p_o ON (wot.WTAN8 = p_o.ADDRESSNUMBER)<# } #> INNER JOIN
MIS m ON (wos.WLDOCO = m.WORKORDERNUMBER AND wos.WLOPSQ/10 = m.SEQUENCENUMBER)
WHERE <#= $"(wos.WLSTRX between 1{Model.MinimumDT:yy}{Model.MinimumDT.Value.DayOfYear:000} and 1{Model.MaximumDT:yy}{Model.MaximumDT.Value.DayOfYear:000})" #> OR
<#= $"(wot.WTDGL between 1{Model.MinimumDT:yy}{Model.MinimumDT.Value.DayOfYear:000} and 1{Model.MaximumDT:yy}{Model.MaximumDT.Value.DayOfYear:000})" #>
/* Get MIS search results */
SELECT DISTINCT tmd.ItemNumber,
tmd.ItemDescription,
tmd.BranchCode,
tmd.MisSequenceNumber SequenceNumber,
tmd.FunctionCode,
tmd.FunctionOperationDescription,
tmd.SequenceNumber JobStepSequenceNumber,
tmd.MatchedSequenceNumber,
tmd.RoutingMatch,
tmd.MasterMatch,
tmd.MisNumber,
tmd.RevID,
tmd.CharNumber,
tmd.TestDescription,
tmd.SamplingType,
tmd.SamplingValue,
tmd.ToolsGauges,
tmd.WorkInstructions,
tmd.Status,
tmd.ReleaseDate
FROM TEMP_MIS tmd
ORDER BY tmd.ItemNumber,
tmd.BranchCode,
tmd.SequenceNumber,
tmd.MatchedSequenceNumber;
/* Get no-match MIS search results */
SELECT DISTINCT tmd.WorkCenterCode,
tmd.WorkOrderNumber,
TO_DATE(wo.WATRDJ + 1900000, 'YYYYDDD') WorkOrderStartDate,
tmd.SequenceNumber JobStepNumber,
tmd.FunctionOperationDescription JobStepDescription,
tmd.StepTimestamp JobStepEndDate,
CASE
WHEN wo.WATRT='NMR' OR
NOT EXISTS(SELECT *
FROM F3112Z1_WOR wor
WHERE tmd.WorkOrderNumber = wor.SZDOCO AND
tmd.SequenceNumber = wor.SZOPSQ
) THEN 1
ELSE 0
END AS WasJobStepAdded,
CASE
WHEN wo.WATRT='NMR' THEN NULL
ELSE (SELECT TOP 1 wor.SZOPSQ
FROM F3112Z1_WOR wor
WHERE (tmd.WorkOrderNumber = wor.SZDOCO AND
tmd.WorkCenterCode = wor.SZMCU AND
tmd.FunctionCode = wor.SZURRF) AND
tmd.SequenceNumber <> wor.SZOPSQ
)
END AS MatchedJobStepNumber,
tmd.FunctionCode,
tmd.ItemNumber,
tmd.ItemDescription,
wo.WATRT AS RoutingType
FROM TEMP_MIS tmd INNER JOIN
F4801_WO wo ON (tmd.WorkOrderNumber = wo.WADOCO) INNER JOIN
F4101_ITEM item ON (wo.WAITM = item.IMITM)
WHERE (tmd.RoutingMatch = 'F' AND tmd.MasterMatch = 'F') OR
tmd.MisNumber IS NULL
ORDER BY tmd.WorkOrderNumber,
tmd.SequenceNumber;
<# } #>
/
+31
View File
@@ -0,0 +1,31 @@
using WorkerService.Models.Reporting;
namespace TestApp.Templates
{
/// <summary>
/// Query template extensions
/// </summary>
public partial class QueryTemplate2
{
/// <summary>
/// Template data model
/// </summary>
public SearchModel Model { get; }
/// <summary>
/// Whether or not to write data inserts
/// </summary>
public bool AddData { get; }
/// <summary>
/// Constructor
/// </summary>
/// <param name="model">Template data model</param>
/// <param name="addData">Whether or not to write data inserts</param>
public QueryTemplate2(SearchModel model = null, bool addData = false)
{
Model = model ?? new SearchModel();
AddData = addData;
}
}
}
+24
View File
@@ -0,0 +1,24 @@
using WorkerService.Models.Reporting;
namespace TestApp.Templates
{
/// <summary>
/// Query template extensions
/// </summary>
public partial class QueryTemplate
{
/// <summary>
/// Template data model
/// </summary>
public SearchModel Model { get; }
/// <summary>
/// Constructor
/// </summary>
/// <param name="model">Template data model</param>
public QueryTemplate(SearchModel model = null)
{
Model = model ?? new SearchModel();
}
}
}
+18
View File
@@ -0,0 +1,18 @@
--Add any work orders split from flagged work orders
WITH SP_WO AS
(
SELECT DISTINCT wo.WorkOrderNumber,
wo.LotNumber,
wo.BranchCode,
wo.ShortItemNumber
FROM dbo.WorkOrder AS wo INNER JOIN
#Temp_WO AS tw_o ON (wo.ParentWorkOrderNumber = CAST(tw_o.WorkOrderNumber AS VARCHAR(8)))
)
MERGE #Temp_WO AS TARGET
USING SP_WO AS SOURCE
ON (TARGET.WorkOrderNumber = SOURCE.WorkOrderNumber)
WHEN MATCHED THEN
UPDATE SET TARGET.SplitOrder = 1
WHEN NOT MATCHED BY TARGET THEN
INSERT (WorkOrderNumber, LotNumber, BranchCode, ShortItemNumber, SplitOrder)
VALUES (SOURCE.WorkOrderNumber, SOURCE.LotNumber, SOURCE.BranchCode, SOURCE.ShortItemNumber, 1);
+13
View File
@@ -0,0 +1,13 @@
/* Add any work orders split from flagged work orders */
MERGE INTO TEMP_WO TARGET
USING
(
select distinct WADOCO, COALESCE(WALOTN, CAST(WADOCO AS CHAR(8))) WALOTN, WAMMCU, WAITM
from F4801_WO wo inner join
TEMP_WO t_wo ON wo.WAPARS = CAST(t_wo.WORKORDERNUMBER as char(8))
) SOURCE ON (TARGET.WORKORDERNUMBER = SOURCE.WADOCO)
WHEN MATCHED THEN
UPDATE SET SPLITORDER = 'T'
WHEN NOT MATCHED THEN
INSERT (WORKORDERNUMBER, LOTNUMBER, BRANCHCODE, SHORTITEMNUMBER, SPLITORDER)
VALUES (SOURCE.WADOCO, SOURCE.WALOTN, SOURCE.WAMMCU, SOURCE.WAITM, 'T');