1 PACKAGE BODY AHL_RA_ANALYSER_PVT AS
2 /* $Header: AHLVRAAB.pls 120.29.12000000.3 2007/05/09 10:37:38 mpothuku ship $*/
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'AHL_RA_ANALYSER_PVT';
5
6 -- To log error messages into a log file if called from concurrent process.
7 PROCEDURE log_error_messages;
8
9 -- Start of Comments --
10 --
11 -- Procedure name : PROCESS_RA_DATA
12 -- Type : Private
13 -- Function : This API would create the setup data for Reliability Framework in AHL_RA_DEFINITION_HDR
14 -- Pre-reqs :
15 --
16 -- Standard IN Parameters :
17 -- p_api_version IN NUMBER Required
18 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
19 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
20 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
21 --
22 -- Standard OUT Parameters :
23 -- x_return_status OUT VARCHAR2 Required
24 -- x_msg_count OUT NUMBER Required
25 -- x_msg_data OUT VARCHAR2 Required
26 --
27 -- PROCESS_RA_DATA Parameters :
28 -- p_start_date IN DATE Required
29 -- p_end_date IN DATE Required
30 --
31 -- Version :
32 -- Initial Version 1.0
33 --
34 -- End of Comments --
35 PROCEDURE PROCESS_RA_DATA (
36 p_api_version IN NUMBER,
37 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
38 p_commit IN VARCHAR2 := FND_API.G_FALSE,
39 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
40 p_module_type IN VARCHAR2,
41 x_return_status OUT NOCOPY VARCHAR2,
42 x_msg_count OUT NOCOPY NUMBER,
43 x_msg_data OUT NOCOPY VARCHAR2,
44 p_start_date IN DATE,
45 p_end_date IN DATE,
46 p_concurrent_flag IN VARCHAR2,
47 x_xml_data OUT NOCOPY CLOB) IS
48
49 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_RA_DATA';
50 l_api_version CONSTANT NUMBER := 1.0;
51 L_FULL_NAME CONSTANT VARCHAR2(60) := 'ahl.plsql.'||G_PKG_NAME || '.' || L_API_NAME;
52
53 CURSOR c_setup_counter_data IS
54 SELECT NEW.COUNTER_ID, -- l_tmp_new_ctr_id_tbl
55 NEW.START_DATE_ACTIVE, -- l_tmp_new_start_date_tbl
56 NEW.END_DATE_ACTIVE, -- l_tmp_new_end_date_tbl
57 OVER.COUNTER_ID, -- l_tmp_over_ctr_id_tbl
58 OVER.START_DATE_ACTIVE, -- l_tmp_over_start_date_tbl
59 OVER.END_DATE_ACTIVE -- l_tmp_over_end_date_tbl
60 FROM csi_counter_template_vl NEW,
61 csi_counter_template_vl OVER,
62 AHL_RA_CTR_ASSOCIATIONS CTR
63 WHERE CTR.SINCE_NEW_COUNTER_ID = NEW.COUNTER_ID
64 AND CTR.SINCE_OVERHAUL_COUNTER_ID = OVER.COUNTER_ID(+);
65
66 /*
67 -- Comment Here Starts
68 -- This Cursor Usage is replaced by UA API Call below
69 CURSOR c_flight_schedule_data(c_start_date DATE, c_end_date DATE) IS
70 SELECT US.UNIT_SCHEDULE_ID, -- l_fs_unit_sch_id_tbl
71 US.ARRIVAL_ORG_ID, -- l_fs_arr_org_id_tbl
72 US.UNIT_CONFIG_HEADER_ID, -- l_fs_uc_header_id_tbl
73 US.CSI_ITEM_INSTANCE_ID, -- l_fs_csi_instance_id_tbl
74 ORG.organization_code, -- l_fs_org_code_tbl
75 TRUNC(NVL(US.ACTUAL_ARRIVAL_TIME,US.EST_ARRIVAL_TIME)) -- l_fs_arrival_date_tbl
76 FROM AHL_UNIT_SCHEDULES_V US,org_organization_definitions org
77 WHERE TRUNC(NVL(US.ACTUAL_ARRIVAL_TIME,US.EST_ARRIVAL_TIME)) BETWEEN C_START_DATE AND C_END_DATE
78 AND ORG.ORGANIZATION_ID = US.ARRIVAL_ORG_ID
79 AND UC_STATUS_CODE IN ('COMPLETE', 'INCOMPLETE');
80 -- Comment Here Ends
81 */
82
83 /* -- Bug 4777658 : Perf Fix : Rewriting cursor c_uc_node_details below.
84 -- Perf Fix -- MTL_SYSTEM_ITEMS need not be used here as DESCRIPTION can be fetched from MTL_SYSTEM_ITEMS_KFV
85 CURSOR c_uc_node_details(c_csi_instance_id csi_ii_relationships.object_id%TYPE) IS
86 SELECT CIIR.OBJECT_ID, -- l_dtls_object_id_tbl
87 CIIR.SUBJECT_ID, -- l_dtls_subject_id_tbl
88 DECODE(UC.CSI_ITEM_INSTANCE_ID,
89 NULL,CIIR.POSITION_REFERENCE,
90 (SELECT RELATIONSHIP_ID
91 FROM AHL_MC_RELATIONSHIPS MCR,
92 AHL_UNIT_CONFIG_HEADERS UCI
93 WHERE MCR.MC_HEADER_ID = UCI.MASTER_CONFIG_ID
94 AND MCR.PARENT_RELATIONSHIP_ID IS NULL
95 AND UCI.UNIT_CONFIG_HEADER_ID = AHL_UTIL_UC_PKG.GET_SUB_UC_HEADER_ID(UC.CSI_ITEM_INSTANCE_ID))), -- l_dtls_pos_ref_tbl
96 CII.INVENTORY_ITEM_ID, -- l_dtls_inv_item_id_tbl
97 CII.INV_MASTER_ORGANIZATION_ID, -- l_dtls_inv_master_org_id_tbl
98 CII.INVENTORY_REVISION, -- l_dtls_inv_revision_tbl
99 CII.QUANTITY, -- l_dtls_quantity_tbl
100 CII.UNIT_OF_MEASURE, -- l_dtls_uom_tbl
101 CII.SERIAL_NUMBER, -- l_dtls_srl_no_tbl
102 KFV.CONCATENATED_SEGMENTS, -- l_dtls_item_name_tbl
103 KFV.DESCRIPTION -- l_dtls_item_desc_tbl
104 FROM CSI_II_RELATIONSHIPS CIIR,
105 CSI_ITEM_INSTANCES CII,
106 --MTL_SYSTEM_ITEMS MSI,
107 MTL_SYSTEM_ITEMS_KFV KFV,
108 AHL_UNIT_CONFIG_HEADERS UC
109 WHERE CII.INSTANCE_ID = CIIR.SUBJECT_ID
110 AND CII.INVENTORY_ITEM_ID = KFV.INVENTORY_ITEM_ID
111 AND CII.INV_MASTER_ORGANIZATION_ID = KFV.ORGANIZATION_ID
112 --AND KFV.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
113 --AND KFV.ORGANIZATION_ID = MSI.ORGANIZATION_ID
114 AND UC.CSI_ITEM_INSTANCE_ID(+) = CIIR.SUBJECT_ID
115 START WITH CIIR.OBJECT_ID = c_csi_instance_id
116 AND CIIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
117 AND TRUNC(NVL(CIIR.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
118 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIR.ACTIVE_END_DATE,SYSDATE+1))
119 CONNECT BY PRIOR CIIR.SUBJECT_ID = CIIR.OBJECT_ID
120 AND CIIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
121 AND TRUNC(NVL(CIIR.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
122 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIR.ACTIVE_END_DATE,SYSDATE+1));
123 */
124
125 -- Bug 4777658 : Perf Fix : Modified Cursor
126
127 CURSOR c_uc_node_details(c_csi_instance_id csi_ii_relationships.object_id%TYPE) IS
128 Select A.OBJECT_ID, -- l_dtls_object_id_tbl
129 A.SUBJECT_ID, -- l_dtls_subject_id_tbl
130 DECODE(A.CSI_ITEM_INSTANCE_ID,
131 NULL,A.POSITION_REFERENCE,
132 MCR.RELATIONSHIP_ID) X, -- l_dtls_pos_ref_tbl
133 A.INVENTORY_ITEM_ID, -- l_dtls_inv_item_id_tbl
134 A.INV_MASTER_ORGANIZATION_ID, -- l_dtls_inv_master_org_id_tbl
135 A.INVENTORY_REVISION, -- l_dtls_inv_revision_tbl
136 A.QUANTITY, -- l_dtls_quantity_tbl
137 A.UNIT_OF_MEASURE, -- l_dtls_uom_tbl
138 A.SERIAL_NUMBER, -- l_dtls_srl_no_tbl
139 A.CONCATENATED_SEGMENTS, -- l_dtls_item_name_tbl
140 A.DESCRIPTION, -- l_dtls_item_desc_tbl
141 --Added by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
142 /* This is a point of contention. For MTBF flow, the header node for the Sub-config is considered for
143 MTBF definition. But for part changes, the position_key correspnding to the node where the sub-config is considered
144 So we need to consider both */
145 A.POSITION_REFERENCE --l_dtls_pos_ref_his_tbl
146 FROM (SELECT CIIR.OBJECT_ID, -- l_dtls_object_id_tbl
147 CIIR.SUBJECT_ID, -- l_dtls_subject_id_tbl
148 CII.INVENTORY_ITEM_ID, -- l_dtls_inv_item_id_tbl
149 CII.INV_MASTER_ORGANIZATION_ID, -- l_dtls_inv_master_org_id_tbl
150 CII.INVENTORY_REVISION, -- l_dtls_inv_revision_tbl
151 CII.QUANTITY, -- l_dtls_quantity_tbl
152 CII.UNIT_OF_MEASURE, -- l_dtls_uom_tbl
153 CII.SERIAL_NUMBER, -- l_dtls_srl_no_tbl
154 KFV.CONCATENATED_SEGMENTS, -- l_dtls_item_name_tbl
155 KFV.DESCRIPTION, -- l_dtls_item_desc_tbl
156 UC.CSI_ITEM_INSTANCE_ID,
157 CIIR.POSITION_REFERENCE,
158 UCI.MASTER_CONFIG_ID
159 FROM ( Select CIIRI.SUBJECT_ID ,
160 CIIRI.OBJECT_ID ,
161 CIIRI.POSITION_REFERENCE
162 from CSI_II_RELATIONSHIPS CIIRI
163 START WITH CIIRI.OBJECT_ID = c_csi_instance_id
164 AND CIIRI.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
165 AND TRUNC(NVL(CIIRI.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
166 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIRI.ACTIVE_END_DATE,SYSDATE+1))
167 CONNECT BY PRIOR CIIRI.SUBJECT_ID = CIIRI.OBJECT_ID
168 AND CIIRI.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
169 AND TRUNC(NVL(CIIRI.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
170 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIRI.ACTIVE_END_DATE,SYSDATE+1))) CIIR,
171 CSI_ITEM_INSTANCES CII,
172 MTL_SYSTEM_ITEMS_KFV KFV,
173 AHL_UNIT_CONFIG_HEADERS UC,
174 AHL_UNIT_CONFIG_HEADERS UCI
175 WHERE CII.INSTANCE_ID = CIIR.SUBJECT_ID
176 AND CII.INVENTORY_ITEM_ID = KFV.INVENTORY_ITEM_ID
177 AND CII.INV_MASTER_ORGANIZATION_ID = KFV.ORGANIZATION_ID
178 AND UC.CSI_ITEM_INSTANCE_ID(+) = CIIR.SUBJECT_ID
179 AND UCI.UNIT_CONFIG_HEADER_ID(+) = AHL_UTIL_UC_PKG.GET_SUB_UC_HEADER_ID(UC.CSI_ITEM_INSTANCE_ID)) A,
180 AHL_MC_RELATIONSHIPS MCR
181 WHERE MCR.MC_HEADER_ID(+) = A.MASTER_CONFIG_ID
182 AND nvl(MCR.PARENT_RELATIONSHIP_ID,-1) = -1;
183
184 CURSOR c_get_mtbf_data(c_relationship_id AHL_RA_DEFINITION_HDR.RELATIONSHIP_ID%TYPE,
185 c_inv_item_id AHL_RA_DEFINITION_HDR.INVENTORY_ITEM_ID%TYPE,
186 c_inv_org_id AHL_RA_DEFINITION_HDR.INVENTORY_ORG_ID%TYPE,
187 c_inv_item_revision AHL_RA_DEFINITION_HDR.ITEM_REVISION%TYPE) IS
188 SELECT DTLS.COUNTER_ID,
189 DTLS.MTBF_VALUE
190 FROM AHL_RA_DEFINITION_HDR HDR,
191 AHL_RA_DEFINITION_DTLS DTLS
192 WHERE HDR.RA_DEFINITION_HDR_ID = DTLS.RA_DEFINITION_HDR_ID
193 AND HDR.RELATIONSHIP_ID = TO_NUMBER(c_relationship_id)
194 AND HDR.INVENTORY_ITEM_ID = c_inv_item_id
195 AND HDR.INVENTORY_ORG_ID = c_inv_org_id
196 AND (HDR.ITEM_REVISION IS NULL OR HDR.ITEM_REVISION = c_inv_item_revision)
197 -- AND nvl(HDR.ITEM_REVISION,-1) = nvl(c_inv_item_revision,-1)
198 AND DTLS.MTBF_VALUE IS NOT NULL;
199
200 CURSOR c_get_path_postions(c_relationship_id AHL_RA_DEFINITION_HDR.RELATIONSHIP_ID%TYPE) IS
201 Select pos.path_position_id
202 from ahl_mc_path_position_nodes pos,
203 ahl_mc_relationships rel,
204 ahl_mc_headers_b hdr
205 where rel.mc_header_id = hdr.mc_header_id
206 and rel.relationship_id = to_number(c_relationship_id)
207 and hdr.mc_id = pos.mc_id
208 and hdr.version_number = nvl(pos.version_number, hdr.version_number)
209 and pos.position_key = rel.position_key
210 and pos.sequence in (select max(sequence)
211 from ahl_mc_path_position_nodes
212 where path_position_id = pos.path_position_id);
213
214 CURSOR c_fetch_dummy_assocs(c_fct_designator AHL_RA_FCT_ASSOCIATIONS.FORECAST_DESIGNATOR%TYPE,
215 c_arrival_org_id AHL_RA_FCT_ASSOCIATIONS.ORGANIZATION_ID%TYPE) IS
216 Select FORECAST_DESIGNATOR
217 from AHL_RA_FCT_ASSOCIATIONS
218 where ASSOCIATION_TYPE_CODE = 'ASSOC_HISTORICAL'
219 and FORECAST_DESIGNATOR <> c_fct_designator
220 and ORGANIZATION_ID = c_arrival_org_id;
221
222 -- Temp Tables used for fetching data from c_setup_counter_data.
223 -- Bulk Counter details data fetched would be further filtered using condition that the analyser input
224 -- start date and end date should fall between active dates of counter setup defined in CSI.
225 -- These tables have one - to - one correspondance to each another.
226 l_tmp_new_ctr_id_tbl NumTabType;
227 l_tmp_new_start_date_tbl DateTabType;
228 l_tmp_new_end_date_tbl DateTabType;
229 l_tmp_over_ctr_id_tbl NumTabType;
230 l_tmp_over_start_date_tbl DateTabType;
231 l_tmp_over_end_date_tbl DateTabType;
232
233 -- Table to store the final value of counter ids to be used to evaluate the probability of failure.
234 -- These tables have one - to - one correspondance to each another.
235 -- These tables have one - to - one correspondance to each another.
236 l_since_new_ctr_id_tbl NumTabType;
237 l_since_oh_ctr_id_tbl NumTabType;
238
239 -- Temp Tables used for fetching data from c_flight_schedule_data.
240 -- These tables have one - to - one correspondance to each another.
241 l_fs_unit_sch_id_tbl NumTabType;
242 l_fs_arr_org_id_tbl NumTabType;
243 l_fs_uc_header_id_tbl NumTabType;
244 l_fs_csi_instance_id_tbl NumTabType;
245 l_fs_arrival_date_tbl DateTabType;
246 l_fs_org_code_tbl Varchar3TabType;
247 l_flight_search_rec_type AHL_UA_FLIGHT_SCHEDULES_PUB.FLIGHT_SEARCH_REC_TYPE;
248 l_flight_schedules_tbl AHL_UA_FLIGHT_SCHEDULES_PVT.FLIGHT_SCHEDULES_TBL_TYPE;
249 l_fs_index NUMBER := 1;
250
251 -- Temp Tables used for fetching data from c_uc_node_details
252 -- These tables have one - to - one correspondance to each another.
253 l_dtls_object_id_tbl NumTabType;
254 l_dtls_subject_id_tbl NumTabType;
255 l_dtls_pos_ref_tbl Varchar30TabType;
256 l_dtls_inv_item_id_tbl NumTabType;
257 l_dtls_inv_master_org_id_tbl NumTabType;
258 l_dtls_inv_revision_tbl Varchar3TabType;
259 l_dtls_quantity_tbl NumTabType;
260 l_dtls_uom_tbl Varchar3TabType;
261 l_dtls_srl_no_tbl Varchar30TabType;
262 l_dtls_item_name_tbl Varchar40TabType;
263 l_dtls_item_desc_tbl Varchar240TabType;
264 --Modified by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
265 l_dtls_pos_ref_his_tbl Varchar30TabType;
266
267 -- These temp variables have one - to - one correspondance to each another.
268 l_root_pos_ref_code AHL_MC_RELATIONSHIPS.RELATIONSHIP_ID%TYPE;
269 l_root_quantity CSI_ITEM_INSTANCES.QUANTITY%TYPE;
270 l_root_uom CSI_ITEM_INSTANCES.UNIT_OF_MEASURE%TYPE;
271 l_root_inv_item_id CSI_ITEM_INSTANCES.INVENTORY_ITEM_ID%TYPE;
272 l_root_inv_master_org_id CSI_ITEM_INSTANCES.INV_MASTER_ORGANIZATION_ID%TYPE;
276 l_root_item_desc MTL_SYSTEM_ITEMS_KFV.DESCRIPTION%TYPE;
273 l_root_item_revision CSI_ITEM_INSTANCES.INVENTORY_REVISION%TYPE;
274 l_root_srl_no CSI_ITEM_INSTANCES.SERIAL_NUMBER%TYPE;
275 l_root_item_name MTL_SYSTEM_ITEMS_KFV.CONCATENATED_SEGMENTS%TYPE;
277
278
279 -- Table Type to retrieve Counters Associated to a Item Instance.
280 l_ctr_values_tbl AHL_UMP_PROCESSUNIT_PVT.counter_values_tbl_type;
281 l_active_ctr_id_tbl NumTabType;
282 l_active_ctr_temp_id_tbl Num15TabType;
283 l_active_ctr_name_tbl Varchar80TabType;
284 l_active_ctr_value_tbl NumTabType;
285 l_active_uom_code_tbl Varchar3TabType;
286 l_ctr_template_id csi_counters_vl.CREATED_FROM_COUNTER_TMPL_ID%TYPE;
287
288 -- This is used for active counters table index
289 l_ctr_index NUMBER := 1;
290
291 -- Return Status Handling
292 l_msg_count NUMBER :=0;
293 l_return_status VARCHAR2(2000);
294 l_msg_data VARCHAR2(2000);
295 l_msg_index_out NUMBER;
296
297 -- Temp Tables used for fetching data from c_get_mtbf_data.
298 -- These tables have one - to - one correspondance to each another.
299 l_mtbf_ctr_id_tbl Num15TabType;
300 l_mtbf_value_tbl NumTabType;
301
302 -- For Path Position Handling for each Item Instance
303 l_path_pos_exist_flag VARCHAR2(1) := 'N';
304 l_path_position_id_tbl NumTabType;
305
306 -- These variables will store the Probability Attribs - A,B,C,D
307 l_prob_attrib_a NUMBER := 0;
308 l_prob_attrib_b NUMBER := 0;
309 l_prob_attrib_b_tmp NUMBER := 0;
310 l_prob_attrib_c NUMBER := 0;
311 l_prob_attrib_c_tmp NUMBER := 0;
312 l_prob_attrib_d NUMBER := 0;
313 l_prob_value NUMBER := 0;
314 l_prob_value_tmp NUMBER := 0;
315
316 -- This is used to store the Forecast Designator for each Item Instance Id
317 l_fct_designator VARCHAR2(10) := NULL;
318
319 -- Index for l_forecast_interface_tbl
320 l_fct_index NUMBER := 1;
321
322 -- Index for l_forecast_designator_tbl
323 l_dsg_index NUMBER := 1;
324 -- To indicate if duplicate forecast_desginator is already populated in l_forecast_designator_tbl
325 l_ds_rec_found VARCHAR2(1) := 'N';
326
327
328 -- This is used for each item instance to indicate if MTBF Data is defined or not
329 l_mtbf_data_defined VARCHAR2(1) := 'N';
330 l_mtbf_value_exceeds VARCHAR2(1) := 'N';
331
332 -- Plsql Table of rec type MRP_FORECAST_INTERFACE_PK.rec_forecast_interface
333 l_forecast_interface_tbl MRP_FORECAST_INTERFACE_PK.t_forecast_interface;
334 l_forecast_designator_tbl MRP_FORECAST_INTERFACE_PK.t_forecast_designator;
335 l_forecast_org_code_tbl Varchar3TabType;
336 l_forecast_srl_no_tbl Varchar30TabType;
337 l_forecast_item_name_tbl Varchar40TabType;
338 l_forecast_onhand_qty_tbl NumTabType;
339 l_forecast_item_desc_tbl Varchar240TabType;
340 l_forecast_req_prob_tbl NumTabType;
341 l_forecast_osp_qty_tbl NumTabType;
342 l_forecast_vwp_qty_tbl NumTabType;
343 l_forecast_non_qty_tbl NumTabType;
344
345 -- For ATP Call - Check Availability API
346 l_atp_rec MRP_ATP_PUB.ATP_Rec_Typ;
347 x_atp_rec MRP_ATP_PUB.ATP_Rec_Typ;
348 x_atp_supply_demand MRP_ATP_PUB.ATP_Supply_Demand_Typ;
349 x_atp_period MRP_ATP_PUB.ATP_Period_Typ;
350 x_atp_details MRP_ATP_PUB.ATP_Details_Typ;
351 l_session_id NUMBER;
352
353 -- Dummy PLSql table to fetch dummy forecast associations for population MRP with residual of 100% Probability.
354 l_dummy_fct_desg_tbl Varchar10TabType;
355 l_incl_in_rpt_flag_tbl Varchar1TabType;
356
357 l_mrp_api_return_flag BOOLEAN := FALSE;
358
359 -- Used to Write to O/P File
360 l_fct_data_lob CLOB;
361 l_row_count NUMBER :=0;
362 --mpothuku changed the length from 1000 to 5000 on 09-May-2007 after the XML encoding has been introduced to fix the Bug 6038466
363 l_dummy_string VARCHAR2(5000);
364
365 l_dummy_identifier NUMBER;
366
367 BEGIN
368
369 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
370 fnd_log.string(fnd_log.level_procedure,L_FULL_NAME||'.begin','At the start of PLSQL procedure');
371 END IF;
372
373 IF (p_concurrent_flag = 'Y') THEN
374 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- START ----');
375 END IF;
376
377 -- Standard start of API savepoint
378 SAVEPOINT PROCESS_RA_DATA_SP;
379
380 -- Standard call to check for call compatibility
381 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
382 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
383 END IF;
384
385 -- Initialize message list if p_init_msg_list is set to TRUE
386 IF FND_API.To_Boolean(p_init_msg_list) THEN
387 FND_MSG_PUB.Initialize;
388 END IF;
389
390 x_return_status := FND_API.G_RET_STS_SUCCESS;
391
395 fnd_log.string(fnd_log.level_statement,l_full_name,'RA -- PKG -- PROCESS_RA_DATA -------p_end_date-----------' || p_end_date);
392 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
393 fnd_log.string(fnd_log.level_statement,l_full_name,'RA -- PKG -- PROCESS_RA_DATA -------BEGIN-----------');
394 fnd_log.string(fnd_log.level_statement,l_full_name,'RA -- PKG -- PROCESS_RA_DATA -------p_start_date-----------' || p_start_date);
396 END IF;
397
398 IF (p_concurrent_flag = 'Y') THEN
399 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Validating Start / End Date ----');
400 END IF;
401
402 -- Input Data Validation
403 -- p_start_date and p_end_date should not be null.
404 -- p_start_date should be less than equal to p_end_date
405 -- p_start_date and p_end_date should not be less than sysdate
406 IF ( (p_start_date IS NULL)
407 OR (p_end_date IS NULL)
408 OR (p_start_date > p_end_date)
409 OR (p_start_date < trunc(sysdate))
410 OR (p_end_date < trunc(sysdate))
411 ) THEN
412
413 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
414 fnd_log.string(fnd_log.level_statement,l_full_name,'-- Invalid Param Passed --');
415 fnd_log.string(fnd_log.level_statement,l_full_name,'-- p_start_date -- '||p_start_date);
416 fnd_log.string(fnd_log.level_statement,l_full_name,'-- p_end_date -- '||p_end_date);
417 END IF;
418 IF (p_concurrent_flag = 'Y') THEN
419 fnd_file.put_line(fnd_file.log, '-- Invalid Param Passed -- Dates Validation Failed');
420 END IF;
421 FND_MESSAGE.Set_Name('AHL','AHL_RA_INV_PARAM_PASSED');
422 FND_MESSAGE.Set_Token('NAME','ANALYSER.PROCESS_DATA');
423 FND_MSG_PUB.ADD;
424 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
425 END IF;
426
427 IF (p_concurrent_flag = 'Y') THEN
428 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Fetching Counter Details Data from Setup ----');
429 END IF;
430
431 -- Fetch Counter Details Data from Setup
432 OPEN c_setup_counter_data;
433 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
434 fnd_log.string(fnd_log.level_statement,l_full_name,' Bulk Fetching Counter Details Data from Setup');
435 END IF;
436 IF (p_concurrent_flag = 'Y') THEN
437 fnd_file.put_line(fnd_file.log, '-- Bulk Fetching Counter Details Data from Setup --');
438 END IF;
439 FETCH c_setup_counter_data
440 BULK COLLECT INTO l_tmp_new_ctr_id_tbl,
441 l_tmp_new_start_date_tbl,
442 l_tmp_new_end_date_tbl,
443 l_tmp_over_ctr_id_tbl,
444 l_tmp_over_start_date_tbl,
445 l_tmp_over_end_date_tbl;
446 IF l_tmp_new_ctr_id_tbl.COUNT = 0 THEN
447 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
448 fnd_log.string(fnd_log.level_statement,l_full_name,' No Setup Data Found for Counters');
449 END IF;
450 IF (p_concurrent_flag = 'Y') THEN
451 fnd_file.put_line(fnd_file.log, '-- No Setup Data Found for Counters --');
452 END IF;
453 END IF;
454 CLOSE c_setup_counter_data;
455
456 --Filtering Counter Setup Data based on Active Dates
457 IF l_tmp_new_ctr_id_tbl.COUNT > 0 THEN
458
459 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
460 fnd_log.string(fnd_log.level_statement,l_full_name,'Filtering Counter Setup Data based on Active Dates - '||l_tmp_new_ctr_id_tbl.COUNT);
461 fnd_log.string(fnd_log.level_statement,l_full_name,'Analyser Start Date - '||p_start_date);
462 fnd_log.string(fnd_log.level_statement,l_full_name,'Analyser End Date - '||p_end_date);
463 END IF;
464
465 IF (p_concurrent_flag = 'Y') THEN
466 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Validating Active Dates of Counter Setup Data ----');
467 END IF;
468
469 FOR i IN l_tmp_new_ctr_id_tbl.FIRST .. l_tmp_new_ctr_id_tbl.LAST LOOP -- loop for Setup Cunters fetched
470
471 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
472 fnd_log.string(fnd_log.level_statement,l_full_name,'Looping for (i) - '||i);
473 fnd_log.string(fnd_log.level_statement,l_full_name,'l_tmp_new_ctr_id_tbl - '||l_tmp_new_ctr_id_tbl(i));
474 fnd_log.string(fnd_log.level_statement,l_full_name,'l_tmp_new_start_date_tbl - '||l_tmp_new_start_date_tbl(i));
475 fnd_log.string(fnd_log.level_statement,l_full_name,'l_tmp_new_end_date_tbl - '||l_tmp_new_end_date_tbl(i));
476 fnd_log.string(fnd_log.level_statement,l_full_name,'l_tmp_over_ctr_id_tbl - '||l_tmp_over_ctr_id_tbl(i));
477 fnd_log.string(fnd_log.level_statement,l_full_name,'l_tmp_over_start_date_tbl - '||l_tmp_over_start_date_tbl(i));
478 fnd_log.string(fnd_log.level_statement,l_full_name,'l_tmp_over_end_date_tbl - '||l_tmp_over_end_date_tbl(i));
479 END IF;
480
481 IF ((trunc(nvl(l_tmp_new_start_date_tbl(i),p_start_date)) <= trunc(p_start_date)) AND
482 (trunc(nvl(l_tmp_new_end_date_tbl(i),p_end_date + 1)) > trunc(p_end_date))) THEN
483 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
487 ELSE
484 fnd_log.string(fnd_log.level_statement,l_full_name,'Including Since New - l_since_new_ctr_id_tbl -'||i||'-'||l_tmp_new_ctr_id_tbl(i));
485 END IF;
486 l_since_new_ctr_id_tbl(i) := l_tmp_new_ctr_id_tbl(i);
488 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
489 fnd_log.string(fnd_log.level_statement,l_full_name,'Omiting Since New - l_tmp_new_ctr_id_tbl -'||i||'-'||l_tmp_new_ctr_id_tbl(i));
490 END IF;
491 l_since_new_ctr_id_tbl(i) := null;
492 END IF;
493
494 IF (l_tmp_over_ctr_id_tbl(i) IS NOT NULL) THEN
495 IF ((trunc(nvl(l_tmp_over_start_date_tbl(i),p_start_date)) <= trunc(p_start_date)) AND
496 (trunc(nvl(l_tmp_over_end_date_tbl(i),p_end_date + 1)) > trunc(p_end_date))) THEN
497 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
498 fnd_log.string(fnd_log.level_statement,l_full_name,'Including Since Overhaul - l_since_oh_ctr_id_tbl -'||i||'-'||l_tmp_over_ctr_id_tbl(i));
499 END IF;
500 l_since_oh_ctr_id_tbl(i) := l_tmp_over_ctr_id_tbl(i);
501 ELSE
502 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
503 fnd_log.string(fnd_log.level_statement,l_full_name,'Omiting Since Overhaul - l_tmp_over_ctr_id_tbl -'||i||'-'||l_tmp_over_ctr_id_tbl(i));
504 END IF;
505 l_since_oh_ctr_id_tbl(i) := null;
506 END IF;
507 ELSE
508 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
509 fnd_log.string(fnd_log.level_statement,l_full_name,'Omiting Since Overhaul - l_tmp_over_ctr_id_tbl -'||i||'-'||l_tmp_over_ctr_id_tbl(i));
510 END IF;
511 l_since_oh_ctr_id_tbl(i) := null;
512 END IF;
513
514 END LOOP; -- End Loop for Setup Counters Fetched
515
516 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
517 IF l_since_new_ctr_id_tbl.COUNT > 0 THEN
518 FOR t in l_since_new_ctr_id_tbl.FIRST .. l_since_new_ctr_id_tbl.LAST LOOP
519 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_since_new_ctr_id_tbl --- '||l_since_new_ctr_id_tbl(t));
520 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_since_oh_ctr_id_tbl --- '||l_since_oh_ctr_id_tbl(t));
521 END LOOP;
522 END IF;
523 END IF;
524
525 ELSE
526
527 IF (p_concurrent_flag = 'Y') THEN
528 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- No Counter Setup Done for Active Counters --');
529 END IF;
530
531 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
532 fnd_log.string(fnd_log.level_statement,l_full_name,' No Setup Data Found for Counters - In Loop Else Clause');
533 END IF;
534 END IF;
535
536 -- Return if no applicable Counters are retrieved
537 IF l_since_new_ctr_id_tbl.COUNT = 0 THEN
538 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
539 fnd_log.string(fnd_log.level_statement,l_full_name,'None of the defined counters - are active as per date');
540 END IF;
541 IF (p_concurrent_flag = 'Y') THEN
542 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- No Counter Setup - Non Active afer Data Validation - so returning ----');
543 END IF;
544
545 ELSE
546
547 IF (p_concurrent_flag = 'Y') THEN
548 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Fetching Flight Schedule Data ----');
549 END IF;
550
551 /*
552 -- Comment Here Starts
553 -- Commenting out Code Below for fetching Flight Schedule Data using cursor c_flight_schedule_data
554 -- Instead UA API is being called to derive the flight schedule data
555 -- Fetch Flight Schedules Data For Processing
556 OPEN c_flight_schedule_data(p_start_date,p_end_date);
557 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
558 fnd_log.string(fnd_log.level_statement,l_full_name,' Bulk Fetching Flight Schedules Data For Processing');
559 END IF;
560 IF (p_concurrent_flag = 'Y') THEN
561 fnd_file.put_line(fnd_file.log, ' Bulk Fetching Flight Schedules Data For Processing');
562 END IF;
563 FETCH c_flight_schedule_data
564 BULK COLLECT INTO l_fs_unit_sch_id_tbl,
565 l_fs_arr_org_id_tbl,
566 l_fs_uc_header_id_tbl,
567 l_fs_csi_instance_id_tbl,
568 l_fs_org_code_tbl,
569 l_fs_arrival_date_tbl;
570 IF l_fs_unit_sch_id_tbl.COUNT = 0 THEN
571 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
572 fnd_log.string(fnd_log.level_statement,l_full_name,' No Flight Schedules Data Retrieved');
573 END IF;
574 IF (p_concurrent_flag = 'Y') THEN
575 fnd_file.put_line(fnd_file.log, ' No Flight Schedules Data Retrieved');
576 END IF;
577 ELSE
578 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
579 fnd_log.string(fnd_log.level_statement,l_full_name,' Flight Schedules Data Retrieved'||l_fs_unit_sch_id_tbl.COUNT);
580 END IF;
581 IF (p_concurrent_flag = 'Y') THEN
582 fnd_file.put_line(fnd_file.log, 'Flight Schedules Data Retrieved'||l_fs_unit_sch_id_tbl.COUNT);
583 END IF;
584 END IF;
585 CLOSE c_flight_schedule_data;
586 -- Comment Here Ends
587 */
588
589 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
590 fnd_log.string(fnd_log.level_statement,l_full_name,' Bulk Fetching Flight Schedules Data For Processing - UA API');
591 END IF;
592 IF (p_concurrent_flag = 'Y') THEN
593 fnd_file.put_line(fnd_file.log, ' Bulk Fetching Flight Schedules Data For Processing - UA API');
594 END IF;
595
596 l_flight_search_rec_type.START_DATE := p_start_date - 1;
597 l_flight_search_rec_type.END_DATE := p_end_date + 1;
598 l_flight_search_rec_type.DATE_APPLY_TO_FLAG := AHL_UA_FLIGHT_SCHEDULES_PUB.G_APPLY_TO_ARRIVAL;
599
600 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
601 fnd_log.string(fnd_log.level_statement,l_full_name,' START_DATE - UA API' || l_flight_search_rec_type.START_DATE);
602 fnd_log.string(fnd_log.level_statement,l_full_name,' END_DATE - UA API' || l_flight_search_rec_type.END_DATE);
603 fnd_log.string(fnd_log.level_statement,l_full_name,' DATE_APPLY_TO_FLAG - UA API : ' || l_flight_search_rec_type.DATE_APPLY_TO_FLAG);
604 END IF;
605
606 AHL_UA_FLIGHT_SCHEDULES_PUB.Get_Flight_Schedule_Details(
607 -- standard IN params
608 p_api_version => 1,
609 p_init_msg_list => FND_API.G_FALSE,
610 p_commit => FND_API.G_FALSE,
611 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
612 p_default => FND_API.G_FALSE,
613 p_module_type => NULL,
614 -- standard OUT params
615 x_return_status => l_return_status,
616 x_msg_count => l_msg_count,
617 x_msg_data => l_msg_data,
618 -- procedure params
619 p_flight_search_rec => l_flight_search_rec_type,
620 x_flight_schedules_tbl => l_flight_schedules_tbl);
621
622 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
623 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
624 fnd_log.string(fnd_log.level_statement,l_full_name,'Called API AHL_UA_FLIGHT_SCHEDULES_PUB.Get_Flight_Schedule_Details Errored');
625 END IF;
626 IF (p_concurrent_flag = 'Y') THEN
627 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Error in getting Flight Scedule Details --');
628 END IF;
629 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
630 END IF;
631
632 IF l_flight_schedules_tbl.COUNT > 0 THEN
633 FOR f in l_flight_schedules_tbl.FIRST .. l_flight_schedules_tbl.LAST LOOP
634 IF (AHL_UTIL_UC_PKG.IS_UNIT_QUARANTINED(l_flight_schedules_tbl(f).UNIT_CONFIG_HEADER_ID,NULL) = FND_API.G_FALSE) THEN
635 l_fs_unit_sch_id_tbl(l_fs_index) := l_flight_schedules_tbl(f).UNIT_SCHEDULE_ID;
636 l_fs_arr_org_id_tbl(l_fs_index) := l_flight_schedules_tbl(f).ARRIVAL_ORG_ID;
637 l_fs_uc_header_id_tbl(l_fs_index) := l_flight_schedules_tbl(f).UNIT_CONFIG_HEADER_ID;
638 l_fs_csi_instance_id_tbl(l_fs_index) := l_flight_schedules_tbl(f).CSI_INSTANCE_ID;
639 l_fs_org_code_tbl(l_fs_index) := l_flight_schedules_tbl(f).ARRIVAL_ORG_CODE;
640 IF TRUNC(l_flight_schedules_tbl(f).ACTUAL_ARRIVAL_TIME) IS NULL THEN
641 l_fs_arrival_date_tbl(l_fs_index) := TRUNC(l_flight_schedules_tbl(f).EST_ARRIVAL_TIME);
642 ELSE
643 l_fs_arrival_date_tbl(l_fs_index) := TRUNC(l_flight_schedules_tbl(f).ACTUAL_ARRIVAL_TIME);
644 END IF;
645 l_fs_index := l_fs_index + 1;
646 END IF;
647 END LOOP;
648 END IF;
649 IF (p_concurrent_flag = 'Y') THEN
653 IF l_fs_unit_sch_id_tbl.COUNT > 0 THEN
650 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Flight Schedule Data fetched ----'||l_fs_unit_sch_id_tbl.COUNT);
651 END IF;
652
654 -- Loop for each Unit in the Unit Schedule Record fetched above.
655 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
656 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- LOOP FOR FLIGHT SCHEDULE BEGINS ----- '||l_fs_unit_sch_id_tbl.COUNT);
657 END IF;
658 IF (p_concurrent_flag = 'Y') THEN
659 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Processing Fligth Schedule Data ----');
660 END IF;
661
662 FOR i in l_fs_unit_sch_id_tbl.FIRST .. l_fs_unit_sch_id_tbl.LAST LOOP -- Loop for each Unit in the Unit Schedule Record fetched above.
663 -- Fetch details of the Root node of the UC
664 BEGIN
665
666 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
667 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- IN FS LOOP - l_fs_unit_sch_id_tbl ----- '||l_fs_unit_sch_id_tbl(i));
668 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- IN FS LOOP - l_fs_arr_org_id_tbl ----- '||l_fs_arr_org_id_tbl(i));
669 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- IN FS LOOP - l_fs_uc_header_id_tbl ----- '||l_fs_uc_header_id_tbl(i));
670 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- IN FS LOOP - l_fs_csi_instance_id_tbl ----- '||l_fs_csi_instance_id_tbl(i));
671 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- IN FS LOOP - l_fs_org_code_tbl ----- '||l_fs_org_code_tbl(i));
672 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- IN FS LOOP - l_fs_arrival_date_tbl ----- '||l_fs_arrival_date_tbl(i));
673 END IF;
674 IF (p_concurrent_flag = 'Y') THEN
675 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Fetching UC Root Node Details ----');
676 END IF;
677
678 Select MCR.RELATIONSHIP_ID,
679 CII.QUANTITY,
680 CII.UNIT_OF_MEASURE,
681 CII.INVENTORY_ITEM_ID,
682 CII.INV_MASTER_ORGANIZATION_ID,
683 CII.INVENTORY_REVISION,
684 CII.SERIAL_NUMBER,
685 KFV.CONCATENATED_SEGMENTS,
686 KFV.DESCRIPTION
687 INTO l_root_pos_ref_code,
688 l_root_quantity,
689 l_root_uom,
690 l_root_inv_item_id,
691 l_root_inv_master_org_id,
692 l_root_item_revision,
693 l_root_srl_no,
694 l_root_item_name,
695 l_root_item_desc
696 FROM AHL_UNIT_CONFIG_HEADERS UC,
697 CSI_ITEM_INSTANCES CII,
698 MTL_SYSTEM_ITEMS_KFV KFV,
699 ahl_mc_relationships MCR
700 WHERE UC.UNIT_CONFIG_HEADER_ID = l_fs_uc_header_id_tbl(i)
701 AND UC.CSI_ITEM_INSTANCE_ID = CII.INSTANCE_ID
702 AND KFV.INVENTORY_ITEM_ID = CII.INVENTORY_ITEM_ID
703 AND KFV.ORGANIZATION_ID = CII.INV_MASTER_ORGANIZATION_ID
704 AND MCR.mc_header_id = UC.MASTER_CONFIG_ID
705 and MCR.parent_relationship_id is null;
706 EXCEPTION
707 WHEN NO_DATA_FOUND THEN
708 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
709 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- Invalid -- UC_HEADER_ID ----- '||l_fs_uc_header_id_tbl(i));
710 END IF;
711 IF (p_concurrent_flag = 'Y') THEN
712 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Invalid UC Header Id - Data Corruption ----');
713 END IF;
714 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
715 WHEN OTHERS THEN
716 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
717 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- OTHERS EXEC BLOCK -- UC_HEADER_ID ----- '||l_fs_uc_header_id_tbl(i));
718 END IF;
719 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
720 END;
721
722 -- Fetch Unit Config Tree Node Details for the Unit under consideration in the Loop.
723 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
724 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- Fetching UC Node Data -----Flight Schedule Id --- '||l_fs_unit_sch_id_tbl(i));
725 END IF;
726 IF (p_concurrent_flag = 'Y') THEN
727 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- For Each UC - Fetching Tree Structure ----');
728 END IF;
729
730 OPEN c_uc_node_details(l_fs_csi_instance_id_tbl(i));
731 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
735 BULK COLLECT INTO l_dtls_object_id_tbl,
732 fnd_log.string(fnd_log.level_statement,l_full_name,' Bulk Fetching UC Tree for Root_Instance_id -- '||l_fs_csi_instance_id_tbl(i));
733 END IF;
734 FETCH c_uc_node_details
736 l_dtls_subject_id_tbl,
737 l_dtls_pos_ref_tbl,
738 l_dtls_inv_item_id_tbl,
739 l_dtls_inv_master_org_id_tbl,
740 l_dtls_inv_revision_tbl,
741 l_dtls_quantity_tbl,
742 l_dtls_uom_tbl,
743 l_dtls_srl_no_tbl,
744 l_dtls_item_name_tbl,
745 l_dtls_item_desc_tbl,
746 --Modified by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
747 l_dtls_pos_ref_his_tbl;
748 IF l_dtls_subject_id_tbl.COUNT = 0 THEN
749 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
750 fnd_log.string(fnd_log.level_statement,l_full_name,' No Nodes are Returned - Inserting Root Node at FIRST - index 1');
751 END IF;
752 IF (p_concurrent_flag = 'Y') THEN
753 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- No Nodes Fetched --Inserting Root Node at FIRST --');
754 END IF;
755 l_dtls_object_id_tbl(1) := l_fs_csi_instance_id_tbl(i);
756 l_dtls_subject_id_tbl(1) := l_fs_csi_instance_id_tbl(i);
757 l_dtls_pos_ref_tbl(1) := l_root_pos_ref_code;
758 l_dtls_inv_item_id_tbl(1) := l_root_inv_item_id;
759 l_dtls_inv_master_org_id_tbl(1) := l_root_inv_master_org_id;
760 l_dtls_inv_revision_tbl(1) := l_root_item_revision;
761 l_dtls_quantity_tbl(1) := l_root_quantity;
762 l_dtls_uom_tbl(1) := l_root_uom;
763 l_dtls_srl_no_tbl(1) := l_root_srl_no;
764 l_dtls_item_name_tbl(1) := l_root_item_name;
765 l_dtls_item_desc_tbl(1) := l_root_item_desc;
766 --Added by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
767 l_dtls_pos_ref_his_tbl(1) := l_root_pos_ref_code;
768 ELSE
769 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
770 fnd_log.string(fnd_log.level_statement,l_full_name,' Nodes are Returned - Inserting Root Node at LAST - index LAST + 1');
771 END IF;
772 IF (p_concurrent_flag = 'Y') THEN
773 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- All Nodes Fetched --Inserting Root Node at LAST --');
774 END IF;
775 l_dtls_object_id_tbl(l_dtls_object_id_tbl.LAST + 1) := l_fs_csi_instance_id_tbl(i);
776 l_dtls_subject_id_tbl(l_dtls_subject_id_tbl.LAST + 1) := l_fs_csi_instance_id_tbl(i);
777 l_dtls_pos_ref_tbl(l_dtls_pos_ref_tbl.LAST + 1) := l_root_pos_ref_code;
778 l_dtls_inv_item_id_tbl(l_dtls_inv_item_id_tbl.LAST + 1) := l_root_inv_item_id;
779 l_dtls_inv_master_org_id_tbl(l_dtls_inv_master_org_id_tbl.LAST + 1) := l_root_inv_master_org_id;
780 l_dtls_inv_revision_tbl(l_dtls_inv_revision_tbl.LAST + 1) := l_root_item_revision;
781 l_dtls_quantity_tbl(l_dtls_quantity_tbl.LAST + 1) := l_root_quantity;
782 l_dtls_uom_tbl(l_dtls_uom_tbl.LAST + 1) := l_root_uom;
783 l_dtls_srl_no_tbl(l_dtls_srl_no_tbl.LAST + 1) := l_root_srl_no;
784 l_dtls_item_name_tbl(l_dtls_item_name_tbl.LAST + 1) := l_root_item_name;
785 l_dtls_item_desc_tbl(l_dtls_item_desc_tbl.LAST + 1) := l_root_item_desc;
786 --Added by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
787 l_dtls_pos_ref_his_tbl(l_dtls_pos_ref_his_tbl.LAST + 1) := l_root_pos_ref_code;
788 END IF;
789 CLOSE c_uc_node_details;
790
791 IF l_dtls_subject_id_tbl.COUNT > 0 THEN
792 IF (p_concurrent_flag = 'Y') THEN
793 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Start Processing of Each Node --');
794 END IF;
795 FOR j IN l_dtls_subject_id_tbl.FIRST .. l_dtls_subject_id_tbl.LAST LOOP -- Loop for Each node in UC
796 l_ctr_index := 1; -- Reset if Index for Active Counters for each item instance.
797 l_mtbf_data_defined := 'N'; -- Reset if MTBF Data is defined or not indicator for each item instance.
798 l_fct_designator := null; -- Reset if Fct designator is derived or not indicator for each item instance.
799 l_prob_value := 0; -- Final Probability Value - Reset for Each Item Instance
800 l_ds_rec_found := 'N'; -- To indicate if duplicate forecast_desginator is already populated in l_forecast_designator_tbl
801 l_mtbf_value_exceeds := 'N'; -- To Indicates if MTBF Value exceeds for any of the Active counters of the Instance
802
806 fnd_log.string(fnd_log.level_statement,l_full_name,'p_end_date - '||to_char(p_end_date, 'DD-MON-YYYY HH24:MI:SS'));
803 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
804 fnd_log.string(fnd_log.level_statement,l_full_name,'Calling API AHL_UMP_PROCESSUNIT_PVT.Get_Forecasted_Counter_Values');
805 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_subject_id_tbl - ' ||l_dtls_subject_id_tbl(j));
807 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_object_id_tbl - ' ||l_dtls_object_id_tbl(j));
808 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_pos_ref_tbl - ' ||l_dtls_pos_ref_tbl(j));
809 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_inv_item_id_tbl - ' ||l_dtls_inv_item_id_tbl(j));
810 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_inv_master_org_id_tbl - ' ||l_dtls_inv_master_org_id_tbl(j));
811 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_inv_revision_tbl - ' ||l_dtls_inv_revision_tbl(j));
812 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_quantity_tbl - ' ||l_dtls_quantity_tbl(j));
813 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_srl_no_tbl - ' ||l_dtls_srl_no_tbl(j));
814 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_item_name_tbl - ' ||l_dtls_item_name_tbl(j));
815 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_item_desc_tbl - ' ||l_dtls_item_desc_tbl(j));
816 --Added by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
817 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_pos_ref_his_tbl - ' ||l_dtls_pos_ref_his_tbl(j));
818 END IF;
819
820 IF (p_concurrent_flag = 'Y') THEN
821 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Fetch Forecast Counter Value for Node in Context --');
822 END IF;
823
824 AHL_UMP_PROCESSUNIT_PVT.Get_Forecasted_Counter_Values(
825 x_return_status => l_return_status,
826 x_msg_data => l_msg_data,
827 x_msg_count => l_msg_count,
828 p_init_msg_list => FND_API.G_FALSE,
829 p_csi_item_instance_id => l_dtls_subject_id_tbl(j),
830 p_forecasted_date => l_fs_arrival_date_tbl(i),
831 x_counter_values_tbl => l_ctr_values_tbl);
832
833 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
834 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
835 fnd_log.string(fnd_log.level_statement,l_full_name,'Called API AHL_UMP_PROCESSUNIT_PVT.Get_Forecasted_Counter_Values Errored');
836 END IF;
837 IF (p_concurrent_flag = 'Y') THEN
838 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Error in getting Forecasted Counter Value for Node in Context --');
839 END IF;
840 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
841 END IF;
842
843 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
844 fnd_log.string(fnd_log.level_statement,l_full_name,'Called API AHL_UMP_PROCESSUNIT_PVT.Get_Forecasted_Counter_Values After');
845 fnd_log.string(fnd_log.level_statement,l_full_name,'l_ctr_values_tbl - COUNT - '||l_ctr_values_tbl.COUNT);
846 fnd_log.string(fnd_log.level_statement,l_full_name,'l_return_status - '||l_return_status);
847 fnd_log.string(fnd_log.level_statement,l_full_name,'l_msg_data - '||l_msg_data);
848 fnd_log.string(fnd_log.level_statement,l_full_name,'l_msg_count - '||l_msg_count);
849
850 IF (fnd_msg_pub.count_msg > 0 ) THEN
851
852 FOR msg IN 1..fnd_msg_pub.count_msg LOOP
853
854 fnd_msg_pub.get(p_msg_index => msg,
855 p_encoded => FND_API.G_FALSE,
856 p_data => l_msg_data,
857 p_msg_index_out => l_msg_index_out);
858
859 fnd_log.string(fnd_log.level_statement,l_full_name,'UMP Returned - '||l_msg_data);
860
861 END LOOP;
862
863 END IF;
864
865 IF l_ctr_values_tbl.COUNT > 0 THEN
866 FOR u in l_ctr_values_tbl.FIRST .. l_ctr_values_tbl.LAST LOOP
867 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Returned From Get_Forecasted_Counter_Values - COUNTER_ID - '||l_ctr_values_tbl(u).COUNTER_ID);
868 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Returned From Get_Forecasted_Counter_Values - COUNTER_NAME - '||l_ctr_values_tbl(u).COUNTER_NAME);
869 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Returned From Get_Forecasted_Counter_Values - COUNTER_VALUE - '||l_ctr_values_tbl(u).COUNTER_VALUE);
873 fnd_log.string(fnd_log.level_statement,l_full_name,' - Deriving Active Counters - ');
870 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Returned From Get_Forecasted_Counter_Values - UOM_CODE - '||l_ctr_values_tbl(u).UOM_CODE);
871 END LOOP;
872 END IF;
874 END IF;
875
876 IF (p_concurrent_flag = 'Y') THEN
877 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Ater fetching the Foprecast Counter details for instance in context --');
878 END IF;
879
880 -- To hold the counter values.
881 -- Structure of l_ctr_values_tbl is
882 -- COUNTER_ID NUMBER
883 -- COUNTER_NAME VARCHAR2(80)
884 -- UOM_CODE VARCHAR2(3)
885 -- COUNTER_VALUE NUMBER
886
887 -- The below logic is as such ::::
888 -- Loop for Setup Counter Data -- A
889 -- For Each Since New/Since Overhaul in Setup Data Loop for Ctr Values returned from UMP API. -- B
890 -- If Since Overhaul counter value matches
891 -- retrieve corresponding ctr data returned from UMP API
892 -- Exit to Outer Loop - A
893 -- Elsif Since New counter value matches
894 -- retrieve corresponding ctr data returned from UMP API
895 -- Continue with inner loop - B
896 -- end if;
897 -- end loop; -- B
898 -- Increment counter assignment index and continue with outer loop
899 -- End Loop; - A
900
901 IF (p_concurrent_flag = 'Y') THEN
902 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Deriving Active Counters for the Item Instance - BEFORE -');
903 END IF;
904
905 IF (l_since_new_ctr_id_tbl.COUNT > 0 AND l_ctr_values_tbl.COUNT > 0) THEN
906 FOR m in l_since_new_ctr_id_tbl.FIRST .. l_since_new_ctr_id_tbl.LAST LOOP
907 FOR n in l_ctr_values_tbl.FIRST .. l_ctr_values_tbl.LAST LOOP
908
909 -- Fetching Corresponding Counter Template Id for the Counter Id Passed.
910 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
911 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_ctr_values_tbl.COUNTER_ID --- '||n||' - ' || l_ctr_values_tbl(n).COUNTER_ID);
912 END IF;
913
914 BEGIN
915 -- Bug Fix for 5296759
916 SELECT CREATED_FROM_COUNTER_TMPL_ID
917 INTO l_ctr_template_id
918 FROM csi_counters_vl
919 WHERE counter_id = l_ctr_values_tbl(n).COUNTER_ID
920 AND ( (CREATED_FROM_COUNTER_TMPL_ID IN (SELECT SINCE_NEW_COUNTER_ID
921 FROM AHL_RA_CTR_ASSOCIATIONS))
922 OR ( CREATED_FROM_COUNTER_TMPL_ID IN (SELECT SINCE_OVERHAUL_COUNTER_ID
923 FROM AHL_RA_CTR_ASSOCIATIONS)
924 AND EXISTS (SELECT 1
925 FROM CSI_COUNTER_READINGS
926 WHERE COUNTER_ID = l_ctr_values_tbl(n).COUNTER_ID
927 AND NET_READING IS NOT NULL
928 AND DISABLED_FLAG = 'N')
929 )
930 );
931
932 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
933 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_ctr_template_id --- '||l_ctr_template_id);
934 END IF;
935
936 EXCEPTION
937 WHEN OTHERS THEN
938 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
939 fnd_log.string(fnd_log.level_statement,l_full_name,' --- CSI Data Not Retrieved --- ');
940 END IF;
941 l_ctr_template_id := NULL;
942 NULL;
943 END;
944
945 IF l_ctr_template_id IS NOT NULL THEN
946 -- l_ctr_template_id can be NULL if
947 -- a. it is not defined as a since new counter
948 -- b. it is defined as a since overhaul counter but the counter reading is NULL
949
950 IF (l_since_oh_ctr_id_tbl(m) = l_ctr_template_id) THEN
954 l_active_ctr_value_tbl(l_ctr_index) := l_ctr_values_tbl(n).COUNTER_VALUE;
951 l_active_ctr_id_tbl(l_ctr_index) := l_ctr_values_tbl(n).COUNTER_ID;
952 l_active_ctr_temp_id_tbl(l_ctr_index) := l_ctr_template_id;
953 l_active_ctr_name_tbl(l_ctr_index) := l_ctr_values_tbl(n).COUNTER_NAME;
955 l_active_uom_code_tbl(l_ctr_index) := l_ctr_values_tbl(n).UOM_CODE;
956 EXIT; -- To outer Loop for Since New / Since Overhaul Counters
957 ELSIF (l_since_new_ctr_id_tbl(m) = l_ctr_template_id) THEN
958 l_active_ctr_id_tbl(l_ctr_index) := l_ctr_values_tbl(n).COUNTER_ID;
959 l_active_ctr_temp_id_tbl(l_ctr_index) := l_ctr_template_id;
960 l_active_ctr_name_tbl(l_ctr_index) := l_ctr_values_tbl(n).COUNTER_NAME;
961 l_active_ctr_value_tbl(l_ctr_index) := l_ctr_values_tbl(n).COUNTER_VALUE;
962 l_active_uom_code_tbl(l_ctr_index) := l_ctr_values_tbl(n).UOM_CODE;
963 END IF;
964
965 END IF;
966
967 END LOOP; -- For l_ctr_values_tbl -- n
968 l_ctr_index := l_ctr_index + 1; -- l_ctr_index is reset for each item instance
969 END LOOP; -- For l_since_new_ctr_id_tbl -- m
970
971 IF (p_concurrent_flag = 'Y') THEN
972 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Deriving Active Counters for the Item Instance - AFTER -');
973 END IF;
974
975 -- Active Counters are derived and Processing starts.
976 IF (l_active_ctr_id_tbl.COUNT > 0) THEN
977 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
978 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_active_ctr_id_tbl --- '||l_active_ctr_id_tbl.COUNT);
979 END IF;
980 FOR g in l_active_ctr_id_tbl.FIRST .. l_active_ctr_id_tbl.LAST LOOP
981 IF l_active_ctr_id_tbl.EXISTS(g) THEN
982 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
983 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_active_ctr_id_tbl --- '||g||' - ' || l_active_ctr_id_tbl(g));
984 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_active_ctr_temp_id_tbl --- '||g||' - ' || l_active_ctr_temp_id_tbl(g));
985 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_active_ctr_name_tbl --- '||g||' - ' || l_active_ctr_name_tbl(g));
986 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_active_ctr_value_tbl --- '||g||' - ' || l_active_ctr_value_tbl(g));
987 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_active_uom_code_tbl --- '||g||' - ' || l_active_uom_code_tbl(g));
988 END IF;
989 END IF;
990 END LOOP;
991
992 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
993 fnd_log.string(fnd_log.level_statement,l_full_name,' --- Bulk Fetching MTBF DATA --- ');
994 fnd_log.string(fnd_log.level_statement,l_full_name,' --- Position Reference --- '||l_dtls_pos_ref_tbl(j));
995 fnd_log.string(fnd_log.level_statement,l_full_name,' --- Item Id --- '||l_dtls_inv_item_id_tbl(j));
996 fnd_log.string(fnd_log.level_statement,l_full_name,' --- Item Org Id --- '||l_dtls_inv_master_org_id_tbl(j));
997 fnd_log.string(fnd_log.level_statement,l_full_name,' --- Item Revision --- '||l_dtls_inv_revision_tbl(j));
998 --Added by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
999 fnd_log.string(fnd_log.level_statement,l_full_name,' --- Pos Reference for Historical Flow --- ' ||l_dtls_pos_ref_his_tbl(j));
1000 END IF;
1001 IF (p_concurrent_flag = 'Y') THEN
1002 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Deriving MTBF Data for Active Counter if present - BEFORE -');
1003 END IF;
1004
1005 OPEN c_get_mtbf_data(l_dtls_pos_ref_tbl(j),
1006 l_dtls_inv_item_id_tbl(j),
1007 l_dtls_inv_master_org_id_tbl(j),
1008 l_dtls_inv_revision_tbl(j));
1009 FETCH c_get_mtbf_data
1010 BULK COLLECT INTO l_mtbf_ctr_id_tbl,
1011 l_mtbf_value_tbl;
1012 IF l_mtbf_ctr_id_tbl.COUNT = 0 THEN
1013 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1014 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- MTBF SETUP DATA IS NOT DEFINED ----');
1015 END IF;
1016 l_mtbf_data_defined := 'N';
1017 ELSE
1021 l_mtbf_data_defined := 'Y';
1018 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1019 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- MTBF SETUP DATA IS DEFINED ----');
1020 END IF;
1022 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1023 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_mtbf_ctr_id_tbl --COUNT-- '||l_mtbf_ctr_id_tbl.COUNT);
1024 FOR a in l_mtbf_ctr_id_tbl.FIRST .. l_mtbf_ctr_id_tbl.LAST LOOP
1025 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_mtbf_ctr_id_tbl --- '||l_mtbf_ctr_id_tbl(a));
1026 fnd_log.string(fnd_log.level_statement,l_full_name,' --- l_mtbf_value_tbl --- '||l_mtbf_value_tbl(a));
1027 END LOOP;
1028 END IF;
1029 END IF;
1030 CLOSE c_get_mtbf_data;
1031
1032 IF (p_concurrent_flag = 'Y') THEN
1033 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Deriving MTBF Data for Active Counter if present - BEFORE -');
1034 END IF;
1035
1036 IF l_mtbf_data_defined = 'Y' THEN
1037 -- Compare Current Counter Value of Item with MTBF data defined for the corresponding Counter
1038 -- If Value Exceeds, Derive the Forecast Designator using the Forecast Association Setup
1039
1040 IF (p_concurrent_flag = 'Y') THEN
1041 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Check in Ctr Value Exceeds MTBF Value');
1042 END IF;
1043
1044 FOR r in l_active_ctr_temp_id_tbl.FIRST .. l_active_ctr_temp_id_tbl.LAST LOOP
1045 IF l_active_ctr_temp_id_tbl.EXISTS(r) THEN
1046 IF l_mtbf_ctr_id_tbl.COUNT > 0 THEN -- Fall Safe case -- Never to be false
1047 FOR s in l_mtbf_ctr_id_tbl.FIRST .. l_mtbf_ctr_id_tbl.LAST LOOP
1048 IF (l_active_ctr_temp_id_tbl(r) = l_mtbf_ctr_id_tbl(s) AND
1049 l_active_ctr_value_tbl(r) >= l_mtbf_value_tbl(s)) THEN
1050 l_mtbf_value_exceeds := 'Y';
1051 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1052 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- MTBF VALUE EXCEEDS ----');
1053 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- l_active_ctr_temp_id_tbl ----'||l_active_ctr_temp_id_tbl(r));
1054 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- l_active_ctr_value_tbl ----'||l_active_ctr_value_tbl(r));
1055 END IF;
1056 EXIT;
1057 END IF;
1058 END LOOP;
1059 END IF;
1060 EXIT WHEN l_mtbf_value_exceeds = 'Y';
1061 END IF;
1062 END LOOP;
1063
1064 IF l_mtbf_value_exceeds = 'Y' THEN
1065
1066 IF (p_concurrent_flag = 'Y') THEN
1067 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- MTBF Defined - Fetching Forecast Designator - BEFORE');
1068 END IF;
1069
1070 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1071 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- MTBF SETUP DATA IS DEFINED --VALUE EXCEEDS--');
1072 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- Deriving Fct Designator ----');
1073 END IF;
1074
1075 BEGIN
1076 Select FORECAST_DESIGNATOR
1077 into l_fct_designator
1078 from AHL_RA_FCT_ASSOCIATIONS
1079 where ASSOCIATION_TYPE_CODE = 'ASSOC_MTBF'
1080 and ORGANIZATION_ID = l_fs_arr_org_id_tbl(i);
1081
1082 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1083 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- Derived Fct Designator ----'||l_fct_designator);
1084 END IF;
1085
1086 l_prob_value := 100;
1087
1088 EXCEPTION
1089 WHEN NO_DATA_FOUND THEN
1090 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1091 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- No Fct Designator Defined ----');
1095 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1092 END IF;
1093 l_fct_designator := null;
1094 WHEN TOO_MANY_ROWS THEN
1096 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- TOO_MANY_ROWS EXEC BLOCK -M- ORG_ID ----- '||l_fs_arr_org_id_tbl(i));
1097 END IF;
1098 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
1099 WHEN OTHERS THEN
1100 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1101 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- OTHERS EXEC BLOCK -M- ORG_ID ----- '||l_fs_arr_org_id_tbl(i));
1102 END IF;
1103 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
1104 END;
1105
1106 IF (p_concurrent_flag = 'Y') THEN
1107 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- MTBF Defined - Fetching Forecast Designator - AFTER ');
1108 END IF;
1109 ELSE
1110 l_fct_designator := null;
1111 IF (p_concurrent_flag = 'Y') THEN
1112 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Ctr Value Does not Exceed MTBF Value');
1113 END IF;
1114 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1115 fnd_log.string(fnd_log.level_statement,l_full_name,'RA Analyser Process ---- Ctr Value Does not Exceed MTBF Value');
1116 END IF;
1117 END IF;
1118
1119 ELSIF l_mtbf_data_defined = 'N' THEN
1120 -- Derive Probability of Failure of the Item using the Part Removal Data of the item.
1121 -- Derive this Probabilty for each Counter Assigned to the Item
1122 -- Derive the Forecast Designator using the Forecast Association Setup using the highest value
1123 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1124 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- MTBF SETUP DATA IS NOT DEFINED --Processing--');
1125 END IF;
1126 IF (p_concurrent_flag = 'Y') THEN
1127 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- MTBF Not Defined - Fetching Path Positions Ids for Instance - BEFORE');
1128 END IF;
1129
1130 --Modified by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
1131 --OPEN c_get_path_postions(l_dtls_pos_ref_tbl(j));
1132 OPEN c_get_path_postions(l_dtls_pos_ref_his_tbl(j));-- Derive all Path Positions for the Position Reference
1133 FETCH c_get_path_postions
1134 BULK COLLECT INTO l_path_position_id_tbl;
1135 IF l_path_position_id_tbl.COUNT = 0 THEN
1136 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1137 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- NO CORRESPONDING PATH POSITIONS FOUND ----');
1138 END IF;
1139 l_path_pos_exist_flag := 'N';
1140 ELSE
1141 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1142 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- CORRESPONDING PATH POSITIONS RETRIEVED ----');
1143 FOR pos_index in l_path_position_id_tbl.FIRST .. l_path_position_id_tbl.LAST LOOP
1144 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- l_path_position_id_tbl ----'||l_path_position_id_tbl(pos_index));
1145 END LOOP;
1146 END IF;
1147 l_path_pos_exist_flag := 'Y';
1148 END IF;
1149 CLOSE c_get_path_postions;
1150
1151 IF (p_concurrent_flag = 'Y') THEN
1152 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- MTBF Not Defined - Fetching Path Positions Ids for Instance - After');
1153 END IF;
1154
1155 IF l_path_pos_exist_flag = 'Y' THEN -- If NO then Move to Next Instance in Else Part
1156
1157 IF (p_concurrent_flag = 'Y') THEN
1158 fnd_file.put_line(fnd_file.log, 'Deriving Probability of Failure for Each Active Counter of Item Instance');
1159 END IF;
1160
1161 FOR p in l_active_ctr_id_tbl.FIRST .. l_active_ctr_id_tbl.LAST LOOP
1165 fnd_log.string(fnd_log.level_statement,l_full_name,' ----Active Counter Value -- A --'||l_active_ctr_value_tbl(p));
1162 IF l_active_ctr_id_tbl.EXISTS(p) THEN
1163 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1164 fnd_log.string(fnd_log.level_statement,l_full_name,' ----Looping for active counters --'||l_active_ctr_id_tbl(p));
1166 END IF;
1167
1168 l_prob_attrib_a := 0; -- Indicates Current Value of Counter
1169 l_prob_attrib_b := 0; -- Number of items per position that failed with counter values less than or equal to A from CMRO's unscheduled removals
1170 l_prob_attrib_c := 0; -- Total number of failed item per position that match the defined removal codes and status
1171 l_prob_attrib_d := 0; -- Number of installed serviceable items per position with current counter values > A
1172 l_prob_value_tmp := 0;
1173
1174 -- Note for B and C
1175 -- They have to be derived individually for each position path id mapped to the
1176 -- postion reference and then summed up to get the final values.
1177
1178 l_prob_attrib_a := l_active_ctr_value_tbl(p);
1179
1180 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1181 fnd_log.string(fnd_log.level_statement,l_full_name,' ----deriving l_prob_attrib_c_tmp ----');
1182 END IF;
1183
1184 IF l_path_position_id_tbl.COUNT > 0 THEN -- This should always be true due to l_path_pos_exist_flag = 'Y' check above
1185 FOR q in l_path_position_id_tbl.FIRST .. l_path_position_id_tbl.LAST LOOP
1186 -- These tmp variables store the Removal History Data for Each Path Position
1187 -- They are summed into l_prob_attrib_b and l_prob_attrib_c
1188 l_prob_attrib_b_tmp := 0;
1189 l_prob_attrib_c_tmp := 0;
1190
1191 IF (p_concurrent_flag = 'Y') THEN
1192 fnd_file.put_line(fnd_file.log, 'Deriving Attrib B and C for Each Path Position id mappip to Item Relationship Id');
1193 END IF;
1194
1195 -- For deriving l_prob_attrib_c_tmp
1196 Select count(*)
1197 into l_prob_attrib_c_tmp
1198 from (Select chg.removed_instance_id
1199 from ahl_part_changes chg,
1200 csi_item_instances cii,
1201 ahl_prd_dispositions_b dis
1202 where chg.part_change_type IN ('R','S')
1203 and chg.part_change_id = dis.part_change_id
1204 and chg.removal_code in (Select Removal_Code from AHL_RA_SETUPS where setup_code = 'REMOVAL_CODE')
1205 and dis.condition_id in (Select Status_Id from AHL_RA_SETUPS where setup_code = 'ITEM_STATUS')
1206 and chg.mc_relationship_id = to_number(l_path_position_id_tbl(q))
1207 AND cii.instance_id = chg.removed_instance_id
1208 AND cii.inventory_item_id = l_dtls_inv_item_id_tbl(j)
1209 AND cii.inv_master_organization_id = l_dtls_inv_master_org_id_tbl(j)) query_c;
1210
1211 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1212 fnd_log.string(fnd_log.level_statement,l_full_name,' ----derived l_prob_attrib_c_tmp ----' || l_prob_attrib_c_tmp);
1213 fnd_log.string(fnd_log.level_statement,l_full_name,' ----deriving l_prob_attrib_b_tmp ----');
1214 END IF;
1215
1216 -- For deriving l_prob_attrib_b_tmp
1217 -- If l_prob_attrib_c_tmp = 0, it indicates that part removal history contains no data
1218 -- irrespective of counter values -- so no need to derive l_prob_attrib_b_tmp
1219 IF l_prob_attrib_c_tmp > 0 THEN
1220
1221 Select count(*)
1222 into l_prob_attrib_b_tmp
1223 from (Select chg.removed_instance_id
1224 ,ctr.net_reading
1225 from ahl_part_changes chg,(Select assoc.source_object_id,
1229 from csi_counter_associations assoc,
1226 cv.net_reading,
1227 cv.VALUE_TIMESTAMP,
1228 cv.counter_id
1230 csi_counter_readings cv,
1231 csi_counters_vl cb1,
1232 csi_counters_vl cb2
1233 where assoc.source_object_code = 'CP'
1234 and assoc.counter_id = cb2.counter_id
1235 and cb1.counter_id = l_active_ctr_id_tbl(p)
1236 and cb1.CREATED_FROM_COUNTER_TMPL_ID = cb2.CREATED_FROM_COUNTER_TMPL_ID
1237 and cv.counter_id = cb2.counter_id
1238 AND cv.disabled_flag = 'N') ctr,
1239 csi_item_instances cii,
1240 ahl_prd_dispositions_b dis
1241 where chg.part_change_type IN ('R','S')
1242 and chg.part_change_id = dis.part_change_id
1243 AND chg.removed_instance_id = ctr.source_object_id
1244 and chg.removal_code in (Select Removal_Code from AHL_RA_SETUPS where setup_code = 'REMOVAL_CODE')
1245 and dis.condition_id in (Select Status_Id from AHL_RA_SETUPS where setup_code = 'ITEM_STATUS')
1246 and chg.mc_relationship_id = to_number(l_path_position_id_tbl(q))
1247 AND ctr.value_timestamp = (Select max(maxcv.value_timestamp)
1248 from csi_counter_readings maxcv
1249 where ctr.counter_id = maxcv.counter_id
1250 and trunc(maxcv.value_timestamp) <= trunc(chg.REMOVAL_DATE))
1251 AND cii.instance_id = chg.removed_instance_id
1252 AND cii.inventory_item_id = l_dtls_inv_item_id_tbl(j)
1253 AND cii.inv_master_organization_id = l_dtls_inv_master_org_id_tbl(j)) query_b
1254 where l_prob_attrib_a > query_b.net_reading;
1255
1256 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1257 fnd_log.string(fnd_log.level_statement,l_full_name,' ----derived l_prob_attrib_b_tmp as ----'||l_prob_attrib_b_tmp);
1258 END IF;
1259
1260 ELSE
1261
1262 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1263 fnd_log.string(fnd_log.level_statement,l_full_name,' ----derived l_prob_attrib_b_tmp as 0 since l_prob_attrib_c is 0 ----');
1264 END IF;
1265
1266 IF (p_concurrent_flag = 'Y') THEN
1267 fnd_file.put_line(fnd_file.log, 'Setting Attrib B to 0 as C is also 0');
1268 END IF;
1269
1270 l_prob_attrib_b_tmp := 0;
1271 END IF;
1272
1273 IF (p_concurrent_flag = 'Y') THEN
1274 fnd_file.put_line(fnd_file.log, 'Summing Up B and C retrieved for Each Path Position Id');
1275 END IF;
1276
1277 l_prob_attrib_b := l_prob_attrib_b + l_prob_attrib_b_tmp;
1278 l_prob_attrib_c := l_prob_attrib_c + l_prob_attrib_c_tmp;
1279
1280 END LOOP; -- l_path_position_id_tbl -- q
1281
1282 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1283 fnd_log.string(fnd_log.level_statement,l_full_name,' ----deriving l_prob_attrib_d_tmp ----');
1284 END IF;
1285 IF (p_concurrent_flag = 'Y') THEN
1286 fnd_file.put_line(fnd_file.log, 'Derive Attribute D for Probability');
1287 END IF;
1288
1292 FROM csi_ii_relationships CIIR,
1289 -- For deriving l_prob_attrib_d
1290 SELECT count(*)
1291 INTO l_prob_attrib_d
1293 csi_item_instances cii,
1294 (SELECT assoc.source_object_id,
1295 cv.net_reading,
1296 cv.VALUE_TIMESTAMP
1297 FROM csi_counter_associations assoc,
1298 csi_counter_readings cv,
1299 csi_counters_vl cb1,
1300 csi_counters_vl cb2
1301 WHERE assoc.source_object_code = 'CP'
1302 AND assoc.counter_id = cb2.counter_id
1303 AND cb1.counter_id = l_active_ctr_id_tbl(p)
1304 AND cb1.CREATED_FROM_COUNTER_TMPL_ID = cb2.CREATED_FROM_COUNTER_TMPL_ID
1305 AND cv.counter_id = cb2.counter_id
1306 AND cv.value_timestamp = (Select max(value_timestamp)
1307 from csi_counter_readings maxcv
1308 where cv.counter_id = maxcv.counter_id)
1309 AND cv.disabled_flag = 'N') ctr
1310 WHERE cii.instance_id = CIIR.subject_id
1311 AND CII.INVENTORY_ITEM_ID = l_dtls_inv_item_id_tbl(j)
1312 AND CII.inv_master_organization_id = l_dtls_inv_master_org_id_tbl(j)
1313 --Modified by mpothuku on 09-Nov-2006 for fixing the Bug# 5651645
1314 --AND ciir.position_reference = l_dtls_pos_ref_tbl(j)
1315 AND ciir.position_reference = l_dtls_pos_ref_his_tbl(j)
1316 AND ctr.net_reading > l_prob_attrib_a
1317 AND ctr.source_object_id = cii.instance_id -- CIIR.subject_id -- Perf Fix 4777658
1318 AND ciir.relationship_type_code = 'COMPONENT-OF'
1319 AND TRUNC(NVL(CIIR.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
1320 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIR.ACTIVE_END_DATE,SYSDATE+1));
1321
1322 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1323 fnd_log.string(fnd_log.level_statement,l_full_name,' ----derived l_prob_attrib_d as ----'|| l_prob_attrib_d);
1324 END IF;
1325
1326 IF (p_concurrent_flag = 'Y') THEN
1327 fnd_file.put_line(fnd_file.log, 'Derive Probability using B C and D');
1328 END IF;
1329
1330 IF ((l_prob_attrib_c + l_prob_attrib_d) > 0) THEN
1331 l_prob_value_tmp := (l_prob_attrib_b)/(l_prob_attrib_c + l_prob_attrib_d);
1332 l_prob_value_tmp := l_prob_value_tmp * 100;
1333 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1334 fnd_log.string(fnd_log.level_statement,l_full_name,' ----denom > 0 .. compute temp prob ----'||l_prob_value_tmp);
1335 END IF;
1336 ELSE
1337 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1338 fnd_log.string(fnd_log.level_statement,l_full_name,' ----denom = 0 .. set temp prob to 0----');
1339 END IF;
1340 l_prob_value_tmp := 0;
1341 END IF;
1342
1343 IF (p_concurrent_flag = 'Y') THEN
1344 fnd_file.put_line(fnd_file.log, 'Retain Probability if Higher than Previous Value');
1345 END IF;
1346
1347 IF l_prob_value_tmp > l_prob_value THEN
1348 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1349 fnd_log.string(fnd_log.level_statement,l_full_name,' ----higher value of prob found .. Set final value ----'||l_prob_value_tmp);
1350 END IF;
1351 l_prob_value := l_prob_value_tmp;
1352 IF (p_concurrent_flag = 'Y') THEN
1353 fnd_file.put_line(fnd_file.log, 'Retained Probability');
1354 END IF;
1355 END IF;
1359 fnd_log.string(fnd_log.level_statement,l_full_name,' ----No Path Position Found -- so ----');
1356 ELSE -- l_path_position_id_tbl.COUNT = 0
1357 -- This should never be true due to l_path_pos_exist_flag = 'Y' check above
1358 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1360 fnd_log.string(fnd_log.level_statement,l_full_name,' ----Exit Counter Loop Jump to Next Item ----');
1361 fnd_log.string(fnd_log.level_statement,l_full_name,' ----This Code Should not be executed -- Extra redundant check ----');
1362 END IF;
1363 IF (p_concurrent_flag = 'Y') THEN
1364 fnd_file.put_line(fnd_file.log, ' ----No Path Position Found -- so ----');
1365 fnd_file.put_line(fnd_file.log, ' ----Exit Counter Loop Jump to Next Item ----');
1366 END IF;
1367 EXIT;
1368 END IF; -- l_path_position_id_tbl.COUNT > 0
1369 END IF; -- l_active_ctr_id_tbl.EXISTS(p)
1370 END LOOP; -- l_active_ctr_id_tbl -- p --
1371
1372 -- Derive Forecast Designator from the forecast association setup data
1373 -- for the Probability Data
1374 -- The Fetch for Forecast Designator is Unconditional because of the assumption
1375 -- that the user may also define a Forecast Association for zero probability.
1376 IF l_path_position_id_tbl.COUNT > 0 THEN -- redundant check -- for readability
1377
1378 --Fix for the Bug 5480658, Added by mpothuku on 28th August, 06
1379 --If the probability is derived as zero, the record should not be interfaced
1380 --irrespective of whether a FD for zero is defined.
1381 IF l_prob_value > 0 THEN
1382
1383 BEGIN
1384 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1385 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- Deriving Fct Designator -- for historical--');
1386 END IF;
1387 IF (p_concurrent_flag = 'Y') THEN
1388 fnd_file.put_line(fnd_file.log, ' ----No MTBF Data Found -- Retreive Forecast Designator ----');
1389 END IF;
1390 Select FORECAST_DESIGNATOR
1391 into l_fct_designator
1392 from AHL_RA_FCT_ASSOCIATIONS
1393 where ASSOCIATION_TYPE_CODE = 'ASSOC_HISTORICAL'
1394 and PROBABILITY_FROM <= l_prob_value
1395 and ( PROBABILITY_TO > l_prob_value
1399 WHEN NO_DATA_FOUND THEN
1396 OR (l_prob_value = 100 AND PROBABILITY_TO >= l_prob_value))
1397 and ORGANIZATION_ID = l_fs_arr_org_id_tbl(i);
1398 EXCEPTION
1400 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1401 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- No Fct Designator Defined ----');
1402 END IF;
1403 IF (p_concurrent_flag = 'Y') THEN
1404 fnd_file.put_line(fnd_file.log, ' ----No MTBF Data Found -- No Forecast Designator Found ----');
1405 END IF;
1406 l_fct_designator := null;
1407 WHEN TOO_MANY_ROWS THEN
1408 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1409 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- TOO_MANY_ROWS EXEC BLOCK -H- ORG_ID ----- '||l_fs_arr_org_id_tbl(i));
1410 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- TOO_MANY_ROWS EXEC BLOCK -H- l_prob_value ----- '||l_prob_value);
1411 END IF;
1412 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
1413 WHEN OTHERS THEN
1414 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1415 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- OTHERS EXEC BLOCK -H- ORG_ID ----- '||l_fs_arr_org_id_tbl(i));
1416 fnd_log.string(fnd_log.level_statement,l_full_name,' ----- OTHERS EXEC BLOCK -H- l_prob_value ----- '||l_prob_value);
1417 END IF;
1418 Raise FND_API.G_EXC_UNEXPECTED_ERROR;
1419 END;
1420 ELSE
1421 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1422 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- l_prob_value -- for historical--'||l_prob_value);
1423 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- Since the derived Prob Value is Zero -- Assigning null to l_fct_designator--');
1424 END IF;
1425 l_fct_designator := null;
1426 END IF; --IF l_prob_value > 0
1427
1428 ELSE -- This Code Should not be executed -- Extra redundant check
1429 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1430 fnd_log.string(fnd_log.level_statement,l_full_name,' ----No Path Position Found -- so ----');
1434 IF (p_concurrent_flag = 'Y') THEN
1431 fnd_log.string(fnd_log.level_statement,l_full_name,' ----Set Fct Assoc Designator to NULL and Continue ----');
1432 fnd_log.string(fnd_log.level_statement,l_full_name,' ----This Code Should not be executed -- Extra redundant check ----');
1433 END IF;
1435 fnd_file.put_line(fnd_file.log, ' ----No Path Position Found -- so ----');
1436 fnd_file.put_line(fnd_file.log, ' ----Set Fct Assoc Designator to NULL and Continue ----');
1437 END IF;
1438 l_fct_designator := null;
1439 END IF;
1440 ELSE
1441 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1442 fnd_log.string(fnd_log.level_statement,l_full_name,' ----No Path Position Found -- First Check -- so bypass ----');
1443 fnd_log.string(fnd_log.level_statement,l_full_name,' ----Set Fct Assoc Designator to NULL and Continue ----');
1444 END IF;
1445 IF (p_concurrent_flag = 'Y') THEN
1446 fnd_file.put_line(fnd_file.log, ' ----No Path Position Found -- First Check -- so bypass ----');
1447 END IF;
1448 l_fct_designator := null;
1449 END IF; -- l_path_pos_exist_flag = 'Y'
1450 END IF; -- l_mtbf_data_defined -- Y or N
1451
1452 IF l_fct_designator IS NOT NULL THEN
1453 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1454 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Prepare IO Interface Data -- ');
1455 fnd_log.string(fnd_log.level_statement,l_full_name,' -- l_fct_designator -- ' || l_fct_designator);
1456 END IF;
1457 IF (p_concurrent_flag = 'Y') THEN
1458 fnd_file.put_line(fnd_file.log, ' -- Preparing IO Interface Data -- ');
1459 END IF;
1460
1461 l_forecast_interface_tbl(l_fct_index).INVENTORY_ITEM_ID := l_dtls_inv_item_id_tbl(j);
1462 l_forecast_interface_tbl(l_fct_index).FORECAST_DESIGNATOR := l_fct_designator;
1463 l_forecast_interface_tbl(l_fct_index).ORGANIZATION_ID := l_fs_arr_org_id_tbl(i);
1464 l_forecast_interface_tbl(l_fct_index).FORECAST_DATE := l_fs_arrival_date_tbl(i);
1465 l_forecast_interface_tbl(l_fct_index).LAST_UPDATE_DATE := sysdate;
1469 l_forecast_interface_tbl(l_fct_index).LAST_UPDATE_LOGIN := fnd_global.LOGIN_ID;
1466 l_forecast_interface_tbl(l_fct_index).LAST_UPDATED_BY := fnd_global.USER_ID;
1467 l_forecast_interface_tbl(l_fct_index).CREATION_DATE := sysdate;
1468 l_forecast_interface_tbl(l_fct_index).CREATED_BY := fnd_global.USER_ID;
1470 l_forecast_interface_tbl(l_fct_index).QUANTITY := l_dtls_quantity_tbl(j);
1471 l_forecast_interface_tbl(l_fct_index).PROCESS_STATUS := 2;
1472 l_forecast_interface_tbl(l_fct_index).CONFIDENCE_PERCENTAGE := 100;
1473 l_forecast_interface_tbl(l_fct_index).COMMENTS := null;
1474 l_forecast_interface_tbl(l_fct_index).ERROR_MESSAGE := null;
1475 l_forecast_interface_tbl(l_fct_index).REQUEST_ID := null;
1476 l_forecast_interface_tbl(l_fct_index).PROGRAM_APPLICATION_ID := null;
1477 l_forecast_interface_tbl(l_fct_index).PROGRAM_ID := null;
1478 l_forecast_interface_tbl(l_fct_index).PROGRAM_UPDATE_DATE := null;
1479 l_forecast_interface_tbl(l_fct_index).WORKDAY_CONTROL := 3; -- shift backward.
1480 l_forecast_interface_tbl(l_fct_index).BUCKET_TYPE := 1;
1481 l_forecast_interface_tbl(l_fct_index).FORECAST_END_DATE := null;
1482 l_forecast_interface_tbl(l_fct_index).TRANSACTION_ID := null;
1483 l_forecast_interface_tbl(l_fct_index).SOURCE_CODE := 'RA-'||l_fs_unit_sch_id_tbl(i);
1484 l_forecast_interface_tbl(l_fct_index).SOURCE_LINE_ID := l_dtls_subject_id_tbl(j);
1485 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE1 := null;
1486 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE2 := null;
1487 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE3 := null;
1488 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE4 := null;
1489 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE5 := null;
1490 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE6 := null;
1491 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE7 := null;
1492 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE8 := null;
1493 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE9 := null;
1494 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE10 := null;
1495 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE11 := null;
1496 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE12 := null;
1497 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE13 := null;
1498 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE14 := null;
1499 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE15 := null;
1500 l_forecast_interface_tbl(l_fct_index).PROJECT_ID := null;
1501 l_forecast_interface_tbl(l_fct_index).TASK_ID := null;
1502 l_forecast_interface_tbl(l_fct_index).LINE_ID := null;
1503 l_forecast_interface_tbl(l_fct_index).ACTION := 'I';
1504 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE_CATEGORY := null;
1505
1506 IF (p_concurrent_flag = 'Y') THEN
1507 fnd_file.put_line(fnd_file.log, ' -- Preparing Designator Interface Data -- ');
1508 END IF;
1509 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1510 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Preparing Designator Interface Data -- ');
1511 END IF;
1512
1513 IF l_forecast_designator_tbl.COUNT > 0 THEN
1514 FOR d in l_forecast_designator_tbl.FIRST .. l_forecast_designator_tbl.LAST LOOP
1515 IF l_forecast_designator_tbl(d).FORECAST_DESIGNATOR = l_fct_designator THEN
1516 l_ds_rec_found := 'Y';
1517 IF (p_concurrent_flag = 'Y') THEN
1518 fnd_file.put_line(fnd_file.log, ' -- Designator already exists in Interface Data -- ');
1519 END IF;
1520 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1521 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Designator already exists in Interface Data -- ');
1522 END IF;
1523 EXIT;
1524 END IF;
1525 END LOOP;
1526 IF l_ds_rec_found = 'N' THEN
1530 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1527 IF (p_concurrent_flag = 'Y') THEN
1528 fnd_file.put_line(fnd_file.log, ' -- Designator does not exists in Interface Data -- ');
1529 END IF;
1531 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Designator does not exists in Interface Data -- ');
1532 END IF;
1533 l_forecast_designator_tbl(l_dsg_index).ORGANIZATION_ID := l_fs_arr_org_id_tbl(i);
1534 l_forecast_designator_tbl(l_dsg_index).FORECAST_DESIGNATOR := l_fct_designator;
1535 l_dsg_index := l_dsg_index + 1;
1536 END IF;
1537 ELSE
1538 IF (p_concurrent_flag = 'Y') THEN
1539 fnd_file.put_line(fnd_file.log, ' -- Inserting first rec in Designator Data -- ');
1540 END IF;
1541 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1542 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Insertinf first rec in Designator Data -- ');
1543 END IF;
1544 l_forecast_designator_tbl(l_dsg_index).ORGANIZATION_ID := l_fs_arr_org_id_tbl(i);
1545 l_forecast_designator_tbl(l_dsg_index).FORECAST_DESIGNATOR := l_fct_designator;
1546 l_dsg_index := l_dsg_index + 1;
1547 END IF;
1548
1549 -- Reset l_ds_rec_found as it is used for Dummy Recs below.
1550 l_ds_rec_found := 'N';
1551
1552 l_forecast_org_code_tbl(l_fct_index) := l_fs_org_code_tbl(i);
1553 l_forecast_srl_no_tbl(l_fct_index) := l_dtls_srl_no_tbl(j);
1554 l_forecast_item_name_tbl(l_fct_index):= l_dtls_item_name_tbl(j);
1555 l_forecast_item_desc_tbl(l_fct_index):= l_dtls_item_desc_tbl(j);
1556 l_forecast_req_prob_tbl(l_fct_index):= l_prob_value/100;
1557
1558 MSC_ATP_GLOBAL.Extend_ATP(l_atp_rec, x_return_status);
1559
1560 MSC_ATP_GLOBAL.GET_ATP_SESSION_ID(l_session_id,l_return_status);
1561
1562 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1563 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1564 fnd_log.string(fnd_log.level_statement,l_full_name,'Called API MSC_ATP_GLOBAL.GET_SESSION_ID U Errored');
1565 END IF;
1566 IF (p_concurrent_flag = 'Y') THEN
1567 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Error in getting on Session Id --');
1568 END IF;
1569 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1570 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
1571 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1572 fnd_log.string(fnd_log.level_statement,l_full_name,'Called API MSC_ATP_GLOBAL.GET_SESSION_ID E Errored');
1573 END IF;
1574 IF (p_concurrent_flag = 'Y') THEN
1575 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Error in getting on Session Id');
1576 END IF;
1577 RAISE FND_API.G_EXC_ERROR;
1578 END IF;
1579
1580 --Assign values to input record for ATP api.
1581 l_atp_rec.Inventory_Item_Id := Mrp_Atp_Pub.number_arr(l_dtls_inv_item_id_tbl(j));
1582 l_atp_rec.Organization_Id := Mrp_Atp_Pub.number_arr(l_fs_arr_org_id_tbl(i));
1583 l_atp_rec.Source_Organization_Id := Mrp_Atp_Pub.number_arr(l_fs_arr_org_id_tbl(i));
1584 l_atp_rec.Requested_Ship_Date := Mrp_Atp_Pub.date_arr(to_date(l_fs_arrival_date_tbl(i),'DD-MM-YYYY'));
1585 l_atp_rec.Quantity_Ordered := Mrp_Atp_Pub.number_arr(l_dtls_quantity_tbl(j));
1586 l_atp_rec.Quantity_UOM := Mrp_Atp_Pub.char3_arr(l_dtls_uom_tbl(j));
1587 l_atp_rec.Calling_Module := Mrp_Atp_Pub.number_arr(867);
1588 l_atp_rec.Action := Mrp_Atp_Pub.number_arr(100);
1589 l_atp_rec.override_flag := Mrp_Atp_Pub.char1_arr('N');
1590
1591 SELECT mrp_atp_schedule_temp_s.NEXTVAL
1592 INTO l_dummy_identifier
1593 from dual;
1594
1595 l_atp_rec.Identifier := Mrp_Atp_Pub.number_arr(l_dummy_identifier);
1596
1597 IF (p_concurrent_flag = 'Y') THEN
1598 fnd_file.put_line(fnd_file.log, ' - B - Calling ATP API -- ' || l_dtls_inv_item_id_tbl(j));
1602 END IF;
1599 END IF;
1600 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1601 fnd_log.string(fnd_log.level_statement,l_full_name,' -B- Calling ATP API -- ' || l_dtls_inv_item_id_tbl(j));
1603
1604 MRP_ATP_PUB.Call_ATP (l_session_id,
1605 l_atp_rec,
1606 x_atp_rec ,
1607 x_atp_supply_demand ,
1608 x_atp_period,
1609 x_atp_details,
1610 l_return_status,
1611 l_msg_data,
1612 l_msg_count
1613 );
1614
1615 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1616 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1617 fnd_log.string(fnd_log.level_statement,l_full_name,'Called API MRP_ATP_PUB.Call_ATP U Errored');
1618 END IF;
1619 IF (p_concurrent_flag = 'Y') THEN
1620 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Error in getting on Hand Quantity --' || l_session_id);
1621 END IF;
1622 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1623 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
1624 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1625 fnd_log.string(fnd_log.level_statement,l_full_name,'Called API MRP_ATP_PUB.Call_ATP E Errored');
1626 END IF;
1627 IF (p_concurrent_flag = 'Y') THEN
1628 fnd_file.put_line(fnd_file.log, 'RA Analyser Process ---- Error in getting on Hand Quantity --' || l_session_id);
1629 END IF;
1630 RAISE FND_API.G_EXC_ERROR;
1631 END IF;
1632
1633 IF (p_concurrent_flag = 'Y') THEN
1634 fnd_file.put_line(fnd_file.log, ' - A - Calling ATP API -- ' || x_atp_rec.Requested_Date_Quantity(1));
1635 END IF;
1636 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1637 fnd_log.string(fnd_log.level_statement,l_full_name,' -A- Calling ATP API -- ' || l_dtls_inv_item_id_tbl(j));
1638 END IF;
1639
1640 l_forecast_onhand_qty_tbl(l_fct_index) := nvl(x_atp_rec.Requested_Date_Quantity(1),0);
1641
1642 SELECT COUNT(*)
1643 INTO l_forecast_osp_qty_tbl(l_fct_index)
1644 FROM AHL_OSP_ORDER_LINES_V OSPL,
1645 AHL_OSP_ORDERS_B OSP
1646 WHERE OSPL.OSP_ORDER_ID = OSP.OSP_ORDER_ID
1647 AND OSP.STATUS_CODE <> 'CLOSED'
1648 AND INVENTORY_ITEM_ID = l_dtls_inv_item_id_tbl(j)
1649 AND OSPL.INVENTORY_ORG_ID= l_fs_arr_org_id_tbl(i)
1650 AND NVL(TRUNC(OSPL.NEED_BY_DATE), FND_API.G_MISS_DATE) = l_fs_arrival_date_tbl(i);
1651
1652 IF (p_concurrent_flag = 'Y') THEN
1653 fnd_file.put_line(fnd_file.log, ' - B - Deriving VWP Figure -- ');
1654 END IF;
1655 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1656 fnd_log.string(fnd_log.level_statement,l_full_name,' - B - Deriving VWP Figure -- ');
1657 fnd_log.string(fnd_log.level_statement,l_full_name,' - B - Param - Item ID -- '||l_dtls_inv_item_id_tbl(j));
1658 fnd_log.string(fnd_log.level_statement,l_full_name,' - B - Param - Item Org ID -- '||l_dtls_inv_master_org_id_tbl(j));
1662 END IF;
1659 fnd_log.string(fnd_log.level_statement,l_full_name,' - B - Param - Item Revision -- '||l_dtls_inv_revision_tbl(j));
1660 fnd_log.string(fnd_log.level_statement,l_full_name,' - B - Param - Arrival Org -- '||l_fs_arr_org_id_tbl(i));
1661 fnd_log.string(fnd_log.level_statement,l_full_name,' - B - Param - Arrival Date -- '||l_fs_arrival_date_tbl(i));
1663
1664 Select nvl(sum(nvl(QTY_GRP,0)),0) QTY
1665 INTO l_forecast_vwp_qty_tbl(l_fct_index)
1666 FROM (
1667 Select DISTINCT ITEM_INSTANCE AS ITEM_INSTANCE_GRP,
1668 VISIT_QUANTITY QTY_GRP
1669 From (
1670 -- Total Quantity from UC Tree in a Visit.
1671 SELECT CII.INSTANCE_ID AS ITEM_INSTANCE,
1672 CII.QUANTITY AS VISIT_QUANTITY
1673 FROM CSI_II_RELATIONSHIPS CIIR,
1674 CSI_ITEM_INSTANCES CII
1675 WHERE CII.INVENTORY_ITEM_ID = l_dtls_inv_item_id_tbl(j)
1676 AND CII.INV_MASTER_ORGANIZATION_ID = l_dtls_inv_master_org_id_tbl(j)
1677 AND nvl(CII.INVENTORY_REVISION,FND_API.G_MISS_CHAR) = nvl(l_dtls_inv_revision_tbl(j),FND_API.G_MISS_CHAR)
1678 AND CII.INSTANCE_ID = CIIR.SUBJECT_ID
1679 START WITH CIIR.OBJECT_ID IN (
1680 Select DISTINCT Visit.ITEM_INSTANCE_ID
1681 from AHL_VISITS_B Visit,
1682 AHL_SIMULATION_PLANS_B SPL
1683 Where Visit.unit_Schedule_id is NULL
1684 AND VISIT.STATUS_CODE NOT IN ('CLOSED', 'CANCELLED', 'DELETED')
1685 AND SPL.SIMULATION_PLAN_ID = VISIT.SIMULATION_PLAN_ID
1686 AND SPL.PRIMARY_PLAN_FLAG = 'Y'
1687 AND Visit.organization_id = l_fs_arr_org_id_tbl(i)
1688 AND l_fs_arrival_date_tbl(i) between TRUNC(Visit.START_DATE_TIME) AND TRUNC(Visit.CLOSE_DATE_TIME)
1689 )
1690 AND CIIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1691 AND TRUNC(NVL(CIIR.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
1692 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIR.ACTIVE_END_DATE,SYSDATE+1))
1693 CONNECT BY PRIOR CIIR.SUBJECT_ID = CIIR.OBJECT_ID
1694 AND CIIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1695 AND TRUNC(NVL(CIIR.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
1696 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIR.ACTIVE_END_DATE,SYSDATE+1))
1697
1698 UNION ALL
1699
1700 -- Total Quantity from Root Node of a Visit.
1701
1702 Select Visit.ITEM_INSTANCE_ID AS ITEM_INSTANCE,
1703 CII.QUANTITY AS VISIT_QUANTITY
1704 from AHL_VISITS_B Visit,
1708 AND VISIT.STATUS_CODE NOT IN ('CLOSED', 'CANCELLED', 'DELETED')
1705 AHL_SIMULATION_PLANS_B SPL,
1706 CSI_ITEM_INSTANCES CII
1707 Where Visit.unit_Schedule_id is NOT NULL
1709 AND SPL.SIMULATION_PLAN_ID = VISIT.SIMULATION_PLAN_ID
1710 AND SPL.PRIMARY_PLAN_FLAG = 'Y'
1711 AND Visit.organization_id = l_fs_arr_org_id_tbl(i)
1712 AND l_fs_arrival_date_tbl(i) between TRUNC(Visit.START_DATE_TIME) AND TRUNC(Visit.CLOSE_DATE_TIME)
1713 AND Visit.ITEM_INSTANCE_ID = CII.INSTANCE_ID
1714 AND CII.INVENTORY_ITEM_ID = l_dtls_inv_item_id_tbl(j)
1715 AND CII.INV_MASTER_ORGANIZATION_ID = l_dtls_inv_master_org_id_tbl(j)
1716 AND nvl(CII.INVENTORY_REVISION,FND_API.G_MISS_CHAR) = nvl(l_dtls_inv_revision_tbl(j),FND_API.G_MISS_CHAR)
1717
1718 UNION ALL
1719
1720 -- Total Quantity from Visit, which does not have a unit at the header level.
1721 -- Without Tree Reversal
1722 Select CII.INSTANCE_ID AS ITEM_INSTANCE,
1723 CII.QUANTITY AS VISIT_QUANTITY
1724 from AHL_VISIT_TASKS_B TASKS,
1725 AHL_VISITS_B Visit,
1726 AHL_SIMULATION_PLANS_B SPL,
1727 CSI_ITEM_INSTANCES CII
1728 Where Visit.VISIT_ID = TASKS.Visit_id
1729 AND VISIT.STATUS_CODE NOT IN ('CLOSED', 'CANCELLED', 'DELETED')
1730 AND SPL.SIMULATION_PLAN_ID = VISIT.SIMULATION_PLAN_ID
1731 AND SPL.PRIMARY_PLAN_FLAG = 'Y'
1732 AND Visit.unit_Schedule_id is NULL
1733 AND Visit.organization_id = l_fs_arr_org_id_tbl(i)
1734 AND l_fs_arrival_date_tbl(i) between TRUNC(Visit.START_DATE_TIME) AND TRUNC(Visit.CLOSE_DATE_TIME)
1735 AND TASKS.INSTANCE_ID = CII.INSTANCE_ID
1736 AND CII.INVENTORY_ITEM_ID = l_dtls_inv_item_id_tbl(j)
1737 AND CII.INV_MASTER_ORGANIZATION_ID = l_dtls_inv_master_org_id_tbl(j)
1738 AND nvl(CII.INVENTORY_REVISION,FND_API.G_MISS_CHAR) = nvl(l_dtls_inv_revision_tbl(j),FND_API.G_MISS_CHAR)
1739
1740 UNION ALL
1741
1742 -- Total Quantity from Visit, which does not have a unit at the header level.
1743 -- With Tree Reversal
1744 SELECT CII.INSTANCE_ID AS ITEM_INSTANCE,
1745 CII.QUANTITY AS VISIT_QUANTITY
1746 FROM CSI_II_RELATIONSHIPS CIIR,
1747 CSI_ITEM_INSTANCES CII
1748 WHERE CII.INVENTORY_ITEM_ID = l_dtls_inv_item_id_tbl(j)
1749 AND CII.INV_MASTER_ORGANIZATION_ID = l_dtls_inv_master_org_id_tbl(j)
1750 AND nvl(CII.INVENTORY_REVISION,FND_API.G_MISS_CHAR) = nvl(l_dtls_inv_revision_tbl(j),FND_API.G_MISS_CHAR)
1751 AND CII.INSTANCE_ID = CIIR.SUBJECT_ID
1752 START WITH CIIR.OBJECT_ID IN (
1753 Select CII.INSTANCE_ID AS ITEM_INSTANCE
1754 from AHL_VISIT_TASKS_B TASKS,
1755 AHL_VISITS_B Visit,
1756 AHL_SIMULATION_PLANS_B SPL,
1757 CSI_ITEM_INSTANCES CII
1758 Where Visit.VISIT_ID = TASKS.Visit_id
1759 AND VISIT.STATUS_CODE NOT IN ('CLOSED', 'CANCELLED', 'DELETED')
1760 AND SPL.SIMULATION_PLAN_ID = VISIT.SIMULATION_PLAN_ID
1761 AND SPL.PRIMARY_PLAN_FLAG = 'Y'
1762 AND Visit.unit_Schedule_id is NULL
1766 AND CII.INVENTORY_ITEM_ID = l_dtls_inv_item_id_tbl(j)
1763 AND Visit.organization_id = l_fs_arr_org_id_tbl(i)
1764 AND l_fs_arrival_date_tbl(i) between TRUNC(Visit.START_DATE_TIME) AND TRUNC(Visit.CLOSE_DATE_TIME)
1765 AND TASKS.INSTANCE_ID = CII.INSTANCE_ID
1767 AND CII.INV_MASTER_ORGANIZATION_ID = l_dtls_inv_master_org_id_tbl(j)
1768 AND nvl(CII.INVENTORY_REVISION,FND_API.G_MISS_CHAR) = nvl(l_dtls_inv_revision_tbl(j),FND_API.G_MISS_CHAR)
1769 )
1770 AND CIIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1771 AND TRUNC(NVL(CIIR.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
1772 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIR.ACTIVE_END_DATE,SYSDATE+1))
1773 CONNECT BY PRIOR CIIR.SUBJECT_ID = CIIR.OBJECT_ID
1774 AND CIIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1775 AND TRUNC(NVL(CIIR.ACTIVE_START_DATE,SYSDATE)) <= TRUNC(SYSDATE)
1776 AND TRUNC(SYSDATE) < TRUNC(NVL(CIIR.ACTIVE_END_DATE,SYSDATE+1))
1777
1778 )
1779 );
1780
1781 IF (p_concurrent_flag = 'Y') THEN
1782 fnd_file.put_line(fnd_file.log, ' - A - Deriving VWP Figure -- ' || l_forecast_vwp_qty_tbl(l_fct_index));
1783 END IF;
1784 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1785 fnd_log.string(fnd_log.level_statement,l_full_name,' - A - Deriving VWP Figure -- ' || l_forecast_vwp_qty_tbl(l_fct_index));
1786 END IF;
1787
1788 SELECT nvl(SUM(nvl(TRANSACTION_QUANTITY,0)),0)
1789 INTO l_forecast_non_qty_tbl(l_fct_index)
1790 FROM MTL_ONHAND_QUANTITIES QUANT,
1791 MTL_SECONDARY_INVENTORIES SI
1792 WHERE QUANT.INVENTORY_ITEM_ID = l_dtls_inv_item_id_tbl(j)
1793 AND QUANT.ORGANIZATION_ID = l_fs_arr_org_id_tbl(i)
1794 AND QUANT.SUBINVENTORY_CODE = SI.SECONDARY_INVENTORY_NAME
1795 AND QUANT.ORGANIZATION_ID = SI.ORGANIZATION_ID
1796 AND SI.AVAILABILITY_TYPE <> 1;
1797
1798 l_incl_in_rpt_flag_tbl(l_fct_index) := 'Y';
1799
1800 l_fct_index := l_fct_index + 1;
1801
1802 -- As per IO Module requirements - if a Particular Item Requirment is Interfaced with a
1803 -- Probability Percentage of failure - x% then one or more dummy record/s also needs to be
1804 -- interfaced with probability requirment of 100%-x% and Required Quantity - 0.
1805 -- To achieve this - We interface data for all the forecast associations in the system
1806 -- for the arrival organization except the one picked above and interface it to MRP
1807 -- with required quantity - 0, for these records.
1808 -- The constraint that Aggregate Probability Percentages of the Forecast sets sum upto
1809 -- 100% exactly, is marked as a User Setup Data Creation Outline.
1810 IF (p_concurrent_flag = 'Y') THEN
1814 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Creating Dummy Data in FCT Interface Table -- ');
1811 fnd_file.put_line(fnd_file.log, ' -- Creating Dummy Data in FCT Interface Table -- ');
1812 END IF;
1813 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1815 END IF;
1816
1817 IF l_mtbf_data_defined = 'N' THEN
1818 -- Dummy Data is created only if Prob of Failure is derived using Historical Data
1819 -- In case in Fct is being created using MTBF data, only Fct Designator can be Associated
1820 -- to the arrival org, and the value of the associated designator would be 100% in IO Plan Setup.
1821
1822 IF (p_concurrent_flag = 'Y') THEN
1823 fnd_file.put_line(fnd_file.log, ' ---- FETCHING FCT ASSOCIATIONS ----');
1824 END IF;
1825 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1826 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- FETCHING FCT ASSOCIATIONS ----');
1827 END IF;
1828 OPEN c_fetch_dummy_assocs(l_fct_designator,l_fs_arr_org_id_tbl(i));
1829 FETCH c_fetch_dummy_assocs
1830 BULK COLLECT INTO l_dummy_fct_desg_tbl;
1831 IF l_dummy_fct_desg_tbl.COUNT = 0 THEN
1832 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1833 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- NO DUMMY FCT ASSOCIATIONS DERIVED ----');
1834 END IF;
1835 ELSE
1836 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1837 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- DUMMY FCT ASSOCIATIONS RETRIEVED----');
1838 END IF;
1839 END IF;
1840 CLOSE c_fetch_dummy_assocs;
1841
1842 IF l_dummy_fct_desg_tbl.COUNT > 0 THEN
1843 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1844 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- INSERTING MRP Recs for Dummy FCT ASSOCIATIONS ----');
1845 END IF;
1846 IF (p_concurrent_flag = 'Y') THEN
1847 fnd_file.put_line(fnd_file.log, ' ---- INSERTING MRP Recs for Dummy FCT ASSOCIATIONS ----');
1848 END IF;
1849 for f in l_dummy_fct_desg_tbl.FIRST .. l_dummy_fct_desg_tbl.LAST LOOP
1850 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1851 fnd_log.string(fnd_log.level_statement,l_full_name,' ---- INSERTING FOR DUMMY ASSOC ----' || l_dummy_fct_desg_tbl(f));
1852 END IF;
1853
1854 l_forecast_interface_tbl(l_fct_index).INVENTORY_ITEM_ID := l_dtls_inv_item_id_tbl(j);
1855 l_forecast_interface_tbl(l_fct_index).FORECAST_DESIGNATOR := l_dummy_fct_desg_tbl(f);
1856 l_forecast_interface_tbl(l_fct_index).ORGANIZATION_ID := l_fs_arr_org_id_tbl(i);
1857 l_forecast_interface_tbl(l_fct_index).FORECAST_DATE := l_fs_arrival_date_tbl(i);
1858 l_forecast_interface_tbl(l_fct_index).LAST_UPDATE_DATE := sysdate;
1859 l_forecast_interface_tbl(l_fct_index).LAST_UPDATED_BY := fnd_global.USER_ID;
1860 l_forecast_interface_tbl(l_fct_index).CREATION_DATE := sysdate;
1861 l_forecast_interface_tbl(l_fct_index).CREATED_BY := fnd_global.USER_ID;
1862 l_forecast_interface_tbl(l_fct_index).LAST_UPDATE_LOGIN := fnd_global.LOGIN_ID;
1863 l_forecast_interface_tbl(l_fct_index).QUANTITY := 0;
1864 l_forecast_interface_tbl(l_fct_index).PROCESS_STATUS := 2;
1865 l_forecast_interface_tbl(l_fct_index).CONFIDENCE_PERCENTAGE := 100;
1866 l_forecast_interface_tbl(l_fct_index).COMMENTS := null;
1867 l_forecast_interface_tbl(l_fct_index).ERROR_MESSAGE := null;
1868 l_forecast_interface_tbl(l_fct_index).REQUEST_ID := null;
1869 l_forecast_interface_tbl(l_fct_index).PROGRAM_APPLICATION_ID := null;
1870 l_forecast_interface_tbl(l_fct_index).PROGRAM_ID := null;
1874 l_forecast_interface_tbl(l_fct_index).FORECAST_END_DATE := null;
1871 l_forecast_interface_tbl(l_fct_index).PROGRAM_UPDATE_DATE := null;
1872 l_forecast_interface_tbl(l_fct_index).WORKDAY_CONTROL := 3; -- shift backward.
1873 l_forecast_interface_tbl(l_fct_index).BUCKET_TYPE := 1;
1875 l_forecast_interface_tbl(l_fct_index).TRANSACTION_ID := null;
1876 l_forecast_interface_tbl(l_fct_index).SOURCE_CODE := 'RA-'||l_fs_unit_sch_id_tbl(i);
1877 l_forecast_interface_tbl(l_fct_index).SOURCE_LINE_ID := l_dtls_subject_id_tbl(j);
1878 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE1 := null;
1879 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE2 := null;
1880 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE3 := null;
1881 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE4 := null;
1882 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE5 := null;
1883 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE6 := null;
1884 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE7 := null;
1885 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE8 := null;
1886 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE9 := null;
1887 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE10 := null;
1888 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE11 := null;
1889 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE12 := null;
1890 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE13 := null;
1891 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE14 := null;
1892 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE15 := null;
1893 l_forecast_interface_tbl(l_fct_index).PROJECT_ID := null;
1894 l_forecast_interface_tbl(l_fct_index).TASK_ID := null;
1895 l_forecast_interface_tbl(l_fct_index).LINE_ID := null;
1896 l_forecast_interface_tbl(l_fct_index).ACTION := 'I';
1897 l_forecast_interface_tbl(l_fct_index).ATTRIBUTE_CATEGORY := null;
1898
1899
1900 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1901 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Preparing Designator Interface Data -DUMMY- ');
1902 END IF;
1903
1904 IF l_forecast_designator_tbl.COUNT > 0 THEN
1905 FOR h in l_forecast_designator_tbl.FIRST .. l_forecast_designator_tbl.LAST LOOP
1906 IF l_forecast_designator_tbl(h).FORECAST_DESIGNATOR = l_dummy_fct_desg_tbl(f) THEN
1907 l_ds_rec_found := 'Y';
1908 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1909 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Designator already exists in Interface Data -DUMMY- ');
1910 END IF;
1911 EXIT;
1912 END IF;
1913 END LOOP;
1914 IF l_ds_rec_found = 'N' THEN
1915 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1916 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Designator does not exists in Interface Data -DUMMY- ');
1917 END IF;
1918 l_forecast_designator_tbl(l_dsg_index).ORGANIZATION_ID := l_fs_arr_org_id_tbl(i);
1919 l_forecast_designator_tbl(l_dsg_index).FORECAST_DESIGNATOR := l_dummy_fct_desg_tbl(f);
1920 l_dsg_index := l_dsg_index + 1;
1921 END IF;
1922 ELSE
1923 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1924 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Inserting first rec in Designator Data -DUMMY- ');
1925 END IF;
1926 l_forecast_designator_tbl(l_dsg_index).ORGANIZATION_ID := l_fs_arr_org_id_tbl(i);
1927 l_forecast_designator_tbl(l_dsg_index).FORECAST_DESIGNATOR := l_dummy_fct_desg_tbl(f);
1928 l_dsg_index := l_dsg_index + 1;
1929 END IF;
1930
1931 l_ds_rec_found := 'N';
1932
1933 l_forecast_org_code_tbl(l_fct_index) := l_fs_org_code_tbl(i);
1934 l_forecast_srl_no_tbl(l_fct_index) := l_dtls_srl_no_tbl(j);
1935 l_forecast_item_name_tbl(l_fct_index):= l_dtls_item_name_tbl(j);
1936 l_forecast_item_desc_tbl(l_fct_index):= l_dtls_item_desc_tbl(j);
1937
1938 -- Set Flag to indicate that dummy records will not be reflected in Output Report.
1939 l_incl_in_rpt_flag_tbl(l_fct_index) := 'N';
1940
1941 l_fct_index := l_fct_index + 1;
1942
1943 END LOOP; -- f for l_dummy_fct_desg_tbl
1944 END IF; -- l_dummy_fct_desg_tbl.COUNT > 0
1945
1946 END IF; -- l_mtbf_data_defined = 'N'
1947 -- End of creation of dummy data.
1948
1949 IF (p_concurrent_flag = 'Y') THEN
1950 fnd_file.put_line(fnd_file.log, ' -- Prepared IO Interface Data -- ');
1951 END IF;
1952
1953 ELSE -- l_fct_designator IS NULL
1954 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1955 fnd_log.string(fnd_log.level_statement,l_full_name,' -- No Fct Designator Found -- ');
1956 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Jump to Next instance -- ' || l_fct_designator);
1957 END IF;
1958
1959 IF (p_concurrent_flag = 'Y') THEN
1960 fnd_file.put_line(fnd_file.log, ' -- No Fct Designator Found so No Interfacing to be done -- ');
1961 END IF;
1962
1963 END IF;
1964
1965 ELSE -- l_active_ctr_id_tbl.COUNT = 0
1966 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1967 fnd_log.string(fnd_log.level_statement,l_full_name,' -- No Matching ACTIVE COUNTERS derived -- ');
1968 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Move to next item instace -- l_dtls_subject_id_tbl - '||l_dtls_subject_id_tbl(j));
1969 END IF;
1970 IF (p_concurrent_flag = 'Y') THEN
1971 fnd_file.put_line(fnd_file.log, ' -- No Matching ACTIVE COUNTERS derived -- ');
1972 END IF;
1973
1977 fnd_log.string(fnd_log.level_statement,l_full_name,'Setup or Retrieved counters are NULL');
1974 END IF; -- l_active_ctr_id_tbl.COUNT > 0
1975 ELSE -- Setup or Retrieved counters are NULL
1976 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1978 fnd_log.string(fnd_log.level_statement,l_full_name,'l_since_new_ctr_id_tbl - COUNT - '||l_since_new_ctr_id_tbl.COUNT);
1979 fnd_log.string(fnd_log.level_statement,l_full_name,'l_ctr_values_tbl - COUNT - '||l_ctr_values_tbl.COUNT);
1980 fnd_log.string(fnd_log.level_statement,l_full_name,'l_dtls_subject_id_tbl - '||l_dtls_subject_id_tbl(j));
1981 END IF;
1982 IF (p_concurrent_flag = 'Y') THEN
1983 fnd_file.put_line(fnd_file.log, ' -- Setup or Retrieved counters are NULL -- ');
1984 END IF;
1985 END IF; -- l_since_new_ctr_id_tbl.COUNT > 0 AND l_ctr_values_tbl.COUNT > 0
1986 END LOOP; -- Loop for Item Instance - UC Nodes - index j
1987 ELSE
1988 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1989 fnd_log.string(fnd_log.level_statement,l_full_name,'No Nodes for Current Unit - Move to Next Sch-Unit');
1990 fnd_log.string(fnd_log.level_statement,l_full_name,'l_fs_unit_sch_id_tbl - '||l_fs_unit_sch_id_tbl(i));
1991 fnd_log.string(fnd_log.level_statement,l_full_name,'l_fs_uc_header_id_tbl - '||l_fs_uc_header_id_tbl(i));
1992 fnd_log.string(fnd_log.level_statement,l_full_name,'l_fs_csi_instance_id_tbl - '||l_fs_csi_instance_id_tbl(i));
1993 END IF;
1994 IF (p_concurrent_flag = 'Y') THEN
1995 fnd_file.put_line(fnd_file.log, ' -- No Nodes for Current Unit - Move to Next Sch-Unit -- ');
1996 END IF;
1997 END IF; -- l_dtls_subject_id_tbl.COUNT > 0
1998 END LOOP; -- Loop for Unit Schedules - i
1999 ELSE -- l_fs_unit_sch_id_tbl.COUNT = 0
2000 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2001 fnd_log.string(fnd_log.level_statement,l_full_name,'No Flight Schedules to Process');
2002 END IF;
2003 IF (p_concurrent_flag = 'Y') THEN
2004 fnd_file.put_line(fnd_file.log, ' -- No Flight Schedules to Process -- ');
2005 END IF;
2006 END IF; -- l_fs_unit_sch_id_tbl.COUNT > 0
2007 END IF; -- l_since_new_ctr_id_tbl.COUNT = 0
2008
2009 IF l_forecast_interface_tbl.COUNT > 0 THEN
2010 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2011 fnd_log.string(fnd_log.level_statement,l_full_name,'Calling MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE -- Before');
2012 fnd_log.string(fnd_log.level_statement,l_full_name,' -- INTERFACE DATA -- ');
2013 FOR b IN l_forecast_interface_tbl.FIRST .. l_forecast_interface_tbl.LAST LOOP
2014 fnd_log.string(fnd_log.level_statement,l_full_name,' -- FCT REC STARTS -- '||b);
2015 fnd_log.string(fnd_log.level_statement,l_full_name,' -- INVENTORY_ITEM_ID -- '||l_forecast_interface_tbl(b).INVENTORY_ITEM_ID);
2016 fnd_log.string(fnd_log.level_statement,l_full_name,' -- FORECAST_DESIGNATOR -- '||l_forecast_interface_tbl(b).FORECAST_DESIGNATOR);
2017 fnd_log.string(fnd_log.level_statement,l_full_name,' -- ORGANIZATION_ID -- '||l_forecast_interface_tbl(b).ORGANIZATION_ID);
2018 fnd_log.string(fnd_log.level_statement,l_full_name,' -- FORECAST_DATE -- '||l_forecast_interface_tbl(b).FORECAST_DATE);
2022 fnd_log.string(fnd_log.level_statement,l_full_name,' -- CONFIDENCE_PERCENTAGE -- '||l_forecast_interface_tbl(b).CONFIDENCE_PERCENTAGE);
2019 fnd_log.string(fnd_log.level_statement,l_full_name,' -- FORECASTED MONTH -- '||to_char(l_forecast_interface_tbl(b).FORECAST_DATE,'MON-YYYY'));
2020 fnd_log.string(fnd_log.level_statement,l_full_name,' -- REQUIRED_QUANTITY -- '||l_forecast_interface_tbl(b).QUANTITY);
2021 fnd_log.string(fnd_log.level_statement,l_full_name,' -- PROCESS_STATUS -- '||l_forecast_interface_tbl(b).PROCESS_STATUS);
2023 fnd_log.string(fnd_log.level_statement,l_full_name,' -- WORKDAY_CONTROL -- '||l_forecast_interface_tbl(b).WORKDAY_CONTROL);
2024 fnd_log.string(fnd_log.level_statement,l_full_name,' -- BUCKET_TYPE -- '||l_forecast_interface_tbl(b).BUCKET_TYPE);
2025 fnd_log.string(fnd_log.level_statement,l_full_name,' -- SOURCE_CODE -- '||l_forecast_interface_tbl(b).SOURCE_CODE);
2026 fnd_log.string(fnd_log.level_statement,l_full_name,' -- SOURCE_LINE_ID -- '||l_forecast_interface_tbl(b).SOURCE_LINE_ID);
2027 fnd_log.string(fnd_log.level_statement,l_full_name,' -- ACTION -- '||l_forecast_interface_tbl(b).ACTION);
2028
2029 END LOOP;
2030 IF l_forecast_designator_tbl.COUNT > 0 THEN
2031 FOR c IN l_forecast_designator_tbl.FIRST .. l_forecast_designator_tbl.LAST LOOP
2032 fnd_log.string(fnd_log.level_statement,l_full_name,' -- DESIGNATOR REC STARTS -- '||c);
2033 fnd_log.string(fnd_log.level_statement,l_full_name,' -- ORGANIZATION_ID -- '||l_forecast_designator_tbl(c).ORGANIZATION_ID);
2034 fnd_log.string(fnd_log.level_statement,l_full_name,' -- FORECAST_DESIGNATOR -- '||l_forecast_designator_tbl(c).FORECAST_DESIGNATOR);
2035 END LOOP;
2036 END IF;
2037 END IF;
2038 IF (p_concurrent_flag = 'Y') THEN
2039 fnd_file.put_line(fnd_file.log, ' -- Calling MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE -- Before -- ');
2040 END IF;
2041
2042 IF (MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE
2043 (l_forecast_interface_tbl,
2044 l_forecast_designator_tbl)) THEN
2045 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2046 fnd_log.string(fnd_log.level_statement,l_full_name,'Calling MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE -- After');
2047 END IF;
2048 IF (p_concurrent_flag = 'Y') THEN
2049 fnd_file.put_line(fnd_file.log, ' -- Calling MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE -- After -- ');
2050 END IF;
2051 ELSE
2052 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2053 fnd_log.string(fnd_log.level_statement,l_full_name,'Failure Calling MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE -- ');
2054 END IF;
2055 IF (p_concurrent_flag = 'Y') THEN
2056 fnd_file.put_line(fnd_file.log, ' -- Failure Calling MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE ---- ');
2057 END IF;
2058 END IF;
2059
2060 ELSE
2061 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2062 fnd_log.string(fnd_log.level_statement,l_full_name,'MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE Not to be called');
2063 END IF;
2064 IF (p_concurrent_flag = 'Y') THEN
2065 fnd_file.put_line(fnd_file.log, ' -- MRP_FORECAST_INTERFACE_PK.MRP_FORECAST_INTERFACE Not to be called ---- ');
2066 END IF;
2067 END IF;
2068
2069 -- Open a temporary lob for merging the contents.
2070 dbms_lob.createTemporary( l_fct_data_lob, true );
2071 dbms_lob.open( l_fct_data_lob, dbms_lob.lob_readwrite );
2072
2073 -- XML generated with dbms_xmlgen doesnt have encoding information. so we need to manually insert into the resultant CLOB.
2074 dbms_lob.write(l_fct_data_lob,length('<?xml version="1.0" encoding="UTF-8"?>'),1,'<?xml version="1.0" encoding="UTF-8"?>');
2075 /*
2076 mpothuku Added fnd_global.local_chr(10) (or new line) for the Bug 5724555 on 21-Dec-06. FND_FILE.put has a restriction of 32K characters.
2077 If there is no new-line in these 32K characters, it fails. So ensuring that there are new-line characters after every line
2078 of the XML
2079 */
2080 dbms_lob.write(l_fct_data_lob,length(fnd_global.local_chr(10)),length(l_fct_data_lob)+1,fnd_global.local_chr(10));
2081 --Put the root node to maintain the XML completeness.
2082 dbms_lob.write(l_fct_data_lob, length('<G_FCT_DATA_LIST>'),length(l_fct_data_lob)+1, '<G_FCT_DATA_LIST>');
2083 dbms_lob.write(l_fct_data_lob,length(fnd_global.local_chr(10)),length(l_fct_data_lob)+1,fnd_global.local_chr(10));
2084 --Put the Start Date and the End Date
2085 --mpothuku Added to_char on 23 Aug, 06 for XSL canonical date format to be used by the XMLP report for the Bug 5460793
2086 l_dummy_string := '<P_START_DATE>' || to_char(p_start_date,'YYYY-MM-DD') || '</P_START_DATE>'||fnd_global.local_chr(10);
2087 l_dummy_string := l_dummy_string || '<P_END_DATE>' || to_char(p_end_date,'YYYY-MM-DD') || '</P_END_DATE>' ||fnd_global.local_chr(10);
2088 dbms_lob.write(l_fct_data_lob, length(l_dummy_string),length(l_fct_data_lob)+1, l_dummy_string);
2089
2090 IF l_forecast_interface_tbl.COUNT > 0 THEN
2091 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2092 fnd_log.string(fnd_log.level_statement,l_full_name,'Creating Clob for Output File');
2093 END IF;
2094 IF (p_concurrent_flag = 'Y') THEN
2095 fnd_file.put_line(fnd_file.log, ' -- Creating Clob for Output File -- ');
2096 END IF;
2097 --mpothuku added dbms_xmlgen.convert on 08-May-2007 to fix the Bug 6038466
2098 /*
2102 */
2099 Note by mpothuku on 09-May-2007: Consider revising the string concat logic below and
2100 write each XML line immediately into the CLOB and the log, so that the l_dummy_string size is not huge.
2101 We already had to increase the size from 1000 to 5000, as XML encode bloats up the size of the strings.
2103 FOR c in l_forecast_interface_tbl.FIRST .. l_forecast_interface_tbl.LAST LOOP
2104 IF l_incl_in_rpt_flag_tbl(c) = 'Y' THEN -- Check if Interface rec is candidate for Output report.
2105 l_row_count := l_row_count + 1;
2106 l_dummy_string := '<G_FCT_ENTRY_REC>'||fnd_global.local_chr(10);
2107 l_dummy_string := l_dummy_string || '<ORGANIZATION_ID>' ||l_forecast_interface_tbl(c).ORGANIZATION_ID ||'</ORGANIZATION_ID>'||fnd_global.local_chr(10);
2108 l_dummy_string := l_dummy_string || '<ORGANIZATION_CODE>' ||dbms_xmlgen.convert(l_forecast_org_code_tbl(c)) ||'</ORGANIZATION_CODE>'||fnd_global.local_chr(10);
2109 l_dummy_string := l_dummy_string || '<INVENTORY_ITEM_ID>' ||l_forecast_interface_tbl(c).INVENTORY_ITEM_ID ||'</INVENTORY_ITEM_ID>'||fnd_global.local_chr(10);
2110 l_dummy_string := l_dummy_string || '<CONCATENATED_SEGMENTS>' ||dbms_xmlgen.convert(l_forecast_item_name_tbl(c)) ||'</CONCATENATED_SEGMENTS>'||fnd_global.local_chr(10);
2111 l_dummy_string := l_dummy_string || '<ITEM_DESCRIPTION>' ||dbms_xmlgen.convert(l_forecast_item_desc_tbl(c)) ||'</ITEM_DESCRIPTION>'||fnd_global.local_chr(10);
2112 l_dummy_string := l_dummy_string || '<SERIAL_NUMBER>' ||dbms_xmlgen.convert(l_forecast_srl_no_tbl(c)) ||'</SERIAL_NUMBER>'||fnd_global.local_chr(10);
2113 l_dummy_string := l_dummy_string || '<FORECAST_DESIGNATOR>' ||dbms_xmlgen.convert(l_forecast_interface_tbl(c).FORECAST_DESIGNATOR) ||'</FORECAST_DESIGNATOR>'||fnd_global.local_chr(10);
2114 --mpothuku Added to_char on 23 Aug, 06 for XSL canonical date format to be used by the XMLP report for the Bug 5460793
2115 l_dummy_string := l_dummy_string || '<FORECAST_DATE>' ||to_char(l_forecast_interface_tbl(c).FORECAST_DATE,'YYYY-MM-DD')||'</FORECAST_DATE>'||fnd_global.local_chr(10);
2116 l_dummy_string := l_dummy_string || '<FORECASTED_MONTH>' ||to_char(l_forecast_interface_tbl(c).FORECAST_DATE,'MON-YYYY')||'</FORECASTED_MONTH>'||fnd_global.local_chr(10);
2117 l_dummy_string := l_dummy_string || '<REQUIRED_QUANTITY>' ||l_forecast_interface_tbl(c).QUANTITY ||'</REQUIRED_QUANTITY>'||fnd_global.local_chr(10);
2118 l_dummy_string := l_dummy_string || '<REQUIRED_PROBABILITY>' ||l_forecast_req_prob_tbl(c) ||'</REQUIRED_PROBABILITY>'||fnd_global.local_chr(10);
2119 l_dummy_string := l_dummy_string || '<ONHAND_QUANTITY>' ||l_forecast_onhand_qty_tbl(c) ||'</ONHAND_QUANTITY>'||fnd_global.local_chr(10);
2120 l_dummy_string := l_dummy_string || '<QUANTITY_DUE_OSP>' ||l_forecast_osp_qty_tbl(c) ||'</QUANTITY_DUE_OSP>'||fnd_global.local_chr(10);
2121 l_dummy_string := l_dummy_string || '<QUANTITY_IN_VISIT>' ||l_forecast_vwp_qty_tbl(c) ||'</QUANTITY_IN_VISIT>'||fnd_global.local_chr(10);
2122 l_dummy_string := l_dummy_string || '<QUANTITY_NON_SERVICEABLE>' ||l_forecast_non_qty_tbl(c) ||'</QUANTITY_NON_SERVICEABLE>'||fnd_global.local_chr(10);
2123 l_dummy_string := l_dummy_string || '<PROCESS_STATUS>' ||l_forecast_interface_tbl(c).PROCESS_STATUS ||'</PROCESS_STATUS>'||fnd_global.local_chr(10);
2124 l_dummy_string := l_dummy_string || '<ERROR_MESSAGE>' ||dbms_xmlgen.convert(l_forecast_interface_tbl(c).ERROR_MESSAGE) ||'</ERROR_MESSAGE>'||fnd_global.local_chr(10);
2125 l_dummy_string := l_dummy_string || '<SOURCE_CODE>' ||dbms_xmlgen.convert(l_forecast_interface_tbl(c).SOURCE_CODE) ||'</SOURCE_CODE>'||fnd_global.local_chr(10);
2126 l_dummy_string := l_dummy_string || '<SOURCE_LINE_ID>' ||l_forecast_interface_tbl(c).SOURCE_LINE_ID ||'</SOURCE_LINE_ID>'||fnd_global.local_chr(10);
2127
2128 -- This 'Hard Coded' Data will be replaced by Lookups / Messages -- Pending
2129 IF l_forecast_interface_tbl(c).PROCESS_STATUS = 1 THEN
2130 l_dummy_string := l_dummy_string || '<PROCESS_STATUS_DESC>' || ' Do Not Process ' ||'</PROCESS_STATUS_DESC>'||fnd_global.local_chr(10);
2131 ELSIF l_forecast_interface_tbl(c).PROCESS_STATUS = 2 THEN
2132 l_dummy_string := l_dummy_string || '<PROCESS_STATUS_DESC>' || ' Waiting to be processed ' ||'</PROCESS_STATUS_DESC>'||fnd_global.local_chr(10);
2133 ELSIF l_forecast_interface_tbl(c).PROCESS_STATUS = 3 THEN
2134 l_dummy_string := l_dummy_string || '<PROCESS_STATUS_DESC>' || ' Being Processed ' ||'</PROCESS_STATUS_DESC>'||fnd_global.local_chr(10);
2135 ELSIF l_forecast_interface_tbl(c).PROCESS_STATUS = 4 THEN
2136 l_dummy_string := l_dummy_string || '<PROCESS_STATUS_DESC>' || ' Error ' ||'</PROCESS_STATUS_DESC>'||fnd_global.local_chr(10);
2137 ELSIF l_forecast_interface_tbl(c).PROCESS_STATUS = 5 THEN
2138 l_dummy_string := l_dummy_string || '<PROCESS_STATUS_DESC>' || ' Processed ' ||'</PROCESS_STATUS_DESC>'||fnd_global.local_chr(10);
2139 END IF;
2140
2141 l_dummy_string := l_dummy_string || '</G_FCT_ENTRY_REC>'||fnd_global.local_chr(10);
2142 dbms_lob.write(l_fct_data_lob, length(l_dummy_string),length(l_fct_data_lob)+1, l_dummy_string);
2143 END IF;
2144 END LOOP;
2145
2146 ELSE
2147 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2148 fnd_log.string(fnd_log.level_statement,l_full_name,' -- Clob content empty for Output File --');
2149 END IF;
2150 IF (p_concurrent_flag = 'Y') THEN
2154
2151 fnd_file.put_line(fnd_file.log, ' -- Clob content empty for Output File ---- ');
2152 END IF;
2153 END IF;
2155 l_dummy_string := '<ROW_COUNT>' || l_row_count || '</ROW_COUNT>'||fnd_global.local_chr(10);
2156 dbms_lob.write(l_fct_data_lob, length(l_dummy_string),length(l_fct_data_lob)+1, l_dummy_string);
2157
2158 dbms_lob.write(l_fct_data_lob, length('</G_FCT_DATA_LIST>'),length(l_fct_data_lob)+1, '</G_FCT_DATA_LIST>');
2159
2160 x_xml_data := l_fct_data_lob;
2161
2162 --Close and release the temporary lobs
2163 dbms_lob.close( l_fct_data_lob );
2164 dbms_lob.freeTemporary( l_fct_data_lob );
2165
2166 -- Standard check for p_commit
2167 IF FND_API.To_Boolean (p_commit) THEN
2168 COMMIT;
2169 END IF;
2170
2171 IF (p_concurrent_flag = 'Y') THEN
2172 fnd_file.put_line(fnd_file.log, ' -- RA -- PKG -- PROCESS_RA_DATA -------END--------------- ');
2173 END IF;
2174 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2175 fnd_log.string(fnd_log.level_statement,l_full_name,'RA -- PKG -- PROCESS_RA_DATA -------END-----------');
2176 END IF;
2177
2178 -- Standard call to get message count and if count is 1, get message
2179 FND_MSG_PUB.Count_And_Get
2180 ( p_count => x_msg_count,
2181 p_data => x_msg_data,
2182 p_encoded => fnd_api.g_false);
2183
2184 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
2185 fnd_log.string(fnd_log.level_procedure,L_FULL_NAME||'.end','Return Status = ' || x_return_status);
2186 END IF;
2187
2188 EXCEPTION
2189 WHEN FND_API.G_EXC_ERROR THEN
2190 x_return_status := FND_API.G_RET_STS_ERROR;
2191 Rollback to PROCESS_RA_DATA_SP;
2192 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
2193 p_data => x_msg_data,
2194 p_encoded => fnd_api.g_false);
2195 IF (p_concurrent_flag = 'Y') THEN
2196 fnd_file.put_line(fnd_file.log, 'RA Analyser Process Failed. Refer to the error message below.');
2197 log_error_messages;
2198 END IF;
2199
2200 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2201 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2202 Rollback to PROCESS_RA_DATA_SP;
2203 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
2204 p_data => x_msg_data,
2205 p_encoded => fnd_api.g_false);
2206 IF (p_concurrent_flag = 'Y') THEN
2207 fnd_file.put_line(fnd_file.log, 'RA Analyser Process Failed. Refer to the error message below.');
2208 log_error_messages;
2209 END IF;
2210
2211 WHEN OTHERS THEN
2212 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2213 Rollback to PROCESS_RA_DATA_SP;
2214 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2215 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
2216 p_procedure_name => 'PROCESS_RA_DATA',
2217 p_error_text => SUBSTR(SQLERRM,1,240));
2218 END IF;
2219 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
2220 p_data => x_msg_data,
2221 p_encoded => fnd_api.g_false);
2222 IF (p_concurrent_flag = 'Y') THEN
2223 fnd_file.put_line(fnd_file.log, 'RA Analyser Process Failed. Refer to the error message below.');
2224 log_error_messages;
2225 END IF;
2226
2227 END PROCESS_RA_DATA;
2228
2229 PROCEDURE RA_ANALYSER_PROCESS (
2230 errbuf OUT NOCOPY VARCHAR2,
2231 retcode OUT NOCOPY NUMBER,
2232 p_api_version IN NUMBER,
2233 p_start_date IN VARCHAR2,
2234 p_end_date IN VARCHAR2
2235 )
2236 IS
2237
2238 l_return_status VARCHAR2(30);
2239 l_msg_count NUMBER;
2240 l_api_name VARCHAR2(30) := 'RA_ANALYSER_PROCESS';
2241 l_api_version NUMBER := 1.0;
2242 l_clob CLOB;
2243
2244 l_offset NUMBER;
2245 l_chunk_size NUMBER;
2246 l_clob_size NUMBER;
2247 l_chunk VARCHAR2(10000);
2248
2249 BEGIN
2250
2251 -- Initialize error message stack by default
2252 FND_MSG_PUB.Initialize;
2253
2254 -- Standard call to check for call compatibility
2255 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME)
2256 THEN
2257 retcode := 2;
2258 errbuf := FND_MSG_PUB.Get;
2259 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2260 END IF;
2261
2262 PROCESS_RA_DATA (
2263 p_api_version => 1,
2264 p_init_msg_list => FND_API.G_TRUE,
2265 p_commit => FND_API.G_TRUE,
2266 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
2267 p_module_type => NULL,
2268 x_return_status => l_return_status,
2269 x_msg_count => l_msg_count,
2270 x_msg_data => errbuf,
2271 p_start_date => fnd_date.canonical_to_date(p_start_date),
2275
2272 p_end_date => fnd_date.canonical_to_date(p_end_date),
2273 p_concurrent_flag => 'Y',
2274 x_xml_data => l_clob);
2276 l_offset := 1;
2277 l_chunk_size := 3000;
2278 l_clob_size := dbms_lob.getlength(l_clob);
2279 fnd_file.put(fnd_file.log, 'l_clob_size - '||l_clob_size);
2280 WHILE (l_clob_size > 0) LOOP
2281 l_chunk := dbms_lob.substr (l_clob, l_chunk_size, l_offset);
2282 fnd_file.put(fnd_file.log, l_chunk);
2283 l_clob_size := l_clob_size - l_chunk_size;
2284 l_offset := l_offset + l_chunk_size;
2285 END LOOP;
2286
2287 l_msg_count := FND_MSG_PUB.Count_Msg;
2288
2289 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2290 retcode := 2; -- error based only on return status
2291 fnd_file.put(fnd_file.log, ' retcode - '||retcode);
2292 fnd_file.put(fnd_file.log, ' l_return_status - '||l_return_status);
2293 ELSIF (l_msg_count > 0 AND l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2294 retcode := 1; -- warning based on return status + msg count
2295 fnd_file.put(fnd_file.log, ' retcode - '||retcode);
2296 fnd_file.put(fnd_file.log, ' l_msg_count - '||l_msg_count);
2297 ELSE
2298 retcode := 0; -- success, since nothing is wrong
2299 fnd_file.put(fnd_file.log, ' retcode - '||retcode);
2300 l_offset := 1;
2301 l_chunk_size := 3000;
2302 l_clob_size := dbms_lob.getlength(l_clob);
2303 WHILE (l_clob_size > 0) LOOP
2304 l_chunk := dbms_lob.substr (l_clob, l_chunk_size, l_offset);
2305 fnd_file.put(fnd_file.output, l_chunk);
2306 l_clob_size := l_clob_size - l_chunk_size;
2307 l_offset := l_offset + l_chunk_size;
2308 END LOOP;
2309 END IF;
2310 END RA_ANALYSER_PROCESS;
2311
2312 --------------------------------------------------------------------------
2313 -- To log error messages into a log file if called from concurrent process.
2314 ---------------------------------------------------------------------------
2315 PROCEDURE log_error_messages IS
2316
2317 l_msg_count NUMBER;
2318 l_msg_index_out NUMBER;
2319 l_msg_data VARCHAR2(2000);
2320
2321 BEGIN
2322
2323 -- Standard call to get message count.
2324 l_msg_count := FND_MSG_PUB.Count_Msg;
2325
2326 FOR i IN 1..l_msg_count LOOP
2327 FND_MSG_PUB.get (
2328 p_msg_index => i,
2329 p_encoded => FND_API.G_FALSE,
2330 p_data => l_msg_data,
2331 p_msg_index_out => l_msg_index_out );
2332
2333 fnd_file.put_line(FND_FILE.LOG, 'Err message-'||l_msg_index_out||':' || l_msg_data);
2334 END LOOP;
2335
2336 END log_error_messages;
2337
2338 END AHL_RA_ANALYSER_PVT;