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:
+36
@@ -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
@@ -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');
|
||||
Executable
+1007
File diff suppressed because it is too large
Load Diff
Executable
+480
@@ -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;
|
||||
<# } #>
|
||||
Executable
+1091
File diff suppressed because it is too large
Load Diff
Executable
+381
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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');
|
||||
Reference in New Issue
Block a user