The following lines contain the word 'select', 'insert', 'update' or 'delete':
/* Step 1 : Mark SRs (for the given p_processing_set_id) as NOT a delete candidate
IF the SR is linked to a CMRO object
*/
update JTF_OBJECT_PURGE_PARAM_TMP
set
purge_status = 'E'
, purge_error_message = 'CSF:CSF_DEBRIEF_PURGE_FAILED'
where
processing_set_id = P_PROCESSING_SET_ID and
object_id in
(
select
lnk.subject_id
from
cs_incident_links lnk
, JTF_OBJECT_PURGE_PARAM_TMP tmp
where
tmp.object_id = lnk.subject_id and
lnk.object_type = 'AHL_UMP_EFF' and
lnk.link_type_id = 6 and
nvl(tmp.purge_status, 'S') <> 'E' and
tmp.processing_set_id = P_PROCESSING_SET_ID
)
and nvl(purge_status, 'S') <> 'E';
/* Step 2: Mark SRs (for the given p_processing_set_id) as NOT a delete candidate
IF the SR is linked to mobile FS tasks that CANNOT be deleted
*/
/*
This is the place where we call the mobile field service task validation API to further
mark the JTF_OBJECT_PURGE_PARAM_TMP table with a status 'E' for all those SRs which have
mobile field service tasks that CANNOT be deleted
*/
csm_sr_purge_pkg.Validate_MobileFSObjects(
P_API_VERSION => P_API_VERSION,
P_INIT_MSG_LIST => P_INIT_MSG_LIST,
P_COMMIT => P_COMMIT,
P_PROCESSING_SET_ID => P_PROCESSING_SET_ID,
P_OBJECT_TYPE => P_OBJECT_TYPE,
X_RETURN_STATUS => l_return_status,
X_MSG_COUNT => l_msg_count,
X_MSG_DATA => l_msg_data);
/* Step 3: Mark SRs (for the given p_processing_set_id) as NOT a delete candidate
IF the SR is linked to FS tasks that are in Closed/Completed/Cancelled status
*/
update JTF_OBJECT_PURGE_PARAM_TMP
set
purge_status = 'E'
, purge_error_message = 'CSF:CSF_DEBRIEF_PURGE_FAILED'
where
processing_set_id = P_PROCESSING_SET_ID and
object_id in
(
select
tmp.object_id
from
jtf_tasks_b jtftk
, jtf_task_statuses_b jtfts
, jtf_task_types_b jttp
, JTF_OBJECT_PURGE_PARAM_TMP tmp
where
tmp.object_id = jtftk.source_object_id and
tmp.object_type = jtftk.source_object_type_code and
jtftk.task_status_id = jtfts.task_status_id and
(nvl(jtfts.closed_flag,'N') <> 'Y' and
nvl(jtfts.completed_flag,'N') <> 'Y' and
nvl(jtfts.cancelled_flag,'N') <> 'Y') and
nvl(tmp.purge_status, 'S') <> 'E' and
jtftk.task_type_id = jttp.task_type_id and
jttp.rule = 'DISPATCH' and
tmp.processing_set_id = P_PROCESSING_SET_ID
)
and nvl(purge_status, 'S') <> 'E';
(( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACTL.SCHED_REQUEST_ID FROM CSF_R_SCHED_REQUESTS
CSACTL , CSF_R_REQUEST_TASKS CSACC , JTF_TASKS_B TSKT ,
JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND
NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID =
CSACC.TASK_ID AND CSACC.SCHED_REQUEST_ID = CSACTL.SCHED_REQUEST_ID )
UNION ALL(SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACTL.PARENT_REQUEST_ID FROM CSF_R_SCHED_REQUESTS
CSACTL , CSF_R_REQUEST_TASKS CSACC , JTF_TASKS_B TSKT ,
JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND
NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID =
CSACC.TASK_ID AND CSACC.SCHED_REQUEST_ID = CSACTL.SCHED_REQUEST_ID));
/* Delete Logic
1 Fetch the incident ids associated to the processing set id (i/p parameter) which are marked for purge
1.1 If no incident ids (for the given processing set id) require purging, Return Success
2 Fetch Field Service tasks belonging to the incident ids which are purge candidates
3 Fetch debrief headers that belong to the fetched tasks
4 Fetch debrief lines that belong to the fetched debrief headers
5 Fetch debrief notes that belong to the fetched debrief headers
6 Fetch parts requirement headers that belong to the fetched tasks
7 Fetch parts requirement lines that belong to the fetched parts requirement headers
8 Fetch parts requirement line details that belong to the fetched parts requirement headers
9 Fetch required skills that are associated to the fetched tasks
10 Fetch Schedule Requests
11 Fetch Resource Results
12 Fetch Messages and Message Tokens
13 Delete contents fetched from step 3 - step 12
14 Return Success if delete operation is successful
15 Return Failure if delete operation fails
*/
/* Step 1 - Delete relevant debrief notes and note contexts */
DELETE /*+ index(jnc) */ FROM JTF_NOTE_CONTEXTS JNC
WHERE
JTF_NOTE_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
JTFNL.JTF_NOTE_ID FROM JTF_NOTE_CONTEXTS JTFNL ,
JTF_NOTES_B JTFNB , CSF_DEBRIEF_HEADERS DBFH , JTF_TASK_ASSIGNMENTS TSKA ,
JTF_TASKS_B TSKT , JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE
TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND
TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID AND TMP.OBJECT_TYPE =
TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID = TSKA.TASK_ID AND
TSKA.TASK_ASSIGNMENT_ID = DBFH.TASK_ASSIGNMENT_ID AND
DBFH.DEBRIEF_HEADER_ID = JTFNB.SOURCE_OBJECT_ID AND
JTFNB.SOURCE_OBJECT_CODE = 'SD' AND JTFNB.JTF_NOTE_ID = JTFNL.JTF_NOTE_ID );
DELETE /*+ index(jnt)*/ FROM JTF_NOTES_TL JNT
WHERE
JTF_NOTE_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
JTFNB.JTF_NOTE_ID FROM JTF_NOTES_B JTFNB ,
CSF_DEBRIEF_HEADERS DBFH , JTF_TASK_ASSIGNMENTS TSKA , JTF_TASKS_B TSKT ,
JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND
NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID =
TSKA.TASK_ID AND TSKA.TASK_ASSIGNMENT_ID = DBFH.TASK_ASSIGNMENT_ID AND
DBFH.DEBRIEF_HEADER_ID = JTFNB.SOURCE_OBJECT_ID AND
JTFNB.SOURCE_OBJECT_CODE = 'SD' );
DELETE /*+ index(jnb)*/ FROM JTF_NOTES_B JNB
WHERE
JTF_NOTE_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
JTFNB.JTF_NOTE_ID FROM JTF_NOTES_B JTFNB ,
CSF_DEBRIEF_HEADERS DBFH , JTF_TASK_ASSIGNMENTS TSKA , JTF_TASKS_B TSKT ,
JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND
NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID =
TSKA.TASK_ID AND TSKA.TASK_ASSIGNMENT_ID = DBFH.TASK_ASSIGNMENT_ID AND
DBFH.DEBRIEF_HEADER_ID = JTFNB.SOURCE_OBJECT_ID AND
JTFNB.SOURCE_OBJECT_CODE = 'SD' );
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task notes and note related objs ');
/* Step 2 - Delete relevant debrief lines and debrief line related objects:
1) CSF_DEBRIEF_LINES
*/
DELETE /*+ index (cdl)*/
FROM CSF_DEBRIEF_LINES CDL
WHERE DEBRIEF_LINE_ID IN
( SELECT /*+ LEADING(TMP) cardinality(TMP, 10)*/
DBFL.DEBRIEF_LINE_ID
FROM CSF_DEBRIEF_LINES DBFL ,
CSF_DEBRIEF_HEADERS DBFH ,
JTF_TASK_ASSIGNMENTS TSKA ,
JTF_TASKS_B TSKT ,
JTF_OBJECT_PURGE_PARAM_TMP TMP
WHERE TMP.PROCESSING_SET_ID = p_processing_set_id
AND NVL ( TMP.PURGE_STATUS , 'S' ) <> 'E'
AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE
AND TSKT.TASK_ID = TSKA.TASK_ID
AND TSKA.TASK_ASSIGNMENT_ID = DBFH.TASK_ASSIGNMENT_ID
AND DBFH.DEBRIEF_HEADER_ID = DBFL.DEBRIEF_HEADER_ID );
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task debriefed line details ');
/* Step 3 - Delete relevant debrief headers*/
DELETE /*+ index(cdh) */ FROM CSF_DEBRIEF_HEADERS CDH
WHERE
DEBRIEF_HEADER_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
DBFH.DEBRIEF_HEADER_ID FROM CSF_DEBRIEF_HEADERS
DBFH , JTF_TASK_ASSIGNMENTS TSKA , JTF_TASKS_B TSKT ,
JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND
NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID =
TSKA.TASK_ID AND TSKA.TASK_ASSIGNMENT_ID = DBFH.TASK_ASSIGNMENT_ID );
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task debrief header details ');
/* Step 4 - Delete relevant requirement line details */
DELETE /*+ index(crld) */ FROM CSP_REQ_LINE_DETAILS crld
WHERE
req_line_detail_id in
(
SELECT /*+ cardinality(TMP, 10) */
csprdt.req_line_detail_id
FROM
CSP_REQ_LINE_DETAILS csprdt
, CSP_REQUIREMENT_LINES csprl
, CSP_REQUIREMENT_HEADERS csprh
, JTF_TASKS_B tskt
, JTF_OBJECT_PURGE_PARAM_TMP tmp
WHERE
tmp.PROCESSING_SET_ID = P_PROCESSING_SET_ID and
nvl(tmp.purge_status, 'S') <> 'E' and
tmp.object_id = tskt.source_object_id and
tmp.object_type = tskt.source_object_type_code and
tskt.task_id = csprh.task_id and
csprh.requirement_header_id = csprl.requirement_header_id and
csprl.requirement_line_id = csprdt.requirement_line_id
);
/* Step 5 - Delete relevant requirement lines */
DELETE /*+ index(crl) */ FROM CSP_REQUIREMENT_LINES crl
WHERE
requirement_line_id in
(
SELECT /*+ cardinality(TMP, 10) */
csprl.requirement_line_id
FROM
CSP_REQUIREMENT_LINES csprl
, CSP_REQUIREMENT_HEADERS csprh
, JTF_TASKS_B tskt
, JTF_OBJECT_PURGE_PARAM_TMP tmp
WHERE
tmp.PROCESSING_SET_ID = P_PROCESSING_SET_ID and
nvl(tmp.purge_status, 'S') <> 'E' and
tmp.object_id = tskt.source_object_id and
tmp.object_type = tskt.source_object_type_code and
tskt.task_id = csprh.task_id and
csprh.requirement_header_id = csprl.requirement_header_id
);
/* Step 6 - Delete relevant requirement headers */
DELETE /*+ index(crh) */ FROM CSP_REQUIREMENT_HEADERS crh
WHERE
requirement_header_id in
(
SELECT /*+ cardinality(TMP, 10) */
csprh.requirement_header_id
FROM
CSP_REQUIREMENT_HEADERS csprh
, JTF_TASKS_B tskt
, JTF_OBJECT_PURGE_PARAM_TMP tmp
WHERE
tmp.PROCESSING_SET_ID = P_PROCESSING_SET_ID and
nvl(tmp.purge_status, 'S') <> 'E' and
tmp.object_id = tskt.source_object_id and
tmp.object_type = tskt.source_object_type_code and
tskt.task_id = csprh.task_id
);
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task requirement headers and lines ');
/* Step 7 - Delete relevant required skills */
DELETE /*+ index(crsb) */ FROM CSF_REQUIRED_SKILLS_B CRSB
WHERE
REQUIRED_SKILL_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSFSK.REQUIRED_SKILL_ID FROM CSF_REQUIRED_SKILLS_B
CSFSK , JTF_TASKS_B TSKT , JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE
TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND
TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID AND TMP.OBJECT_TYPE =
TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID = CSFSK.HAS_SKILL_ID AND
CSFSK.HAS_SKILL_TYPE = 'TASK' );
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task required skills ');
/* Step 8 - Delete Access Hours */
DELETE /*+ index(caht) */ FROM CSF_ACCESS_HOURS_TL caht
WHERE
access_hour_id in
(
SELECT /*+ LEADING(TMP) no_unnest no_semijoin cardinality(TMP,
10) */
csacc.access_hour_id
FROM
CSF_ACCESS_HOURS_B csacc
, JTF_TASKS_B tskt
, JTF_OBJECT_PURGE_PARAM_TMP tmp
WHERE
tmp.PROCESSING_SET_ID = P_PROCESSING_SET_ID and
nvl(tmp.purge_status, 'S') <> 'E' and
tmp.object_id = tskt.source_object_id and
tmp.object_type = tskt.source_object_type_code and
tskt.task_id = csacc.task_id
);
DELETE /*+ index(cahb) */ FROM CSF_ACCESS_HOURS_B cahb
WHERE
task_id in
(
SELECT /*+ cardinality(TMP, 10) */
csacc.task_id
FROM
CSF_ACCESS_HOURS_B csacc
, JTF_TASKS_B tskt
, JTF_OBJECT_PURGE_PARAM_TMP tmp
WHERE
tmp.PROCESSING_SET_ID = P_PROCESSING_SET_ID and
nvl(tmp.purge_status, 'S') <> 'E' and
tmp.object_id = tskt.source_object_id and
tmp.object_type = tskt.source_object_type_code and
tskt.task_id = csacc.task_id
);
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task access hours details ');
/* Step 9 - Delete Plan Options */
DELETE /*+ index(crpo) */ FROM CSF_R_PLAN_OPTIONS CRPO
WHERE
PLAN_OPTION_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACTL.PLAN_OPTION_ID FROM CSF_R_PLAN_OPTIONS
CSACTL , CSF_R_PLAN_OPTION_TASKS CSACC , JTF_TASKS_B TSKT ,
JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND
NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID =
CSACC.TASK_ID AND CSACC.PLAN_OPTION_ID = CSACTL.PLAN_OPTION_ID );
DELETE /*+ index(crpot) */ FROM CSF_R_PLAN_OPTION_TASKS CRPOT
WHERE
TASK_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACC.TASK_ID FROM CSF_R_PLAN_OPTION_TASKS CSACC , JTF_TASKS_B TSKT ,
JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND
NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID =
CSACC.TASK_ID );
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task plan options ');
/* Step 10 - Delete Resource Results */
DELETE /*+ index(crso) */ FROM CSF_R_SPARES_OPTIONS CRSO
WHERE
RESOURCE_RESULT_ID IN (SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACTL.RESOURCE_RESULT_ID FROM CSF_R_SPARES_OPTIONS
CSACTL , CSF_R_RESOURCE_RESULTS CSRR ,CSF_R_REQUEST_TASKS
CSACC, JTF_TASKS_B TSKT ,JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE
TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND
NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID
AND TMP.OBJECT_TYPE = TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID =
CSACC.TASK_ID AND CSACC.REQUEST_TASK_ID=CSRR.REQUEST_TASK_ID
AND CSRR.RESOURCE_RESULT_ID =CSACTL.RESOURCE_RESULT_ID);
DELETE /*+ index(crrr) */ FROM CSF_R_RESOURCE_RESULTS CRRR
WHERE
REQUEST_TASK_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACC.REQUEST_TASK_ID FROM CSF_R_RESOURCE_RESULTS CSRR ,CSF_R_REQUEST_TASKS
CSACC , JTF_TASKS_B TSKT , JTF_OBJECT_PURGE_PARAM_TMP TMP WHERE
TMP.PROCESSING_SET_ID = P_PROCESSING_SET_ID AND NVL(TMP.PURGE_STATUS, 'S') <> 'E' AND
TMP.OBJECT_ID = TSKT.SOURCE_OBJECT_ID AND TMP.OBJECT_TYPE =
TSKT.SOURCE_OBJECT_TYPE_CODE AND TSKT.TASK_ID = CSACC.TASK_ID AND
CSACC.REQUEST_TASK_ID=CSRR.REQUEST_TASK_ID);
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task resource results ');
/* Step 11 - Delete Messages and Message Tokens */
--FORALL i in l_tab_sched_req_id.first..l_tab_sched_req_id.last
DELETE /*+ index(crmt) */ FROM CSF_R_MESSAGE_TOKENS CRMT
WHERE
MESSAGE_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACTL.MESSAGE_ID FROM CSF_R_MESSAGE_TOKENS CSACTL ,
CSF_R_MESSAGES CSRM, CSF_R_REQUEST_TASKS CSACC , CSF_R_SCHED_REQUESTS CSCHR
WHERE CSCHR.SCHED_REQUEST_ID IN (SELECT T.COLUMN_VALUE FROM TABLE(CAST(L_TAB_SCHED_REQ_ID AS JTF_NUMBER_TABLE)) T) AND
--WHERE CSCHR.SCHED_REQUEST_ID = l_tab_sched_req_id(i) AND
CSCHR.SCHED_REQUEST_ID = CSACC.SCHED_REQUEST_ID AND
CSACC.REQUEST_TASK_ID=CSRM.REQUEST_TASK_ID AND
CSRM.MESSAGE_ID = CSACTL.MESSAGE_ID );
DELETE /*+ index(crm) */ FROM CSF_R_MESSAGES CRM
WHERE
REQUEST_TASK_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACC.REQUEST_TASK_ID FROM CSF_R_MESSAGES CSRM ,
CSF_R_REQUEST_TASKS CSACC , CSF_R_SCHED_REQUESTS CSCHR
WHERE CSCHR.SCHED_REQUEST_ID IN (SELECT T.COLUMN_VALUE FROM TABLE(CAST(L_TAB_SCHED_REQ_ID AS JTF_NUMBER_TABLE)) T) AND
--WHERE CSCHR.SCHED_REQUEST_ID = l_tab_sched_req_id(i) AND
CSCHR.SCHED_REQUEST_ID = CSACC.SCHED_REQUEST_ID AND
CSACC.REQUEST_TASK_ID=CSRM.REQUEST_TASK_ID);
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task messages and message tokens ');
/* Step 12 - Delete Request Task */
--FORALL i in l_tab_sched_req_id.first..l_tab_sched_req_id.last
DELETE /*+ index(crrt) */ FROM CSF_R_REQUEST_TASKS CRRT
WHERE
REQUEST_TASK_ID IN ( SELECT /*+ LEADING(TMP) cardinality(TMP, 10) */
CSACC.REQUEST_TASK_ID FROM CSF_R_REQUEST_TASKS
CSACC , CSF_R_SCHED_REQUESTS CSCHR
WHERE CSCHR.SCHED_REQUEST_ID IN (SELECT t.COLUMN_VALUE FROM TABLE(CAST(l_tab_sched_req_id AS JTF_NUMBER_TABLE)) t) AND
--WHERE CSCHR.SCHED_REQUEST_ID = l_tab_sched_req_id(i) AND
CSCHR.SCHED_REQUEST_ID = CSACC.SCHED_REQUEST_ID);
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task scheduled requests tasks');
/* Step 13 - Delete Schedule Requests */
--FORALL i in l_tab_sched_req_id.first..l_tab_sched_req_id.last
DELETE /*+ index(crsr) */ FROM CSF_R_SCHED_REQUESTS CRSR
WHERE
SCHED_REQUEST_ID IN (SELECT t.COLUMN_VALUE FROM TABLE(CAST(l_tab_sched_req_id AS JTF_NUMBER_TABLE)) t);
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS task scheduled requests ');
delete cac_sr_object_capacity
where object_capacity_id in
(select cac.object_capacity_id
from
cac_sr_object_capacity cac
, JTF_TASKS_B tskt
, JTF_OBJECT_PURGE_PARAM_TMP tmp
, jtf_Task_assignments jtt
, jtf_task_statuses_b jtfts
WHERE
tmp.PROCESSING_SET_ID = P_PROCESSING_SET_ID and
nvl(tmp.purge_status, 'S') <> 'E' and
tmp.object_id = tskt.source_object_id and
tmp.object_type = tskt.source_object_type_code and
tskt.task_id = jtt.TASK_ID and
jtt.object_capacity_id = cac.object_capacity_id and
jtt.assignment_status_id = jtfts.task_status_id and
(nvl(jtfts.closed_flag,'N') = 'Y' or
nvl(jtfts.completed_flag,'N') = 'Y' or
nvl(jtfts.cancelled_flag,'N') = 'Y') and
cac.end_date_time < sysdate and
not exists (select 1 from
jtf_Task_assignments jtts, jtf_task_statuses_b jtsts
where
jtts.object_capacity_id = cac.object_capacity_id and
jtts.task_id <> jtt.task_id and
jtt.assignment_status_id = jtfts.task_status_id and
(nvl(jtfts.closed_flag,'N') <> 'Y' and
nvl(jtfts.completed_flag,'N') <> 'Y' and
nvl(jtfts.cancelled_flag,'N') <> 'Y'))
);
update cac_sr_object_capacity cac set cac.available_hours =
( SELECT (cac.END_DATE_TIME - cac.START_DATE_TIME) -
SUM(ta.booking_end_date - ta.booking_start_date) -
SUM(NVL(csf_util_pvt.convert_to_minutes(
ta.sched_travel_duration
, ta.sched_travel_duration_uom
), 0)) /(24*60)
FROM jtf_task_assignments ta
WHERE ta.object_capacity_id = cac.object_capacity_id
)
where cac.start_date_time > sysdate and
cac.object_capacity_id in
(select cac.object_capacity_id
from
cac_sr_object_capacity cac
, JTF_TASKS_B tskt
, JTF_OBJECT_PURGE_PARAM_TMP tmp
, jtf_Task_assignments jtt
, jtf_task_statuses_b jtfts
WHERE
tmp.PROCESSING_SET_ID = P_PROCESSING_SET_ID and
nvl(tmp.purge_status, 'S') <> 'E' and
tmp.object_id = tskt.source_object_id and
tmp.object_type = tskt.source_object_type_code and
tskt.task_id = jtt.TASK_ID and
jtt.object_capacity_id = cac.object_capacity_id and
jtt.assignment_status_id = jtfts.task_status_id and
(nvl(jtfts.closed_flag,'N') = 'Y' or
nvl(jtfts.completed_flag,'N') = 'Y' or
nvl(jtfts.cancelled_flag,'N') = 'Y'));
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, 'CSF', 'In CSF_MAINTAIN_GRP.Purge_FieldServiceObjects() deleted FS capacities ');