# NetworkFlow
## public void deleteAllByProduct(ProductBean product)
```sql
--clearStepNetworkDates(product, session);
DELETE FROM PBM_STEP_NETWORK_DATES WHERE PRODUCT_ID = :PID;
--clearStepNetwork(product, session);
DELETE FROM PBM_STEP_NETWORK WHERE PRODUCT_ID = :PID;
--clearLinkNetwork(product, session);
DELETE FROM PBM_LINK_NETWORK WHERE PRODUCT_ID = :PID;
```
## networkService.transformAndSave(network);
```sql
-- generateNetwork()
-- partNumberDAO.createPartNumberTemporaryTable(product);
-- CREATE_PART_NUMBER_TEMPORARY_TABLE.sql
INSERT
INTO PBM_PART_NUMBER_TMP
(
PART_NUMBER_ID,
ATA100,
CEMB,
DBT_CODE,
DBT_DESCRITION,
DESCRIPTION,
DESIGN,
GOOD_GROUP,
LEAD_TIME,
LINK_STATUS,
LRV,
ORIGIN,
PART_NUMBER,
PROCEDENCE,
SUPPLIER_CODE,
SUPPLIER_DESCRIPTION,
SUPPLY_STRATEGY,
TOOLING_CLASS,
TYPE,
SYSTEM,
FINAL_DATE,
APL_DATE,
PRODUCT_ID,
PART_NUMBER_UID,
SOLID_MF,
STOCK_TRAFFIC,
ITEM,
CLASS_TYPE,
DESIGN_SUPPLIER,
FAMILY_MACHINED_CODE,
FAMILY_MACHINED_DESC,
FAMILY_STAMPED_CODE,
FAMILY_STAMPED_DESC,
MACHINED_TECHNOLOGY_CODE,
MACHINED_TECHNOLOGY_DESC,
PLANT,
PROCEDENCE_SUPPLIER,
RAW_MATERIAL_CODE,
RAW_MATERIAL_DESC,
REVISION,
DESIGN_SUPPLIER_CODE,
PROCEDENCE_SUPPLIER_CODE,
PRODUCT_TYPE,
SERIAL_NUMBER
)
SELECT PART_NUMBER_ID,
ATA100,
CEMB,
DBT_CODE,
DBT_DESCRITION,
DESCRIPTION,
DESIGN,
GOOD_GROUP,
LEAD_TIME,
LINK_STATUS,
LRV,
ORIGIN,
PART_NUMBER,
PROCEDENCE,
SUPPLIER_CODE,
SUPPLIER_DESCRIPTION,
SUPPLY_STRATEGY,
TOOLING_CLASS,
TYPE,
SYSTEM,
FINAL_DATE,
APL_DATE,
PRODUCT_ID,
PART_NUMBER_UID,
SOLID_MF,
STOCK_TRAFFIC,
ITEM,
CLASS_TYPE,
DESIGN_SUPPLIER,
FAMILY_MACHINED_CODE,
FAMILY_MACHINED_DESC,
FAMILY_STAMPED_CODE,
FAMILY_STAMPED_DESC,
MACHINED_TECHNOLOGY_CODE,
MACHINED_TECHNOLOGY_DESC,
PLANT,
PROCEDENCE_SUPPLIER,
RAW_MATERIAL_CODE,
RAW_MATERIAL_DESC,
REVISION,
DESIGN_SUPPLIER_CODE,
PROCEDENCE_SUPPLIER_CODE,
:TYPE,
:SERIAL
FROM PBM_PART_NUMBER
WHERE PRODUCT_ID = :PID
AND LOGICALLY_DELETED = 'N';
-- networkService.transformAndSave(network);
-- networkDAO.transformAndTransfer(network.getProduct());
-- transferStepNetwork(product, session);
INSERT
INTO PBM_STEP_NETWORK_TMP
(
STEP_NETWORK_ID,
PACKAGE_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
PN_CONNECTED,
PRODUCT_ID
)
SELECT PBM_SQ_STEP_NETWORK.NEXTVAL,
J.PACKAGE_ID,
J.PART_NUMBER_ID,
J.STEP_ID,
J.MP_STEP_ID,
J.PN_CONNECTED,
J.PRODUCT_ID
FROM PBM_NETWORK N,
JSON_TABLE(STEP_NETWORK FORMAT JSON, '$.obj[*]' COLUMNS ( PACKAGE_ID PATH '$.packageId', PART_NUMBER_ID PATH '$.partNumberId', STEP_ID PATH '$.stepId', MP_STEP_ID PATH '$.mpStepId', PN_CONNECTED PATH '$.connected', PRODUCT_ID PATH '$.productId') ) J
WHERE N.PRODUCT_ID = :PID;
-- networkService.transformAndSave(network);
-- networkDAO.transformAndTransfer(network.getProduct());
-- transferLinkNetwork(product, session);
INSERT
INTO PBM_LINK_NETWORK_TMP
(
LINK_NETWORK_ID,
PACKAGE_ID,
PART_NUMBER_ID,
NEXT_PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
PN_CONNECTED,
NEXT_PN_CONNECTED,
PRODUCT_ID
)
SELECT PBM_SQ_LINK_NETWORK.NEXTVAL,
J.PACKAGE_ID,
J.PART_NUMBER_ID,
J.NEXT_PART_NUMBER_ID,
J.STEP_ID,
J.MP_STEP_ID,
J.NEXT_STEP_ID,
J.NEXT_MP_STEP_ID,
J.PN_CONNECTED,
J.NEXT_PN_CONNECTED,
J.PRODUCT_ID
FROM PBM_NETWORK N,
JSON_TABLE(LINK_NETWORK FORMAT JSON, '$.obj[*]' COLUMNS ( PACKAGE_ID PATH '$.packageId', PART_NUMBER_ID PATH '$.partNumberId', NEXT_PART_NUMBER_ID PATH '$.nextPartNumberId', STEP_ID PATH '$.stepId', MP_STEP_ID PATH '$.mpStepId', NEXT_STEP_ID PATH '$.nextStepId', NEXT_MP_STEP_ID PATH '$.nextMpStepId', PN_CONNECTED PATH '$.connected', NEXT_PN_CONNECTED PATH '$.nextConnected', PRODUCT_ID PATH '$.productId') ) J
WHERE N.PRODUCT_ID = :PID;
```
## stepQualificationDAO.autoQualification(product, qualification);
```sql
-- loadActiveNonRecStepQualificationToTemporaryTable(product);
-- network/ACTIVE_USER_STEP_QUALIFICATION.sql
INSERT INTO PBM_ACT_STEP_QUALIFICATION_TMP (
PRODUCT_ID,
CYCLE,
END_DATE,
PART_NUMBER_ID,
STEP_ID,
KIT_TIMES_ID,
PROFILE_ID,
CREATION_DATE
)
SELECT
SQ.PRODUCT_ID,
SQ.CYCLE,
SQ.END_DATE,
SQ.PART_NUMBER_ID,
SQ.STEP_ID,
SQ.KIT_TIMES_ID,
Q.PROFILE_ID,
SQ.CREATION_DATE
FROM PBM_STEP_QUALIFICATION SQ
JOIN PBM_PART_NUMBER_TMP P
ON P.PART_NUMBER_ID = SQ.PART_NUMBER_ID
JOIN PBM_QUALIFICATION Q
ON Q.QUALIFICATION_ID = SQ.QUALIFICATION_ID
AND Q.ACTIVE = 'Y'
WHERE SQ.PRODUCT_ID = :PID
AND NVL(SQ.CREATED_BY,0) <> 0;
-- loadActiveUserStepQualificationToTemporaryTable(product);
-- ACTIVE_STEP_NON_REC_QUALIFICATION.sql
INSERT INTO PBM_ACT_STEP_QUALIFICATION_TMP (
PRODUCT_ID,
CYCLE,
END_DATE,
PART_NUMBER_ID,
STEP_ID,
KIT_TIMES_ID,
PROFILE_ID,
CREATION_DATE
)
SELECT
P.PRODUCT_ID,
SQ.CYCLE,
SQ.END_DATE,
P.PART_NUMBER_ID,
SQ.STEP_ID,
SQ.KIT_TIMES_ID,
Q.PROFILE_ID,
SQ.CREATION_DATE
FROM PBM_NON_REC_STEP_QUALIFICATION SQ
JOIN PBM_PART_NUMBER_TMP P
ON P.PART_NUMBER_UID = SQ.PART_NUMBER_UID
JOIN PBM_QUALIFICATION Q
ON Q.QUALIFICATION_ID = SQ.QUALIFICATION_ID
AND Q.ACTIVE = 'Y'
AND Q.SCENARIO_ID = :SID
WHERE P.PRODUCT_ID = :PID;
-- loadActiveStepQualificationToTemporaryTable(product);
-- ACTIVE_STEP_QUALIFICATION.sql
INSERT INTO PBM_ACT_STEP_QUALIF_CONS_TMP (
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
KIT_TIMES_ID,
CREATION_DATE
)
SELECT
SQ.PRODUCT_ID,
SQ.PART_NUMBER_ID,
SQ.STEP_ID,
SQ.KIT_TIMES_ID,
SQ.CREATION_DATE
FROM PBM_STEP_QUALIFICATION SQ
JOIN PBM_PART_NUMBER_TMP P ON P.PART_NUMBER_ID = SQ.PART_NUMBER_ID
JOIN PBM_QUALIFICATION Q ON Q.QUALIFICATION_ID = SQ.QUALIFICATION_ID AND Q.ACTIVE = 'Y'
LEFT JOIN PBM_ACT_STEP_QUALIFICATION_TMP T ON T.PART_NUMBER_ID = P.PART_NUMBER_ID AND T.STEP_ID = SQ.STEP_ID
WHERE SQ.PRODUCT_ID = :PID
AND NVL(T.PART_NUMBER_ID,0) = 0
AND NVL(SQ.CREATED_BY,0) = 0;
-- consolidateStepQualification(product);
-- CONSOLIDATE_STEP_QUALIFICATION.sql
INSERT
INTO PBM_ACT_STEP_QUALIFICATION_TMP (
PART_NUMBER_ID,
STEP_ID,
PRODUCT_ID,
KIT_TIMES_ID,
CREATION_DATE
)
SELECT
PART_NUMBER_ID,
STEP_ID,
PRODUCT_ID,
KIT_TIMES_ID,
CREATION_DATE
FROM (
SELECT
PART_NUMBER_ID,
STEP_ID,
PRODUCT_ID,
KIT_TIMES_ID,
CREATION_DATE,
ROW_NUMBER() OVER (PARTITION BY STEP_ID, PART_NUMBER_ID ORDER BY CREATION_DATE DESC) SEQ
FROM PBM_ACT_STEP_QUALIF_CONS_TMP
WHERE PRODUCT_ID = :PID
) WHERE SEQ = 1;
-- stepQualification(product, qualification, session);
-- network/STEP_QUALIFICATION.sql
INSERT INTO PBM_QUALIFICATION (QUALIFICATION_ID, PARENT_ID, CREATION_DATE, MODIFICATION_DATE, "CONDITION", DESCRIPTION, SCENARIO_ID, USER_ID, ACTIVE, PROFILE_ID)
VALUES(PBM_SQ_QUALIFICATION.nextval, null, current_timestamp, null, null, null, 1, null, 'Y', null);
SELECT max(QUALIFICATION_ID) FROM PBM_QUALIFICATION;
INSERT
INTO PBM_ACT_STEP_QUALIFICATION_TMP (
PRODUCT_ID,
QUALIFICATION_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
KIT_TIMES_ID,
IS_NEW,
CREATION_DATE
)
SELECT
PRODUCT_ID,
:QID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
KIT_TIMES_ID,
IS_NEW,
SYSDATE
FROM (
SELECT
SN.STEP_ID,
SN.PRODUCT_ID,
SN.MP_STEP_ID,
SN.PART_NUMBER_ID,
MP.KIT_TIMES_ID,
'Y' AS IS_NEW
FROM PBM_STEP_NETWORK_TMP SN
JOIN PBM_REL_PART_NUMBER_MP MP
ON MP.PART_NUMBER_ID = SN.PART_NUMBER_ID
--AND MP.PRODUCT_ID = SN.PRODUCT_ID
LEFT JOIN PBM_ACT_STEP_QUALIFICATION_TMP SQ
ON SQ.STEP_ID = SN.STEP_ID
AND SQ.PART_NUMBER_ID = SN.PART_NUMBER_ID
WHERE SN.PRODUCT_ID = :PID
AND NVL(SQ.KIT_TIMES_ID,0) <> DECODE(SQ.PROFILE_ID,NULL,MP.KIT_TIMES_ID,NULL)
GROUP BY SN.PRODUCT_ID,
SN.PART_NUMBER_ID,
SN.STEP_ID,
SN.MP_STEP_ID,
MP.KIT_TIMES_ID
);
-- transferToTemporaryStepTable(product, scenario, session);
-- network/TEMPORARY_STEP_QUALIFICATION.sql
INSERT
INTO PBM_STEP_QUALIFICATION_TMP (
PRODUCT_ID,
CYCLE,
END_DATE,
STEP_ID,
PART_NUMBER_ID,
CREATION_DATE,
PROFILE_ID,
KIT_TIMES_ID,
MACROPROCESS_ID
)
SELECT PRODUCT_ID,
CYCLE,
END_DATE,
STEP_ID,
PART_NUMBER_ID,
CREATION_DATE,
PROFILE_ID,
KIT_TIMES_ID,
MACROPROCESS_ID
FROM
(SELECT SQ.PRODUCT_ID,
SQ.CYCLE,
SQ.END_DATE,
SQ.STEP_ID,
SQ.PART_NUMBER_ID,
SQ.CREATION_DATE,
SQ.PROFILE_ID,
K.KIT_TIMES_ID,
K.MACROPROCESS_ID,
ROW_NUMBER() OVER(PARTITION BY SQ.STEP_ID, SQ.PART_NUMBER_ID ORDER BY SQ.CREATION_DATE DESC) SEQ
FROM PBM_ACT_STEP_QUALIFICATION_TMP SQ
LEFT JOIN PBM_KIT_TIMES K
ON K.KIT_TIMES_ID = SQ.KIT_TIMES_ID
AND K.SCENARIO_ID = :SID
AND K.LOGICALLY_DELETED = 'N'
WHERE SQ.PRODUCT_ID = :PID
) WHERE SEQ = 1;
-- preventNullCycles(product, session);
-- network/PREVENT_NULL_CYCLES.sql
UPDATE PBM_STEP_QUALIFICATION_TMP Q
SET
(
Q.KIT_TIMES_ID,
Q.MACROPROCESS_ID
)
=
(
SELECT
MP.KIT_TIMES_ID,
MP.MACROPROCESS_ID
FROM PBM_STEP_QUALIFICATION_TMP SQ
INNER JOIN PBM_CONS_KIT_TIMES_TMP MP
ON MP.PART_NUMBER_ID = SQ.PART_NUMBER_ID
WHERE SQ.STEP_ID = Q.STEP_ID
AND SQ.PART_NUMBER_ID = Q.PART_NUMBER_ID
AND NVL(SQ.KIT_TIMES_ID,0) = 0
AND SQ.PRODUCT_ID = :PID
)
WHERE NVL(Q.KIT_TIMES_ID,0) = 0
AND Q.PRODUCT_ID = :PID;
-- consolidateCycles(product, session);
-- network/CONSOLIDATE_CYCLES.sql
INSERT INTO PBM_STEP_CYCLES_TMP (
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
END_DATE,
CYCLE
)
SELECT
SQ.PRODUCT_ID,
SQ.PART_NUMBER_ID,
SQ.STEP_ID,
SQ.MP_STEP_ID,
SQ.END_DATE,
NVL(SQ.CYCLE,KC.LEADTIME)
FROM PBM_CONS_STEP_VALUE_TMP SQ
LEFT JOIN PBM_KIT_CYCLE_VALUE KC
ON KC.MP_STEP_ID = SQ.MP_STEP_ID
AND KC.KIT_CYCLE_ID = SQ.KIT_CYCLE_ID
WHERE SQ.PRODUCT_ID = :PID;
```
## linkQualificationDAO.autoQualification(product, qualification);
```sql
-- loadActiveLinkQualificationToTemporaryTable(product);
-- network/ACTIVE_LINK_QUALIFICATION.sql
INSERT
INTO PBM_ACT_LINK_QUALIFICATION_TMP (
LAG,
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
PROFILE_ID,
CREATION_DATE
) SELECT
LQ.LAG,
LQ.PRODUCT_ID,
LQ.PART_NUMBER_ID,
LQ.STEP_ID,
LQ.MP_STEP_ID,
LQ.NEXT_STEP_ID,
LQ.MP_NEXT_STEP_ID,
LQ.KIT_TIMES_ID,
Q.PROFILE_ID,
LQ.CREATION_DATE
FROM PBM_LINK_QUALIFICATION LQ
JOIN PBM_PART_NUMBER P
ON P.PART_NUMBER_ID = LQ.PART_NUMBER_ID
AND P.LOGICALLY_DELETED = 'N'
AND P.PRODUCT_ID = LQ.PRODUCT_ID
JOIN PBM_QUALIFICATION Q
ON Q.QUALIFICATION_ID = LQ.QUALIFICATION_ID
AND Q.ACTIVE = 'Y'
WHERE LQ.PRODUCT_ID = :PID;
-- loadActiveNonRecLinkQualificationToTemporaryTable(product);
-- network/ACTIVE_NON_REC_LINK_QUALIFICATION.sql
INSERT
INTO PBM_ACT_LINK_QUALIFICATION_TMP (
LAG,
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
PROFILE_ID,
CREATION_DATE
) SELECT
LQ.LAG,
P.PRODUCT_ID,
P.PART_NUMBER_ID,
LQ.STEP_ID,
LQ.MP_STEP_ID,
LQ.NEXT_STEP_ID,
LQ.MP_NEXT_STEP_ID,
LQ.KIT_TIMES_ID,
Q.PROFILE_ID,
LQ.CREATION_DATE
FROM PBM_NON_REC_LINK_QUALIFICATION LQ
JOIN PBM_PART_NUMBER_TMP P
ON P.PART_NUMBER_UID = LQ.PART_NUMBER_UID
JOIN PBM_QUALIFICATION Q
ON Q.QUALIFICATION_ID = LQ.QUALIFICATION_ID
AND Q.ACTIVE = 'Y'
AND Q.SCENARIO_ID = :SID
WHERE P.PRODUCT_ID = :PID;
---------
DELETE
FROM PBM_ACT_LINK_QUALIFICATION_TMP ALQ
WHERE NOT EXISTS
( SELECT 1 FROM PBM_REL_MP_STEP MP WHERE MP.MP_STEP_ID = ALQ.MP_STEP_ID AND ALQ.PROFILE_ID <> 0
) AND ALQ.PROFILE_ID IS NULL;
DELETE
FROM PBM_ACT_LINK_QUALIFICATION_TMP ALQ
WHERE NOT EXISTS
( SELECT 1 FROM PBM_REL_MP_STEP MP WHERE MP.MP_STEP_ID = ALQ.MP_NEXT_STEP_ID AND ALQ.PROFILE_ID <> 0
) AND ALQ.PROFILE_ID IS NULL;
---------
-- linkQualification(product, qualification, session);
-- linkInnerQualification(product, qualification, session);
-- network/INNER_LINK_QUALIFICATION.sql
INSERT
INTO PBM_ACT_LINK_QUALIFICATION_TMP (
PRODUCT_ID,
QUALIFICATION_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
IS_NEW,
CREATION_DATE
)
SELECT
PRODUCT_ID,
:QID,
NEXT_PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
IS_NEW,
SYSDATE
FROM (
SELECT
LN.PRODUCT_ID,
LN.NEXT_PART_NUMBER_ID,
LN.STEP_ID,
LN.MP_STEP_ID,
LN.NEXT_STEP_ID,
LN.MP_NEXT_STEP_ID,
MP.KIT_TIMES_ID,
'Y' AS IS_NEW
FROM PBM_LINK_NETWORK_TMP LN
INNER JOIN PBM_REL_MP_STEP MS
ON MS.MP_STEP_ID = LN.MP_NEXT_STEP_ID
-- INNER JOIN PBM_CONS_KIT_TIMES_TMP MP
-- Alterei esse trecho para teste
INNER JOIN (SELECT MP.*, PN.PRODUCT_ID FROM PBM_REL_PART_NUMBER_MP MP
INNER JOIN PBM_PART_NUMBER PN ON MP.PART_NUMBER_ID = PN.PART_NUMBER_ID) MP
ON MP.PART_NUMBER_ID = LN.NEXT_PART_NUMBER_ID
AND MP.PRODUCT_ID = LN.PRODUCT_ID
LEFT JOIN PBM_ACT_LINK_QUALIFICATION_TMP LQ
ON LQ.STEP_ID = LN.STEP_ID
AND LQ.NEXT_STEP_ID = LN.NEXT_STEP_ID
AND LQ.PART_NUMBER_ID = LN.NEXT_PART_NUMBER_ID
AND LQ.PRODUCT_ID = LN.PRODUCT_ID
WHERE LN.PRODUCT_ID = :PID
AND MS.CONNECTOR <> 'Y'
AND NVL(LQ.KIT_TIMES_ID,0) <> DECODE(LQ.PROFILE_ID,NULL,MP.KIT_TIMES_ID,NULL)
GROUP BY LN.PRODUCT_ID,
LN.NEXT_PART_NUMBER_ID, LN.STEP_ID,
LN.MP_STEP_ID, LN.NEXT_STEP_ID,
LN.MP_NEXT_STEP_ID, MP.KIT_TIMES_ID
);
-- linkOuterQualification(product, qualification, session);
-- network/OUTER_LINK_QUALIFICATION.sql
INSERT
INTO PBM_ACT_LINK_QUALIFICATION_TMP (
PRODUCT_ID,
QUALIFICATION_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
IS_NEW,
CREATION_DATE
)
SELECT
PRODUCT_ID,
:QID,
NEXT_PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
IS_NEW,
SYSDATE
FROM (
SELECT
LN.PRODUCT_ID,
LN.NEXT_PART_NUMBER_ID,
LN.STEP_ID,
LN.MP_STEP_ID,
LN.NEXT_STEP_ID,
LN.MP_NEXT_STEP_ID,
MP.KIT_TIMES_ID,
'Y' AS IS_NEW
FROM PBM_LINK_NETWORK_TMP LN
INNER JOIN PBM_REL_MP_STEP MS
ON MS.MP_STEP_ID = LN.MP_NEXT_STEP_ID
-- INNER JOIN PBM_CONS_KIT_TIMES_TMP MP
-- Alterei esse trecho para teste
INNER JOIN (SELECT MP.*, PN.PRODUCT_ID FROM PBM_REL_PART_NUMBER_MP MP
INNER JOIN PBM_PART_NUMBER PN ON MP.PART_NUMBER_ID = PN.PART_NUMBER_ID) MP
ON MP.PART_NUMBER_ID = LN.PART_NUMBER_ID
AND MP.PRODUCT_ID = LN.PRODUCT_ID
LEFT JOIN PBM_ACT_LINK_QUALIFICATION_TMP LQ
ON LQ.STEP_ID = LN.STEP_ID
AND LQ.NEXT_STEP_ID = LN.NEXT_STEP_ID
AND LQ.PART_NUMBER_ID = LN.NEXT_PART_NUMBER_ID
AND LQ.PRODUCT_ID = LN.PRODUCT_ID
WHERE LN.PRODUCT_ID = :PID
AND MS.CONNECTOR = 'Y'
AND NVL(LQ.KIT_TIMES_ID,0) <> DECODE(LQ.PROFILE_ID,NULL,MP.KIT_TIMES_ID,NULL)
GROUP BY LN.PRODUCT_ID,
LN.NEXT_PART_NUMBER_ID,
LN.STEP_ID,
LN.MP_STEP_ID,
LN.NEXT_STEP_ID,
LN.MP_NEXT_STEP_ID,
MP.KIT_TIMES_ID
);
-- consolidateActiveLinkQualificationToTemporaryTable(product, session);
-- consolidateActiveLinkUserQualificationToTemporaryTable(product, session);
-- network/CONSOLIDATE_ACTIVE_USER_LINK_QUALIFICATION.sql
INSERT
INTO PBM_LINK_QUALIFICATION_TMP (
LAG,
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
PROFILE_ID
)
SELECT
LAG,
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
PROFILE_ID
FROM (
SELECT
LAG,
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID,
PROFILE_ID,
ROW_NUMBER() OVER(PARTITION BY PART_NUMBER_ID, STEP_ID,
NEXT_STEP_ID ORDER BY CREATION_DATE DESC) SEQ
FROM
PBM_ACT_LINK_QUALIFICATION_TMP
WHERE
NVL(PROFILE_ID,0) <> 0
AND PRODUCT_ID = :PID
) WHERE SEQ = 1;
-- consolidateActiveLinkAutoQualificationToTemporaryTable(product, session);
-- network/CONSOLIDATE_ACTIVE_AUTO_LINK_QUALIFICATION.sql
INSERT
INTO PBM_LINK_QUALIFICATION_TMP (
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID
)
SELECT
PRODUCT_ID,
PART_NUMBER_ID,
STEP_ID,
MP_STEP_ID,
NEXT_STEP_ID,
MP_NEXT_STEP_ID,
KIT_TIMES_ID
FROM (
SELECT
A.PRODUCT_ID,
A.PART_NUMBER_ID,
A.STEP_ID,
A.MP_STEP_ID,
A.NEXT_STEP_ID,
A.MP_NEXT_STEP_ID,
A.KIT_TIMES_ID,
ROW_NUMBER() OVER(PARTITION BY A.PART_NUMBER_ID, A.STEP_ID,
A.NEXT_STEP_ID, A.MP_STEP_ID, A.MP_NEXT_STEP_ID ORDER BY
A.CREATION_DATE DESC) SEQ
FROM
PBM_ACT_LINK_QUALIFICATION_TMP A
WHERE
NVL(PROFILE_ID,0) = 0
AND A.PRODUCT_ID = :PID
AND NOT EXISTS
(
SELECT
C.PART_NUMBER_ID
FROM
PBM_LINK_QUALIFICATION_TMP C
WHERE
C.PART_NUMBER_ID = A.PART_NUMBER_ID
AND C.STEP_ID = A.STEP_ID
AND C.NEXT_STEP_ID = A.NEXT_STEP_ID
AND C.PRODUCT_ID = A.PRODUCT_ID
AND C.PRODUCT_ID = :PID
)
) WHERE SEQ = 1;
-- consolidateLags(product, session);
-- consolidateUserLagsTemp(product, session);
-- network/CONSOLIDATE_USER_LAGS_TMP.sql
INSERT
INTO PBM_CONS_LINK_VALUE_TMP (
PRODUCT_ID,
PART_NUMBER_ID,
NEXT_PART_NUMBER_ID,
STEP_ID,
NEXT_STEP_ID,
MP_STEP_ID,
MP_NEXT_STEP_ID,
KIT_LAG_ID,
LAG
)
SELECT
LN.PRODUCT_ID,
LN.PART_NUMBER_ID,
LN.NEXT_PART_NUMBER_ID,
LN.STEP_ID,
LN.NEXT_STEP_ID,
LN.MP_STEP_ID,
LN.MP_NEXT_STEP_ID,
KT.KIT_LAG_ID,
LQ.LAG
FROM PBM_LINK_NETWORK_TMP LN
INNER JOIN PBM_LINK_QUALIFICATION_TMP LQ
ON LQ.STEP_ID = LN.STEP_ID
AND LQ.NEXT_STEP_ID = LN.NEXT_STEP_ID
AND LQ.PART_NUMBER_ID = LN.NEXT_PART_NUMBER_ID
AND LQ.PRODUCT_ID = LN.PRODUCT_ID
AND NVL(LQ.PROFILE_ID,0) <> 0
LEFT JOIN PBM_KIT_TIMES KT
ON KT.KIT_TIMES_ID = LQ.KIT_TIMES_ID
AND KT.LOGICALLY_DELETED = 'N'
AND KT.SCENARIO_ID = :SID
WHERE LN.PRODUCT_ID = :PID;
-- consolidateAutoLagsTemp(product, session);
-- network/CONSOLIDATE_AUTO_LAGS_TMP.sql
-- Query ofensora SQL_ID 296qrrncghufz
INSERT
INTO PBM_CONS_LINK_VALUE_TMP
(
PRODUCT_ID,
PART_NUMBER_ID,
NEXT_PART_NUMBER_ID,
STEP_ID,
NEXT_STEP_ID,
MP_STEP_ID,
MP_NEXT_STEP_ID,
KIT_LAG_ID,
LAG
)
SELECT LNT.PRODUCT_ID,
LNT.PART_NUMBER_ID,
LNT.NEXT_PART_NUMBER_ID,
LNT.STEP_ID,
LNT.NEXT_STEP_ID,
LNT.MP_STEP_ID,
LNT.MP_NEXT_STEP_ID,
KT.KIT_LAG_ID,
LQ.LAG
FROM PBM_LINK_NETWORK_TMP LNT
INNER JOIN PBM_LINK_QUALIFICATION_TMP LQ
ON LQ.STEP_ID = LNT.STEP_ID
AND LQ.MP_STEP_ID = LNT.MP_STEP_ID
AND LQ.NEXT_STEP_ID = LNT.NEXT_STEP_ID
AND LQ.MP_NEXT_STEP_ID = LNT.MP_NEXT_STEP_ID
AND LQ.PART_NUMBER_ID = LNT.NEXT_PART_NUMBER_ID
AND LQ.PRODUCT_ID = LNT.PRODUCT_ID
AND NVL(LQ.PROFILE_ID,0) = 0
LEFT JOIN PBM_KIT_TIMES KT
ON KT.KIT_TIMES_ID = LQ.KIT_TIMES_ID
AND KT.LOGICALLY_DELETED = 'N'
AND KT.SCENARIO_ID = :SID
WHERE LNT.PRODUCT_ID = :PID
-- network/CONSOLIDATE_LAGS.sql
INSERT INTO PBM_LINK_LAGS_TMP (
PRODUCT_ID,
PART_NUMBER_ID,
NEXT_PART_NUMBER_ID,
STEP_ID, NEXT_STEP_ID,
MP_STEP_ID,
MP_NEXT_STEP_ID,
LAG
)
SELECT
LQ.PRODUCT_ID,
LQ.PART_NUMBER_ID,
LQ.NEXT_PART_NUMBER_ID,
LQ.STEP_ID,
LQ.NEXT_STEP_ID,
LQ.MP_STEP_ID,
LQ.MP_NEXT_STEP_ID,
NVL(LQ.LAG,KL.LAG)
FROM PBM_CONS_LINK_VALUE_TMP LQ
LEFT JOIN PBM_KIT_LAG_VALUE KL
ON KL.MP_STEP_SOURCE_ID = LQ.MP_STEP_ID
AND KL.MP_STEP_DESTINY_ID = LQ.MP_NEXT_STEP_ID
AND KL.KIT_LAG_ID = LQ.KIT_LAG_ID
WHERE LQ.PRODUCT_ID = :PID;
```
## stepNetwork.updateDates(product);
### createTemporaryDateTables(session, productId, scenarioId);
#### insertAplDates(session, productId, scenarioId);
```sql
-- network/INSERT_ASSEMBLY_DATE.sql
INSERT
INTO PBM_APL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE,
COD_TIPO_DAT_APL
)
SELECT SN.PRODUCT_ID,
SN.STEP_ID,
PN.PART_NUMBER_ID,
P.NECESSITY_DATE,
'Mandatory Finish'
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_PART_NUMBER PN
ON PN.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND PN.LOGICALLY_DELETED = 'N'
AND PN.PRODUCT_ID = SN.PRODUCT_ID
INNER JOIN PBM_PRODUCT P
ON P.PRODUCT_ID = SN.PRODUCT_ID
INNER JOIN
(SELECT AP.PART_NUMBER
FROM PBM_ASSEMBLY_POSITION AP
WHERE AP.PRODUCT_ID = :PID
MINUS
SELECT AP.PART_NUMBER
FROM PBM_REL_ASSEMBLY_POSITION RA
INNER JOIN PBM_ASSEMBLY_POSITION AP
ON AP.ASSEMBLY_POSITION_ID = RA.SOURCE_POSITION
AND AP.PRODUCT_ID = :PID
) A
ON A.PART_NUMBER = PN.PART_NUMBER
WHERE SN.PRODUCT_ID = :PID;
-- network/INSERT_PACKAGE_DATE.sql
INSERT
INTO PBM_APL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE,
COD_TIPO_DAT_APL
)
SELECT SN.PRODUCT_ID,
SN.STEP_ID,
PN.PART_NUMBER_ID,
PK.NECESSITY_DATE,
'Mandatory Finish'
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_PART_NUMBER PN
ON PN.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND PN.LOGICALLY_DELETED = 'N'
AND PN.PRODUCT_ID = SN.PRODUCT_ID
INNER JOIN PBM_PACKAGE PK
ON PK.PART_NUMBER = PN.PART_NUMBER
AND PK.PRODUCT_ID = PN.PRODUCT_ID
AND PK.NECESSITY_DATE IS NOT NULL
WHERE SN.PRODUCT_ID = :PID;
-- network/INSERT_QUALIFIED_DATES.sql
INSERT
INTO PBM_APL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE,
COD_TIPO_DAT_APL
)
SELECT SN.PRODUCT_ID,
SN.STEP_ID,
SN.PART_NUMBER_ID,
SQ.END_DATE,
'Finish On or After'
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP_QUALIFICATION_TMP SQ
ON SQ.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND SQ.STEP_ID = SN.STEP_ID
AND SQ.PRODUCT_ID = SN.PRODUCT_ID
AND SQ.END_DATE IS NOT NULL
LEFT OUTER JOIN PBM_APL_DATES_TMP DT
ON DT.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND DT.STEP_ID = SN.STEP_ID
AND DT.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND DT.EFFECTIVE_DATE IS NULL;
-- network/INSERT_REC_PLANNED_DATES.sql
INSERT
INTO PBM_APL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE,
COD_TIPO_DAT_APL
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
RD.PLANNED_DATE,
'Finish On or After'
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.LOGICALLY_DELETED = 'N'
AND S.RECURRENT = 'Y'
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_RECURRING_DATE RD
ON RD.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND RD.EVENT_ID = S.FINAL_PROPOSAL_DATE_CODE
AND RD.PLANNED_DATE IS NOT NULL
AND RD.PRODUCT_ID = SN.PRODUCT_ID
LEFT OUTER JOIN PBM_APL_DATES_TMP DT
ON DT.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND DT.STEP_ID = SN.STEP_ID
AND DT.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND DT.EFFECTIVE_DATE IS NULL;
-- network/INSERT_DYNAMIC_PLANNED_DATES.sql
INSERT
INTO PBM_APL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE,
COD_TIPO_DAT_APL
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
NR.PLANNED_DATE,
'Finish On or After'
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.LOGICALLY_DELETED = 'N'
AND S.RECURRENT = 'N'
AND S.STEP_TYPE_ID = 3
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_NON_RECURRING_DATE NR
ON NR.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND NR.EVENT_ID = S.FINAL_PROPOSAL_DATE_CODE
AND NVL(NR.SHEET_NUM,'_NULO') = NVL(S.SHEET_NUM,'_NULO')
AND NVL(NR.REPRES_TYPE,'_NULO') = NVL(S.REPRES_TYPE,'_NULO')
AND NR.PLANNED_DATE IS NOT NULL
AND NR.PRODUCT_ID = SN.PRODUCT_ID
LEFT OUTER JOIN PBM_APL_DATES_TMP DT
ON DT.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND DT.STEP_ID = SN.STEP_ID
AND DT.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND DT.EFFECTIVE_DATE IS NULL;
-- network/INSERT_NON_REC_PLANNED_DATES.sql
INSERT
INTO PBM_APL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE,
COD_TIPO_DAT_APL
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
NR.PLANNED_DATE,
'Finish On or After'
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.LOGICALLY_DELETED = 'N'
AND S.RECURRENT = 'N'
AND S.STEP_TYPE_ID <> 3
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_NON_RECURRING_DATE NR
ON NR.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND NR.EVENT_ID = S.FINAL_PROPOSAL_DATE_CODE
AND NR.PLANNED_DATE IS NOT NULL
AND NR.PRODUCT_ID = SN.PRODUCT_ID
LEFT OUTER JOIN PBM_APL_DATES_TMP DT
ON DT.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND DT.STEP_ID = SN.STEP_ID
AND DT.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND DT.EFFECTIVE_DATE IS NULL;
```
#### insertFinalDates(session, productId, scenarioId);
```sql
-- network/INSERT_REC_ACTUAL_END_DATES.sql
INSERT
INTO PBM_FINAL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
RD.EFFECTIVE_DATE
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.RECURRENT = 'Y'
AND S.LOGICALLY_DELETED = 'N'
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_RECURRING_DATE RD
ON RD.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND RD.EVENT_ID = S.ACTUAL_END_DATE_CODE
AND RD.EFFECTIVE_DATE IS NOT NULL
AND RD.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID;
-- network/INSERT_DYNAMIC_ACTUAL_END_DATES.sql
INSERT
INTO PBM_FINAL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
NR.EFFECTIVE_DATE
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.RECURRENT = 'N'
AND S.STEP_TYPE_ID = 3
AND S.LOGICALLY_DELETED = 'N'
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_NON_RECURRING_DATE NR
ON NR.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND NR.EVENT_ID = S.ACTUAL_END_DATE_CODE
AND NVL(NR.SHEET_NUM,'_NULO') = NVL(S.SHEET_NUM,'_NULO')
AND NVL(NR.REPRES_TYPE,'_NULO') = NVL(S.REPRES_TYPE,'_NULO')
AND NR.EFFECTIVE_DATE IS NOT NULL
AND NR.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID;
-- network/INSERT_NON_REC_ACTUAL_END_DATES.sql
INSERT
INTO PBM_FINAL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
NR.EFFECTIVE_DATE
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.RECURRENT = 'N'
AND S.STEP_TYPE_ID <> 3
AND S.LOGICALLY_DELETED = 'N'
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_NON_RECURRING_DATE NR
ON NR.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND NR.EVENT_ID = S.ACTUAL_END_DATE_CODE
AND NR.EFFECTIVE_DATE IS NOT NULL
AND NR.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID;
-- network/INSERT_REC_ACTUAL_START_DATES.sql
INSERT
INTO PBM_FINAL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
RD.EFFECTIVE_DATE + SN.CYCLE
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.LOGICALLY_DELETED = 'N'
AND S.RECURRENT = 'Y'
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_RECURRING_DATE RD
ON RD.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND RD.EVENT_ID = S.ACTUAL_START_DATE_CODE
AND RD.EFFECTIVE_DATE IS NOT NULL
AND RD.PRODUCT_ID = SN.PRODUCT_ID
LEFT OUTER JOIN PBM_FINAL_DATES_TMP DT
ON DT.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND DT.STEP_ID = SN.STEP_ID
AND DT.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND DT.EFFECTIVE_DATE IS NULL;
-- network/INSERT_DYNAMIC_ACTUAL_START_DATES.sql
INSERT
INTO PBM_FINAL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
NR.EFFECTIVE_DATE + SN.CYCLE
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.RECURRENT = 'N'
AND S.LOGICALLY_DELETED = 'N'
AND S.STEP_TYPE_ID = 3
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_NON_RECURRING_DATE NR
ON NR.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND NR.EVENT_ID = S.ACTUAL_START_DATE_CODE
AND NVL(NR.SHEET_NUM,'_NULO') = NVL(S.SHEET_NUM,'_NULO')
AND NVL(NR.REPRES_TYPE,'_NULO') = NVL(S.REPRES_TYPE,'_NULO')
AND NR.EFFECTIVE_DATE IS NOT NULL
AND NR.PRODUCT_ID = SN.PRODUCT_ID
LEFT OUTER JOIN PBM_FINAL_DATES_TMP DT
ON DT.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND DT.STEP_ID = SN.STEP_ID
AND DT.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND DT.EFFECTIVE_DATE IS NULL;
-- network/INSERT_NON_REC_ACTUAL_START_DATES.sql
INSERT
INTO PBM_FINAL_DATES_TMP
(
PRODUCT_ID,
STEP_ID,
PART_NUMBER_ID,
EFFECTIVE_DATE
)
SELECT SN.PRODUCT_ID,
S.STEP_ID,
SN.PART_NUMBER_ID,
NR.EFFECTIVE_DATE + SN.CYCLE
FROM PBM_STEP_CYCLES_TMP SN
INNER JOIN PBM_STEP S
ON SN.STEP_ID = S.STEP_ID
AND S.RECURRENT = 'N'
AND S.LOGICALLY_DELETED = 'N'
AND S.STEP_TYPE_ID <> 3
AND S.SCENARIO_ID = :SID
INNER JOIN PBM_PRODUCT_NON_RECURRING_DATE NR
ON NR.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND NR.EVENT_ID = S.ACTUAL_START_DATE_CODE
AND NR.EFFECTIVE_DATE IS NOT NULL
AND NR.PRODUCT_ID = SN.PRODUCT_ID
LEFT OUTER JOIN PBM_FINAL_DATES_TMP DT
ON DT.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND DT.STEP_ID = SN.STEP_ID
AND DT.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND DT.EFFECTIVE_DATE IS NULL;
```
### updateDatesOnStepNetwork(session, productId);
```sql
-- network/UPDATE_APL_DATES.sql
UPDATE PBM_STEP_NETWORK_TMP SN
SET
(
SN.COD_TIPO_DAT_APL,
SN.APL_DATE
)
=
(SELECT T.COD_TIPO_DAT_APL,
T.EFFECTIVE_DATE
FROM
(SELECT A.COD_TIPO_DAT_APL,
A.EFFECTIVE_DATE,
ROW_NUMBER() OVER(PARTITION BY A.STEP_ID, A.PART_NUMBER_ID ORDER BY A.EFFECTIVE_DATE ASC) SEQ
FROM PBM_APL_DATES_TMP A
WHERE A.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND A.STEP_ID = SN.STEP_ID
AND A.PRODUCT_ID = SN.PRODUCT_ID
) T
WHERE T.SEQ = 1
)
WHERE SN.PRODUCT_ID = :PID
AND EXISTS
(SELECT *
FROM PBM_APL_DATES_TMP A
WHERE A.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND A.STEP_ID = SN.STEP_ID
AND A.PRODUCT_ID = SN.PRODUCT_ID);
-- network/UPDATE_FINAL_DATES.sql
UPDATE PBM_STEP_NETWORK_TMP SN
SET
(
SN.FINAL_DATE
)
=
(SELECT T.EFFECTIVE_DATE
FROM
(SELECT F.EFFECTIVE_DATE,
ROW_NUMBER() OVER(PARTITION BY F.STEP_ID, F.PART_NUMBER_ID ORDER BY F.EFFECTIVE_DATE ASC) SEQ
FROM PBM_FINAL_DATES_TMP F
WHERE F.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND F.STEP_ID = SN.STEP_ID
AND F.PRODUCT_ID = SN.PRODUCT_ID
) T
WHERE T.SEQ = 1
)
WHERE SN.PRODUCT_ID = :PID
AND EXISTS
(SELECT *
FROM PBM_FINAL_DATES_TMP F
WHERE F.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND F.STEP_ID = SN.STEP_ID
AND F.PRODUCT_ID = SN.PRODUCT_ID);
```
## stepNetworkDAO.removeNonRecurringTasksAndCommit(product);
### updateOnStepNetwork (session, product);
```sql
-- insertPartNumberEventTemporary(session, product);
-- network/INSERT_PART_NUMBER_EVENTS.sql
INSERT
INTO PBM_PART_NUMBER_EVENT_TMP
(
PART_NUMBER_ID,
PART_NUMBER_UID,
EVENT_ID,
STEP_ID,
PRODUCT_TYPE,
SERIAL_NUMBER,
PRODUCT_ID
)
SELECT PN.PART_NUMBER_ID,
PN.PART_NUMBER_UID,
S.EVENT_ID,
S.STEP_ID,
PN.PRODUCT_TYPE,
PN.SERIAL_NUMBER,
PN.PRODUCT_ID
FROM PBM_STEP_NETWORK_TMP STEP_N
INNER JOIN PBM_PART_NUMBER_TMP PN
ON PN.PART_NUMBER_ID = STEP_N.PART_NUMBER_ID
AND PN.PRODUCT_ID = STEP_N.PRODUCT_ID
INNER JOIN
(SELECT STEP_ID,
ACTUAL_END_DATE_CODE AS EVENT_ID
FROM PBM_STEP
WHERE LOGICALLY_DELETED = 'N'
AND RECURRENT = 'N'
AND IS_TRIGGER = 'Y'
AND SCENARIO_ID = :SID
AND NVL(ACTUAL_END_DATE_CODE,0) <> 0
) S
ON S.STEP_ID = STEP_N.STEP_ID
WHERE STEP_N.PRODUCT_ID = :PID;
-- insertConsolidationPartNumberEventTemporary(session, product);
-- network/INSERT_CONS_PART_NUMBER_EVENTS.sql
INSERT INTO PBM_CONS_PART_NUMBER_EVENT_TMP (
STEP_ID,
PART_NUMBER_ID,
PRODUCT_TYPE,
SERIAL_NUMBER
)
SELECT
PN.STEP_ID,
PN.PART_NUMBER_ID,
NR.PRODUCT_TYPE,
NR.SERIAL_NUMBER
FROM PBM_PART_NUMBER_EVENT_TMP PN
INNER JOIN PBM_STEP_NON_RECURRENT_DATES NR
ON NR.PART_NUMBER_UID = PN.PART_NUMBER_UID
AND NR.EVENT_ID = PN.EVENT_ID
WHERE PN.PRODUCT_ID = :PID;
-- consolidatePartNumberEventTemporary(session, product);
-- network/REMOVE_CONS_PART_NUMBER_EVENTS.sql
DELETE FROM PBM_CONS_PART_NUMBER_EVENT_TMP WHERE PRODUCT_TYPE = :TYPE AND SERIAL_NUMBER = :SERIAL
-- removeTasksByTrigger(session, product);
-- network/REMOVE_TASKS_BY_TRIGGER.sql
MERGE INTO PBM_STEP_NETWORK_TMP S
USING PBM_CONS_PART_NUMBER_EVENT_TMP E
ON (S.PART_NUMBER_ID = E.PART_NUMBER_ID AND S.STEP_ID = E.STEP_ID)
WHEN MATCHED THEN UPDATE SET S.PN_CONNECTED = 'N'
WHERE S.PRODUCT_ID = :PID;
-- removeRemainingNonRecurrent(session, product);
-- network/REMOVE_REMAINING_NON_RECURRENT.sql
-- Query ofensora SQL_ID ahmdz2scz07kc
UPDATE PBM_STEP_NETWORK_TMP T
SET T.PN_CONNECTED = 'N'
WHERE T.PRODUCT_ID = :PID
AND EXISTS
(SELECT *
FROM PBM_STEP_NETWORK_TMP SN
INNER JOIN PBM_STEP S
ON S.STEP_ID = SN.STEP_ID
AND S.LOGICALLY_DELETED = 'N'
AND S.SCENARIO_ID = :SID
AND S.RECURRENT = 'N'
INNER JOIN PBM_STEP_NETWORK_TMP SD
ON SD.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND SD.PRODUCT_ID = SN.PRODUCT_ID
AND SD.PN_CONNECTED = 'N'
WHERE SN.PRODUCT_ID = :PID
AND SN.STEP_NETWORK_ID = T.STEP_NETWORK_ID
);
```
### updateOnLinkNetwork(session, product) até updateNextLinkNetwork(session, product);
```sql
-- updateOnLinkNetwork(session, product)
-- network/UPDATE_ON_LINK_NETWORK.sql
UPDATE PBM_LINK_NETWORK_TMP L
SET (
L.TASK_ID,
L.PN_CONNECTED
) = (
SELECT
S.STEP_NETWORK_ID,
S.PN_CONNECTED
FROM PBM_STEP_NETWORK_TMP S
WHERE S.PART_NUMBER_ID = L.PART_NUMBER_ID
AND S.STEP_ID = L.STEP_ID
)
WHERE L.PRODUCT_ID = :PID;
-- updateNextOnLinkNetwork(session, product);
-- network/UPDATE_NEXT_ON_LINK_NETWORK.sql
UPDATE PBM_LINK_NETWORK_TMP L
SET (
L.NEXT_TASK_ID,
L.NEXT_PN_CONNECTED
) = (
SELECT
S.STEP_NETWORK_ID,
S.PN_CONNECTED
FROM PBM_STEP_NETWORK_TMP S
WHERE S.PART_NUMBER_ID = L.NEXT_PART_NUMBER_ID
AND S.STEP_ID = L.NEXT_STEP_ID
)
WHERE L.PRODUCT_ID = :PID;
-- removeNonRecurringLinks(session, product);
-- network/REMOVE_NON_RECURRING_LINKS.sql
UPDATE PBM_LINK_NETWORK_TMP A
SET A.PN_CONNECTED = 'N',
A.NEXT_PN_CONNECTED = 'N'
WHERE A.PRODUCT_ID = :PID
AND EXISTS
(
SELECT
T.LINK_NETWORK_ID
FROM
(
SELECT
L.LINK_NETWORK_ID
FROM PBM_LINK_NETWORK_TMP L
WHERE L.PRODUCT_ID = :PID
MINUS
SELECT
LN.LINK_NETWORK_ID
FROM PBM_LINK_NETWORK_TMP LN
WHERE LN.PRODUCT_ID = :PID
AND LN.PN_CONNECTED = 'Y'
AND LN.NEXT_PN_CONNECTED = 'Y'
CONNECT BY PRIOR LN.TASK_ID = LN.NEXT_TASK_ID
START WITH LN.NEXT_TASK_ID IN
(
SELECT
SN.STEP_NETWORK_ID
FROM PBM_STEP_NETWORK_TMP SN
INNER JOIN PBM_PART_NUMBER_TMP PN
ON PN.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND PN.PRODUCT_ID = SN.PRODUCT_ID
INNER JOIN
(
SELECT
A.PART_NUMBER
FROM PBM_ASSEMBLY_POSITION A
WHERE A.PRODUCT_ID = :PID
MINUS
SELECT
A.PART_NUMBER
FROM PBM_REL_ASSEMBLY_POSITION RAP
INNER JOIN PBM_ASSEMBLY_POSITION A
ON A.ASSEMBLY_POSITION_ID = RAP.SOURCE_POSITION
WHERE A.PRODUCT_ID = :PID
) U
ON U.PART_NUMBER = PN.PART_NUMBER
WHERE SN.PRODUCT_ID= :PID
)
) T
WHERE T.LINK_NETWORK_ID = A.LINK_NETWORK_ID
);
-- removeRemainingTasks(session, product);
-- network/REMOVE_REMAINING_TASKS.sql
UPDATE
PBM_STEP_NETWORK_TMP S
SET S.PN_CONNECTED = 'N'
WHERE S.PRODUCT_ID = :PID
AND EXISTS
(
SELECT
T.STEP_NETWORK_ID
FROM
(
SELECT
STEP_NETWORK_ID
FROM PBM_STEP_NETWORK_TMP
WHERE PRODUCT_ID = :PID
AND PN_CONNECTED = 'Y'
MINUS
(
SELECT
TASK_ID
FROM PBM_LINK_NETWORK_TMP
WHERE PRODUCT_ID = :PID
AND PN_CONNECTED = 'Y'
AND NEXT_PN_CONNECTED = 'Y'
UNION
SELECT
NEXT_TASK_ID
FROM PBM_LINK_NETWORK_TMP
WHERE PRODUCT_ID = :PID
AND PN_CONNECTED = 'Y'
AND NEXT_PN_CONNECTED = 'Y'
)
) T
WHERE T.STEP_NETWORK_ID = S.STEP_NETWORK_ID
);
-- updateStepNetwork(session, product);
-- network/UPDATE_STEP_NETWORK.sql
DELETE FROM PBM_STEP_NETWORK_TMP WHERE PN_CONNECTED = 'N' AND PRODUCT_ID = :PID;
-- updateLinkNetwork(session, product);
-- network/UPDATE_LINK_NETWORK.sql
DELETE FROM PBM_LINK_NETWORK_TMP WHERE PN_CONNECTED = 'N' AND PRODUCT_ID = :PID;
-- updateNextLinkNetwork(session, product);
-- network/UPDATE_NEXT_LINK_NETWORK.sql
DELETE FROM PBM_LINK_NETWORK_TMP WHERE NEXT_PN_CONNECTED = 'N' AND PRODUCT_ID = :PID;
```
## stepNetwork.applyStepNetwork(product);
```sql
-- network/APPLY_STEP_NETWORK.sql
-- Query ofensora - SQL_ID 3hzxx2x4gnagb
INSERT
INTO PBM_STEP_NETWORK
(
STEP_NETWORK_ID,
CYCLE,
COD_TIPO_DAT_APL,
APL_DATE,
FINAL_DATE,
PART_NUMBER_ID,
PACKAGE_ID,
STEP_ID,
PN_CONNECTED,
PRODUCT_ID
)
SELECT SN.STEP_NETWORK_ID,
SC.CYCLE,
SN.COD_TIPO_DAT_APL,
SN.APL_DATE,
SN.FINAL_DATE,
SN.PART_NUMBER_ID,
SN.PACKAGE_ID,
SN.STEP_ID,
SN.PN_CONNECTED,
SN.PRODUCT_ID
FROM PBM_STEP_NETWORK_TMP SN
JOIN PBM_STEP_CYCLES_TMP SC
ON SC.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND SC.STEP_ID = SN.STEP_ID
AND SC.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID;
```
## linkNetwork.applyLinkNetwork(product);
```sql
-- network/APPLY_LINK_NETWORK.sql
INSERT
INTO PBM_LINK_NETWORK
(
LINK_NETWORK_ID,
LAG,
NEXT_PART_NUMBER_ID,
NEXT_STEP_ID,
PACKAGE_ID,
PART_NUMBER_ID,
STEP_ID,
NEXT_PN_CONNECTED,
PN_CONNECTED,
NEXT_TASK_ID,
TASK_ID,
PRODUCT_ID
)
SELECT LN.LINK_NETWORK_ID,
LLT.LAG,
LN.NEXT_PART_NUMBER_ID,
LN.NEXT_STEP_ID,
LN.PACKAGE_ID,
LN.PART_NUMBER_ID,
LN.STEP_ID,
LN.NEXT_PN_CONNECTED,
LN.PN_CONNECTED,
LN.NEXT_TASK_ID,
LN.TASK_ID,
LN.PRODUCT_ID
FROM PBM_LINK_NETWORK_TMP LN
JOIN PBM_LINK_LAGS_TMP LLT
ON LLT.PART_NUMBER_ID = LN.PART_NUMBER_ID
AND LLT.NEXT_PART_NUMBER_ID = LN.NEXT_PART_NUMBER_ID
AND LLT.MP_STEP_ID = LN.MP_STEP_ID
AND LLT.MP_NEXT_STEP_ID = LN.MP_NEXT_STEP_ID
AND LLT.STEP_ID = LN.STEP_ID
AND LLT.NEXT_STEP_ID = LN.NEXT_STEP_ID
AND LLT.PRODUCT_ID = LN.PRODUCT_ID
WHERE LN.PRODUCT_ID = :PID;
```
## stepNetwork.updateNetwork(product);
```sql
-- setAssemblyPositionCycle(productId);
UPDATE PBM_STEP_NETWORK S
SET S.CYCLE =
(SELECT AP.LEADTIME
FROM PBM_STEP_NETWORK SN
INNER JOIN PBM_PART_NUMBER PN
ON PN.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND PN.LOGICALLY_DELETED = 'N'
AND PN.PRODUCT_ID = SN.PRODUCT_ID
INNER JOIN PBM_ASSEMBLY_POSITION AP
ON AP.PART_NUMBER = PN.PART_NUMBER
AND AP.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND SN.STEP_NETWORK_ID = S.STEP_NETWORK_ID )
WHERE S.PRODUCT_ID = :PID
AND EXISTS
(SELECT *
FROM PBM_STEP_NETWORK SN
INNER JOIN PBM_PART_NUMBER PN
ON PN.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND PN.LOGICALLY_DELETED = 'N'
AND PN.PRODUCT_ID = SN.PRODUCT_ID
INNER JOIN PBM_ASSEMBLY_POSITION AP
ON AP.PART_NUMBER = PN.PART_NUMBER
AND AP.PRODUCT_ID = SN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND SN.STEP_NETWORK_ID = S.STEP_NETWORK_ID );
-- setAssemblyPositionLag(productId);
UPDATE PBM_LINK_NETWORK A
SET A.LAG =
(SELECT R.LAG
FROM PBM_REL_ASSEMBLY_POSITION R
INNER JOIN
(SELECT LN.LINK_NETWORK_ID,
SA.ASSEMBLY_POSITION_ID AS SOURCE_POSITION,
DA.ASSEMBLY_POSITION_ID AS DESTINY_POSITION
FROM PBM_LINK_NETWORK LN
INNER JOIN PBM_PART_NUMBER PNS
ON PNS.PART_NUMBER_ID = LN.PART_NUMBER_ID
AND PNS.PRODUCT_ID = LN.PRODUCT_ID
AND PNS.LOGICALLY_DELETED = 'N'
INNER JOIN PBM_PART_NUMBER PND
ON PND.PART_NUMBER_ID = LN.NEXT_PART_NUMBER_ID
AND PND.PRODUCT_ID = LN.PRODUCT_ID
AND PND.LOGICALLY_DELETED = 'N'
INNER JOIN PBM_ASSEMBLY_POSITION DA
ON DA.PART_NUMBER = PND.PART_NUMBER
AND DA.PRODUCT_ID = PND.PRODUCT_ID
INNER JOIN PBM_ASSEMBLY_POSITION SA
ON SA.PART_NUMBER = PNS.PART_NUMBER
AND SA.PRODUCT_ID = PNS.PRODUCT_ID
WHERE LN.PRODUCT_ID = :PID
) T ON T.SOURCE_POSITION = R.SOURCE_POSITION
AND T.DESTINY_POSITION = R.DESTINY_POSITION
WHERE A.LINK_NETWORK_ID = T.LINK_NETWORK_ID
)
WHERE A.PRODUCT_ID = :PID
AND EXISTS
(SELECT *
FROM PBM_LINK_NETWORK LN
INNER JOIN PBM_PART_NUMBER PNS
ON PNS.PART_NUMBER_ID = LN.PART_NUMBER_ID
AND PNS.PRODUCT_ID = LN.PRODUCT_ID
AND PNS.LOGICALLY_DELETED = 'N'
INNER JOIN PBM_PART_NUMBER PND
ON PND.PART_NUMBER_ID = LN.NEXT_PART_NUMBER_ID
AND PND.PRODUCT_ID = LN.PRODUCT_ID
AND PND.LOGICALLY_DELETED = 'N'
INNER JOIN PBM_ASSEMBLY_POSITION DA
ON DA.PART_NUMBER = PND.PART_NUMBER
AND DA.PRODUCT_ID = PND.PRODUCT_ID
INNER JOIN PBM_ASSEMBLY_POSITION SA
ON SA.PART_NUMBER = PNS.PART_NUMBER
AND SA.PRODUCT_ID = PNS.PRODUCT_ID
WHERE LN.PRODUCT_ID = :PID
AND LN.LINK_NETWORK_ID = A.LINK_NETWORK_ID
);
-- setPackageCycle(productId);
UPDATE PBM_STEP_NETWORK S
SET S.CYCLE = 0
WHERE S.PRODUCT_ID = :PID
AND EXISTS
(SELECT *
FROM PBM_STEP_NETWORK SN
INNER JOIN PBM_PART_NUMBER PN
ON PN.PART_NUMBER_ID = SN.PART_NUMBER_ID
AND PN.PRODUCT_ID = SN.PRODUCT_ID
AND PN.LOGICALLY_DELETED = 'N'
INNER JOIN PBM_PACKAGE PK
ON PK.PART_NUMBER = PN.PART_NUMBER
AND PK.PRODUCT_ID = PN.PRODUCT_ID
WHERE SN.PRODUCT_ID = :PID
AND SN.STEP_NETWORK_ID = S.STEP_NETWORK_ID);
```