26ff8d9b4f
Set up repository with legacy .NET Framework 4.8 source (OLD/), new .NET 10 Blazor solution (NEW/), OpenSpec specifications, documentation, and project configuration.
381 lines
16 KiB
Plaintext
Executable File
381 lines
16 KiB
Plaintext
Executable File
<#@ 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;
|
|
<# } #>
|
|
/ |