DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_PRD_PRINT_PVT

Source


1 PACKAGE BODY        "AHL_PRD_PRINT_PVT" AS
2 /* $Header: AHLVPPRB.pls 120.43.12020000.2 2012/12/07 11:40:50 sareepar ship $ */
3 
4 G_PKG_NAME        VARCHAR2(30)  :='AHL_PRD_PRINT_PVT';
5 
6 -- Constants to identify locator and item number elements
7 G_ITEM_NUMBER_CHAR  NUMBER    := 10;
8 G_LOCATOR_CHAR    NUMBER    := 15;
9 
10 
11 --moved to specification.
12 --FUNCTION get_xsl_clob RETURN CLOB;
13 
14 TYPE PDF_REC_TYPE IS RECORD(job_card_id VARCHAR2(100),pdf_path VARCHAR2(2000),pdf_ErrorMessage VARCHAR2(2000), status VARCHAR2(240));
15 TYPE PDF_TABLE_TYPE IS TABLE OF PDF_REC_TYPE INDEX BY BINARY_INTEGER;
16 TYPE workorder_id_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
17 PROCEDURE parse_enigma_response(
18    p_workpackage_id     IN VARCHAR2,
19    p_enigma_response IN CLOB,
20    x_pdf_table       OUT NOCOPY PDF_TABLE_TYPE
21 );
22 
23 procedure build_qa_query(
24           p_plan_id   IN NUMBER,
25           p_collection_id IN NUMBER,
26           x_query_string  OUT NOCOPY VARCHAR2
27          );
28 
29 Procedure build_xml_qa_query(
30           p_plan_id   IN NUMBER,
31           p_collection_id IN NUMBER,
32           x_query_string  OUT NOCOPY VARCHAR2
33          );
34 
35 PROCEDURE Get_Route_KFF_Desc (
36           p_concat_segs     IN VARCHAR2,
37           x_mti_seglist     OUT NOCOPY fnd_flex_ext.SegmentArray,
38           x_return_status   OUT NOCOPY VARCHAR2);
39 
40 PROCEDURE Get_job_card_det (  l_merged_lob     IN OUT NOCOPY CLOB,
41                               l_wo_id_tbl      IN OUT NOCOPY workorder_id_tbl_type,
42                               x_return_status   OUT NOCOPY VARCHAR2);
43 
44 TYPE EMP_DETAILS_REC_TYPE IS RECORD(employee_id NUMBER, employee_name VARCHAR2(240));
45 
46 -- Table to hold employee_id and employee name
47 TYPE EMP_TABLE_TYPE IS TABLE OF EMP_DETAILS_REC_TYPE INDEX BY BINARY_INTEGER;
48 
49 ----------------------------------------------------------------------------
50 --Function which returns offset for current server timezone as per the profile
51 --setting in SERVER_TIMEZONE_ID
52 ----------------------------------------------------------------------------
53 FUNCTION get_tz_offset
54 RETURN VARCHAR2
55 IS
56 
57 CURSOR c_get_tz_code
58 IS
59 SELECT
60  timezone_code
61 FROM
62   fnd_timezones_vl
63 WHERE
64  upgrade_tz_id = fnd_profile.VALUE('SERVER_TIMEZONE_ID');
65 
66 CURSOR c_get_tz_offset(c_tz_code IN VARCHAR2)
67 IS
68  SELECT substr(tz_offset(c_tz_code),0,6)
69 FROM
70  dual;
71 
72 l_tz_offset VARCHAR2(100);
73 l_tz_code   VARCHAR2(50);
74 
75 BEGIN
76   -- Code added for bug # 5199935
77   -- Ref https://metalink.oracle.com/metalink/plsql/f?p=130:14:2578122075547395620::::p14_database_id,p14_docid,
78   --p14_show_header,p14_show_help,p14_black_frame,p14_font:NOT,340512.1,1,1,1,helvetica#aref2
79   OPEN c_get_tz_code;
80   FETCH c_get_tz_code INTO l_tz_code;
81   CLOSE c_get_tz_code;
82 
83   OPEN c_get_tz_offset(l_tz_code);
84   FETCH c_get_tz_offset INTO l_tz_offset;
85   CLOSE c_get_tz_offset;
86   -- Code added for bug # 5199935
87 
88   RETURN l_tz_offset;
89 END get_tz_offset;
90 
91 ------------------------------------------------------------------------------------------------
92 -- Procedure to generate XML data for workorder(s).
93 ------------------------------------------------------------------------------------------------
94 PROCEDURE Gen_Wo_Xml(
95    p_api_version               IN           NUMBER    :=1.0,
96    p_init_msg_list             IN           VARCHAR2  :=FND_API.G_FALSE,
97    p_commit                    IN           VARCHAR2  :=FND_API.G_FALSE,
98    p_validation_level          IN     NUMBER    :=FND_API.G_VALID_LEVEL_FULL,
99    p_default                   IN           VARCHAR2  :=FND_API.G_FALSE,
100    p_module_type               IN           VARCHAR2  :=NULL,
101    x_return_status             OUT NOCOPY         VARCHAR2,
102    x_msg_count                 OUT NOCOPY         NUMBER,
103    x_msg_data                  OUT NOCOPY         VARCHAR2,
104    p_workorders_tbl          IN     WORKORDER_TBL_TYPE,
105    p_employee_id         IN     NUMBER,
106    p_user_role         IN     VARCHAR2,-- required for resource transactions
107    p_material_req_flag       IN     VARCHAR2 := 'N',--not required any more
108    x_xml_data        OUT NOCOPY   CLOB,
109    p_concurrent_flag           IN             VARCHAR2  := 'N'-- pass as N non concurrent programs
110 )
111 IS
112 
113 
114 
115 --1. Gather workorder header details.
116 l_wo_details VARCHAR2(5000) := '
117 SELECT
118   wo.job_number,
119   wo.job_description,
120   wo.job_status_meaning,
121   wo.visit_number,
122   wo.organization_name,
123   wo.department_name,
124   decode(wo.scheduled_start_date, null, null, TO_CHAR(wo.scheduled_start_date,''YYYY-MM-DD'')||''T''||TO_CHAR(wo.scheduled_start_date, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset ) scheduled_start_date,
125   decode(wo.scheduled_end_date, null, null, TO_CHAR(wo.scheduled_end_date, ''YYYY-MM-DD'')||''T''||TO_CHAR(wo.scheduled_end_date, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset ) scheduled_end_date,
126   decode(wo.actual_start_date, null, null, TO_CHAR(wo.actual_start_date,''YYYY-MM-DD'')||''T''||TO_CHAR(wo.actual_start_date, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset )actual_start_date,
127   decode(wo.actual_end_date, null, null, TO_CHAR(wo.actual_end_date, ''YYYY-MM-DD'')||''T''||TO_CHAR(wo.actual_end_date, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset ) actual_end_date,
128   wo.unit_name,
129   wo.wo_part_number,
130   wo.serial_number,
131   wo.mr_title,
132   ro.ROUTE_NO route_title
133 FROM
134   AHL_SEARCH_WORKORDERS_V wo,
135   ahl_routes_app_v ro, ';
136 
137 
138 l_wo_details_where VARCHAR2(500) := ' WHERE
139   wo.route_id = ro.route_id(+) and
140   WODE.workorder_id = wo.workorder_id and
141   wo.workorder_id = ';
142 
143 --2. Gather turnover notes for the workorder.
144 l_to_notes VARCHAR2(3000) := '
145 SELECT
146   decode(ENTERED_DATE, null, null, TO_CHAR(ENTERED_DATE, ''YYYY-MM-DD'')||''T''||TO_CHAR(ENTERED_DATE, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset ) ENTERED_DATE,
147   ENTERED_BY_NAME ,
148   notes
149 FROM
150   JTF_NOTES_VL
151 WHERE
152   source_object_code = ''AHL_WO_TURNOVER_NOTES'' and
153   source_object_id = ';
154 
155 --3. Gather operation details.
156 l_op_details_1 VARCHAR2(500) := '
157 SELECT
158   OPERATION_SEQUENCE_NUM,
159   OPERATION_CODE,
160   DESCRIPTION,
161   STATUS,';
162 
163   --AHL_PRD_UTIL_PKG.Get_Op_TotalHours_Assigned(WIP_ENTITY_ID,operation_sequence_num) "Total_Hours",
164   --AHL_PRD_UTIL_PKG.Get_Op_transacted_hours(WIP_ENTITY_ID,operation_sequence_num) "Hours_Worked",
165 
166 l_op_details_2 VARCHAR2(1000) :=  '
167   decode(SCHEDULED_START_DATE, null, null, TO_CHAR(SCHEDULED_START_DATE, ''YYYY-MM-DD'')||''T''||TO_CHAR(SCHEDULED_START_DATE, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset )SCHEDULED_START_DATE,
168   decode(ACTUAL_START_DATE, null, null, TO_CHAR(ACTUAL_START_DATE, ''YYYY-MM-DD'')||''T''||TO_CHAR(ACTUAL_START_DATE, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset ) ACTUAL_START_DATE,
169   decode(ACTUAL_END_DATE, null, null, TO_CHAR(ACTUAL_END_DATE, ''YYYY-MM-DD'')||''T''||TO_CHAR(ACTUAL_END_DATE, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset ) ACTUAL_END_DATE
170 FROM
171    ahl_workorder_operations_v
172 WHERE
173   workorder_operation_id = ';
174 
175 
176 --4. Gather material requirements.
177 l_wo_materials VARCHAR2(3000) := '
178 SELECT
179   CONCATENATED_SEGMENTS,
180   OPERATION_SEQUENCE,
181   DESCRIPTION,
182   REQUESTED_QUANTITY required_quantity,
183   decode(REQUESTED_DATE, null, null, TO_CHAR(REQUESTED_DATE, ''YYYY-MM-DD'')||''T''||TO_CHAR(REQUESTED_DATE, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset ) required_date,
184   SCHEDULE_QUANTITY,
185   decode(SCHEDULE_DATE, null, null, TO_CHAR(SCHEDULE_DATE, ''YYYY-MM-DD'')||''T''||TO_CHAR(SCHEDULE_DATE, ''hh24:mi:ss'')||AHL_PRD_PRINT_PVT.get_tz_offset ) SCHEDULE_DATE,
186   ISSUED_QTY,
187   UOM
188 FROM
189   AHL_JOB_OPER_MATERIALS_V
190 WHERE
191   WORKORDER_ID = ';
192 
193 --9. gather document requirements.
194 --1. docs associated to Routes
195 l_route_doc VARCHAR2(1000) := '
196 SELECT
197   DOC.DOCUMENT_NO,
198   DOC.DOCUMENT_TITLE,
199   DOC.ASO_OBJECT_TYPE_DESC,
200   DOC.REVISION_NO,
201   DOC.CHAPTER,
202   DOC.SECTION,
203   DOC.SUBJECT,
204   DOC.PAGE,
205   DOC.FIGURE,
206   DOC.NOTE
207 FROM
208   AHL_WORKORDERS WO,
209   AHL_DOCUMENT_ASSOS_V DOC
210 WHERE
211   WO.ROUTE_ID = DOC.ASO_OBJECT_ID
212   AND DOC.ASO_OBJECT_TYPE_CODE = ''ROUTE''
213   AND WO.WORKORDER_ID = ';
214 
215 --2. docs associated to operations
216 l_op_doc VARCHAR2(2000) := '
217 UNION ALL
218 SELECT
219   DOC.DOCUMENT_NO,
220   DOC.DOCUMENT_TITLE,
221   DOC.ASO_OBJECT_TYPE_DESC,
222   DOC.REVISION_NO,
223   DOC.CHAPTER,
224   DOC.SECTION,
225   DOC.SUBJECT,
226   DOC.PAGE,
227   DOC.FIGURE,
228   DOC.NOTE
229 FROM
230   AHL_WORKORDER_OPERATIONS WOP,
231   AHL_DOCUMENT_ASSOS_V DOC
232 WHERE
233   WOP.OPERATION_ID = DOC.ASO_OBJECT_ID
234   AND DOC.ASO_OBJECT_TYPE_CODE = ''OPERATION''
235   AND WOP.WORKORDER_ID = ';
236 
237 -- 3. docs associated to MRs
238 l_mr_doc VARCHAR2(2000) := '
239 UNION ALL
240 SELECT
241   DOC.DOCUMENT_NO,
242   DOC.DOCUMENT_TITLE,
243   DOC.ASO_OBJECT_TYPE_DESC,
244   DOC.REVISION_NO,
245   DOC.CHAPTER,
246   DOC.SECTION,
247   DOC.SUBJECT,
248   DOC.PAGE,
249   DOC.FIGURE,
250   DOC.NOTE
251 FROM
252   AHL_WORKORDERS WO,
253   AHL_VISIT_TASKS_B VST,
254   AHL_DOCUMENT_ASSOS_V DOC
255 WHERE
256   WO.VISIT_TASK_ID = VST.VISIT_TASK_ID
257   AND VST.MR_ID = DOC.ASO_OBJECT_ID
258   AND DOC.ASO_OBJECT_TYPE_CODE = ''MR''
259   AND WO.WORKORDER_ID = ';
260 
261 --4. Docs associated to MCs
262 l_mc_doc VARCHAR2(2000) := '
263 UNION ALL
264 -- MC DOCUMENT ASSOCIATIONS
265 SELECT
266   DOC.DOCUMENT_NO,
267   DOC.DOCUMENT_TITLE,
268   DOC.ASO_OBJECT_TYPE_DESC,
269   DOC.REVISION_NO,
270   DOC.CHAPTER,
271   DOC.SECTION,
272   DOC.SUBJECT,
273   DOC.PAGE,
274   DOC.FIGURE,
275   DOC.NOTE
276 FROM
277   AHL_WORKORDERS WO,
278   CSI_II_RELATIONSHIPS CSI,
279   AHL_VISIT_TASKS_B VTS,
280   AHL_DOCUMENT_ASSOS_V DOC
281 WHERE
282   WO.VISIT_TASK_ID = VTS.VISIT_TASK_ID
283   AND VTS.INSTANCE_ID = CSI.SUBJECT_ID
284   AND CSI.RELATIONSHIP_TYPE_CODE = ''COMPONENT-OF''
285   AND (SYSDATE BETWEEN NVL(CSI.ACTIVE_START_DATE, SYSDATE) AND NVL(CSI.ACTIVE_END_DATE, SYSDATE))
286   AND CSI.POSITION_REFERENCE = TO_CHAR(DOC.ASO_OBJECT_ID)
287   AND DOC.ASO_OBJECT_TYPE_CODE = ''MC''
288   AND WO.WORKORDER_ID = ';
289 
290 --5. Docs associated to PC node
291 l_pc_doc VARCHAR2(2000) := '
292 UNION ALL
293 SELECT
294   DOC.DOCUMENT_NO,
295   DOC.DOCUMENT_TITLE,
296   DOC.ASO_OBJECT_TYPE_DESC,
297   DOC.REVISION_NO,
298   DOC.CHAPTER,
299   DOC.SECTION,
300   DOC.SUBJECT,
301   DOC.PAGE,
302   DOC.FIGURE,
303   DOC.NOTE
304 FROM
305   AHL_WORKORDERS WO,
306   AHL_PC_ASSOCIATIONS PCA,
307   AHL_VISIT_TASKS_B VTS,
308   AHL_DOCUMENT_ASSOS_V DOC
309 WHERE
310   WO.VISIT_TASK_ID=VTS.VISIT_TASK_ID
311   AND AHL_UTIL_UC_PKG.GET_UC_HEADER_ID(VTS.INSTANCE_ID) = PCA.UNIT_ITEM_ID
312   AND PCA.PC_NODE_ID = DOC.ASO_OBJECT_ID
313   AND DOC.ASO_OBJECT_TYPE_CODE = ''PC''
314   AND WO.WORKORDER_ID = ';
315 
316 
317 CURSOR get_wo_employees(p_wo_id IN NUMBER, p_employee_id IN NUMBER) IS
318 SELECT DISTINCT
319   wass.employee_id,
320   pf.full_name employee_name
321 FROM
322   ahl_Work_Assignments wass,
323   ahl_Operation_Resources opr,
324   ahl_Workorder_Operations wop,
325   per_people_f pf,
326   per_Person_Types Pt
327 WHERE
328   wass.Operation_Resource_Id = opr.operation_resource_id and
329   opr.Workorder_Operation_Id = wop.workorder_operation_id and
330   wop.workorder_id = p_wo_id and
331   wass.employee_id = nvl(p_employee_id, wass.employee_id) and
332   wass.employee_id = pf.PERSON_ID and
333   pt.Person_Type_Id  = Pf.Person_Type_Id And
334   pt.System_Person_Type ='EMP' And
335   ( Trunc(Sysdate) Between Pf.Effective_Start_Date And
336   Pf.Effective_End_Date);
337 
338 -- cursor to get operations of a workorder
339 CURSOR c_wo_operations(p_workorder_id IN NUMBER) IS
340 SELECT
341   workorder_operation_id,
342   operation_sequence_num
343 FROM
344   ahl_workorder_operations
345 WHERE
346   workorder_id = p_workorder_id;
347 
348 --Cursor for getting workorder plan_id and collection id
349 CURSOR get_wo_qa_ids_csr(p_workorder_id IN NUMBER) IS
350 SELECT
351   PLAN_ID,
352   COLLECTION_ID
353 FROM
354   AHL_WORKORDERS
355 WHERE
356   workorder_id = p_workorder_id;
357 
358 --Cursor for getting workorder operation plan_id and collection id
359 CURSOR get_op_qa_ids_csr(p_wo_id IN NUMBER) IS
360 SELECT
361   OPERATION_SEQUENCE_NUM, --balaji added for Bug 6777371
362   PLAN_ID,
363   COLLECTION_ID
364 FROM
365   AHL_WORKORDER_OPERATIONS
366 WHERE
367   workorder_id = p_wo_id;
368 
369 --declare all local variables here.
370 l_api_name      CONSTANT  VARCHAR2(30)  := 'Gen_Wo_Xml';
371 l_api_version     CONSTANT  NUMBER    := 1.0;
372 l_wo_details_lob CLOB;
373 l_merged_lob CLOB;
374 l_temp_lob CLOB;
375 l_ton_lob CLOB;
376 l_op_lob CLOB;
377 l_wo_mat_lob CLOB;
378 l_wo_doc_lob CLOB;
379 l_wo_qa_lob CLOB;
380 l_op_qa_lob CLOB;
381 l_offset NUMBER;
382 l_next_offset NUMBER;
383 wo_count NUMBER;
384 l_emp_tbl EMP_TABLE_TYPE;
385 l_employee_id NUMBER;
386 l_dummy_string VARCHAR2(1000);
387 i NUMBER;
388 j NUMBER;
389 l_plan_id NUMBER;
390 l_collection_id NUMBER;
391 l_op_seq_num  NUMBER; --balaji added for Bug 6777371
392 l_emp_name VARCHAR2(100);
393 l_query_string VARCHAR2(30000); --pdoki changed for Bug 6777371
394 --l_op_details VARCHAR2(2000);
395 l_op_con_query VARCHAR2(3000);
396 l_wo_con_query VARCHAR2(3000);
397 l_count NUMBER;
398 l_user_role VARCHAR2(40);
399 l_fnd_offset     NUMBER;
400 l_chunk_size NUMBER;
401 l_clob_size NUMBER;
402 
403 
404 context DBMS_XMLGEN.ctxHandle;
405 l_x_res_txn_tbl AHL_PRD_RESOURCE_TRANX_PVT.PRD_RESOURCE_TXNS_TBL;
406 
407 BEGIN
408   --set the operating unit.
409   mo_global.init('AHL');
410 
411   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
412 
413     fnd_log.string
414     (
415       fnd_log.level_procedure,
416       'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
417       'At the start of Gen_Wo_Xml'
418     );
419         END IF;
420 
421   --SAVEPOINT Gen_Wo_Xml;
422 
423 
424   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
425     fnd_log.string
426     (
427       fnd_log.level_statement,
428       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
429       'API input Parameters '
430     );
431     fnd_log.string
432     (
433       fnd_log.level_statement,
434       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
435       '************************'
436     );
437     fnd_log.string
438     (
439       fnd_log.level_statement,
440       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
441       'p_employee_id -> '||p_employee_id
442     );
443     fnd_log.string
444     (
445       fnd_log.level_statement,
446       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
447       'p_user_role -> '||p_user_role
448     );
449     fnd_log.string
450     (
451       fnd_log.level_statement,
452       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
453       'p_concurrent_flag -> '||p_concurrent_flag
454     );
455     fnd_log.string
456     (
457       fnd_log.level_statement,
458       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
459       'p_workorders_tbl size -> '||p_workorders_tbl.count
460     );
461 
462     fnd_log.string
463     (
464       fnd_log.level_statement,
465       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
466       'mo operating unit -> '||mo_global.get_current_org_id()
467     );
468     fnd_log.string
469     (
470       fnd_log.level_statement,
471       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
472       'AHL_PRD_PRINT_PVT.get_tz_offset -> '||AHL_PRD_PRINT_PVT.get_tz_offset
473     );
474   END IF;
475 
476   -- Initialize return status to success initially
477         x_return_status:= FND_API.G_RET_STS_SUCCESS;
478 
479     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
480                                        p_api_version,
481                                        l_api_name,G_PKG_NAME)
482         THEN
483                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
484         END IF;
485 
486   -- Initialize message list if p_init_msg_list is set to TRUE.
487         IF FND_API.to_boolean(p_init_msg_list) THEN
488                 FND_MSG_PUB.initialize;
489         END IF;
490 
491   -- Open a temporary lob for merging the contents.
492   dbms_lob.createTemporary( l_merged_lob, true );
493   dbms_lob.open( l_merged_lob, dbms_lob.lob_readwrite );
494 
495    --determine the user role based on employee parameter if it is not passed already in the input. Concurrent program is an example
496   l_user_role := p_user_role;
497 
498   IF p_user_role IS NULL
499   THEN
500      l_user_role := AHL_PRD_WO_LOGIN_PVT.Get_User_Role;
501   END IF;
502 
503   -- XML generated with dbms_xmlgen doesnt have encoding information. so we need to manually insert into the resultant CLOB.
504   dbms_lob.write(l_merged_lob,length('<?xml version="1.0" encoding="UTF-8"?>'),1,'<?xml version="1.0" encoding="UTF-8"?>');
505 
506   --Put the root node to maintain the XML completeness.
507   dbms_lob.write(l_merged_lob, length('<G_WORKCARD_LIST>'),length(l_merged_lob)+1, '<G_WORKCARD_LIST>');
508 
509   /***************************************************************************************
510    *Start Actual API processing here
511    ***************************************************************************************/
512    -- Process all workorders in the input.
513    IF p_workorders_tbl.COUNT > 0 THEN
514      FOR wo_count IN p_workorders_tbl.FIRST .. p_workorders_tbl.LAST
515      LOOP
516       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
517         fnd_log.string
518         (
519           fnd_log.level_statement,
520           'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
521           'p_workorders_tbl('||wo_count||') --> '||p_workorders_tbl(wo_count)
522         );
523       END IF;
524 
525       i := 1;
526       FOR emp_rec in get_wo_employees(p_workorders_tbl(wo_count), p_employee_id)
527       LOOP
528         l_emp_tbl(i).employee_id := emp_rec.employee_id;
529         l_emp_tbl(i).employee_name := emp_rec.employee_name;
530         i := i + 1;
531       END LOOP;
532 
533       -- If no employees are assigned to work on the workcard
534       -- the report card has to be printed atleast once. hence
535       -- put some dummy value for the loop to get through.
536       IF l_emp_tbl.COUNT = 0 THEN--AND p_employee_id IS NULL THEN
537         l_emp_tbl(1).employee_id := -9999;
538       END IF;
539 
540       IF l_emp_tbl.COUNT > 0 THEN
541         FOR l_count IN l_emp_tbl.FIRST..l_emp_tbl.LAST
542         LOOP
543 
544           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
545             fnd_log.string
546             (
547               fnd_log.level_statement,
548               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
549               'l_emp_tbl('||l_count||') --> '||l_emp_tbl(l_count).employee_id
550             );
551           END IF;
552 
553           --copy the workcard start tag
554           dbms_lob.write(l_merged_lob, length('<G_WORKCARD>'),length(l_merged_lob)+1, '<G_WORKCARD>');
555 
556                /********************************************************************
557           * Create XML data related to employee
558           ********************************************************************/
559           -- add employee details to the XML output
560           IF l_emp_tbl(l_count).employee_name IS NOT NULL
561           THEN
562 
563              dbms_lob.write(
564                   l_merged_lob,
565                     length('<G_EMP_NAME><EMP_NAME>'||l_emp_tbl(l_count).employee_name),
566                     length(l_merged_lob)+1, '<G_EMP_NAME><EMP_NAME>'||dbms_xmlgen.convert(l_emp_tbl(l_count).employee_name)
567                    );
568 
569              dbms_lob.write(
570                    l_merged_lob,
571                    length('</EMP_NAME></G_EMP_NAME>'),
572                    length(l_merged_lob)+1,
573                    '</EMP_NAME></G_EMP_NAME>'
574                  );
575           END IF;
576 
577           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
578             fnd_log.string
579             (
580               fnd_log.level_statement,
581               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
582               'After Processing Employee info '
583             );
584           END IF;
585 
586                /********************************************************************
587           * Create XML data related workorder header
588           ********************************************************************/
589 
590           -- Query and processing workorder details
591           l_wo_con_query := l_wo_details || '(
592                   SELECT
593                    wop.workorder_id,
594                    TO_CHAR(MIN(AHL_PRD_UTIL_PKG.Get_Op_Assigned_Start_Date('||
595                       l_emp_tbl(l_count).employee_id ||
596                         ',wop.workorder_id
597                         ,wop.operation_sequence_num
598                         ,''LINE''
599                         )),
600                    ''YYYY-MM-DD hh:mm:ss+HH:MM'')   Assigned_Start_Date,
601                    TO_CHAR(MAX(AHL_PRD_UTIL_PKG.Get_Op_Assigned_Start_Date('||
602                       l_emp_tbl(l_count).employee_id ||
603                       ',wop.workorder_id
604                        ,wop.operation_sequence_num
605                       ,''LINE'')),
606                    ''YYYY-MM-DD hh:mm:ss+HH:MM'') Assigned_End_Date
607                   FROM
608                     AHL_WORKORDER_OPERATIONS WOP
609                   GROUP BY workorder_id
610                 ) WODE ';
611 
612           l_wo_con_query := l_wo_con_query || l_wo_details_where;
613 
614           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
615             fnd_log.string
616             (
617               fnd_log.level_statement,
618               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
619               'Workorder details query string --->'||l_wo_con_query
620             );
621           END IF;
622 
623 
624           context := dbms_xmlgen.newContext(l_wo_con_query || p_workorders_tbl(wo_count));
625           dbms_xmlgen.setRowsetTag(context,null);
626           dbms_xmlgen.setRowTag(context,'G_WORKORDER');
627           dbms_xmlgen.setConvertSpecialChars ( context, TRUE);
628           l_wo_details_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
629           dbms_xmlgen.closeContext(context);
630 
631           -- free the temp variable for query after every iteration.
632           l_wo_con_query := null;
633 
634           -- Write to lob only when some data exists.
635           IF dbms_lob.getlength(l_wo_details_lob) > 0
636           THEN
637             -- The generated XML itself puts the XML instruction tag which is already there
638             -- in final CLOB. so copy only rest of the details to the final output.
639             l_offset := dbms_lob.INSTR(l_wo_details_lob, '>');
640 
641             -- copy workorder details into final lob
642             dbms_lob.copy(l_merged_lob, l_wo_details_lob, dbms_lob.getlength(l_wo_details_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
643           END IF;
644 
645           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
646             fnd_log.string
647             (
648               fnd_log.level_statement,
649               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
650               'After Processing Workorder Header Info '
651             );
652           END IF;
653 
654                /********************************************************************
655           * Create XML data related to workorder quality
656           ********************************************************************/
657 
658           -- Query and processing workorder details
659           --get the collection_id and plan_id for the workorder.
660           OPEN get_wo_qa_ids_csr(p_workorders_tbl(wo_count));
661           FETCH get_wo_qa_ids_csr INTO l_plan_id, l_collection_id;
662           CLOSE get_wo_qa_ids_csr;
663 
664           IF l_plan_id IS NOT NULL AND l_collection_id IS NOT NULL
665           THEN
666 
667              build_qa_query(
668                p_plan_id      =>  l_plan_id,
669                p_collection_id    =>  l_collection_id,
670                x_query_string   =>  l_query_string
671                );
672 
673              context := dbms_xmlgen.newContext(l_query_string);
674              dbms_xmlgen.setRowsetTag(context,'G_WO_QA_LIST');
675              dbms_xmlgen.setRowTag(context,'G_WO_QA');
676              dbms_xmlgen.setConvertSpecialChars ( context, TRUE);
677              l_wo_qa_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
678              dbms_xmlgen.closeContext(context);
679 
680              -- Write to lob only when some data exists.
681              IF dbms_lob.getlength(l_wo_qa_lob) > 0
682              THEN
683                 -- The generated XML itself puts the XML instruction tag which is already there
684                 -- in final CLOB. so copy only rest of the details to the final output.
685                 l_offset := dbms_lob.INSTR(l_wo_qa_lob, '>');
686 
687                 -- copy workorder details into final lob
688                 dbms_lob.copy(l_merged_lob, l_wo_qa_lob, dbms_lob.getlength(l_wo_qa_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
689              END IF;
690           END IF;
691 
692           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
693             fnd_log.string
694             (
695               fnd_log.level_statement,
696               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
697               'After Processing Workorder Quality Info '
698             );
699           END IF;
700 
701                   /********************************************************************
702           * Create XML data related to workorder operation quality details
703           ********************************************************************/
704 
705           -- Query and processing workorder details
706           --get the collection_id and plan_id for the workorder.
707           -- Balaji modified the code for Bug # 6777371.
708           -- Multiple Operations under the Work Order need to be accomodated.
709           -- Bug # 6777371 -- start
710           /*
711           OPEN get_op_qa_ids_csr(p_workorders_tbl(wo_count));
712           FETCH get_op_qa_ids_csr INTO l_plan_id, l_collection_id;
713           CLOSE get_op_qa_ids_csr;
714           */
715                   dbms_lob.write(
716                   l_merged_lob,
717                     length('<G_WO_OP_QA_LIST>'),
718                     length(l_merged_lob)+1,
719                     '<G_WO_OP_QA_LIST>'
720                    );
721 
722                                         FOR get_op_qa_ids_rec IN get_op_qa_ids_csr(p_workorders_tbl(wo_count))
723                                         LOOP
724 
725                                                 l_plan_id :=  get_op_qa_ids_rec.plan_id;
726                                                 l_collection_id := get_op_qa_ids_rec.collection_id;
727                                                 l_op_seq_num := get_op_qa_ids_rec.operation_sequence_num;
728 
729             IF l_plan_id IS NOT NULL AND l_collection_id IS NOT NULL
730             THEN
731 
732                                                   dbms_lob.write(
733                   l_merged_lob,
734                     length('<G_WO_OP_QA_HEADER><QA_WO_OP_SEQ_NO>'||l_op_seq_num||'</QA_WO_OP_SEQ_NO>'),
735                     length(l_merged_lob)+1,
736                     '<G_WO_OP_QA_HEADER><QA_WO_OP_SEQ_NO>'||l_op_seq_num||'</QA_WO_OP_SEQ_NO>'
737                    );
738 
739                build_qa_query(
740                  p_plan_id      =>  l_plan_id,
741                  p_collection_id    =>  l_collection_id,
742                  x_query_string   =>  l_query_string
743                  );
744 
745                context := dbms_xmlgen.newContext(l_query_string);
746                -- Top tag need to be present.
747                dbms_xmlgen.setRowsetTag(context,'G_DUMMY_TOP_OP_QA');
748                dbms_xmlgen.setRowTag(context,'G_WO_OP_QA');
749                dbms_xmlgen.setConvertSpecialChars ( context, TRUE);
750                l_op_qa_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
751                dbms_xmlgen.closeContext(context);
752 
753                -- Write to lob only when some data exists.
754                IF dbms_lob.getlength(l_op_qa_lob) > 0
755                THEN
756                  -- The generated XML itself puts the XML instruction tag which is already  there
757                  -- in final CLOB. so copy only rest of the details to the final output.
758                  l_offset := dbms_lob.INSTR(l_op_qa_lob, '>');
759 
760                  -- copy workorder details into final lob
761                  dbms_lob.copy(l_merged_lob, l_op_qa_lob, dbms_lob.getlength(l_op_qa_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
762                END IF;
763 
764                                                    dbms_lob.write(
765                   l_merged_lob,
766                     length('</G_WO_OP_QA_HEADER>'),
767                     length(l_merged_lob)+1,
768                     '</G_WO_OP_QA_HEADER>'
769                    );
770 
771             END IF;
772           END LOOP;
773           -- Bug # 6777371 -- end
774 
775                   dbms_lob.write(
776                   l_merged_lob,
777                     length('</G_WO_OP_QA_LIST>'),
778                     length(l_merged_lob)+1,
779                     '</G_WO_OP_QA_LIST>'
780                    );
781 
782           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
783             fnd_log.string
784             (
785               fnd_log.level_statement,
786               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
787               'After Processing Workorder Operation Quality Info '
788             );
789           END IF;
790 
791           /********************************************************************
792           * Create XML data related to turnover notes
793           ********************************************************************/
794 
795           context := dbms_xmlgen.newContext(l_to_notes || p_workorders_tbl(wo_count));
796           dbms_xmlgen.setRowsetTag(context, 'G_TO_NOTES_LIST');-- turn this off if not required
797           dbms_xmlgen.setRowTag(context,'G_TO_NOTES');
798           dbms_xmlgen.setConvertSpecialChars ( context, TRUE);
799           l_ton_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
800           dbms_xmlgen.closeContext(context);
801 
802           -- Write to lob only when some data exists.
803           IF dbms_lob.getlength(l_ton_lob) > 0
804           THEN
805             -- The generated XML itself puts the XML instruction tag which is already there
806             -- in final CLOB. so copy only rest of the details to the final output.
807             l_offset := dbms_lob.INSTR(l_ton_lob, '>');
808 
809             -- copy workorder details into final lob
810             dbms_lob.copy(l_merged_lob, l_ton_lob, dbms_lob.getlength(l_ton_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
811           END IF;
812 
813           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
814             fnd_log.string
815             (
816               fnd_log.level_statement,
817               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
818               'After Processing turnover notes '
819             );
820           END IF;
821 
822 
823                /********************************************************************
824           * Create XML data for workorder operations
825           ********************************************************************/
826 
827           --For each operation of the workorder gather operation details and add it to
828           --output
829           FOR l_op_rec IN c_wo_operations(p_workorders_tbl(wo_count))
830           LOOP
831 
832             l_op_con_query := l_op_details_1;
833 
834             --bind total hours and hours worked
835             l_op_con_query := l_op_con_query || 'NVL(AHL_PRD_UTIL_PKG.Get_Op_TotalHours_Assigned('
836                       || l_emp_tbl(l_count).employee_id
837                       ||', WORKORDER_ID '
838                       ||', operation_sequence_num '
839                       ||', '''||l_user_role||''' ),0) "TOTAL_HOURS", ';
840 
841             l_op_con_query := l_op_con_query || 'NVL(AHL_PRD_UTIL_PKG.Get_Op_transacted_hours('
842                       || l_emp_tbl(l_count).employee_id
843                       ||', WIP_ENTITY_ID '
844                       ||', operation_sequence_num '
845                       ||', '''||l_user_role||''' ),0) "HOURS_WORKED", ';
846 
847             l_op_con_query := l_op_con_query || l_op_details_2 || l_op_rec.workorder_operation_id;
848 
849             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
850               fnd_log.string
851               (
852                 fnd_log.level_statement,
853                 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
854                 'operation details query string --->'||l_op_con_query
855               );
856             END IF;
857 
858             context := dbms_xmlgen.newContext(l_op_con_query);
859 
860             dbms_xmlgen.setRowsetTag(context,null);-- turn this off if not required
861             dbms_xmlgen.setRowTag(context,'G_OP_REC');
862             dbms_xmlgen.setConvertSpecialChars ( context, TRUE);
863             l_op_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
864             dbms_xmlgen.closeContext(context);
865 
866             -- Free temp variable once the query is executed for next iteration.
867             l_op_con_query := null;
868 
869             -- Write to lob only when some data exists.
870             IF dbms_lob.getlength(l_op_lob) > 0
871             THEN
872               -- The generated XML itself puts the XML instruction tag which is already there
873               -- in final CLOB. so copy only rest of the details to the final output.
874               l_offset := dbms_lob.INSTR(l_op_lob, '>');
875 
876               -- copy workorder details into final lob
877               dbms_lob.copy(l_merged_lob, l_op_lob, dbms_lob.getlength(l_op_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
878             /********************************************************************
879              * Create XML data for resource transactions
880              ********************************************************************/
881               --Invoke AHL_PRD_RESOURCE_TRANX_PVT.Get_Resource_Txn_Defaults to get
882               --resource transaction details for the operation as follows.
883 
884               AHL_PRD_RESOURCE_TRANX_PVT.Get_Resource_Txn_Defaults(
885               P_api_version   => 1.0,
886               P_init_msg_list   => FND_API.G_FALSE,
887               p_module_type   => null,
888               x_return_status   => x_return_status,
889               x_msg_count   => x_msg_count,
890               x_msg_data    => x_msg_data,
891               p_employee_id   => l_emp_tbl(l_count).employee_id,
892               p_workorder_id    => p_workorders_tbl(wo_count),
893               p_operation_seq_num => l_op_rec.operation_sequence_num,
894               p_function_name   => l_user_role,
895               --p_user_role   => p_user_role,
896               x_resource_txn_tbl  => l_x_res_txn_tbl
897                );
898 
899               --For every resource transaction data returned create and include xml data as below
900 
901               IF l_x_res_txn_tbl.COUNT > 0
902               THEN
903                  -- The end tag of operation has to come after its resource transaction records.
904                  --hence overwrite the end tag
905                  l_offset := dbms_lob.INSTR(l_merged_lob, '</G_OP_REC>', length(l_merged_lob)-12, 1);
906 
907                 --Insert the start tag for current resource transaction.
908                 dbms_lob.write(l_merged_lob, length('<G_RES_TXN_LIST>'),l_offset, '<G_RES_TXN_LIST>');
909 
910                 FOR j IN l_x_res_txn_tbl.FIRST .. l_x_res_txn_tbl.LAST LOOP
911 
912                    l_dummy_string := '<G_OP_RES_REC>'||'<OPERATION_SEQUENCE>'||l_x_res_txn_tbl(j).operation_sequence_num||'</OPERATION_SEQUENCE>';
913                    l_dummy_string := l_dummy_string ||'<RESOURCE_SEQUENCE>'||l_x_res_txn_tbl(j).resource_sequence_num||'</RESOURCE_SEQUENCE>';
914                    l_dummy_string := l_dummy_string || '<RESOURCE_TYPE>'||dbms_xmlgen.convert(l_x_res_txn_tbl(j).resource_type_name)||'</RESOURCE_TYPE>';
915                    l_dummy_string := l_dummy_string || '<RESOURCE_NAME>'||dbms_xmlgen.convert(l_x_res_txn_tbl(j).resource_name)||'</RESOURCE_NAME>';
916                    l_dummy_string := l_dummy_string || '<EMPLOYEE_NAME>'||dbms_xmlgen.convert(l_x_res_txn_tbl(j).employee_name)||'</EMPLOYEE_NAME>'||'</G_OP_RES_REC>';
917                    dbms_lob.write(l_merged_lob, length(l_dummy_string),length(l_merged_lob)+1, l_dummy_string);
918                 END LOOP;
919 
920                 --Insert the end tag for current resource transaction.
921                 dbms_lob.write(l_merged_lob, length('</G_RES_TXN_LIST>'),length(l_merged_lob)+1, '</G_RES_TXN_LIST>');
922                 dbms_lob.write(l_merged_lob, length('</G_OP_REC>'),length(l_merged_lob)+1, '</G_OP_REC>');
923               END IF;
924             END IF;
925           END LOOP;
926 
927           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
928             fnd_log.string
929             (
930               fnd_log.level_statement,
931               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
932               'After Processing Workorder Operations '
933             );
934           END IF;
935 
936 
937                /********************************************************************
938           * Create XML data for material requirements of a workorder
939           ********************************************************************/
940 
941           -- Query and process workorder materials
942           context := dbms_xmlgen.newContext(l_wo_materials || p_workorders_tbl(wo_count));
943           dbms_xmlgen.setRowsetTag(context, 'G_WO_MAT_LIST');
944           dbms_xmlgen.setRowTag(context,'G_WO_MAT');
945           dbms_xmlgen.setConvertSpecialChars ( context, TRUE);
946           l_wo_mat_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
947           dbms_xmlgen.closeContext(context);
948 
949           -- Write to lob only when some data exists.
950           IF dbms_lob.getlength(l_wo_mat_lob) > 0
951           THEN
952              -- The generated XML itself puts the XML instruction tag which is already there
953              -- in final CLOB. so copy only rest of the details to the final output.
954              l_offset := dbms_lob.INSTR(l_wo_mat_lob, '>');
955 
956              -- copy workorder details into final lob
957              dbms_lob.copy(l_merged_lob, l_wo_mat_lob, dbms_lob.getlength(l_wo_mat_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
958 
959           END IF;
960 
961           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
962             fnd_log.string
963             (
964               fnd_log.level_statement,
965               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
966               'After Processing Workorder Material requirements '
967             );
968           END IF;
969 
970                /********************************************************************
971           * Create XML data for Document associations to a workorder
972           ********************************************************************/
973 
974           -- Query and process workorder materials
975           context := dbms_xmlgen.newContext(
976               l_route_doc || p_workorders_tbl(wo_count) || ' '||
977               l_op_doc || p_workorders_tbl(wo_count) || ' '||
978               l_mr_doc || p_workorders_tbl(wo_count) || ' '||
979               l_mc_doc || p_workorders_tbl(wo_count) || ' '
980               --||l_pc_doc || p_workorders_tbl(wo_count)
981                );
982           dbms_xmlgen.setRowsetTag(context,'G_WO_DOC_LIST');
983           dbms_xmlgen.setRowTag(context,'G_WO_DOC');
984           dbms_xmlgen.setConvertSpecialChars ( context, TRUE);
985           l_wo_doc_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
986           dbms_xmlgen.closeContext(context);
987 
988           -- Write to lob only when some data exists.
989           IF dbms_lob.getlength(l_wo_doc_lob) > 0
990           THEN
991              -- The generated XML itself puts the XML instruction tag which is already there
992              -- in final CLOB. so copy only rest of the details to the final output.
993              l_offset := dbms_lob.INSTR(l_wo_doc_lob, '>');
994 
995              -- copy workorder details into final lob
996              dbms_lob.copy(l_merged_lob, l_wo_doc_lob, dbms_lob.getlength(l_wo_doc_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
997 
998           END IF;
999 
1000           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1001             fnd_log.string
1002             (
1003               fnd_log.level_statement,
1004               'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1005               'After Processing Document associations to workorders'
1006             );
1007           END IF;
1008 
1009           --copy the workcard end tag
1010           dbms_lob.write(l_merged_lob, length('</G_WORKCARD>'),length(l_merged_lob)+1, '</G_WORKCARD>');
1011         END LOOP;
1012 
1013       END IF;
1014 
1015      END LOOP;
1016    END IF;
1017   /***************************************************************************************
1018    *End Actual API processing here
1019    ***************************************************************************************/
1020 
1021   -- Insert ending root node to maintain the XML completeness.
1022   dbms_lob.write(l_merged_lob, length('</G_WORKCARD_LIST>'),length(l_merged_lob)+1, '</G_WORKCARD_LIST>');
1023 
1024   x_xml_data := l_merged_lob;
1025 
1026   --Close and release the temporary lobs
1027   dbms_lob.close( l_merged_lob );
1028   --dbms_lob.close(l_wo_details_lob);
1029   dbms_lob.freeTemporary( l_merged_lob );
1030 
1031   /*
1032   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1033     l_fnd_offset     := 1;
1034     l_chunk_size := 3000;
1035     l_clob_size := LENGTH(x_xml_data);
1036 
1037     WHILE (l_clob_size > 0) LOOP
1038        fnd_log.string
1039        (
1040       fnd_log.level_statement,
1041       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1042       'xml data ->'||substr(x_xml_data, l_chunk_size, l_fnd_offset)
1043        );
1044        l_clob_size := l_clob_size - l_chunk_size;
1045        l_fnd_offset := l_fnd_offset + l_chunk_size;
1046     END LOOP;
1047 
1048   END IF;
1049   */
1050 
1051   IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
1052     fnd_log.string
1053     (
1054       fnd_log.level_procedure,
1055       'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.end',
1056       'At the end of AHL_PRD_PRINT_PVT'
1057     );
1058         END IF;
1059 
1060 EXCEPTION
1061    WHEN OTHERS THEN
1062 
1063       x_return_status := Fnd_Api.g_ret_sts_unexp_error;
1064 
1065       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1066   fnd_log.string
1067   (
1068     fnd_log.level_statement,
1069     'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1070     'xml data ->'||dbms_lob.substr(x_xml_data, dbms_lob.getlength(x_xml_data), 1)
1071   );
1072       END IF;
1073 
1074       IF Fnd_Msg_Pub.check_msg_level (Fnd_Msg_Pub.g_msg_lvl_unexp_error)
1075       THEN
1076          Fnd_Msg_Pub.add_exc_msg (G_PKG_NAME, l_api_name);
1077       END IF;
1078 
1079       Fnd_Msg_Pub.count_and_get (
1080             p_encoded => Fnd_Api.g_false,
1081             p_count   => x_msg_count,
1082             p_data    => x_msg_data
1083       );
1084 
1085 
1086 
1087 END Gen_Wo_Xml;
1088 
1089 
1090 -- procedure to collect all the QA data and return it as a string.
1091 procedure build_qa_query(
1092           p_plan_id   IN NUMBER,
1093           p_collection_id IN NUMBER,
1094           x_query_string  OUT NOCOPY VARCHAR2
1095          )
1096 IS
1097 
1098   --cursor for getting QA Chars
1099   CURSOR get_qa_chars_csr(p_plan_id IN NUMBER) IS
1100   SELECT
1101     char_id,
1102     organization_id,
1103     prompt_sequence ,
1104     prompt,
1105     enabled_flag,
1106     default_value,
1107     default_value_id,
1108     result_column_name,
1109     values_exist_flag,
1110     displayed_flag,
1111     plan_name,
1112     plan_description,
1113     char_name,
1114     datatype,
1115     hardcoded_column,
1116     developer_name
1117   FROM
1118     QA_PLAN_CHARS_V QA
1119   WHERE
1120     plan_id = p_plan_id;
1121 
1122   --local variable to hold the query string to retrieve qa results
1123   l_query_string VARCHAR2(30000) := null; --pdoki changed for Bug 6777371
1124   l_rec_count NUMBER;
1125   l_result_column_name VARCHAR2(100);
1126   l_item_found VARCHAR2(1);
1127   l_locator_found VARCHAR2(1);
1128   l_item_hardcoded_column VARCHAR2(100);
1129   l_locator_hardcoded_column VARCHAR(100);
1130   l_dummy_query VARCHAR2(3000);
1131   l_api_name  CONSTANT  VARCHAR2(30)  := 'build_qa_query';
1132 
1133 BEGIN
1134 
1135   l_query_string := 'SELECT RESULTS.COLLECTION_ID, RESULTS.OCCURRENCE ';
1136 
1137   l_dummy_query := ' UNION ALL SELECT null collection_id, null occurrence';
1138 
1139   l_rec_count := 1;
1140 
1141   -- retrieve all chars associated with the qa plan
1142   FOR qa_csr IN get_qa_chars_csr(p_plan_id) LOOP
1143 
1144     IF qa_csr.char_id = G_ITEM_NUMBER_CHAR THEN
1145     -- its an item number
1146       l_query_string := l_query_string ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| qa_csr.prompt ||''' )';
1147       l_query_string := l_query_string || ', XMLELEMENT("VALUE", ITEM.' || 'CONCATENATED_SEGMENTS' || ' ) ) COLL_ELEMENT';
1148 
1149       l_dummy_query := l_dummy_query ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| null ||''' )';
1150       l_dummy_query := l_dummy_query || ', XMLELEMENT("VALUE", '''|| null ||''' ) ) COLL_ELEMENT';
1151 
1152       l_item_found := FND_API.G_TRUE;
1153       l_item_hardcoded_column := qa_csr.hardcoded_column;
1154       --l_column_name_tbl(l_rec_count) := result_column;
1155     ELSIF qa_csr.char_id = G_LOCATOR_CHAR THEN
1156 
1157       l_query_string := l_query_string ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| qa_csr.prompt ||''' )';
1158       l_query_string := l_query_string || ', XMLELEMENT("VALUE", LOCATOR.' || 'CONCATENATED_SEGMENTS' || ' ) ) COLL_ELEMENT';
1159 
1160       l_dummy_query := l_dummy_query ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| null ||''' )';
1161       l_dummy_query := l_dummy_query || ', XMLELEMENT("VALUE", '''|| null ||''' ) ) COLL_ELEMENT';
1162 
1163       l_locator_found := FND_API.G_TRUE;
1164       l_locator_hardcoded_column := qa_csr.hardcoded_column;
1165       --l_column_name_tbl(l_rec_count) := result_column;
1166     ELSE
1167       IF qa_csr.hardcoded_column IS NOT NULL
1168       THEN
1169         l_result_column_name := qa_csr.developer_name;
1170       ELSE
1171         l_result_column_name := qa_csr.result_column_name;
1172       END IF;
1173       l_query_string := l_query_string ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| qa_csr.prompt ||''' )';
1174       l_query_string := l_query_string || ', XMLELEMENT("VALUE", RESULTS.' || l_result_column_name || ' ) ) COLL_ELEMENT';
1175 
1176       l_dummy_query := l_dummy_query ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| null ||''' )';
1177       l_dummy_query := l_dummy_query || ', XMLELEMENT("VALUE", '''|| null ||''' ) ) COLL_ELEMENT';
1178     END IF;
1179 
1180 
1181     l_rec_count := l_rec_count + 1;
1182 
1183   END LOOP;
1184 
1185   --l_query_string := l_query_string || ' ,'''||TO_CHAR(l_rec_count-1)||''''||' AS FIELD_COUNT';
1186 
1187   -- Results will all be included in the from clause
1188   l_query_string := l_query_string || ' FROM QA_RESULTS_V RESULTS ';
1189 
1190   -- Append required FROM clauses for the API.
1191   IF l_item_found = FND_API.G_TRUE THEN
1192     l_query_string := l_query_string || ' , MTL_SYSTEM_ITEMS_KFV ITEM ';
1193   END IF;
1194 
1195   IF l_locator_found = FND_API.G_TRUE THEN
1196     l_query_string := l_query_string || ' , MTL_ITEM_LOCATIONS_KFV LOCATOR ';
1197   END IF;
1198 
1199   -- Append collection id to the where clause
1200   l_query_string := l_query_string || ' WHERE RESULTS.COLLECTION_ID = ' || p_collection_id;
1201 
1202   -- Append required FROM clauses for the API.
1203   IF l_item_found = FND_API.G_TRUE THEN
1204     l_query_string := l_query_string || ' AND ITEM.inventory_item_id (+) = RESULTS.' || l_item_hardcoded_column;
1205     l_query_string := l_query_string || ' AND ITEM.organization_id (+) = RESULTS.organization_id ';
1206   END IF;
1207 
1208   IF l_locator_found = FND_API.G_TRUE THEN
1209     l_query_string := l_query_string || ' AND LOCATOR.inventory_location_id (+) = RESULTS.' || l_locator_hardcoded_column;
1210     l_query_string := l_query_string || ' AND LOCATOR.organization_id (+) = RESULTS.organization_id ';
1211   END IF;
1212 
1213   --l_query_string := l_query_string || ' ORDER BY RESULTS.OCCURRENCE ';
1214 
1215   --add dummy query to the original query
1216   l_query_string := l_query_string || l_dummy_query || ' FROM DUAL CONNECT BY 1 = 1 and level <= 3';
1217   x_query_string := l_query_string;
1218 
1219   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
1220     fnd_log.string
1221     (
1222       fnd_log.level_statement,
1223       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1224       'Quality Collection query string --->'||l_query_string
1225     );
1226   END IF;
1227 
1228 END build_qa_query;
1229 
1230 ------------------------------------------------------------------------------------------------
1231 -- Procedure to generate XML data for Workcard concurrent program
1232 ------------------------------------------------------------------------------------------------
1233 PROCEDURE Gen_Workcard_Xml(
1234     errbuf                  OUT NOCOPY  VARCHAR2,
1235     retcode                 OUT NOCOPY  NUMBER,
1236     p_api_version           IN          NUMBER,
1237     p_visit_id        IN    NUMBER,
1238     p_stage_id        IN    NUMBER,
1239     p_wo_no_from      IN    VARCHAR2,
1240     p_wo_no_to        IN    VARCHAR2,
1241     p_sch_start_from      IN    VARCHAR2,
1242     p_sch_start_to      IN    VARCHAR2,
1243     p_employee_id     IN    NUMBER
1244 )
1245 IS
1246 
1247 --declare local variables here.
1248 l_return_status     VARCHAR2(30);
1249 l_msg_count         NUMBER;
1250 l_api_name          VARCHAR2(30) := 'Gen_Workcard_Xml';
1251 l_api_version       NUMBER := 1.0;
1252 l_workorder_tbl WORKORDER_TBL_TYPE;
1253 l_wo_count NUMBER;
1254 l_clob CLOB;
1255 l_bind_value_tbl AHL_OSP_UTIL_PKG.ahl_conditions_tbl;
1256 l_vst_wocard_csr AHL_OSP_UTIL_PKG.ahl_search_csr;
1257 l_bind_index NUMBER;
1258 l_query_string VARCHAR2(2000);
1259 i NUMBER;
1260 l_workorder_id NUMBER;
1261 l_offset     NUMBER;
1262 l_chunk_size NUMBER;
1263 l_clob_size NUMBER;
1264 
1265 BEGIN
1266 
1267     --set the operating unit.
1268     mo_global.init('AHL');
1269 
1270     -- this step is not required. peforming since was not getting the output.
1271     -- dbms_application_info.set_client_info('600');
1272 
1273     -- Initialize error message stack by default
1274     FND_MSG_PUB.Initialize;
1275 
1276     fnd_file.put_line(fnd_file.log, '*************API input parameters**************');
1277     fnd_file.put_line(fnd_file.log, 'API inputs p_api_version -> '||p_api_version);
1278     fnd_file.put_line(fnd_file.log, 'API inputs p_visit_id -> '||p_visit_id);
1279     fnd_file.put_line(fnd_file.log, 'API inputs p_stage_id -> '||p_stage_id);
1280     fnd_file.put_line(fnd_file.log, 'API inputs p_wo_no_from -> '||p_wo_no_from);
1281     fnd_file.put_line(fnd_file.log, 'API inputs p_wo_no_to -> '||p_wo_no_to);
1282     fnd_file.put_line(fnd_file.log, 'API inputs p_sch_start_from -> '||p_sch_start_from);
1283     fnd_file.put_line(fnd_file.log, 'API inputs p_sch_start_to -> '||p_sch_start_to);
1284     fnd_file.put_line(fnd_file.log, 'API inputs p_employee_id -> '||p_employee_id);
1285     fnd_file.put_line(fnd_file.log, '*************API input parameters**************');
1286 
1287     l_query_string := ' select
1288               wo.workorder_id
1289       from
1290        ahl_workorders wo,
1291        wip_discrete_jobs wipd,
1292        ahl_visits_b vst,
1293        ahl_visit_tasks_b vtsk
1294       where
1295        wo.visit_id = vst.visit_id and
1296        wo.wip_entity_id = wipd.wip_entity_id and
1297        wo.visit_task_id = vtsk.visit_task_id and
1298        vst.visit_id = vtsk.visit_id and
1299        wo.status_code in (3, 4, 5, 6, 7, 12, 19) and
1300        wo.master_workorder_flag <> ''Y'' and
1301        vst.status_code in (''RELEASED'',''PARTIALLY RELEASED'') ';
1302 
1303     l_bind_index := 1;
1304 
1305     IF p_visit_id IS NOT NULL THEN
1306       l_query_string := l_query_string || ' AND wo.visit_id = :'||l_bind_index;
1307   l_bind_value_tbl(l_bind_index) := p_visit_id;
1308   l_bind_index := l_bind_index + 1;
1309     END IF;
1310 
1311     IF p_stage_id IS NOT NULL THEN
1312       l_query_string := l_query_string || ' AND vtsk.stage_id = :'||l_bind_index;
1313   l_bind_value_tbl(l_bind_index) := p_stage_id;
1314   l_bind_index := l_bind_index + 1;
1315     END IF;
1316 
1317     IF p_wo_no_from IS NOT NULL AND p_wo_no_to IS NOT NULL THEN
1318       l_query_string := l_query_string || ' AND wo.workorder_name between :'||l_bind_index||' and :'||(l_bind_index+1);
1319   l_bind_value_tbl(l_bind_index) := p_wo_no_from;
1320   l_bind_value_tbl(l_bind_index+1) := p_wo_no_to;
1321   l_bind_index := l_bind_index + 2;
1322     END IF;
1323 
1324     IF p_sch_start_from IS NOT NULL THEN
1325       l_query_string := l_query_string || ' AND wipd.scheduled_start_date >= :'||l_bind_index;
1326   l_bind_value_tbl(l_bind_index) :=  fnd_date.canonical_to_date(p_sch_start_from);
1327   l_bind_index := l_bind_index + 1;
1328     END IF;
1329 
1330     IF p_sch_start_to IS NOT NULL THEN
1331       l_query_string := l_query_string || ' AND wipd.scheduled_completion_date <= :'||l_bind_index;
1332   l_bind_value_tbl(l_bind_index) := fnd_date.canonical_to_date(p_sch_start_to);
1333   l_bind_index := l_bind_index + 1;
1334     END IF;
1335 
1336     fnd_file.put_line(fnd_file.log, l_query_string);
1337 
1338     AHL_OSP_UTIL_PKG.OPEN_SEARCH_CURSOR(l_vst_wocard_csr, l_bind_value_tbl, l_query_string);
1339 
1340     i := 1;
1341     LOOP
1342       FETCH l_vst_wocard_csr INTO l_workorder_id;
1343       EXIT WHEN l_vst_wocard_csr%NOTFOUND;
1344       l_workorder_tbl(i) := l_workorder_id;
1345       i := i + 1;
1346     END LOOP;
1347 
1348     CLOSE l_vst_wocard_csr;
1349 
1350 
1351     fnd_file.put_line(fnd_file.log, 'No of workorders ->'||l_workorder_tbl.COUNT);
1352 
1353     IF l_workorder_tbl.COUNT > 0
1354     THEN
1355        Gen_Wo_Xml(
1356      p_api_version  => 1.0,
1357      p_init_msg_list  => FND_API.G_TRUE,
1358      p_commit   => FND_API.G_TRUE,
1359      p_validation_level => FND_API.G_VALID_LEVEL_FULL,
1360      p_default    => FND_API.G_TRUE,
1361      p_module_type  => NULL,
1362      x_return_status  => l_return_status,
1363      x_msg_count    => l_msg_count,
1364      x_msg_data   => errbuf,
1365      p_workorders_tbl => l_workorder_tbl,
1366      p_employee_id  => p_employee_id,
1367      p_user_role    => null,
1368      p_material_req_flag  => 'N',
1369      x_xml_data   => l_clob,
1370      p_concurrent_flag    => 'Y'
1371   );
1372 
1373         l_offset     := 1;
1374         l_chunk_size := 3000;
1375         l_clob_size := dbms_lob.getlength(l_clob);
1376 
1377         WHILE (l_clob_size > 0) LOOP
1378           fnd_file.put(fnd_file.log, dbms_lob.substr (l_clob, l_chunk_size, l_offset));
1379           l_clob_size := l_clob_size - l_chunk_size;
1380           l_offset := l_offset + l_chunk_size;
1381         END LOOP;
1382 
1383         l_msg_count := FND_MSG_PUB.Count_Msg;
1384         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
1385         THEN
1386             retcode := 2;  -- error based only on return status
1387         ELSIF (l_msg_count > 0 AND l_return_status = FND_API.G_RET_STS_SUCCESS)
1388         THEN
1389            retcode := 1;  -- warning based on return status + msg count
1390         ELSE
1391      --fnd_file.put_line(fnd_file.output, dbms_lob.substr(l_clob, dbms_lob.getlength(l_clob), 1));
1392 
1393      l_offset     := 1;
1394      l_chunk_size := 3000;
1395      l_clob_size := dbms_lob.getlength(l_clob);
1396 
1397      WHILE (l_clob_size > 0) LOOP
1398         fnd_file.put(fnd_file.output, dbms_lob.substr (l_clob, l_chunk_size, l_offset));
1399         l_clob_size := l_clob_size - l_chunk_size;
1400         l_offset := l_offset + l_chunk_size;
1401      END LOOP;
1402 
1403            retcode := 0;  -- success, since nothing is wrong
1404         END IF;
1405      END IF;
1406 END Gen_Workcard_Xml;
1407 
1408 PROCEDURE Process_JCG_Request (
1409  p_api_version       IN             NUMBER    :=1.0,
1410  p_init_msg_list     IN             VARCHAR2  :=FND_API.G_FALSE,
1411  p_commit            IN             VARCHAR2  :=FND_API.G_FALSE,
1412  p_validation_level  IN             NUMBER    :=FND_API.G_VALID_LEVEL_FULL,
1413  p_default           IN             VARCHAR2  :=FND_API.G_FALSE,
1414  p_module_type       IN             VARCHAR2  :=NULL,
1415  x_return_status     OUT NOCOPY     VARCHAR2,
1416  x_msg_count         OUT NOCOPY     NUMBER,
1417  x_msg_data          OUT NOCOPY     VARCHAR2,
1418  p_operation_flag    IN             VARCHAR2,
1419  p_x_jcg_id          IN OUT NOCOPY  NUMBER,
1420  p_object_type       IN             VARCHAR2  := NULL,
1421  p_object_id         IN             NUMBER    := NULL,
1422  p_status_code       IN             VARCHAR2,
1423  p_file_location     IN             Varchar2  := NULL,
1424  p_split_flag        IN             VARCHAR2  := 'N',
1425  p_xml_data_filename IN             VARCHAR2  := NULL,
1426  p_error_message     IN             VARCHAR2  := NULL,
1427  p_concurrent_request_id IN         NUMBER    := NULL
1428  )
1429  IS
1430 
1431  Cursor get_jcg_req_rec_csr(c_jcg_id NUMBER)
1432  IS
1433  Select OBJECT_VERSION_NUMBER,OBJECT_TYPE_CODE,OBJECT_ID from AHL_ENIGMA_JCG_DETAILS
1434  Where JCG_REQUEST_ID = c_jcg_id
1435  FOR UPDATE of STATUS_CODE;
1436 
1437  Cursor jcg_req_exists_csr(c_jcg_id NUMBER)
1438  IS
1439  Select OBJECT_VERSION_NUMBER,OBJECT_TYPE_CODE,OBJECT_ID from AHL_ENIGMA_JCG_DETAILS
1440  where jcg_request_id = c_jcg_id
1441  FOR UPDATE of STATUS_CODE;
1442 
1443  Cursor get_other_jcg_req_id_csr(c_object_type VARCHAR2, c_object_id NUMBER, c_jcg_id NUMBER)
1444  IS
1445  Select JCG_REQUEST_ID from AHL_ENIGMA_JCG_DETAILS
1446  Where OBJECT_TYPE_CODE = c_object_type
1447  AND   OBJECT_ID        = c_object_id
1448  AND   JCG_REQUEST_ID < c_jcg_id ;
1449 
1450  Cursor get_other_jcg_non_s_csr(c_object_type VARCHAR2, c_object_id NUMBER, c_jcg_id NUMBER)
1451  IS
1452  Select JCG_REQUEST_ID from AHL_ENIGMA_JCG_DETAILS
1453  Where OBJECT_TYPE_CODE = c_object_type
1454  AND   OBJECT_ID        = c_object_id
1455  AND   STATUS_CODE      IN ('E','P')
1456  AND   JCG_REQUEST_ID < c_jcg_id ;
1457 
1458 l_jcg_id        NUMBER;
1459 l_api_name      VARCHAR2(30) := 'Process_JCG_Request';
1460 l_user_id       NUMBER;
1461 l_ovn           NUMBER;
1462 l_login_id      NUMBER;
1463 l_object_id     NUMBER;
1464 l_object_type   VARCHAR2(80);
1465 
1466 
1467 l_log_current_level        NUMBER       := FND_LOG.g_current_runtime_level;
1468 l_api_version              NUMBER       := 1.0;
1469 l_log_statement            NUMBER       := FND_LOG.level_statement;
1470 l_log_procedure            NUMBER       := FND_LOG.level_procedure;
1471 l_log_error                NUMBER       := FND_LOG.level_error;
1472 l_log_unexpected           NUMBER       := FND_LOG.level_unexpected;
1473 
1474 BEGIN
1475 
1476     IF (l_log_procedure >= l_log_current_level)THEN
1477          fnd_log.string(
1478          l_log_procedure,
1479          'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1480           'At Begin of the Procedure Process_JCG_Request'
1481           );
1482 	END IF;
1483 
1484 -- Standard start of API savepoint
1485 SAVEPOINT Process_JCG_Request_PVT;
1486 
1487 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1488 
1489   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
1490                                        p_api_version,
1491                                        l_api_name,G_PKG_NAME)
1492         THEN
1493                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1494         END IF;
1495 
1496   -- Initialize message list if p_init_msg_list is set to TRUE.
1497         IF FND_API.to_boolean(p_init_msg_list) THEN
1498                 FND_MSG_PUB.initialize;
1499         END IF;
1500 
1501      IF (l_log_statement >= l_log_current_level)THEN
1502          fnd_log.string(
1503          l_log_statement,
1504          'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1505           'Before Basic Validations for the procedure.'
1506           );
1507 	END IF;
1508 
1509 -- Baisc Validation
1510   IF(p_operation_flag IS NULL) THEN
1511     FND_MESSAGE.Set_Name('AHL','AHL_PRD_JCG_DML_FLAG_NULL');
1512     FND_MSG_PUB.ADD;
1513     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1514   END IF;
1515 
1516   IF (p_status_code IS NULL) THEN
1517 
1518 	  IF (l_log_error >= l_log_current_level)THEN
1519       fnd_log.string(
1520       l_log_error,
1521       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1522       'Mandatory input, Status_Code is NULL.'
1523       );
1524 	END IF;
1525 
1526 	  FND_MESSAGE.Set_Name('AHL','AHL_PRD_JCG_STATUS_CODE_NULL');
1527 	  FND_MSG_PUB.ADD;
1528 	  RAISE FND_API.G_EXC_ERROR;
1529   END IF;
1530 
1531  IF (p_operation_flag = 'C') THEN
1532 
1533 	  IF (p_object_type IS NULL) THEN
1534 	  FND_MESSAGE.Set_Name('AHL','AHL_PRD_JCG_OBJECT_TYPE_NULL');
1535 	  FND_MSG_PUB.ADD;
1536 	  RAISE FND_API.G_EXC_ERROR;
1537 	  END IF;
1538 	  IF (p_object_id IS NULL) THEN
1539 	  FND_MESSAGE.Set_Name('AHL','AHL_PRD_JCG_OBJECT_ID_NULL');
1540 	  FND_MSG_PUB.ADD;
1541 	  RAISE FND_API.G_EXC_ERROR;
1542 	  END IF;
1543 
1544   ELSIF (p_operation_flag = 'U') THEN
1545 
1546       IF (p_x_jcg_id IS NULL) THEN
1547 	  FND_MESSAGE.Set_Name('AHL','AHL_PRD_JCG_ID_NULL');
1548 	  FND_MSG_PUB.ADD;
1549 	  RAISE FND_API.G_EXC_ERROR;
1550 	  END IF;
1551 
1552 	  IF (p_file_location IS NULL AND (p_status_code = 'S' OR p_status_code = 'Complete' )) THEN
1553 	  FND_MESSAGE.Set_Name('AHL','AHL_PRD_JCG_FILE_LOC_NULL');
1554 	  FND_MSG_PUB.ADD;
1555 	  RAISE FND_API.G_EXC_ERROR;
1556 	  END IF;
1557 
1558   END IF;
1559 
1560      IF (l_log_statement >= l_log_current_level)THEN
1561          fnd_log.string(
1562          l_log_statement,
1563          'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1564           'After Basic Validations for the procedure.'
1565           );
1566 	END IF;
1567 --End Basic Validations.
1568 
1569 l_user_id  := to_number(fnd_global.USER_ID);
1570 l_login_id := to_number(fnd_global.LOGIN_ID);
1571 
1572 IF (p_operation_flag = 'C' ) THEN
1573 
1574   	IF (l_log_statement >= l_log_current_level)THEN
1575       fnd_log.string(
1576       l_log_statement,
1577       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1578       'Before inserting a new row in AHL_ENIGMA_JCG_DETAILS.'
1579       );
1580 	END IF;
1581 
1582 INSERT INTO AHL_ENIGMA_JCG_DETAILS ( JCG_REQUEST_ID,
1583 									 OBJECT_TYPE_CODE,
1584 									 OBJECT_ID,
1585 									 STATUS_CODE,
1586 									 FILE_LOCATION,
1587 									 SPLIT_FLAG,
1588 									 XML_DATA_FILENAME,
1589 									 OBJECT_VERSION_NUMBER,
1590 									 ERROR_MESSAGE,
1591 									 CONCURRENT_REQUEST_ID,
1592 									 LAST_UPDATE_DATE,
1593 									 LAST_UPDATED_BY,
1594 									 CREATION_DATE ,
1595 									 CREATED_BY,
1596 									 LAST_UPDATE_LOGIN,
1597 									 SECURITY_GROUP_ID
1598 									 )
1599 						    VALUES (AHL_ENIGMA_JCG_DETAILS_S.NEXTVAL,
1600 									p_object_type,
1601 									p_object_id,
1602 									p_status_code,
1603 									p_file_location,
1604 									p_split_flag,
1605 									p_xml_data_filename,
1606 									1,
1607 									p_error_message,
1608 									p_concurrent_request_id,
1609 									sysdate,
1610 									l_user_id,
1611 									sysdate,
1612 									l_user_id,
1613 									l_login_id,
1614 									NULL
1615                   					)
1616 									RETURNING JCG_REQUEST_ID INTO p_x_jcg_id;
1617 
1618  	IF(p_status_code = 'S') THEN
1619      FOR jcg_rec in get_other_jcg_req_id_csr(p_object_type,p_object_id,p_x_jcg_id)
1620       LOOP
1621        OPEN jcg_req_exists_csr (jcg_rec.jcg_request_id);
1622        FETCH jcg_req_exists_csr INTO l_ovn,l_object_type,l_object_id;
1623        IF(jcg_req_exists_csr%found)THEN
1624          DELETE FROM AHL_ENIGMA_JCG_DETAILS WHERE JCG_REQUEST_ID = jcg_rec.JCG_REQUEST_ID ;
1625        END IF;
1626        CLOSE jcg_req_exists_csr;
1627       END LOOP;
1628 	END IF;
1629 
1630 	IF(p_status_code = 'E') THEN
1631      FOR jcg_rec in get_other_jcg_non_s_csr(p_object_type,p_object_id,p_x_jcg_id)
1632       LOOP
1633        OPEN jcg_req_exists_csr (jcg_rec.jcg_request_id);
1634        FETCH jcg_req_exists_csr INTO l_ovn,l_object_type,l_object_id;
1635        IF(jcg_req_exists_csr%found)THEN
1636          DELETE FROM AHL_ENIGMA_JCG_DETAILS WHERE JCG_REQUEST_ID = jcg_rec.JCG_REQUEST_ID ;
1637        END IF;
1638        CLOSE jcg_req_exists_csr;
1639       END LOOP;
1640 	END IF;
1641 
1642 ELSIF (p_operation_flag = 'U' ) THEN
1643 
1644     OPEN get_jcg_req_rec_csr (p_x_jcg_id);
1645     FETCH get_jcg_req_rec_csr into l_ovn,l_object_type,l_object_id;
1646 
1647 	IF (get_jcg_req_rec_csr%NOTFOUND) THEN
1648 	CLOSE get_jcg_req_rec_csr;
1649 	return;
1650 	/*
1651 	 FND_MESSAGE.Set_Name('AHL','AHL_PRD_JCG_ID_INVALID');
1652      FND_MSG_PUB.ADD;
1653 	 CLOSE get_jcg_req_rec_csr;
1654      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1655 	 */
1656     END IF;
1657 
1658 
1659 
1660 	IF (l_log_statement >= l_log_current_level)THEN
1661       fnd_log.string(
1662       l_log_statement,
1663       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1664       'Before updating a new row in AHL_ENIGMA_JCG_DETAILS.'
1665       );
1666 	END IF;
1667 
1668 	UPDATE AHL_ENIGMA_JCG_DETAILS SET   FILE_LOCATION		  = p_file_location,
1669 									    STATUS_CODE			  = p_status_code,
1670 								    	OBJECT_VERSION_NUMBER = l_ovn+1,
1671 										ERROR_MESSAGE         = p_error_message,
1672 								    	LAST_UPDATE_DATE      = sysdate,
1673 								    	LAST_UPDATED_BY 	  = l_user_id,
1674 								    	LAST_UPDATE_LOGIN	  = l_login_id,
1675 								    	security_group_id     = null,
1676                       CONCURRENT_REQUEST_ID = p_concurrent_request_id
1677                       			WHERE   JCG_REQUEST_ID        = p_x_jcg_id ;
1678 
1679 	IF(p_status_code = 'S') THEN
1680      FOR jcg_rec in get_other_jcg_req_id_csr(l_object_type,l_object_id,p_x_jcg_id)
1681       LOOP
1682        OPEN jcg_req_exists_csr (jcg_rec.jcg_request_id);
1683        FETCH jcg_req_exists_csr INTO l_ovn,l_object_type,l_object_id;
1684        IF(jcg_req_exists_csr%found)THEN
1685          DELETE FROM AHL_ENIGMA_JCG_DETAILS WHERE JCG_REQUEST_ID = jcg_rec.JCG_REQUEST_ID ;
1686        END IF;
1687        CLOSE jcg_req_exists_csr;
1688       END LOOP;
1689 	END IF;
1690 
1691 	IF(p_status_code = 'E') THEN
1692      FOR jcg_rec in get_other_jcg_non_s_csr(l_object_type,l_object_id,p_x_jcg_id)
1693       LOOP
1694        OPEN jcg_req_exists_csr (jcg_rec.jcg_request_id);
1695        FETCH jcg_req_exists_csr INTO l_ovn,l_object_type,l_object_id;
1696        IF(jcg_req_exists_csr%found)THEN
1697          DELETE FROM AHL_ENIGMA_JCG_DETAILS WHERE JCG_REQUEST_ID = jcg_rec.JCG_REQUEST_ID ;
1698        END IF;
1699        CLOSE jcg_req_exists_csr;
1700       END LOOP;
1701 	END IF;
1702 
1703 	CLOSE get_jcg_req_rec_csr;
1704 
1705 END IF;
1706 
1707  IF (l_log_procedure >= l_log_current_level)THEN
1708 	 fnd_log.string(
1709 	 l_log_procedure,
1710 	 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1711 	  'At END of the Procedure Process_JCG_Request,p_x_jcg_id =  '|| p_x_jcg_id || ' p_status_code = '||p_status_code
1712 	  );
1713  END IF;
1714 
1715 EXCEPTION
1716 WHEN FND_API.G_EXC_ERROR THEN
1717         x_return_status := FND_API.G_RET_STS_ERROR;
1718         Rollback to Process_JCG_Request_PVT;
1719         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1720         p_data  => x_msg_data,
1721         p_encoded => fnd_api.g_false);
1722 
1723 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1724        IF (l_log_statement >= l_log_current_level)THEN
1725          fnd_log.string(
1726          l_log_statement,
1727          'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1728          'unExpected Error-'
1729           );
1730 	    END IF;
1731         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1732         Rollback to Process_JCG_Request_PVT;
1733         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1734         p_data  => x_msg_data,
1735         p_encoded => fnd_api.g_false);
1736 
1737 WHEN OTHERS THEN
1738         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1739 		Rollback to Process_JCG_Request_PVT;
1740 		fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
1741         p_procedure_name => 'Process_JCG_Request',
1742         p_error_text     => SUBSTR(SQLERRM,1,240));
1743         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1744         p_data  => x_msg_data,
1745         p_encoded => fnd_api.g_false);
1746         IF (l_log_unexpected >= l_log_current_level)THEN
1747          fnd_log.string(
1748          l_log_unexpected,
1749          'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
1750           'Unexpected Error Others '
1751           );
1752 		END IF;
1753 
1754 END Process_JCG_Request;
1755 
1756 FUNCTION Generated_JobCard_Exists(
1757  p_object_type       IN             VARCHAR2,
1758  p_object_id         IN             NUMBER
1759  )
1760  RETURN VARCHAR2
1761  IS
1762 
1763  Cursor check_job_card_csr(c_object_type VARCHAR2, c_object_id NUMBER)
1764  IS
1765  Select 'X' from AHL_ENIGMA_JCG_DETAILS
1766  Where OBJECT_TYPE_CODE = c_object_type
1767  AND   OBJECT_ID        = c_object_id
1768  AND STATUS_CODE        = 'S';
1769 
1770 l_api_name                 VARCHAR2(30) := 'Generated_JobCard_Exists';
1771 x_jcg_exists               VARCHAR2(1);
1772 l_var                      VARCHAR2(1);
1773 BEGIN
1774 
1775 x_jcg_exists    := 'N';
1776 
1777   OPEN check_job_card_csr(p_object_type,p_object_id);
1778   FETCH check_job_card_csr into l_var;
1779 
1780 	IF (check_job_card_csr%NOTFOUND) THEN
1781 	x_jcg_exists    := 'N';
1782 	ELSE
1783 	x_jcg_exists    := 'Y';
1784     END IF;
1785   CLOSE check_job_card_csr;
1786 
1787  RETURN x_jcg_exists;
1788 
1789 END Generated_JobCard_Exists;
1790 
1791  FUNCTION Get_JC_File_Location(
1792  p_object_type       IN             VARCHAR2,
1793  p_object_id         IN             NUMBER
1794  )
1795  RETURN VARCHAR2
1796  IS
1797 
1798  Cursor get_file_location_csr(c_object_type VARCHAR2, c_object_id NUMBER)
1799  IS
1800  Select FILE_LOCATION from AHL_ENIGMA_JCG_DETAILS
1801  where JCG_REQUEST_ID = (Select max(JCG_REQUEST_ID) from (
1802  Select JCG_REQUEST_ID from AHL_ENIGMA_JCG_DETAILS
1803  Where OBJECT_TYPE_CODE = c_object_type
1804  AND   OBJECT_ID        = c_object_id
1805  AND   STATUS_CODE      = 'S'
1806  ));
1807 
1808 l_api_name                 VARCHAR2(30) := 'Get_JC_File_Location';
1809 x_file_location            VARCHAR2(4000);
1810 
1811 
1812 BEGIN
1813 
1814 x_file_location  := NULL;
1815 
1816   OPEN get_file_location_csr(p_object_type,p_object_id);
1817   FETCH get_file_location_csr into x_file_location;
1818   IF(get_file_location_csr%FOUND)THEN
1819     x_file_location := FND_PROFILE.VALUE('AHL_ENIGMA_PDF_LOCATION') || x_file_location;
1820   END IF;
1821   CLOSE get_file_location_csr;
1822 
1823    RETURN x_file_location;
1824 
1825 END Get_JC_File_Location;
1826 
1827 FUNCTION Get_Latest_JCG_Status(
1828  p_object_type       IN             VARCHAR2,
1829  p_object_id         IN             NUMBER
1830  )
1831  RETURN VARCHAR2
1832  IS
1833 
1834  Cursor get_latest_status_csr(c_object_type VARCHAR2, c_object_id NUMBER)
1835  IS
1836  Select STATUS_CODE from AHL_ENIGMA_JCG_DETAILS
1837  where JCG_REQUEST_ID = (Select max(JCG_REQUEST_ID) from (
1838  Select JCG_REQUEST_ID from AHL_ENIGMA_JCG_DETAILS
1839  Where OBJECT_TYPE_CODE = c_object_type
1840  AND   OBJECT_ID        = c_object_id
1841  ));
1842 
1843 l_api_name                 VARCHAR2(30) := 'Get_Latest_JCG_Status';
1844 x_latest_status            VARCHAR2(1);
1845 
1846 
1847 BEGIN
1848 
1849 x_latest_status  := NULL;
1850 
1851   OPEN get_latest_status_csr(p_object_type,p_object_id);
1852   FETCH get_latest_status_csr into x_latest_status;
1853   IF(get_latest_status_csr%NOTFOUND)THEN
1854     x_latest_status := 'N';
1855   END IF;
1856   CLOSE get_latest_status_csr;
1857 
1858   RETURN x_latest_status;
1859 
1860 END Get_Latest_JCG_Status;
1861 
1862 FUNCTION Get_JCG_Error_Msg(
1863  p_object_type       IN             VARCHAR2,
1864  p_object_id         IN             NUMBER
1865  )
1866  RETURN VARCHAR2
1867  IS
1868 
1869  Cursor get_jcg_error_csr(c_object_type VARCHAR2, c_object_id NUMBER)
1870  IS
1871  Select ERROR_MESSAGE from AHL_ENIGMA_JCG_DETAILS
1872  where JCG_REQUEST_ID = (Select max(JCG_REQUEST_ID) from (
1873  Select JCG_REQUEST_ID from AHL_ENIGMA_JCG_DETAILS
1874  Where OBJECT_TYPE_CODE = c_object_type
1875  AND   OBJECT_ID        = c_object_id
1876  AND   STATUS_CODE      = 'E'
1877  ));
1878 
1879 l_api_name                 VARCHAR2(30) := 'Get_JCG_Error_Msg';
1880 x_error_msg                VARCHAR2(4000);
1881 
1882 
1883 BEGIN
1884 
1885 x_error_msg  := NULL;
1886 
1887   OPEN get_jcg_error_csr(p_object_type,p_object_id);
1888   FETCH get_jcg_error_csr into x_error_msg;
1889   CLOSE get_jcg_error_csr;
1890 
1891   IF(x_error_msg IS NOT NULL) THEN
1892   x_error_msg := AHL_UTIL_PKG.Get_Message_String('AHL_COM_PRINT_REQ_ERROR') || ' ' ||x_error_msg;
1893   END IF;
1894 
1895   RETURN x_error_msg;
1896 
1897 END Get_JCG_Error_Msg;
1898 
1899 --apattark added for generating xml
1900 
1901 PROCEDURE Generate_JCG_XML
1902    (p_api_version              IN           NUMBER    :=1.0,
1903    p_init_msg_list             IN           VARCHAR2  :=FND_API.G_FALSE,
1904    --p_commit                    IN           VARCHAR2  :=FND_API.G_FALSE,
1905    p_validation_level          IN     NUMBER    :=FND_API.G_VALID_LEVEL_FULL,
1906    p_object_type               IN     VARCHAR2,
1907    p_object_id                 IN     NUMBER,
1908    p_split_flag                IN     VARCHAR2,
1909    x_return_status             OUT  NOCOPY  VARCHAR2,
1910    x_msg_data                  OUT  NOCOPY  VARCHAR2,
1911    x_msg_count                 OUT  NOCOPY  NUMBER ,
1912    x_file_name                 OUT   NOCOPY  VARCHAR2
1913    --l_merged_lob                OUT   NOCOPY CLOB -- for testing purpose only ,not required
1914    )
1915    AS
1916 context DBMS_XMLGEN.ctxHandle;
1917 
1918 dummy VARCHAR2 (2500);
1919 
1920 --TYPE workorder_id_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
1921 TYPE ue_id_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
1922 l_ue_id_tbl ue_id_tbl_type;
1923 l_wo_id_tbl workorder_id_tbl_type;
1924   g_pkg_name VARCHAR2(30)  :='AHL_PRD_PRINT_PVT';
1925   l_api_name CONSTANT  VARCHAR2(30)  := 'Generate_JCG_XML';
1926   l_index NUMBER ;
1927   l_mr_id        NUMBER ;
1928   l_ue_id        NUMBER ;
1929   l_visit_id     NUMBER ;
1930   l_route_id     NUMBER ;
1931   l_workorder_id NUMBER;
1932   l_wo_id        NUMBER;
1933   l_instance_id  NUMBER;
1934   l_uc_id        NUMBER;
1935   l_relationship_id NUMBER;
1936   l_position_meaning VARCHAR2(80);
1937   l_count_instance_id NUMBER;
1938   l_visit_no       VARCHAR2(80);
1939   l_wo_no          VARCHAR2(80);
1940   l_unit_name      VARCHAR2(80);
1941   l_collection_id  NUMBER;
1942   l_occurence      NUMBER;
1943   l_plan_id        NUMBER;
1944   l_msg_count NUMBER := 0;
1945   l_msg_data VARCHAR2(1000) := '';
1946   l_return_status VARCHAR2(1) := 'S';
1947   l_query_string VARCHAR2(5000);
1948   l_accomplishment_date DATE;
1949   l_unit_eff_id NUMBER;
1950   l_dummy_flag BOOLEAN;
1951   l_dummy_status VARCHAR2(100);
1952   l_dummy_return BOOLEAN;
1953   l_counter_value NUMBER := null;
1954   l_net_reading   NUMBER := null;
1955   l_concat_segment VARCHAR2(100);
1956   l_mti_seglist fnd_flex_ext.SegmentArray;
1957   kff_return_status VARCHAR2(1);
1958   l_nr_flag VARCHAR2(1);
1959 
1960 l_merged_lob   CLOB;
1961 l_wo_mat_lob  CLOB;
1962 l_wo_res_lob  CLOB;
1963 l_wo_op_lob   CLOB;
1964 l_wo_doc_lob  CLOB;
1965 l_wo_route_lob CLOB;
1966 l_route_KFF_lob CLOB;
1967 l_route_DFF_lob CLOB;
1968 l_mat_dff_lob  CLOB;
1969 l_res_dff_lob  CLOB;
1970 l_op_dffs_lob  CLOB;
1971 l_qa_plan_lob  CLOB;
1972 l_mr_det_lob   CLOB;
1973 l_wo_mr_lob    CLOB;
1974 l_panel_det_lob CLOB;
1975 l_qa_wo_plan_lob CLOB;
1976 l_qa_wo_res_lob CLOB;
1977 l_qa_res_lob   CLOB;
1978 l_counter_lob  CLOB;
1979 l_inst_remove_lob CLOB;
1980 l_tool_det_lob  CLOB;
1981 l_mr_doc_lob    CLOB;
1982 l_visit_det_lob CLOB;
1983 l_childmr_details_lob CLOB;
1984 l_offset      NUMBER;
1985 
1986 l_log_unexpected           NUMBER; --      := FND_LOG.level_unexpected;
1987 l_log_statement            NUMBER; --      := FND_LOG.level_statement;
1988 l_log_current_level        NUMBER; --     := FND_LOG.g_current_runtime_level;
1989 
1990 
1991 -- start to create file
1992 --  x_file_name        VARCHAR2(100)  := 'Output.XML';
1993 --  p_dir             VARCHAR2(100) := '/slot/ems1561/oracle/db/tech_st/10.2.0/temp';
1994   p_dir            VARCHAR2(500);
1995   c_amount         CONSTANT BINARY_INTEGER := 32767;
1996   l_buffer         VARCHAR2(32767);
1997   l_chr10          PLS_INTEGER;
1998   l_clobLen        PLS_INTEGER;
1999   l_fHandler       UTL_FILE.FILE_TYPE;
2000   l_pos            PLS_INTEGER    := 1;
2001 
2002 --end to create file
2003 
2004 CURSOR get_header_det_csr (c_wo_id IN NUMBER) IS
2005 SELECT HROU.NAME ORG_NAME,
2006        DECODE(WIP.DATE_RELEASED, NULL, NULL,
2007 TO_CHAR(WIP.DATE_RELEASED,'YYYY-MM-DD')
2008               ||'T'
2009               ||TO_CHAR(WIP.DATE_RELEASED, 'hh24:mi:ss') ) DATE_RELEASED
2010 FROM   AHL_WORKORDERS WO             ,
2011        WIP_DISCRETE_JOBS WIP         ,
2012        AHL_VISITS_B VST              ,
2013        HR_ALL_ORGANIZATION_UNITS HROU
2014 WHERE  WO.WIP_ENTITY_ID         = WIP.WIP_ENTITY_ID
2015 AND    VST.ORGANIZATION_ID      = HROU.ORGANIZATION_ID
2016 AND    WO.VISIT_ID              = VST.VISIT_ID
2017 AND    WO.WORKORDER_ID          = c_wo_id;
2018 
2019 CURSOR get_header_det1_csr (c_uc_id IN NUMBER) IS
2020 SELECT UC.NAME          UC_NAME      ,
2021        FND1.MEANING     MODEL_MEANING
2022 FROM   AHL_UNIT_CONFIG_HEADERS UC    ,
2023        AHL_MC_HEADERS_B MC           ,
2024        FND_LOOKUP_VALUES_VL FND1
2025 WHERE  UC.MASTER_CONFIG_ID      = MC.MC_HEADER_ID
2026 AND    FND1.LOOKUP_CODE(+)      = MC.MODEL_CODE
2027 AND    FND1.LOOKUP_TYPE(+)      = 'AHL_ENIGMA_MODEL_CODE'
2028 AND    UC.UNIT_CONFIG_HEADER_ID = c_uc_id;
2029 
2030 
2031 CURSOR wo_details_csr (c_wo_id IN NUMBER) IS
2032 /*
2033 SELECT
2034 WO.object_version_number,
2035 WO.job_number,
2036 WO.job_description,
2037 WO.job_status_meaning,
2038 WO.department_name,
2039 decode(WO.scheduled_start_date, null, null, TO_CHAR(WO.scheduled_start_date,'YYYY-MM-DD')||'T'||TO_CHAR(WO.scheduled_start_date, 'hh24:mi:ss') ) scheduled_start_date,
2040 decode(WO.scheduled_end_date, null, null, TO_CHAR(WO.scheduled_end_date, 'YYYY-MM-DD')||'T'||TO_CHAR(WO.scheduled_end_date, 'hh24:mi:ss') ) scheduled_end_date,
2041 WO.unit_name,
2042 WO.wo_part_number,
2043 WO.item_instance_number,
2044 WO.serial_number ,
2045 WO.lot_number,
2046 WO.visit_number,
2047 RO.model_meaning,
2048 --WIP.date_released,
2049 decode(WIP.DATE_RELEASED, null, null, TO_CHAR(WIP.DATE_RELEASED,'YYYY-MM-DD')||'T'||TO_CHAR(WIP.DATE_RELEASED, 'hh24:mi:ss') ) DATE_RELEASED,
2050 WIP.net_quantity,
2051 UE.ata_code,
2052 WO.incident_number,
2053 HZ.party_name,
2054 --UE.originating_wo_id
2055 (select job_number from ahl_workorders_v WO , AHL_UNIT_EFFECTIVITIES_B UE where
2056  WO.workorder_id = UE.ORIGINATING_WO_ID
2057  and WO.unit_effectivity_id = UE.unit_effectivity_id) OriginatingWorkorder,
2058 WO.item_instance_id,
2059 decode(WO.plan_id,null,'F','T') isQualityEnabled
2060 FROM AHL_WORKORDERS_V WO, WIP_DISCRETE_JOBS WIP, AHL_ROUTES_V RO, AHL_UNIT_EFFECTIVITIES_B UE, HZ_PARTIES HZ, CSI_ITEM_INSTANCES CSI
2061 WHERE WO.wip_entity_id = WIP.wip_entity_id
2062 AND   WO.route_id = RO.route_id (+)
2063 AND   UE.unit_effectivity_id(+) = WO.unit_effectivity_id
2064 AND   CSI.instance_id = WO.ITEM_INSTANCE_ID(+)
2065 AND   CSI.owner_party_id(+) = HZ.party_id
2066 AND   workorder_id = c_wo_id;
2067 */
2068 SELECT WO.OBJECT_VERSION_NUMBER,
2069        WO.JOB_NUMBER           ,
2070        WO.JOB_DESCRIPTION      ,
2071        WO.JOB_STATUS_MEANING   ,
2072        WO.DEPARTMENT_NAME      ,
2073        DECODE(WO.SCHEDULED_START_DATE, NULL, NULL, TO_CHAR(WO.SCHEDULED_START_DATE,'YYYY-MM-DD')
2074               ||'T'
2075               ||TO_CHAR(WO.SCHEDULED_START_DATE, 'hh24:mi:ss') ) SCHEDULED_START_DATE,
2076        DECODE(WO.SCHEDULED_END_DATE, NULL, NULL, TO_CHAR(WO.SCHEDULED_END_DATE, 'YYYY-MM-DD')
2077               ||'T'
2078               ||TO_CHAR(WO.SCHEDULED_END_DATE, 'hh24:mi:ss') ) SCHEDULED_END_DATE,
2079        WO.UNIT_NAME                                                              ,
2080        WO.WO_PART_NUMBER                                                         ,
2081        WO.ITEM_INSTANCE_NUMBER                                                   ,
2082        WO.SERIAL_NUMBER                                                          ,
2083        WO.LOT_NUMBER                                                             ,
2084        WO.VISIT_NUMBER                                                           ,
2085        --RO.MODEL_MEANING                                                   ,
2086        MODELTYPE.MEANING MODEL_MEANING ,
2087        DECODE(WIP.DATE_RELEASED, NULL, NULL, TO_CHAR(WIP.DATE_RELEASED,'YYYY-MM-DD')
2088               ||'T'
2089               ||TO_CHAR(WIP.DATE_RELEASED, 'hh24:mi:ss') ) DATE_RELEASED,
2090        WIP.NET_QUANTITY                                                 ,
2091        --UE.ATA_CODE                                               ,
2092        DECODE(RO.ENIGMA_ROUTE_ID, NULL, NULL, SUBSTR(route_no, instr(route_no, ':',1,1)+1)) ATA_CODE,
2093        -- fix for bug# 10016417
2094        --(SELECT CSIN.INCIDENT_NUMBER
2095        --FROM    CS_INCIDENTS_ALL_B CSIN
2096        --WHERE   CSIN.INCIDENT_ID = UE.cs_incident_id
2097        --)
2098        (SELECT CSIN.INCIDENT_NUMBER
2099         FROM    CS_INCIDENTS_ALL_B CSIN, AHL_VISIT_TASKS_B TSK
2100         WHERE   CSIN.INCIDENT_ID = TSK.SERVICE_REQUEST_ID
2101         AND   TSK.VISIT_TASK_ID = WO.VISIT_TASK_ID
2102        )
2103        INCIDENT_NUMBER,
2104        (SELECT HZ.PARTY_NAME
2105        FROM    HZ_PARTIES HZ
2106        WHERE   HZ.PARTY_ID = CSI.OWNER_PARTY_ID
2107        )
2108        PARTY_NAME,
2109        (SELECT WORKORDER_NAME
2110        FROM    AHL_WORKORDERS WO --,
2111                --AHL_UNIT_EFFECTIVITIES_B UE1
2112        WHERE   WO.WORKORDER_ID = UE.ORIGINATING_WO_ID
2113                --AND WO.UNIT_EFFECTIVITY_ID = UE.UNIT_EFFECTIVITY_ID
2114        )
2115        ORIGINATINGWORKORDER,
2116        WO.ITEM_INSTANCE_ID ,
2117        DECODE(W.PLAN_ID,NULL,'F','T') ISQUALITYENABLED,
2118        WO.ROUTE_ID
2119 FROM   AHL_WORKORDER_TASKS_V WO    ,
2120        WIP_DISCRETE_JOBS WIP       ,
2121        AHL_ROUTES_B RO             ,
2122        AHL_UNIT_EFFECTIVITIES_B UE ,
2123        --HZ_PARTIES HZ                ,
2124        CSI_ITEM_INSTANCES CSI ,
2125        --CS_INCIDENTS_ALL_B CSIN      ,
2126        --AHL_VISIT_TASKS_VL VTS         ,
2127        AHL_WORKORDERS W    ,
2128        (SELECT LOOKUP_CODE ,
2129                MEANING
2130        FROM    FND_LOOKUP_VALUES
2131        WHERE   LOOKUP_TYPE = 'AHL_ENIGMA_MODEL_CODE'
2132        AND     LANGUAGE    = USERENV('LANG')
2133        )
2134        MODELTYPE
2135 WHERE  WO.WIP_ENTITY_ID          = WIP.WIP_ENTITY_ID
2136 AND    WO.ROUTE_ID               = RO.ROUTE_ID (+)
2137 AND    UE.UNIT_EFFECTIVITY_ID(+) = WO.UNIT_EFFECTIVITY_ID
2138 AND    CSI.INSTANCE_ID           = WO.ITEM_INSTANCE_ID
2139        --AND CSI.OWNER_PARTY_ID(+)     = HZ.PARTY_ID
2140 AND    MODELTYPE.LOOKUP_CODE(+) = RO.MODEL_CODE
2141        --AND VTS.SERVICE_REQUEST_ID    = CSIN.INCIDENT_ID(+)
2142        --AND WO.VISIT_TASK_ID          = VTS.VISIT_TASK_ID
2143 AND    W.workorder_id  = WO.workorder_id
2144 AND    WO.WORKORDER_ID = c_wo_id;
2145 
2146 
2147 CURSOR mat_details_csr (c_wo_id IN NUMBER)
2148 IS
2149         SELECT MSI.CONCATENATED_SEGMENTS,
2150                WRO.OPERATION_SEQ_NUM OPERATION_SEQUENCE   ,
2151                MSI.DESCRIPTION          ,
2152                IG.NAME                 ,
2153                WRO.REQUIRED_QUANTITY REQUESTED_QUANTITY   ,
2154                DECODE(WRO.date_required, NULL, NULL, TO_CHAR(WRO.date_required, 'YYYY-MM-DD')
2155                       ||'T'
2156                       ||TO_CHAR(WRO.date_required, 'hh24:mi:ss') ) required_date,
2157                WRO.QUANTITY_ISSUED ISSUED_QTY                                   ,
2158                MSI.PRIMARY_UNIT_OF_MEASURE UOM                                                           ,
2159                ASM.SCHEDULED_MATERIAL_ID,
2160                (SELECT f.meaning from fnd_lookup_values_vl f
2161                 WHERE f.lookup_type = 'ITEM_TYPE' and f.lookup_code = msi.item_type) item_type
2162         FROM   --AHL_JOB_OPER_MATERIALS_V JM,
2163                WIP_REQUIREMENT_OPERATIONS WRO, AHL_SCHEDULE_MATERIALS ASM,
2164                AHL_ITEM_GROUPS_B IG, AHL_WORKORDERS WO, MTL_SYSTEM_ITEMS_KFV MSI
2165         WHERE  WO.wip_entity_id = WRO.wip_entity_id
2166           AND  WO.visit_task_id = ASM.visit_task_id
2167           AND  ASM.operation_sequence = WRO.operation_seq_num
2168           AND  ASM.inventory_item_id = WRO.inventory_item_id
2169           AND  WRO.organization_id = MSI.organization_id
2170           AND  WRO.inventory_item_id = MSI.inventory_item_id
2171           AND  IG.ITEM_GROUP_ID(+) = ASM.ITEM_GROUP_ID
2172           AND  WO.WORKORDER_ID     = c_wo_id
2173         ORDER BY 2;
2174 
2175 CURSOR res_req_details_csr(c_wo_id IN NUMBER)
2176  IS
2177          SELECT WOR.OPERATION_SEQ_NUM operation_sequence,
2178                 WOR.RESOURCE_SEQ_NUM resource_sequence ,
2179                 BOM.RESOURCE_CODE resource_code,
2180                 BOM.DESCRIPTION resource_name,
2181                 MFG.MEANING resource_type_name,
2182                 WOR.ASSIGNED_UNITS quantity,
2183                 DECODE(nvl(WOR.ASSIGNED_UNITS,0), 0, 0, WOR.USAGE_RATE_OR_AMOUNT/WOR.ASSIGNED_UNITS) duration          ,
2184                 (SELECT A.UNIT_OF_MEASURE FROM MTL_UNITS_OF_MEASURE A
2185                  WHERE  A.UOM_CODE=BOM.UNIT_OF_MEASURE) uom_name,
2186                 WOR.RESOURCE_ID,
2187                 (select awo.operation_id from AHL_WORKORDER_OPERATIONS AWO
2188                  where AWO.workorder_id = wo.workorder_id
2189                    and awo.operation_sequence_num = WOR.OPERATION_SEQ_NUM) operation_id
2190          FROM WIP_OPERATION_RESOURCES WOR,
2191               BOM_RESOURCES BOM, MFG_LOOKUPS MFG, AHL_WORKORDERS WO
2192          WHERE  WO.workorder_id = c_wo_id
2193            AND  WOR.resource_id = BOM.resource_id
2194            AND  WO.wip_entity_id = WOR.wip_entity_id
2195            AND MFG.LOOKUP_TYPE(+) = 'BOM_RESOURCE_TYPE'
2196            AND MFG.LOOKUP_CODE(+) = BOM.RESOURCE_TYPE
2197          ORDER BY 1,2;
2198 
2199 CURSOR get_wo_id(c_visit_id IN NUMBER)
2200 IS
2201         SELECT workorder_id
2202                --from ahl_workorders_v
2203         FROM   ahl_workorders
2204         WHERE  visit_id              = c_visit_id
2205         AND    master_workorder_flag = 'N'
2206 	AND    STATUS_CODE NOT IN ( '7','12','14','15','17','22' )
2207 	order by workorder_name;
2208 
2209 CURSOR get_ue_wo_id(c_ue_id IN NUMBER)
2210 IS
2211          SELECT wo.WORKORDER_ID
2212                 --FROM AHL_WORKORDERS_V
2213          FROM   AHL_WORKORDERS WO,
2214                 ahl_visit_tasks_b tsk
2215          WHERE  wo.visit_task_id         = tsk.visit_task_id
2216          AND    wo.master_workorder_flag = 'N'
2217 	 AND    WO.STATUS_CODE NOT IN ('7','12','14','15','17','22')
2218          AND    tsk.UNIT_EFFECTIVITY_ID  = c_ue_id
2219 	 order by WO.workorder_name;
2220 
2221 CURSOR op_details_csr(c_wo_id IN NUMBER)
2222 IS
2223           SELECT WO.operation_sequence_num,
2224                  WO.operation_code        ,
2225                  WO.description           ,
2226                  WO.status                ,
2227                  WO.department_name       ,
2228                  --WO.scheduled_start_date ,
2229                  --WO.scheduled_end_date ,
2230                  DECODE(WO.scheduled_start_date, NULL, NULL, TO_CHAR(WO.scheduled_start_date,'YYYY-MM-DD')
2231                         ||'T'
2232                         ||TO_CHAR(WO.scheduled_start_date, 'hh24:mi:ss') ) scheduled_start_date,
2233                  DECODE(WO.scheduled_end_date, NULL, NULL, TO_CHAR(WO.scheduled_end_date, 'YYYY-MM-DD')
2234                         ||'T'
2235                         ||TO_CHAR(WO.scheduled_end_date, 'hh24:mi:ss') ) scheduled_end_date,
2236                  DECODE(WO.plan_id,NULL,'F','T')                         isQualityEnabled  ,
2237                  WO.workorder_operation_id
2238           FROM   AHL_WORKORDER_OPERATIONS_V WO --AHL_OPERATIONS_B OP
2239           WHERE                                -- WO.operation_id = OP.operation_id(+) and
2240                  WO.workorder_id = c_wo_id
2241 	  ORDER BY 1	 ;
2242 
2243 Cursor route_details_csr(c_route_id IN NUMBER) IS
2244 /*
2245 select
2246 object_version_number,
2247 route_no,
2248 title,
2249 route_type,
2250 revision_number,
2251 enigma_doc_id,
2252 enigma_route_id,
2253 zone,
2254 sub_zone,
2255 process,
2256 job_card_lyt_meaning,
2257 model_code
2258 from AHL_ROUTES_V
2259 where route_id = c_route_id;
2260 */
2261 SELECT R.object_version_number                 ,
2262        R.route_no                              ,
2263        T.title                                 ,
2264        RTTYPE.MEANING route_type               ,
2265        R.revision_number                       ,
2266        R.enigma_doc_id                         ,
2267        R.enigma_route_id                       ,
2268        ZONE.MEANING       zone                 ,
2269        SUBZONE.MEANING    sub_zone             ,
2270        PROCESS.MEANING    process              ,
2271        JOBCARDLYT.MEANING job_card_lyt_meaning ,
2272        R.model_code                            ,
2273        R.last_update_date
2274 FROM   AHL_ROUTES_B R      ,
2275        AHL_ROUTES_TL T     ,
2276        (SELECT LOOKUP_CODE ,
2277                MEANING
2278        FROM    FND_LOOKUP_VALUES
2279        WHERE   LOOKUP_TYPE = 'AHL_RM_JOB_CARD_LYT'
2280        AND     LANGUAGE    = USERENV('LANG')
2281        )
2282        JOBCARDLYT         ,
2283        (SELECT LOOKUP_CODE,
2284                MEANING
2285        FROM    FND_LOOKUP_VALUES
2286        WHERE   LOOKUP_TYPE = 'AHL_SUB_ZONE'
2287        AND     LANGUAGE    = USERENV('LANG')
2288        )
2289        SUBZONE            ,
2290        (SELECT LOOKUP_CODE,
2291                MEANING
2292        FROM    FND_LOOKUP_VALUES
2293        WHERE   LOOKUP_TYPE = 'AHL_PROCESS_CODE'
2294        AND     LANGUAGE    = USERENV('LANG')
2295        )
2296        PROCESS            ,
2297        (SELECT LOOKUP_CODE,
2298                MEANING
2299        FROM    FND_LOOKUP_VALUES
2300        WHERE   LOOKUP_TYPE = 'AHL_ZONE'
2301        AND     LANGUAGE    = USERENV('LANG')
2302        )
2303        ZONE               ,
2304        (SELECT LOOKUP_CODE,
2305                MEANING
2306        FROM    FND_LOOKUP_VALUES
2307        WHERE   LOOKUP_TYPE = 'AHL_ROUTE_TYPE'
2308        AND     LANGUAGE    = USERENV('LANG')
2309        )
2310        RTTYPE
2311 WHERE  R.ROUTE_ID                 = T.ROUTE_ID
2312 AND    T.LANGUAGE                 = USERENV('LANG')
2313 AND    JOBCARDLYT.LOOKUP_CODE (+) = R.JOBCARDLYT_CODE
2314 AND    ZONE.LOOKUP_CODE (+)       = R.ZONE_CODE
2315 AND    SUBZONE.LOOKUP_CODE (+)    = R.SUB_ZONE_CODE
2316 AND    PROCESS.LOOKUP_CODE (+)    = R.PROCESS_CODE
2317 AND    RTTYPE.LOOKUP_CODE (+)     = R.ROUTE_TYPE_CODE
2318 AND    R.route_id                 = c_route_id;
2319 
2320 CURSOR op_det_csr(c_route_id IN NUMBER, c_wo_id IN NUMBER)
2321 IS
2322         SELECT DISTINCT WO.OPERATION_SEQUENCE_NUM,
2323                WO.OPERATION_CODE        ,
2324                WO.DESCRIPTION           ,
2325                WO.OPERATION_TYPE        ,
2326                OP.ENIGMA_DOC_ID         ,
2327                OP.OPERATION_ID          ,
2328                OP.REVISION_NUMBER       ,
2329                OP.LAST_UPDATE_DATE
2330         FROM   AHL_WORKORDER_OPERATIONS_V WO,
2331                AHL_ROUTE_OPERATIONS RP      ,
2332                AHL_OPERATIONS_B OP
2333         WHERE  RP.OPERATION_ID(+) = WO.OPERATION_ID
2334         AND    WO.OPERATION_ID    = OP.OPERATION_ID(+)
2335         AND    RP.route_id        = c_route_id
2336         AND    WO.workorder_id    = c_wo_id
2337 	ORDER BY 1;
2338 
2339 CURSOR get_mr_details_csr(c_ue_id IN NUMBER)
2340 IS
2341       /*  SELECT ue.title                                     ,
2342                ue.description                               ,
2343                ue.version_number    Version                 ,
2344                ue.program_type      ProgramType             ,
2345                mr.program_subtype   ProgramSubtype          ,
2346                ue.counter_name      DueCounterName          ,
2347                ue.due_counter_value DueCounterValue         ,
2348                mi.unit_of_measure   UOM                   ,
2349                mi.interval_value    IntervalValue           ,
2350                mi.start_value       StartValue              ,
2351                mi.start_date        StartDate              ,
2352                ue.due_date          DueDate                 ,
2353                ue.csi_item_instance_id                      ,
2354                mr.mr_header_id                              ,
2355                mr.last_update_date
2356         FROM   ahl_mr_headers_v mr        ,
2357                ahl_unit_effectivities_v ue,
2358                ahl_mr_intervals_v mi
2359         WHERE  ue.mr_header_id        = mr.mr_header_id
2360         AND    ue.mr_interval_id      = mi.mr_interval_id(+)
2361         AND    ue.unit_effectivity_id = c_ue_id;
2362 */
2363 
2364        SELECT  MRB.title                             ,
2365                MRT.description                       ,
2366                MRB.version_number    Version         ,
2367                F1.MEANING ProgramType                ,
2368                SUBTYPE.MEANING ProgramSubtype        ,
2369                C.NAME DueCounterName                 ,
2370                B.due_counter_value DueCounterValue   ,
2371                I.unit_of_measure     UOM             ,
2372                I.interval_value    IntervalValue     ,
2373                I.start_value       StartValue        ,
2374                I.start_date         StartDate        ,
2375                B.due_date          DueDate           ,
2376                B.csi_item_instance_id                ,
2377                MRB.mr_header_id                      ,
2378                MRB.last_update_date
2379         FROM   ahl_mr_headers_b MRB        ,
2380                ahl_unit_effectivities_b B,
2381                ahl_mr_intervals_v I      ,
2382                fnd_lookup_values F1       ,
2383                csi_counter_template_vl C  ,
2384                ahl_mr_headers_tl MRT      ,
2385                (SELECT LOOKUP_CODE,
2386                        MEANING
2387                 FROM FND_LOOKUP_VALUES
2388                 WHERE LOOKUP_TYPE = 'AHL_FMP_MR_PROGRAM_SUBTYPE'
2389                   AND LANGUAGE        = USERENV('LANG')
2390                ) SUBTYPE
2391         WHERE  B.mr_header_id        = MRB.mr_header_id
2392         AND    B.mr_interval_id      = I.mr_interval_id(+)
2393 	AND    B.object_type         = 'MR'
2394         AND F1.lookup_code           = MRB.program_type_code
2395         AND F1.lookup_type           = 'AHL_FMP_MR_PROGRAM_TYPE'
2396         AND F1.language              = USERENV('LANG')
2397         AND I.counter_id             = C.counter_id(+)
2398         AND B.mr_interval_id         = I.mr_interval_id(+)
2399         AND MRB.mr_header_id         = MRT.mr_header_id
2400         AND MRT.language             = USERENV('LANG')
2401         AND SUBTYPE.lookup_code(+)   = MRB.program_subtype_code
2402         AND B.unit_effectivity_id    = c_ue_id;
2403 
2404 CURSOR qa_plan_csr(c_qa_plan_id IN NUMBER)
2405 IS
2406          SELECT DISTINCT plan_name,
2407                          plan_description
2408          FROM            QA_PLAN_CHARS_V
2409          WHERE           plan_id = c_qa_plan_id;
2410 
2411 CURSOR get_op_qa_res_csr(c_wo_op_id IN NUMBER)
2412 IS
2413         SELECT plan_id,
2414                collection_id
2415         FROM   AHL_WORKORDER_OPERATIONS
2416         WHERE  workorder_operation_id = c_wo_op_id;
2417 
2418 CURSOR get_wo_qa_res_csr(c_wo_id IN NUMBER)
2419 IS
2420         SELECT plan_id,
2421                collection_id
2422         FROM   AHL_WORKORDERS
2423         WHERE  workorder_id = c_wo_id;
2424 
2425 CURSOR qa_result_csr(c_collection_id IN NUMBER)
2426 IS
2427         SELECT occurrence
2428         FROM   QA_RESULTS
2429         WHERE  collection_id = c_collection_id;
2430 
2431 CURSOR get_visit_no(c_visit_id IN NUMBER)
2432 IS
2433         SELECT visit_number
2434         FROM   ahl_visits_b
2435         WHERE  visit_id = c_visit_id;
2436 
2437 CURSOR get_wo_no(c_wo_id IN NUMBER)
2438 IS
2439         SELECT workorder_name
2440         FROM   ahl_workorders
2441         WHERE  workorder_id = c_wo_id;
2442 
2443 CURSOR qa_plan_attr_csr (c_plan_id IN NUMBER)
2444 IS
2445         SELECT   char_id         CharId        ,
2446                  prompt_sequence PromptSequence,
2447                  prompt          Prompt        ,
2448                  default_value   DefaultValue  ,
2449 		 enabled_flag                  ,
2450 		 displayed_flag
2451         FROM     QA_PLAN_CHARS
2452         WHERE    plan_id = c_plan_id
2453         ORDER BY 2;
2454 
2455 CURSOR route_ffs_csr(c_route_id IN NUMBER)
2456 IS
2457         SELECT segment1    ,
2458                segment2    ,
2459                segment3    ,
2460                segment4    ,
2461                segment5    ,
2462                segment6    ,
2463                segment7    ,
2464                segment8    ,
2465                segment9    ,
2466                segment10   ,
2467                segment11   ,
2468                segment12   ,
2469                segment13   ,
2470                segment14   ,
2471                segment15   ,
2472                attribute1  ,
2473                attribute2  ,
2474                attribute3  ,
2475                attribute4  ,
2476                attribute5  ,
2477                attribute6  ,
2478                attribute7  ,
2479                attribute8  ,
2480                attribute9  ,
2481                attribute10 ,
2482                attribute11 ,
2483                attribute12 ,
2484                attribute13 ,
2485                attribute14 ,
2486                attribute15
2487         FROM   ahl_routes_b
2488         WHERE  route_id = c_route_id;
2489 
2490 CURSOR panel_details_csr (c_route_id IN NUMBER)
2491 IS
2492         SELECT panel_type ,
2493                panel_type_desc
2494         FROM   AHL_RT_OPER_ACCESS_PANELS_V
2495         WHERE  ASSOCIATION_TYPE_CODE = 'ROUTE'
2496         AND    object_id             = c_route_id;
2497 
2498 CURSOR chk_route_res_csr (p_route_id IN NUMBER)
2499 IS
2500        SELECT 'Y'
2501        FROM   AHL_RT_OPER_RESOURCES AR
2502        WHERE  AR.association_type_code='ROUTE'
2503          AND  AR.object_id=p_route_id
2504          AND  ROWNUM < 2;
2505 
2506 CURSOR nr_details_csr (c_ue_id IN NUMBER)
2507 IS
2508 SELECT CS.INCIDENT_ID,
2509   UE.UNIT_EFFECTIVITY_ID,
2510   (SELECT cit.name
2511       || '-'
2512       || cs.incident_number
2513        FROM cs_incidents_all_vl cs,
2514       cs_incident_types_vl cit
2515       WHERE cs.incident_type_id = cit.incident_type_id
2516     AND cs.incident_id          = UE.Cs_Incident_id) title,
2517   UE.FLIGHT_NUMBER,
2518   CS_TYPE.NAME,
2519   (SELECT MEANING
2520        FROM FND_LOOKUP_VALUES
2521       WHERE LOOKUP_TYPE = 'AHL_LOG_SERIES_CODE'
2522     AND LOOKUP_CODE     =UE.LOG_SERIES_CODE
2523     AND LANGUAGE        = USERENV('LANG')
2524     ) UE_LOG_SERIES,
2525   UE.LOG_SERIES_NUMBER LOG_NUMBER,
2526   MTL.CONCATENATED_SEGMENTS UE_ITEM_NUMBER,
2527   CSI.SERIAL_NUMBER UE_SERIAL_NUMBER                                                                       ,
2528   (SELECT MEANING
2529    FROM FND_LOOKUP_VALUES
2530    WHERE LOOKUP_TYPE = 'AHL_UNIT_EFFECTIVITY_STATUS'
2531     AND LOOKUP_CODE     = UE.STATUS_CODE
2532     AND LANGUAGE        = USERENV('LANG')
2533     ) UE_STATUS,
2534     --CS.CREATION_DATE         ,
2535     DECODE(CS.CREATION_DATE, NULL, NULL, TO_CHAR(CS.CREATION_DATE,'YYYY-MM-DD')
2536               ||'T'
2537               ||TO_CHAR(CS.CREATION_DATE, 'hh24:mi:ss') ) CREATION_DATE ,
2538     WO.WORKORDER_NAME        ,
2539     PARTY.PARTY_NAME SR_CUSTOMER_NAME,
2540   DECODE(SR_CONT.CONTACT_TYPE,'PERSON',PARTY.PARTY_NAME,
2541     (SELECT CS_EMPL.FULL_NAME
2542        FROM PER_ALL_PEOPLE_F CS_EMPL
2543       WHERE TRUNC(SYSDATE) BETWEEN CS_EMPL.EFFECTIVE_START_DATE AND CS_EMPL.EFFECTIVE_END_DATE
2544     AND CS_EMPL.PERSON_ID = SR_CONT.PARTY_ID
2545     )) SR_CONTACT_NAME,
2546     CS.PROBLEM_CODE        ,
2547     (SELECT CS_TL.SUMMARY
2548        FROM CS_INCIDENTS_ALL_TL CS_TL
2549       WHERE LANGUAGE   = USERENV('LANG')
2550     AND CS.INCIDENT_ID = CS_TL.INCIDENT_ID
2551     ) SR_PROBLEM_SUMMARY ,
2552     (SELECT CS_SEV.NAME
2553        FROM CS_INCIDENT_SEVERITIES_TL CS_SEV
2554       WHERE LANGUAGE            = USERENV('LANG')
2555     AND CS.INCIDENT_SEVERITY_ID = CS_SEV.INCIDENT_SEVERITY_ID
2556     ) SR_INCIDENT_SEVERITY,
2557     CS.EXPECTED_RESOLUTION_DATE,
2558     CS.RESOLUTION_CODE,
2559     UE_ATA_LKUP.MEANING UE_ATA_MEANING                                                       ,
2560     UE_ATA_LKUP.DESCRIPTION UE_ATA_DESC,
2561     (SELECT MEANING
2562        FROM FND_LOOKUP_VALUES
2563       WHERE LOOKUP_TYPE = 'AHL_MEL_CDL_TYPE'
2564     AND LOOKUP_CODE     =UE.MEL_CDL_TYPE_CODE
2565     AND LANGUAGE        = USERENV('LANG')
2566     ) UE_MEL_CDL_TYPE,
2567     AHL_UMP_NONROUTINES_PVT.GET_MEL_CDL_STATUS(UE.UNIT_EFFECTIVITY_ID, 'F') UE_MEL_CDL_STATUS,
2568     ATASEQ.UE_ATA_PC_NODE_NAME,
2569     ATASEQ.UE_ATA_REPAIR_CATEGORY,
2570     UE.DUE_DATE,
2571     ATASEQ.UE_ATA_REPAIR_TIME,
2572      (SELECT JNTT.NOTES_DETAIL
2573        FROM JTF_NOTES_B JNTB,
2574       JTF_NOTES_TL JNTT
2575       WHERE JNTB.JTF_NOTE_ID    = JNTT.JTF_NOTE_ID
2576     AND JNTT.LANGUAGE           = USERENV('LANG')
2577     AND JNTB.SOURCE_OBJECT_CODE = 'AHL_MEL_CDL'
2578     AND JNTB.SOURCE_OBJECT_ID   = ATASEQ.MEL_CDL_ATA_SEQUENCE_ID
2579     ) UE_ATA_REMARKS,
2580     CS.INCIDENT_OCCURRED_DATE,
2581     ATASEQ.UE_ATA_HEADER_REVISION,
2582     (Select wip.date_released
2583      from wip_discrete_jobs wip,
2584           ahl_workorders wo
2585      where wo.wip_entity_id = wip.wip_entity_id
2586      and   wo.master_workorder_flag = 'Y'
2587      and   wo.visit_task_id = visit_task.visit_task_id
2588     ) RELEASE_DATE
2589 FROM
2590   AHL_UNIT_EFFECTIVITIES_B UE,
2591   MTL_SYSTEM_ITEMS_KFV MTL     ,
2592   CSI_ITEM_INSTANCES CSI       ,
2593   CS_INCIDENTS_ALL_B CS,
2594   AHL_WORKORDERS WO,
2595   AHL_VISIT_TASKS_B VISIT_TASK,
2596   HZ_PARTIES PARTY           ,
2597   CS_INCIDENT_TYPES_TL CS_TYPE,
2598   (SELECT INCIDENT_ID        ,
2599       PARTY_ID                 ,
2600       CONTACT_TYPE
2601        FROM CS_HZ_SR_CONTACT_POINTS
2602       WHERE PRIMARY_FLAG = 'Y'
2603     ) SR_CONT ,
2604     (SELECT LOOKUP_CODE,
2605       MEANING          ,
2606       DESCRIPTION
2607        FROM FND_LOOKUP_VALUES
2608       WHERE LOOKUP_TYPE = 'AHL_ATA_CODE'
2609     AND LANGUAGE        = USERENV('LANG')
2610     ) UE_ATA_LKUP,
2611     (SELECT UDF.UNIT_EFFECTIVITY_ID                   ,
2612       ATA.MEL_CDL_ATA_SEQUENCE_ID                     ,
2613       SRURG.NAME UE_ATA_REPAIR_CATEGORY               ,
2614       REPCAT.REPAIR_TIME UE_ATA_REPAIR_TIME           ,
2615       PCN.NAME UE_ATA_PC_NODE_NAME                    ,
2616       HDR.REVISION UE_ATA_HEADER_REVISION
2617      FROM AHL_UNIT_DEFERRALS_B UDF,
2618       AHL_MEL_CDL_ATA_SEQUENCES ATA ,
2619       AHL_MEL_CDL_HEADERS HDR       ,
2620       AHL_PC_NODES_B PCN            ,
2621       AHL_REPAIR_CATEGORIES REPCAT  ,
2622       CS_INCIDENT_URGENCIES_TL SRURG
2623      WHERE UDF.UNIT_DEFERRAL_TYPE IN ('MEL', 'CDL')
2624     AND UDF.ATA_SEQUENCE_ID         = ATA.MEL_CDL_ATA_SEQUENCE_ID
2625     AND ATA.MEL_CDL_HEADER_ID       = HDR.MEL_CDL_HEADER_ID
2626     AND HDR.PC_NODE_ID              = PCN.PC_NODE_ID
2627     AND ATA.REPAIR_CATEGORY_ID      = REPCAT.REPAIR_CATEGORY_ID
2628     AND REPCAT.SR_URGENCY_ID        = SRURG.INCIDENT_URGENCY_ID
2629     AND SRURG.LANGUAGE              = USERENV('LANG')
2630     ) ATASEQ
2631 WHERE
2632   UE.OBJECT_TYPE                                                          = 'SR'
2633   AND UE.CS_INCIDENT_ID                                                   = CS.INCIDENT_ID
2634   AND CSI.INVENTORY_ITEM_ID                                               = MTL.INVENTORY_ITEM_ID
2635   AND CSI.LAST_VLD_ORGANIZATION_ID                                        = MTL.ORGANIZATION_ID
2636   AND UE.CSI_ITEM_INSTANCE_ID                                             = CSI.INSTANCE_ID
2637   AND UE.UNIT_EFFECTIVITY_ID                                              = VISIT_TASK.UNIT_EFFECTIVITY_ID(+)
2638   AND VISIT_TASK.VISIT_TASK_ID                                            = WO.VISIT_TASK_ID(+)
2639   AND VISIT_TASK.TASK_TYPE_CODE                                           IN ('SUMMARY', 'UNASSOCIATED')
2640   AND CS.CUSTOMER_ID                                                      = PARTY.PARTY_ID
2641   AND SR_CONT.INCIDENT_ID(+)                                              = CS.INCIDENT_ID
2642   AND UE.ATA_CODE                                                         = UE_ATA_LKUP.LOOKUP_CODE(+)
2643   AND ATASEQ.UNIT_EFFECTIVITY_ID(+)                                       = UE.UNIT_EFFECTIVITY_ID
2644   AND CS.INCIDENT_TYPE_ID                                                 = CS_TYPE.INCIDENT_TYPE_ID
2645   AND CS_TYPE.LANGUAGE                                                    = USERENV('LANG')
2646   AND UE.UNIT_EFFECTIVITY_ID                                              = c_ue_id;
2647 
2648 
2649 CURSOR get_child_ue (c_ue_id IN NUMBER) IS
2650 SELECT c_ue_id FROM DUAL
2651 union
2652 SELECT unit_effectivity_id
2653 FROM AHL_UNIT_EFFECTIVITIES_B UE,
2654      (
2655      SELECT related_ue_id
2656      FROM AHL_UE_RELATIONSHIPS
2657      START WITH ue_id = c_ue_id
2658      AND relationship_code = 'PARENT'
2659      CONNECT BY ue_id = PRIOR related_ue_id
2660      AND relationship_code = 'PARENT'
2661      )CH
2662 WHERE UE.unit_effectivity_id = CH.related_ue_id;
2663 
2664 CURSOR get_nr_mr (c_ue_id IN NUMBER) IS
2665   SELECT DISTINCT
2666     VST1.UNIT_EFFECTIVITY_ID
2667   FROM AHL_VISIT_TASKS_B VST,
2668        AHL_UNIT_EFFECTIVITIES_B UE,
2669        AHL_VISIT_TASKS_B VST1
2670   WHERE VST.SERVICE_REQUEST_ID = VST1.SERVICE_REQUEST_ID
2671   AND   VST.UNIT_EFFECTIVITY_ID = UE.UNIT_EFFECTIVITY_ID
2672   AND   UE.UNIT_EFFECTIVITY_ID = c_ue_id;
2673 
2674 CURSOR mr_child_details_csr(c_ue_id IN NUMBER)
2675    IS
2676    SELECT UE.unit_effectivity_id ,
2677           MRB.TITLE
2678    FROM AHL_UNIT_EFFECTIVITIES_B UE,
2679         AHL_MR_HEADERS_B MRB,
2680      (
2681      SELECT related_ue_id
2682      FROM AHL_UE_RELATIONSHIPS
2683      START WITH ue_id = c_ue_id
2684      AND relationship_code = 'PARENT'
2685      CONNECT BY ue_id = PRIOR related_ue_id
2686      AND relationship_code = 'PARENT'
2687      )CH
2688    WHERE UE.unit_effectivity_id = CH.related_ue_id
2689      AND UE.MR_HEADER_ID        = MRB.MR_HEADER_ID;
2690 
2691 CURSOR nr_mr_details_csr(c_incident_id IN NUMBER)
2692 IS
2693    SELECT DISTINCT
2694         VST.UNIT_EFFECTIVITY_ID ,
2695         MRB.TITLE
2696    FROM AHL_MR_HEADERS_B MRB,
2697         AHL_VISIT_TASKS_B VST
2698    WHERE VST.SERVICE_REQUEST_ID = c_incident_id
2699      AND VST.MR_ID = MRB.MR_HEADER_ID;
2700 
2701 l_route_doc VARCHAR2(4000) := '
2702 SELECT DOC.DOCUMENT_NO          "DocumentNumber"         ,
2703        DOC.DOCUMENT_TITLE       "DocumentTitle"          ,
2704        DOC.DOC_TYPE_CODE        "DocumentType"           ,
2705        DOCV.DOC_SUB_TYPE_CODE   "DocumentSubType"        ,
2706        DOC.ASO_OBJECT_TYPE_DESC "AsoObjectTypeDesc"      ,
2707        NULL                     "OperationSequenceNumber",
2708        DOC.REVISION_NO          "RevisionNumber"         ,
2709        DOC.CHAPTER              "Chapter"                ,
2710        DOC.SECTION              "Section"                ,
2711        DOC.SUBJECT              "Subject"                ,
2712        DOC.PAGE                 "Page"                   ,
2713        DOC.FIGURE               "Figure"                 ,
2714        DOC.NOTE                 "Note"
2715 FROM   --AHL_WORKORDERS WO       ,
2716        AHL_DOCUMENT_ASSOS_V DOC,
2717        AHL_DOCUMENTS_V DOCV
2718 WHERE  --WO.ROUTE_ID              = DOC.ASO_OBJECT_ID
2719        DOC.DOCUMENT_ID          = DOCV.DOCUMENT_ID
2720 AND    DOC.ASO_OBJECT_TYPE_CODE = ''ROUTE''
2721 AND    DOC.ASO_OBJECT_ID        = :1';
2722 --AND    WO.WORKORDER_ID          = :1';
2723 
2724 
2725 l_op_doc VARCHAR2(4000) := '
2726 SELECT DOC.DOCUMENT_NO            "DocumentNumber"         ,
2727        DOC.DOCUMENT_TITLE         "DocumentTitle"          ,
2728        DOC.DOC_TYPE_CODE          "DocumentType"           ,
2729        DOCV.DOC_SUB_TYPE_CODE     "DocumentSubType"        ,
2730        DOC.ASO_OBJECT_TYPE_DESC   "AsoObjectTypeDesc"      ,
2731        WOP.OPERATION_SEQUENCE_NUM "OperationSequenceNumber",
2732        DOC.REVISION_NO            "RevisionNumber"         ,
2733        DOC.CHAPTER                "Chapter"                ,
2734        DOC.SECTION                "Section"                ,
2735        DOC.SUBJECT                "Subject"                ,
2736        DOC.PAGE                   "Page"                   ,
2737        DOC.FIGURE                 "Figure"                 ,
2738        DOC.NOTE                   "Note"
2739 FROM   AHL_WORKORDER_OPERATIONS WOP,
2740        AHL_DOCUMENT_ASSOS_V DOC    ,
2741        AHL_DOCUMENTS_V DOCV
2742 WHERE  WOP.OPERATION_ID         = DOC.ASO_OBJECT_ID
2743 AND    DOC.DOCUMENT_ID          = DOCV.DOCUMENT_ID
2744 AND    DOC.ASO_OBJECT_TYPE_CODE = ''OPERATION''
2745 AND    WOP.WORKORDER_ID         = :1
2746 AND    WOP.OPERATION_ID         = :2';
2747 
2748 l_mr_doc_details VARCHAR2(4000) := '
2749 SELECT DOC.DOCUMENT_NO          "DocumentNumber"         ,
2750        DOC.DOCUMENT_TITLE       "DocumentTitle"          ,
2751        DOC.DOC_TYPE_CODE        "DocumentType"           ,
2752        DOCV.DOC_SUB_TYPE_CODE   "DocumentSubType"        ,
2753        DOC.ASO_OBJECT_TYPE_DESC "AsoObjectTypeDesc"      ,
2754        NULL                     "OperationSequenceNumber",
2755        DOC.REVISION_NO          "RevisionNumber"         ,
2756        DOC.CHAPTER              "Chapter"                ,
2757        DOC.SECTION              "Section"                ,
2758        DOC.SUBJECT              "Subject"                ,
2759        DOC.PAGE                 "Page"                   ,
2760        DOC.FIGURE               "Figure"                 ,
2761        DOC.NOTE                 "Note"
2762 FROM   AHL_DOCUMENT_ASSOS_V DOC   ,
2763        --AHL_UNIT_EFFECTIVITIES_B UE,
2764        AHL_DOCUMENTS_V DOCV
2765 WHERE  --UE.MR_HEADER_ID        = DOC.ASO_OBJECT_ID
2766        DOC.ASO_OBJECT_ID      = :1
2767 AND    DOC.DOCUMENT_ID        = DOCV.DOCUMENT_ID
2768 AND    DOC.ASO_OBJECT_TYPE_CODE = ''MR''';
2769 --AND    UE.UNIT_EFFECTIVITY_ID = :1';
2770 
2771 l_mat_dffs VARCHAR2(1000) := '
2772 SELECT MA.ATTRIBUTE_CATEGORY "AttributeCategory",
2773        MA.ATTRIBUTE1         "Attribute1"       ,
2774        MA.ATTRIBUTE2         "Attribute2"       ,
2775        MA.ATTRIBUTE3         "Attribute3"       ,
2776        MA.ATTRIBUTE4         "Attribute4"       ,
2777        MA.ATTRIBUTE5         "Attribute5"       ,
2778        MA.ATTRIBUTE6         "Attribute6"       ,
2779        MA.ATTRIBUTE7         "Attribute7"       ,
2780        MA.ATTRIBUTE8         "Attribute8"       ,
2781        MA.ATTRIBUTE9         "Attribute9"       ,
2782        MA.ATTRIBUTE10        "Attribute10"      ,
2783        MA.ATTRIBUTE11        "Attribute11"      ,
2784        MA.ATTRIBUTE12        "Attribute12"      ,
2785        MA.ATTRIBUTE13        "Attribute13"      ,
2786        MA.ATTRIBUTE14        "Attribute14"      ,
2787        MA.ATTRIBUTE15        "Attribute15"
2788 FROM   AHL_SCHEDULE_MATERIALS MA--, AHL_JOB_OPER_MATERIALS_V MV
2789 WHERE  MA.SCHEDULED_MATERIAL_ID = :1';
2790 
2791 
2792 l_res_dffs VARCHAR2(1500) := '
2793 SELECT RE.ATTRIBUTE_CATEGORY "AttributeCategory",
2794        RE.ATTRIBUTE1         "Attribute1"       ,
2795        RE.ATTRIBUTE2         "Attribute2"       ,
2796        RE.ATTRIBUTE3         "Attribute3"       ,
2797        RE.ATTRIBUTE4         "Attribute4"       ,
2798        RE.ATTRIBUTE5         "Attribute5"       ,
2799        RE.ATTRIBUTE6         "Attribute6"       ,
2800        RE.ATTRIBUTE7         "Attribute7"       ,
2801        RE.ATTRIBUTE8         "Attribute8"       ,
2802        RE.ATTRIBUTE9         "Attribute9"       ,
2803        RE.ATTRIBUTE10        "Attribute10"      ,
2804        RE.ATTRIBUTE11        "Attribute11"      ,
2805        RE.ATTRIBUTE12        "Attribute12"      ,
2806        RE.ATTRIBUTE13        "Attribute13"      ,
2807        RE.ATTRIBUTE14        "Attribute14"      ,
2808        RE.ATTRIBUTE15        "Attribute15"
2809 FROM   AHL_RT_OPER_RESOURCES RE, ahl_resource_mappings ar, bom_resources br
2810 WHERE  br.organization_id = ar.BOM_ORG_ID
2811 AND    br.resource_id = ar.BOM_RESOURCE_ID
2812 AND    br.resource_id = :1
2813 AND    ar.aso_resource_id = re.aso_resource_id
2814 AND    re.ASSOCIATION_TYPE_CODE = :2
2815 AND    re.object_id = :3';
2816 
2817 l_op_dffs VARCHAR2(1000) := '
2818 SELECT OP.ATTRIBUTE_CATEGORY "AttributeCategory",
2819        OP.ATTRIBUTE1         "Attribute1"       ,
2820        OP.ATTRIBUTE2         "Attribute2"       ,
2821        OP.ATTRIBUTE3         "Attribute3"       ,
2822        OP.ATTRIBUTE4         "Attribute4"       ,
2823        OP.ATTRIBUTE5         "Attribute5"       ,
2824        OP.ATTRIBUTE6         "Attribute6"       ,
2825        OP.ATTRIBUTE7         "Attribute7"       ,
2826        OP.ATTRIBUTE8         "Attribute8"       ,
2827        OP.ATTRIBUTE9         "Attribute9"       ,
2828        OP.ATTRIBUTE10        "Attribute10"      ,
2829        OP.ATTRIBUTE11        "Attribute11"      ,
2830        OP.ATTRIBUTE12        "Attribute12"      ,
2831        OP.ATTRIBUTE13        "Attribute13"      ,
2832        OP.ATTRIBUTE14        "Attribute14"      ,
2833        OP.ATTRIBUTE15        "Attribute15"
2834 FROM   AHL_OPERATIONS_B OP
2835 WHERE  OP.OPERATION_ID = :1';
2836 
2837 l_qa_plan_attr VARCHAR2(1000) := '
2838 SELECT char_id         "CharId"        ,
2839        prompt_sequence "PromptSequence",
2840        prompt          "Prompt"        ,
2841        default_value   "DefaultValue"
2842 FROM   QA_PLAN_CHARS
2843 WHERE  plan_id = :1';
2844 
2845 l_qa_res_details VARCHAR2(1000) := '
2846 SELECT QC.char_id         "CharId",
2847        CI.attribute_value "AttributeValue"
2848 FROM   CSI_IEA_VALUES CI,
2849        QA_PLAN_CHARS QC ,
2850        QA_RESULTS_V QR
2851 WHERE  QC.plan_id        = QR.plan_id
2852 AND    CI.instance_id(+) = QR.csi_instance_id
2853 AND    QR.collection_id  = :1';
2854 
2855 
2856 l_counter_det VARCHAR2(1000) := '
2857 SELECT cc.counter_template_name "CounterName",
2858        (SELECT ccr.net_reading
2859        FROM    csi_counter_readings ccr
2860        WHERE   ccr.counter_value_id         = cc.CTR_VAL_MAX_SEQ_NO
2861        AND     NVL(ccr.disabled_flag,''N'') = ''N''
2862        )
2863        "CurrentReading"
2864        --FROM   csi_counter_associations cca, csi_counters_vl cc, ahl_workorders_v wo
2865 FROM   csi_counter_associations cca,
2866        csi_counters_vl cc          ,
2867        ahl_workorders WO           ,
2868        ahl_visit_tasks_b tsk
2869 WHERE  cca.counter_id     = cc.counter_id
2870 AND    wo.visit_task_id   = tsk.visit_task_id
2871 AND    source_object_code = ''CP''
2872        --AND    source_object_id = wo.item_instance_id
2873 AND    source_object_id = tsk.instance_id
2874 AND    wo.workorder_id  = :1';
2875 
2876 l_counter_details VARCHAR2(500) := '
2877 SELECT cc.counter_template_name "CounterName",
2878        (SELECT ccr.net_reading
2879        FROM    csi_counter_readings ccr
2880        WHERE   ccr.counter_value_id         = cc.CTR_VAL_MAX_SEQ_NO
2881        AND     NVL(ccr.disabled_flag,''N'') = ''N''
2882        )
2883        "CurrentReading"
2884 FROM   csi_counter_associations cca,
2885        csi_counters_vl cc
2886 WHERE  cca.counter_id     = cc.counter_id
2887 AND    source_object_code = ''CP''
2888 AND    source_object_id   = :1';
2889 
2890 l_inst_remove_det VARCHAR2(2000) := '
2891 SELECT OFFI.concatenated_segments RemovedItem      ,
2892        OFFC.serial_number         RemovedSerial    ,
2893        PC.removed_quantity        RemovedQuantity  ,
2894        OFFC.lot_number            RemovedLot       ,
2895        OFFC.inventory_revision    RemovedRevision  ,
2896        ONI.concatenated_segments  InstalledItem    ,
2897        ONC.serial_number          InstalledSerial  ,
2898        PC.installed_quantity      InstalledQuantity,
2899        ONC.lot_number             InstalledLot     ,
2900        ONC.inventory_revision     InstalledRevision,
2901        DIS.position_reference     position
2902 FROM   ahl_part_changes_v PC    ,
2903        csi_item_instances OFFC  ,
2904        mtl_system_items_kfv OFFI,
2905        csi_item_instances ONC   ,
2906        mtl_system_items_kfv ONI ,
2907        ahl_prd_dispositions_v DIS
2908 WHERE  PC.part_change_id               = DIS.part_change_id
2909 AND    PC.removed_instance_id          = OFFC.instance_id (+)
2910 AND    PC.installed_instance_id        = ONC.instance_id (+)
2911 AND    OFFC.inventory_item_id          = OFFI.inventory_item_id (+)
2912 AND    OFFC.inv_master_organization_id = OFFI.organization_id (+)
2913 AND    ONC.inventory_item_id           = ONI.inventory_item_id (+)
2914 AND    ONC.inv_master_organization_id  = ONI.organization_id (+)
2915 AND    DIS.status                     <> ''Terminated''
2916 AND    DIS.workorder_id                = :1';
2917 
2918 l_tools_det VARCHAR2(1000) := '
2919 SELECT PP.OPERATION_SEQUENCE "OperationSequenceNumber",
2920        PP.RESOURCE_SEQUENCE  "ResourceSequenceNumber" ,
2921        PP.RESOURCE_CODE      "Item"                   ,
2922        PP.RESOURCE_TYPE_NAME "ItemType"               ,
2923        PP.RESOURCE_NAME      "Description"            ,
2924        PP.QUANTITY           "Quantity"               ,
2925        PP.DURATION           "Duration"               ,
2926        PP.UOM_NAME           "UOM"
2927 FROM   AHL_PP_REQUIREMENT_V PP,
2928        AHL_WORKORDERS WO
2929 WHERE  PP.JOB_ID             = WO.WORKORDER_ID
2930 AND    PP.resource_type_code = 1
2931 AND    WO.WORKORDER_ID       = :1';
2932 
2933 l_visit_details VARCHAR2(3000) := '
2934 SELECT AVB.VISIT_ID "VisitId",
2935        AVB.VISIT_NUMBER "VisitNumber",
2936        --TO_CHAR(AVB.START_DATE_TIME, ''YYYY-MM-DD hh24:mi:ss'') "PlannedStartDate",
2937        DECODE(AVB.START_DATE_TIME, NULL, NULL, TO_CHAR(AVB.START_DATE_TIME,''YYYY-MM-DD'')
2938               ||''T''
2939               ||TO_CHAR(AVB.START_DATE_TIME, ''hh24:mi:ss'') ) "PlannedStartDate",
2940        --TO_CHAR(AVB.CLOSE_DATE_TIME, ''YYYY-MM-DD hh24:mi:ss'') "PlannedEndDate",
2941        DECODE(AVB.CLOSE_DATE_TIME, NULL, NULL, TO_CHAR(AVB.CLOSE_DATE_TIME,''YYYY-MM-DD'')
2942               ||''T''
2943               ||TO_CHAR(AVB.CLOSE_DATE_TIME, ''hh24:mi:ss'') )  "PlannedEndDate",
2944        (SELECT --TO_CHAR(WDJ.DATE_RELEASED, ''YYYY-MM-DD hh24:mi:ss'')
2945        DECODE(WDJ.DATE_RELEASED, NULL, NULL, TO_CHAR(WDJ.DATE_RELEASED,''YYYY-MM-DD'')
2946               ||''T''
2947               ||TO_CHAR(WDJ.DATE_RELEASED, ''hh24:mi:ss'') )
2948         FROM AHL_WORKORDERS WO,
2949 	     WIP_DISCRETE_JOBS WDJ
2950 	WHERE WDJ.WIP_ENTITY_ID = WO.WIP_ENTITY_ID
2951 	  AND WO.VISIT_TASK_ID IS NULL
2952           AND AVB.VISIT_ID = WO.VISIT_ID
2953        ) "ReleaseDate",
2954        AHL_UTILITY_PVT.GET_UNIT_NAME(AVB.ITEM_INSTANCE_ID) "UnitName",
2955        MTSB.CONCATENATED_SEGMENTS "Item",
2956        CSIS.SERIAL_NUMBER "SerialNumber",
2957        FLVT.MEANING "VisitType",
2958        HROU.NAME "Organization",
2959        BDPT.DESCRIPTION "Department",
2960     --   (Select INCIDENT_NUMBER from CS_INCIDENTS_ALL_B where INCIDENT_ID = AVB.SERVICE_REQUEST_ID) "NonRoutineTitle",
2961        MTLI.subinventory_code "SubInventory",
2962        DECODE(MSI.segment19, NULL, MTLI.concatenated_segments, INV_PROJECT.GET_LOCSEGS(MTLI.concatenated_segments)
2963     || fnd_flex_ext.get_delimiter(''INV'', ''MTLL'', 101)
2964     || INV_ProjectLocator_PUB.get_project_number(MSI.segment19)
2965     || fnd_flex_ext.get_delimiter(''INV'', ''MTLL'', 101)
2966     || INV_ProjectLocator_PUB.get_task_number(MSI.segment20)) "Locator",
2967      (Select INCIDENT_NUMBER from CS_INCIDENTS_ALL_B where INCIDENT_ID = AVB.SERVICE_REQUEST_ID) "NonRoutineTitle"
2968 FROM AHL_VISITS_B AVB,
2969      MTL_SYSTEM_ITEMS_B_KFV MTSB,
2970      CSI_ITEM_INSTANCES CSIS,
2971      FND_LOOKUP_VALUES_VL FLVT,
2972      HR_ALL_ORGANIZATION_UNITS HROU,
2973      BOM_DEPARTMENTS BDPT,
2974      mtl_item_locations_kfv MTLI,
2975      mtl_item_locations MSI
2976 WHERE VISIT_ID = :1
2977   AND AVB.INVENTORY_ITEM_ID     = MTSB.INVENTORY_ITEM_ID(+)
2978   AND AVB.ITEM_ORGANIZATION_ID  = MTSB.ORGANIZATION_ID(+)
2979   AND AVB.ITEM_INSTANCE_ID      = CSIS.INSTANCE_ID(+)
2980   AND FLVT.LOOKUP_TYPE(+)       = ''AHL_PLANNING_VISIT_TYPE''
2981   AND FLVT.LOOKUP_CODE(+)       = AVB.VISIT_TYPE_CODE
2982   AND AVB.ORGANIZATION_ID       = HROU.ORGANIZATION_ID(+)
2983   AND AVB.DEPARTMENT_ID         = BDPT.DEPARTMENT_ID(+)
2984   AND MTLI.inventory_location_id(+) = AVB.inv_locator_id
2985   AND MSI.inventory_location_id(+)  = AVB.inv_locator_id';
2986 
2987 l_child_mr_details VARCHAR2(1000) :=
2988   'SELECT unit_effectivity_id "UnitEffectivityId",
2989           MRB.TITLE "Title"
2990    FROM AHL_UNIT_EFFECTIVITIES_B UE,
2991         AHL_MR_HEADERS_B MRB,
2992      (
2993      SELECT related_ue_id
2994      FROM AHL_UE_RELATIONSHIPS
2995      START WITH ue_id = :1
2996      AND relationship_code = ''PARENT''
2997      CONNECT BY ue_id = PRIOR related_ue_id
2998      AND relationship_code = ''PARENT''
2999      )CH
3000    WHERE UE.unit_effectivity_id = CH.related_ue_id
3001      AND UE.MR_HEADER_ID        = MRB.MR_HEADER_ID';
3002 
3003  l_child_nr_details VARCHAR2(1000) := '
3004    SELECT DISTINCT
3005         VST.UNIT_EFFECTIVITY_ID "UnitEffectivityId",
3006         MRB.TITLE "Title"
3007    FROM AHL_MR_HEADERS_B MRB,
3008         AHL_VISIT_TASKS_B VST
3009    WHERE VST.SERVICE_REQUEST_ID = :1
3010      AND VST.MR_ID = MRB.MR_HEADER_ID
3011  ';
3012 
3013   wo_details_rec wo_details_csr%ROWTYPE;
3014   mat_details_rec mat_details_csr%ROWTYPE;
3015   res_req_details_rec res_req_details_csr%ROWTYPE;
3016   op_details_rec op_details_csr%ROWTYPE;
3017 --  doc_details_rec doc_details_csr%ROWTYPE;
3018   route_details_rec route_details_csr%ROWTYPE;
3019   qa_plan_rec qa_plan_csr%ROWTYPE;
3020   wo_op_details_rec op_det_csr%ROWTYPE;
3021   get_header_det_rec get_header_det_csr%ROWTYPE;
3022   get_header_det1_rec get_header_det1_csr%ROWTYPE;
3023   get_mr_details_rec get_mr_details_csr%ROWTYPE;
3024   qa_plan_attr_rec  qa_plan_attr_csr%ROWTYPE;
3025   route_ffs_rec route_ffs_csr%ROWTYPE;
3026   panel_details_rec panel_details_csr%ROWTYPE;
3027   l_qa_plan_id NUMBER;
3028   l_task_type VARCHAR2(30);
3029   nr_details_rec nr_details_csr%ROWTYPE;
3030   mr_child_details_rec mr_child_details_csr%ROWTYPE;
3031   nr_mr_details_rec nr_mr_details_csr%ROWTYPE;
3032 
3033   l_route_op_res_found VARCHAR2(1);--R for Route, O for Operation and 'N' for none (bug 10048778 )
3034 
3035 
3036 Begin
3037 
3038 SAVEPOINT Generate_JCG_XML_PVT;
3039 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
3040 -- initialize log levels
3041 l_log_unexpected            := FND_LOG.level_unexpected;
3042 l_log_statement             := FND_LOG.level_statement;
3043 l_log_current_level         := FND_LOG.g_current_runtime_level;
3044 
3045 IF (l_log_statement >= l_log_current_level)THEN
3046     fnd_log.string (
3047       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'p_object_id : ' || p_object_id);
3048     fnd_log.string (
3049       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'p_object_type : ' || p_object_type);
3050     fnd_log.string (
3051       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'p_split_flag : ' || p_split_flag);
3052 END IF;
3053 
3054 -- Call pre customer hook api call
3055 
3056 IF (JTF_USR_HKS.Ok_to_execute('AHL_PRD_PRINT_PVT', 'GENERATE_JCG_XML', 'B', 'C' )) then
3057       ahl_prd_print_CUHK.GENERATE_JCG_XML_pre(
3058         p_object_type => p_object_type,
3059         p_object_id => p_object_id,
3060         p_split_flag => p_split_flag,
3061         x_msg_count => l_msg_count,
3062         x_msg_data => l_msg_data,
3063         x_return_status => l_return_status);
3064       IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3065         RAISE FND_API.G_EXC_ERROR;
3066       ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3067         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3068       END IF;
3069 END IF;
3070 
3071 p_dir := FND_PROFILE.VALUE('AHL_ENIGMA_JCG_XML_FILEPATH');
3072 x_file_name := p_object_type ||'-' || p_object_id || '-' || TO_CHAR(SYSDATE,'dd-Mon-yyyy-hh24-mi-ss') || '.xml';
3073 
3074 IF (l_log_statement >= l_log_current_level)THEN
3075     fnd_log.string (
3076       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'p_dir : ' || p_dir);
3077     fnd_log.string (
3078       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'x_file_name : ' || x_file_name);
3079 END IF;
3080 
3081 dbms_lob.createTemporary( l_merged_lob, true );
3082 dbms_lob.open( l_merged_lob, dbms_lob.lob_readwrite );
3083 IF (p_object_type       = 'WO') THEN
3084         l_wo_id_tbl(1) := p_object_id;
3085 
3086         BEGIN
3087           SELECT visit_id
3088           INTO   l_visit_id
3089           FROM   ahl_workorders
3090           WHERE  workorder_id = l_wo_id_tbl(1);
3091         EXCEPTION
3092           WHEN OTHERS THEN
3093             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3094         END;
3095 
3096 ELSIF (p_object_type = 'VST') THEN
3097        l_visit_id  := p_object_id;
3098        BEGIN
3099 	 SELECT vst.unit_effectivity_id
3100          BULK COLLECT INTO l_ue_id_tbl
3101 	 FROM ahl_visit_tasks_b vst, ahl_unit_effectivities_b ue, ahl_workorders wo
3102 	 WHERE vst.visit_id = l_visit_id
3103 	 and vst.task_type_code = 'SUMMARY'
3104          and wo.visit_task_id = vst.visit_task_id
3105          and wo.status_code NOT IN ('7','12','14','15','17','22')
3106 	 and wo.master_workorder_flag = 'Y'
3107 	 and vst.unit_effectivity_id = ue.unit_effectivity_id
3108 	 order by ue.object_type;
3109       END;
3110 
3111 ELSIF (p_object_type = 'MR' OR p_object_type = 'NR') THEN
3112         l_ue_id_tbl(1)    := p_object_id;
3113 
3114         BEGIN
3115           SELECT visit_id
3116           INTO   l_visit_id
3117           FROM   ahl_visit_tasks_b
3118           WHERE  unit_effectivity_id         = l_ue_id_tbl(1)
3119           AND    NVL(status_code,'DELETED') <> 'DELETED'
3120           AND    task_type_code = 'SUMMARY';
3121 
3122 	  IF (p_object_type = 'MR') THEN
3123 	    OPEN get_child_ue(l_ue_id_tbl(1));
3124 	    FETCH get_child_ue BULK COLLECT INTO l_ue_id_tbl;
3125 	    CLOSE get_child_ue;
3126 
3127           ELSIF (p_object_type = 'NR') THEN
3128 	    OPEN get_nr_mr(l_ue_id_tbl(1));
3129 	    FETCH get_nr_mr BULK COLLECT INTO l_ue_id_tbl;
3130 	    CLOSE get_nr_mr;
3131 
3132          END IF;
3133 
3134         EXCEPTION
3135           WHEN OTHERS THEN
3136             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3137         END;
3138 
3139 END IF;
3140 
3141 IF (l_log_statement >= l_log_current_level)THEN
3142     fnd_log.string (
3143       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Starting to create LOB');
3144 END IF;
3145 
3146 dbms_lob.write(l_merged_lob, length('<?xml version="1.0" encoding="UTF-8" ?>
3147 <WorkPackage xmlns="http://www.oracle.com/ns/ahl/prd/EnigmaWorkPackage">'),length(l_merged_lob)+1, '<?xml version="1.0" encoding="UTF-8" ?>
3148 <WorkPackage xmlns="http://www.oracle.com/ns/ahl/prd/EnigmaWorkPackage">');
3149 dbms_lob.write(l_merged_lob, length('<wpmeta>'),length(l_merged_lob)+1, '<wpmeta>');
3150 dbms_lob.write(l_merged_lob, length('<UserId>'),length(l_merged_lob)+1, '<UserId>');
3151 dbms_lob.write(l_merged_lob, length(fnd_global.user_id),length(l_merged_lob)+1, fnd_global.user_id);
3152 dbms_lob.write(l_merged_lob, length('</UserId>'),length(l_merged_lob)+1, '</UserId>');
3153 dbms_lob.write(l_merged_lob, length('<User>'),length(l_merged_lob)+1, '<User>');
3154 dummy := DBMS_XMLGEN.CONVERT(fnd_global.user_name);
3155 dbms_lob.write(l_merged_lob, length(dummy),length(l_merged_lob)+1, dummy);
3156 dbms_lob.write(l_merged_lob, length('</User>'),length(l_merged_lob)+1, '</User>');
3157 dbms_lob.write(l_merged_lob, length('<WorkPackageGenerationDate>'),length(l_merged_lob)+1, '<WorkPackageGenerationDate>');
3158 dbms_lob.write(l_merged_lob, length(TO_CHAR(sysdate,'YYYY-MM-DD')||'T'||TO_CHAR(sysdate, 'hh24:mi:ss')),length(l_merged_lob)+1, TO_CHAR(sysdate,'YYYY-MM-DD')||'T'||TO_CHAR(sysdate, 'hh24:mi:ss'));
3159 dbms_lob.write(l_merged_lob, length('</WorkPackageGenerationDate>'),length(l_merged_lob)+1, '</WorkPackageGenerationDate>');
3160 dbms_lob.write(l_merged_lob, length('<RequestType>'),length(l_merged_lob)+1, '<RequestType>');
3161 dbms_lob.write(l_merged_lob, length(p_object_type),length(l_merged_lob)+1, p_object_type);
3162 dbms_lob.write(l_merged_lob, length('</RequestType>'),length(l_merged_lob)+1, '</RequestType>');
3163 dbms_lob.write(l_merged_lob, length('<RequestObjectId>'),length(l_merged_lob)+1, '<RequestObjectId>');
3164 dbms_lob.write(l_merged_lob, length(p_object_id),length(l_merged_lob)+1, p_object_id);
3165 dbms_lob.write(l_merged_lob, length('</RequestObjectId>'),length(l_merged_lob)+1, '</RequestObjectId>');
3166 dbms_lob.write(l_merged_lob, length('<SplitFlag>'),length(l_merged_lob)+1, '<SplitFlag>');
3167 dbms_lob.write(l_merged_lob, length(p_split_flag),length(l_merged_lob)+1, p_split_flag);
3168 dbms_lob.write(l_merged_lob, length('</SplitFlag>'),length(l_merged_lob)+1, '</SplitFlag>');
3169 
3170 --added new
3171 dbms_lob.write(l_merged_lob, length('</wpmeta>'),length(l_merged_lob)+1, '</wpmeta>');
3172 
3173 /** VisitDetails ===== VisitDetailsType **/
3174 context := dbms_xmlgen.newContext(l_visit_details);
3175           DBMS_XMLGEN.setbindvalue (context, '1', l_visit_id);
3176           dbms_xmlgen.setRowsetTag(context, 'VisitDetails');
3177           dbms_xmlgen.setRowTag(context,null);
3178           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
3179 	  DBMS_XMLGEN.setNullHandling(context, 2);
3180           l_visit_det_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
3181           dbms_xmlgen.closeContext(context);
3182           -- Write to lob only when some data exists.
3183           IF dbms_lob.getlength(l_visit_det_lob) > 0
3184           THEN
3185              l_offset := dbms_lob.INSTR(l_visit_det_lob, '>');
3186 
3187              dbms_lob.copy(l_merged_lob, l_visit_det_lob, dbms_lob.getlength(l_visit_det_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
3188 
3189           END IF;
3190 
3191 IF (l_log_statement >= l_log_current_level)THEN
3192     fnd_log.string (
3193       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'After visit details');
3194 END IF;
3195 
3196   IF (p_object_type = 'WO') THEN
3197         BEGIN
3198 
3199             SELECT VST.unit_effectivity_id
3200             INTO   l_ue_id_tbl(1)
3201             FROM   ahl_workorders WO,
3202                    ahl_visit_tasks_b VST
3203             WHERE  WO.visit_task_id = VST.visit_task_id
3204             AND    WO.workorder_id  = l_wo_id_tbl(1);
3205 
3206         EXCEPTION
3207            WHEN OTHERS THEN
3208              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3209         END;
3210   END IF;
3211 
3212 IF (l_ue_id_tbl.COUNT <> 0) THEN
3213 
3214 FOR l_index_ue IN l_ue_id_tbl.FIRST .. l_ue_id_tbl.LAST
3215 LOOP
3216         l_nr_flag := 'A';
3217         l_ue_id := l_ue_id_tbl(l_index_ue);
3218 
3219    IF (p_object_type <> 'WO') THEN
3220     OPEN get_ue_wo_id(l_ue_id);
3221     FETCH get_ue_wo_id BULK COLLECT
3222     INTO  l_wo_id_tbl;
3223     CLOSE get_ue_wo_id;
3224    END IF;
3225 
3226 
3227 --IF (p_object_type <> 'NR') THEN
3228   OPEN get_mr_details_csr(l_ue_id);
3229   FETCH get_mr_details_csr INTO  get_mr_details_rec;
3230   IF (get_mr_details_csr%FOUND) THEN
3231         dbms_lob.write(l_merged_lob, LENGTH('<MrPackage>'),LENGTH(l_merged_lob)+1, '<MrPackage>');
3232         l_nr_flag := 'N';
3233         IF (l_log_statement >= l_log_current_level)THEN
3234             fnd_log.string (
3235               l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Checkpoint 0: mr_header_id:' || get_mr_details_rec.mr_header_id);
3236         END IF;
3237 
3238         ahl_ump_util_pkg.get_last_accomplishment(get_mr_details_rec.csi_item_instance_id, get_mr_details_rec.mr_header_id, l_accomplishment_date, l_unit_eff_id, l_dummy_flag, l_dummy_status, l_dummy_return);
3239 
3240         -- apattark fix for bug #11843858
3241         l_counter_value := NULL;
3242         l_net_reading := NULL;
3243         --apattark end for bug #11843858
3244 
3245         IF (l_unit_eff_id is not null) THEN
3246 	  BEGIN
3247 	      select counter_value,
3248 		(select ccr.net_reading
3249 		 from csi_counter_readings ccr
3250 		 where ccr.counter_value_id = cc.CTR_VAL_MAX_SEQ_NO
3251 		   and nvl(ccr.disabled_flag,'N') = 'N') net_reading
3252 	      into l_counter_value, l_net_reading
3253 	      from ahl_unit_accomplishmnts ua,  csi_counter_associations cca, csi_counters_vl cc
3254 	      where ua.unit_effectivity_id = l_unit_eff_id
3255 	      and ua.counter_id = cc.counter_id
3256 	      and cc.counter_template_name = get_mr_details_rec.DueCounterName
3257 	      and cca.counter_id = cc.counter_id
3258 	      and source_object_code = 'CP'
3259 	      and source_object_id = get_mr_details_rec.csi_item_instance_id;
3260 	  EXCEPTION
3261 	      WHEN OTHERS THEN
3262 		 NULL;
3263 	  END;
3264 
3265 	END IF;
3266 
3267 	dbms_lob.write(l_merged_lob, LENGTH('<UnitEffectivityId>'),LENGTH(l_merged_lob)+1, '<UnitEffectivityId>');
3268 	dbms_lob.write(l_merged_lob, LENGTH(l_ue_id),LENGTH(l_merged_lob)+1, l_ue_id);
3269 	dbms_lob.write(l_merged_lob, LENGTH('</UnitEffectivityId>'),LENGTH(l_merged_lob)+1, '</UnitEffectivityId>');
3270 	/** to be added: new release date **/
3271 	dbms_lob.write(l_merged_lob, LENGTH('<Title>'),LENGTH(l_merged_lob)+1, '<Title>');
3272 	dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.title);
3273 	dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3274 	dbms_lob.write(l_merged_lob, LENGTH('</Title>'),LENGTH(l_merged_lob)+1, '</Title>');
3275 	IF (get_mr_details_rec.description IS NOT NULL) THEN
3276 		dbms_lob.write(l_merged_lob, LENGTH('<Descripton>'),LENGTH(l_merged_lob)+1, '<Descripton>');
3277 		dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.Description);
3278 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3279 		dbms_lob.write(l_merged_lob, LENGTH('</Descripton>'),LENGTH(l_merged_lob)+1, '</Descripton>');
3280 	ELSE
3281 		dbms_lob.write(l_merged_lob, LENGTH('<Descripton/>'),LENGTH(l_merged_lob)+1, '<Descripton/>');
3282 	END IF;
3283 
3284 	dbms_lob.write(l_merged_lob, length('<Version>'),length(l_merged_lob)+1, '<Version>');
3285 	dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.Version);
3286 	dbms_lob.write(l_merged_lob, length(dummy),length(l_merged_lob)+1, dummy);
3287 	dbms_lob.write(l_merged_lob, length('</Version>'),length(l_merged_lob)+1, '</Version>');
3288 
3289 	dbms_lob.write(l_merged_lob, LENGTH('<RevisionDate>'),LENGTH(l_merged_lob)+1, '<RevisionDate>');
3290 	dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.LAST_UPDATE_DATE);
3291 	dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3292 	dbms_lob.write(l_merged_lob, LENGTH('</RevisionDate>'),LENGTH(l_merged_lob)+1, '</RevisionDate>');
3293 
3294 
3295 	dbms_lob.write(l_merged_lob, length('<ProgramType>'),length(l_merged_lob)+1, '<ProgramType>');
3296 	dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.ProgramType);
3297 	dbms_lob.write(l_merged_lob, length(dummy),length(l_merged_lob)+1, dummy);
3298 	dbms_lob.write(l_merged_lob, length('</ProgramType>'),length(l_merged_lob)+1, '</ProgramType>');
3299 
3300 	IF (get_mr_details_rec.ProgramSubType IS NOT NULL) THEN
3301 		dbms_lob.write(l_merged_lob, LENGTH('<ProgramSubType>'),LENGTH(l_merged_lob)+1, '<ProgramSubType>');
3302 		dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.ProgramSubType);
3303 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3304 		dbms_lob.write(l_merged_lob, LENGTH('</ProgramSubType>'),LENGTH(l_merged_lob)+1, '</ProgramSubType>');
3305 	ELSE
3306 		dbms_lob.write(l_merged_lob, LENGTH('<ProgramSubType/>'),LENGTH(l_merged_lob)+1, '<ProgramSubType/>');
3307 	END IF;
3308 	IF (get_mr_details_rec.DueDate IS NOT NULL) THEN
3309 		dbms_lob.write(l_merged_lob, LENGTH('<DueDate>'),LENGTH(l_merged_lob)+1, '<DueDate>');
3310 		dbms_lob.write(l_merged_lob, LENGTH(get_mr_details_rec.DueDate),LENGTH(l_merged_lob)+1, get_mr_details_rec.DueDate);
3311 		dbms_lob.write(l_merged_lob, LENGTH('</DueDate>'),LENGTH(l_merged_lob)+1, '</DueDate>');
3312 	ELSE
3313 		dbms_lob.write(l_merged_lob, LENGTH('<DueDate/>'),LENGTH(l_merged_lob)+1, '<DueDate/>');
3314 	END IF;
3315 	IF (get_mr_details_rec.DueCounterName IS NOT NULL) THEN
3316 		dbms_lob.write(l_merged_lob, LENGTH('<DueCounterName>'),LENGTH(l_merged_lob)+1, '<DueCounterName>');
3317 		dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.DueCounterName);
3318 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3319 		dbms_lob.write(l_merged_lob, LENGTH('</DueCounterName>'),LENGTH(l_merged_lob)+1, '</DueCounterName>');
3320 	ELSE
3321 		dbms_lob.write(l_merged_lob, LENGTH('<DueCounterName/>'),LENGTH(l_merged_lob)+1, '<DueCounterName/>');
3322 	END IF;
3323 	IF (l_net_reading IS NOT NULL) THEN
3324 		dbms_lob.write(l_merged_lob, LENGTH('<CurrentReading>'),LENGTH(l_merged_lob)+1, '<CurrentReading>');
3325 		dbms_lob.write(l_merged_lob, LENGTH(l_net_reading),LENGTH(l_merged_lob)+1, l_net_reading);
3326 		dbms_lob.write(l_merged_lob, LENGTH('</CurrentReading>'),LENGTH(l_merged_lob)+1, '</CurrentReading>');
3327 	ELSE
3328 		dbms_lob.write(l_merged_lob, LENGTH('<CurrentReading/>'),LENGTH(l_merged_lob)+1, '<CurrentReading/>');
3329 	END IF;
3330 	IF (get_mr_details_rec.DueCounterValue IS NOT NULL) THEN
3331 		dbms_lob.write(l_merged_lob, LENGTH('<DueCounterValue>'),LENGTH(l_merged_lob)+1, '<DueCounterValue>');
3332 		dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.DueCounterValue);
3333 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3334 		dbms_lob.write(l_merged_lob, LENGTH('</DueCounterValue>'),LENGTH(l_merged_lob)+1, '</DueCounterValue>');
3335 	ELSE
3336 		dbms_lob.write(l_merged_lob, LENGTH('<DueCounterValue/>'),LENGTH(l_merged_lob)+1, '<DueCounterValue/>');
3337 	END IF;
3338 	IF (get_mr_details_rec.UOM is not null) THEN
3339 		dbms_lob.write(l_merged_lob, LENGTH('<UOM>'),LENGTH(l_merged_lob)+1, '<UOM>');
3340 		dummy := DBMS_XMLGEN.CONVERT(get_mr_details_rec.UOM);
3341 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3342 		dbms_lob.write(l_merged_lob, LENGTH('</UOM>'),LENGTH(l_merged_lob)+1, '</UOM>');
3343 	ELSE
3344 		dbms_lob.write(l_merged_lob, LENGTH('<UOM/>'),LENGTH(l_merged_lob)+1, '<UOM/>');
3345 	END IF;
3346 
3347 	IF (l_counter_value IS NOT NULL) THEN
3348 		dbms_lob.write(l_merged_lob, LENGTH('<LastAccomplishmentValue>'),LENGTH(l_merged_lob)+1, '<LastAccomplishmentValue>');
3349 		dbms_lob.write(l_merged_lob, LENGTH(l_counter_value),LENGTH(l_merged_lob)+1, l_counter_value);
3350 		dbms_lob.write(l_merged_lob, LENGTH('</LastAccomplishmentValue>'),LENGTH(l_merged_lob)+1, '</LastAccomplishmentValue>');
3351 	ELSE
3352 		dbms_lob.write(l_merged_lob, LENGTH('<LastAccomplishmentValue/>'),LENGTH(l_merged_lob)+1, '<LastAccomplishmentValue/>');
3353 	END IF;
3354 	IF (get_mr_details_rec.IntervalValue IS NOT NULL) THEN
3355 		dbms_lob.write(l_merged_lob, LENGTH('<IntervalValue>'),LENGTH(l_merged_lob)+1, '<IntervalValue>');
3356 		dbms_lob.write(l_merged_lob, LENGTH(get_mr_details_rec.IntervalValue),LENGTH(l_merged_lob)+1, get_mr_details_rec.IntervalValue);
3357 		dbms_lob.write(l_merged_lob, LENGTH('</IntervalValue>'),LENGTH(l_merged_lob)+1, '</IntervalValue>');
3358 	ELSE
3359 		dbms_lob.write(l_merged_lob, LENGTH('<IntervalValue/>'),LENGTH(l_merged_lob)+1, '<IntervalValue/>');
3360 	END IF;
3361 	IF (get_mr_details_rec.StartValue IS NOT NULL) THEN
3362 		dbms_lob.write(l_merged_lob, LENGTH('<StartValue>'),LENGTH(l_merged_lob)+1, '<StartValue>');
3363 		dbms_lob.write(l_merged_lob, LENGTH(get_mr_details_rec.StartValue),LENGTH(l_merged_lob)+1, get_mr_details_rec.StartValue);
3364 		dbms_lob.write(l_merged_lob, LENGTH('</StartValue>'),LENGTH(l_merged_lob)+1, '</StartValue>');
3365 	ELSE
3366 		dbms_lob.write(l_merged_lob, LENGTH('<StartValue/>'),LENGTH(l_merged_lob)+1, '<StartValue/>');
3367 	END IF;
3368 	IF (get_mr_details_rec.StartDate IS NOT NULL) THEN
3369 		dbms_lob.write(l_merged_lob, LENGTH('<StartDate>'),LENGTH(l_merged_lob)+1, '<StartDate>');
3370 		dbms_lob.write(l_merged_lob, LENGTH(get_mr_details_rec.StartDate),LENGTH(l_merged_lob)+1, get_mr_details_rec.StartDate);
3371 		dbms_lob.write(l_merged_lob, LENGTH('</StartDate>'),LENGTH(l_merged_lob)+1, '</StartDate>');
3372 	ELSE
3373 		dbms_lob.write(l_merged_lob, LENGTH('<StartDate/>'),LENGTH(l_merged_lob)+1, '<StartDate/>');
3374 	END IF;
3375 
3376 	IF (l_unit_eff_id IS NOT NULL) THEN
3377 	IF (l_accomplishment_date IS NOT NULL) THEN
3378 		dbms_lob.write(l_merged_lob, LENGTH('<LastAccomplishmentDate>'),LENGTH(l_merged_lob)+1, '<LastAccomplishmentDate>');
3379 		dbms_lob.write(l_merged_lob, LENGTH(l_accomplishment_date),LENGTH(l_merged_lob)+1, l_accomplishment_date);
3380 		dbms_lob.write(l_merged_lob, LENGTH('</LastAccomplishmentDate>'),LENGTH(l_merged_lob)+1, '</LastAccomplishmentDate>');
3381 	ELSE
3382 		dbms_lob.write(l_merged_lob, LENGTH('<LastAccomplishmentDate/>'),LENGTH(l_merged_lob)+1, '<LastAccomplishmentDate/>');
3383 	END IF;
3384 	END IF;
3385 
3386 	context := dbms_xmlgen.newContext(l_mr_doc_details);
3387 		  --DBMS_XMLGEN.setbindvalue (context, '1', l_ue_id);
3388 		  DBMS_XMLGEN.setbindvalue (context, '1', get_mr_details_rec.mr_header_id);
3389 		  dbms_xmlgen.setRowsetTag(context, 'AssociatedDocuments');
3390 		  dbms_xmlgen.setRowTag(context,'AssociatedDocument');
3391 		  dbms_xmlgen.setConvertSpecialChars(context, TRUE);
3392 		  DBMS_XMLGEN.setNullHandling(context, 2);
3393 		  l_mr_doc_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
3394 		  dbms_xmlgen.closeContext(context);
3395 		  -- Write to lob only when some data exists.
3396 		  IF dbms_lob.getlength(l_mr_doc_lob) > 0
3397 		  THEN
3398 		     l_offset := dbms_lob.INSTR(l_mr_doc_lob, '>');
3399 
3400 		     dbms_lob.copy(l_merged_lob, l_mr_doc_lob, dbms_lob.getlength(l_mr_doc_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
3401 
3402 		  END IF;
3403 
3404 	END IF; -- get_mr_details_csr%FOUND
3405   CLOSE get_mr_details_csr;
3406 --END IF;
3407 
3408 	IF (l_log_statement >= l_log_current_level) THEN
3409 	    fnd_log.string (
3410 	      l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Checkpoint 1');
3411 	END IF;
3412 
3413 /** NrPackage    =====  NRDetailsType  **/
3414 
3415    OPEN nr_details_csr(l_ue_id);
3416    FETCH nr_details_csr INTO  nr_details_rec;
3417 
3418    IF (nr_details_csr%FOUND) THEN
3419 
3420 		dbms_lob.write(l_merged_lob, LENGTH('<NrPackage>'),LENGTH(l_merged_lob)+1, '<NrPackage>');
3421 		l_nr_flag := 'Y';
3422 		dbms_lob.write(l_merged_lob, LENGTH('<UnitEffectivityId>'),LENGTH(l_merged_lob)+1, '<UnitEffectivityId>');
3423 		dbms_lob.write(l_merged_lob, LENGTH(nr_details_rec.UNIT_EFFECTIVITY_ID),LENGTH(l_merged_lob)+1, nr_details_rec.UNIT_EFFECTIVITY_ID);
3424 		dbms_lob.write(l_merged_lob, LENGTH('</UnitEffectivityId>'),LENGTH(l_merged_lob)+1, '</UnitEffectivityId>');
3425 	IF (nr_details_rec.RELEASE_DATE IS NOT NULL) THEN
3426 		dbms_lob.write(l_merged_lob, LENGTH('<ReleaseDate>'),LENGTH(l_merged_lob)+1, '<ReleaseDate>');
3427 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.RELEASE_DATE);
3428 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3429 		dbms_lob.write(l_merged_lob, LENGTH('</ReleaseDate>'),LENGTH(l_merged_lob)+1, '</ReleaseDate>');
3430 	ELSE
3431 		dbms_lob.write(l_merged_lob, LENGTH('<ReleaseDate/>'),LENGTH(l_merged_lob)+1, '<ReleaseDate/>');
3432 	END IF;
3433 	IF (nr_details_rec.TITLE IS NOT NULL) THEN
3434 		dbms_lob.write(l_merged_lob, LENGTH('<Title>'),LENGTH(l_merged_lob)+1, '<Title>');
3435 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.TITLE);
3436 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3437 		dbms_lob.write(l_merged_lob, LENGTH('</Title>'),LENGTH(l_merged_lob)+1, '</Title>');
3438 	ELSE
3439 		dbms_lob.write(l_merged_lob, LENGTH('<Title/>'),LENGTH(l_merged_lob)+1, '<Title/>');
3440 	END IF;
3441 	IF (nr_details_rec.NAME IS NOT NULL) THEN
3442 		dbms_lob.write(l_merged_lob, LENGTH('<NonRoutineType>'),LENGTH(l_merged_lob)+1, '<NonRoutineType>');
3443 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.NAME);
3444 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3445 		dbms_lob.write(l_merged_lob, LENGTH('</NonRoutineType>'),LENGTH(l_merged_lob)+1, '</NonRoutineType>');
3446 	ELSE
3447 		dbms_lob.write(l_merged_lob, LENGTH('<NonRoutineType/>'),LENGTH(l_merged_lob)+1, '<NonRoutineType/>');
3448 	END IF;
3449 	IF (nr_details_rec.FLIGHT_NUMBER IS NOT NULL) THEN
3450 		dbms_lob.write(l_merged_lob, LENGTH('<FlightNumber>'),LENGTH(l_merged_lob)+1, '<FlightNumber>');
3451 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.FLIGHT_NUMBER);
3452 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3453 		dbms_lob.write(l_merged_lob, LENGTH('</FlightNumber>'),LENGTH(l_merged_lob)+1, '</FlightNumber>');
3454 	ELSE
3455 		dbms_lob.write(l_merged_lob, LENGTH('<FlightNumber/>'),LENGTH(l_merged_lob)+1, '<FlightNumber/>');
3456 	END IF;
3457 	IF (nr_details_rec.UE_LOG_SERIES IS NOT NULL) THEN
3458 		dbms_lob.write(l_merged_lob, LENGTH('<LogSeries>'),LENGTH(l_merged_lob)+1, '<LogSeries>');
3459 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_LOG_SERIES);
3460 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3461 		dbms_lob.write(l_merged_lob, LENGTH('</LogSeries>'),LENGTH(l_merged_lob)+1, '</LogSeries>');
3462 	ELSE
3463 		dbms_lob.write(l_merged_lob, LENGTH('<LogSeries/>'),LENGTH(l_merged_lob)+1, '<LogSeries/>');
3464 	END IF;
3465 	IF (nr_details_rec.LOG_NUMBER IS NOT NULL) THEN
3466 		dbms_lob.write(l_merged_lob, LENGTH('<LogNumber>'),LENGTH(l_merged_lob)+1, '<LogNumber>');
3467 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.LOG_NUMBER);
3468 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3469 		dbms_lob.write(l_merged_lob, LENGTH('</LogNumber>'),LENGTH(l_merged_lob)+1, '</LogNumber>');
3470 	ELSE
3471 		dbms_lob.write(l_merged_lob, LENGTH('<LogNumber/>'),LENGTH(l_merged_lob)+1, '<LogNumber/>');
3472 	END IF;
3473 	IF (nr_details_rec.UE_ITEM_NUMBER IS NOT NULL) THEN
3474 		dbms_lob.write(l_merged_lob, LENGTH('<Item>'),LENGTH(l_merged_lob)+1, '<Item>');
3475 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_ITEM_NUMBER);
3476 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3477 		dbms_lob.write(l_merged_lob, LENGTH('</Item>'),LENGTH(l_merged_lob)+1, '</Item>');
3478 	ELSE
3479 		dbms_lob.write(l_merged_lob, LENGTH('<Item/>'),LENGTH(l_merged_lob)+1, '<Item/>');
3480 	END IF;
3481 	IF (nr_details_rec.UE_SERIAL_NUMBER IS NOT NULL) THEN
3482 		dbms_lob.write(l_merged_lob, LENGTH('<SerialNumber>'),LENGTH(l_merged_lob)+1, '<SerialNumber>');
3483 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_SERIAL_NUMBER);
3484 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3485 		dbms_lob.write(l_merged_lob, LENGTH('</SerialNumber>'),LENGTH(l_merged_lob)+1, '</SerialNumber>');
3486 	ELSE
3487 		dbms_lob.write(l_merged_lob, LENGTH('<SerialNumber/>'),LENGTH(l_merged_lob)+1, '<SerialNumber/>');
3488 	END IF;
3489 	IF (nr_details_rec.UE_STATUS IS NOT NULL) THEN
3490 		dbms_lob.write(l_merged_lob, LENGTH('<Status>'),LENGTH(l_merged_lob)+1, '<Status>');
3491 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_STATUS);
3492 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3493 		dbms_lob.write(l_merged_lob, LENGTH('</Status>'),LENGTH(l_merged_lob)+1, '</Status>');
3494 	ELSE
3495 		dbms_lob.write(l_merged_lob, LENGTH('<Status/>'),LENGTH(l_merged_lob)+1, '<Status/>');
3496 	END IF;
3497 	IF (nr_details_rec.CREATION_DATE IS NOT NULL) THEN
3498 		dbms_lob.write(l_merged_lob, LENGTH('<RequestDate>'),LENGTH(l_merged_lob)+1, '<RequestDate>');
3499 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.CREATION_DATE);
3500 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3501 		dbms_lob.write(l_merged_lob, LENGTH('</RequestDate>'),LENGTH(l_merged_lob)+1, '</RequestDate>');
3502 	ELSE
3503 		dbms_lob.write(l_merged_lob, LENGTH('<RequestDate/>'),LENGTH(l_merged_lob)+1, '<RequestDate/>');
3504 	END IF;
3505 	IF (nr_details_rec.INCIDENT_OCCURRED_DATE IS NOT NULL) THEN
3506 		dbms_lob.write(l_merged_lob, LENGTH('<IncidentDate>'),LENGTH(l_merged_lob)+1, '<IncidentDate>');
3507 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.INCIDENT_OCCURRED_DATE);
3508 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3509 		dbms_lob.write(l_merged_lob, LENGTH('</IncidentDate>'),LENGTH(l_merged_lob)+1, '</IncidentDate>');
3510 	ELSE
3511 		dbms_lob.write(l_merged_lob, LENGTH('<IncidentDate/>'),LENGTH(l_merged_lob)+1, '<IncidentDate/>');
3512 	END IF;
3513 	IF (nr_details_rec.WORKORDER_NAME IS NOT NULL) THEN
3514 		dbms_lob.write(l_merged_lob, LENGTH('<WorkorderNo>'),LENGTH(l_merged_lob)+1, '<WorkorderNo>');
3515 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.WORKORDER_NAME);
3516 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3517 		dbms_lob.write(l_merged_lob, LENGTH('</WorkorderNo>'),LENGTH(l_merged_lob)+1, '</WorkorderNo>');
3518 	ELSE
3519 		dbms_lob.write(l_merged_lob, LENGTH('<WorkorderNo/>'),LENGTH(l_merged_lob)+1, '<WorkorderNo/>');
3520 	END IF;
3521 	IF (nr_details_rec.SR_CUSTOMER_NAME IS NOT NULL) THEN
3522 		dbms_lob.write(l_merged_lob, LENGTH('<Customer>'),LENGTH(l_merged_lob)+1, '<Customer>');
3523 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.SR_CUSTOMER_NAME);
3524 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3525 		dbms_lob.write(l_merged_lob, LENGTH('</Customer>'),LENGTH(l_merged_lob)+1, '</Customer>');
3526 	ELSE
3527 		dbms_lob.write(l_merged_lob, LENGTH('<Customer/>'),LENGTH(l_merged_lob)+1, '<Customer/>');
3528 	END IF;
3529 	IF (nr_details_rec.SR_CONTACT_NAME IS NOT NULL) THEN
3530 		dbms_lob.write(l_merged_lob, LENGTH('<Contact>'),LENGTH(l_merged_lob)+1, '<Contact>');
3531 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.SR_CONTACT_NAME);
3532 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3533 		dbms_lob.write(l_merged_lob, LENGTH('</Contact>'),LENGTH(l_merged_lob)+1, '</Contact>');
3534 	ELSE
3535 		dbms_lob.write(l_merged_lob, LENGTH('<Contact/>'),LENGTH(l_merged_lob)+1, '<Contact/>');
3536 	END IF;
3537 	IF (nr_details_rec.PROBLEM_CODE IS NOT NULL) THEN
3538 		dbms_lob.write(l_merged_lob, LENGTH('<ProblemCode>'),LENGTH(l_merged_lob)+1, '<ProblemCode>');
3539 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.PROBLEM_CODE);
3540 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3541 		dbms_lob.write(l_merged_lob, LENGTH('</ProblemCode>'),LENGTH(l_merged_lob)+1, '</ProblemCode>');
3542 	ELSE
3543 		dbms_lob.write(l_merged_lob, LENGTH('<ProblemCode/>'),LENGTH(l_merged_lob)+1, '<ProblemCode/>');
3544 	END IF;
3545 	IF (nr_details_rec.SR_PROBLEM_SUMMARY IS NOT NULL) THEN
3546 		dbms_lob.write(l_merged_lob, LENGTH('<ProblemSummary>'),LENGTH(l_merged_lob)+1, '<ProblemSummary>');
3547 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.SR_PROBLEM_SUMMARY);
3548 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3549 		dbms_lob.write(l_merged_lob, LENGTH('</ProblemSummary>'),LENGTH(l_merged_lob)+1, '</ProblemSummary>');
3550 	ELSE
3551 		dbms_lob.write(l_merged_lob, LENGTH('<ProblemSummary/>'),LENGTH(l_merged_lob)+1, '<ProblemSummary/>');
3552 	END IF;
3553 	IF (nr_details_rec.SR_INCIDENT_SEVERITY IS NOT NULL) THEN
3554 		dbms_lob.write(l_merged_lob, LENGTH('<Severity>'),LENGTH(l_merged_lob)+1, '<Severity>');
3555 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.SR_INCIDENT_SEVERITY);
3556 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3557 		dbms_lob.write(l_merged_lob, LENGTH('</Severity>'),LENGTH(l_merged_lob)+1, '</Severity>');
3558 	ELSE
3559 		dbms_lob.write(l_merged_lob, LENGTH('<Severity/>'),LENGTH(l_merged_lob)+1, '<Severity/>');
3560 	END IF;
3561 	IF (nr_details_rec.EXPECTED_RESOLUTION_DATE IS NOT NULL) THEN
3562 		dbms_lob.write(l_merged_lob, LENGTH('<ResolveByDate>'),LENGTH(l_merged_lob)+1, '<ResolveByDate>');
3563 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.EXPECTED_RESOLUTION_DATE);
3564 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3565 		dbms_lob.write(l_merged_lob, LENGTH('</ResolveByDate>'),LENGTH(l_merged_lob)+1, '</ResolveByDate>');
3566 	ELSE
3567 		dbms_lob.write(l_merged_lob, LENGTH('<ResolveByDate/>'),LENGTH(l_merged_lob)+1, '<ResolveByDate/>');
3568 	END IF;
3569 	IF (nr_details_rec.RESOLUTION_CODE IS NOT NULL) THEN
3570 		dbms_lob.write(l_merged_lob, LENGTH('<ResolutionCode>'),LENGTH(l_merged_lob)+1, '<ResolutionCode>');
3571 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.RESOLUTION_CODE);
3572 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3573 		dbms_lob.write(l_merged_lob, LENGTH('</ResolutionCode>'),LENGTH(l_merged_lob)+1, '</ResolutionCode>');
3574 	ELSE
3575 		dbms_lob.write(l_merged_lob, LENGTH('<ResolutionCode/>'),LENGTH(l_merged_lob)+1, '<ResolutionCode/>');
3576 	END IF;
3577 	IF (nr_details_rec.UE_ATA_MEANING IS NOT NULL) THEN
3578 		dbms_lob.write(l_merged_lob, LENGTH('<PositionATA>'),LENGTH(l_merged_lob)+1, '<PositionATA>');
3579 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_ATA_MEANING);
3580 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3581 		dbms_lob.write(l_merged_lob, LENGTH('</PositionATA>'),LENGTH(l_merged_lob)+1, '</PositionATA>');
3582 	ELSE
3583 		dbms_lob.write(l_merged_lob, LENGTH('<PositionATA/>'),LENGTH(l_merged_lob)+1, '<PositionATA/>');
3584 	END IF;
3585 	IF (nr_details_rec.UE_ATA_DESC IS NOT NULL) THEN
3586 		dbms_lob.write(l_merged_lob, LENGTH('<AtaDesc>'),LENGTH(l_merged_lob)+1, '<AtaDesc>');
3587 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_ATA_DESC);
3588 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3589 		dbms_lob.write(l_merged_lob, LENGTH('</AtaDesc>'),LENGTH(l_merged_lob)+1, '</AtaDesc>');
3590 	ELSE
3591 		dbms_lob.write(l_merged_lob, LENGTH('<AtaDesc/>'),LENGTH(l_merged_lob)+1, '<AtaDesc/>');
3592 	END IF;
3593 	IF (nr_details_rec.UE_MEL_CDL_TYPE IS NOT NULL) THEN
3594 		dbms_lob.write(l_merged_lob, LENGTH('<MelCdlType>'),LENGTH(l_merged_lob)+1, '<MelCdlType>');
3595 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_MEL_CDL_TYPE);
3596 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3597 		dbms_lob.write(l_merged_lob, LENGTH('</MelCdlType>'),LENGTH(l_merged_lob)+1, '</MelCdlType>');
3598 	ELSE
3599 		dbms_lob.write(l_merged_lob, LENGTH('<MelCdlType/>'),LENGTH(l_merged_lob)+1, '<MelCdlType/>');
3600 	END IF;
3601 	IF (nr_details_rec.UE_MEL_CDL_STATUS IS NOT NULL) THEN
3602 		dbms_lob.write(l_merged_lob, LENGTH('<MelCdlStatus>'),LENGTH(l_merged_lob)+1, '<MelCdlStatus>');
3603 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_MEL_CDL_STATUS);
3604 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3605 		dbms_lob.write(l_merged_lob, LENGTH('</MelCdlStatus>'),LENGTH(l_merged_lob)+1, '</MelCdlStatus>');
3606 	ELSE
3607 		dbms_lob.write(l_merged_lob, LENGTH('<MelCdlStatus/>'),LENGTH(l_merged_lob)+1, '<MelCdlStatus/>');
3608 	END IF;
3609 	IF (nr_details_rec.UE_ATA_PC_NODE_NAME IS NOT NULL) THEN
3610 		dbms_lob.write(l_merged_lob, LENGTH('<PcNode>'),LENGTH(l_merged_lob)+1, '<PcNode>');
3611 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_ATA_PC_NODE_NAME);
3612 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3613 		dbms_lob.write(l_merged_lob, LENGTH('</PcNode>'),LENGTH(l_merged_lob)+1, '</PcNode>');
3614 	ELSE
3615 		dbms_lob.write(l_merged_lob, LENGTH('<PcNode/>'),LENGTH(l_merged_lob)+1, '<PcNode/>');
3616 	END IF;
3617 	IF (nr_details_rec.UE_ATA_HEADER_REVISION IS NOT NULL) THEN
3618 		dbms_lob.write(l_merged_lob, LENGTH('<RevNo>'),LENGTH(l_merged_lob)+1, '<RevNo>');
3619 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_ATA_HEADER_REVISION);
3620 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3621 		dbms_lob.write(l_merged_lob, LENGTH('</RevNo>'),LENGTH(l_merged_lob)+1, '</RevNo>');
3622 	ELSE
3623 		dbms_lob.write(l_merged_lob, LENGTH('<RevNo/>'),LENGTH(l_merged_lob)+1, '<RevNo/>');
3624 	END IF;
3625 	IF (nr_details_rec.UE_ATA_REPAIR_CATEGORY IS NOT NULL) THEN
3626 		dbms_lob.write(l_merged_lob, LENGTH('<RepairCategory>'),LENGTH(l_merged_lob)+1, '<RepairCategory>');
3627 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_ATA_REPAIR_CATEGORY);
3628 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3629 		dbms_lob.write(l_merged_lob, LENGTH('</RepairCategory>'),LENGTH(l_merged_lob)+1, '</RepairCategory>');
3630 	ELSE
3631 		dbms_lob.write(l_merged_lob, LENGTH('<RepairCategory/>'),LENGTH(l_merged_lob)+1, '<RepairCategory/>');
3632 	END IF;
3633 	IF (nr_details_rec.DUE_DATE IS NOT NULL) THEN
3634 		dbms_lob.write(l_merged_lob, LENGTH('<DueDate>'),LENGTH(l_merged_lob)+1, '<DueDate>');
3635 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.DUE_DATE);
3636 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3637 		dbms_lob.write(l_merged_lob, LENGTH('</DueDate>'),LENGTH(l_merged_lob)+1, '</DueDate>');
3638 	ELSE
3639 		dbms_lob.write(l_merged_lob, LENGTH('<DueDate/>'),LENGTH(l_merged_lob)+1, '<DueDate/>');
3640 	END IF;
3641 	IF (nr_details_rec.UE_ATA_REPAIR_TIME IS NOT NULL) THEN
3642 		dbms_lob.write(l_merged_lob, LENGTH('<RepairTime>'),LENGTH(l_merged_lob)+1, '<RepairTime>');
3643 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_ATA_REPAIR_TIME);
3644 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3645 		dbms_lob.write(l_merged_lob, LENGTH('</RepairTime>'),LENGTH(l_merged_lob)+1, '</RepairTime>');
3646 	ELSE
3647 		dbms_lob.write(l_merged_lob, LENGTH('<RepairTime/>'),LENGTH(l_merged_lob)+1, '<RepairTime/>');
3648 	END IF;
3649 	IF (nr_details_rec.UE_ATA_REMARKS IS NOT NULL) THEN
3650 		dbms_lob.write(l_merged_lob, LENGTH('<Remarks>'),LENGTH(l_merged_lob)+1, '<Remarks>');
3651 		dummy := DBMS_XMLGEN.CONVERT(nr_details_rec.UE_ATA_REMARKS);
3652 		dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3653 		dbms_lob.write(l_merged_lob, LENGTH('</Remarks>'),LENGTH(l_merged_lob)+1, '</Remarks>');
3654 	ELSE
3655 		dbms_lob.write(l_merged_lob, LENGTH('<Remarks/>'),LENGTH(l_merged_lob)+1, '<Remarks/>');
3656 	END IF;
3657 
3658 	END IF;
3659   CLOSE nr_details_csr;
3660 
3661   IF (p_object_type = 'VST')THEN
3662         BEGIN
3663            SELECT workorder_id
3664            INTO   l_wo_id
3665            FROM   ahl_workorders
3666            WHERE  visit_task_id IS NULL
3667            AND    visit_id  = p_object_id;
3668 
3669            SELECT  UC.UNIT_CONFIG_HEADER_ID, UC.NAME, VST.item_instance_id
3670            INTO    l_uc_id, l_unit_name, l_count_instance_id
3671            FROM    AHL_VISITS_B VST, AHL_UNIT_CONFIG_HEADERS UC
3672            WHERE   UC.CSI_ITEM_INSTANCE_ID(+) = VST.ITEM_INSTANCE_ID
3673            AND     VST.VISIT_ID = p_object_id;
3674 
3675         EXCEPTION
3676            WHEN OTHERS THEN
3677              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3678         END;
3679 
3680   ELSIF (p_object_type = 'WO') THEN
3681         l_wo_id     := p_object_id;
3682         l_uc_id     := AHL_PRD_PARTS_CHANGE_PVT.Get_UnitConfig_ID(l_wo_id);
3683         SELECT VT.instance_id
3684         INTO   l_count_instance_id
3685         FROM   ahl_workorders WO,
3686                ahl_visit_tasks_b VT
3687         WHERE  WO.visit_task_id = VT.visit_task_id
3688         AND    WO.workorder_id  = l_wo_id;
3689 
3690   ELSIF (p_object_type = 'MR' OR p_object_type = 'NR')THEN
3691         SELECT WO.workorder_id, VT.INSTANCE_ID
3692         INTO   l_wo_id, l_count_instance_id
3693         FROM   ahl_workorders WO,
3694                ahl_visit_tasks_b vt
3695         WHERE  wo.visit_task_id       = vt.visit_task_id
3696         AND    vt.task_type_code      = 'SUMMARY'
3697         AND    vt.UNIT_EFFECTIVITY_ID = p_object_id ;
3698 
3699         l_uc_id := AHL_PRD_PARTS_CHANGE_PVT.Get_UnitConfig_ID(l_wo_id);
3700 
3701   END IF;
3702   IF (l_log_statement >= l_log_current_level)THEN
3703         fnd_log.string ( l_log_statement, 'ahl.plsql.'
3704         ||g_pkg_name
3705         ||'.'
3706         ||l_api_name ,'Checkpoint 2 : l_uc_id : '
3707         || l_uc_id);
3708   END IF;
3709 
3710   IF (l_nr_flag = 'Y' OR l_nr_flag = 'N') THEN
3711 
3712     IF (l_count_instance_id IS NOT NULL) THEN
3713         context  := dbms_xmlgen.newContext(l_counter_details);
3714         DBMS_XMLGEN.setbindvalue (context, '1', l_count_instance_id);
3715         dbms_xmlgen.setRowsetTag(context, 'ItemCounters');
3716         dbms_xmlgen.setRowTag(context,'ItemCounter');
3717         dbms_xmlgen.setConvertSpecialChars(context, TRUE);
3718         DBMS_XMLGEN.setNullHandling(context, 2);
3719         l_counter_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
3720         dbms_xmlgen.closeContext(context);
3721         -- Write to lob only when some data exists.
3722         IF dbms_lob.getlength(l_counter_lob) > 0 THEN
3723                 l_offset                    := dbms_lob.INSTR(l_counter_lob, '>');
3724                 -- copy workorder details into final lob
3725                 dbms_lob.copy(l_merged_lob, l_counter_lob, dbms_lob.getlength(l_counter_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
3726         END IF;
3727     END IF;
3728 
3729     IF (l_wo_id_tbl.COUNT <> 0) THEN
3730       Get_job_card_det (l_merged_lob => l_merged_lob,
3731                         l_wo_id_tbl => l_wo_id_tbl,
3732                         x_return_status => l_return_status);
3733     END IF;
3734   END IF;
3735 
3736   IF (l_nr_flag = 'N') THEN
3737 	   OPEN mr_child_details_csr(l_ue_id);
3738 	   LOOP
3739 		   FETCH mr_child_details_csr INTO mr_child_details_rec;
3740 		   EXIT WHEN mr_child_details_csr%NOTFOUND;
3741 		  dbms_lob.write(l_merged_lob, LENGTH('<ChildMR>'),LENGTH(l_merged_lob)+1, '<ChildMR>');
3742 		  IF (mr_child_details_rec.Unit_Effectivity_Id IS NOT NULL) THEN
3743 			dbms_lob.write(l_merged_lob, LENGTH('<UnitEffectivityId>'),LENGTH(l_merged_lob)+1, '<UnitEffectivityId>');
3744 			dummy := DBMS_XMLGEN.CONVERT(mr_child_details_rec.Unit_Effectivity_Id);
3745 			dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3746 			dbms_lob.write(l_merged_lob, LENGTH('</UnitEffectivityId>'),LENGTH(l_merged_lob)+1, '</UnitEffectivityId>');
3747 		  END IF;
3748 		  IF (mr_child_details_rec.Title IS NOT NULL) THEN
3749 			dbms_lob.write(l_merged_lob, LENGTH('<Title>'),LENGTH(l_merged_lob)+1, '<Title>');
3750 			dummy := DBMS_XMLGEN.CONVERT(mr_child_details_rec.Title);
3751 			dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3752 			dbms_lob.write(l_merged_lob, LENGTH('</Title>'),LENGTH(l_merged_lob)+1, '</Title>');
3753 		  END IF;
3754 		  dbms_lob.write(l_merged_lob, LENGTH('</ChildMR>'),LENGTH(l_merged_lob)+1, '</ChildMR>');
3755 	   END LOOP;
3756 	   CLOSE mr_child_details_csr;
3757 
3758    ELSIF (l_nr_flag = 'Y') THEN
3759 	 OPEN nr_mr_details_csr(nr_details_rec.INCIDENT_ID);
3760 	 LOOP
3761 		 FETCH nr_mr_details_csr INTO nr_mr_details_rec;
3762 		 EXIT WHEN nr_mr_details_csr%NOTFOUND;
3763 		  dbms_lob.write(l_merged_lob, LENGTH('<ChildMR>'),LENGTH(l_merged_lob)+1, '<ChildMR>');
3764 		  IF (nr_mr_details_rec.Unit_Effectivity_Id IS NOT NULL) THEN
3765 			dbms_lob.write(l_merged_lob, LENGTH('<UnitEffectivityId>'),LENGTH(l_merged_lob)+1, '<UnitEffectivityId>');
3766 			dummy := DBMS_XMLGEN.CONVERT(nr_mr_details_rec.Unit_Effectivity_Id);
3767 			dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3768 			dbms_lob.write(l_merged_lob, LENGTH('</UnitEffectivityId>'),LENGTH(l_merged_lob)+1, '</UnitEffectivityId>');
3769 		  END IF;
3770 		  IF (nr_mr_details_rec.Title IS NOT NULL) THEN
3771 			dbms_lob.write(l_merged_lob, LENGTH('<Title>'),LENGTH(l_merged_lob)+1, '<Title>');
3772 			dummy := DBMS_XMLGEN.CONVERT(nr_mr_details_rec.Title);
3773 			dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
3774 			dbms_lob.write(l_merged_lob, LENGTH('</Title>'),LENGTH(l_merged_lob)+1, '</Title>');
3775 		  END IF;
3776 		  dbms_lob.write(l_merged_lob, LENGTH('</ChildMR>'),LENGTH(l_merged_lob)+1, '</ChildMR>');
3777 	 END LOOP;
3778 	 CLOSE nr_mr_details_csr;
3779    END IF;
3780 
3781   IF(l_nr_flag = 'N') THEN
3782     dbms_lob.write(l_merged_lob, length('</MrPackage>'),length(l_merged_lob)+1, '</MrPackage>');
3783   ELSIF(l_nr_flag = 'Y') THEN
3784     dbms_lob.write(l_merged_lob, length('</NrPackage>'),length(l_merged_lob)+1, '</NrPackage>');
3785   END IF;
3786 
3787 END LOOP;
3788 END IF;
3789 
3790 IF (p_object_type = 'VST') THEN
3791   BEGIN
3792     SELECT wo.workorder_id
3793     BULK COLLECT INTO   l_wo_id_tbl
3794     FROM   ahl_workorders wo,
3795            ahl_visit_tasks_b vt
3796     WHERE  wo.visit_task_id = vt.visit_task_id
3797     AND    vt.task_type_code = 'UNASSOCIATED'
3798     AND    wo.status_code NOT IN ('7','12','14','15','17','22')
3799     AND    vt.visit_id      = l_visit_id;
3800   END;
3801 
3802   IF (l_wo_id_tbl.COUNT <> 0) THEN
3803     Get_job_card_det (l_merged_lob => l_merged_lob,
3804                       l_wo_id_tbl => l_wo_id_tbl,
3805                       x_return_status => l_return_status);
3806   END IF;
3807 END IF;
3808 
3809 IF (p_object_type = 'WO') THEN
3810   BEGIN
3811     SELECT vt.task_type_code
3812     INTO   l_task_type
3813     FROM   ahl_workorders wo,
3814            ahl_visit_tasks_b vt
3815     WHERE  wo.visit_task_id = vt.visit_task_id
3816     AND    wo.workorder_id = l_wo_id_tbl(1);
3817   END;
3818 
3819   IF (l_task_type = 'UNASSOCIATED') THEN
3820       Get_job_card_det (l_merged_lob => l_merged_lob,
3821                       l_wo_id_tbl => l_wo_id_tbl,
3822                       x_return_status => l_return_status);
3823   END IF;
3824 END IF;
3825   dbms_lob.write(l_merged_lob, length('</WorkPackage>'),length(l_merged_lob)+1, '</WorkPackage>');
3826 
3827 dbms_lob.close( l_merged_lob );
3828 IF (l_log_statement >= l_log_current_level)THEN
3829     fnd_log.string (
3830       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3831       'Checkpoint 20:  Done creating LOB ');
3832 END IF;
3833 
3834 -- Writing the file before transformation only if logging is enabled.
3835 IF (l_log_statement >= l_log_current_level)THEN
3836   fnd_log.string (
3837       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3838       'Writing ORIG file ');
3839   DBMS_XSLPROCESSOR.CLOB2FILE(l_merged_lob,p_dir,'ORIG-' || x_file_name);
3840   fnd_log.string (
3841       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3842       'Done Writing ORIG file ');
3843 END IF;
3844 
3845 --  dbms_lob.freeTemporary( l_merged_lob );
3846 
3847   --post user hook api call
3848 
3849 IF (JTF_USR_HKS.Ok_to_execute('AHL_PRD_PRINT_PVT', 'GENERATE_JCG_XML', 'A', 'C' )) then
3850   -- start to create file
3851   -- DBMS_XSLPROCESSOR.CLOB2FILE(l_merged_lob,p_dir,'ORIG-' || x_file_name);
3852   -- call customer hook here
3853   -- end to create file
3854   IF (l_log_statement >= l_log_current_level)THEN
3855     fnd_log.string (
3856       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3857       'Invoking post hook ');
3858   END IF;
3859   ahl_prd_print_CUHK.GENERATE_JCG_XML_post(
3860         p_object_type => p_object_type,
3861         p_object_id => p_object_id,
3862         p_split_flag => p_split_flag,
3863         p_ahl_wrkpkg_xml => l_merged_lob,
3864         p_jcg_wrkpkg_location => p_dir,
3865         x_jcg_wrkpkg_file => x_file_name,
3866         x_msg_count => l_msg_count,
3867         x_msg_data => l_msg_data,
3868         x_return_status => l_return_status);
3869 
3870   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
3871     fnd_log.string
3872     (
3873       fnd_log.level_statement,
3874       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3875       'after call to ahl_prd_print_CUHK.GENERATE_JCG_XML_post:l_return_status:' || l_return_status);
3876     fnd_log.string
3877     (
3878       fnd_log.level_statement,
3879       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3880       'p_jcg_wrkpkg_location:x_jcg_wrkpkg_file:' || p_dir || ':' || x_file_name);
3881   END IF;
3882 
3883   IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3884         RAISE FND_API.G_EXC_ERROR;
3885   ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3886         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3887   END IF;
3888 
3889   IF (x_file_name IS NULL) THEN
3890      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3891   END IF;
3892 
3893 ELSE
3894      -- user hook is not enabled .. apply transformation and write file
3895      IF (l_log_statement >= l_log_current_level)THEN
3896       fnd_log.string (
3897         l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3898         'hook not enabled - applying transformation');
3899      END IF;
3900      APPLY_TRANSFORMATION(
3901        p_indoc                     => l_merged_lob,
3902        p_xsl_doc                   => get_xsl_clob,
3903        p_xml_output_dir            => p_dir,
3904        p_xml_output_filename       => x_file_name,
3905        x_msg_count                 => l_msg_count,
3906        x_msg_data                  => l_msg_data,
3907        x_return_status => l_return_status
3908      );
3909      IF (l_log_statement >= l_log_current_level)THEN
3910       fnd_log.string (
3911         l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3912         'Applied transformation - l_return_status : ' || l_return_status);
3913       fnd_log.string (
3914         l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3915         'Applied transformation - l_msg_data : ' || l_msg_data);
3916      END IF;
3917      IF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
3918         RAISE FND_API.G_EXC_ERROR;
3919      ELSIF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3920         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3921      END IF;
3922 
3923 END IF;
3924 
3925 /*
3926 EXCEPTION
3927 WHEN FND_API.G_EXC_ERROR THEN
3928         x_return_status := FND_API.G_RET_STS_ERROR;
3929         Rollback to Generate_JCG_XML_PVT;
3930         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
3931         p_data  => x_msg_data,
3932         p_encoded => fnd_api.g_false);
3933         IF (l_log_unexpected >= l_log_current_level)THEN
3934          fnd_log.string(
3935          l_log_unexpected,
3936          'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3937          'Standard Error : x_msg_count : '|| x_msg_count || ': x_msg_data : ' || x_msg_data
3938           );
3939 	      END IF;
3940 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3941         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3942         Rollback to Generate_JCG_XML_PVT;
3943         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
3944         p_data  => x_msg_data,
3945         p_encoded => fnd_api.g_false);
3946         IF (l_log_unexpected >= l_log_current_level)THEN
3947          fnd_log.string(
3948          l_log_unexpected,
3949          'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3950          'Unexpected Error : x_msg_count : '|| x_msg_count || ': x_msg_data : ' || x_msg_data
3951           );
3952 	      END IF;
3953 
3954 WHEN OTHERS THEN
3955         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3956 		Rollback to Generate_JCG_XML_PVT;
3957 		fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
3958         p_procedure_name => 'Generate_JCG_XML',
3959         p_error_text     => SUBSTR(SQLERRM,1,240));
3960         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
3961         p_data  => x_msg_data,
3962         p_encoded => fnd_api.g_false);
3963         IF (l_log_unexpected >= l_log_current_level)THEN
3964          fnd_log.string(
3965          l_log_unexpected,
3966          'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
3967          'Unexpected Error Others : x_msg_count : '|| x_msg_count || ': x_msg_data : ' || x_msg_data
3968           );
3969 	      END IF;
3970 */
3971 END Generate_JCG_XML;
3972 
3973 
3974 -- Start of Comments --
3975 --  Procedure name    : generate_jcg_request
3976 --  Type        : Private/called from concurrent program
3977 --  Function    : Creates Job Cards for CMRO Visits, MRs or Work Order. Prepares the XML data
3978 --                and fires the request to Enigma Web Service using Oracle Workflow Event.
3979 --  Pre-reqs    :
3980 
3981 --  generate_jcg_request Parameters :
3982 --      p_object_type - idenifier for object type i.e VISIT, MR, WORKORDER
3983 --      p_object_id   - unique key for corresponding visit id, unit_effectivity_id or work order id
3984 --      p_user_id            FND user id,
3985 --      p_resp_id              Responsibility ID
3986 
3987 PROCEDURE Generate_JCG_Request(
3988                      errbuf                 OUT NOCOPY  VARCHAR2,
3989                      retcode                OUT NOCOPY  NUMBER,
3990                      p_jcg_id               IN  NUMBER,
3991                      p_user_id              IN  NUMBER,
3992                      p_resp_id              IN  NUMBER) IS
3993 
3994   l_api_name      CONSTANT VARCHAR2(30) := 'generate_jcg_request';
3995   l_msg_count     NUMBER;
3996   l_msg_data      VARCHAR2(3000);
3997   l_return_status VARCHAR2(1);
3998 
3999   l_xml_file_name VARCHAR2(2000);
4000   l_jcg_id        NUMBER;
4001 
4002   -- workflow variables
4003   l_xmldocument varchar2(32000);
4004   -- commented as we are not going to use business events.
4005   /*l_eventdata clob;
4006   l_message varchar2(10);
4007   l_parameter_list wf_parameter_list_t := wf_parameter_list_t();*/
4008   l_conc_request_id NUMBER;
4009   -- for invocation of asynchronous BPEL process AhlJCGHandlerService
4010   soap_request varchar2(3000);
4011   soap_respond varchar2(300);
4012   http_req utl_http.req;
4013   http_resp utl_http.resp;
4014   l_bpel_process_end_point varchar2(2000);
4015 
4016   CURSOR get_jcg_details(p_jcg_id IN NUMBER) IS
4017   SELECT JCG_REQUEST_ID,OBJECT_TYPE_CODE,OBJECT_ID,SPLIT_FLAG
4018   FROM ahl_enigma_jcg_details
4019   WHERE JCG_REQUEST_ID = p_jcg_id;
4020 
4021   l_object_type_code VARCHAR2(30);
4022   l_object_id        NUMBER;
4023   l_split_flag       VARCHAR2(30);
4024   l_enigma_request_id VARCHAR2(240);
4025   l_err_update_status VARCHAR2(30);
4026 
4027 BEGIN
4028   l_conc_request_id := fnd_global.conc_request_id;
4029   fnd_file.put_line(FND_FILE.LOG,'Start time:' || to_char(sysdate, 'Month DD, YYYY HH24:MI:SS'));
4030   fnd_file.put_line(FND_FILE.LOG,'Entered AHL_PRD_PRINT_PVT.Generate_JCG_Request: cc id : ' || l_conc_request_id );
4031   fnd_file.new_line(FND_FILE.LOG,1);
4032   -- initialize return status.
4033   retcode := 0;
4034   l_return_status := FND_API.G_RET_STS_SUCCESS;
4035   fnd_global.apps_initialize(p_user_id, p_resp_id , 867/*APPLICATION ID for AHL constant */);
4036   mo_global.init('AHL');
4037 
4038   OPEN get_jcg_details(p_jcg_id);
4039   FETCH get_jcg_details INTO l_jcg_id,l_object_type_code,l_object_id,l_split_flag;
4040   IF(get_jcg_details%NOTFOUND)THEN
4041     close get_jcg_details;
4042     retcode := 1;
4043     fnd_file.put_line(fnd_file.log,'Request Identifier could not be found : p_jcg_id :  ' || p_jcg_id);
4044     fnd_file.put_line(FND_FILE.LOG,'Another user may have issued a print request for same object at a later time.');
4045     fnd_file.put_line(FND_FILE.LOG,'End time:' || to_char(sysdate, 'Month DD, YYYY HH24:MI:SS'));
4046     RETURN;
4047   END IF;
4048   CLOSE get_jcg_details;
4049   l_enigma_request_id :=to_char(l_jcg_id) ||':'|| to_char(p_user_id) || ':'||to_char(p_resp_id) ;
4050 
4051   fnd_file.put_line(FND_FILE.LOG,'Calling Generate_JCG_XML');
4052 
4053   Generate_JCG_XML
4054    (p_api_version             =>    1.0,
4055    p_init_msg_list            => FND_API.G_TRUE,
4056    --p_commit                    IN           VARCHAR2  :=FND_API.G_FALSE,
4057    p_validation_level         => FND_API.G_VALID_LEVEL_FULL,
4058    p_object_type              => l_object_type_code,
4059    p_object_id                => l_object_id,
4060    p_split_flag               => l_split_flag,
4061    x_return_status             => l_return_status,
4062    x_msg_data                  => l_msg_data,
4063    x_msg_count                 => l_msg_count ,
4064    x_file_name                 =>  l_xml_file_name
4065  --  l_merged_lob                OUT   NOCOPY CLOB -- for testing purpose only ,not required
4066    );
4067    l_msg_count := FND_MSG_PUB.Count_Msg;
4068    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)  THEN
4069                retcode := 2;  -- error based only on return status
4070    ELSIF (l_msg_count > 0 AND l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4071                retcode := 1;  -- warning based on return status + msg count
4072    END IF;
4073   fnd_file.put_line(FND_FILE.LOG,'Generate_JCG_XML l_msg_count : ' || l_msg_count);
4074   fnd_file.put_line(FND_FILE.LOG,'Generate_JCG_XML l_return_status : ' || l_return_status);
4075   fnd_file.put_line(FND_FILE.LOG,'Generate_JCG_XML retcode : ' || retcode);
4076   fnd_file.put_line(FND_FILE.LOG,'Generate_JCG_XML l_msg_data : ' || l_msg_data);
4077   fnd_file.put_line(FND_FILE.LOG,'Generate_JCG_XML l_xml_file_name : ' || l_xml_file_name);
4078   fnd_file.new_line(FND_FILE.LOG,1);
4079 
4080   IF( retcode = 2 ) THEN
4081     fnd_file.put_line(FND_FILE.LOG,'Generate_JCG_XML returned errors');
4082     RAISE FND_API.G_EXC_ERROR;
4083   END IF;
4084   fnd_file.put_line(fnd_file.log,'Calling Process_JCG_Request');
4085 
4086   OPEN get_jcg_details(p_jcg_id);
4087   FETCH get_jcg_details INTO l_jcg_id,l_object_type_code,l_object_id,l_split_flag;
4088   IF(get_jcg_details%NOTFOUND)THEN
4089     close get_jcg_details;
4090     retcode := 0;
4091     fnd_file.put_line(fnd_file.log,'Point 2: Request Identifier could not be found : p_jcg_id :  ' || p_jcg_id);
4092     fnd_file.put_line(FND_FILE.LOG,'A print request issued later than this one has completed.');
4093     fnd_file.put_line(FND_FILE.LOG,'End time:' || to_char(sysdate, 'Month DD, YYYY HH24:MI:SS'));
4094     RETURN;
4095   end if;
4096   CLOSE get_jcg_details;
4097 
4098   Process_JCG_Request(
4099     p_api_version       => 1.0,
4100     p_init_msg_list     => FND_API.G_FALSE,
4101     p_commit            => FND_API.G_FALSE,
4102     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
4103     p_default           => FND_API.G_FALSE,
4104     p_module_type       => NULL,
4105     x_return_status     => l_return_status,
4106     x_msg_data          => l_msg_data,
4107     x_msg_count         => l_msg_count ,
4108     p_operation_flag    => 'U',
4109     p_x_jcg_id          => l_jcg_id,
4110     p_object_type       => l_object_type_code,
4111     p_object_id         => l_object_id,
4112     p_status_code       => 'P',--status processing
4113     p_file_location     => NULL,
4114     p_split_flag        => l_split_flag,
4115     p_xml_data_filename => l_xml_file_name,
4116     p_error_message     => NULL,
4117     p_CONCURRENT_REQUEST_ID => l_conc_request_id --fnd_global.conc_request_id
4118    );
4119    l_msg_count := FND_MSG_PUB.Count_Msg;
4120    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)  THEN
4121                retcode := 2;  -- error based only on return status
4122    ELSIF (l_msg_count > 0 AND l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4123                retcode := 1;  -- warning based on return status + msg count
4124    END IF;
4125    fnd_file.put_line(FND_FILE.LOG,'Process_JCG_Request l_msg_count : ' || l_msg_count);
4126    fnd_file.put_line(FND_FILE.LOG,'Process_JCG_Request l_return_status : ' || l_return_status);
4127    fnd_file.put_line(FND_FILE.LOG,'Process_JCG_Request retcode : ' || retcode);
4128    fnd_file.put_line(FND_FILE.LOG,'Process_JCG_Request l_msg_data : ' || l_msg_data);
4129    fnd_file.put_line(FND_FILE.LOG,'Process_JCG_Request l_jcg_id : ' || l_jcg_id);
4130    fnd_file.new_line(FND_FILE.LOG,1);
4131 
4132   IF( retcode =2 ) THEN
4133     fnd_file.put_line(FND_FILE.LOG,'Process_JCG_Request returned errors');
4134     RAISE FND_API.G_EXC_ERROR;
4135   END IF;
4136 
4137   fnd_file.put_line(FND_FILE.LOG,'Preparing to request Enigma to print');
4138   l_xml_file_name := FND_PROFILE.VALUE('AHL_ENIGMA_JCG_XML_FILEPATH') ||'/' ||l_xml_file_name;
4139 
4140   /*l_xmldocument := '<runJobCard xmlns="http://service.sdk.webservices.enigma.com">'||
4141         '<a_WorkpackageFilePath>'|| + l_xml_file_name ||'</a_WorkpackageFilePath><a_userName>'||
4142         --'JCG'-- fnd_global.user_name
4143         fnd_global.user_name
4144         || '</a_userName></runJobCard>';
4145 
4146   fnd_file.put_line(FND_FILE.LOG,'Event Data : ' || l_xmldocument);
4147   fnd_file.new_line(FND_FILE.LOG,1);
4148 
4149   dbms_lob.createtemporary(l_eventdata, FALSE, DBMS_LOB.CALL);
4150   dbms_lob.write(l_eventdata, length(l_xmldocument), 1,
4151   l_xmldocument);
4152    -- Raise the Event with the message
4153   fnd_file.put_line(FND_FILE.LOG,'Raising event with key : ' || l_jcg_id);
4154   fnd_file.new_line(FND_FILE.LOG,1);
4155   wf_event.raise(
4156      p_event_name => 'oracle.apps.ahl.prd.EnigmaJCGEvent',
4157      p_event_key => l_enigma_request_id ,
4158      p_event_data => l_eventdata,
4159      p_parameters => l_parameter_list);
4160 
4161   l_parameter_list.DELETE;
4162   fnd_file.put_line(FND_FILE.LOG,'Done Raising event with key : ' || l_jcg_id);*/
4163 
4164   soap_request:= '<?xml version = ''1.0'' encoding = ''UTF-8''?>
4165                   <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
4166                    xmlns:ns="http://xmlns.oracle.com/AhlJCGHandlerService">
4167                    <env:Header/>
4168                    <env:Body>
4169                    <ns:runJobCard>
4170                    <ns:a_JCGRequestID>' || l_enigma_request_id ||'</ns:a_JCGRequestID>
4171                    <ns:a_WorkpackageFilePath>'|| l_xml_file_name ||'</ns:a_WorkpackageFilePath>
4172                    <ns:a_userName>' || fnd_global.user_name ||'</ns:a_userName>
4173                    </ns:runJobCard>
4174                    </env:Body>
4175                    </env:Envelope>';
4176 /* invoke BPEL process AhlTestJCGHandlerService - populate from profile*/
4177   l_bpel_process_end_point := FND_PROFILE.VALUE('AHL_ENIGMA_JCGHBPEL_EPOINT');
4178   --l_bpel_process_end_point := 'http://rws60140rems.us.oracle.com:7777/orabpel/Ebsmh0yd212domain1/AhlJCGHandlerService/1.0';
4179 
4180   fnd_file.put_line(FND_FILE.LOG,'BPEL process Address:' || l_bpel_process_end_point);
4181   fnd_file.put_line(FND_FILE.LOG,'XML file name for printing: :' || l_xml_file_name);
4182   fnd_file.put_line(FND_FILE.LOG,'initiating BPEL process:' || to_char(sysdate, 'Month DD, YYYY HH24:MI:SS'));
4183   http_req:= utl_http.begin_request( l_bpel_process_end_point, 'POST', 'HTTP/1.1');
4184   utl_http.set_header(http_req, 'Content-Type', 'text/xml');
4185   utl_http.set_header(http_req, 'Content-Length', length(soap_request));
4186   utl_http.set_header(http_req, 'SOAPAction', 'initiate');
4187   utl_http.write_text(http_req, soap_request);
4188   http_resp:= utl_http.get_response(http_req);-- do not try to read response
4189   utl_http.end_response(http_resp);
4190   fnd_file.put_line(FND_FILE.LOG,'Done initiating BPEL process:' || to_char(sysdate, 'Month DD, YYYY HH24:MI:SS'));
4191   fnd_file.new_line(FND_FILE.LOG,1);
4192   commit;
4193   fnd_file.put_line(FND_FILE.LOG,'End time:CC:' || to_char(sysdate, 'Month DD, YYYY HH24:MI:SS'));
4194 
4195 EXCEPTION
4196  WHEN FND_API.G_EXC_ERROR THEN
4197    retcode := 2;
4198    FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4199                               p_data  => l_msg_data,
4200                               p_encoded => fnd_api.g_false);
4201    errbuf := l_msg_data;
4202    l_err_update_status := HANDLE_JCG_ERRORS(l_enigma_request_id , to_char(l_conc_request_id) || ':' || l_msg_data);
4203    fnd_file.put_line(FND_FILE.LOG,'Exceptions FND_API.G_EXC_ERROR: Generate_JCG_Request returned errors ');
4204    fnd_file.put_line(FND_FILE.LOG,'Error Update Status :' || l_err_update_status);
4205    fnd_file.new_line(FND_FILE.LOG,1);
4206 
4207  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4208    retcode := 2;
4209    FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4210                                  p_data  => l_msg_data,
4211                               p_encoded => fnd_api.g_false);
4212    errbuf := l_msg_data;
4213    l_err_update_status := HANDLE_JCG_ERRORS(l_enigma_request_id , to_char(l_conc_request_id) || ':' || l_msg_data);
4214    fnd_file.put_line(FND_FILE.LOG,'Exceptions FND_API.G_EXC_UNEXPECTED_ERROR: Generate_JCG_Request returned errors ');
4215    fnd_file.put_line(FND_FILE.LOG,'Error Update Status :' || l_err_update_status);
4216    fnd_file.new_line(FND_FILE.LOG,1);
4217 
4218  WHEN OTHERS THEN
4219     retcode := 2;
4220     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
4221             p_procedure_name => 'generate_jcg_request',
4222             p_error_text     => SUBSTR(SQLERRM,1,240));
4223     FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4224             p_data  => l_msg_data,
4225             p_encoded => fnd_api.g_false);
4226     errbuf := l_msg_data;
4227     l_err_update_status := HANDLE_JCG_ERRORS(l_enigma_request_id , to_char(l_conc_request_id) || ':' || l_msg_data);
4228     fnd_file.put_line(FND_FILE.LOG,'Exceptions OTHERS: Generate_JCG_Request returned errors ');
4229     fnd_file.put_line(FND_FILE.LOG,'Error Update Status :' || l_err_update_status);
4230     fnd_file.new_line(FND_FILE.LOG,1);
4231 END generate_jcg_request;
4232 
4233 -- Start of Comments --
4234 --  Procedure name    : print_workcard
4235 --  Type        : Private
4236 --  Function    : Handles front end requests to print Job Cards for CMRO Visits, MRs or Work Order
4237 --  Pre-reqs    :
4238 --  Parameters  :
4239 --
4240 --  Standard IN  Parameters :
4241 --      p_api_version                   IN      NUMBER                Required
4242 --      p_init_msg_list                 IN      VARCHAR2     Default  FND_API.G_FALSE
4243 --      p_commit                        IN      VARCHAR2     Default  FND_API.G_FALSE
4244 --      p_validation_level              IN      NUMBER       Default  FND_API.G_VALID_LEVEL_FULL
4245 --      p_default                       IN      VARCHAR2     Default  FND_API.G_TRUE
4246 --         Based on this flag, the API will set the default attributes.
4247 --      p_module_type                   In      VARCHAR2     Default  NULL
4248 --         This will be null.
4249 --  Standard OUT Parameters :
4250 --      x_return_status                 OUT     VARCHAR2               Required
4251 --      x_msg_count                     OUT     NUMBER                 Required
4252 --      x_msg_data                      OUT     VARCHAR2               Required
4253 --
4254 --  print_workcard Parameters :
4255 --      p_object_type - idenifier for object type i.e VISIT, MR, WORKORDER
4256 --      p_object_id   - unique key for corresponding visit id, unit_effectivity_id or work order id
4257 --      p_user_id            FND user id,
4258 --      p_resp_id              Responsibility ID
4259 PROCEDURE print_workcard (
4260     p_api_version            IN            NUMBER    :=1.0,
4261     p_init_msg_list          IN            VARCHAR2  := FND_API.G_FALSE,
4262     p_commit                 IN            VARCHAR2  := FND_API.G_FALSE,
4263     p_validation_level       IN            NUMBER    := FND_API.G_VALID_LEVEL_FULL,
4264     p_default                IN            VARCHAR2  := FND_API.G_TRUE,
4265     p_module_type            IN            VARCHAR2  := NULL,
4266     x_return_status          OUT  NOCOPY   VARCHAR2,
4267     x_msg_count              OUT  NOCOPY   NUMBER,
4268     x_msg_data               OUT  NOCOPY   VARCHAR2,
4269     p_object_type            IN            VARCHAR2,
4270     p_object_id              IN            NUMBER,
4271     p_split_flag             IN             VARCHAR2  := 'N') IS
4272 
4273 l_log_current_level        NUMBER       := FND_LOG.g_current_runtime_level;
4274 l_log_statement            NUMBER       := FND_LOG.level_statement;
4275 l_log_procedure            NUMBER       := FND_LOG.level_procedure;
4276 l_log_error                NUMBER       := FND_LOG.level_error;
4277 l_log_unexpected           NUMBER       := FND_LOG.level_unexpected;
4278 
4279 l_api_version     CONSTANT NUMBER       := 1.0;
4280 l_api_name        CONSTANT VARCHAR2(30) := 'print_workcard';
4281 
4282 l_req_id        NUMBER;
4283 l_user_id       NUMBER;
4284 l_resp_id       NUMBER;
4285 
4286 l_jcg_id        NUMBER;
4287 l_msg_count     NUMBER;
4288 l_msg_data      VARCHAR2(3000);
4289 l_return_status VARCHAR2(1);
4290 
4291 
4292 BEGIN
4293   -- Standard start of API savepoint
4294   SAVEPOINT GENERATE_JCG_REQUEST_PVT;
4295 
4296   -- Standard call to check for call compatibility
4297   IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
4298                                      G_PKG_NAME) THEN
4299     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4300   END IF;
4301 
4302   -- Initialize message list if p_init_msg_list is set to TRUE
4303   IF FND_API.To_Boolean(p_init_msg_list) THEN
4304     FND_MSG_PUB.Initialize;
4305   END IF;
4306 
4307   l_user_id := FND_GLOBAL.USER_ID;
4308   l_resp_id := FND_GLOBAL.RESP_ID;
4309 
4310   IF (l_log_statement >= l_log_current_level)THEN
4311          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4312          'Starting process'
4313           );
4314          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4315          'Firing cocurrent rquest for: p_object_type : ' || p_object_type || ': p_object_id : ' || p_object_id
4316           );
4317          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4318          'Firing cocurrent rquest for: l_user_id : ' || l_user_id || ': l_resp_id : ' || l_resp_id
4319           );
4320          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4321          'Firing cocurrent rquest for: User name : ' || FND_GLOBAL.USER_NAME || ': Resp Name : ' || FND_GLOBAL.RESP_NAME
4322           );
4323          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4324          'Firing cocurrent rquest for: p_split_flag : ' || p_split_flag
4325           );
4326   END IF;
4327 
4328   -- Initialize Procedure return status to success
4329   x_return_status := FND_API.G_RET_STS_SUCCESS;
4330 
4331   Process_JCG_Request(
4332       p_api_version       => 1.0,
4333       p_init_msg_list     => FND_API.G_FALSE,
4334       p_commit            => FND_API.G_FALSE,
4335       p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
4336       p_default           => FND_API.G_FALSE,
4337       p_module_type       => NULL,
4338       x_return_status     => l_return_status,
4339       x_msg_data          => l_msg_data,
4340       x_msg_count         => l_msg_count ,
4341       p_operation_flag    => 'C',
4342       p_x_jcg_id          => l_jcg_id,
4343       p_object_type       => p_object_type,
4344       p_object_id         => p_object_id,
4345       p_status_code       => 'P',--status processing
4346       p_file_location     => NULL,
4347       p_split_flag        => p_split_flag,
4348       p_xml_data_filename => NULL,
4349       p_error_message     => NULL,
4350       p_CONCURRENT_REQUEST_ID => NULL
4351      );
4352 
4353   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)  THEN
4354       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4355   END IF;
4356   l_req_id := fnd_request.submit_request('AHL','AHLJCGREQ',NULL,NULL,FALSE, l_jcg_id,l_user_id,l_resp_id);
4357   IF (l_req_id = 0 OR l_req_id IS NULL) THEN
4358     IF (l_log_unexpected >= l_log_current_level)THEN
4359          fnd_log.string( l_log_unexpected,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4360          'Tried to submit concurrent request but failed'
4361           );
4362     END IF;
4363     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4364   ELSE
4365     IF (l_log_statement >= l_log_current_level)THEN
4366          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4367          'Concurrent request ID:' || l_req_id
4368           );
4369     END IF;
4370   END IF; -- l_req_id = 0 OR ..
4371 
4372   -- Standard check of p_commit
4373   IF FND_API.TO_BOOLEAN(p_commit) THEN
4374       COMMIT WORK;
4375   END IF;
4376 
4377   -- Standard call to get message count and if count is 1, get message info
4378   FND_MSG_PUB.Count_And_Get
4379     ( p_count => x_msg_count,
4380       p_data  => x_msg_data,
4381       p_encoded => fnd_api.g_false
4382     );
4383 
4384 --
4385 EXCEPTION
4386  WHEN FND_API.G_EXC_ERROR THEN
4387    x_return_status := FND_API.G_RET_STS_ERROR;
4388    Rollback to GENERATE_JCG_REQUEST_PVT;
4389    FND_MSG_PUB.count_and_get( p_count => x_msg_count,
4390                               p_data  => x_msg_data,
4391                               p_encoded => fnd_api.g_false);
4392 
4393 
4394  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4395    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4396    Rollback to GENERATE_JCG_REQUEST_PVT;
4397    FND_MSG_PUB.count_and_get( p_count => x_msg_count,
4398                               p_data  => x_msg_data,
4399                               p_encoded => fnd_api.g_false);
4400 
4401  WHEN OTHERS THEN
4402     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4403     Rollback to GENERATE_JCG_REQUEST_PVT;
4404     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4405        fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
4406                                p_procedure_name => 'print_workcard',
4407                                p_error_text     => SUBSTR(SQLERRM,1,240));
4408     END IF;
4409     FND_MSG_PUB.count_and_get( p_count => x_msg_count,
4410                                p_data  => x_msg_data,
4411                                p_encoded => fnd_api.g_false);
4412 
4413 END print_workcard;
4414 
4415 --- Function to handle Enigma JCG Web Service response
4416 FUNCTION HANDLE_ENIGMAJCG_RESP(p_subscription_guid in raw,
4417                   p_event in out NOCOPY WF_EVENT_T) return varchar2
4418 IS
4419 l_ret_resp VARCHAR2(10);
4420 BEGIN
4421   l_ret_resp := HANDLE_JCG_RESPONSE(p_event.GetEventKey(),  p_event.getEventData());
4422   IF(l_ret_resp <> 'SUCCESS')THEN
4423     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4424   END IF;
4425   RETURN 'SUCCESS';
4426 EXCEPTION
4427  WHEN OTHERS THEN
4428     WF_CORE.CONTEXT('AHL_PRD_PRINT_PVT','HANDLE_ENIGMAJCG_RESP',
4429         p_event.getEventName(), p_subscription_guid);
4430     WF_EVENT.setErrorInfo(p_event, 'ERROR');
4431     RETURN 'ERROR';
4432 
4433 END HANDLE_ENIGMAJCG_RESP;
4434 
4435 --- Function to handle Enigma JCG Web Service response
4436 FUNCTION HANDLE_ENIGMAJCG_FAULTS(p_subscription_guid in raw,
4437                   p_event in out NOCOPY WF_EVENT_T) return varchar2
4438 IS
4439 l_ret_resp VARCHAR2(10);
4440 BEGIN
4441   l_ret_resp := HANDLE_JCG_ERRORS(p_event.GetEventKey(),  p_event.getErrorMessage());
4442     IF(l_ret_resp <> 'SUCCESS')THEN
4443     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4444   END IF;
4445   RETURN 'SUCCESS';
4446 EXCEPTION
4447  WHEN OTHERS THEN
4448     WF_CORE.CONTEXT('AHL_PRD_PRINT_PVT','HANDLE_ENIGMAJCG_RESP',
4449         p_event.getEventName(), p_subscription_guid);
4450     WF_EVENT.setErrorInfo(p_event, 'ERROR');
4451     RETURN 'ERROR';
4452 
4453 END HANDLE_ENIGMAJCG_FAULTS;
4454 
4455 --- Function to handle Enigma JCG Web Service response from BPEL
4456 FUNCTION HANDLE_JCG_RESPONSE(p_request_id IN VARCHAR2,
4457                   p_enigma_response IN CLOB) return varchar2
4458 IS
4459 l_log_current_level        NUMBER;
4460 l_log_statement            NUMBER;
4461 l_log_procedure            NUMBER;
4462 l_log_error                NUMBER;
4463 l_log_unexpected           NUMBER;
4464 
4465 
4466 l_api_name      CONSTANT VARCHAR2(30) := 'HANDLE_JCG_RESPONSE';
4467 l_msg_count     NUMBER;
4468 l_msg_data      VARCHAR2(3000);
4469 l_return_status VARCHAR2(1);
4470 l_jcg_id        NUMBER;
4471 l_user_id       NUMBER;
4472 l_resp_id       NUMBER;
4473 
4474 l_clob_chunk_count   integer;
4475 l_log_segment_size   integer;
4476 i integer;
4477 
4478 l_pdf_table PDF_TABLE_TYPE;
4479 
4480 CURSOR get_jcg_details(p_jcg_id IN NUMBER) IS
4481 SELECT JCG_REQUEST_ID,OBJECT_TYPE_CODE,OBJECT_ID,SPLIT_FLAG,CONCURRENT_REQUEST_ID
4482 FROM ahl_enigma_jcg_details
4483 WHERE JCG_REQUEST_ID = p_jcg_id;
4484 
4485 l_jcg_details_rec get_jcg_details%rowtype;
4486 l_pdf_resp_count integer;
4487 l_jcg_req_status VARCHAR2(30);
4488 
4489 l_object_type_code VARCHAR2(30);
4490 l_object_id   NUMBER;
4491 l_x_jcg_id   NUMBER;
4492 
4493 cursor does_more_recent_jcg_exist(p_jcg_id in number,p_object_type_code in varchar2,p_object_id in number,
4494                                    p_concurrent_request_id in number) is
4495 select 'x' from  ahl_enigma_jcg_details
4496 where object_type_code = p_object_type_code
4497 and object_id = p_object_id
4498 and jcg_request_id > p_jcg_id
4499 AND concurrent_request_id > p_concurrent_request_id;
4500 
4501 l_junc VARCHAR2(1);
4502 
4503 
4504 BEGIN
4505 
4506   SAVEPOINT HANDLE_JCG_RESPONSE;
4507 
4508   l_jcg_id := to_number(substr(p_request_id,1,instr(p_request_id,':',1,1)-1));
4509   l_user_id := to_number((substr(p_request_id,instr(p_request_id,':',1,1)+1,(instr(p_request_id,':',1,2) - instr(p_request_id,':',1,1))-1)));
4510   l_resp_id := to_number(substr(p_request_id,instr(p_request_id,':',1,2)+1));
4511   -- set application context for user that initiated request
4512   fnd_global.apps_initialize(l_user_id, l_resp_id , 867);
4513   mo_global.init('AHL');
4514 
4515   l_log_current_level      := FND_LOG.g_current_runtime_level;
4516   l_log_statement          := FND_LOG.level_statement;
4517   l_log_procedure          := FND_LOG.level_procedure;
4518   l_log_error              := FND_LOG.level_error;
4519   l_log_unexpected         := FND_LOG.level_unexpected;
4520 
4521   IF (l_log_procedure >= l_log_current_level)THEN
4522          fnd_log.string( l_log_procedure,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4523          'Starting processing response'   );
4524   END IF;
4525   IF (l_log_statement >= l_log_current_level)THEN
4526          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4527          'p_request_id:' || p_request_id    );
4528          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4529          'l_user_id:' || l_user_id    );
4530          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4531          'l_resp_id:' || l_resp_id  );
4532          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4533          'l_jcg_id:' || l_jcg_id  );
4534          l_log_segment_size := 3500;
4535          l_clob_chunk_count := ceil(DBMS_LOB.GETLENGTH(p_enigma_response)/l_log_segment_size);
4536          i :=1;
4537          while i<=l_clob_chunk_count  LOOP
4538            fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4539            'l_eventData: part : ' ||  i || ': ' || DBMS_LOB.substr(p_enigma_response,l_log_segment_size,1+l_log_segment_size*(i -1)   ));
4540            i := i+1;
4541          END LOOP;
4542   END IF;
4543 
4544 
4545 
4546   OPEN get_jcg_details(l_jcg_id);
4547   FETCH get_jcg_details INTO l_jcg_details_rec;
4548   IF get_jcg_details%NOTFOUND THEN
4549      IF (l_log_statement >= l_log_current_level)THEN
4550          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4551          'l_jcg_id:' || l_jcg_id  );
4552          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4553          'This request was fired in past and a later request got processed. Hence ignoring this request'  );
4554      END IF;
4555      CLOSE get_jcg_details;
4556      RETURN 'SUCCESS';
4557   END IF;
4558   CLOSE get_jcg_details;
4559 
4560   IF (l_log_statement >= l_log_current_level)THEN
4561          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4562          'Parsing Enigma response'    );
4563   END IF;
4564 
4565   parse_enigma_response(
4566    p_workpackage_id => l_jcg_details_rec.object_type_code || '-' || l_jcg_details_rec.object_id,
4567    p_enigma_response => p_enigma_response,
4568    x_pdf_table       => l_pdf_table --  OUT NOCOPY PDF_TABLE_TYPE
4569   );
4570 
4571   IF (l_log_statement >= l_log_current_level)THEN
4572          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4573          'Done Parsing: now printing response'    );
4574   END IF;
4575 
4576   l_pdf_resp_count :=0;
4577   IF (l_pdf_table IS NOT NULL AND l_pdf_table.COUNT > 0 )THEN
4578     l_pdf_resp_count := l_pdf_table.COUNT;
4579   END IF;
4580   IF (l_log_statement >= l_log_current_level)THEN
4581     IF (l_pdf_resp_count > 0 )THEN
4582      FOR k IN l_pdf_table.FIRST..l_pdf_table.LAST LOOP
4583       fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,substr(
4584       '[Job Card ID :' || l_pdf_table(k).job_card_id || ']' ||
4585       '[PDF PATH : '  || l_pdf_table(k).pdf_path || ']' ||
4586       '[Status : ' || l_pdf_table(k).status || ']' ||
4587       '[pdf_ErrorMessage : ' || l_pdf_table(k).pdf_ErrorMessage || ']',1,4000));
4588       END LOOP;
4589     END IF;
4590   END IF;
4591   -- error response or successful response with no split.
4592   IF (l_pdf_resp_count =1 OR (NVL(l_jcg_details_rec.SPLIT_FLAG,'N') = 'N' AND l_pdf_resp_count >=1 ))THEN
4593     IF(l_pdf_table(1).status IN ('Completed','Warning'))THEN
4594       l_jcg_req_status := 'S';
4595     ELSE
4596       l_jcg_req_status := 'E';
4597     END IF;
4598     Process_JCG_Request(
4599     p_api_version       => 1.0,
4600     p_init_msg_list     => FND_API.G_FALSE,
4601     p_commit            => FND_API.G_FALSE,
4602     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
4603     p_default           => FND_API.G_FALSE,
4604     p_module_type       => NULL,
4605     x_return_status     => l_return_status,
4606     x_msg_data          => l_msg_data,
4607     x_msg_count         => l_msg_count ,
4608     p_operation_flag    => 'U',
4609     p_x_jcg_id          => l_jcg_id,
4610     p_object_type       => null,
4611     p_object_id         => null,
4612     p_status_code       => l_jcg_req_status,
4613     p_file_location     => l_pdf_table(1).pdf_path,
4614     p_split_flag        => NULL,
4615     p_xml_data_filename => NULL,
4616     p_error_message     => substr(l_pdf_table(1).pdf_ErrorMessage,1,4000),
4617     p_CONCURRENT_REQUEST_ID => l_jcg_details_rec.CONCURRENT_REQUEST_ID
4618    );
4619   ELSIF (l_pdf_resp_count > 1 )THEN -- response for split flag as 'Y'
4620     FOR k IN l_pdf_table.FIRST..l_pdf_table.LAST LOOP
4621 
4622       l_object_type_code := substr(l_pdf_table(k).job_card_id,1,instr(l_pdf_table(k).job_card_id,'-',1,1)-1);
4623 
4624       IF(instr(l_pdf_table(k).job_card_id,'-',1,2) > 0)THEN
4625         l_object_id := to_number(substr(l_pdf_table(k).job_card_id,instr(l_pdf_table(k).job_card_id,'-',1,1)+1,(instr(l_pdf_table(k).job_card_id,'-',1,2) - instr(l_pdf_table(k).job_card_id,'-',1,1))-1));
4626       ELSE
4627         l_object_id :=  to_number(substr(l_pdf_table(k).job_card_id,instr(l_pdf_table(k).job_card_id,'-',1,1)+1));
4628       END IF;
4629 
4630       IF(l_object_type_code =  l_jcg_details_rec.object_type_code AND
4631          l_object_id = l_jcg_details_rec.object_id)THEN
4632           IF(l_pdf_table(k).status IN ('Completed','Warning'))THEN
4633             l_jcg_req_status := 'S';
4634           ELSE
4635             l_jcg_req_status := 'E';
4636           end if;
4637           Process_JCG_Request(
4638             p_api_version       => 1.0,
4639             p_init_msg_list     => FND_API.G_FALSE,
4640             p_commit            => FND_API.G_FALSE,
4641             p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
4642             p_default           => FND_API.G_FALSE,
4643             p_module_type       => NULL,
4644             x_return_status     => l_return_status,
4645             x_msg_data          => l_msg_data,
4646             x_msg_count         => l_msg_count ,
4647             p_operation_flag    => 'U',
4648             p_x_jcg_id          => l_jcg_id,
4649             p_object_type       => NULL,
4650             p_object_id         => NULL,
4651             p_status_code       => l_jcg_req_status,--status processing
4652             p_file_location     => l_pdf_table(k).pdf_path,
4653             p_split_flag        => NULL,
4654             p_xml_data_filename => NULL,
4655             p_error_message     => substr(l_pdf_table(1).pdf_ErrorMessage,1,4000),
4656             p_CONCURRENT_REQUEST_ID => l_jcg_details_rec.CONCURRENT_REQUEST_ID
4657           );
4658       ELSE
4659          IF(l_pdf_table(k).status IN ('Completed','Warning'))THEN
4660             l_jcg_req_status := 'S';
4661           ELSE
4662             l_jcg_req_status := 'E';
4663           end if;
4664          open does_more_recent_jcg_exist(l_jcg_details_rec.JCG_REQUEST_ID ,l_object_type_code,
4665                                          l_object_id, l_jcg_details_rec.concurrent_request_id);
4666          fetch does_more_recent_jcg_exist into l_junc;
4667          if(does_more_recent_jcg_exist%notfound)then
4668           Process_JCG_Request(
4669             p_api_version       => 1.0,
4670             p_init_msg_list     => FND_API.G_FALSE,
4671             p_commit            => FND_API.G_FALSE,
4672             p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
4673             p_default           => FND_API.G_FALSE,
4674             p_module_type       => NULL,
4675             x_return_status     => l_return_status,
4676             x_msg_data          => l_msg_data,
4677             x_msg_count         => l_msg_count ,
4678             p_operation_flag    => 'C',
4679             p_x_jcg_id          => l_x_jcg_id,
4680             p_object_type       => l_object_type_code,
4681             p_object_id         => l_object_id,
4682             p_status_code       => l_jcg_req_status,--status processing
4683             p_file_location     => l_pdf_table(k).pdf_path,
4684             p_split_flag        => NULL,
4685             p_xml_data_filename => NULL,
4686             p_error_message     => substr(l_pdf_table(k).pdf_ErrorMessage,1,4000),
4687             p_CONCURRENT_REQUEST_ID => l_jcg_details_rec.CONCURRENT_REQUEST_ID
4688         );
4689         end if;
4690         close does_more_recent_jcg_exist;
4691       END IF;
4692     END LOOP;
4693   ELSE -- no meaningful response was returned by Enigma
4694    Process_JCG_Request(
4695     p_api_version       => 1.0,
4696     p_init_msg_list     => FND_API.G_FALSE,
4697     p_commit            => FND_API.G_FALSE,
4698     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
4699     p_default           => FND_API.G_FALSE,
4700     p_module_type       => NULL,
4701     x_return_status     => l_return_status,
4702     x_msg_data          => l_msg_data,
4703     x_msg_count         => l_msg_count ,
4704     p_operation_flag    => 'U',
4705     p_x_jcg_id          => l_jcg_id,
4706     p_object_type       => null,
4707     p_object_id         => null,
4708     p_status_code       => 'E',--status processing
4709     p_file_location     => NULL,
4710     p_split_flag        => NULL,
4711     p_xml_data_filename => NULL,
4712     p_error_message     => 'An empty response was returned by Enigma',
4713     p_CONCURRENT_REQUEST_ID => l_jcg_details_rec.CONCURRENT_REQUEST_ID
4714    );
4715   END IF;
4716 
4717    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)  THEN
4718      RAISE FND_API.G_EXC_ERROR;
4719    END IF;
4720    IF (l_log_procedure >= l_log_current_level)THEN
4721          fnd_log.string( l_log_procedure,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4722          'Finsihed processing response'   );
4723   END IF;
4724 
4725   COMMIT;
4726 
4727 
4728   RETURN 'SUCCESS';
4729 
4730 
4731 EXCEPTION
4732   WHEN FND_API.G_EXC_ERROR THEN
4733    Rollback to HANDLE_JCG_RESPONSE;
4734 
4735    FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4736                               p_data  => l_msg_data,
4737                               p_encoded => fnd_api.g_false);
4738    RETURN HANDLE_JCG_ERRORS(p_request_id, l_msg_data );
4739 
4740  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4741    Rollback to HANDLE_JCG_RESPONSE;
4742    FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4743                               p_data  => l_msg_data,
4744                               p_encoded => fnd_api.g_false);
4745     RETURN HANDLE_JCG_ERRORS(p_request_id, l_msg_data );
4746 
4747  WHEN OTHERS THEN
4748     Rollback to HANDLE_JCG_RESPONSE;
4749     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
4750                 p_procedure_name => l_api_name,
4751                 p_error_text     => SUBSTR(SQLERRM,1,240));
4752     FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4753                 p_data  => l_msg_data,
4754                 p_encoded => fnd_api.g_false);
4755     RETURN HANDLE_JCG_ERRORS(p_request_id, l_msg_data );
4756 END HANDLE_JCG_RESPONSE;
4757 
4758 
4759 
4760 --- Function to handle Enigma JCG Web Service flow errors
4761 FUNCTION HANDLE_JCG_ERRORS(p_request_id IN VARCHAR2,
4762                   p_error_msg in VARCHAR2) return varchar2
4763 IS
4764 
4765 l_log_current_level        NUMBER;
4766 l_log_statement            NUMBER;
4767 l_log_procedure            NUMBER;
4768 l_log_error                NUMBER;
4769 l_log_unexpected           NUMBER;
4770 
4771 l_api_name      CONSTANT VARCHAR2(30) := 'HANDLE_JCG_ERRORS';
4772 l_msg_count     NUMBER;
4773 l_msg_data      VARCHAR2(3000);
4774 l_return_status VARCHAR2(1);
4775 l_jcg_id        NUMBER;
4776 l_user_id       NUMBER;
4777 l_resp_id       NUMBER;
4778 
4779 CURSOR get_jcg_details(p_jcg_id IN NUMBER) IS
4780 SELECT JCG_REQUEST_ID,OBJECT_TYPE_CODE,OBJECT_ID,SPLIT_FLAG,CONCURRENT_REQUEST_ID
4781 FROM ahl_enigma_jcg_details
4782 WHERE JCG_REQUEST_ID = p_jcg_id;
4783 
4784 l_jcg_details_rec get_jcg_details%rowtype;
4785 l_error_msg VARCHAR2(4000);
4786 
4787 BEGIN
4788 
4789   SAVEPOINT HANDLE_JCG_ERRORS;
4790 
4791   l_jcg_id := to_number(substr(p_request_id,1,instr(p_request_id,':',1,1)-1));
4792   l_user_id := to_number((substr(p_request_id,instr(p_request_id,':',1,1)+1,(instr(p_request_id,':',1,2) - instr(p_request_id,':',1,1))-1)));
4793   l_resp_id := to_number(substr(p_request_id,instr(p_request_id,':',1,2)+1));
4794   -- set application context for user that initiated request
4795   fnd_global.apps_initialize(l_user_id, l_resp_id , 867);
4796   mo_global.init('AHL');
4797 
4798   l_log_current_level      := FND_LOG.g_current_runtime_level;
4799   l_log_statement          := FND_LOG.level_statement;
4800   l_log_procedure          := FND_LOG.level_procedure;
4801   l_log_error              := FND_LOG.level_error;
4802   l_log_unexpected         := FND_LOG.level_unexpected;
4803 
4804   IF (l_log_procedure >= l_log_current_level)THEN
4805            fnd_log.string( l_log_procedure,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4806            'Starting processing errors'   );
4807   END IF;
4808   IF (l_log_statement >= l_log_current_level)THEN
4809          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4810          'p_request_id:' || p_request_id    );
4811          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4812          'l_user_id:' || l_user_id    );
4813          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4814          'l_resp_id:' || l_resp_id  );
4815          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4816          'l_jcg_id:' || l_jcg_id  );
4817          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4818          'l_error_message:' || p_error_msg  );
4819   END IF;
4820   l_error_msg := substr(p_error_msg,1,4000);
4821 
4822   IF p_error_msg = 'AHL_PRD_BPEL_JCGH_BFAULT' THEN
4823     FND_MESSAGE.SET_NAME('AHL', 'AHL_PRD_BPEL_JCGH_BFAULT');
4824     l_error_msg := FND_MESSAGE.get;
4825   ELSIF p_error_msg = 'AHL_PRD_BPEL_JCGH_INVFAULT' THEN
4826     FND_MESSAGE.SET_NAME('AHL', 'AHL_PRD_BPEL_JCGH_INVFAULT');
4827     l_error_msg := FND_MESSAGE.get;
4828   END IF;
4829   OPEN get_jcg_details(l_jcg_id);
4830   FETCH get_jcg_details INTO l_jcg_details_rec;
4831   IF get_jcg_details%NOTFOUND THEN
4832      IF (l_log_statement >= l_log_current_level)THEN
4833          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4834          'l_jcg_id:' || l_jcg_id  );
4835          fnd_log.string( l_log_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4836          'This request was fired in past and a later request got processed. Hence ignoring this request'  );
4837      END IF;
4838      CLOSE get_jcg_details;
4839      RETURN 'SUCCESS';
4840   END IF;
4841   CLOSE get_jcg_details;
4842 
4843 
4844 
4845   Process_JCG_Request(
4846     p_api_version       => 1.0,
4847     p_init_msg_list     => FND_API.G_FALSE,
4848     p_commit            => FND_API.G_FALSE,
4849     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
4850     p_default           => FND_API.G_FALSE,
4851     p_module_type       => NULL,
4852     x_return_status     => l_return_status,
4853     x_msg_data          => l_msg_data,
4854     x_msg_count         => l_msg_count ,
4855     p_operation_flag    => 'U',
4856     p_x_jcg_id          => l_jcg_id,
4857     p_object_type       => null,
4858     p_object_id         => null,
4859     p_status_code       => 'E',--status processing
4860     p_file_location     => NULL,
4861     p_split_flag        => NULL,
4862     p_xml_data_filename => NULL,
4863     p_error_message     => l_error_msg,
4864     p_CONCURRENT_REQUEST_ID => l_jcg_details_rec.CONCURRENT_REQUEST_ID
4865    );
4866 
4867    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)  THEN
4868      RAISE FND_API.G_EXC_ERROR;
4869    END IF;
4870    IF (l_log_procedure >= l_log_current_level)THEN
4871          fnd_log.string( l_log_procedure,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4872          'Finsihed processing errors'   );
4873   END IF;
4874 
4875   COMMIT;
4876 
4877 
4878   RETURN 'SUCCESS';
4879 
4880 
4881 EXCEPTION
4882   WHEN FND_API.G_EXC_ERROR THEN
4883    Rollback to HANDLE_JCG_ERRORS;
4884 
4885    FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4886                               p_data  => l_msg_data,
4887                               p_encoded => fnd_api.g_false);
4888    IF (l_log_error >= l_log_current_level)THEN
4889          fnd_log.string( l_log_error,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4890          'l_eventkey:' || p_request_id    );
4891          fnd_log.string( l_log_error,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4892          'l_msg_data:' || l_msg_data    );
4893    END IF;
4894    RETURN 'ERROR';
4895 
4896  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4897    Rollback to HANDLE_JCG_ERRORS;
4898    FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4899                               p_data  => l_msg_data,
4900                               p_encoded => fnd_api.g_false);
4901    IF (l_log_unexpected >= l_log_current_level)THEN
4902          fnd_log.string( l_log_unexpected,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4903          'p_request_id:' || p_request_id    );
4904          fnd_log.string( l_log_unexpected,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4905          'l_msg_data:' || l_msg_data    );
4906    END IF;
4907    RETURN 'ERROR';
4908  WHEN OTHERS THEN
4909     Rollback to HANDLE_JCG_ERRORS;
4910     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
4911             p_procedure_name => l_api_name,
4912             p_error_text     => SUBSTR(SQLERRM,1,240));
4913     FND_MSG_PUB.count_and_get( p_count => l_msg_count,
4914             p_data  => l_msg_data,
4915             p_encoded => fnd_api.g_false);
4916     IF (l_log_unexpected >= l_log_current_level)THEN
4917          fnd_log.string( l_log_unexpected,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4918          'p_request_id:' || p_request_id    );
4919          fnd_log.string( l_log_unexpected,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
4920          'l_msg_data:' || l_msg_data    );
4921     END IF;
4922     RETURN 'ERROR';
4923 
4924 END HANDLE_JCG_ERRORS;
4925 
4926 PROCEDURE parse_enigma_response(
4927     p_workpackage_id  IN VARCHAR2,
4928     p_enigma_response IN CLOB,
4929     x_pdf_table OUT NOCOPY PDF_TABLE_TYPE )
4930 IS
4931   l_log_current_level NUMBER;
4932   l_log_statement     NUMBER;
4933   l_log_procedure     NUMBER;
4934   l_log_error         NUMBER;
4935   l_log_unexpected    NUMBER;
4936   l_api_name          CONSTANT VARCHAR2(30) := 'parse_enigma_response';
4937   nl XMLDOM.DOMNODELIST;
4938   len1 NUMBER;
4939   len2 NUMBER;
4940   n XMLDOM.DOMNODE;
4941   e XMLDOM.DOMELEMENT;
4942   l_parser DBMS_XMLPARSER.parser;
4943   l_indomdoc DBMS_XMLDOM.DOMDocument;
4944   l_pdf_rec PDF_REC_TYPE;
4945   l_index          INTEGER;
4946   l_node_name      VARCHAR2(2000);
4947   l_parse_jobcards BOOLEAN;
4948 BEGIN
4949   l_log_current_level := FND_LOG.g_current_runtime_level;
4950   l_log_statement     := FND_LOG.level_statement;
4951   l_log_procedure     := FND_LOG.level_procedure;
4952   l_log_error         := FND_LOG.level_error;
4953   l_log_unexpected    := FND_LOG.level_unexpected;
4954   IF (l_log_procedure >= l_log_current_level)THEN
4955     fnd_log.string( l_log_procedure,'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Entering procedure');
4956   END IF;
4957   l_parser := DBMS_XMLPARSER.newParser;
4958   --DBMS_XMLPARSER.parseBuffer(l_parser,p_enigma_response);
4959   -- fix for bug 9834092
4960   DBMS_XMLPARSER.parseClob(l_parser,p_enigma_response);
4961   l_indomdoc := DBMS_XMLPARSER.getDocument(l_parser);
4962   -- get all elements
4963   nl   := XMLDOM.getElementsByTagName(l_indomdoc, '*');
4964   len1 := XMLDOM.getLength(nl);
4965   -- loop through elements
4966   l_index := 0;
4967   l_parse_jobcards := TRUE;
4968   FOR j   IN 0..len1-1
4969   LOOP
4970     n           := XMLDOM.item(nl, j);
4971     e           := XMLDOM.makeElement(n);
4972     l_node_name := XMLDOM.getNodeName(n);
4973     l_node_name := SUBSTR(l_node_name,instr(l_node_name,':',1,1)+1 );
4974     -- dbms_output.put_line( 'parsed:' || l_node_name );
4975     IF (l_node_name = 'woErrorMessage') THEN
4976       l_pdf_rec    := NULL;
4977       l_index      := l_index+1;
4978     END IF;
4979     IF (l_node_name               ='woErrorMessage')THEN
4980       l_pdf_rec.pdf_ErrorMessage := xmldom.getNodeValue(xmldom.getFirstChild(n));
4981     ELSIF (l_node_name            ='woStatus')THEN
4982       l_pdf_rec.job_card_id      := p_workpackage_id;
4983       l_pdf_rec.status           := xmldom.getNodeValue(xmldom.getFirstChild(n));
4984       IF(l_pdf_rec.status NOT    IN( 'Completed','Warning'))THEN
4985         x_pdf_table(l_index)     := l_pdf_rec;
4986         l_parse_jobcards         := FALSE;
4987       END IF;
4988     END IF;
4989   END LOOP;
4990   IF(l_parse_jobcards)THEN
4991     l_index := 0;
4992   ELSE
4993     RETURN;--Error at header level for printing.. not need to go further
4994   END IF;
4995   -- parse job cards pdfs
4996   FOR j IN 0..len1-1
4997   LOOP
4998     n             := XMLDOM.item(nl, j);
4999     e             := XMLDOM.makeElement(n);
5000     l_node_name   := XMLDOM.getNodeName(n);
5001     l_node_name   := SUBSTR(l_node_name,instr(l_node_name,':',1,1)+1 );
5002     IF(l_node_name = 'pdfStatus') THEN
5003       l_pdf_rec   := NULL;
5004       l_index     := l_index+1;
5005     END IF;
5006     IF(l_node_name                = 'jobCardID') THEN
5007       l_pdf_rec.job_card_id      := xmldom.getNodeValue(xmldom.getFirstChild(n));
5008     ELSIF(l_node_name             ='pdfPath')THEN
5009       l_pdf_rec.pdf_path         := xmldom.getNodeValue(xmldom.getFirstChild(n));
5010     ELSIF(l_node_name             ='pdfErrorMessage')THEN
5011       l_pdf_rec.pdf_ErrorMessage := xmldom.getNodeValue(xmldom.getFirstChild(n));
5012     ELSIF(l_node_name             ='status')THEN
5013       l_pdf_rec.status           := xmldom.getNodeValue(xmldom.getFirstChild(n));
5014       x_pdf_table(l_index)       := l_pdf_rec;
5015     END IF;
5016   END LOOP;
5017   DBMS_XMLDOM.freeDocument(l_indomdoc);
5018   DBMS_XMLPARSER.freeParser(l_parser);
5019 END parse_enigma_response;
5020 
5021 PROCEDURE APPLY_TRANSFORMATION(
5022    p_indoc                     IN CLOB,
5023    --p_xsl_full_path             IN VARCHAR2,
5024    p_xsl_doc                   IN CLOB,
5025    p_xml_output_dir            IN VARCHAR2,
5026    p_xml_output_filename       IN VARCHAR2,
5027    x_return_status             OUT NOCOPY         VARCHAR2,
5028 	 x_msg_count                 OUT NOCOPY         NUMBER,
5029 	 x_msg_data                  OUT NOCOPY         VARCHAR2
5030 )IS
5031    l_parser DBMS_XMLPARSER.parser;
5032    l_indomdoc DBMS_XMLDOM.DOMDocument;
5033    l_xsltdomdoc DBMS_XMLDOM.DOMDocument;
5034    l_xsl DBMS_XSLPROCESSOR.stylesheet;
5035    l_outdomdocf DBMS_XMLDOM.DOMDocumentFragment;
5036    l_outnode DBMS_XMLDOM.DOMNode;
5037    l_proc DBMS_XSLPROCESSOR.processor;
5038    l_clob CLOB;
5039    l_clob_file CLOB;
5040    l_vchar_header VARCHAR2(40);
5041 BEGIN
5042    -- Initialize Procedure return status to success
5043    x_return_status := FND_API.G_RET_STS_SUCCESS;
5044    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5045     fnd_log.string (
5046       fnd_log.level_statement, 'ahl.plsql.'||g_pkg_name||'.'||'APPLY_TRANSFORMATION' ,'Starting transformation');
5047    END IF;
5048    l_vchar_header := '<?xml version="1.0" encoding="UTF-8" ?>';
5049    l_parser := DBMS_XMLPARSER.newParser;
5050    DBMS_XMLPARSER.parseClob(l_parser, p_indoc);
5051    -- following statement commented since input is clob and not a input xml full path
5052    --DBMS_XMLPARSER.parse(l_parser,p_xml_input_fullpath);
5053    l_indomdoc := DBMS_XMLPARSER.getDocument(l_parser);
5054    --DBMS_XMLPARSER.parse(l_parser, p_xsl_full_path);
5055    DBMS_XMLPARSER.parseClob(l_parser, p_xsl_doc);
5056    l_xsltdomdoc := DBMS_XMLPARSER.getDocument(l_parser);
5057    l_xsl := DBMS_XSLPROCESSOR.newStyleSheet(l_xsltdomdoc, '');
5058    l_proc := DBMS_XSLPROCESSOR.newProcessor;
5059 
5060    DBMS_LOB.createTemporary( l_clob, true );
5061    DBMS_LOB.open( l_clob, DBMS_LOB.lob_readwrite );
5062    DBMS_LOB.write(l_clob,length(l_vchar_header),length(l_clob)+1,l_vchar_header);
5063 
5064    --DBMS_XSLPROCESSOR.processXSL(l_proc, l_xsl, l_indomdoc,p_xml_output_dir,p_xml_output_filename);
5065    DBMS_XSLPROCESSOR.processXSL(l_proc, l_xsl, l_indomdoc,l_clob);
5066 
5067    --DBMS_LOB.APPEND(l_clob_header,l_clob);
5068    DBMS_LOB.createTemporary( l_clob_file, true );
5069    DBMS_LOB.open( l_clob_file, DBMS_LOB.lob_readwrite );
5070    DBMS_LOB.write(l_clob_file,length(l_vchar_header),length(l_clob_file)+1,l_vchar_header);
5071    DBMS_LOB.copy(l_clob_file,l_clob,4294967295,40,1);
5072 
5073    DBMS_XSLPROCESSOR.CLOB2FILE(l_clob_file,p_xml_output_dir,p_xml_output_filename);
5074 
5075    DBMS_LOB.close(l_clob_file);
5076    DBMS_LOB.close(l_clob);
5077    DBMS_XMLDOM.freeDocument(l_indomdoc);
5078    DBMS_XMLDOM.freeDocument(l_xsltdomdoc);
5079    DBMS_XMLPARSER.freeParser(l_parser);
5080    DBMS_XSLPROCESSOR.freeProcessor(l_proc);
5081    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5082     fnd_log.string (
5083       fnd_log.level_statement, 'ahl.plsql.'||g_pkg_name||'.'||'APPLY_TRANSFORMATION' ,'done transformation');
5084    END IF;
5085 EXCEPTION
5086   WHEN OTHERS THEN
5087     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5088     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
5089         p_procedure_name => 'APPLY_TRANSFORMATION',
5090         p_error_text     => SUBSTR(SQLERRM,1,240));
5091     FND_MSG_PUB.count_and_get( p_count => x_msg_count,
5092                                p_data  => x_msg_data,
5093                                p_encoded => fnd_api.g_false);
5094 
5095 END APPLY_TRANSFORMATION;
5096 
5097 PROCEDURE APPLY_TRANSFORMATION(
5098    p_xml_input_fullpath        IN VARCHAR2,
5099    p_xsl_doc                   IN CLOB,
5100    p_xml_output_dir            IN VARCHAR2,
5101    p_xml_output_filename       IN VARCHAR2,
5102    x_return_status             OUT NOCOPY         VARCHAR2,
5103 	 x_msg_count                 OUT NOCOPY         NUMBER,
5104 	 x_msg_data                  OUT NOCOPY         VARCHAR2
5105 )IS
5106    l_parser DBMS_XMLPARSER.parser;
5107    l_indomdoc DBMS_XMLDOM.DOMDocument;
5108    l_xsltdomdoc DBMS_XMLDOM.DOMDocument;
5109    l_xsl DBMS_XSLPROCESSOR.stylesheet;
5110    l_outdomdocf DBMS_XMLDOM.DOMDocumentFragment;
5111    l_outnode DBMS_XMLDOM.DOMNode;
5112    l_proc DBMS_XSLPROCESSOR.processor;
5113    l_clob CLOB;
5114    l_clob_file CLOB;
5115    l_vchar_header VARCHAR2(40);
5116 BEGIN
5117    -- Initialize Procedure return status to success
5118    x_return_status := FND_API.G_RET_STS_SUCCESS;
5119    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5120     fnd_log.string (
5121       fnd_log.level_statement, 'ahl.plsql.'||g_pkg_name||'.'||'APPLY_TRANSFORMATION' ,'Starting transformation');
5122    END IF;
5123    l_vchar_header := '<?xml version="1.0" encoding="UTF-8" ?>';
5124    l_parser := DBMS_XMLPARSER.newParser;
5125     -- following statement commented since input is  a input xml full path and not a clob
5126    --DBMS_XMLPARSER.parseBuffer(l_parser, p_indoc);
5127 
5128    DBMS_XMLPARSER.parse(l_parser,p_xml_input_fullpath);
5129    l_indomdoc := DBMS_XMLPARSER.getDocument(l_parser);
5130    DBMS_XMLPARSER.parseClob(l_parser, p_xsl_doc);
5131    l_xsltdomdoc := DBMS_XMLPARSER.getDocument(l_parser);
5132    l_xsl := DBMS_XSLPROCESSOR.newStyleSheet(l_xsltdomdoc, '');
5133    l_proc := DBMS_XSLPROCESSOR.newProcessor;
5134 
5135    DBMS_LOB.createTemporary( l_clob, true );
5136    DBMS_LOB.open( l_clob, DBMS_LOB.lob_readwrite );
5137    DBMS_LOB.write(l_clob,length(l_vchar_header),length(l_clob)+1,l_vchar_header);
5138 
5139    --DBMS_XSLPROCESSOR.processXSL(l_proc, l_xsl, l_indomdoc,p_xml_output_dir,p_xml_output_filename);
5140    DBMS_XSLPROCESSOR.processXSL(l_proc, l_xsl, l_indomdoc,l_clob);
5141 
5142    --DBMS_LOB.APPEND(l_clob_header,l_clob);
5143    DBMS_LOB.createTemporary( l_clob_file, true );
5144    DBMS_LOB.open( l_clob_file, DBMS_LOB.lob_readwrite );
5145    DBMS_LOB.write(l_clob_file,length(l_vchar_header),length(l_clob_file)+1,l_vchar_header);
5146    DBMS_LOB.copy(l_clob_file,l_clob,4294967295,40,1);
5147 
5148    DBMS_XSLPROCESSOR.CLOB2FILE(l_clob_file,p_xml_output_dir,p_xml_output_filename);
5149 
5150    DBMS_LOB.close(l_clob_file);
5151    DBMS_LOB.close(l_clob);
5152    DBMS_XMLDOM.freeDocument(l_indomdoc);
5153    DBMS_XMLDOM.freeDocument(l_xsltdomdoc);
5154    DBMS_XMLPARSER.freeParser(l_parser);
5155    DBMS_XSLPROCESSOR.freeProcessor(l_proc);
5156    IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5157     fnd_log.string (
5158       fnd_log.level_statement, 'ahl.plsql.'||g_pkg_name||'.'||'APPLY_TRANSFORMATION' ,'Done transformation');
5159    END IF;
5160 EXCEPTION
5161   WHEN OTHERS THEN
5162     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5163     fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
5164         p_procedure_name => 'APPLY_TRANSFORMATION',
5165         p_error_text     => SUBSTR(SQLERRM,1,240));
5166     FND_MSG_PUB.count_and_get( p_count => x_msg_count,
5167                                p_data  => x_msg_data,
5168                                p_encoded => fnd_api.g_false);
5169 
5170 END APPLY_TRANSFORMATION;
5171 
5172 FUNCTION get_xsl_clob RETURN CLOB
5173 IS
5174 l_xsl_clob clob;
5175 l_xsl_part1  varchar2(30000);
5176 l_xsl_part2  varchar2(30000);
5177 l_xsl_part3  varchar2(30000);
5178 l_xsl_part4  varchar2(30000);
5179 l_xsl_part5  varchar2(30000);
5180 l_xsl_part6  varchar2(30000);
5181 l_xsl_part7  varchar2(30000);
5182 l_xsl_part8  VARCHAR2(30000);
5183 BEGIN
5184    l_xsl_part1 := '<?xml version="1.0" encoding="UTF-8" ?>
5185 <?oracle-xsl-mapper
5186   <!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
5187   <mapSources>
5188     <source type="XSD">
5189       <schema location="EnigmaWorkPackage.xsd"/>
5190       <rootElement name="WorkPackage" namespace="http://www.oracle.com/ns/ahl/prd/EnigmaWorkPackage"/>
5191     </source>
5192   </mapSources>
5193   <mapTargets>
5194     <target type="WSDL">
5195       <schema location="VisitLevelTransformation.wsdl"/>
5196       <rootElement name="workpackage" namespace=""/>
5197     </target>
5198   </mapTargets>
5199   <mapGenType type="ALL"/>
5200   <!-- GENERATED BY ORACLE XSL MAPPER 10.1.3.4.0(build 080718.0645) AT [FRI OCT 22 18:46:38 PDT 2010]. -->
5201 ?>
5202 <xsl:stylesheet version="1.0"
5203                 xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
5204                 xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
5205                 xmlns:ehdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.esb.server.headers.ESBHeaderFunctions"
5206                 xmlns:client="http://xmlns.oracle.com/VisitLevelTransformation"
5207                 xmlns:ns0="http://www.w3.org/2001/XMLSchema"
5208                 xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
5209                 xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
5210                 xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
5211                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5212                 xmlns:ora="http://schemas.oracle.com/xpath/extension"
5213                 xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
5214                 xmlns:orcl="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
5215                 xmlns:wp="http://www.oracle.com/ns/ahl/prd/EnigmaWorkPackage"
5216                 exclude-result-prefixes="xsl ns0 wp plnk client bpws ehdr hwf xp20 xref ora ids orcl">
5217   <xsl:template match="/">
5218     <workpackage>
5219       <xsl:attribute name="id">
5220         <xsl:value-of select=''translate(concat(/wp:WorkPackage/wp:wpmeta/wp:RequestType,"-",/wp:WorkPackage/wp:wpmeta/wp:RequestObjectId,"-",/wp:WorkPackage/wp:wpmeta/wp:WorkPackageGenerationDate),":","-")''/>
5221       </xsl:attribute>
5222       <xsl:attribute name="OEM"/>
5223       <xsl:attribute name="tailnumber">
5224         <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:UnitName"/>
5225       </xsl:attribute>
5226       <xsl:attribute name="priority">
5227         <xsl:value-of select=''concat("1","")''/>
5228       </xsl:attribute>
5229       <xsl:attribute name="revdate">
5230         <xsl:value-of select="/wp:WorkPackage/wp:wpmeta/wp:WorkPackageGenerationDate"/>
5231       </xsl:attribute>
5232       <xsl:attribute name="issuedate">
5233         <xsl:value-of select="/wp:WorkPackage/wp:wpmeta/wp:WorkPackageGenerationDate"/>
5234       </xsl:attribute>
5235       <xsl:attribute name="user">
5236         <xsl:value-of select="/wp:WorkPackage/wp:wpmeta/wp:User"/>
5237       </xsl:attribute>
5238       <xsl:attribute name="increfdoc"/>
5239       <xsl:attribute name="cover"/>
5240       <xsl:choose>
5241         <xsl:when test=''/wp:WorkPackage/wp:wpmeta/wp:SplitFlag = "N"''>
5242           <xsl:attribute name="single">
5243             <xsl:value-of select=''concat("true","")''/>
5244           </xsl:attribute>
5245         </xsl:when>
5246         <xsl:otherwise>
5247           <xsl:attribute name="single">
5248             <xsl:value-of select=''concat("false","")''/>
5249           </xsl:attribute>
5250         </xsl:otherwise>
5251       </xsl:choose>
5252       <xsl:attribute name="logo">
5253         <xsl:value-of select=''concat("","")''/>
5254       </xsl:attribute>
5255       <wpmeta>
5256         <type>
5257           <xsl:attribute name="value">
5258             <xsl:value-of select="/wp:WorkPackage/wp:wpmeta/wp:RequestType"/>
5259           </xsl:attribute>
5260         </type>
5261         <visitDetails>
5262           <visitno>
5263             <xsl:attribute name="value">
5264               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:VisitNumber"/>
5265             </xsl:attribute>
5266           </visitno>
5267           <visittype>
5268             <xsl:attribute name="value">
5269               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:VisitType"/>
5270             </xsl:attribute>
5271           </visittype>
5272           <plannedstartdate>
5273             <xsl:attribute name="value">
5274               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:PlannedStartDate"/>
5275             </xsl:attribute>
5276           </plannedstartdate>
5277           <plannedenddate>
5278             <xsl:attribute name="value">
5279               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:PlannedEndDate"/>
5280             </xsl:attribute>
5281           </plannedenddate>
5282           <organization>
5283             <xsl:attribute name="value">
5284               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:Organization"/>
5285             </xsl:attribute>
5286           </organization>
5287           <department>
5288             <xsl:attribute name="value">
5289               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:Department"/>
5290             </xsl:attribute>
5291           </department>
5292           <nrtitle>
5293             <xsl:attribute name="value">
5294               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:NonRoutineTitle"/>
5295             </xsl:attribute>
5296           </nrtitle>
5297           <subinventory>
5298             <xsl:attribute name="value">
5299               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:SubInventory"/>
5300             </xsl:attribute>
5301           </subinventory>
5302           <locator>
5303             <xsl:attribute name="value">
5304               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:Locator"/>
5305             </xsl:attribute>
5306           </locator>
5307           <releasedate>
5308             <xsl:attribute name="value">
5309               <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:ReleaseDate"/>
5310             </xsl:attribute>
5311           </releasedate>
5312         </visitDetails>
5313         <orgvalprint>
5314           <xsl:attribute name="value">
5315             <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:Organization"/>
5316           </xsl:attribute>
5317         </orgvalprint>
5318         <orgcertificate>
5319           <xsl:attribute name="value"/>
5320         </orgcertificate>
5321         <acnha>
5322           <xsl:attribute name="value">
5323             <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:UnitName"/>
5324           </xsl:attribute>
5325         </acnha>
5326         <engine>
5327           <xsl:attribute name="value">
5328             <xsl:value-of select="/wp:WorkPackage/wp:VisitDetails/wp:UnitName"/>
5329           </xsl:attribute>
5330         </engine>
5331       </wpmeta>';
5332       l_xsl_part2 := '<xsl:for-each select="/wp:WorkPackage/wp:MrPackage">
5333         <mrpackage>
5334           <xsl:attribute name="id">
5335             <xsl:value-of select=''concat("MR-",wp:UnitEffectivityId)''/>
5336           </xsl:attribute>
5337           <xsl:attribute name="mrtitle">
5338             <xsl:value-of select="wp:Title"/>
5339           </xsl:attribute>
5340           <xsl:attribute name="mrdesc">
5341             <xsl:value-of select="wp:Descripton"/>
5342           </xsl:attribute>
5343           <xsl:attribute name="progtype">
5344             <xsl:value-of select="wp:ProgramType"/>
5345           </xsl:attribute>
5346           <xsl:attribute name="progsubtype">
5347             <xsl:value-of select="wp:ProgramSubType"/>
5348           </xsl:attribute>
5349           <xsl:attribute name="revdate">
5350             <xsl:value-of select="wp:RevisionDate"/>
5351           </xsl:attribute>
5352           <xsl:attribute name="revno">
5353             <xsl:value-of select="wp:Version"/>
5354           </xsl:attribute>
5355           <xsl:attribute name="releasedate">
5356             <xsl:value-of select="wp:ReleaseDate"/>
5357           </xsl:attribute>
5358           <xsl:attribute name="duecounter">
5359             <xsl:value-of select=''concat(wp:DueCounterValue," ",wp:UOM)''/>
5360           </xsl:attribute>
5361           <xsl:attribute name="accompcounter">
5362             <xsl:value-of select=''concat(wp:LastAccomplishmentValue," ",wp:UOM)''/>
5363           </xsl:attribute>
5364           <xsl:attribute name="intercounter">
5365             <xsl:value-of select=''concat(wp:IntervalValue," ",wp:UOM)''/>
5366           </xsl:attribute>
5367           <xsl:for-each select="wp:ChildMR">
5368             <childMR>
5369               <xsl:attribute name="id">
5370                 <xsl:value-of select=''concat("MR-",wp:UnitEffectivityId)''/>
5371               </xsl:attribute>
5372               <xsl:attribute name="mrtitle">
5373                 <xsl:value-of select="wp:Title"/>
5374               </xsl:attribute>
5375             </childMR>
5376           </xsl:for-each>';
5377           l_xsl_part3 := '<xsl:for-each select="wp:job_card">
5378             <job_card>
5379               <xsl:attribute name="id">
5380                 <xsl:value-of select=''concat("WO-",wp:WorkorderId)''/>
5381               </xsl:attribute>
5382               <xsl:attribute name="revdate">
5383                 <xsl:value-of select="../../wp:wpmeta/wp:WorkPackageGenerationDate"/>
5384               </xsl:attribute>
5385               <xsl:attribute name="user">
5386                 <xsl:value-of select="../../wp:wpmeta/wp:User"/>
5387               </xsl:attribute>
5388               <xsl:attribute name="issuedate">
5389                 <xsl:value-of select="../../wp:wpmeta/wp:WorkPackageGenerationDate"/>
5390               </xsl:attribute>
5391               <jcmeta>
5392                 <workorderid>
5393                   <xsl:attribute name="value">
5394                     <xsl:value-of select="wp:WorkorderNumber"/>
5395                   </xsl:attribute>
5396                 </workorderid>
5397                 <originwo>
5398                   <xsl:attribute name="value">
5399                     <xsl:value-of select="wp:OriginatingWorkorder"/>
5400                   </xsl:attribute>
5401                 </originwo>
5402                 <xsl:for-each select="wp:ItemCounters/wp:ItemCounter">
5403                   <counter>
5404                     <xsl:attribute name="name">
5405                       <xsl:value-of select="wp:CounterName"/>
5406                     </xsl:attribute>
5407                     <xsl:attribute name="lastreading">
5408                       <xsl:value-of select="wp:CurrentReading"/>
5409                     </xsl:attribute>
5410                   </counter>
5411                 </xsl:for-each>
5412                 <item>
5413                   <xsl:attribute name="value">
5414                     <xsl:value-of select="wp:ItemNumber"/>
5415                   </xsl:attribute>
5416                 </item>
5417                 <sn>
5418                   <xsl:attribute name="value">
5419                     <xsl:value-of select="wp:SerialNumber"/>
5420                   </xsl:attribute>
5421                 </sn>
5422                 <instance>
5423                   <xsl:attribute name="value">
5424                     <xsl:value-of select="wp:InstanceNumber"/>
5425                   </xsl:attribute>
5426                 </instance>
5427                 <qty>
5428                   <xsl:attribute name="value">
5429                     <xsl:value-of select="wp:Quantity"/>
5430                   </xsl:attribute>
5431                 </qty>
5432                 <position>
5433                   <xsl:attribute name="value">
5434                     <xsl:value-of select="wp:Position"/>
5435                   </xsl:attribute>
5436                 </position>
5437                 <owner>
5438                   <xsl:attribute name="value">
5439                     <xsl:value-of select="wp:ItemOwner"/>
5440                   </xsl:attribute>
5441                 </owner>
5442                 <unit>
5443                   <xsl:attribute name="value">
5444                     <xsl:value-of select="wp:UnitName"/>
5445                   </xsl:attribute>
5446                 </unit>
5447                 <routeno>
5448                   <xsl:attribute name="value">
5449                     <xsl:value-of select="wp:Route/wp:RouteNumber"/>
5450                   </xsl:attribute>
5451                 </routeno>
5452                 <desc>
5453                   <xsl:attribute name="value">
5454                     <xsl:value-of select="wp:Description"/>
5455                   </xsl:attribute>
5456                 </desc>
5457                 <revdate>
5458                   <xsl:attribute name="value">
5459                     <xsl:value-of select="wp:Route/wp:RevisionDate"/>
5460                   </xsl:attribute>
5461                 </revdate>
5462                 <revno>
5463                   <xsl:attribute name="value">
5464                     <xsl:value-of select="wp:Route/wp:Revision"/>
5465                   </xsl:attribute>
5466                 </revno>
5467                 <nonroutine>
5468                   <xsl:attribute name="value">
5469                     <xsl:value-of select="wp:NonRoutineNumber"/>
5470                   </xsl:attribute>
5471                 </nonroutine>
5472                 <resources>
5473                   <xsl:for-each select="wp:ResourceRequirements/wp:ResourceRequirement">
5474                     <resource>
5475                       <xsl:attribute name="operseq">
5476                         <xsl:value-of select="wp:OperationSequenceNumber"/>
5477                       </xsl:attribute>
5478                       <xsl:attribute name="resourcetype">
5479                         <xsl:value-of select="wp:ResourceType"/>
5480                       </xsl:attribute>
5481                       <xsl:attribute name="resourceCode">
5482                         <xsl:value-of select="wp:ResourceCode"/>
5483                       </xsl:attribute>
5484                       <xsl:attribute name="desc">
5485                         <xsl:value-of select="wp:Description"/>
5486                       </xsl:attribute>
5487                       <xsl:attribute name="qty">
5488                         <xsl:value-of select="wp:Quantity"/>
5489                       </xsl:attribute>
5490                       <DFF1>
5491                         <xsl:attribute name="value">
5492                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute1"/>
5493                         </xsl:attribute>
5494                       </DFF1>
5495                       <DFF2>
5496                         <xsl:attribute name="value">
5497                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute2"/>
5498                         </xsl:attribute>
5499                       </DFF2>
5500                       <DFF3>
5501                         <xsl:attribute name="value">
5502                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute3"/>
5503                         </xsl:attribute>
5504                       </DFF3>
5505                       <DFF4>
5506                         <xsl:attribute name="value">
5507                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute4"/>
5508                         </xsl:attribute>
5509                       </DFF4>
5510                       <DFF5>
5511                         <xsl:attribute name="value">
5512                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute5"/>
5513                         </xsl:attribute>
5514                       </DFF5>
5515                       <DFF6>
5516                         <xsl:attribute name="value">
5517                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute6"/>
5518                         </xsl:attribute>
5519                       </DFF6>
5520                       <DFF7>
5521                         <xsl:attribute name="value">
5522                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute7"/>
5523                         </xsl:attribute>
5524                       </DFF7>
5525                       <DFF8>
5526                         <xsl:attribute name="value">
5527                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute8"/>
5528                         </xsl:attribute>
5529                       </DFF8>
5530                       <DFF9>
5531                         <xsl:attribute name="value">
5532                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute9"/>
5533                         </xsl:attribute>
5534                       </DFF9>
5535                       <DFF10>
5536                         <xsl:attribute name="value">
5537                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute10"/>
5538                         </xsl:attribute>
5539                       </DFF10>
5540                       <DFF11>
5541                         <xsl:attribute name="value">
5542                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute11"/>
5543                         </xsl:attribute>
5544                       </DFF11>
5545                       <DFF12>
5546                         <xsl:attribute name="value">
5547                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute12"/>
5548                         </xsl:attribute>
5549                       </DFF12>
5550                       <DFF13>
5551                         <xsl:attribute name="value">
5552                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute13"/>
5553                         </xsl:attribute>
5554                       </DFF13>
5555                       <DFF14>
5556                         <xsl:attribute name="value">
5557                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute14"/>
5558                         </xsl:attribute>
5559                       </DFF14>
5560                       <DFF15>
5561                         <xsl:attribute name="value">
5562                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute15"/>
5563                         </xsl:attribute>
5564                       </DFF15>
5565                     </resource>
5566                   </xsl:for-each>
5567                 </resources>
5568                 <tools>
5569                   <xsl:for-each select="wp:Tools/wp:Tool">
5570                     <tool>
5571                       <xsl:attribute name="itemtype">
5572                         <xsl:value-of select="wp:ItemType"/>
5573                       </xsl:attribute>
5574                       <xsl:attribute name="itemno">
5575                         <xsl:value-of select="wp:Item"/>
5576                       </xsl:attribute>
5577                       <xsl:attribute name="desc">
5578                         <xsl:value-of select="wp:Description"/>
5579                       </xsl:attribute>
5580                       <xsl:attribute name="qty">
5581                         <xsl:value-of select="wp:Quantity"/>
5582                       </xsl:attribute>
5583                     </tool>
5584                   </xsl:for-each>
5585                 </tools>
5586                 <materials>
5587                   <xsl:for-each select="wp:MaterialRequirements/wp:MaterialRequirement">
5588                     <material>
5589                       <xsl:attribute name="operseq">
5590                         <xsl:value-of select="wp:OperationSequenceNumber"/>
5591                       </xsl:attribute>
5592                       <xsl:attribute name="itemno">
5593                         <xsl:value-of select="wp:ItemNumber"/>
5594                       </xsl:attribute>
5595                       <xsl:attribute name="desc">
5596                         <xsl:value-of select="wp:ItemDescription"/>
5597                       </xsl:attribute>
5598                       <xsl:attribute name="itemgroup">
5599                         <xsl:value-of select="wp:ItemGroup"/>
5600                       </xsl:attribute>
5601                       <xsl:attribute name="itemtype">
5602                         <xsl:value-of select="wp:ItemType"/>
5603                       </xsl:attribute>
5604                       <xsl:attribute name="qty">
5605                         <xsl:value-of select=''concat(wp:RequiredQuantity," ",wp:UOM)''/>
5606                       </xsl:attribute>
5607                       <xsl:attribute name="reqdate">
5608                         <xsl:value-of select="wp:RequiredDate"/>
5609                       </xsl:attribute>
5610                     </material>
5611                   </xsl:for-each>
5612                 </materials>
5613                 <QCP>
5614                   <xsl:if test=''wp:IsQualityEnabled = "T"''>
5615                     <table>
5616                       <xsl:attribute name="id">
5617                         <xsl:value-of select="wp:QaPlan/wp:PlanName"/>
5618                       </xsl:attribute>
5619                       <xsl:attribute name="cols">
5620                         <xsl:value-of select="count(wp:QaPlan/wp:QualityPlanAttribute)"/>
5621                       </xsl:attribute>
5622                       <xsl:for-each select="wp:QaPlan/wp:QualityPlanAttribute">
5623                         <columntitle>
5624                           <name>
5625                             <xsl:value-of select="wp:Prompt"/>
5626                           </name>
5627                         </columntitle>
5628                       </xsl:for-each>
5629                       <rows>
5630                         <xsl:for-each select="wp:QaResults/wp:QualityResultRec">
5631                           <row>
5632                             <xsl:for-each select="wp:QualityPlanAttribute">
5633                               <columnvalue>
5634                                 <xsl:value-of select="wp:AttributeValue"/>
5635                               </columnvalue>
5636                             </xsl:for-each>
5637                           </row>
5638                         </xsl:for-each>
5639                       </rows>
5640                     </table>
5641                   </xsl:if>
5642                 </QCP>
5643                 <woOperations>
5644                   <xsl:for-each select="wp:WoOperations/wp:WoOperation">
5645                     <woOperation>
5646                       <xsl:attribute name="operseq">
5647                         <xsl:value-of select="wp:OperationSequenceNumber"/>
5648                       </xsl:attribute>
5649                       <xsl:attribute name="desc">
5650                         <xsl:value-of select="wp:OperationDesc"/>
5651                       </xsl:attribute>
5652                       <QCP>
5653                         <xsl:if test=''wp:IsQualityEnabled = "T"''>
5654                           <table>
5655                             <xsl:attribute name="id">
5656                               <xsl:value-of select="wp:QaPlan/wp:PlanName"/>
5657                             </xsl:attribute>
5658                             <xsl:attribute name="cols">
5659                               <xsl:value-of select="count(wp:QaPlan/wp:QualityPlanAttribute)"/>
5660                             </xsl:attribute>
5661                             <xsl:for-each select="wp:QaPlan/wp:QualityPlanAttribute">
5662                               <columntitle>
5663                                 <name>
5664                                   <xsl:value-of select="wp:Prompt"/>
5665                                 </name>
5666                               </columntitle>
5667                             </xsl:for-each>
5668                             <rows>
5669                               <xsl:for-each select="wp:QaResults/wp:QualityResultRec">
5670                                 <row>
5671                                   <xsl:for-each select="wp:QualityPlanAttribute">
5672                                     <columnvalue>
5673                                       <xsl:value-of select="wp:AttributeValue"/>
5674                                     </columnvalue>
5675                                   </xsl:for-each>
5676                                 </row>
5677                               </xsl:for-each>
5678                             </rows>
5679                           </table>
5680                         </xsl:if>
5681                       </QCP>
5682                     </woOperation>
5683                   </xsl:for-each>
5684                 </woOperations>
5685                 <releasedate>
5686                   <xsl:attribute name="value">
5687                     <xsl:value-of select="wp:ReleaseDate"/>
5688                   </xsl:attribute>
5689                 </releasedate>
5690               </jcmeta>';
5691               l_xsl_part4 := '<routes>
5692                 <route>
5693                   <xsl:attribute name="id">
5694                     <xsl:value-of select="wp:Route/wp:RouteId"/>
5695                   </xsl:attribute>
5696                   <xsl:attribute name="ata">
5697                     <xsl:value-of select="wp:ATACode"/>
5698                   </xsl:attribute>
5699                   <xsl:attribute name="type">
5700                     <xsl:value-of select="wp:Route/wp:RouteType"/>
5701                   </xsl:attribute>
5702                   <xsl:attribute name="src">
5703                     <xsl:value-of select="wp:Route/wp:EnigmaDocId"/>
5704                   </xsl:attribute>
5705                   <routemeta>
5706                     <routeno>
5707                       <xsl:attribute name="value">
5708                         <xsl:value-of select="wp:Route/wp:RouteNumber"/>
5709                       </xsl:attribute>
5710                     </routeno>
5711                     <title>
5712                       <xsl:attribute name="value">
5713                         <xsl:value-of select="wp:Route/wp:RouteTitle"/>
5714                       </xsl:attribute>
5715                     </title>
5716                     <process>
5717                       <xsl:attribute name="value">
5718                         <xsl:value-of select="wp:Route/wp:Process"/>
5719                       </xsl:attribute>
5720                     </process>
5721                     <model>
5722                       <xsl:attribute name="value">
5723                         <xsl:value-of select="wp:Route/wp:ModelCode"/>
5724                       </xsl:attribute>
5725                     </model>
5726                     <layout>
5727                       <xsl:attribute name="value">
5728                         <xsl:value-of select="wp:Route/wp:JobCardType"/>
5729                       </xsl:attribute>
5730                     </layout>
5731                     <zone>
5732                       <xsl:attribute name="value">
5733                         <xsl:value-of select="wp:Route/wp:Zone"/>
5734                       </xsl:attribute>
5735                     </zone>
5736                     <xsl:for-each select="wp:Route/wp:AssociatedDocuments/wp:AssociatedDocument">
5737                       <refdoc>
5738                         <xsl:attribute name="docsubtype">
5739                           <xsl:value-of select="wp:DocumentSubType"/>
5740                         </xsl:attribute>
5741                         <xsl:attribute name="docno">
5742                           <xsl:value-of select="wp:DocumentNumber"/>
5743                         </xsl:attribute>
5744                         <xsl:attribute name="docrev">
5745                           <xsl:value-of select="wp:RevisionNumber"/>
5746                         </xsl:attribute>
5747                         <xsl:attribute name="docata">
5748                           <xsl:value-of select=''concat(wp:Chapter,"-",wp:Section,"-",wp:Subject)''/>
5749                         </xsl:attribute>
5750                         <xsl:attribute name="title">
5751                           <xsl:value-of select="wp:DocumentTitle"/>
5752                         </xsl:attribute>
5753                       </refdoc>
5754                     </xsl:for-each>
5755                     <KFF1>
5756                       <xsl:attribute name="value">
5757                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment1Desc"/>
5758                       </xsl:attribute>
5759                     </KFF1>
5760                     <KFF2>
5761                       <xsl:attribute name="value">
5762                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment2Desc"/>
5763                       </xsl:attribute>
5764                     </KFF2>
5765                     <KFF3>
5766                       <xsl:attribute name="value">
5767                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment3Desc"/>
5768                       </xsl:attribute>
5769                     </KFF3>
5770                     <KFF4>
5771                       <xsl:attribute name="value">
5772                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment4Desc"/>
5773                       </xsl:attribute>
5774                     </KFF4>
5775                     <KFF5>
5776                       <xsl:attribute name="value">
5777                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment5Desc"/>
5778                       </xsl:attribute>
5779                     </KFF5>
5780                     <KFF6>
5781                       <xsl:attribute name="value">
5782                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment6Desc"/>
5783                       </xsl:attribute>
5784                     </KFF6>
5785                     <KFF7>
5786                       <xsl:attribute name="value">
5787                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment7Desc"/>
5788                       </xsl:attribute>
5789                     </KFF7>
5790                     <KFF8>
5791                       <xsl:attribute name="value">
5792                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment8Desc"/>
5793                       </xsl:attribute>
5794                     </KFF8>
5795                     <KFF9>
5796                       <xsl:attribute name="value">
5797                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment9Desc"/>
5798                       </xsl:attribute>
5799                     </KFF9>
5800                     <KFF10>
5801                       <xsl:attribute name="value">
5802                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment10Desc"/>
5803                       </xsl:attribute>
5804                     </KFF10>
5805                     <KFF11>
5806                       <xsl:attribute name="value">
5807                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment11Desc"/>
5808                       </xsl:attribute>
5809                     </KFF11>
5810                     <KFF12>
5811                       <xsl:attribute name="value">
5812                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment12Desc"/>
5813                       </xsl:attribute>
5814                     </KFF12>
5815                     <KFF13>
5816                       <xsl:attribute name="value">
5817                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment13Desc"/>
5818                       </xsl:attribute>
5819                     </KFF13>
5820                     <KFF14>
5821                       <xsl:attribute name="value">
5822                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment14Desc"/>
5823                       </xsl:attribute>
5824                     </KFF14>
5825                     <KFF15>
5826                       <xsl:attribute name="value">
5827                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment15Desc"/>
5828                       </xsl:attribute>
5829                     </KFF15>
5830                     <DFF1>
5831                       <xsl:attribute name="value">
5832                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute1"/>
5833                       </xsl:attribute>
5834                     </DFF1>
5835                     <DFF2>
5836                       <xsl:attribute name="value">
5837                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute2"/>
5838                       </xsl:attribute>
5839                     </DFF2>
5840                     <DFF3>
5841                       <xsl:attribute name="value">
5842                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute3"/>
5843                       </xsl:attribute>
5844                     </DFF3>
5845                     <DFF4>
5846                       <xsl:attribute name="value">
5847                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute4"/>
5848                       </xsl:attribute>
5849                     </DFF4>
5850                     <DFF5>
5851                       <xsl:attribute name="value">
5852                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute5"/>
5853                       </xsl:attribute>
5854                     </DFF5>
5855                     <DFF6>
5856                       <xsl:attribute name="value">
5857                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute6"/>
5858                       </xsl:attribute>
5859                     </DFF6>
5860                     <DFF7>
5861                       <xsl:attribute name="value">
5862                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute7"/>
5863                       </xsl:attribute>
5864                     </DFF7>
5865                     <DFF8>
5866                       <xsl:attribute name="value">
5867                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute8"/>
5868                       </xsl:attribute>
5869                     </DFF8>
5870                     <DFF9>
5871                       <xsl:attribute name="value">
5872                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute9"/>
5873                       </xsl:attribute>
5874                     </DFF9>
5875                     <DFF10>
5876                       <xsl:attribute name="value">
5877                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute10"/>
5878                       </xsl:attribute>
5879                     </DFF10>
5880                     <DFF11>
5881                       <xsl:attribute name="value">
5882                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute11"/>
5883                       </xsl:attribute>
5884                     </DFF11>
5885                     <DFF12>
5886                       <xsl:attribute name="value">
5887                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute12"/>
5888                       </xsl:attribute>
5889                     </DFF12>
5890                     <DFF13>
5891                       <xsl:attribute name="value">
5892                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute13"/>
5893                       </xsl:attribute>
5894                     </DFF13>
5895                     <DFF14>
5896                       <xsl:attribute name="value">
5897                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute14"/>
5898                       </xsl:attribute>
5899                     </DFF14>
5900                     <DFF15>
5901                       <xsl:attribute name="value">
5902                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute15"/>
5903                       </xsl:attribute>
5904                     </DFF15>
5905                     <xsl:for-each select="wp:Route/wp:Operations/wp:Operation">
5906                       <operation>
5907                         <xsl:attribute name="operationid">
5908                           <xsl:value-of select="wp:OperationCode"/>
5909                         </xsl:attribute>
5910                         <xsl:attribute name="src">
5911                           <xsl:value-of select="wp:EnigmaDocId"/>
5912                         </xsl:attribute>
5913                         <operseq>
5914                           <xsl:attribute name="value">
5915                             <xsl:value-of select="wp:OperationSequenceNumber"/>
5916                           </xsl:attribute>
5917                         </operseq>
5918                         <operno>
5919                           <xsl:attribute name="value">
5920                             <xsl:value-of select="wp:OperationCode"/>
5921                           </xsl:attribute>
5922                         </operno>
5923                         <xsl:for-each select="wp:AssociatedDocuments/wp:AssociatedDocument">
5924                           <refdoc>
5925                             <xsl:attribute name="docsubtype">
5926                               <xsl:value-of select="wp:DocumentSubType"/>
5927                             </xsl:attribute>
5928                             <xsl:attribute name="docno">
5929                               <xsl:value-of select="wp:DocumentNumber"/>
5930                             </xsl:attribute>
5931                             <xsl:attribute name="docrev">
5932                               <xsl:value-of select="wp:RevisionNumber"/>
5933                             </xsl:attribute>
5934                             <xsl:attribute name="docata">
5935                               <xsl:value-of select=''concat(wp:Chapter,"-",wp:Section,"-",wp:Subject)''/>
5936                             </xsl:attribute>
5937                             <xsl:attribute name="title">
5938                               <xsl:value-of select="wp:DocumentTitle"/>
5939                             </xsl:attribute>
5940                           </refdoc>
5941                         </xsl:for-each>
5942                         <DFF1>
5943                           <xsl:attribute name="value">
5944                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute1"/>
5945                           </xsl:attribute>
5946                         </DFF1>
5947                         <DFF2>
5948                           <xsl:attribute name="value">
5949                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute2"/>
5950                           </xsl:attribute>
5951                         </DFF2>
5952                         <DFF3>
5953                           <xsl:attribute name="value">
5954                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute3"/>
5955                           </xsl:attribute>
5956                         </DFF3>
5957                         <DFF4>
5958                           <xsl:attribute name="value">
5959                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute4"/>
5960                           </xsl:attribute>
5961                         </DFF4>
5962                         <DFF5>
5963                           <xsl:attribute name="value">
5964                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute5"/>
5965                           </xsl:attribute>
5966                         </DFF5>
5967                         <DFF6>
5968                           <xsl:attribute name="value">
5969                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute6"/>
5970                           </xsl:attribute>
5971                         </DFF6>
5972                         <DFF7>
5973                           <xsl:attribute name="value">
5974                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute7"/>
5975                           </xsl:attribute>
5976                         </DFF7>
5977                         <DFF8>
5978                           <xsl:attribute name="value">
5979                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute8"/>
5980                           </xsl:attribute>
5981                         </DFF8>
5982                         <DFF9>
5983                           <xsl:attribute name="value">
5984                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute9"/>
5985                           </xsl:attribute>
5986                         </DFF9>
5987                         <DFF10>
5988                           <xsl:attribute name="value">
5989                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute10"/>
5990                           </xsl:attribute>
5991                         </DFF10>
5992                         <DFF11>
5993                           <xsl:attribute name="value">
5994                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute11"/>
5995                           </xsl:attribute>
5996                         </DFF11>
5997                         <DFF12>
5998                           <xsl:attribute name="value">
5999                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute12"/>
6000                           </xsl:attribute>
6001                         </DFF12>
6002                         <DFF13>
6003                           <xsl:attribute name="value">
6004                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute13"/>
6005                           </xsl:attribute>
6006                         </DFF13>
6007                         <DFF14>
6008                           <xsl:attribute name="value">
6009                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute14"/>
6010                           </xsl:attribute>
6011                         </DFF14>
6012                         <DFF15>
6013                           <xsl:attribute name="value">
6014                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute15"/>
6015                           </xsl:attribute>
6016                         </DFF15>
6017                         <title>
6018                           <xsl:attribute name="value">
6019                             <xsl:value-of select="wp:OpDescription"/>
6020                           </xsl:attribute>
6021                         </title>
6022                         <revno>
6023                           <xsl:attribute name="value">
6024                             <xsl:value-of select="wp:Revision"/>
6025                           </xsl:attribute>
6026                         </revno>
6027                         <revdate>
6028                           <xsl:attribute name="value">
6029                             <xsl:value-of select="wp:RevisionDate"/>
6030                           </xsl:attribute>
6031                         </revdate>
6032                       </operation>
6033                     </xsl:for-each>
6034                   </routemeta>
6035                 </route>
6036               </routes>
6037             </job_card>
6038           </xsl:for-each>
6039           <xsl:for-each select="wp:AssociatedDocuments/wp:AssociatedDocument">
6040             <docrecord>
6041               <docsubtype>
6042                 <xsl:attribute name="value">
6043                   <xsl:value-of select="wp:DocumentSubType"/>
6044                 </xsl:attribute>
6045               </docsubtype>
6046               <docno>
6047                 <xsl:attribute name="value">
6048                   <xsl:value-of select="wp:DocumentNumber"/>
6049                 </xsl:attribute>
6050               </docno>
6051             </docrecord>
6052           </xsl:for-each>
6053         </mrpackage>
6054       </xsl:for-each>';
6055       l_xsl_part5 := '<xsl:for-each select="/wp:WorkPackage/wp:NrPackage">
6056         <nrpackage>
6057           <xsl:attribute name="id">
6058             <xsl:value-of select=''concat("NR-",wp:UnitEffectivityId)''/>
6059           </xsl:attribute>
6060           <xsl:attribute name="nrtitle">
6061             <xsl:value-of select="wp:Title"/>
6062           </xsl:attribute>
6063           <xsl:attribute name="nrtype">
6064             <xsl:value-of select="wp:NonRoutineType"/>
6065           </xsl:attribute>
6066           <xsl:attribute name="flightNumber">
6067             <xsl:value-of select="wp:FlightNumber"/>
6068           </xsl:attribute>
6069           <xsl:attribute name="logseries">
6070             <xsl:value-of select="wp:LogSeries"/>
6071           </xsl:attribute>
6072           <xsl:attribute name="lognumber">
6073             <xsl:value-of select="wp:LogNumber"/>
6074           </xsl:attribute>
6075           <xsl:attribute name="item">
6076             <xsl:value-of select="wp:Item"/>
6077           </xsl:attribute>
6078           <xsl:attribute name="serial">
6079             <xsl:value-of select="wp:SerialNumber"/>
6080           </xsl:attribute>
6081           <xsl:attribute name="status">
6082             <xsl:value-of select="wp:Status"/>
6083           </xsl:attribute>
6084           <xsl:attribute name="requestdate">
6085             <xsl:value-of select="wp:RequestDate"/>
6086           </xsl:attribute>
6087           <xsl:attribute name="incidentdate">
6088             <xsl:value-of select="wp:IncidentDate"/>
6089           </xsl:attribute>
6090           <xsl:attribute name="releasedate">
6091             <xsl:value-of select="wp:ReleaseDate"/>
6092           </xsl:attribute>
6093           <xsl:attribute name="workorderno">
6094             <xsl:value-of select="wp:WorkorderNo"/>
6095           </xsl:attribute>
6096           <xsl:attribute name="customer">
6097             <xsl:value-of select="wp:Customer"/>
6098           </xsl:attribute>
6099           <xsl:attribute name="contact">
6100             <xsl:value-of select="wp:Contact"/>
6101           </xsl:attribute>
6102           <xsl:attribute name="problemcode">
6103             <xsl:value-of select="wp:ProblemCode"/>
6104           </xsl:attribute>
6105           <xsl:attribute name="problemsummary">
6106             <xsl:value-of select="wp:ProblemSummary"/>
6107           </xsl:attribute>
6108           <xsl:attribute name="severity">
6109             <xsl:value-of select="wp:Severity"/>
6110           </xsl:attribute>
6111           <xsl:attribute name="resolvebydate">
6112             <xsl:value-of select="wp:ResolveByDate"/>
6113           </xsl:attribute>
6114           <xsl:attribute name="resolutioncode">
6115             <xsl:value-of select="wp:ResolutionCode"/>
6116           </xsl:attribute>
6117           <xsl:attribute name="positionATA">
6118             <xsl:value-of select="wp:PositionATA"/>
6119           </xsl:attribute>
6120           <xsl:attribute name="ataDesc">
6121             <xsl:value-of select="wp:AtaDesc"/>
6122           </xsl:attribute>
6123           <xsl:attribute name="melcdltype">
6124             <xsl:value-of select="wp:MelCdlType"/>
6125           </xsl:attribute>
6126           <xsl:attribute name="melcdlstatus">
6127             <xsl:value-of select="wp:MelCdlStatus"/>
6128           </xsl:attribute>
6129           <xsl:attribute name="pcnode">
6130             <xsl:value-of select="wp:PcNode"/>
6131           </xsl:attribute>
6132           <xsl:attribute name="revno">
6133             <xsl:value-of select="wp:RevNo"/>
6134           </xsl:attribute>
6135           <xsl:attribute name="repaircategory">
6136             <xsl:value-of select="wp:RepairCategory"/>
6137           </xsl:attribute>
6138           <xsl:attribute name="duedate">
6139             <xsl:value-of select="wp:DueDate"/>
6140           </xsl:attribute>
6141           <xsl:attribute name="repairtime">
6142             <xsl:value-of select="wp:RepairTime"/>
6143           </xsl:attribute>
6144           <xsl:attribute name="remarks">
6145             <xsl:value-of select="wp:Remarks"/>
6146           </xsl:attribute>
6147           <xsl:for-each select="wp:ChildMR">
6148             <childMR>
6149               <xsl:attribute name="id">
6150                 <xsl:value-of select=''concat("MR-",wp:UnitEffectivityId)''/>
6151               </xsl:attribute>
6152               <xsl:attribute name="mrtitle">
6153                 <xsl:value-of select="wp:Title"/>
6154               </xsl:attribute>
6155             </childMR>
6156           </xsl:for-each>';
6157           l_xsl_part6 := '<xsl:for-each select="wp:job_card">
6158             <job_card>
6159               <xsl:attribute name="id">
6160                 <xsl:value-of select=''concat("WO","-",wp:WorkorderId)''/>
6161               </xsl:attribute>
6162               <xsl:attribute name="revdate">
6163                 <xsl:value-of select="../../wp:wpmeta/wp:WorkPackageGenerationDate"/>
6164               </xsl:attribute>
6165               <xsl:attribute name="user">
6166                 <xsl:value-of select="../../wp:wpmeta/wp:User"/>
6167               </xsl:attribute>
6168               <xsl:attribute name="issuedate">
6169                 <xsl:value-of select="../../wp:wpmeta/wp:WorkPackageGenerationDate"/>
6170               </xsl:attribute>
6171               <jcmeta>
6172                 <workorderid>
6173                   <xsl:attribute name="value">
6174                     <xsl:value-of select="wp:WorkorderNumber"/>
6175                   </xsl:attribute>
6176                 </workorderid>
6177                 <originwo>
6178                   <xsl:attribute name="value">
6179                     <xsl:value-of select="wp:OriginatingWorkorder"/>
6180                   </xsl:attribute>
6181                 </originwo>
6182                 <xsl:for-each select="wp:ItemCounters/wp:ItemCounter">
6183                   <counter>
6184                     <xsl:attribute name="name">
6185                       <xsl:value-of select="wp:CounterName"/>
6186                     </xsl:attribute>
6187                     <xsl:attribute name="lastreading">
6188                       <xsl:value-of select="wp:CurrentReading"/>
6189                     </xsl:attribute>
6190                   </counter>
6191                 </xsl:for-each>
6192                 <item>
6193                   <xsl:attribute name="value">
6194                     <xsl:value-of select="wp:ItemNumber"/>
6195                   </xsl:attribute>
6196                 </item>
6197                 <sn>
6198                   <xsl:attribute name="value">
6199                     <xsl:value-of select="wp:SerialNumber"/>
6200                   </xsl:attribute>
6201                 </sn>
6202                 <instance>
6203                   <xsl:attribute name="value">
6204                     <xsl:value-of select="wp:InstanceNumber"/>
6205                   </xsl:attribute>
6206                 </instance>
6207                 <qty>
6208                   <xsl:attribute name="value">
6209                     <xsl:value-of select="wp:Quantity"/>
6210                   </xsl:attribute>
6211                 </qty>
6212                 <position>
6213                   <xsl:attribute name="value">
6214                     <xsl:value-of select="wp:Position"/>
6215                   </xsl:attribute>
6216                 </position>
6217                 <owner>
6218                   <xsl:attribute name="value">
6219                     <xsl:value-of select="wp:ItemOwner"/>
6220                   </xsl:attribute>
6221                 </owner>
6222                 <unit>
6223                   <xsl:attribute name="value">
6224                     <xsl:value-of select="wp:UnitName"/>
6225                   </xsl:attribute>
6226                 </unit>
6227                 <routeno>
6228                   <xsl:attribute name="value">
6229                     <xsl:value-of select="wp:Route/wp:RouteNumber"/>
6230                   </xsl:attribute>
6231                 </routeno>
6232                 <desc>
6233                   <xsl:attribute name="value">
6234                     <xsl:value-of select="wp:Description"/>
6235                   </xsl:attribute>
6236                 </desc>
6237                 <revdate>
6238                   <xsl:attribute name="value">
6239                     <xsl:value-of select="wp:Route/wp:RevisionDate"/>
6240                   </xsl:attribute>
6241                 </revdate>
6242                 <revno>
6243                   <xsl:attribute name="value">
6244                     <xsl:value-of select="wp:Route/wp:Revision"/>
6245                   </xsl:attribute>
6246                 </revno>
6247                 <nonroutine>
6248                   <xsl:attribute name="value">
6249                     <xsl:value-of select="wp:NonRoutineNumber"/>
6250                   </xsl:attribute>
6251                 </nonroutine>
6252                 <resources>
6253                   <xsl:for-each select="wp:ResourceRequirements/wp:ResourceRequirement">
6254                     <resource>
6255                       <xsl:attribute name="operseq">
6256                         <xsl:value-of select="wp:OperationSequenceNumber"/>
6257                       </xsl:attribute>
6258                       <xsl:attribute name="resourcetype">
6259                         <xsl:value-of select="wp:ResourceType"/>
6260                       </xsl:attribute>
6261                       <xsl:attribute name="resourceCode">
6262                         <xsl:value-of select="wp:ResourceCode"/>
6263                       </xsl:attribute>
6264                       <xsl:attribute name="desc">
6265                         <xsl:value-of select="wp:Description"/>
6266                       </xsl:attribute>
6267                       <xsl:attribute name="qty">
6268                         <xsl:value-of select="wp:Quantity"/>
6269                       </xsl:attribute>
6270                       <DFF1>
6271                         <xsl:attribute name="value">
6272                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute1"/>
6273                         </xsl:attribute>
6274                       </DFF1>
6275                       <DFF2>
6276                         <xsl:attribute name="value">
6277                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute2"/>
6278                         </xsl:attribute>
6279                       </DFF2>
6280                       <DFF3>
6281                         <xsl:attribute name="value">
6282                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute3"/>
6283                         </xsl:attribute>
6284                       </DFF3>
6285                       <DFF4>
6286                         <xsl:attribute name="value">
6287                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute4"/>
6288                         </xsl:attribute>
6289                       </DFF4>
6290                       <DFF5>
6291                         <xsl:attribute name="value">
6292                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute5"/>
6293                         </xsl:attribute>
6294                       </DFF5>
6295                       <DFF6>
6296                         <xsl:attribute name="value">
6297                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute6"/>
6298                         </xsl:attribute>
6299                       </DFF6>
6300                       <DFF7>
6301                         <xsl:attribute name="value">
6302                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute7"/>
6303                         </xsl:attribute>
6304                       </DFF7>
6305                       <DFF8>
6306                         <xsl:attribute name="value">
6307                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute8"/>
6308                         </xsl:attribute>
6309                       </DFF8>
6310                       <DFF9>
6311                         <xsl:attribute name="value">
6312                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute9"/>
6313                         </xsl:attribute>
6314                       </DFF9>
6315                       <DFF10>
6316                         <xsl:attribute name="value">
6317                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute10"/>
6318                         </xsl:attribute>
6319                       </DFF10>
6320                       <DFF11>
6321                         <xsl:attribute name="value">
6322                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute11"/>
6323                         </xsl:attribute>
6324                       </DFF11>
6325                       <DFF12>
6326                         <xsl:attribute name="value">
6327                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute12"/>
6328                         </xsl:attribute>
6329                       </DFF12>
6330                       <DFF13>
6331                         <xsl:attribute name="value">
6332                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute13"/>
6333                         </xsl:attribute>
6334                       </DFF13>
6335                       <DFF14>
6336                         <xsl:attribute name="value">
6337                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute14"/>
6338                         </xsl:attribute>
6339                       </DFF14>
6340                       <DFF15>
6341                         <xsl:attribute name="value">
6342                           <xsl:value-of select="wp:ResourceDFFs/wp:Attribute15"/>
6343                         </xsl:attribute>
6344                       </DFF15>
6345                     </resource>
6346                   </xsl:for-each>
6347                 </resources>
6348                 <tools>
6349                   <xsl:for-each select="wp:Tools/wp:Tool">
6350                     <tool>
6351                       <xsl:attribute name="itemtype">
6352                         <xsl:value-of select="wp:ItemType"/>
6353                       </xsl:attribute>
6354                       <xsl:attribute name="itemno">
6355                         <xsl:value-of select="wp:Item"/>
6356                       </xsl:attribute>
6357                       <xsl:attribute name="desc">
6358                         <xsl:value-of select="wp:Description"/>
6359                       </xsl:attribute>
6360                       <xsl:attribute name="qty">
6361                         <xsl:value-of select="wp:Quantity"/>
6362                       </xsl:attribute>
6363                     </tool>
6364                   </xsl:for-each>
6365                 </tools>
6366                 <materials>
6367                   <xsl:for-each select="wp:MaterialRequirements/wp:MaterialRequirement">
6368                     <material>
6369                       <xsl:attribute name="operseq">
6370                         <xsl:value-of select="wp:OperationSequenceNumber"/>
6371                       </xsl:attribute>
6372                       <xsl:attribute name="itemno">
6373                         <xsl:value-of select="wp:ItemNumber"/>
6374                       </xsl:attribute>
6375                       <xsl:attribute name="desc">
6376                         <xsl:value-of select="wp:ItemDescription"/>
6377                       </xsl:attribute>
6378                       <xsl:attribute name="itemgroup">
6379                         <xsl:value-of select="wp:ItemGroup"/>
6380                       </xsl:attribute>
6381                       <xsl:attribute name="itemtype">
6382                         <xsl:value-of select="wp:ItemType"/>
6383                       </xsl:attribute>
6384                       <xsl:attribute name="qty">
6385                         <xsl:value-of select=''concat(wp:RequiredQuantity," ",wp:UOM)''/>
6386                       </xsl:attribute>
6387                       <xsl:attribute name="reqdate">
6388                         <xsl:value-of select="wp:RequiredDate"/>
6389                       </xsl:attribute>
6390                     </material>
6391                   </xsl:for-each>
6392                 </materials>
6393                 <QCP>
6394                   <xsl:if test=''wp:IsQualityEnabled = "T"''>
6395                     <table>
6396                       <xsl:attribute name="id">
6397                         <xsl:value-of select="wp:QaPlan/wp:PlanName"/>
6398                       </xsl:attribute>
6399                       <xsl:attribute name="cols">
6400                         <xsl:value-of select="count(wp:QaPlan/wp:QualityPlanAttribute)"/>
6401                       </xsl:attribute>
6402                       <xsl:for-each select="wp:QaPlan/wp:QualityPlanAttribute">
6403                         <columntitle>
6404                           <name>
6405                             <xsl:value-of select="wp:Prompt"/>
6406                           </name>
6407                         </columntitle>
6408                       </xsl:for-each>
6409                       <rows>
6410                         <xsl:for-each select="wp:QaResults/wp:QualityResultRec">
6411                           <row>
6412                             <xsl:for-each select="wp:QualityPlanAttribute">
6413                               <columnvalue>
6414                                 <xsl:value-of select="wp:AttributeValue"/>
6415                               </columnvalue>
6416                             </xsl:for-each>
6417                           </row>
6418                         </xsl:for-each>
6419                       </rows>
6420                     </table>
6421                   </xsl:if>
6422                 </QCP>
6423                 <woOperations>
6424                   <xsl:for-each select="wp:WoOperations/wp:WoOperation">
6425                     <woOperation>
6426                       <xsl:attribute name="operseq">
6427                         <xsl:value-of select="wp:OperationSequenceNumber"/>
6428                       </xsl:attribute>
6429                       <xsl:attribute name="desc">
6430                         <xsl:value-of select="wp:OperationDesc"/>
6431                       </xsl:attribute>
6432                       <QCP>
6433                         <xsl:if test=''wp:IsQualityEnabled = "T"''>
6434                           <table>
6435                             <xsl:attribute name="id">
6436                               <xsl:value-of select="wp:QaPlan/wp:PlanName"/>
6437                             </xsl:attribute>
6438                             <xsl:attribute name="cols">
6439                               <xsl:value-of select="count(wp:QaPlan/wp:QualityPlanAttribute)"/>
6440                             </xsl:attribute>
6441                             <xsl:for-each select="wp:QaPlan/wp:QualityPlanAttribute">
6442                               <columntitle>
6443                                 <name>
6444                                   <xsl:value-of select="wp:Prompt"/>
6445                                 </name>
6446                               </columntitle>
6447                             </xsl:for-each>
6448                             <rows>
6449                               <xsl:for-each select="wp:QaResults/wp:QualityResultRec">
6450                                 <row>
6451                                   <xsl:for-each select="wp:QualityPlanAttribute">
6452                                     <columnvalue>
6453                                       <xsl:value-of select="wp:AttributeValue"/>
6454                                     </columnvalue>
6455                                   </xsl:for-each>
6456                                 </row>
6457                               </xsl:for-each>
6458                             </rows>
6459                           </table>
6460                         </xsl:if>
6461                       </QCP>
6462                     </woOperation>
6463                   </xsl:for-each>
6464                 </woOperations>
6465                 <releasedate>
6466                   <xsl:attribute name="value">
6467                     <xsl:value-of select="wp:ReleaseDate"/>
6468                   </xsl:attribute>
6469                 </releasedate>
6470               </jcmeta>';
6471               l_xsl_part7 := '<routes>
6472                 <route>
6473                   <xsl:attribute name="id">
6474                     <xsl:value-of select="wp:Route/wp:RouteId"/>
6475                   </xsl:attribute>
6476                   <xsl:attribute name="ata">
6477                     <xsl:value-of select="wp:ATACode"/>
6478                   </xsl:attribute>
6479                   <xsl:attribute name="type">
6480                     <xsl:value-of select="wp:Route/wp:RouteType"/>
6481                   </xsl:attribute>
6482                   <xsl:attribute name="src">
6483                     <xsl:value-of select="wp:Route/wp:EnigmaDocId"/>
6484                   </xsl:attribute>
6485                   <routemeta>
6486                     <routeno>
6487                       <xsl:attribute name="value">
6488                         <xsl:value-of select="wp:Route/wp:RouteNumber"/>
6489                       </xsl:attribute>
6490                     </routeno>
6491                     <title>
6492                       <xsl:attribute name="value">
6493                         <xsl:value-of select="wp:Route/wp:RouteTitle"/>
6494                       </xsl:attribute>
6495                     </title>
6496                     <process>
6497                       <xsl:attribute name="value">
6498                         <xsl:value-of select="wp:Route/wp:Process"/>
6499                       </xsl:attribute>
6500                     </process>
6501                     <model>
6502                       <xsl:attribute name="value">
6503                         <xsl:value-of select="wp:Route/wp:ModelCode"/>
6504                       </xsl:attribute>
6505                     </model>
6506                     <layout>
6507                       <xsl:attribute name="value">
6508                         <xsl:value-of select="wp:Route/wp:JobCardType"/>
6509                       </xsl:attribute>
6510                     </layout>
6511                     <zone>
6512                       <xsl:attribute name="value">
6513                         <xsl:value-of select="wp:Route/wp:Zone"/>
6514                       </xsl:attribute>
6515                     </zone>
6516                     <xsl:for-each select="wp:Route/wp:AssociatedDocuments/wp:AssociatedDocument">
6517                       <refdoc>
6518                         <xsl:attribute name="docsubtype">
6519                           <xsl:value-of select="wp:DocumentSubType"/>
6520                         </xsl:attribute>
6521                         <xsl:attribute name="docno">
6522                           <xsl:value-of select="wp:DocumentNumber"/>
6523                         </xsl:attribute>
6524                         <xsl:attribute name="docrev">
6525                           <xsl:value-of select="wp:RevisionNumber"/>
6526                         </xsl:attribute>
6527                         <xsl:attribute name="docata">
6528                           <xsl:value-of select=''concat(wp:Chapter,"-",wp:Section,"-",wp:Subject)''/>
6529                         </xsl:attribute>
6530                         <xsl:attribute name="title">
6531                           <xsl:value-of select="wp:DocumentTitle"/>
6532                         </xsl:attribute>
6533                       </refdoc>
6534                     </xsl:for-each>
6535                     <KFF1>
6536                       <xsl:attribute name="value">
6537                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment1Desc"/>
6538                       </xsl:attribute>
6539                     </KFF1>
6540                     <KFF2>
6541                       <xsl:attribute name="value">
6542                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment2Desc"/>
6543                       </xsl:attribute>
6544                     </KFF2>
6545                     <KFF3>
6546                       <xsl:attribute name="value">
6547                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment3Desc"/>
6548                       </xsl:attribute>
6549                     </KFF3>
6550                     <KFF4>
6551                       <xsl:attribute name="value">
6552                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment4Desc"/>
6553                       </xsl:attribute>
6554                     </KFF4>
6555                     <KFF5>
6556                       <xsl:attribute name="value">
6557                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment5Desc"/>
6558                       </xsl:attribute>
6559                     </KFF5>
6560                     <KFF6>
6561                       <xsl:attribute name="value">
6562                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment6Desc"/>
6563                       </xsl:attribute>
6564                     </KFF6>
6565                     <KFF7>
6566                       <xsl:attribute name="value">
6567                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment7Desc"/>
6568                       </xsl:attribute>
6569                     </KFF7>
6570                     <KFF8>
6571                       <xsl:attribute name="value">
6572                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment8Desc"/>
6573                       </xsl:attribute>
6574                     </KFF8>
6575                     <KFF9>
6576                       <xsl:attribute name="value">
6577                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment9Desc"/>
6578                       </xsl:attribute>
6579                     </KFF9>
6580                     <KFF10>
6581                       <xsl:attribute name="value">
6582                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment10Desc"/>
6583                       </xsl:attribute>
6584                     </KFF10>
6585                     <KFF11>
6586                       <xsl:attribute name="value">
6587                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment11Desc"/>
6588                       </xsl:attribute>
6589                     </KFF11>
6590                     <KFF12>
6591                       <xsl:attribute name="value">
6592                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment12Desc"/>
6593                       </xsl:attribute>
6594                     </KFF12>
6595                     <KFF13>
6596                       <xsl:attribute name="value">
6597                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment13Desc"/>
6598                       </xsl:attribute>
6599                     </KFF13>
6600                     <KFF14>
6601                       <xsl:attribute name="value">
6602                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment14Desc"/>
6603                       </xsl:attribute>
6604                     </KFF14>
6605                     <KFF15>
6606                       <xsl:attribute name="value">
6607                         <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment15Desc"/>
6608                       </xsl:attribute>
6609                     </KFF15>
6610                     <DFF1>
6611                       <xsl:attribute name="value">
6612                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute1"/>
6613                       </xsl:attribute>
6614                     </DFF1>
6615                     <DFF2>
6616                       <xsl:attribute name="value">
6617                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute2"/>
6618                       </xsl:attribute>
6619                     </DFF2>
6620                     <DFF3>
6621                       <xsl:attribute name="value">
6622                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute3"/>
6623                       </xsl:attribute>
6624                     </DFF3>
6625                     <DFF4>
6626                       <xsl:attribute name="value">
6627                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute4"/>
6628                       </xsl:attribute>
6629                     </DFF4>
6630                     <DFF5>
6631                       <xsl:attribute name="value">
6632                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute5"/>
6633                       </xsl:attribute>
6634                     </DFF5>
6635                     <DFF6>
6636                       <xsl:attribute name="value">
6637                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute6"/>
6638                       </xsl:attribute>
6639                     </DFF6>
6640                     <DFF7>
6641                       <xsl:attribute name="value">
6642                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute7"/>
6643                       </xsl:attribute>
6644                     </DFF7>
6645                     <DFF8>
6646                       <xsl:attribute name="value">
6647                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute8"/>
6648                       </xsl:attribute>
6649                     </DFF8>
6650                     <DFF9>
6651                       <xsl:attribute name="value">
6652                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute9"/>
6653                       </xsl:attribute>
6654                     </DFF9>
6655                     <DFF10>
6656                       <xsl:attribute name="value">
6657                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute10"/>
6658                       </xsl:attribute>
6659                     </DFF10>
6660                     <DFF11>
6661                       <xsl:attribute name="value">
6662                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute11"/>
6663                       </xsl:attribute>
6664                     </DFF11>
6665                     <DFF12>
6666                       <xsl:attribute name="value">
6667                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute12"/>
6668                       </xsl:attribute>
6669                     </DFF12>
6670                     <DFF13>
6671                       <xsl:attribute name="value">
6672                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute13"/>
6673                       </xsl:attribute>
6674                     </DFF13>
6675                     <DFF14>
6676                       <xsl:attribute name="value">
6677                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute14"/>
6678                       </xsl:attribute>
6679                     </DFF14>
6680                     <DFF15>
6681                       <xsl:attribute name="value">
6682                         <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute15"/>
6683                       </xsl:attribute>
6684                     </DFF15>
6685                     <xsl:for-each select="wp:Route/wp:Operations/wp:Operation">
6686                       <operation>
6687                         <xsl:attribute name="operationid">
6688                           <xsl:value-of select="wp:OperationCode"/>
6689                         </xsl:attribute>
6690                         <xsl:attribute name="src">
6691                           <xsl:value-of select="wp:EnigmaDocId"/>
6692                         </xsl:attribute>
6693                         <operseq>
6694                           <xsl:attribute name="value">
6695                             <xsl:value-of select="wp:OperationSequenceNumber"/>
6696                           </xsl:attribute>
6697                         </operseq>
6698                         <operno>
6699                           <xsl:attribute name="value">
6700                             <xsl:value-of select="wp:OperationCode"/>
6701                           </xsl:attribute>
6702                         </operno>
6703                         <xsl:for-each select="wp:AssociatedDocuments/wp:AssociatedDocument">
6704                           <refdoc>
6705                             <xsl:attribute name="docsubtype">
6706                               <xsl:value-of select="wp:DocumentSubType"/>
6707                             </xsl:attribute>
6708                             <xsl:attribute name="docno">
6709                               <xsl:value-of select="wp:DocumentNumber"/>
6710                             </xsl:attribute>
6711                             <xsl:attribute name="docrev">
6712                               <xsl:value-of select="wp:RevisionNumber"/>
6713                             </xsl:attribute>
6714                             <xsl:attribute name="docata">
6715                               <xsl:value-of select=''concat(wp:Chapter,"-",wp:Section,"-",wp:Subject)''/>
6716                             </xsl:attribute>
6717                             <xsl:attribute name="title">
6718                               <xsl:value-of select="wp:DocumentTitle"/>
6719                             </xsl:attribute>
6720                           </refdoc>
6721                         </xsl:for-each>
6722                         <DFF1>
6723                           <xsl:attribute name="value">
6724                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute1"/>
6725                           </xsl:attribute>
6726                         </DFF1>
6727                         <DFF2>
6728                           <xsl:attribute name="value">
6729                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute2"/>
6730                           </xsl:attribute>
6731                         </DFF2>
6732                         <DFF3>
6733                           <xsl:attribute name="value">
6734                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute3"/>
6735                           </xsl:attribute>
6736                         </DFF3>
6737                         <DFF4>
6738                           <xsl:attribute name="value">
6739                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute4"/>
6740                           </xsl:attribute>
6741                         </DFF4>
6742                         <DFF5>
6743                           <xsl:attribute name="value">
6744                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute5"/>
6745                           </xsl:attribute>
6746                         </DFF5>
6747                         <DFF6>
6748                           <xsl:attribute name="value">
6749                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute6"/>
6750                           </xsl:attribute>
6751                         </DFF6>
6752                         <DFF7>
6753                           <xsl:attribute name="value">
6754                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute7"/>
6755                           </xsl:attribute>
6756                         </DFF7>
6757                         <DFF8>
6758                           <xsl:attribute name="value">
6759                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute8"/>
6760                           </xsl:attribute>
6761                         </DFF8>
6762                         <DFF9>
6763                           <xsl:attribute name="value">
6764                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute9"/>
6765                           </xsl:attribute>
6766                         </DFF9>
6767                         <DFF10>
6768                           <xsl:attribute name="value">
6769                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute10"/>
6770                           </xsl:attribute>
6771                         </DFF10>
6772                         <DFF11>
6773                           <xsl:attribute name="value">
6774                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute11"/>
6775                           </xsl:attribute>
6776                         </DFF11>
6777                         <DFF12>
6778                           <xsl:attribute name="value">
6779                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute12"/>
6780                           </xsl:attribute>
6781                         </DFF12>
6782                         <DFF13>
6783                           <xsl:attribute name="value">
6784                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute13"/>
6785                           </xsl:attribute>
6786                         </DFF13>
6787                         <DFF14>
6788                           <xsl:attribute name="value">
6789                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute14"/>
6790                           </xsl:attribute>
6791                         </DFF14>
6792                         <DFF15>
6793                           <xsl:attribute name="value">
6794                             <xsl:value-of select="wp:OperationDFFs/wp:Attribute15"/>
6795                           </xsl:attribute>
6796                         </DFF15>
6797                         <title>
6798                           <xsl:attribute name="value">
6799                             <xsl:value-of select="wp:OpDescription"/>
6800                           </xsl:attribute>
6801                         </title>
6802                         <revno>
6803                           <xsl:attribute name="value">
6804                             <xsl:value-of select="wp:Revision"/>
6805                           </xsl:attribute>
6806                         </revno>
6807                         <revdate>
6808                           <xsl:attribute name="value">
6809                             <xsl:value-of select="wp:RevisionDate"/>
6810                           </xsl:attribute>
6811                         </revdate>
6812                       </operation>
6813                     </xsl:for-each>
6814                   </routemeta>
6815                 </route>
6816               </routes>
6817             </job_card>
6818           </xsl:for-each>
6819         </nrpackage>
6820       </xsl:for-each>';
6821       l_xsl_part8 := '<xsl:for-each select="/wp:WorkPackage/wp:job_card">
6822         <job_card>
6823           <xsl:attribute name="id">
6824             <xsl:value-of select=''concat("WO","-",wp:WorkorderId)''/>
6825           </xsl:attribute>
6826           <xsl:attribute name="revdate">
6827             <xsl:value-of select="../wp:wpmeta/wp:WorkPackageGenerationDate"/>
6828           </xsl:attribute>
6829           <xsl:attribute name="user">
6830             <xsl:value-of select="../wp:wpmeta/wp:User"/>
6831           </xsl:attribute>
6832           <xsl:attribute name="issuedate">
6833             <xsl:value-of select="../wp:wpmeta/wp:WorkPackageGenerationDate"/>
6834           </xsl:attribute>
6835           <jcmeta>
6836             <workorderid>
6837               <xsl:attribute name="value">
6838                 <xsl:value-of select="wp:WorkorderNumber"/>
6839               </xsl:attribute>
6840             </workorderid>
6841             <originwo>
6842               <xsl:attribute name="value">
6843                 <xsl:value-of select="wp:OriginatingWorkorder"/>
6844               </xsl:attribute>
6845             </originwo>
6846             <xsl:for-each select="wp:ItemCounters/wp:ItemCounter">
6847               <counter>
6848                 <xsl:attribute name="name">
6849                   <xsl:value-of select="wp:CounterName"/>
6850                 </xsl:attribute>
6851                 <xsl:attribute name="lastreading">
6852                   <xsl:value-of select="wp:CurrentReading"/>
6853                 </xsl:attribute>
6854               </counter>
6855             </xsl:for-each>
6856             <item>
6857               <xsl:attribute name="value">
6858                 <xsl:value-of select="wp:ItemNumber"/>
6859               </xsl:attribute>
6860             </item>
6861             <sn>
6862               <xsl:attribute name="value">
6863                 <xsl:value-of select="wp:SerialNumber"/>
6864               </xsl:attribute>
6865             </sn>
6866             <instance>
6867               <xsl:attribute name="value">
6868                 <xsl:value-of select="wp:InstanceNumber"/>
6869               </xsl:attribute>
6870             </instance>
6871             <qty>
6872               <xsl:attribute name="value">
6873                 <xsl:value-of select="wp:Quantity"/>
6874               </xsl:attribute>
6875             </qty>
6876             <position>
6877               <xsl:attribute name="value">
6878                 <xsl:value-of select="wp:Position"/>
6879               </xsl:attribute>
6880             </position>
6881             <owner>
6882               <xsl:attribute name="value">
6883                 <xsl:value-of select="wp:ItemOwner"/>
6884               </xsl:attribute>
6885             </owner>
6886             <unit>
6887               <xsl:attribute name="value">
6888                 <xsl:value-of select="wp:UnitName"/>
6889               </xsl:attribute>
6890             </unit>
6891             <routeno>
6892               <xsl:attribute name="value">
6893                 <xsl:value-of select="wp:Route/wp:RouteNumber"/>
6894               </xsl:attribute>
6895             </routeno>
6896             <desc>
6897               <xsl:attribute name="value">
6898                 <xsl:value-of select="wp:Description"/>
6899               </xsl:attribute>
6900             </desc>
6901             <revdate>
6902               <xsl:attribute name="value">
6903                 <xsl:value-of select="wp:Route/wp:RevisionDate"/>
6904               </xsl:attribute>
6905             </revdate>
6906             <revno>
6907               <xsl:attribute name="value">
6908                 <xsl:value-of select="wp:Route/wp:Revision"/>
6909               </xsl:attribute>
6910             </revno>
6911             <nonroutine>
6912               <xsl:attribute name="value">
6913                 <xsl:value-of select="wp:NonRoutineNumber"/>
6914               </xsl:attribute>
6915             </nonroutine>
6916             <resources>
6917               <xsl:for-each select="wp:ResourceRequirements/wp:ResourceRequirement">
6918                 <resource>
6919                   <xsl:attribute name="operseq">
6920                     <xsl:value-of select="wp:OperationSequenceNumber"/>
6921                   </xsl:attribute>
6922                   <xsl:attribute name="resourcetype">
6923                     <xsl:value-of select="wp:ResourceType"/>
6924                   </xsl:attribute>
6925                   <xsl:attribute name="resourceCode">
6926                     <xsl:value-of select="wp:ResourceCode"/>
6927                   </xsl:attribute>
6928                   <xsl:attribute name="desc">
6929                     <xsl:value-of select="wp:Description"/>
6930                   </xsl:attribute>
6931                   <xsl:attribute name="qty">
6932                     <xsl:value-of select="wp:Quantity"/>
6933                   </xsl:attribute>
6934                   <DFF1>
6935                     <xsl:attribute name="value">
6936                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute1"/>
6937                     </xsl:attribute>
6938                   </DFF1>
6939                   <DFF2>
6940                     <xsl:attribute name="value">
6941                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute2"/>
6942                     </xsl:attribute>
6943                   </DFF2>
6944                   <DFF3>
6945                     <xsl:attribute name="value">
6946                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute3"/>
6947                     </xsl:attribute>
6948                   </DFF3>
6949                   <DFF4>
6950                     <xsl:attribute name="value">
6951                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute4"/>
6952                     </xsl:attribute>
6953                   </DFF4>
6954                   <DFF5>
6955                     <xsl:attribute name="value">
6956                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute5"/>
6957                     </xsl:attribute>
6958                   </DFF5>
6959                   <DFF6>
6960                     <xsl:attribute name="value">
6961                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute6"/>
6962                     </xsl:attribute>
6963                   </DFF6>
6964                   <DFF7>
6965                     <xsl:attribute name="value">
6966                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute7"/>
6967                     </xsl:attribute>
6968                   </DFF7>
6969                   <DFF8>
6970                     <xsl:attribute name="value">
6971                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute8"/>
6972                     </xsl:attribute>
6973                   </DFF8>
6974                   <DFF9>
6975                     <xsl:attribute name="value">
6976                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute9"/>
6977                     </xsl:attribute>
6978                   </DFF9>
6979                   <DFF10>
6980                     <xsl:attribute name="value">
6981                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute10"/>
6982                     </xsl:attribute>
6983                   </DFF10>
6984                   <DFF11>
6985                     <xsl:attribute name="value">
6986                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute11"/>
6987                     </xsl:attribute>
6988                   </DFF11>
6989                   <DFF12>
6990                     <xsl:attribute name="value">
6991                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute12"/>
6992                     </xsl:attribute>
6993                   </DFF12>
6994                   <DFF13>
6995                     <xsl:attribute name="value">
6996                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute13"/>
6997                     </xsl:attribute>
6998                   </DFF13>
6999                   <DFF14>
7000                     <xsl:attribute name="value">
7001                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute14"/>
7002                     </xsl:attribute>
7003                   </DFF14>
7004                   <DFF15>
7005                     <xsl:attribute name="value">
7006                       <xsl:value-of select="wp:ResourceDFFs/wp:Attribute15"/>
7007                     </xsl:attribute>
7008                   </DFF15>
7009                 </resource>
7010               </xsl:for-each>
7011             </resources>
7012             <tools>
7013               <xsl:for-each select="wp:Tools/wp:Tool">
7014                 <tool>
7015                   <xsl:attribute name="itemtype">
7016                     <xsl:value-of select="wp:ItemType"/>
7017                   </xsl:attribute>
7018                   <xsl:attribute name="itemno">
7019                     <xsl:value-of select="wp:Item"/>
7020                   </xsl:attribute>
7021                   <xsl:attribute name="desc">
7022                     <xsl:value-of select="wp:Description"/>
7023                   </xsl:attribute>
7024                   <xsl:attribute name="qty">
7025                     <xsl:value-of select="wp:Quantity"/>
7026                   </xsl:attribute>
7027                 </tool>
7028               </xsl:for-each>
7029             </tools>
7030             <materials>
7031               <xsl:for-each select="wp:MaterialRequirements/wp:MaterialRequirement">
7032                 <material>
7033                   <xsl:attribute name="operseq">
7034                     <xsl:value-of select="wp:OperationSequenceNumber"/>
7035                   </xsl:attribute>
7036                   <xsl:attribute name="itemno">
7037                     <xsl:value-of select="wp:ItemNumber"/>
7038                   </xsl:attribute>
7039                   <xsl:attribute name="desc">
7040                     <xsl:value-of select="wp:ItemDescription"/>
7041                   </xsl:attribute>
7042                   <xsl:attribute name="itemgroup">
7043                     <xsl:value-of select="wp:ItemGroup"/>
7044                   </xsl:attribute>
7045                   <xsl:attribute name="itemtype">
7046                     <xsl:value-of select="wp:ItemType"/>
7047                   </xsl:attribute>
7048                   <xsl:attribute name="qty">
7049                     <xsl:value-of select=''concat(wp:RequiredQuantity," ",wp:UOM)''/>
7050                   </xsl:attribute>
7051                   <xsl:attribute name="reqdate">
7052                     <xsl:value-of select="wp:RequiredDate"/>
7053                   </xsl:attribute>
7054                 </material>
7055               </xsl:for-each>
7056             </materials>
7057             <QCP>
7058               <xsl:if test=''wp:IsQualityEnabled = "T"''>
7059                 <table>
7060                   <xsl:attribute name="id">
7061                     <xsl:value-of select="wp:QaPlan/wp:PlanName"/>
7062                   </xsl:attribute>
7063                   <xsl:attribute name="cols">
7064                     <xsl:value-of select="count(wp:QaPlan/wp:QualityPlanAttribute)"/>
7065                   </xsl:attribute>
7066                   <xsl:for-each select="wp:QaPlan/wp:QualityPlanAttribute">
7067                     <columntitle>
7068                       <name>
7069                         <xsl:value-of select="wp:Prompt"/>
7070                       </name>
7071                     </columntitle>
7072                   </xsl:for-each>
7073                   <rows>
7074                     <xsl:for-each select="wp:QaResults/wp:QualityResultRec">
7075                       <row>
7076                         <xsl:for-each select="wp:QualityPlanAttribute">
7077                           <columnvalue>
7078                             <xsl:value-of select="wp:AttributeValue"/>
7079                           </columnvalue>
7080                         </xsl:for-each>
7081                       </row>
7082                     </xsl:for-each>
7083                   </rows>
7084                 </table>
7085               </xsl:if>
7086             </QCP>
7087             <woOperations>
7088               <xsl:for-each select="wp:WoOperations/wp:WoOperation">
7089                 <woOperation>
7090                   <xsl:attribute name="operseq">
7091                     <xsl:value-of select="wp:OperationSequenceNumber"/>
7092                   </xsl:attribute>
7093                   <xsl:attribute name="desc">
7094                     <xsl:value-of select="wp:OperationDesc"/>
7095                   </xsl:attribute>
7096                   <QCP>
7097                     <xsl:if test=''wp:IsQualityEnabled = "T"''>
7098                       <table>
7099                         <xsl:attribute name="id">
7100                           <xsl:value-of select="wp:QaPlan/wp:PlanName"/>
7101                         </xsl:attribute>
7102                         <xsl:attribute name="cols">
7103                           <xsl:value-of select="count(wp:QaPlan/wp:QualityPlanAttribute)"/>
7104                         </xsl:attribute>
7105                         <xsl:for-each select="wp:QaPlan/wp:QualityPlanAttribute">
7106                           <columntitle>
7107                             <name>
7108                               <xsl:value-of select="wp:Prompt"/>
7109                             </name>
7110                           </columntitle>
7111                         </xsl:for-each>
7112                         <rows>
7113                           <xsl:for-each select="wp:QaResults/wp:QualityResultRec">
7114                             <row>
7115                               <xsl:for-each select="wp:QualityPlanAttribute">
7116                                 <columnvalue>
7117                                   <xsl:value-of select="wp:AttributeValue"/>
7118                                 </columnvalue>
7119                               </xsl:for-each>
7120                             </row>
7121                           </xsl:for-each>
7122                         </rows>
7123                       </table>
7124                     </xsl:if>
7125                   </QCP>
7126                 </woOperation>
7127               </xsl:for-each>
7128             </woOperations>
7129             <releasedate>
7130               <xsl:attribute name="value">
7131                 <xsl:value-of select="wp:ReleaseDate"/>
7132               </xsl:attribute>
7133             </releasedate>
7134           </jcmeta>
7135           <routes>
7136             <route>
7137               <xsl:attribute name="id">
7138                 <xsl:value-of select="wp:Route/wp:RouteId"/>
7139               </xsl:attribute>
7140               <xsl:attribute name="ata">
7141                 <xsl:value-of select="wp:ATACode"/>
7142               </xsl:attribute>
7143               <xsl:attribute name="type">
7144                 <xsl:value-of select="wp:Route/wp:RouteType"/>
7145               </xsl:attribute>
7146               <xsl:attribute name="src">
7147                 <xsl:value-of select="wp:Route/wp:EnigmaDocId"/>
7148               </xsl:attribute>
7149               <routemeta>
7150                 <routeno>
7151                   <xsl:attribute name="value">
7152                     <xsl:value-of select="wp:Route/wp:RouteNumber"/>
7153                   </xsl:attribute>
7154                 </routeno>
7155                 <title>
7156                   <xsl:attribute name="value">
7157                     <xsl:value-of select="wp:Route/wp:RouteTitle"/>
7158                   </xsl:attribute>
7159                 </title>
7160                 <process>
7161                   <xsl:attribute name="value">
7162                     <xsl:value-of select="wp:Route/wp:Process"/>
7163                   </xsl:attribute>
7164                 </process>
7165                 <model>
7166                   <xsl:attribute name="value">
7167                     <xsl:value-of select="wp:Route/wp:ModelCode"/>
7168                   </xsl:attribute>
7169                 </model>
7170                 <layout>
7171                   <xsl:attribute name="value">
7172                     <xsl:value-of select="wp:Route/wp:JobCardType"/>
7173                   </xsl:attribute>
7174                 </layout>
7175                 <zone>
7176                   <xsl:attribute name="value">
7177                     <xsl:value-of select="wp:Route/wp:Zone"/>
7178                   </xsl:attribute>
7179                 </zone>
7180                 <xsl:for-each select="wp:Route/wp:AssociatedDocuments/wp:AssociatedDocument">
7181                   <refdoc>
7182                     <xsl:attribute name="docsubtype">
7183                       <xsl:value-of select="wp:DocumentSubType"/>
7184                     </xsl:attribute>
7185                     <xsl:attribute name="docno">
7186                       <xsl:value-of select="wp:DocumentNumber"/>
7187                     </xsl:attribute>
7188                     <xsl:attribute name="docrev">
7189                       <xsl:value-of select="wp:RevisionNumber"/>
7190                     </xsl:attribute>
7191                     <xsl:attribute name="docata">
7192                       <xsl:value-of select=''concat(wp:Chapter,"-",wp:Section,"-",wp:Subject)''/>
7193                     </xsl:attribute>
7194                     <xsl:attribute name="title">
7195                       <xsl:value-of select="wp:DocumentTitle"/>
7196                     </xsl:attribute>
7197                   </refdoc>
7198                 </xsl:for-each>
7199                 <KFF1>
7200                   <xsl:attribute name="value">
7201                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment1Desc"/>
7202                   </xsl:attribute>
7203                 </KFF1>
7204                 <KFF2>
7205                   <xsl:attribute name="value">
7206                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment2Desc"/>
7207                   </xsl:attribute>
7208                 </KFF2>
7209                 <KFF3>
7210                   <xsl:attribute name="value">
7211                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment3Desc"/>
7212                   </xsl:attribute>
7213                 </KFF3>
7214                 <KFF4>
7215                   <xsl:attribute name="value">
7216                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment4Desc"/>
7217                   </xsl:attribute>
7218                 </KFF4>
7219                 <KFF5>
7220                   <xsl:attribute name="value">
7221                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment5Desc"/>
7222                   </xsl:attribute>
7223                 </KFF5>
7224                 <KFF6>
7225                   <xsl:attribute name="value">
7226                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment6Desc"/>
7227                   </xsl:attribute>
7228                 </KFF6>
7229                 <KFF7>
7230                   <xsl:attribute name="value">
7231                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment7Desc"/>
7232                   </xsl:attribute>
7233                 </KFF7>
7234                 <KFF8>
7235                   <xsl:attribute name="value">
7236                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment8Desc"/>
7237                   </xsl:attribute>
7238                 </KFF8>
7239                 <KFF9>
7240                   <xsl:attribute name="value">
7241                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment9Desc"/>
7242                   </xsl:attribute>
7243                 </KFF9>
7244                 <KFF10>
7245                   <xsl:attribute name="value">
7246                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment10Desc"/>
7247                   </xsl:attribute>
7248                 </KFF10>
7249                 <KFF11>
7250                   <xsl:attribute name="value">
7251                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment11Desc"/>
7252                   </xsl:attribute>
7253                 </KFF11>
7254                 <KFF12>
7255                   <xsl:attribute name="value">
7256                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment12Desc"/>
7257                   </xsl:attribute>
7258                 </KFF12>
7259                 <KFF13>
7260                   <xsl:attribute name="value">
7261                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment13Desc"/>
7262                   </xsl:attribute>
7263                 </KFF13>
7264                 <KFF14>
7265                   <xsl:attribute name="value">
7266                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment14Desc"/>
7267                   </xsl:attribute>
7268                 </KFF14>
7269                 <KFF15>
7270                   <xsl:attribute name="value">
7271                     <xsl:value-of select="wp:Route/wp:RouteKFFs/wp:Segment15Desc"/>
7272                   </xsl:attribute>
7273                 </KFF15>
7274                 <DFF1>
7275                   <xsl:attribute name="value">
7276                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute1"/>
7277                   </xsl:attribute>
7278                 </DFF1>
7279                 <DFF2>
7280                   <xsl:attribute name="value">
7281                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute2"/>
7282                   </xsl:attribute>
7283                 </DFF2>
7284                 <DFF3>
7285                   <xsl:attribute name="value">
7286                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute3"/>
7287                   </xsl:attribute>
7288                 </DFF3>
7289                 <DFF4>
7290                   <xsl:attribute name="value">
7291                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute4"/>
7292                   </xsl:attribute>
7293                 </DFF4>
7294                 <DFF5>
7295                   <xsl:attribute name="value">
7296                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute5"/>
7297                   </xsl:attribute>
7298                 </DFF5>
7299                 <DFF6>
7300                   <xsl:attribute name="value">
7301                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute6"/>
7302                   </xsl:attribute>
7303                 </DFF6>
7304                 <DFF7>
7305                   <xsl:attribute name="value">
7306                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute7"/>
7307                   </xsl:attribute>
7308                 </DFF7>
7309                 <DFF8>
7310                   <xsl:attribute name="value">
7311                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute8"/>
7312                   </xsl:attribute>
7313                 </DFF8>
7314                 <DFF9>
7315                   <xsl:attribute name="value">
7316                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute9"/>
7317                   </xsl:attribute>
7318                 </DFF9>
7319                 <DFF10>
7320                   <xsl:attribute name="value">
7321                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute10"/>
7322                   </xsl:attribute>
7323                 </DFF10>
7324                 <DFF11>
7325                   <xsl:attribute name="value">
7326                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute11"/>
7327                   </xsl:attribute>
7328                 </DFF11>
7329                 <DFF12>
7330                   <xsl:attribute name="value">
7331                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute12"/>
7332                   </xsl:attribute>
7333                 </DFF12>
7334                 <DFF13>
7335                   <xsl:attribute name="value">
7336                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute13"/>
7337                   </xsl:attribute>
7338                 </DFF13>
7339                 <DFF14>
7340                   <xsl:attribute name="value">
7341                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute14"/>
7342                   </xsl:attribute>
7343                 </DFF14>
7344                 <DFF15>
7345                   <xsl:attribute name="value">
7346                     <xsl:value-of select="wp:Route/wp:RouteDFFs/wp:Attribute15"/>
7347                   </xsl:attribute>
7348                 </DFF15>
7349                 <xsl:for-each select="wp:Route/wp:Operations/wp:Operation">
7350                   <operation>
7351                     <xsl:attribute name="operationid">
7352                       <xsl:value-of select="wp:OperationCode"/>
7353                     </xsl:attribute>
7354                     <xsl:attribute name="src">
7355                       <xsl:value-of select="wp:EnigmaDocId"/>
7356                     </xsl:attribute>
7357                     <operseq>
7358                       <xsl:attribute name="value">
7359                         <xsl:value-of select="wp:OperationSequenceNumber"/>
7360                       </xsl:attribute>
7361                     </operseq>
7362                     <operno>
7363                       <xsl:attribute name="value">
7364                         <xsl:value-of select="wp:OperationCode"/>
7365                       </xsl:attribute>
7366                     </operno>
7367                     <xsl:for-each select="wp:AssociatedDocuments/wp:AssociatedDocument">
7368                       <refdoc>
7369                         <xsl:attribute name="docsubtype">
7370                           <xsl:value-of select="wp:DocumentSubType"/>
7371                         </xsl:attribute>
7372                         <xsl:attribute name="docno">
7373                           <xsl:value-of select="wp:DocumentNumber"/>
7374                         </xsl:attribute>
7375                         <xsl:attribute name="docrev">
7376                           <xsl:value-of select="wp:RevisionNumber"/>
7377                         </xsl:attribute>
7378                         <xsl:attribute name="docata">
7379                           <xsl:value-of select=''concat(wp:Chapter,"-",wp:Section,"-",wp:Subject)''/>
7380                         </xsl:attribute>
7381                         <xsl:attribute name="title">
7382                           <xsl:value-of select="wp:DocumentTitle"/>
7383                         </xsl:attribute>
7384                       </refdoc>
7385                     </xsl:for-each>
7386                     <DFF1>
7387                       <xsl:attribute name="value">
7388                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute1"/>
7389                       </xsl:attribute>
7390                     </DFF1>
7391                     <DFF2>
7392                       <xsl:attribute name="value">
7393                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute2"/>
7394                       </xsl:attribute>
7395                     </DFF2>
7396                     <DFF3>
7397                       <xsl:attribute name="value">
7398                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute3"/>
7399                       </xsl:attribute>
7400                     </DFF3>
7401                     <DFF4>
7402                       <xsl:attribute name="value">
7403                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute4"/>
7404                       </xsl:attribute>
7405                     </DFF4>
7406                     <DFF5>
7407                       <xsl:attribute name="value">
7408                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute5"/>
7409                       </xsl:attribute>
7410                     </DFF5>
7411                     <DFF6>
7412                       <xsl:attribute name="value">
7413                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute6"/>
7414                       </xsl:attribute>
7415                     </DFF6>
7416                     <DFF7>
7417                       <xsl:attribute name="value">
7418                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute7"/>
7419                       </xsl:attribute>
7420                     </DFF7>
7421                     <DFF8>
7422                       <xsl:attribute name="value">
7423                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute8"/>
7424                       </xsl:attribute>
7425                     </DFF8>
7426                     <DFF9>
7427                       <xsl:attribute name="value">
7428                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute9"/>
7429                       </xsl:attribute>
7430                     </DFF9>
7431                     <DFF10>
7432                       <xsl:attribute name="value">
7433                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute10"/>
7434                       </xsl:attribute>
7435                     </DFF10>
7436                     <DFF11>
7437                       <xsl:attribute name="value">
7438                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute11"/>
7439                       </xsl:attribute>
7440                     </DFF11>
7441                     <DFF12>
7442                       <xsl:attribute name="value">
7443                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute12"/>
7444                       </xsl:attribute>
7445                     </DFF12>
7446                     <DFF13>
7447                       <xsl:attribute name="value">
7448                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute13"/>
7449                       </xsl:attribute>
7450                     </DFF13>
7451                     <DFF14>
7452                       <xsl:attribute name="value">
7453                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute14"/>
7454                       </xsl:attribute>
7455                     </DFF14>
7456                     <DFF15>
7457                       <xsl:attribute name="value">
7458                         <xsl:value-of select="wp:OperationDFFs/wp:Attribute15"/>
7459                       </xsl:attribute>
7460                     </DFF15>
7461                     <title>
7462                       <xsl:attribute name="value">
7463                         <xsl:value-of select="wp:OpDescription"/>
7464                       </xsl:attribute>
7465                     </title>
7466                     <revno>
7467                       <xsl:attribute name="value">
7468                         <xsl:value-of select="wp:Revision"/>
7469                       </xsl:attribute>
7470                     </revno>
7471                     <revdate>
7472                       <xsl:attribute name="value">
7473                         <xsl:value-of select="wp:RevisionDate"/>
7474                       </xsl:attribute>
7475                     </revdate>
7476                   </operation>
7477                 </xsl:for-each>
7478               </routemeta>
7479             </route>
7480           </routes>
7481         </job_card>
7482       </xsl:for-each>
7483     </workpackage>
7484   </xsl:template>
7485 </xsl:stylesheet>';
7486  dbms_lob.createtemporary( l_xsl_clob, true );
7487  dbms_lob.open( l_xsl_clob, dbms_lob.lob_readwrite );
7488  dbms_lob.write(l_xsl_clob, length(l_xsl_part1),length(l_xsl_clob)+1, l_xsl_part1);
7489  dbms_lob.write(l_xsl_clob, length(l_xsl_part2),length(l_xsl_clob)+1, l_xsl_part2);
7490  dbms_lob.write(l_xsl_clob, length(l_xsl_part3),length(l_xsl_clob)+1, l_xsl_part3);
7491  dbms_lob.write(l_xsl_clob, length(l_xsl_part4),length(l_xsl_clob)+1, l_xsl_part4);
7492  dbms_lob.write(l_xsl_clob, length(l_xsl_part5),length(l_xsl_clob)+1, l_xsl_part5);
7493  dbms_lob.write(l_xsl_clob, length(l_xsl_part6),length(l_xsl_clob)+1, l_xsl_part6);
7494  dbms_lob.write(l_xsl_clob, length(l_xsl_part7),length(l_xsl_clob)+1, l_xsl_part7);
7495  dbms_lob.write(l_xsl_clob, length(l_xsl_part8),length(l_xsl_clob)+1, l_xsl_part8);
7496  dbms_lob.close( l_xsl_clob );
7497   RETURN l_xsl_clob;
7498 END get_xsl_clob;
7499 
7500 Procedure build_xml_qa_query(
7501           p_plan_id   IN NUMBER,
7502           p_collection_id IN NUMBER,
7503           x_query_string  OUT NOCOPY VARCHAR2
7504          )
7505 IS
7506 
7507   --cursor for getting QA Chars
7508   CURSOR get_qa_chars_csr(p_plan_id IN NUMBER) IS
7509   SELECT
7510     char_id,
7511     organization_id,
7512     prompt_sequence ,
7513     prompt,
7514     enabled_flag,
7515     default_value,
7516     default_value_id,
7517     result_column_name,
7518     values_exist_flag,
7519     displayed_flag,
7520     plan_name,
7521     plan_description,
7522     char_name,
7523     datatype,
7524     hardcoded_column,
7525     developer_name
7526   FROM
7527     QA_PLAN_CHARS_V QA
7528   WHERE
7529       plan_id = p_plan_id
7530   AND enabled_flag = 1
7531   AND displayed_flag = 1
7532   order by prompt_sequence;
7533 
7534   --local variable to hold the query string to retrieve qa results
7535   l_query_string VARCHAR2(30000) := null; --pdoki changed for Bug 6777371
7536   l_rec_count NUMBER;
7537   l_result_column_name VARCHAR2(100);
7538   l_item_found VARCHAR2(1);
7539   l_locator_found VARCHAR2(1);
7540   l_item_hardcoded_column VARCHAR2(100);
7541   l_locator_hardcoded_column VARCHAR(100);
7542   l_dummy_query VARCHAR2(3000);
7543   l_api_name  CONSTANT  VARCHAR2(30)  := 'build_qa_query';
7544 
7545 BEGIN
7546 
7547   l_query_string := 'SELECT RESULTS.OCCURRENCE "Occurence"';
7548 
7549   l_dummy_query := ' UNION ALL SELECT null "Occurence"';
7550 
7551   l_rec_count := 1;
7552 
7553   -- retrieve all chars associated with the qa plan
7554   FOR qa_csr IN get_qa_chars_csr(p_plan_id) LOOP
7555 
7556     IF qa_csr.char_id = G_ITEM_NUMBER_CHAR THEN
7557     -- its an item number
7558       l_query_string := l_query_string ||' ,XMLConcat(XMLELEMENT("CharId", '''|| qa_csr.char_id ||''' )';
7559       l_query_string := l_query_string || ', XMLELEMENT("AttributeValue", ITEM.' || 'CONCATENATED_SEGMENTS' || ' ) ) "QualityPlanAttribute"';
7560 
7561       l_dummy_query := l_dummy_query ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| null ||''' )';
7562       l_dummy_query := l_dummy_query || ', XMLELEMENT("AttributeValue", '''|| null ||''' ) ) "QualityPlanAttribute"';
7563 
7564       l_item_found := FND_API.G_TRUE;
7565       l_item_hardcoded_column := qa_csr.hardcoded_column;
7566       --l_column_name_tbl(l_rec_count) := result_column;
7567     ELSIF qa_csr.char_id = G_LOCATOR_CHAR THEN
7568 
7569       l_query_string := l_query_string ||' ,XMLConcat(XMLELEMENT("CharId", '''|| qa_csr.char_id ||''' )';
7570       l_query_string := l_query_string || ', XMLELEMENT("AttributeValue", LOCATOR.' || 'CONCATENATED_SEGMENTS' || ' ) ) "QualityPlanAttribute"';
7571 
7572       l_dummy_query := l_dummy_query ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| null ||''' )';
7573       l_dummy_query := l_dummy_query || ', XMLELEMENT("AttributeValue", '''|| null ||''' ) ) "QualityPlanAttribute"';
7574 
7575       l_locator_found := FND_API.G_TRUE;
7576       l_locator_hardcoded_column := qa_csr.hardcoded_column;
7577       --l_column_name_tbl(l_rec_count) := result_column;
7578     ELSE
7579       IF qa_csr.hardcoded_column IS NOT NULL
7580       THEN
7581         l_result_column_name := qa_csr.developer_name;
7582       ELSE
7583         l_result_column_name := qa_csr.result_column_name;
7584       END IF;
7585       l_query_string := l_query_string ||' ,XMLConcat(XMLELEMENT("CharId", '''|| qa_csr.char_id ||''' )';
7586       l_query_string := l_query_string || ', XMLELEMENT("AttributeValue", RESULTS.' || l_result_column_name || ' ) ) "QualityPlanAttribute"';
7587 
7588       l_dummy_query := l_dummy_query ||' ,XMLConcat(XMLELEMENT("LABEL", '''|| null ||''' )';
7589       l_dummy_query := l_dummy_query || ', XMLELEMENT("AttributeValue", '''|| null ||''' ) ) "QualityPlanAttribute"';
7590     END IF;
7591 
7592     l_rec_count := l_rec_count + 1;
7593 
7594   END LOOP;
7595 
7596   -- Results will all be included in the from clause
7597   l_query_string := l_query_string || ' FROM QA_RESULTS_V RESULTS ';
7598 
7599   -- Append required FROM clauses for the API.
7600   IF l_item_found = FND_API.G_TRUE THEN
7601     l_query_string := l_query_string || ' , MTL_SYSTEM_ITEMS_KFV ITEM ';
7602   END IF;
7603 
7604   IF l_locator_found = FND_API.G_TRUE THEN
7605     l_query_string := l_query_string || ' , MTL_ITEM_LOCATIONS_KFV LOCATOR ';
7606   END IF;
7607 
7608   -- Append collection id to the where clause
7609   l_query_string := l_query_string || ' WHERE RESULTS.COLLECTION_ID = :1' ;
7610 
7611   -- Append required FROM clauses for the API.
7612   IF l_item_found = FND_API.G_TRUE THEN
7613     l_query_string := l_query_string || ' AND ITEM.inventory_item_id (+) = RESULTS.' || l_item_hardcoded_column;
7614     l_query_string := l_query_string || ' AND ITEM.organization_id (+) = RESULTS.organization_id ';
7615   END IF;
7616 
7617   IF l_locator_found = FND_API.G_TRUE THEN
7618     l_query_string := l_query_string || ' AND LOCATOR.inventory_location_id (+) = RESULTS.' || l_locator_hardcoded_column;
7619     l_query_string := l_query_string || ' AND LOCATOR.organization_id (+) = RESULTS.organization_id ';
7620   END IF;
7621     l_query_string := l_query_string || ' order by 1 ';
7622 
7623   --add dummy query to the original query
7624  -- l_query_string := l_query_string || l_dummy_query || ' FROM DUAL CONNECT BY 1 = 1 and level <= 3';
7625   x_query_string := l_query_string;
7626 
7627   IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
7628     fnd_log.string
7629     (
7630       fnd_log.level_statement,
7631       'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
7632       'Formed Quality Collection query string for plan id:' || p_plan_id || ' : Collection Id:' || p_collection_id
7633     );
7634   END IF;
7635 
7636 END build_xml_qa_query;
7637 
7638 PROCEDURE Get_Route_KFF_Desc (p_concat_segs     IN VARCHAR2,
7639                               x_mti_seglist     OUT NOCOPY fnd_flex_ext.SegmentArray,
7640                               x_return_status   OUT NOCOPY VARCHAR2)
7641 IS
7642           l_flex_nseg      NUMBER;
7643           l_flex_seglist   fnd_flex_key_api.segment_list;
7644           l_fftype         fnd_flex_key_api.flexfield_type;
7645           l_ffstru         fnd_flex_key_api.structure_type;
7646           l_segment_type   fnd_flex_key_api.segment_type;
7647           l_delim          VARCHAR2(1);
7648 
7649           l_loc_nseg     number;
7650           l_loc_seglist  fnd_flex_ext.SegmentArray;
7651           l_mti_seglist              fnd_flex_ext.SegmentArray;
7652           l_concat_seg_desc   VARCHAR2(4000);
7653 
7654           l_valid_flag    BOOLEAN;
7655           l_temp_string   VARCHAR2(1000);
7656 
7657           l_api_name      CONSTANT  VARCHAR2(50)  := 'Get_Route_KFF_Desc';
7658     BEGIN
7659 
7660        x_return_status := FND_API.G_RET_STS_SUCCESS;
7661 
7662        -- initialize the KFF descriptions.
7663        FOR i IN 1..15 LOOP
7664           l_mti_seglist(i) := null;
7665        END LOOP;
7666 
7667        fnd_flex_key_api.set_session_mode('seed_data');
7668 
7669        -- find flex field type
7670        l_fftype := fnd_flex_key_api.find_flexfield('AHL', 'AHLR');
7671 
7672        -- find flex structure type
7673        l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
7674 
7675        -- find segment list for the key flex field
7676        fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_flex_nseg, l_flex_seglist);
7677 
7678        -- find segment delimiter
7679        l_delim := l_ffstru.segment_separator;
7680 
7681        l_temp_string := trim(replace(p_concat_segs,l_delim,' '));
7682 
7683        IF (l_temp_string IS NOT NULL) THEN
7684           -- validate locator segments.
7685           l_valid_flag := fnd_flex_keyval.validate_segs(
7686                                   operation                    => 'CHECK_SEGMENTS'
7687                                 , appl_short_name              => 'AHL'
7688                                 , key_flex_code                => 'AHLR'
7689                                 , structure_number             => 101
7690                                 , concat_segments              => p_concat_segs
7691                                 , values_or_ids                => 'I'
7692                           );
7693 
7694           IF NOT(l_valid_flag) THEN
7695              -- do not raise error.
7696              -- In this case populate KFF descriptions as null.
7697              x_return_status := FND_API.G_RET_STS_ERROR;
7698              /*
7699              FND_MESSAGE.Set_Name('AHL','AHL_INPUT_NUM_LOC_SEGS_INVALID');
7700              FND_MESSAGE.Set_Token('LOC_SEG',p_concat_segs);
7701              FND_MSG_PUB.ADD;
7702              --dbms_output.put_line('ERROR:'|| fnd_flex_keyval.error_message);
7703              --dbms_output.put_line('ERROR:'|| fnd_flex_keyval.error_segment);
7704              */
7705              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
7706                 fnd_log.string
7707                 (
7708                   fnd_log.level_statement,
7709                   'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
7710                   'FND Flex KeyVal Error:Mesg:Segment:' || fnd_flex_keyval.error_message || ':' || fnd_flex_keyval.error_segment
7711                 );
7712           END IF;
7713 
7714              RETURN;
7715           END IF;
7716 
7717           -- get values for the concatenated segment descriptions
7718           l_concat_seg_desc := fnd_flex_keyval.concatenated_descriptions;
7719 
7720           -- breakup locator concat values into segments.
7721           l_loc_nseg := fnd_flex_ext.breakup_segments (l_concat_seg_desc, l_delim, l_loc_seglist);
7722 
7723           FOR l_loop IN 1..l_flex_nseg LOOP
7724 
7725              l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_flex_seglist(l_loop));
7726              --dbms_output.put_line('l_segment_type is : ' || l_segment_type.column_name);
7727 
7728              l_mti_seglist(To_number(Substr(l_segment_type.column_name, 8))) := l_loc_seglist(l_loop);
7729              --dbms_output.put_line('To_number(Substr(l_segment_type.column_name, 8)):' || To_number(Substr(l_segment_type.column_name, 8)));
7730              --dbms_output.put_line('l_loc_seglist(l_loop):' || l_loc_seglist(l_loop));
7731 
7732           END LOOP;
7733        END IF; -- l_temp_string
7734 
7735        x_mti_seglist := l_mti_seglist;
7736 
7737     END Get_Route_KFF_Desc;
7738 
7739 PROCEDURE Get_job_card_det (  l_merged_lob     IN OUT NOCOPY CLOB,
7740 			      l_wo_id_tbl      IN OUT NOCOPY workorder_id_tbl_type,
7741                               x_return_status   OUT NOCOPY VARCHAR2)
7742 IS
7743 
7744 context DBMS_XMLGEN.ctxHandle;
7745 
7746 dummy VARCHAR2 (1000);
7747 
7748 --TYPE workorder_id_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7749 --l_wo_id_tbl workorder_id_tbl_type;
7750   g_pkg_name VARCHAR2(30)  :='AHL_PRD_PRINT_PVT';
7751   l_api_name CONSTANT  VARCHAR2(30)  := 'Gen_JCG_Xml';
7752   l_index NUMBER ;
7753   l_mr_id        NUMBER ;
7754   l_ue_id        NUMBER ;
7755   l_visit_id     NUMBER ;
7756   l_route_id     NUMBER ;
7757   l_workorder_id NUMBER;
7758   l_wo_id        NUMBER;
7759   l_instance_id  NUMBER;
7760   l_uc_id        NUMBER;
7761   l_relationship_id NUMBER;
7762   l_position_meaning VARCHAR2(80);
7763   l_count_instance_id NUMBER;
7764   l_visit_no       VARCHAR2(80);
7765   l_wo_no          VARCHAR2(80);
7766   l_unit_name      VARCHAR2(80);
7767   l_collection_id  NUMBER;
7768   l_occurence      NUMBER;
7769   l_plan_id        NUMBER;
7770   l_msg_count NUMBER := 0;
7771   l_msg_data VARCHAR2(1000) := '';
7772   l_return_status VARCHAR2(1) := 'S';
7773   l_query_string VARCHAR2(5000);
7774   l_accomplishment_date DATE;
7775   l_unit_eff_id NUMBER;
7776   l_dummy_flag BOOLEAN;
7777   l_dummy_status VARCHAR2(100);
7778   l_dummy_return BOOLEAN;
7779   l_counter_value NUMBER := null;
7780   l_net_reading   NUMBER := null;
7781   l_concat_segment VARCHAR2(100);
7782   l_mti_seglist fnd_flex_ext.SegmentArray;
7783   kff_return_status VARCHAR2(1);
7784 
7785 --l_merged_lob   CLOB;
7786 l_wo_mat_lob  CLOB;
7787 l_wo_res_lob  CLOB;
7788 l_wo_op_lob   CLOB;
7789 l_wo_doc_lob  CLOB;
7790 l_wo_route_lob CLOB;
7791 l_route_KFF_lob CLOB;
7792 l_route_DFF_lob CLOB;
7793 l_mat_dff_lob  CLOB;
7794 l_res_dff_lob  CLOB;
7795 l_op_dffs_lob  CLOB;
7796 l_qa_plan_lob  CLOB;
7797 l_mr_det_lob   CLOB;
7798 l_wo_mr_lob    CLOB;
7799 l_panel_det_lob CLOB;
7800 l_qa_wo_plan_lob CLOB;
7801 l_qa_wo_res_lob CLOB;
7802 l_qa_res_lob   CLOB;
7803 l_counter_lob  CLOB;
7804 l_inst_remove_lob CLOB;
7805 l_tool_det_lob  CLOB;
7806 l_mr_doc_lob    CLOB;
7807 l_visit_det_lob CLOB;
7808 l_childmr_details_lob CLOB;
7809 l_offset      NUMBER;
7810 
7811 l_log_unexpected           NUMBER       := FND_LOG.level_unexpected;
7812 l_log_statement            NUMBER       := FND_LOG.level_statement;
7813 l_log_current_level        NUMBER       := FND_LOG.g_current_runtime_level;
7814 
7815 
7816 -- start to create file
7817 --  x_file_name        VARCHAR2(100)  := 'Output.XML';
7818 --  p_dir             VARCHAR2(100) := '/slot/ems1561/oracle/db/tech_st/10.2.0/temp';
7819   p_dir            VARCHAR2(500);
7820   c_amount         CONSTANT BINARY_INTEGER := 32767;
7821   l_buffer         VARCHAR2(32767);
7822   l_chr10          PLS_INTEGER;
7823   l_clobLen        PLS_INTEGER;
7824   l_fHandler       UTL_FILE.FILE_TYPE;
7825   l_pos            PLS_INTEGER    := 1;
7826 
7827 --end to create file
7828 
7829 
7830 CURSOR wo_details_csr (c_wo_id IN NUMBER) IS
7831 
7832 SELECT WO.OBJECT_VERSION_NUMBER,
7833        WO.JOB_NUMBER           ,
7834        WO.JOB_DESCRIPTION      ,
7835        WO.JOB_STATUS_MEANING   ,
7836        WO.DEPARTMENT_NAME      ,
7837        DECODE(WO.SCHEDULED_START_DATE, NULL, NULL, TO_CHAR(WO.SCHEDULED_START_DATE,'YYYY-MM-DD')
7838               ||'T'
7839               ||TO_CHAR(WO.SCHEDULED_START_DATE, 'hh24:mi:ss') ) SCHEDULED_START_DATE,
7840        DECODE(WO.SCHEDULED_END_DATE, NULL, NULL, TO_CHAR(WO.SCHEDULED_END_DATE, 'YYYY-MM-DD')
7841               ||'T'
7842               ||TO_CHAR(WO.SCHEDULED_END_DATE, 'hh24:mi:ss') ) SCHEDULED_END_DATE,
7843        WO.UNIT_NAME                                                              ,
7844        WO.WO_PART_NUMBER                                                         ,
7845        WO.ITEM_INSTANCE_NUMBER                                                   ,
7846        WO.SERIAL_NUMBER                                                          ,
7847        WO.LOT_NUMBER                                                             ,
7848        WO.VISIT_NUMBER                                                           ,
7849        --RO.MODEL_MEANING                                                   ,
7850        MODELTYPE.MEANING MODEL_MEANING ,
7851        DECODE(WIP.DATE_RELEASED, NULL, NULL, TO_CHAR(WIP.DATE_RELEASED,'YYYY-MM-DD')
7852               ||'T'
7853               ||TO_CHAR(WIP.DATE_RELEASED, 'hh24:mi:ss') ) DATE_RELEASED,
7854        --WIP.NET_QUANTITY                                                 ,
7855        (Select quantity from ahl_visit_tasks_b where visit_task_id = w.visit_task_id) NET_QUANTITY,
7856        --UE.ATA_CODE                                               ,
7857        DECODE(RO.ENIGMA_ROUTE_ID, NULL, NULL, SUBSTR(route_no, instr(route_no, ':',1,1)+1)) ATA_CODE,
7858        -- fix for bug# 10016417
7859        --(SELECT CSIN.INCIDENT_NUMBER
7860        --FROM    CS_INCIDENTS_ALL_B CSIN
7861        --WHERE   CSIN.INCIDENT_ID = UE.cs_incident_id
7862        --)
7863        /*(SELECT CSIN.INCIDENT_NUMBER
7864         FROM    CS_INCIDENTS_ALL_B CSIN, AHL_VISIT_TASKS_B TSK
7865         WHERE   CSIN.INCIDENT_ID = TSK.SERVICE_REQUEST_ID
7866         AND   TSK.VISIT_TASK_ID = WO.VISIT_TASK_ID
7867        )
7868        INCIDENT_NUMBER,*/
7869        INCIDENTDET.INCIDENT_NUMBER,
7870        INCIDENTDET.NAME INCIDENT_TYPE,
7871        INCIDENTDET.SUMMARY INCIDENT_SUMMARY,
7872        (SELECT HZ.PARTY_NAME
7873        FROM    HZ_PARTIES HZ
7874        WHERE   HZ.PARTY_ID = CSI.OWNER_PARTY_ID
7875        )
7876        PARTY_NAME,
7877        (SELECT WORKORDER_NAME
7878        FROM    AHL_WORKORDERS WO --,
7879                --AHL_UNIT_EFFECTIVITIES_B UE1
7880        WHERE   WO.WORKORDER_ID = UE.ORIGINATING_WO_ID
7881                --AND WO.UNIT_EFFECTIVITY_ID = UE.UNIT_EFFECTIVITY_ID
7882        )
7883        ORIGINATINGWORKORDER,
7884        WO.ITEM_INSTANCE_ID ,
7885        DECODE(W.PLAN_ID,NULL,'F','T') ISQUALITYENABLED,
7886        WO.ROUTE_ID
7887 FROM   AHL_WORKORDER_TASKS_V WO    ,
7888        WIP_DISCRETE_JOBS WIP       ,
7889        AHL_ROUTES_B RO             ,
7890        AHL_UNIT_EFFECTIVITIES_B UE ,
7891        --HZ_PARTIES HZ                ,
7892        CSI_ITEM_INSTANCES CSI ,
7893        --CS_INCIDENTS_ALL_B CSIN      ,
7894        --AHL_VISIT_TASKS_VL VTS         ,
7895        AHL_WORKORDERS W    ,
7896        (SELECT LOOKUP_CODE ,
7897                MEANING
7898        FROM    FND_LOOKUP_VALUES
7899        WHERE   LOOKUP_TYPE = 'AHL_ENIGMA_MODEL_CODE'
7900        AND     LANGUAGE    = USERENV('LANG')
7901        )
7902        MODELTYPE,
7903        (SELECT CS.INCIDENT_NUMBER,
7904                CS_TYPE.NAME,
7905 	       CS_TL.SUMMARY,
7906 	       TSK.VISIT_TASK_ID
7907         FROM    CS_INCIDENTS_ALL_B CS,
7908 	        AHL_VISIT_TASKS_B TSK,
7909                 CS_INCIDENT_TYPES_TL CS_TYPE,
7910                 CS_INCIDENTS_ALL_TL CS_TL
7911         WHERE   CS.INCIDENT_ID    = TSK.SERVICE_REQUEST_ID
7912       --AND     TSK.VISIT_TASK_ID   = WO.VISIT_TASK_ID
7913 	AND     CS.INCIDENT_TYPE_ID = CS_TYPE.INCIDENT_TYPE_ID
7914 	AND     CS.INCIDENT_ID      = CS_TL.INCIDENT_ID
7915 	AND     CS_TYPE.LANGUAGE    = USERENV('LANG')
7916 	AND     CS_TL.LANGUAGE      = USERENV('LANG')
7917 	) INCIDENTDET
7918 WHERE  WO.WIP_ENTITY_ID          = WIP.WIP_ENTITY_ID
7919 AND    WO.ROUTE_ID               = RO.ROUTE_ID (+)
7920 AND    UE.UNIT_EFFECTIVITY_ID(+) = WO.UNIT_EFFECTIVITY_ID
7921 AND    CSI.INSTANCE_ID           = WO.ITEM_INSTANCE_ID
7922        --AND CSI.OWNER_PARTY_ID(+)     = HZ.PARTY_ID
7923 AND    MODELTYPE.LOOKUP_CODE(+)  = RO.MODEL_CODE
7924        --AND VTS.SERVICE_REQUEST_ID    = CSIN.INCIDENT_ID(+)
7925        --AND WO.VISIT_TASK_ID          = VTS.VISIT_TASK_ID
7926 AND    W.workorder_id            = WO.workorder_id
7927 AND    INCIDENTDET.VISIT_TASK_ID(+) = WO.VISIT_TASK_ID
7928 AND    WO.WORKORDER_ID           = c_wo_id;
7929 
7930 
7931 CURSOR mat_details_csr (c_wo_id IN NUMBER)
7932 IS
7933         SELECT MSI.CONCATENATED_SEGMENTS,
7934                WRO.OPERATION_SEQ_NUM OPERATION_SEQUENCE   ,
7935                MSI.DESCRIPTION          ,
7936                IG.NAME                 ,
7937                WRO.REQUIRED_QUANTITY REQUESTED_QUANTITY   ,
7938                DECODE(WRO.date_required, NULL, NULL, TO_CHAR(WRO.date_required, 'YYYY-MM-DD')
7939                       ||'T'
7940                       ||TO_CHAR(WRO.date_required, 'hh24:mi:ss') ) required_date,
7941                WRO.QUANTITY_ISSUED ISSUED_QTY                                   ,
7942                MSI.PRIMARY_UNIT_OF_MEASURE UOM                                                           ,
7943                ASM.SCHEDULED_MATERIAL_ID,
7944                (SELECT f.meaning from fnd_lookup_values_vl f
7945                 WHERE f.lookup_type = 'ITEM_TYPE' and f.lookup_code = msi.item_type) item_type
7946         FROM   --AHL_JOB_OPER_MATERIALS_V JM,
7947                WIP_REQUIREMENT_OPERATIONS WRO, AHL_SCHEDULE_MATERIALS ASM,
7948                AHL_ITEM_GROUPS_B IG, AHL_WORKORDERS WO, MTL_SYSTEM_ITEMS_KFV MSI,AHL_WORKORDER_OPERATIONS AWOP
7949         WHERE  WO.wip_entity_id = WRO.wip_entity_id
7950           AND  WO.visit_task_id = ASM.visit_task_id
7951           AND  ASM.operation_sequence = WRO.operation_seq_num
7952           AND  ASM.inventory_item_id = WRO.inventory_item_id
7953           AND  WRO.organization_id = MSI.organization_id
7954           AND  WRO.inventory_item_id = MSI.inventory_item_id
7955           AND  IG.ITEM_GROUP_ID(+) = ASM.ITEM_GROUP_ID
7956           AND  ASM.status  in ('ACTIVE', 'IN-SERVICE', 'HISTORY')
7957 	  AND AWOP.workorder_operation_id = ASM.workorder_operation_id
7958           AND AWOP.WORKORDER_ID = WO.WORKORDER_ID
7959           AND  WO.WORKORDER_ID     = c_wo_id
7960           ORDER BY 2;
7961 
7962 CURSOR res_req_details_csr(c_wo_id IN NUMBER)
7963  IS
7964          SELECT WOR.OPERATION_SEQ_NUM operation_sequence,
7965                 WOR.RESOURCE_SEQ_NUM resource_sequence ,
7966                 BOM.RESOURCE_CODE resource_code,
7967                 BOM.DESCRIPTION resource_name,
7968                 MFG.MEANING resource_type_name,
7969                 WOR.ASSIGNED_UNITS quantity,
7970                 DECODE(nvl(WOR.ASSIGNED_UNITS,0), 0, 0, WOR.USAGE_RATE_OR_AMOUNT/WOR.ASSIGNED_UNITS) duration          ,
7971                 (SELECT A.UNIT_OF_MEASURE FROM MTL_UNITS_OF_MEASURE A
7972                  WHERE  A.UOM_CODE=BOM.UNIT_OF_MEASURE) uom_name,
7973                 WOR.RESOURCE_ID,
7974                 (select awo.operation_id from AHL_WORKORDER_OPERATIONS AWO
7975                  where AWO.workorder_id = wo.workorder_id
7976                    and awo.operation_sequence_num = WOR.OPERATION_SEQ_NUM) operation_id
7977          FROM WIP_OPERATION_RESOURCES WOR,
7978               BOM_RESOURCES BOM, MFG_LOOKUPS MFG, AHL_WORKORDERS WO
7979          WHERE  WO.workorder_id = c_wo_id
7980            AND  WOR.resource_id = BOM.resource_id
7981            AND  WO.wip_entity_id = WOR.wip_entity_id
7982            AND MFG.LOOKUP_TYPE(+) = 'BOM_RESOURCE_TYPE'
7983            AND MFG.LOOKUP_CODE(+) = BOM.RESOURCE_TYPE
7984          ORDER BY 1,2;
7985 
7986 
7987 CURSOR op_details_csr(c_wo_id IN NUMBER)
7988 IS
7989           SELECT WO.operation_sequence_num,
7990                  WO.operation_code        ,
7991                  WO.description           ,
7992                  WO.status                ,
7993                  WO.department_name       ,
7994                  --WO.scheduled_start_date ,
7995                  --WO.scheduled_end_date ,
7996                  DECODE(WO.scheduled_start_date, NULL, NULL, TO_CHAR(WO.scheduled_start_date,'YYYY-MM-DD')
7997                         ||'T'
7998                         ||TO_CHAR(WO.scheduled_start_date, 'hh24:mi:ss') ) scheduled_start_date,
7999                  DECODE(WO.scheduled_end_date, NULL, NULL, TO_CHAR(WO.scheduled_end_date, 'YYYY-MM-DD')
8000                         ||'T'
8001                         ||TO_CHAR(WO.scheduled_end_date, 'hh24:mi:ss') ) scheduled_end_date,
8002                  DECODE(WO.plan_id,NULL,'F','T')                         isQualityEnabled  ,
8003                  WO.workorder_operation_id
8004           FROM   AHL_WORKORDER_OPERATIONS_V WO --AHL_OPERATIONS_B OP
8005           WHERE                                -- WO.operation_id = OP.operation_id(+) and
8006                  WO.workorder_id = c_wo_id
8007 	  ORDER BY 1	 ;
8008 
8009 Cursor route_details_csr(c_route_id IN NUMBER) IS
8010 
8011 SELECT R.object_version_number                 ,
8012        R.route_no                              ,
8013        T.title                                 ,
8014        RTTYPE.MEANING route_type               ,
8015        R.revision_number                       ,
8016        R.enigma_doc_id                         ,
8017        R.enigma_route_id                       ,
8018        ZONE.MEANING       zone                 ,
8019        SUBZONE.MEANING    sub_zone             ,
8020        PROCESS.MEANING    process              ,
8021        JOBCARDLYT.MEANING job_card_lyt_meaning ,
8022        R.model_code                            ,
8023        R.last_update_date
8024 FROM   AHL_ROUTES_B R      ,
8025        AHL_ROUTES_TL T     ,
8026        (SELECT LOOKUP_CODE ,
8027                MEANING
8028        FROM    FND_LOOKUP_VALUES
8029        WHERE   LOOKUP_TYPE = 'AHL_RM_JOB_CARD_LYT'
8030        AND     LANGUAGE    = USERENV('LANG')
8031        )
8032        JOBCARDLYT         ,
8033        (SELECT LOOKUP_CODE,
8034                MEANING
8035        FROM    FND_LOOKUP_VALUES
8036        WHERE   LOOKUP_TYPE = 'AHL_SUB_ZONE'
8037        AND     LANGUAGE    = USERENV('LANG')
8038        )
8039        SUBZONE            ,
8040        (SELECT LOOKUP_CODE,
8041                MEANING
8042        FROM    FND_LOOKUP_VALUES
8043        WHERE   LOOKUP_TYPE = 'AHL_PROCESS_CODE'
8044        AND     LANGUAGE    = USERENV('LANG')
8045        )
8046        PROCESS            ,
8047        (SELECT LOOKUP_CODE,
8048                MEANING
8049        FROM    FND_LOOKUP_VALUES
8050        WHERE   LOOKUP_TYPE = 'AHL_ZONE'
8051        AND     LANGUAGE    = USERENV('LANG')
8052        )
8053        ZONE               ,
8054        (SELECT LOOKUP_CODE,
8055                MEANING
8056        FROM    FND_LOOKUP_VALUES
8057        WHERE   LOOKUP_TYPE = 'AHL_ROUTE_TYPE'
8058        AND     LANGUAGE    = USERENV('LANG')
8059        )
8060        RTTYPE
8061 WHERE  R.ROUTE_ID                 = T.ROUTE_ID
8062 AND    T.LANGUAGE                 = USERENV('LANG')
8063 AND    JOBCARDLYT.LOOKUP_CODE (+) = R.JOBCARDLYT_CODE
8064 AND    ZONE.LOOKUP_CODE (+)       = R.ZONE_CODE
8065 AND    SUBZONE.LOOKUP_CODE (+)    = R.SUB_ZONE_CODE
8066 AND    PROCESS.LOOKUP_CODE (+)    = R.PROCESS_CODE
8067 AND    RTTYPE.LOOKUP_CODE (+)     = R.ROUTE_TYPE_CODE
8068 AND    R.route_id                 = c_route_id;
8069 
8070 CURSOR op_det_csr(c_route_id IN NUMBER, c_wo_id IN NUMBER)
8071 IS
8072         SELECT DISTINCT
8073 	       WO.OPERATION_SEQUENCE_NUM,
8074                WO.OPERATION_CODE        ,
8075                WO.DESCRIPTION           ,
8076                WO.OPERATION_TYPE        ,
8077                OP.ENIGMA_DOC_ID         ,
8078                OP.OPERATION_ID          ,
8079                OP.REVISION_NUMBER       ,
8080                OP.LAST_UPDATE_DATE
8081 
8082         FROM   AHL_WORKORDER_OPERATIONS_V WO,
8083                AHL_ROUTE_OPERATIONS RP      ,
8084                AHL_OPERATIONS_B OP
8085         WHERE  RP.OPERATION_ID(+) = WO.OPERATION_ID
8086         AND    WO.OPERATION_ID    = OP.OPERATION_ID(+)
8087         AND    RP.route_id        = c_route_id
8088         AND    WO.workorder_id    = c_wo_id
8089 	ORDER BY 1;
8090 
8091 CURSOR qa_plan_csr(c_qa_plan_id IN NUMBER)
8092 IS
8093          SELECT DISTINCT plan_name,
8094                          plan_description
8095          FROM            QA_PLAN_CHARS_V
8096          WHERE           plan_id = c_qa_plan_id;
8097 
8098 CURSOR get_op_qa_res_csr(c_wo_op_id IN NUMBER)
8099 IS
8100         SELECT plan_id,
8101                collection_id
8102         FROM   AHL_WORKORDER_OPERATIONS
8103         WHERE  workorder_operation_id = c_wo_op_id;
8104 
8105 CURSOR get_wo_qa_res_csr(c_wo_id IN NUMBER)
8106 IS
8107         SELECT plan_id,
8108                collection_id
8109         FROM   AHL_WORKORDERS
8110         WHERE  workorder_id = c_wo_id;
8111 
8112 CURSOR qa_result_csr(c_collection_id IN NUMBER)
8113 IS
8114         SELECT occurrence
8115         FROM   QA_RESULTS
8116         WHERE  collection_id = c_collection_id;
8117 
8118 CURSOR get_visit_no(c_visit_id IN NUMBER)
8119 IS
8120         SELECT visit_number
8121         FROM   ahl_visits_b
8122         WHERE  visit_id = c_visit_id;
8123 
8124 CURSOR get_wo_no(c_wo_id IN NUMBER)
8125 IS
8126         SELECT workorder_name
8127         FROM   ahl_workorders
8128         WHERE  workorder_id = c_wo_id;
8129 
8130 CURSOR qa_plan_attr_csr (c_plan_id IN NUMBER)
8131 IS
8132         SELECT   char_id         CharId        ,
8133                  prompt_sequence PromptSequence,
8134                  prompt          Prompt        ,
8135                  default_value   DefaultValue  ,
8136 		 enabled_flag                  ,
8137 		 displayed_flag
8138         FROM     QA_PLAN_CHARS
8139         WHERE    plan_id = c_plan_id
8140         ORDER BY 2;
8141 
8142 CURSOR route_ffs_csr(c_route_id IN NUMBER)
8143 IS
8144         SELECT segment1    ,
8145                segment2    ,
8146                segment3    ,
8147                segment4    ,
8148                segment5    ,
8149                segment6    ,
8150                segment7    ,
8151                segment8    ,
8152                segment9    ,
8153                segment10   ,
8154                segment11   ,
8155                segment12   ,
8156                segment13   ,
8157                segment14   ,
8158                segment15   ,
8159                attribute1  ,
8160                attribute2  ,
8161                attribute3  ,
8162                attribute4  ,
8163                attribute5  ,
8164                attribute6  ,
8165                attribute7  ,
8166                attribute8  ,
8167                attribute9  ,
8168                attribute10 ,
8169                attribute11 ,
8170                attribute12 ,
8171                attribute13 ,
8172                attribute14 ,
8173                attribute15
8174         FROM   ahl_routes_b
8175         WHERE  route_id = c_route_id;
8176 
8177 CURSOR panel_details_csr (c_route_id IN NUMBER)
8178 IS
8179         SELECT panel_type ,
8180                panel_type_desc
8181         FROM   AHL_RT_OPER_ACCESS_PANELS_V
8182         WHERE  ASSOCIATION_TYPE_CODE = 'ROUTE'
8183         AND    object_id             = c_route_id;
8184 
8185 CURSOR chk_route_res_csr (p_route_id IN NUMBER)
8186 IS
8187        SELECT 'Y'
8188        FROM   AHL_RT_OPER_RESOURCES AR
8189        WHERE  AR.association_type_code='ROUTE'
8190          AND  AR.object_id=p_route_id
8191          AND  ROWNUM < 2;
8192 
8193 l_route_doc VARCHAR2(4000) := '
8194 SELECT DOC.DOCUMENT_NO          "DocumentNumber"         ,
8195        DOC.DOCUMENT_TITLE       "DocumentTitle"          ,
8196        DOC.DOC_TYPE_CODE        "DocumentType"           ,
8197        DOCV.DOC_SUB_TYPE_CODE   "DocumentSubType"        ,
8198        DOC.ASO_OBJECT_TYPE_DESC "AsoObjectTypeDesc"      ,
8199        NULL                     "OperationSequenceNumber",
8200        DOC.REVISION_NO          "RevisionNumber"         ,
8201        DOC.CHAPTER              "Chapter"                ,
8202        DOC.SECTION              "Section"                ,
8203        DOC.SUBJECT              "Subject"                ,
8204        DOC.PAGE                 "Page"                   ,
8205        DOC.FIGURE               "Figure"                 ,
8206        DOC.NOTE                 "Note"
8207 FROM   --AHL_WORKORDERS WO       ,
8208        AHL_DOCUMENT_ASSOS_V DOC,
8209        AHL_DOCUMENTS_V DOCV
8210 WHERE  --WO.ROUTE_ID              = DOC.ASO_OBJECT_ID
8211        DOC.DOCUMENT_ID          = DOCV.DOCUMENT_ID
8212 AND    DOC.ASO_OBJECT_TYPE_CODE = ''ROUTE''
8213 AND    DOC.ASO_OBJECT_ID        = :1';
8214 --AND    WO.WORKORDER_ID          = :1';
8215 
8216 
8217 l_op_doc VARCHAR2(4000) := '
8218 SELECT DOC.DOCUMENT_NO            "DocumentNumber"         ,
8219        DOC.DOCUMENT_TITLE         "DocumentTitle"          ,
8220        DOC.DOC_TYPE_CODE          "DocumentType"           ,
8221        DOCV.DOC_SUB_TYPE_CODE     "DocumentSubType"        ,
8222        DOC.ASO_OBJECT_TYPE_DESC   "AsoObjectTypeDesc"      ,
8223        WOP.OPERATION_SEQUENCE_NUM "OperationSequenceNumber",
8224        DOC.REVISION_NO            "RevisionNumber"         ,
8225        DOC.CHAPTER                "Chapter"                ,
8226        DOC.SECTION                "Section"                ,
8227        DOC.SUBJECT                "Subject"                ,
8228        DOC.PAGE                   "Page"                   ,
8229        DOC.FIGURE                 "Figure"                 ,
8230        DOC.NOTE                   "Note"
8231 FROM   AHL_WORKORDER_OPERATIONS WOP,
8232        AHL_DOCUMENT_ASSOS_V DOC    ,
8233        AHL_DOCUMENTS_V DOCV
8234 WHERE  WOP.OPERATION_ID         = DOC.ASO_OBJECT_ID
8235 AND    DOC.DOCUMENT_ID          = DOCV.DOCUMENT_ID
8236 AND    DOC.ASO_OBJECT_TYPE_CODE = ''OPERATION''
8237 AND    WOP.WORKORDER_ID         = :1
8238 AND    WOP.OPERATION_ID         = :2';
8239 
8240 l_mat_dffs VARCHAR2(1000) := '
8241 SELECT MA.ATTRIBUTE_CATEGORY "AttributeCategory",
8242        MA.ATTRIBUTE1         "Attribute1"       ,
8243        MA.ATTRIBUTE2         "Attribute2"       ,
8244        MA.ATTRIBUTE3         "Attribute3"       ,
8245        MA.ATTRIBUTE4         "Attribute4"       ,
8246        MA.ATTRIBUTE5         "Attribute5"       ,
8247        MA.ATTRIBUTE6         "Attribute6"       ,
8248        MA.ATTRIBUTE7         "Attribute7"       ,
8249        MA.ATTRIBUTE8         "Attribute8"       ,
8250        MA.ATTRIBUTE9         "Attribute9"       ,
8251        MA.ATTRIBUTE10        "Attribute10"      ,
8252        MA.ATTRIBUTE11        "Attribute11"      ,
8253        MA.ATTRIBUTE12        "Attribute12"      ,
8254        MA.ATTRIBUTE13        "Attribute13"      ,
8255        MA.ATTRIBUTE14        "Attribute14"      ,
8256        MA.ATTRIBUTE15        "Attribute15"
8257 FROM   AHL_SCHEDULE_MATERIALS MA--, AHL_JOB_OPER_MATERIALS_V MV
8258 WHERE  MA.SCHEDULED_MATERIAL_ID = :1';
8259 
8260 
8261 l_res_dffs VARCHAR2(1500) := '
8262 SELECT RE.ATTRIBUTE_CATEGORY "AttributeCategory",
8263        RE.ATTRIBUTE1         "Attribute1"       ,
8264        RE.ATTRIBUTE2         "Attribute2"       ,
8265        RE.ATTRIBUTE3         "Attribute3"       ,
8266        RE.ATTRIBUTE4         "Attribute4"       ,
8267        RE.ATTRIBUTE5         "Attribute5"       ,
8268        RE.ATTRIBUTE6         "Attribute6"       ,
8269        RE.ATTRIBUTE7         "Attribute7"       ,
8270        RE.ATTRIBUTE8         "Attribute8"       ,
8271        RE.ATTRIBUTE9         "Attribute9"       ,
8272        RE.ATTRIBUTE10        "Attribute10"      ,
8273        RE.ATTRIBUTE11        "Attribute11"      ,
8274        RE.ATTRIBUTE12        "Attribute12"      ,
8275        RE.ATTRIBUTE13        "Attribute13"      ,
8276        RE.ATTRIBUTE14        "Attribute14"      ,
8277        RE.ATTRIBUTE15        "Attribute15"
8278 FROM   AHL_RT_OPER_RESOURCES RE, ahl_resource_mappings ar, bom_resources br
8279 WHERE  br.organization_id = ar.BOM_ORG_ID
8280 AND    br.resource_id = ar.BOM_RESOURCE_ID
8281 AND    br.resource_id = :1
8282 AND    ar.aso_resource_id = re.aso_resource_id
8283 AND    re.ASSOCIATION_TYPE_CODE = :2
8284 AND    re.object_id = :3';
8285 
8286 l_op_dffs VARCHAR2(1000) := '
8287 SELECT OP.ATTRIBUTE_CATEGORY "AttributeCategory",
8288        OP.ATTRIBUTE1         "Attribute1"       ,
8289        OP.ATTRIBUTE2         "Attribute2"       ,
8290        OP.ATTRIBUTE3         "Attribute3"       ,
8291        OP.ATTRIBUTE4         "Attribute4"       ,
8292        OP.ATTRIBUTE5         "Attribute5"       ,
8293        OP.ATTRIBUTE6         "Attribute6"       ,
8294        OP.ATTRIBUTE7         "Attribute7"       ,
8295        OP.ATTRIBUTE8         "Attribute8"       ,
8296        OP.ATTRIBUTE9         "Attribute9"       ,
8297        OP.ATTRIBUTE10        "Attribute10"      ,
8298        OP.ATTRIBUTE11        "Attribute11"      ,
8299        OP.ATTRIBUTE12        "Attribute12"      ,
8300        OP.ATTRIBUTE13        "Attribute13"      ,
8301        OP.ATTRIBUTE14        "Attribute14"      ,
8302        OP.ATTRIBUTE15        "Attribute15"
8303 FROM   AHL_OPERATIONS_B OP
8304 WHERE  OP.OPERATION_ID = :1';
8305 
8306 l_qa_plan_attr VARCHAR2(1000) := '
8307 SELECT char_id         "CharId"        ,
8308        prompt_sequence "PromptSequence",
8309        prompt          "Prompt"        ,
8310        default_value   "DefaultValue"
8311 FROM   QA_PLAN_CHARS
8312 WHERE  plan_id = :1';
8313 
8314 l_qa_res_details VARCHAR2(1000) := '
8315 SELECT QC.char_id         "CharId",
8316        CI.attribute_value "AttributeValue"
8317 FROM   CSI_IEA_VALUES CI,
8318        QA_PLAN_CHARS QC ,
8319        QA_RESULTS_V QR
8320 WHERE  QC.plan_id        = QR.plan_id
8321 AND    CI.instance_id(+) = QR.csi_instance_id
8322 AND    QR.collection_id  = :1';
8323 
8324 l_counter_det VARCHAR2(1000) := '
8325 SELECT cc.counter_template_name "CounterName",
8326        (SELECT ccr.net_reading
8327        FROM    csi_counter_readings ccr
8328        WHERE   ccr.counter_value_id         = cc.CTR_VAL_MAX_SEQ_NO
8329        AND     NVL(ccr.disabled_flag,''N'') = ''N''
8330        )
8331        "CurrentReading"
8332        --FROM   csi_counter_associations cca, csi_counters_vl cc, ahl_workorders_v wo
8333 FROM   csi_counter_associations cca,
8334        csi_counters_vl cc          ,
8335        ahl_workorders WO           ,
8336        ahl_visit_tasks_b tsk
8337 WHERE  cca.counter_id     = cc.counter_id
8338 AND    wo.visit_task_id   = tsk.visit_task_id
8339 AND    source_object_code = ''CP''
8340        --AND    source_object_id = wo.item_instance_id
8341 AND    source_object_id = tsk.instance_id
8342 AND    wo.workorder_id  = :1';
8343 
8344 l_counter_details VARCHAR2(500) := '
8345 SELECT cc.counter_template_name "CounterName",
8346        (SELECT ccr.net_reading
8347        FROM    csi_counter_readings ccr
8348        WHERE   ccr.counter_value_id         = cc.CTR_VAL_MAX_SEQ_NO
8349        AND     NVL(ccr.disabled_flag,''N'') = ''N''
8350        )
8351        "CurrentReading"
8352 FROM   csi_counter_associations cca,
8353        csi_counters_vl cc
8354 WHERE  cca.counter_id     = cc.counter_id
8355 AND    source_object_code = ''CP''
8356 AND    source_object_id   = :1';
8357 
8358 l_inst_remove_det VARCHAR2(2000) := '
8359 SELECT OFFI.concatenated_segments RemovedItem      ,
8360        OFFC.serial_number         RemovedSerial    ,
8361        PC.removed_quantity        RemovedQuantity  ,
8362        OFFC.lot_number            RemovedLot       ,
8363        OFFC.inventory_revision    RemovedRevision  ,
8364        ONI.concatenated_segments  InstalledItem    ,
8365        ONC.serial_number          InstalledSerial  ,
8366        PC.installed_quantity      InstalledQuantity,
8367        ONC.lot_number             InstalledLot     ,
8368        ONC.inventory_revision     InstalledRevision,
8369        DIS.position_reference     position
8370 FROM   ahl_part_changes_v PC    ,
8371        csi_item_instances OFFC  ,
8372        mtl_system_items_kfv OFFI,
8373        csi_item_instances ONC   ,
8374        mtl_system_items_kfv ONI ,
8375        ahl_prd_dispositions_v DIS
8376 WHERE  PC.part_change_id               = DIS.part_change_id
8377 AND    PC.removed_instance_id          = OFFC.instance_id (+)
8378 AND    PC.installed_instance_id        = ONC.instance_id (+)
8379 AND    OFFC.inventory_item_id          = OFFI.inventory_item_id (+)
8380 AND    OFFC.inv_master_organization_id = OFFI.organization_id (+)
8381 AND    ONC.inventory_item_id           = ONI.inventory_item_id (+)
8382 AND    ONC.inv_master_organization_id  = ONI.organization_id (+)
8383 AND    DIS.status                     <> ''Terminated''
8384 AND    DIS.workorder_id                = :1';
8385 
8386 l_tools_det VARCHAR2(1000) := '
8387 SELECT PP.OPERATION_SEQUENCE "OperationSequenceNumber",
8388        PP.RESOURCE_SEQUENCE  "ResourceSequenceNumber" ,
8389        PP.RESOURCE_CODE      "Item"                   ,
8390        PP.RESOURCE_TYPE_NAME "ItemType"               ,
8391        PP.RESOURCE_NAME      "Description"            ,
8392        PP.QUANTITY           "Quantity"               ,
8393        PP.DURATION           "Duration"               ,
8394        PP.UOM_NAME           "UOM"
8395 FROM   AHL_PP_REQUIREMENT_V PP,
8396        AHL_WORKORDERS WO
8397 WHERE  PP.JOB_ID             = WO.WORKORDER_ID
8398 AND    PP.resource_type_code = 1
8399 AND    WO.WORKORDER_ID       = :1';
8400 
8401   wo_details_rec wo_details_csr%ROWTYPE;
8402   mat_details_rec mat_details_csr%ROWTYPE;
8403   res_req_details_rec res_req_details_csr%ROWTYPE;
8404   op_details_rec op_details_csr%ROWTYPE;
8405   route_details_rec route_details_csr%ROWTYPE;
8406   qa_plan_rec qa_plan_csr%ROWTYPE;
8407   wo_op_details_rec op_det_csr%ROWTYPE;
8408   qa_plan_attr_rec  qa_plan_attr_csr%ROWTYPE;
8409   route_ffs_rec route_ffs_csr%ROWTYPE;
8410   panel_details_rec panel_details_csr%ROWTYPE;
8411   l_qa_plan_id NUMBER;
8412   l_route_op_res_found VARCHAR2(1);--R for Route, O for Operation and 'N' for none (bug 10048778 )
8413 
8414 BEGIN
8415 
8416 --l_merged_lob := p_merged_lob;
8417 FOR l_index IN l_wo_id_tbl.FIRST .. l_wo_id_tbl.LAST
8418 LOOP
8419         l_workorder_id := l_wo_id_tbl(l_index);
8420         OPEN wo_details_csr(l_workorder_id);
8421         -- LOOP
8422         FETCH wo_details_csr
8423         INTO  wo_details_rec;
8424 
8425         --EXIT WHEN wo_details_csr%NOTFOUND;
8426         IF (l_log_statement >= l_log_current_level)THEN
8427                 fnd_log.string ( l_log_statement, 'ahl.plsql.'
8428                 ||g_pkg_name
8429                 ||'.'
8430                 ||l_api_name ,'Checkpoint 3 : l_workorder_id : '
8431                 || l_workorder_id);
8432         END IF;
8433         l_route_id      := wo_details_rec.route_id;
8434 
8435         dbms_lob.write(l_merged_lob, LENGTH('<job_card>'),LENGTH(l_merged_lob)+1, '<job_card>');
8436 
8437         dbms_lob.write(l_merged_lob, LENGTH('<WorkorderId>'),LENGTH(l_merged_lob)+1, '<WorkorderId>');
8438         dbms_lob.write(l_merged_lob, LENGTH(l_workorder_id),LENGTH(l_merged_lob)+1, l_workorder_id);
8439         dbms_lob.write(l_merged_lob, LENGTH('</WorkorderId>'),LENGTH(l_merged_lob)+1, '</WorkorderId>');
8440         dbms_lob.write(l_merged_lob, LENGTH('<ObjectVersionNumber>'),LENGTH(l_merged_lob)+1, '<ObjectVersionNumber>');
8441         dbms_lob.write(l_merged_lob, LENGTH(wo_details_rec.object_version_number),LENGTH(l_merged_lob)+1, wo_details_rec.object_version_number);
8442         dbms_lob.write(l_merged_lob, LENGTH('</ObjectVersionNumber>'),LENGTH(l_merged_lob)+1, '</ObjectVersionNumber>');
8443         dbms_lob.write(l_merged_lob, LENGTH('<WorkorderNumber>'),LENGTH(l_merged_lob)+1, '<WorkorderNumber>');
8444         dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.job_number);
8445         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8446         dbms_lob.write(l_merged_lob, LENGTH('</WorkorderNumber>'),LENGTH(l_merged_lob)+1, '</WorkorderNumber>');
8447         IF (wo_details_rec.job_description IS NOT NULL) THEN
8448                 dbms_lob.write(l_merged_lob, LENGTH('<Description>'),LENGTH(l_merged_lob)+1, '<Description>');
8449                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.job_description);
8450                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8451                 dbms_lob.write(l_merged_lob, LENGTH('</Description>'),LENGTH(l_merged_lob)+1, '</Description>');
8452         ELSE
8453                 dbms_lob.write(l_merged_lob, LENGTH('<Description/>'),LENGTH(l_merged_lob)+1, '<Description/>');
8454         END IF;
8455         dbms_lob.write(l_merged_lob, LENGTH('<Status>'),LENGTH(l_merged_lob)+1, '<Status>');
8456         dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.job_status_meaning);
8457         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8458         dbms_lob.write(l_merged_lob, LENGTH('</Status>'),LENGTH(l_merged_lob)+1, '</Status>');
8459         dbms_lob.write(l_merged_lob, LENGTH('<DepartmentName>'),LENGTH(l_merged_lob)+1, '<DepartmentName>');
8460         dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.department_name);
8461         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8462         dbms_lob.write(l_merged_lob, LENGTH('</DepartmentName>'),LENGTH(l_merged_lob)+1, '</DepartmentName>');
8463         dbms_lob.write(l_merged_lob, LENGTH('<ScheduledStartDate>'),LENGTH(l_merged_lob)+1, '<ScheduledStartDate>');
8464         dbms_lob.write(l_merged_lob, LENGTH(wo_details_rec.scheduled_start_date),LENGTH(l_merged_lob)+1, wo_details_rec.scheduled_start_date);
8465         dbms_lob.write(l_merged_lob, LENGTH('</ScheduledStartDate>'),LENGTH(l_merged_lob)+1, '</ScheduledStartDate>');
8466         dbms_lob.write(l_merged_lob, LENGTH('<ScheduledEndDate>'),LENGTH(l_merged_lob)+1, '<ScheduledEndDate>');
8467         dbms_lob.write(l_merged_lob, LENGTH(wo_details_rec.scheduled_end_date),LENGTH(l_merged_lob)+1, wo_details_rec.scheduled_end_date);
8468         dbms_lob.write(l_merged_lob, LENGTH('</ScheduledEndDate>'),LENGTH(l_merged_lob)+1, '</ScheduledEndDate>');
8469         IF (wo_details_rec.date_released IS NOT NULL) THEN
8470                 dbms_lob.write(l_merged_lob, LENGTH('<ReleaseDate>'),LENGTH(l_merged_lob)+1, '<ReleaseDate>');
8471                 dbms_lob.write(l_merged_lob, LENGTH(wo_details_rec.date_released),LENGTH(l_merged_lob)+1, wo_details_rec.date_released);
8472                 dbms_lob.write(l_merged_lob, LENGTH('</ReleaseDate>'),LENGTH(l_merged_lob)+1, '</ReleaseDate>');
8473         ELSE
8474                 dbms_lob.write(l_merged_lob, LENGTH('<ReleaseDate/>'),LENGTH(l_merged_lob)+1, '<ReleaseDate/>');
8475         END IF;
8476         IF (wo_details_rec.unit_name IS NOT NULL) THEN
8477                 dbms_lob.write(l_merged_lob, LENGTH('<UnitName>'),LENGTH(l_merged_lob)+1, '<UnitName>');
8478                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.unit_name);
8479                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8480                 dbms_lob.write(l_merged_lob, LENGTH('</UnitName>'),LENGTH(l_merged_lob)+1, '</UnitName>');
8481         ELSE
8482                 dbms_lob.write(l_merged_lob, LENGTH('<UnitName/>'),LENGTH(l_merged_lob)+1, '<UnitName/>');
8483         END IF;
8484         IF (wo_details_rec.model_meaning IS NOT NULL) THEN
8485                 dbms_lob.write(l_merged_lob, LENGTH('<Model>'),LENGTH(l_merged_lob)+1, '<Model>');
8486                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.model_meaning);
8487                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8488                 dbms_lob.write(l_merged_lob, LENGTH('</Model>'),LENGTH(l_merged_lob)+1, '</Model>');
8489         ELSE
8490                 dbms_lob.write(l_merged_lob, LENGTH('<Model/>'),LENGTH(l_merged_lob)+1, '<Model/>');
8491         END IF;
8492         IF (wo_details_rec.wo_part_number IS NOT NULL) THEN
8493                 dbms_lob.write(l_merged_lob, LENGTH('<ItemNumber>'),LENGTH(l_merged_lob)+1, '<ItemNumber>');
8494                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.wo_part_number);
8495                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8496                 dbms_lob.write(l_merged_lob, LENGTH('</ItemNumber>'),LENGTH(l_merged_lob)+1, '</ItemNumber>');
8497         ELSE
8498                 dbms_lob.write(l_merged_lob, LENGTH('<ItemNumber/>'),LENGTH(l_merged_lob)+1, '<ItemNumber/>');
8499         END IF;
8500         IF (wo_details_rec.item_instance_number IS NOT NULL) THEN
8501                 dbms_lob.write(l_merged_lob, LENGTH('<InstanceNumber>'),LENGTH(l_merged_lob)+1, '<InstanceNumber>');
8502                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.item_instance_number);
8503                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8504                 dbms_lob.write(l_merged_lob, LENGTH('</InstanceNumber>'),LENGTH(l_merged_lob)+1, '</InstanceNumber>');
8505         ELSE
8506                 dbms_lob.write(l_merged_lob, LENGTH('<InstanceNumber/>'),LENGTH(l_merged_lob)+1, '<InstanceNumber/>');
8507         END IF;
8508         IF (wo_details_rec.serial_number IS NOT NULL) THEN
8509                 dbms_lob.write(l_merged_lob, LENGTH('<SerialNumber>'),LENGTH(l_merged_lob)+1, '<SerialNumber>');
8510                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.serial_number);
8511                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8512                 dbms_lob.write(l_merged_lob, LENGTH('</SerialNumber>'),LENGTH(l_merged_lob)+1, '</SerialNumber>');
8513         ELSE
8514                 dbms_lob.write(l_merged_lob, LENGTH('<SerialNumber/>'),LENGTH(l_merged_lob)+1, '<SerialNumber/>');
8515         END IF;
8516         IF (wo_details_rec.net_quantity IS NOT NULL) THEN
8517                 dbms_lob.write(l_merged_lob, LENGTH('<Quantity>'),LENGTH(l_merged_lob)+1, '<Quantity>');
8518                 dbms_lob.write(l_merged_lob, LENGTH(wo_details_rec.net_quantity),LENGTH(l_merged_lob)+1, wo_details_rec.net_quantity);
8519                 dbms_lob.write(l_merged_lob, LENGTH('</Quantity>'),LENGTH(l_merged_lob)+1, '</Quantity>');
8520         ELSE
8521                 dbms_lob.write(l_merged_lob, LENGTH('<Quantity/>'),LENGTH(l_merged_lob)+1, '<Quantity/>');
8522         END IF;
8523         IF (wo_details_rec.lot_number IS NOT NULL) THEN
8524                 dbms_lob.write(l_merged_lob, LENGTH('<LotNumber>'),LENGTH(l_merged_lob)+1, '<LotNumber>');
8525                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.lot_number);
8526                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8527                 dbms_lob.write(l_merged_lob, LENGTH('</LotNumber>'),LENGTH(l_merged_lob)+1, '</LotNumber>');
8528         ELSE
8529                 dbms_lob.write(l_merged_lob, LENGTH('<LotNumber/>'),LENGTH(l_merged_lob)+1, '<LotNumber/>');
8530         END IF;
8531         IF (wo_details_rec.party_name IS NOT NULL) THEN
8532                 dbms_lob.write(l_merged_lob, LENGTH('<ItemOwner>'),LENGTH(l_merged_lob)+1, '<ItemOwner>');
8533                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.party_name);
8534                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8535                 dbms_lob.write(l_merged_lob, LENGTH('</ItemOwner>'),LENGTH(l_merged_lob)+1, '</ItemOwner>');
8536         ELSE
8537                 dbms_lob.write(l_merged_lob, LENGTH('<ItemOwner/>'),LENGTH(l_merged_lob)+1, '<ItemOwner/>');
8538         END IF;
8539         dbms_lob.write(l_merged_lob, LENGTH('<VisitNumber>'),LENGTH(l_merged_lob)+1, '<VisitNumber>');
8540         dbms_lob.write(l_merged_lob, LENGTH(wo_details_rec.visit_number),LENGTH(l_merged_lob)+1, wo_details_rec.visit_number);
8541         dbms_lob.write(l_merged_lob, LENGTH('</VisitNumber>'),LENGTH(l_merged_lob)+1, '</VisitNumber>');
8542         IF (wo_details_rec.ata_code IS NOT NULL) THEN
8543                 dbms_lob.write(l_merged_lob, LENGTH('<ATACode>'),LENGTH(l_merged_lob)+1, '<ATACode>');
8544                 dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.ata_code);
8545                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8546                 dbms_lob.write(l_merged_lob, LENGTH('</ATACode>'),LENGTH(l_merged_lob)+1, '</ATACode>');
8547         ELSE
8548                 dbms_lob.write(l_merged_lob, LENGTH('<ATACode/>'),LENGTH(l_merged_lob)+1, '<ATACode/>');
8549         END IF;
8550         l_relationship_id              := AHL_UTIL_UC_PKG.Map_Instance_to_RelID(wo_details_rec.item_instance_id);
8551         IF (l_relationship_id IS NOT NULL) THEN
8552                BEGIN
8553                   SELECT FLV.meaning
8554                   INTO   l_position_meaning
8555                   FROM   ahl_mc_relationships MC,
8556                          FND_LOOKUP_VALUES_VL FLV
8557                   WHERE  FLV.LOOKUP_CODE  = MC.POSITION_REF_CODE
8558                   AND    FLV.LOOKUP_TYPE  = 'AHL_POSITION_REFERENCE'
8559                   AND    FLV.ENABLED_FLAG = 'Y'
8560                   AND    FLV.END_DATE_ACTIVE >= sysdate
8561                   AND    MC.relationship_id  = l_relationship_id;
8562                EXCEPTION
8563                   WHEN OTHERS THEN
8564                      null;
8565                END;
8566 
8567                IF (l_position_meaning IS NOT NULL) THEN
8568                   dbms_lob.write(l_merged_lob, LENGTH('<Position>'),LENGTH(l_merged_lob)+1, '<Position>');
8569                   dummy := DBMS_XMLGEN.CONVERT(l_position_meaning);
8570                   dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8571                   dbms_lob.write(l_merged_lob, LENGTH('</Position>'),LENGTH(l_merged_lob)+1, '</Position>');
8572                ELSE
8573                   dbms_lob.write(l_merged_lob, LENGTH('<Position/>'),LENGTH(l_merged_lob)+1, '<Position/>');
8574                END IF;
8575         ELSE
8576                dbms_lob.write(l_merged_lob, LENGTH('<Position/>'),LENGTH(l_merged_lob)+1, '<Position/>');
8577         END IF;
8578         IF (wo_details_rec.incident_number IS NOT NULL) THEN
8579                dbms_lob.write(l_merged_lob, LENGTH('<NonRoutineNumber>'),LENGTH(l_merged_lob)+1, '<NonRoutineNumber>');
8580                dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.incident_number);
8581                dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8582                dbms_lob.write(l_merged_lob, LENGTH('</NonRoutineNumber>'),LENGTH(l_merged_lob)+1, '</NonRoutineNumber>');
8583         ELSE
8584                dbms_lob.write(l_merged_lob, LENGTH('<NonRoutineNumber/>'),LENGTH(l_merged_lob)+1, '<NonRoutineNumber/>');
8585         END IF;
8586 	IF (wo_details_rec.incident_type IS NOT NULL) THEN
8587                dbms_lob.write(l_merged_lob, LENGTH('<NonRoutineType>'),LENGTH(l_merged_lob)+1, '<NonRoutineType>');
8588                dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.incident_type);
8589                dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8590                dbms_lob.write(l_merged_lob, LENGTH('</NonRoutineType>'),LENGTH(l_merged_lob)+1, '</NonRoutineType>');
8591         ELSE
8592                dbms_lob.write(l_merged_lob, LENGTH('<NonRoutineType/>'),LENGTH(l_merged_lob)+1, '<NonRoutineType/>');
8593         END IF;
8594 	IF (wo_details_rec.incident_summary IS NOT NULL) THEN
8595                dbms_lob.write(l_merged_lob, LENGTH('<ProblemSummary>'),LENGTH(l_merged_lob)+1, '<ProblemSummary>');
8596                dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.incident_summary);
8597                dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8598                dbms_lob.write(l_merged_lob, LENGTH('</ProblemSummary>'),LENGTH(l_merged_lob)+1, '</ProblemSummary>');
8599         ELSE
8600                dbms_lob.write(l_merged_lob, LENGTH('<ProblemSummary/>'),LENGTH(l_merged_lob)+1, '<ProblemSummary/>');
8601         END IF;
8602         IF (wo_details_rec.OriginatingWorkorder IS NOT NULL) THEN
8603                dbms_lob.write(l_merged_lob, LENGTH('<OriginatingWorkorder>'),LENGTH(l_merged_lob)+1, '<OriginatingWorkorder>');
8604                dummy := DBMS_XMLGEN.CONVERT(wo_details_rec.OriginatingWorkorder);
8605                dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8606                dbms_lob.write(l_merged_lob, LENGTH('</OriginatingWorkorder>'),LENGTH(l_merged_lob)+1, '</OriginatingWorkorder>');
8607         ELSE
8608                dbms_lob.write(l_merged_lob, LENGTH('<OriginatingWorkorder/>'),LENGTH(l_merged_lob)+1, '<OriginatingWorkorder/>');
8609         END IF;
8610 
8611 --counter details
8612 IF (l_log_statement >= l_log_current_level)THEN
8613     fnd_log.string (
8614       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Checkpoint 4 : l_workorder_id : ' || l_workorder_id);
8615 END IF;
8616 context := dbms_xmlgen.newContext(l_counter_det );
8617           DBMS_XMLGEN.setbindvalue (context, '1', l_workorder_id);
8618 
8619           dbms_xmlgen.setRowsetTag(context, 'ItemCounters');
8620           dbms_xmlgen.setRowTag(context,'ItemCounter');
8621           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
8622           l_counter_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
8623           dbms_xmlgen.closeContext(context);
8624           -- Write to lob only when some data exists.
8625           IF dbms_lob.getlength(l_counter_lob) > 0
8626           THEN
8627              l_offset := dbms_lob.INSTR(l_counter_lob, '>');
8628 
8629              dbms_lob.copy(l_merged_lob, l_counter_lob, dbms_lob.getlength(l_counter_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
8630 
8631           END IF;
8632 
8633 dbms_lob.write(l_merged_lob, length('<Route>'),length(l_merged_lob)+1, '<Route>');
8634 OPEN route_details_csr(l_route_id);
8635 LOOP
8636   FETCH route_details_csr INTO route_details_rec;
8637   EXIT WHEN route_details_csr%NOTFOUND;
8638 IF (l_log_statement >= l_log_current_level)THEN
8639     fnd_log.string (
8640       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Checkpoint 5 : l_route_id : ' || l_route_id);
8641 END IF;
8642 
8643 dbms_lob.write(l_merged_lob, LENGTH('<RouteId>'),LENGTH(l_merged_lob)+1, '<RouteId>');
8644 dbms_lob.write(l_merged_lob, LENGTH(l_route_id),LENGTH(l_merged_lob)+1, l_route_id);
8645 dbms_lob.write(l_merged_lob, LENGTH('</RouteId>'),LENGTH(l_merged_lob)+1, '</RouteId>');
8646 dbms_lob.write(l_merged_lob, LENGTH('<ObjectVersionNumber>'),LENGTH(l_merged_lob)+1, '<ObjectVersionNumber>');
8647 dbms_lob.write(l_merged_lob, LENGTH(route_details_rec.object_version_number),LENGTH(l_merged_lob)+1, route_details_rec.object_version_number);
8648 dbms_lob.write(l_merged_lob, LENGTH('</ObjectVersionNumber>'),LENGTH(l_merged_lob)+1, '</ObjectVersionNumber>');
8649 dbms_lob.write(l_merged_lob, LENGTH('<RouteNumber>'),LENGTH(l_merged_lob)+1, '<RouteNumber>');
8650 dummy := DBMS_XMLGEN.CONVERT(route_details_rec.route_no);
8651 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8652 dbms_lob.write(l_merged_lob, LENGTH('</RouteNumber>'),LENGTH(l_merged_lob)+1, '</RouteNumber>');
8653 dbms_lob.write(l_merged_lob, LENGTH('<RouteTitle>'),LENGTH(l_merged_lob)+1, '<RouteTitle>');
8654 dummy := DBMS_XMLGEN.CONVERT(route_details_rec.title);
8655 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8656 dbms_lob.write(l_merged_lob, LENGTH('</RouteTitle>'),LENGTH(l_merged_lob)+1, '</RouteTitle>');
8657 IF (route_details_rec.route_type IS NOT NULL) THEN
8658         dbms_lob.write(l_merged_lob, LENGTH('<RouteType>'),LENGTH(l_merged_lob)+1, '<RouteType>');
8659         dummy := DBMS_XMLGEN.CONVERT(route_details_rec.route_type);
8660         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8661         dbms_lob.write(l_merged_lob, LENGTH('</RouteType>'),LENGTH(l_merged_lob)+1, '</RouteType>');
8662 ELSE
8663         dbms_lob.write(l_merged_lob, LENGTH('<RouteType/>'),LENGTH(l_merged_lob)+1, '<RouteType/>');
8664 END IF;
8665 dbms_lob.write(l_merged_lob, LENGTH('<Revision>'),LENGTH(l_merged_lob)+1, '<Revision>');
8666 dummy := DBMS_XMLGEN.CONVERT(route_details_rec.revision_number);
8667 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8668 dbms_lob.write(l_merged_lob, LENGTH('</Revision>'),LENGTH(l_merged_lob)+1, '</Revision>');
8669 
8670 dbms_lob.write(l_merged_lob, LENGTH('<RevisionDate>'),LENGTH(l_merged_lob)+1, '<RevisionDate>');
8671 dummy := DBMS_XMLGEN.CONVERT(route_details_rec.LAST_UPDATE_DATE);
8672 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8673 dbms_lob.write(l_merged_lob, LENGTH('</RevisionDate>'),LENGTH(l_merged_lob)+1, '</RevisionDate>');
8674 
8675 
8676 IF (route_details_rec.enigma_doc_id IS NOT NULL) THEN
8677         dbms_lob.write(l_merged_lob, LENGTH('<EnigmaDocId>'),LENGTH(l_merged_lob)+1, '<EnigmaDocId>');
8678         dummy := DBMS_XMLGEN.CONVERT(route_details_rec.enigma_doc_id);
8679         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8680         dbms_lob.write(l_merged_lob, LENGTH('</EnigmaDocId>'),LENGTH(l_merged_lob)+1, '</EnigmaDocId>');
8681 ELSE
8682         dbms_lob.write(l_merged_lob, LENGTH('<EnigmaDocId/>'),LENGTH(l_merged_lob)+1, '<EnigmaDocId/>');
8683 END IF;
8684 IF (route_details_rec.enigma_route_id IS NOT NULL) THEN
8685         dbms_lob.write(l_merged_lob, LENGTH('<EnigmaRouteId>'),LENGTH(l_merged_lob)+1, '<EnigmaRouteId>');
8686         dummy := DBMS_XMLGEN.CONVERT(route_details_rec.enigma_route_id);
8687         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8688         dbms_lob.write(l_merged_lob, LENGTH('</EnigmaRouteId>'),LENGTH(l_merged_lob)+1, '</EnigmaRouteId>');
8689 ELSE
8690         dbms_lob.write(l_merged_lob, LENGTH('<EnigmaRouteId/>'),LENGTH(l_merged_lob)+1, '<EnigmaRouteId/>');
8691 END IF;
8692 IF (route_details_rec.zone IS NOT NULL) THEN
8693         dbms_lob.write(l_merged_lob, LENGTH('<Zone>'),LENGTH(l_merged_lob)+1, '<Zone>');
8694         dummy := DBMS_XMLGEN.CONVERT(route_details_rec.zone);
8695         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8696         dbms_lob.write(l_merged_lob, LENGTH('</Zone>'),LENGTH(l_merged_lob)+1, '</Zone>');
8697 ELSE
8698         dbms_lob.write(l_merged_lob, LENGTH('<Zone/>'),LENGTH(l_merged_lob)+1, '<Zone/>');
8699 END IF;
8700 IF (route_details_rec.sub_zone IS NOT NULL) THEN
8701         dbms_lob.write(l_merged_lob, LENGTH('<SubZone>'),LENGTH(l_merged_lob)+1, '<SubZone>');
8702         dummy := DBMS_XMLGEN.CONVERT(route_details_rec.sub_zone);
8703         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8704         dbms_lob.write(l_merged_lob, LENGTH('</SubZone>'),LENGTH(l_merged_lob)+1, '</SubZone>');
8705 ELSE
8706         dbms_lob.write(l_merged_lob, LENGTH('<SubZone/>'),LENGTH(l_merged_lob)+1, '<SubZone/>');
8707 END IF;
8708 IF (route_details_rec.process IS NOT NULL) THEN
8709         dbms_lob.write(l_merged_lob, LENGTH('<Process>'),LENGTH(l_merged_lob)+1, '<Process>');
8710         dummy := DBMS_XMLGEN.CONVERT(route_details_rec.process);
8711         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8712         dbms_lob.write(l_merged_lob, LENGTH('</Process>'),LENGTH(l_merged_lob)+1, '</Process>');
8713 ELSE
8714         dbms_lob.write(l_merged_lob, LENGTH('<Process/>'),LENGTH(l_merged_lob)+1, '<Process/>');
8715 END IF;
8716 IF (route_details_rec.job_card_lyt_meaning IS NOT NULL) THEN
8717         dbms_lob.write(l_merged_lob, LENGTH('<JobCardType>'),LENGTH(l_merged_lob)+1, '<JobCardType>');
8718         dummy := DBMS_XMLGEN.CONVERT(route_details_rec.job_card_lyt_meaning);
8719         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8720         dbms_lob.write(l_merged_lob, LENGTH('</JobCardType>'),LENGTH(l_merged_lob)+1, '</JobCardType>');
8721 ELSE
8722         dbms_lob.write(l_merged_lob, LENGTH('<JobCardType/>'),LENGTH(l_merged_lob)+1, '<JobCardType/>');
8723 END IF;
8724 IF (route_details_rec.model_code IS NOT NULL) THEN
8725         dbms_lob.write(l_merged_lob, LENGTH('<ModelCode>'),LENGTH(l_merged_lob)+1, '<ModelCode>');
8726         dummy := DBMS_XMLGEN.CONVERT(route_details_rec.model_code);
8727         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8728         dbms_lob.write(l_merged_lob, LENGTH('</ModelCode>'),LENGTH(l_merged_lob)+1, '</ModelCode>');
8729 ELSE
8730         dbms_lob.write(l_merged_lob, LENGTH('<ModelCode/>'),LENGTH(l_merged_lob)+1, '<ModelCode/>');
8731 END IF;
8732 
8733 IF (l_log_statement >= l_log_current_level)THEN
8734         fnd_log.string ( l_log_statement, 'ahl.plsql.'
8735         ||g_pkg_name
8736         ||'.'
8737         ||l_api_name ,'Checkpoint 6 : l_route_id : '
8738         || l_route_id);
8739 END IF;
8740 
8741 OPEN route_ffs_csr(l_route_id);
8742 FETCH route_ffs_csr
8743 INTO  route_ffs_rec;
8744 
8745 CLOSE route_ffs_csr;
8746 
8747 IF (l_log_statement >= l_log_current_level)THEN
8748         fnd_log.string ( l_log_statement, 'ahl.plsql.'
8749         ||g_pkg_name
8750         ||'.'
8751         ||l_api_name ,'Checkpoint 7 : l_route_id : '
8752         || l_route_id);
8753 END IF;
8754 
8755 dbms_lob.write(l_merged_lob, LENGTH('<RouteKFFs>'),LENGTH(l_merged_lob)+1, '<RouteKFFs>');
8756 IF (route_ffs_rec.Segment1 IS NOT NULL) THEN
8757         dbms_lob.write(l_merged_lob, LENGTH('<Segment1>'),LENGTH(l_merged_lob)+1, '<Segment1>');
8758         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment1);
8759         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8760         dbms_lob.write(l_merged_lob, LENGTH('</Segment1>'),LENGTH(l_merged_lob)+1, '</Segment1>');
8761 ELSE
8762         dbms_lob.write(l_merged_lob, LENGTH('<Segment1/>'),LENGTH(l_merged_lob)+1, '<Segment1/>');
8763 END IF;
8764 IF (route_ffs_rec.Segment2 IS NOT NULL) THEN
8765         dbms_lob.write(l_merged_lob, LENGTH('<Segment2>'),LENGTH(l_merged_lob)+1, '<Segment2>');
8766         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment2);
8767         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8768         dbms_lob.write(l_merged_lob, LENGTH('</Segment2>'),LENGTH(l_merged_lob)+1, '</Segment2>');
8769 ELSE
8770         dbms_lob.write(l_merged_lob, LENGTH('<Segment2/>'),LENGTH(l_merged_lob)+1, '<Segment2/>');
8771 END IF;
8772 IF (route_ffs_rec.Segment3 IS NOT NULL) THEN
8773         dbms_lob.write(l_merged_lob, LENGTH('<Segment3>'),LENGTH(l_merged_lob)+1, '<Segment3>');
8774         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment3);
8775         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8776         dbms_lob.write(l_merged_lob, LENGTH('</Segment3>'),LENGTH(l_merged_lob)+1, '</Segment3>');
8777 ELSE
8778         dbms_lob.write(l_merged_lob, LENGTH('<Segment3/>'),LENGTH(l_merged_lob)+1, '<Segment3/>');
8779 END IF;
8780 IF (route_ffs_rec.Segment4 IS NOT NULL) THEN
8781         dbms_lob.write(l_merged_lob, LENGTH('<Segment4>'),LENGTH(l_merged_lob)+1, '<Segment4>');
8782         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment4);
8783         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8784         dbms_lob.write(l_merged_lob, LENGTH('</Segment4>'),LENGTH(l_merged_lob)+1, '</Segment4>');
8785 ELSE
8786         dbms_lob.write(l_merged_lob, LENGTH('<Segment4/>'),LENGTH(l_merged_lob)+1, '<Segment4/>');
8787 END IF;
8788 IF (route_ffs_rec.Segment5 IS NOT NULL) THEN
8789         dbms_lob.write(l_merged_lob, LENGTH('<Segment5>'),LENGTH(l_merged_lob)+1, '<Segment5>');
8790         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment5);
8791         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8792         dbms_lob.write(l_merged_lob, LENGTH('</Segment5>'),LENGTH(l_merged_lob)+1, '</Segment5>');
8793 ELSE
8794         dbms_lob.write(l_merged_lob, LENGTH('<Segment5/>'),LENGTH(l_merged_lob)+1, '<Segment5/>');
8795 END IF;
8796 IF (route_ffs_rec.Segment6 IS NOT NULL) THEN
8797         dbms_lob.write(l_merged_lob, LENGTH('<Segment6>'),LENGTH(l_merged_lob)+1, '<Segment6>');
8798         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment6);
8799         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8800         dbms_lob.write(l_merged_lob, LENGTH('</Segment6>'),LENGTH(l_merged_lob)+1, '</Segment6>');
8801 ELSE
8802         dbms_lob.write(l_merged_lob, LENGTH('<Segment6/>'),LENGTH(l_merged_lob)+1, '<Segment6/>');
8803 END IF;
8804 IF (route_ffs_rec.Segment7 IS NOT NULL) THEN
8805         dbms_lob.write(l_merged_lob, LENGTH('<Segment7>'),LENGTH(l_merged_lob)+1, '<Segment7>');
8806         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment7);
8807         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8808         dbms_lob.write(l_merged_lob, LENGTH('</Segment7>'),LENGTH(l_merged_lob)+1, '</Segment7>');
8809 ELSE
8810         dbms_lob.write(l_merged_lob, LENGTH('<Segment7/>'),LENGTH(l_merged_lob)+1, '<Segment7/>');
8811 END IF;
8812 IF (route_ffs_rec.Segment8 IS NOT NULL) THEN
8813         dbms_lob.write(l_merged_lob, LENGTH('<Segment8>'),LENGTH(l_merged_lob)+1, '<Segment8>');
8814         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment8);
8815         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8816         dbms_lob.write(l_merged_lob, LENGTH('</Segment8>'),LENGTH(l_merged_lob)+1, '</Segment8>');
8817 ELSE
8818         dbms_lob.write(l_merged_lob, LENGTH('<Segment8/>'),LENGTH(l_merged_lob)+1, '<Segment8/>');
8819 END IF;
8820 IF (route_ffs_rec.Segment9 IS NOT NULL) THEN
8821         dbms_lob.write(l_merged_lob, LENGTH('<Segment9>'),LENGTH(l_merged_lob)+1, '<Segment9>');
8822         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment1);
8823         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8824         dbms_lob.write(l_merged_lob, LENGTH('</Segment9>'),LENGTH(l_merged_lob)+1, '</Segment9>');
8825 ELSE
8826         dbms_lob.write(l_merged_lob, LENGTH('<Segment9/>'),LENGTH(l_merged_lob)+1, '<Segment9/>');
8827 END IF;
8828 IF (route_ffs_rec.Segment10 IS NOT NULL) THEN
8829         dbms_lob.write(l_merged_lob, LENGTH('<Segment10>'),LENGTH(l_merged_lob)+1, '<Segment10>');
8830         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment10);
8831         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8832         dbms_lob.write(l_merged_lob, LENGTH('</Segment10>'),LENGTH(l_merged_lob)+1, '</Segment10>');
8833 ELSE
8834         dbms_lob.write(l_merged_lob, LENGTH('<Segment10/>'),LENGTH(l_merged_lob)+1, '<Segment10/>');
8835 END IF;
8836 IF (route_ffs_rec.Segment11 IS NOT NULL) THEN
8837         dbms_lob.write(l_merged_lob, LENGTH('<Segment11>'),LENGTH(l_merged_lob)+1, '<Segment11>');
8838         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment11);
8839         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8840         dbms_lob.write(l_merged_lob, LENGTH('</Segment11>'),LENGTH(l_merged_lob)+1, '</Segment11>');
8841 ELSE
8842         dbms_lob.write(l_merged_lob, LENGTH('<Segment11/>'),LENGTH(l_merged_lob)+1, '<Segment11/>');
8843 END IF;
8844 IF (route_ffs_rec.Segment12 IS NOT NULL) THEN
8845         dbms_lob.write(l_merged_lob, LENGTH('<Segment12>'),LENGTH(l_merged_lob)+1, '<Segment12>');
8846         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment12);
8847         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8848         dbms_lob.write(l_merged_lob, LENGTH('</Segment12>'),LENGTH(l_merged_lob)+1, '</Segment12>');
8849 ELSE
8850         dbms_lob.write(l_merged_lob, LENGTH('<Segment12/>'),LENGTH(l_merged_lob)+1, '<Segment12/>');
8851 END IF;
8852 IF (route_ffs_rec.Segment13 IS NOT NULL) THEN
8853         dbms_lob.write(l_merged_lob, LENGTH('<Segment13>'),LENGTH(l_merged_lob)+1, '<Segment13>');
8854         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment13);
8855         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8856         dbms_lob.write(l_merged_lob, LENGTH('</Segment13>'),LENGTH(l_merged_lob)+1, '</Segment13>');
8857 ELSE
8858         dbms_lob.write(l_merged_lob, LENGTH('<Segment13/>'),LENGTH(l_merged_lob)+1, '<Segment13/>');
8859 END IF;
8860 IF (route_ffs_rec.Segment14 IS NOT NULL) THEN
8861         dbms_lob.write(l_merged_lob, LENGTH('<Segment14>'),LENGTH(l_merged_lob)+1, '<Segment14>');
8862         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment14);
8863         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8864         dbms_lob.write(l_merged_lob, LENGTH('</Segment14>'),LENGTH(l_merged_lob)+1, '</Segment14>');
8865 ELSE
8866         dbms_lob.write(l_merged_lob, LENGTH('<Segment14/>'),LENGTH(l_merged_lob)+1, '<Segment14/>');
8867 END IF;
8868 IF (route_ffs_rec.Segment15 IS NOT NULL) THEN
8869         dbms_lob.write(l_merged_lob, LENGTH('<Segment15>'),LENGTH(l_merged_lob)+1, '<Segment15>');
8870         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Segment15);
8871         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8872         dbms_lob.write(l_merged_lob, LENGTH('</Segment15>'),LENGTH(l_merged_lob)+1, '</Segment15>');
8873 ELSE
8874         dbms_lob.write(l_merged_lob, LENGTH('<Segment15/>'),LENGTH(l_merged_lob)+1, '<Segment15/>');
8875 END IF;
8876 
8877 BEGIN
8878    select concatenated_segments into l_concat_segment
8879    from ahl_routes_b_kfv
8880    where route_id = l_route_id;
8881 EXCEPTION
8882    WHEN OTHERS THEN
8883      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8884 END;
8885 
8886 IF (l_log_statement >= l_log_current_level)THEN
8887         fnd_log.string ( l_log_statement, 'ahl.plsql.'
8888         ||g_pkg_name
8889         ||'.'
8890         ||l_api_name ,'Checkpoint 7.1 : l_route_id:concatenated_segments:'
8891         || l_route_id || ':' || l_concat_segment);
8892 END IF;
8893 
8894 Get_Route_KFF_Desc(l_concat_segment, l_mti_seglist, kff_return_status);
8895 
8896 IF (l_log_statement >= l_log_current_level)THEN
8897         fnd_log.string ( l_log_statement, 'ahl.plsql.'
8898         ||g_pkg_name
8899         ||'.'
8900         ||l_api_name ,'Checkpoint 7.2 : l_route_id:kff_return_status:'
8901         || l_route_id || ':' || kff_return_status);
8902 END IF;
8903 
8904 IF (kff_return_status = FND_API.G_RET_STS_SUCCESS) THEN
8905 
8906 IF (l_mti_seglist(1) IS NOT NULL) THEN
8907         dbms_lob.write(l_merged_lob, LENGTH('<Segment1Desc>'),LENGTH(l_merged_lob)+1, '<Segment1Desc>');
8908         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(1));
8909         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8910         dbms_lob.write(l_merged_lob, LENGTH('</Segment1Desc>'),LENGTH(l_merged_lob)+1, '</Segment1Desc>');
8911 ELSE
8912         dbms_lob.write(l_merged_lob, LENGTH('<Segment1Desc/>'),LENGTH(l_merged_lob)+1, '<Segment1Desc/>');
8913 END IF;
8914 IF (l_mti_seglist(2) IS NOT NULL) THEN
8915         dbms_lob.write(l_merged_lob, LENGTH('<Segment2Desc>'),LENGTH(l_merged_lob)+1, '<Segment2Desc>');
8916         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(2));
8917         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8918         dbms_lob.write(l_merged_lob, LENGTH('</Segment2Desc>'),LENGTH(l_merged_lob)+1, '</Segment2Desc>');
8919 ELSE
8920         dbms_lob.write(l_merged_lob, LENGTH('<Segment2Desc/>'),LENGTH(l_merged_lob)+1, '<Segment2Desc/>');
8921 END IF;
8922 IF (l_mti_seglist(3) IS NOT NULL) THEN
8923         dbms_lob.write(l_merged_lob, LENGTH('<Segment3Desc>'),LENGTH(l_merged_lob)+1, '<Segment3Desc>');
8924         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(3));
8925         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8926         dbms_lob.write(l_merged_lob, LENGTH('</Segment3Desc>'),LENGTH(l_merged_lob)+1, '</Segment3Desc>');
8927 ELSE
8928         dbms_lob.write(l_merged_lob, LENGTH('<Segment3Desc/>'),LENGTH(l_merged_lob)+1, '<Segment3Desc/>');
8929 END IF;
8930 IF (l_mti_seglist(4) IS NOT NULL) THEN
8931         dbms_lob.write(l_merged_lob, LENGTH('<Segment4Desc>'),LENGTH(l_merged_lob)+1, '<Segment4Desc>');
8932         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(4));
8933         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8934         dbms_lob.write(l_merged_lob, LENGTH('</Segment4Desc>'),LENGTH(l_merged_lob)+1, '</Segment4Desc>');
8935 ELSE
8936         dbms_lob.write(l_merged_lob, LENGTH('<Segment4Desc/>'),LENGTH(l_merged_lob)+1, '<Segment4Desc/>');
8937 END IF;
8938 IF (l_mti_seglist(5) IS NOT NULL) THEN
8939         dbms_lob.write(l_merged_lob, LENGTH('<Segment5Desc>'),LENGTH(l_merged_lob)+1, '<Segment5Desc>');
8940         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(5));
8941         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8942         dbms_lob.write(l_merged_lob, LENGTH('</Segment5Desc>'),LENGTH(l_merged_lob)+1, '</Segment5Desc>');
8943 ELSE
8944         dbms_lob.write(l_merged_lob, LENGTH('<Segment5Desc/>'),LENGTH(l_merged_lob)+1, '<Segment5Desc/>');
8945 END IF;
8946 IF (l_mti_seglist(6) IS NOT NULL) THEN
8947         dbms_lob.write(l_merged_lob, LENGTH('<Segment6Desc>'),LENGTH(l_merged_lob)+1, '<Segment6Desc>');
8948         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(6));
8949         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8950         dbms_lob.write(l_merged_lob, LENGTH('</Segment6Desc>'),LENGTH(l_merged_lob)+1, '</Segment6Desc>');
8951 ELSE
8952         dbms_lob.write(l_merged_lob, LENGTH('<Segment6Desc/>'),LENGTH(l_merged_lob)+1, '<Segment6Desc/>');
8953 END IF;
8954 IF (l_mti_seglist(7) IS NOT NULL) THEN
8955         dbms_lob.write(l_merged_lob, LENGTH('<Segment7Desc>'),LENGTH(l_merged_lob)+1, '<Segment7Desc>');
8956         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(7));
8957         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8958         dbms_lob.write(l_merged_lob, LENGTH('</Segment7Desc>'),LENGTH(l_merged_lob)+1, '</Segment7Desc>');
8959 ELSE
8960         dbms_lob.write(l_merged_lob, LENGTH('<Segment7Desc/>'),LENGTH(l_merged_lob)+1, '<Segment7Desc/>');
8961 END IF;
8962 IF (l_mti_seglist(8) IS NOT NULL) THEN
8963         dbms_lob.write(l_merged_lob, LENGTH('<Segment8Desc>'),LENGTH(l_merged_lob)+1, '<Segment8Desc>');
8964         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(8));
8965         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8966         dbms_lob.write(l_merged_lob, LENGTH('</Segment8Desc>'),LENGTH(l_merged_lob)+1, '</Segment8Desc>');
8967 ELSE
8968         dbms_lob.write(l_merged_lob, LENGTH('<Segment8Desc/>'),LENGTH(l_merged_lob)+1, '<Segment8Desc/>');
8969 END IF;
8970 IF (l_mti_seglist(9) IS NOT NULL) THEN
8971         dbms_lob.write(l_merged_lob, LENGTH('<Segment9Desc>'),LENGTH(l_merged_lob)+1, '<Segment9Desc>');
8972         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(9));
8973         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8974         dbms_lob.write(l_merged_lob, LENGTH('</Segment9Desc>'),LENGTH(l_merged_lob)+1, '</Segment9Desc>');
8975 ELSE
8976         dbms_lob.write(l_merged_lob, LENGTH('<Segment9Desc/>'),LENGTH(l_merged_lob)+1, '<Segment9Desc/>');
8977 END IF;
8978 IF (l_mti_seglist(10) IS NOT NULL) THEN
8979         dbms_lob.write(l_merged_lob, LENGTH('<Segment10Desc>'),LENGTH(l_merged_lob)+1, '<Segment10Desc>');
8980         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(10));
8981         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8982         dbms_lob.write(l_merged_lob, LENGTH('</Segment10Desc>'),LENGTH(l_merged_lob)+1, '</Segment10Desc>');
8983 ELSE
8984         dbms_lob.write(l_merged_lob, LENGTH('<Segment10Desc/>'),LENGTH(l_merged_lob)+1, '<Segment10Desc/>');
8985 END IF;
8986 IF (l_mti_seglist(11) IS NOT NULL) THEN
8987         dbms_lob.write(l_merged_lob, LENGTH('<Segment11Desc>'),LENGTH(l_merged_lob)+1, '<Segment11Desc>');
8988         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(11));
8989         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8990         dbms_lob.write(l_merged_lob, LENGTH('</Segment11Desc>'),LENGTH(l_merged_lob)+1, '</Segment11Desc>');
8991 ELSE
8992         dbms_lob.write(l_merged_lob, LENGTH('<Segment11Desc/>'),LENGTH(l_merged_lob)+1, '<Segment11Desc/>');
8993 END IF;
8994 IF (l_mti_seglist(12) IS NOT NULL) THEN
8995         dbms_lob.write(l_merged_lob, LENGTH('<Segment12Desc>'),LENGTH(l_merged_lob)+1, '<Segment12Desc>');
8996         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(12));
8997         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
8998         dbms_lob.write(l_merged_lob, LENGTH('</Segment12Desc>'),LENGTH(l_merged_lob)+1, '</Segment12Desc>');
8999 ELSE
9000         dbms_lob.write(l_merged_lob, LENGTH('<Segment12Desc/>'),LENGTH(l_merged_lob)+1, '<Segment12Desc/>');
9001 END IF;
9002 IF (l_mti_seglist(13) IS NOT NULL) THEN
9003         dbms_lob.write(l_merged_lob, LENGTH('<Segment13Desc>'),LENGTH(l_merged_lob)+1, '<Segment13Desc>');
9004         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(13));
9005         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9006         dbms_lob.write(l_merged_lob, LENGTH('</Segment13Desc>'),LENGTH(l_merged_lob)+1, '</Segment13Desc>');
9007 ELSE
9008         dbms_lob.write(l_merged_lob, LENGTH('<Segment13Desc/>'),LENGTH(l_merged_lob)+1, '<Segment13Desc/>');
9009 END IF;
9010 IF (l_mti_seglist(14) IS NOT NULL) THEN
9011         dbms_lob.write(l_merged_lob, LENGTH('<Segment14Desc>'),LENGTH(l_merged_lob)+1, '<Segment14Desc>');
9012         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(14));
9013         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9014         dbms_lob.write(l_merged_lob, LENGTH('</Segment14Desc>'),LENGTH(l_merged_lob)+1, '</Segment14Desc>');
9015 ELSE
9016         dbms_lob.write(l_merged_lob, LENGTH('<Segment14Desc/>'),LENGTH(l_merged_lob)+1, '<Segment14Desc/>');
9017 END IF;
9018 IF (l_mti_seglist(15) IS NOT NULL) THEN
9019         dbms_lob.write(l_merged_lob, LENGTH('<Segment15Desc>'),LENGTH(l_merged_lob)+1, '<Segment15Desc>');
9020         dummy := DBMS_XMLGEN.CONVERT(l_mti_seglist(15));
9021         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9022         dbms_lob.write(l_merged_lob, LENGTH('</Segment15Desc>'),LENGTH(l_merged_lob)+1, '</Segment15Desc>');
9023 ELSE
9024         dbms_lob.write(l_merged_lob, LENGTH('<Segment15Desc/>'),LENGTH(l_merged_lob)+1, '<Segment15Desc/>');
9025 END IF;
9026 END IF;
9027 
9028 dbms_lob.write(l_merged_lob, LENGTH('</RouteKFFs>'),LENGTH(l_merged_lob)+1, '</RouteKFFs>');
9029 
9030 IF (l_log_statement >= l_log_current_level)THEN
9031         fnd_log.string ( l_log_statement, 'ahl.plsql.'
9032         ||g_pkg_name
9033         ||'.'
9034         ||l_api_name ,'Checkpoint 7.3 : Route DFF: l_route_id:'
9035         || l_route_id);
9036 END IF;
9037 
9038 -- Route DFFs
9039 dbms_lob.write(l_merged_lob, LENGTH('<RouteDFFs>'),LENGTH(l_merged_lob)+1, '<RouteDFFs>');
9040 IF (route_ffs_rec.Attribute1 IS NOT NULL) THEN
9041         dbms_lob.write(l_merged_lob, LENGTH('<Attribute1>'),LENGTH(l_merged_lob)+1, '<Attribute1>');
9042         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute1);
9043         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9044         dbms_lob.write(l_merged_lob, LENGTH('</Attribute1>'),LENGTH(l_merged_lob)+1, '</Attribute1>');
9045 ELSE
9046         dbms_lob.write(l_merged_lob, LENGTH('<Attribute1/>'),LENGTH(l_merged_lob)+1, '<Attribute1/>');
9047 END IF;
9048 IF (route_ffs_rec.Attribute2 IS NOT NULL) THEN
9049         dbms_lob.write(l_merged_lob, LENGTH('<Attribute2>'),LENGTH(l_merged_lob)+1, '<Attribute2>');
9050         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute2);
9051         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9052         dbms_lob.write(l_merged_lob, LENGTH('</Attribute2>'),LENGTH(l_merged_lob)+1, '</Attribute2>');
9053 ELSE
9054         dbms_lob.write(l_merged_lob, LENGTH('<Attribute2/>'),LENGTH(l_merged_lob)+1, '<Attribute2/>');
9055 END IF;
9056 IF (route_ffs_rec.Attribute3 IS NOT NULL) THEN
9057         dbms_lob.write(l_merged_lob, LENGTH('<Attribute3>'),LENGTH(l_merged_lob)+1, '<Attribute3>');
9058         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute3);
9059         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9060         dbms_lob.write(l_merged_lob, LENGTH('</Attribute3>'),LENGTH(l_merged_lob)+1, '</Attribute3>');
9061 ELSE
9062         dbms_lob.write(l_merged_lob, LENGTH('<Attribute3/>'),LENGTH(l_merged_lob)+1, '<Attribute3/>');
9063 END IF;
9064 IF (route_ffs_rec.Attribute4 IS NOT NULL) THEN
9065         dbms_lob.write(l_merged_lob, LENGTH('<Attribute4>'),LENGTH(l_merged_lob)+1, '<Attribute4>');
9066         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute4);
9067         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9068         dbms_lob.write(l_merged_lob, LENGTH('</Attribute4>'),LENGTH(l_merged_lob)+1, '</Attribute4>');
9069 ELSE
9070         dbms_lob.write(l_merged_lob, LENGTH('<Attribute4/>'),LENGTH(l_merged_lob)+1, '<Attribute4/>');
9071 END IF;
9072 IF (route_ffs_rec.Attribute5 IS NOT NULL) THEN
9073         dbms_lob.write(l_merged_lob, LENGTH('<Attribute5>'),LENGTH(l_merged_lob)+1, '<Attribute5>');
9074         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute5);
9075         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9076         dbms_lob.write(l_merged_lob, LENGTH('</Attribute5>'),LENGTH(l_merged_lob)+1, '</Attribute5>');
9077 ELSE
9078         dbms_lob.write(l_merged_lob, LENGTH('<Attribute5/>'),LENGTH(l_merged_lob)+1, '<Attribute5/>');
9079 END IF;
9080 IF (route_ffs_rec.Attribute6 IS NOT NULL) THEN
9081         dbms_lob.write(l_merged_lob, LENGTH('<Attribute6>'),LENGTH(l_merged_lob)+1, '<Attribute6>');
9082         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute6);
9083         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9084         dbms_lob.write(l_merged_lob, LENGTH('</Attribute6>'),LENGTH(l_merged_lob)+1, '</Attribute6>');
9085 ELSE
9086         dbms_lob.write(l_merged_lob, LENGTH('<Attribute6/>'),LENGTH(l_merged_lob)+1, '<Attribute6/>');
9087 END IF;
9088 IF (route_ffs_rec.Attribute7 IS NOT NULL) THEN
9089         dbms_lob.write(l_merged_lob, LENGTH('<Attribute7>'),LENGTH(l_merged_lob)+1, '<Attribute7>');
9090         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute7);
9091         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9092         dbms_lob.write(l_merged_lob, LENGTH('</Attribute7>'),LENGTH(l_merged_lob)+1, '</Attribute7>');
9093 ELSE
9094         dbms_lob.write(l_merged_lob, LENGTH('<Attribute7/>'),LENGTH(l_merged_lob)+1, '<Attribute7/>');
9095 END IF;
9096 IF (route_ffs_rec.Attribute8 IS NOT NULL) THEN
9097         dbms_lob.write(l_merged_lob, LENGTH('<Attribute8>'),LENGTH(l_merged_lob)+1, '<Attribute8>');
9098         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute8);
9099         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9100         dbms_lob.write(l_merged_lob, LENGTH('</Attribute8>'),LENGTH(l_merged_lob)+1, '</Attribute8>');
9101 ELSE
9102         dbms_lob.write(l_merged_lob, LENGTH('<Attribute8/>'),LENGTH(l_merged_lob)+1, '<Attribute8/>');
9103 END IF;
9104 IF (route_ffs_rec.Attribute9 IS NOT NULL) THEN
9105         dbms_lob.write(l_merged_lob, LENGTH('<Attribute9>'),LENGTH(l_merged_lob)+1, '<Attribute9>');
9106         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute1);
9107         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9108         dbms_lob.write(l_merged_lob, LENGTH('</Attribute9>'),LENGTH(l_merged_lob)+1, '</Attribute9>');
9109 ELSE
9110         dbms_lob.write(l_merged_lob, LENGTH('<Attribute9/>'),LENGTH(l_merged_lob)+1, '<Attribute9/>');
9111 END IF;
9112 IF (route_ffs_rec.Attribute10 IS NOT NULL) THEN
9113         dbms_lob.write(l_merged_lob, LENGTH('<Attribute10>'),LENGTH(l_merged_lob)+1, '<Attribute10>');
9114         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute10);
9115         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9116         dbms_lob.write(l_merged_lob, LENGTH('</Attribute10>'),LENGTH(l_merged_lob)+1, '</Attribute10>');
9117 ELSE
9118         dbms_lob.write(l_merged_lob, LENGTH('<Attribute10/>'),LENGTH(l_merged_lob)+1, '<Attribute10/>');
9119 END IF;
9120 IF (route_ffs_rec.Attribute11 IS NOT NULL) THEN
9121         dbms_lob.write(l_merged_lob, LENGTH('<Attribute11>'),LENGTH(l_merged_lob)+1, '<Attribute11>');
9122         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute11);
9123         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9124         dbms_lob.write(l_merged_lob, LENGTH('</Attribute11>'),LENGTH(l_merged_lob)+1, '</Attribute11>');
9125 ELSE
9126         dbms_lob.write(l_merged_lob, LENGTH('<Attribute11/>'),LENGTH(l_merged_lob)+1, '<Attribute11/>');
9127 END IF;
9128 IF (route_ffs_rec.Attribute12 IS NOT NULL) THEN
9129         dbms_lob.write(l_merged_lob, LENGTH('<Attribute12>'),LENGTH(l_merged_lob)+1, '<Attribute12>');
9130         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute12);
9131         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9132         dbms_lob.write(l_merged_lob, LENGTH('</Attribute12>'),LENGTH(l_merged_lob)+1, '</Attribute12>');
9133 ELSE
9134         dbms_lob.write(l_merged_lob, LENGTH('<Attribute12/>'),LENGTH(l_merged_lob)+1, '<Attribute12/>');
9135 END IF;
9136 IF (route_ffs_rec.Attribute13 IS NOT NULL) THEN
9137         dbms_lob.write(l_merged_lob, LENGTH('<Attribute13>'),LENGTH(l_merged_lob)+1, '<Attribute13>');
9138         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute13);
9139         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9140         dbms_lob.write(l_merged_lob, LENGTH('</Attribute13>'),LENGTH(l_merged_lob)+1, '</Attribute13>');
9141 ELSE
9142         dbms_lob.write(l_merged_lob, LENGTH('<Attribute13/>'),LENGTH(l_merged_lob)+1, '<Attribute13/>');
9143 END IF;
9144 IF (route_ffs_rec.Attribute14 IS NOT NULL) THEN
9145         dbms_lob.write(l_merged_lob, LENGTH('<Attribute14>'),LENGTH(l_merged_lob)+1, '<Attribute14>');
9146         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute14);
9147         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9148         dbms_lob.write(l_merged_lob, LENGTH('</Attribute14>'),LENGTH(l_merged_lob)+1, '</Attribute14>');
9149 ELSE
9150         dbms_lob.write(l_merged_lob, LENGTH('<Attribute14/>'),LENGTH(l_merged_lob)+1, '<Attribute14/>');
9151 END IF;
9152 IF (route_ffs_rec.Attribute15 IS NOT NULL) THEN
9153         dbms_lob.write(l_merged_lob, LENGTH('<Attribute15>'),LENGTH(l_merged_lob)+1, '<Attribute15>');
9154         dummy := DBMS_XMLGEN.CONVERT(route_ffs_rec.Attribute15);
9155         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9156         dbms_lob.write(l_merged_lob, LENGTH('</Attribute15>'),LENGTH(l_merged_lob)+1, '</Attribute15>');
9157 ELSE
9158         dbms_lob.write(l_merged_lob, LENGTH('<Attribute15/>'),LENGTH(l_merged_lob)+1, '<Attribute15/>');
9159 END IF;
9160 dbms_lob.write(l_merged_lob, LENGTH('</RouteDFFs>'),LENGTH(l_merged_lob)+1, '</RouteDFFs>');
9161 
9162 OPEN panel_details_csr(l_route_id);
9163 dbms_lob.write(l_merged_lob, LENGTH('<AccessPanels>'),LENGTH(l_merged_lob)+1, '<AccessPanels>');
9164 LOOP
9165         FETCH panel_details_csr
9166         INTO  panel_details_rec;
9167 
9168         EXIT WHEN panel_details_csr%NOTFOUND;
9169         dbms_lob.write(l_merged_lob, LENGTH('<AccessPanel>'),LENGTH(l_merged_lob)+1, '<AccessPanel>');
9170         IF (panel_details_rec.panel_type IS NOT NULL) THEN
9171                 dbms_lob.write(l_merged_lob, LENGTH('<PanelType>'),LENGTH(l_merged_lob)+1, '<PanelType>');
9172                 dummy := DBMS_XMLGEN.CONVERT(panel_details_rec.panel_type);
9173                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9174                 dbms_lob.write(l_merged_lob, LENGTH('</PanelType>'),LENGTH(l_merged_lob)+1, '</PanelType>');
9175         ELSE
9176                 dbms_lob.write(l_merged_lob, LENGTH('<PanelType/>'),LENGTH(l_merged_lob)+1, '<PanelType/>');
9177         END IF;
9178         IF (panel_details_rec.panel_type_desc IS NOT NULL) THEN
9179                 dbms_lob.write(l_merged_lob, LENGTH('<PanelDesc>'),LENGTH(l_merged_lob)+1, '<PanelDesc>');
9180                 dummy := DBMS_XMLGEN.CONVERT(panel_details_rec.panel_type_desc);
9181                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9182                 dbms_lob.write(l_merged_lob, LENGTH('</PanelDesc>'),LENGTH(l_merged_lob)+1, '</PanelDesc>');
9183         ELSE
9184                 dbms_lob.write(l_merged_lob, LENGTH('<PanelDesc/>'),LENGTH(l_merged_lob)+1, '<PanelDesc/>');
9185         END IF;
9186         dbms_lob.write(l_merged_lob, LENGTH('</AccessPanel>'),LENGTH(l_merged_lob)+1, '</AccessPanel>');
9187 END LOOP;
9188 dbms_lob.write(l_merged_lob, LENGTH('</AccessPanels>'),LENGTH(l_merged_lob)+1, '</AccessPanels>');
9189 CLOSE panel_details_csr;
9190 
9191 dbms_lob.write(l_merged_lob, LENGTH('<Operations>'),LENGTH(l_merged_lob)+1, '<Operations>');
9192 OPEN op_det_csr(l_route_id, l_workorder_id);
9193 LOOP
9194         FETCH op_det_csr
9195         INTO  wo_op_details_rec;
9196         EXIT WHEN op_det_csr%NOTFOUND;
9197         dbms_lob.write(l_merged_lob, LENGTH('<Operation>'),LENGTH(l_merged_lob)+1, '<Operation>');
9198         IF (wo_op_details_rec.OPERATION_SEQUENCE_NUM IS NOT NULL) THEN
9199                 dbms_lob.write(l_merged_lob, LENGTH('<OperationSequenceNumber>'),LENGTH(l_merged_lob)+1, '<OperationSequenceNumber>');
9200                 dbms_lob.write(l_merged_lob, LENGTH(wo_op_details_rec.OPERATION_SEQUENCE_NUM),LENGTH(l_merged_lob)+1, wo_op_details_rec.OPERATION_SEQUENCE_NUM);
9201                 dbms_lob.write(l_merged_lob, LENGTH('</OperationSequenceNumber>'),LENGTH(l_merged_lob)+1, '</OperationSequenceNumber>');
9202         ELSE
9203                 dbms_lob.write(l_merged_lob, LENGTH('<OperationSequenceNumber/>'),LENGTH(l_merged_lob)+1, '<OperationSequenceNumber/>');
9204         END IF;
9205         IF (wo_op_details_rec.OPERATION_CODE IS NOT NULL) THEN
9206                 dbms_lob.write(l_merged_lob, LENGTH('<OperationCode>'),LENGTH(l_merged_lob)+1, '<OperationCode>');
9207                 dummy := DBMS_XMLGEN.CONVERT(wo_op_details_rec.OPERATION_CODE);
9208                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9209                 dbms_lob.write(l_merged_lob, LENGTH('</OperationCode>'),LENGTH(l_merged_lob)+1, '</OperationCode>');
9210         ELSE
9211                 dbms_lob.write(l_merged_lob, LENGTH('<OperationCode/>'),LENGTH(l_merged_lob)+1, '<OperationCode/>');
9212         END IF;
9213         IF (wo_op_details_rec.DESCRIPTION IS NOT NULL) THEN
9214                 dbms_lob.write(l_merged_lob, LENGTH('<OpDescription>'),LENGTH(l_merged_lob)+1, '<OpDescription>');
9215                 dummy := DBMS_XMLGEN.CONVERT(wo_op_details_rec.DESCRIPTION);
9216                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9217                 dbms_lob.write(l_merged_lob, LENGTH('</OpDescription>'),LENGTH(l_merged_lob)+1, '</OpDescription>');
9218         ELSE
9219                 dbms_lob.write(l_merged_lob, LENGTH('<OpDescription/>'),LENGTH(l_merged_lob)+1, '<OpDescription/>');
9220         END IF;
9221         IF (wo_op_details_rec.OPERATION_TYPE IS NOT NULL) THEN
9222                 dbms_lob.write(l_merged_lob, LENGTH('<OperationType>'),LENGTH(l_merged_lob)+1, '<OperationType>');
9223                 dummy := DBMS_XMLGEN.CONVERT(wo_op_details_rec.OPERATION_TYPE);
9224                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9225                 dbms_lob.write(l_merged_lob, LENGTH('</OperationType>'),LENGTH(l_merged_lob)+1, '</OperationType>');
9226         ELSE
9227                 dbms_lob.write(l_merged_lob, LENGTH('<OperationType/>'),LENGTH(l_merged_lob)+1, '<OperationType/>');
9228         END IF;
9229         IF (wo_op_details_rec.REVISION_NUMBER is not null) THEN
9230                 dbms_lob.write(l_merged_lob, LENGTH('<Revision>'),LENGTH(l_merged_lob)+1, '<Revision>');
9231                 dummy := DBMS_XMLGEN.CONVERT(wo_op_details_rec.REVISION_NUMBER);
9232                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9233                 dbms_lob.write(l_merged_lob, LENGTH('</Revision>'),LENGTH(l_merged_lob)+1, '</Revision>');
9234         ELSE
9235                 dbms_lob.write(l_merged_lob, LENGTH('<Revision/>'),LENGTH(l_merged_lob)+1, '<Revision/>');
9236         END IF;
9237 
9238                 dbms_lob.write(l_merged_lob, LENGTH('<RevisionDate>'),LENGTH(l_merged_lob)+1, '<RevisionDate>');
9239                 dummy := DBMS_XMLGEN.CONVERT(wo_op_details_rec.LAST_UPDATE_DATE);
9240                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9241                 dbms_lob.write(l_merged_lob, LENGTH('</RevisionDate>'),LENGTH(l_merged_lob)+1, '</RevisionDate>');
9242 
9243 
9244         IF (wo_op_details_rec.ENIGMA_DOC_ID IS NOT NULL) THEN
9245                 dbms_lob.write(l_merged_lob, LENGTH('<EnigmaDocId>'),LENGTH(l_merged_lob)+1, '<EnigmaDocId>');
9246                 dummy := DBMS_XMLGEN.CONVERT(wo_op_details_rec.ENIGMA_DOC_ID);
9247                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9248                 dbms_lob.write(l_merged_lob, LENGTH('</EnigmaDocId>'),LENGTH(l_merged_lob)+1, '</EnigmaDocId>');
9249         ELSE
9250                 dbms_lob.write(l_merged_lob, LENGTH('<EnigmaDocId/>'),LENGTH(l_merged_lob)+1, '<EnigmaDocId/>');
9251         END IF;
9252 
9253 IF (l_log_statement >= l_log_current_level)THEN
9254     fnd_log.string (
9255       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Checkpoint 8 : wo_op_details_rec.operation_id : ' || wo_op_details_rec.operation_id);
9256 END IF;
9257 IF (wo_op_details_rec.operation_id IS NOT NULL) THEN
9258           context := dbms_xmlgen.newContext(l_op_dffs );
9259           DBMS_XMLGEN.setbindvalue (context, '1', wo_op_details_rec.operation_id);
9260 
9261           dbms_xmlgen.setRowsetTag(context, 'OperationDFFs');
9262           dbms_xmlgen.setRowTag(context,null);
9263           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9264           DBMS_XMLGEN.setNullHandling(context, 2);
9265           l_op_dffs_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9266           dbms_xmlgen.closeContext(context);
9267           -- Write to lob only when some data exists.
9268           IF dbms_lob.getlength(l_op_dffs_lob) > 0
9269           THEN
9270 
9271              l_offset := dbms_lob.INSTR(l_op_dffs_lob, '>');
9272 
9273              -- copy workorder details into final lob
9274              dbms_lob.copy(l_merged_lob, l_op_dffs_lob, dbms_lob.getlength(l_op_dffs_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9275 
9276           END IF;
9277 END IF;
9278 IF (wo_op_details_rec.operation_id IS NOT NULL) THEN
9279           context := dbms_xmlgen.newContext(l_op_doc );
9280 	  DBMS_XMLGEN.setbindvalue (context, '1', l_workorder_id);
9281 	  DBMS_XMLGEN.setbindvalue (context, '2', wo_op_details_rec.operation_id);
9282           dbms_xmlgen.setRowsetTag(context, 'AssociatedDocuments');
9283           dbms_xmlgen.setRowTag(context,'AssociatedDocument');
9284           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9285 	  DBMS_XMLGEN.setNullHandling(context, 2);
9286           l_wo_doc_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9287           dbms_xmlgen.closeContext(context);
9288           -- Write to lob only when some data exists.
9289           IF dbms_lob.getlength(l_wo_doc_lob) > 0
9290           THEN
9291              l_offset := dbms_lob.INSTR(l_wo_doc_lob, '>');
9292 
9293              -- copy workorder details into final lob
9294              dbms_lob.copy(l_merged_lob, l_wo_doc_lob, dbms_lob.getlength(l_wo_doc_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9295 
9296           END IF;
9297 END IF;
9298 dbms_lob.write(l_merged_lob, length('</Operation>'),length(l_merged_lob)+1, '</Operation>');
9299 END LOOP;
9300 CLOSE op_det_csr;
9301 dbms_lob.write(l_merged_lob, length('</Operations>'),length(l_merged_lob)+1, '</Operations>');
9302 
9303 context := dbms_xmlgen.newContext(l_route_doc);
9304 	  --DBMS_XMLGEN.setbindvalue (context, '1', l_workorder_id);
9305 	  DBMS_XMLGEN.setbindvalue (context, '1', l_route_id);
9306 
9307           dbms_xmlgen.setRowsetTag(context, 'AssociatedDocuments');
9308           dbms_xmlgen.setRowTag(context,'AssociatedDocument');
9309           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9310 	  DBMS_XMLGEN.setNullHandling(context, 2);
9311           l_wo_doc_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9312           dbms_xmlgen.closeContext(context);
9313           -- Write to lob only when some data exists.
9314           IF dbms_lob.getlength(l_wo_doc_lob) > 0
9315           THEN
9316              l_offset := dbms_lob.INSTR(l_wo_doc_lob, '>');
9317 
9318              -- copy workorder details into final lob
9319              dbms_lob.copy(l_merged_lob, l_wo_doc_lob, dbms_lob.getlength(l_wo_doc_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9320 
9321           END IF;
9322 
9323 END LOOP;
9324 CLOSE route_details_csr;
9325 dbms_lob.write(l_merged_lob, length('</Route>'),length(l_merged_lob)+1, '</Route>');
9326 
9327 dbms_lob.write(l_merged_lob, length('<WoOperations>'),length(l_merged_lob)+1, '<WoOperations>');
9328 
9329 OPEN op_details_csr (l_workorder_id);
9330 LOOP
9331         FETCH op_details_csr
9332         INTO  op_details_rec;
9333 
9334         EXIT WHEN op_details_csr%NOTFOUND;
9335         IF (l_log_statement >= l_log_current_level)THEN
9336                 fnd_log.string ( l_log_statement, 'ahl.plsql.'
9337                 ||g_pkg_name
9338                 ||'.'
9339                 ||l_api_name ,'Checkpoint 9 : l_workorder_id : '
9340                 || l_workorder_id);
9341         END IF;
9342         dbms_lob.write(l_merged_lob, LENGTH('<WoOperation>'),LENGTH(l_merged_lob)+1, '<WoOperation>');
9343         dbms_lob.write(l_merged_lob, LENGTH('<OperationSequenceNumber>'),LENGTH(l_merged_lob)+1, '<OperationSequenceNumber>');
9344         dbms_lob.write(l_merged_lob, LENGTH(op_details_rec.operation_sequence_num),LENGTH(l_merged_lob)+1, op_details_rec.operation_sequence_num);
9345         dbms_lob.write(l_merged_lob, LENGTH('</OperationSequenceNumber>'),LENGTH(l_merged_lob)+1, '</OperationSequenceNumber>');
9346         IF (op_details_rec.operation_code IS NOT NULL) THEN
9347                 dbms_lob.write(l_merged_lob, LENGTH('<OperationCode>'),LENGTH(l_merged_lob)+1, '<OperationCode>');
9348                 dummy := DBMS_XMLGEN.CONVERT(op_details_rec.operation_code);
9349                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9350                 dbms_lob.write(l_merged_lob, LENGTH('</OperationCode>'),LENGTH(l_merged_lob)+1, '</OperationCode>');
9351         ELSE
9352                 dbms_lob.write(l_merged_lob, LENGTH('<OperationCode/>'),LENGTH(l_merged_lob)+1, '<OperationCode/>');
9353         END IF;
9354         IF (op_details_rec.description IS NOT NULL) THEN
9355                 dbms_lob.write(l_merged_lob, LENGTH('<OperationDesc>'),LENGTH(l_merged_lob)+1, '<OperationDesc>');
9356                 dummy := DBMS_XMLGEN.CONVERT(op_details_rec.description);
9357                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9358                 dbms_lob.write(l_merged_lob, LENGTH('</OperationDesc>'),LENGTH(l_merged_lob)+1, '</OperationDesc>');
9359         ELSE
9360                 dbms_lob.write(l_merged_lob, LENGTH('<OperationDesc/>'),LENGTH(l_merged_lob)+1, '<OperationDesc/>');
9361         END IF;
9362         IF (op_details_rec.status IS NOT NULL) THEN
9363                 dbms_lob.write(l_merged_lob, LENGTH('<Status>'),LENGTH(l_merged_lob)+1, '<Status>');
9364                 dummy := DBMS_XMLGEN.CONVERT(op_details_rec.status);
9365                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9366                 dbms_lob.write(l_merged_lob, LENGTH('</Status>'),LENGTH(l_merged_lob)+1, '</Status>');
9367         ELSE
9368                 dbms_lob.write(l_merged_lob, LENGTH('<Status/>'),LENGTH(l_merged_lob)+1, '<Status/>');
9369         END IF;
9370         IF (op_details_rec.department_name IS NOT NULL) THEN
9371                 dbms_lob.write(l_merged_lob, LENGTH('<DepartmentName>'),LENGTH(l_merged_lob)+1, '<DepartmentName>');
9372                 dummy := DBMS_XMLGEN.CONVERT(op_details_rec.department_name);
9373                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9374                 dbms_lob.write(l_merged_lob, LENGTH('</DepartmentName>'),LENGTH(l_merged_lob)+1, '</DepartmentName>');
9375         ELSE
9376                 dbms_lob.write(l_merged_lob, LENGTH('<DepartmentName/>'),LENGTH(l_merged_lob)+1, '<DepartmentName/>');
9377         END IF;
9378         dbms_lob.write(l_merged_lob, LENGTH('<ScheduledStartDate>'),LENGTH(l_merged_lob)+1, '<ScheduledStartDate>');
9379         dbms_lob.write(l_merged_lob, LENGTH(op_details_rec.scheduled_start_date),LENGTH(l_merged_lob)+1, op_details_rec.scheduled_start_date);
9380         dbms_lob.write(l_merged_lob, LENGTH('</ScheduledStartDate>'),LENGTH(l_merged_lob)+1, '</ScheduledStartDate>');
9381         dbms_lob.write(l_merged_lob, LENGTH('<ScheduledEndDate>'),LENGTH(l_merged_lob)+1, '<ScheduledEndDate>');
9382         dbms_lob.write(l_merged_lob, LENGTH(op_details_rec.scheduled_end_date),LENGTH(l_merged_lob)+1, op_details_rec.scheduled_end_date);
9383         dbms_lob.write(l_merged_lob, LENGTH('</ScheduledEndDate>'),LENGTH(l_merged_lob)+1, '</ScheduledEndDate>');
9384         IF (op_details_rec.IsQualityEnabled IS NOT NULL) THEN
9385                 dbms_lob.write(l_merged_lob, LENGTH('<IsQualityEnabled>'),LENGTH(l_merged_lob)+1, '<IsQualityEnabled>');
9386                 dbms_lob.write(l_merged_lob, LENGTH(op_details_rec.IsQualityEnabled),LENGTH(l_merged_lob)+1, op_details_rec.IsQualityEnabled);
9387                 dbms_lob.write(l_merged_lob, LENGTH('</IsQualityEnabled>'),LENGTH(l_merged_lob)+1, '</IsQualityEnabled>');
9388         ELSE
9389                 dbms_lob.write(l_merged_lob, LENGTH('<IsQualityEnabled/>'),LENGTH(l_merged_lob)+1, '<IsQualityEnabled/>');
9390         END IF;
9391         dbms_lob.write(l_merged_lob, LENGTH('<QaPlan>'),LENGTH(l_merged_lob)+1, '<QaPlan>');
9392 /*
9393 OPEN get_op_qa_ids_csr(op_details_rec.workorder_operation_id);
9394 LOOP
9395 FETCH get_op_qa_ids_csr INTO l_qa_plan_id;
9396 EXIT WHEN get_op_qa_ids_csr%NOTFOUND;
9397 */
9398 
9399 OPEN get_op_qa_res_csr(op_details_rec.workorder_operation_id);
9400 LOOP
9401         FETCH get_op_qa_res_csr
9402         INTO  l_qa_plan_id,
9403               l_collection_id;
9404 
9405         EXIT WHEN get_op_qa_res_csr%NOTFOUND;
9406         IF (l_log_statement >= l_log_current_level)THEN
9407                 fnd_log.string ( l_log_statement, 'ahl.plsql.'
9408                 ||g_pkg_name
9409                 ||'.'
9410                 ||l_api_name ,'Checkpoint 10 : l_qa_plan_id : '
9411                 || l_qa_plan_id);
9412         END IF;
9413         IF (l_qa_plan_id IS NOT NULL) THEN
9414                 OPEN qa_plan_csr (l_qa_plan_id);
9415                 LOOP
9416                         FETCH qa_plan_csr
9417                         INTO  qa_plan_rec;
9418 
9419                         EXIT
9420                 WHEN qa_plan_csr%NOTFOUND;
9421 
9422                         IF (l_log_statement >= l_log_current_level)THEN
9423                                 fnd_log.string ( l_log_statement, 'ahl.plsql.'
9424                                 ||g_pkg_name
9425                                 ||'.'
9426                                 ||l_api_name ,'Checkpoint 11 : l_qa_plan_id : '
9427                                 || l_qa_plan_id);
9428                         END IF;
9429                         dbms_lob.write(l_merged_lob, LENGTH('<PlanName>'),LENGTH(l_merged_lob)+1, '<PlanName>');
9430                         dummy := DBMS_XMLGEN.CONVERT(qa_plan_rec.plan_name);
9431                         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9432                         dbms_lob.write(l_merged_lob, LENGTH('</PlanName>'),LENGTH(l_merged_lob)+1, '</PlanName>');
9433                         IF (qa_plan_rec.plan_description IS NOT NULL) THEN
9434                                 dbms_lob.write(l_merged_lob, LENGTH('<PlanDescription>'),LENGTH(l_merged_lob)+1, '<PlanDescription>');
9435                                 dummy := DBMS_XMLGEN.CONVERT(qa_plan_rec.plan_description);
9436                                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9437                                 dbms_lob.write(l_merged_lob, LENGTH('</PlanDescription>'),LENGTH(l_merged_lob)+1, '</PlanDescription>');
9438                         ELSE
9439                                 dbms_lob.write(l_merged_lob, LENGTH('<PlanDescription/>'),LENGTH(l_merged_lob)+1, '<PlanDescription/>');
9440                         END IF;
9441 
9442                         OPEN qa_plan_attr_csr(l_qa_plan_id);
9443                         LOOP
9444                                 FETCH qa_plan_attr_csr
9445                                 INTO  qa_plan_attr_rec;
9446 
9447                                 EXIT
9448                         WHEN qa_plan_attr_csr%NOTFOUND;
9449                           IF (qa_plan_attr_rec.enabled_flag = 1 AND qa_plan_attr_rec.displayed_flag = 1) THEN
9450 
9451                                 dbms_lob.write(l_merged_lob, LENGTH('<QualityPlanAttribute>'),LENGTH(l_merged_lob)+1, '<QualityPlanAttribute>');
9452                                 dbms_lob.write(l_merged_lob, LENGTH('<CharId>'),LENGTH(l_merged_lob)+1, '<CharId>');
9453                                 dbms_lob.write(l_merged_lob, LENGTH(qa_plan_attr_rec.CharId),LENGTH(l_merged_lob)+1, qa_plan_attr_rec.CharId);
9454                                 dbms_lob.write(l_merged_lob, LENGTH('</CharId>'),LENGTH(l_merged_lob)+1, '</CharId>');
9455                                 dbms_lob.write(l_merged_lob, LENGTH('<PromptSequence>'),LENGTH(l_merged_lob)+1, '<PromptSequence>');
9456                                 dbms_lob.write(l_merged_lob, LENGTH(qa_plan_attr_rec.PromptSequence),LENGTH(l_merged_lob)+1, qa_plan_attr_rec.PromptSequence);
9457                                 dbms_lob.write(l_merged_lob, LENGTH('</PromptSequence>'),LENGTH(l_merged_lob)+1, '</PromptSequence>');
9458                                 IF (qa_plan_attr_rec.Prompt IS NOT NULL) THEN
9459                                         dbms_lob.write(l_merged_lob, LENGTH('<Prompt>'),LENGTH(l_merged_lob)+1, '<Prompt>');
9460                                         dummy := DBMS_XMLGEN.CONVERT(qa_plan_attr_rec.Prompt);
9461                                         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9462                                         dbms_lob.write(l_merged_lob, LENGTH('</Prompt>'),LENGTH(l_merged_lob)+1, '</Prompt>');
9463                                 ELSE
9464                                         dbms_lob.write(l_merged_lob, LENGTH('<Prompt/>'),LENGTH(l_merged_lob)+1, '<Prompt/>');
9465                                 END IF;
9466                                 IF (qa_plan_attr_rec.DefaultValue IS NOT NULL) THEN
9467                                         dbms_lob.write(l_merged_lob, LENGTH('<DefaultValue>'),LENGTH(l_merged_lob)+1, '<DefaultValue>');
9468                                         dummy := DBMS_XMLGEN.CONVERT(qa_plan_attr_rec.DefaultValue);
9469                                         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9470                                         dbms_lob.write(l_merged_lob, LENGTH('</DefaultValue>'),LENGTH(l_merged_lob)+1, '</DefaultValue>');
9471                                 ELSE
9472                                         dbms_lob.write(l_merged_lob, LENGTH('<DefaultValue/>'),LENGTH(l_merged_lob)+1, '<DefaultValue/>');
9473                                 END IF;
9474                                 dbms_lob.write(l_merged_lob, LENGTH('</QualityPlanAttribute>'),LENGTH(l_merged_lob)+1, '</QualityPlanAttribute>');
9475                           END IF;
9476                         END LOOP;
9477                         CLOSE qa_plan_attr_csr;
9478                 END LOOP;
9479                 CLOSE qa_plan_csr;
9480         END IF;
9481 END LOOP;
9482 --CLOSE get_op_qa_ids_csr;
9483 CLOSE get_op_qa_res_csr;
9484 
9485 dbms_lob.write(l_merged_lob, LENGTH('</QaPlan>'),LENGTH(l_merged_lob)+1, '</QaPlan>');
9486 
9487 IF (l_log_statement >= l_log_current_level)THEN
9488         fnd_log.string ( l_log_statement, 'ahl.plsql.'
9489         ||g_pkg_name
9490         ||'.'
9491         ||l_api_name ,'Checkpoint 12 : l_qa_plan_id : '
9492         || l_qa_plan_id);
9493 END IF;
9494 IF l_qa_plan_id             IS NOT NULL
9495         AND l_collection_id IS NOT NULL THEN
9496         BUILD_XML_QA_QUERY( p_plan_id => l_qa_plan_id,
9497 	                    p_collection_id => l_collection_id,
9498 	                    x_query_string => l_query_string );
9499 
9500 
9501         IF (l_log_statement >= l_log_current_level)THEN
9502                 fnd_log.string ( l_log_statement, 'ahl.plsql.'
9503                 ||g_pkg_name
9504                 ||'.'
9505                 ||l_api_name ,'Checkpoint 13 ');
9506         END IF;
9507 	IF (l_collection_id IS NOT NULL) THEN
9508           context := dbms_xmlgen.newContext(l_query_string);
9509           DBMS_XMLGEN.setbindvalue (context, '1',l_collection_id);
9510           dbms_xmlgen.setRowsetTag(context, 'QaResults');
9511           dbms_xmlgen.setRowTag(context,'QualityResultRec');
9512           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9513           DBMS_XMLGEN.setNullHandling(context, 2);
9514           l_qa_res_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9515           dbms_xmlgen.closeContext(context);
9516           -- Write to lob only when some data exists.
9517           IF dbms_lob.getlength(l_qa_res_lob) > 0 THEN
9518                 l_offset := dbms_lob.INSTR(l_qa_res_lob, '>');
9519                 -- copy workorder details into final lob
9520                 dbms_lob.copy(l_merged_lob, l_qa_res_lob, dbms_lob.getlength(l_qa_res_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9521                 --dbms_lob.write(l_merged_lob, length('</QaResultRec>'),length(l_merged_lob)+1, '</QaResultRec>');
9522           END IF;
9523         --       END LOOP;
9524         --       CLOSE qa_result_csr;
9525 	END IF;
9526 END IF;
9527 --END LOOP;
9528 --CLOSE get_op_qa_res_csr;
9529 --dbms_lob.write(l_merged_lob, length('</QaResults>'),length(l_merged_lob)+1, '</QaResults>');
9530 dbms_lob.write(l_merged_lob, LENGTH('</WoOperation>'),LENGTH(l_merged_lob)+1, '</WoOperation>');
9531 END LOOP;
9532 CLOSE op_details_csr;
9533 dbms_lob.write(l_merged_lob, LENGTH('</WoOperations>'),LENGTH(l_merged_lob)+1, '</WoOperations>');
9534 
9535 -- not sure if required
9536 
9537 dbms_lob.write(l_merged_lob, length('<IsQualityEnabled>'),length(l_merged_lob)+1, '<IsQualityEnabled>');
9538 dbms_lob.write(l_merged_lob, length(wo_details_rec.isQualityEnabled),length(l_merged_lob)+1, wo_details_rec.isQualityEnabled);
9539 dbms_lob.write(l_merged_lob, length('</IsQualityEnabled>'),length(l_merged_lob)+1, '</IsQualityEnabled>');
9540 
9541 dbms_lob.write(l_merged_lob, length('<QaPlan>'),length(l_merged_lob)+1, '<QaPlan>');
9542 
9543 OPEN get_wo_qa_res_csr(l_workorder_id);
9544 LOOP
9545         FETCH get_wo_qa_res_csr
9546         INTO  l_qa_plan_id,
9547               l_collection_id;
9548 
9549         EXIT
9550 WHEN get_wo_qa_res_csr%NOTFOUND;
9551         --dbms_lob.write(l_merged_lob, length('<QaPlan>'),length(l_merged_lob)+1, '<QaPlan>');
9552         IF (l_qa_plan_id IS NOT NULL) THEN
9553                 OPEN qa_plan_csr (l_qa_plan_id);
9554                 LOOP
9555                         FETCH qa_plan_csr
9556                         INTO  qa_plan_rec;
9557 
9558                         EXIT
9559                 WHEN qa_plan_csr%NOTFOUND;
9560                         dbms_lob.write(l_merged_lob, LENGTH('<PlanName>'),LENGTH(l_merged_lob)+1, '<PlanName>');
9561                         dummy := DBMS_XMLGEN.CONVERT(qa_plan_rec.plan_name);
9562                         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9563                         dbms_lob.write(l_merged_lob, LENGTH('</PlanName>'),LENGTH(l_merged_lob)+1, '</PlanName>');
9564                         IF (qa_plan_rec.plan_description IS NOT NULL) THEN
9565                                 dbms_lob.write(l_merged_lob, LENGTH('<PlanDescription>'),LENGTH(l_merged_lob)+1, '<PlanDescription>');
9566                                 dummy := DBMS_XMLGEN.CONVERT(qa_plan_rec.plan_description);
9567                                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9568                                 dbms_lob.write(l_merged_lob, LENGTH('</PlanDescription>'),LENGTH(l_merged_lob)+1, '</PlanDescription>');
9569                         ELSE
9570                                 dbms_lob.write(l_merged_lob, LENGTH('<PlanDescription/>'),LENGTH(l_merged_lob)+1, '<PlanDescription/>');
9571                         END IF;
9572 
9573                         OPEN qa_plan_attr_csr(l_qa_plan_id);
9574                         LOOP
9575                                 FETCH qa_plan_attr_csr
9576                                 INTO  qa_plan_attr_rec;
9577 
9578                                 EXIT
9579                         WHEN qa_plan_attr_csr%NOTFOUND;
9580 			  IF (qa_plan_attr_rec.enabled_flag = 1 AND qa_plan_attr_rec.displayed_flag = 1) THEN
9581                                 dbms_lob.write(l_merged_lob, LENGTH('<QualityPlanAttribute>'),LENGTH(l_merged_lob)+1, '<QualityPlanAttribute>');
9582                                 dbms_lob.write(l_merged_lob, LENGTH('<CharId>'),LENGTH(l_merged_lob)+1, '<CharId>');
9583                                 dbms_lob.write(l_merged_lob, LENGTH(qa_plan_attr_rec.CharId),LENGTH(l_merged_lob)+1, qa_plan_attr_rec.CharId);
9584                                 dbms_lob.write(l_merged_lob, LENGTH('</CharId>'),LENGTH(l_merged_lob)+1, '</CharId>');
9585                                 dbms_lob.write(l_merged_lob, LENGTH('<PromptSequence>'),LENGTH(l_merged_lob)+1, '<PromptSequence>');
9586                                 dbms_lob.write(l_merged_lob, LENGTH(qa_plan_attr_rec.PromptSequence),LENGTH(l_merged_lob)+1, qa_plan_attr_rec.PromptSequence);
9587                                 dbms_lob.write(l_merged_lob, LENGTH('</PromptSequence>'),LENGTH(l_merged_lob)+1, '</PromptSequence>');
9588                                 IF (qa_plan_attr_rec.Prompt IS NOT NULL) THEN
9589                                         dbms_lob.write(l_merged_lob, LENGTH('<Prompt>'),LENGTH(l_merged_lob)+1, '<Prompt>');
9590                                         dummy := DBMS_XMLGEN.CONVERT(qa_plan_attr_rec.Prompt);
9591                                         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9592                                         dbms_lob.write(l_merged_lob, LENGTH('</Prompt>'),LENGTH(l_merged_lob)+1, '</Prompt>');
9593                                 ELSE
9594                                         dbms_lob.write(l_merged_lob, LENGTH('<Prompt/>'),LENGTH(l_merged_lob)+1, '<Prompt/>');
9595                                 END IF;
9596                                 IF (qa_plan_attr_rec.DefaultValue IS NOT NULL) THEN
9597                                         dbms_lob.write(l_merged_lob, LENGTH('<DefaultValue>'),LENGTH(l_merged_lob)+1, '<DefaultValue>');
9598                                         dummy := DBMS_XMLGEN.CONVERT(qa_plan_attr_rec.DefaultValue);
9599                                         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9600                                         dbms_lob.write(l_merged_lob, LENGTH('</DefaultValue>'),LENGTH(l_merged_lob)+1, '</DefaultValue>');
9601                                 ELSE
9602                                         dbms_lob.write(l_merged_lob, LENGTH('<DefaultValue/>'),LENGTH(l_merged_lob)+1, '<DefaultValue/>');
9603                                 END IF;
9604                                 dbms_lob.write(l_merged_lob, LENGTH('</QualityPlanAttribute>'),LENGTH(l_merged_lob)+1, '</QualityPlanAttribute>');
9605                           END IF;
9606 			END LOOP;
9607                         CLOSE qa_plan_attr_csr;
9608                 END LOOP;
9609                 CLOSE qa_plan_csr;
9610         END IF;
9611 END LOOP;
9612 CLOSE get_wo_qa_res_csr;
9613 dbms_lob.write(l_merged_lob, LENGTH('</QaPlan>'),LENGTH(l_merged_lob)+1, '</QaPlan>');
9614 
9615 IF (l_log_statement >= l_log_current_level)THEN
9616     fnd_log.string (
9617       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Checkpoint 14:  wo qa result' || l_workorder_id);
9618 END IF;
9619 IF l_qa_plan_id IS NOT NULL AND l_collection_id IS NOT NULL
9620           THEN
9621 
9622              build_xml_qa_query(
9623                p_plan_id      =>  l_qa_plan_id,
9624                p_collection_id    =>  l_collection_id,
9625                x_query_string   =>  l_query_string
9626                );
9627       IF (l_collection_id IS NOT NULL) THEN
9628           context := dbms_xmlgen.newContext(l_query_string);
9629           DBMS_XMLGEN.setbindvalue (context, '1',l_collection_id);
9630           dbms_xmlgen.setRowsetTag(context, 'QaResults');
9631           dbms_xmlgen.setRowTag(context,'QualityResultRec');
9632           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9633 	  DBMS_XMLGEN.setNullHandling(context, 2);
9634           l_qa_wo_res_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9635           dbms_xmlgen.closeContext(context);
9636           -- Write to lob only when some data exists.
9637           IF dbms_lob.getlength(l_qa_wo_res_lob) > 0
9638           THEN
9639 
9640              l_offset := dbms_lob.INSTR(l_qa_wo_res_lob, '>');
9641 
9642              -- copy workorder details into final lob
9643             dbms_lob.copy(l_merged_lob, l_qa_wo_res_lob, dbms_lob.getlength(l_qa_wo_res_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9644 
9645 --dbms_lob.write(l_merged_lob, length('</QualityResultRec>'),length(l_merged_lob)+1, '</QualityResultRec>');
9646          END IF;
9647        END IF;
9648 --       END LOOP;
9649 --      CLOSE qa_result_csr;
9650     END IF;
9651 --END LOOP;
9652 --CLOSE get_wo_qa_res_csr;
9653 --dbms_lob.write(l_merged_lob, length('</QaResults>'),length(l_merged_lob)+1, '</QaResults>');
9654 
9655 
9656 
9657 
9658 --documents associated with workorder
9659 
9660 IF (l_log_statement >= l_log_current_level)THEN
9661     fnd_log.string (
9662       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,'Checkpoint 15:  Document : ' || l_workorder_id);
9663 END IF;
9664 
9665 dbms_lob.write(l_merged_lob, LENGTH('<MaterialRequirements>'),LENGTH(l_merged_lob)+1, '<MaterialRequirements>');
9666 OPEN mat_details_csr(l_workorder_id);
9667 LOOP
9668         FETCH mat_details_csr
9669         INTO  mat_details_rec;
9670 
9671         EXIT
9672 WHEN mat_details_csr%NOTFOUND;
9673         IF (l_log_statement >= l_log_current_level)THEN
9674                 fnd_log.string ( l_log_statement, 'ahl.plsql.'
9675                 ||g_pkg_name
9676                 ||'.'
9677                 ||l_api_name ,'Checkpoint 16:  Document : '
9678                 || l_workorder_id);
9679         END IF;
9680         dbms_lob.write(l_merged_lob, LENGTH('<MaterialRequirement>'),LENGTH(l_merged_lob)+1, '<MaterialRequirement>');
9681         dbms_lob.write(l_merged_lob, LENGTH('<OperationSequenceNumber>'),LENGTH(l_merged_lob)+1, '<OperationSequenceNumber>');
9682         dbms_lob.write(l_merged_lob, LENGTH(mat_details_rec.OPERATION_SEQUENCE),LENGTH(l_merged_lob)+1, mat_details_rec.OPERATION_SEQUENCE);
9683         dbms_lob.write(l_merged_lob, LENGTH('</OperationSequenceNumber>'),LENGTH(l_merged_lob)+1, '</OperationSequenceNumber>');
9684         dbms_lob.write(l_merged_lob, LENGTH('<ItemNumber>'),LENGTH(l_merged_lob)+1, '<ItemNumber>');
9685         dummy := DBMS_XMLGEN.CONVERT(mat_details_rec.CONCATENATED_SEGMENTS);
9686         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9687         dbms_lob.write(l_merged_lob, LENGTH('</ItemNumber>'),LENGTH(l_merged_lob)+1, '</ItemNumber>');
9688         IF (mat_details_rec.DESCRIPTION IS NOT NULL) THEN
9689                 dbms_lob.write(l_merged_lob, LENGTH('<ItemDescription>'),LENGTH(l_merged_lob)+1, '<ItemDescription>');
9690                 dummy := DBMS_XMLGEN.CONVERT(mat_details_rec.DESCRIPTION);
9691                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9692                 dbms_lob.write(l_merged_lob, LENGTH('</ItemDescription>'),LENGTH(l_merged_lob)+1, '</ItemDescription>');
9693         ELSE
9694                 dbms_lob.write(l_merged_lob, LENGTH('<ItemDescription/>'),LENGTH(l_merged_lob)+1, '<ItemDescription/>');
9695         END IF;
9696         IF (mat_details_rec.name IS NOT NULL) THEN
9697                 dbms_lob.write(l_merged_lob, LENGTH('<ItemGroup>'),LENGTH(l_merged_lob)+1, '<ItemGroup>');
9698                 dummy := DBMS_XMLGEN.CONVERT(mat_details_rec.name);
9699                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9700                 dbms_lob.write(l_merged_lob, LENGTH('</ItemGroup>'),LENGTH(l_merged_lob)+1, '</ItemGroup>');
9701         ELSE
9702                 dbms_lob.write(l_merged_lob, LENGTH('<ItemGroup/>'),LENGTH(l_merged_lob)+1, '<ItemGroup/>');
9703         END IF;
9704         IF (mat_details_rec.item_type IS NOT NULL) THEN
9705                 dbms_lob.write(l_merged_lob, LENGTH('<ItemType>'),LENGTH(l_merged_lob)+1, '<ItemType>');
9706                 dummy := DBMS_XMLGEN.CONVERT(mat_details_rec.item_type);
9707                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9708                 dbms_lob.write(l_merged_lob, LENGTH('</ItemType>'),LENGTH(l_merged_lob)+1, '</ItemType>');
9709         ELSE
9710                 dbms_lob.write(l_merged_lob, LENGTH('<ItemType/>'),LENGTH(l_merged_lob)+1, '<ItemType/>');
9711         END IF;
9712         dbms_lob.write(l_merged_lob, LENGTH('<RequiredQuantity>'),LENGTH(l_merged_lob)+1, '<RequiredQuantity>');
9713         dbms_lob.write(l_merged_lob, LENGTH(mat_details_rec.REQUESTED_QUANTITY),LENGTH(l_merged_lob)+1, mat_details_rec.REQUESTED_QUANTITY);
9714         dbms_lob.write(l_merged_lob, LENGTH('</RequiredQuantity>'),LENGTH(l_merged_lob)+1, '</RequiredQuantity>');
9715         dbms_lob.write(l_merged_lob, LENGTH('<UOM>'),LENGTH(l_merged_lob)+1, '<UOM>');
9716         dummy := DBMS_XMLGEN.CONVERT(mat_details_rec.UOM);
9717         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9718         dbms_lob.write(l_merged_lob, LENGTH('</UOM>'),LENGTH(l_merged_lob)+1, '</UOM>');
9719         dbms_lob.write(l_merged_lob, LENGTH('<RequiredDate>'),LENGTH(l_merged_lob)+1, '<RequiredDate>');
9720         dbms_lob.write(l_merged_lob, LENGTH(mat_details_rec.required_date),LENGTH(l_merged_lob)+1, mat_details_rec.required_date);
9721         dbms_lob.write(l_merged_lob, LENGTH('</RequiredDate>'),LENGTH(l_merged_lob)+1, '</RequiredDate>');
9722         IF (l_log_statement >= l_log_current_level)THEN
9723                 fnd_log.string ( l_log_statement, 'ahl.plsql.'
9724                 ||g_pkg_name
9725                 ||'.'
9726                 ||l_api_name , 'Checkpoint 17:  mat_details_rec.SCHEDULED_MATERIAL_ID : '
9727                 || mat_details_rec.SCHEDULED_MATERIAL_ID);
9728         END IF;
9729 	IF (mat_details_rec.SCHEDULED_MATERIAL_ID IS NOT NULL) THEN
9730           context := dbms_xmlgen.newContext(l_mat_dffs);
9731           DBMS_XMLGEN.setbindvalue (context, '1', mat_details_rec.SCHEDULED_MATERIAL_ID);
9732           dbms_xmlgen.setRowsetTag(context, 'MaterialDFFs');
9733           dbms_xmlgen.setRowTag(context,NULL);
9734           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9735           DBMS_XMLGEN.setNullHandling(context, 2);
9736           l_mat_dff_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9737           dbms_xmlgen.closeContext(context);
9738         -- Write to lob only when some data exists.
9739           IF dbms_lob.getlength(l_mat_dff_lob) > 0 THEN
9740                 l_offset                    := dbms_lob.INSTR(l_mat_dff_lob, '>');
9741                 -- copy workorder details into final lob
9742                 dbms_lob.copy(l_merged_lob, l_mat_dff_lob, dbms_lob.getlength(l_mat_dff_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9743           END IF;
9744         --  344 not sure if DFF required
9745 	END IF;
9746         dbms_lob.write(l_merged_lob, LENGTH('</MaterialRequirement>'),LENGTH(l_merged_lob)+1, '</MaterialRequirement>');
9747 END LOOP;
9748 CLOSE mat_details_csr;
9749 dbms_lob.write(l_merged_lob, LENGTH('</MaterialRequirements>'),LENGTH(l_merged_lob)+1, '</MaterialRequirements>');
9750 dbms_lob.write(l_merged_lob, LENGTH('<ResourceRequirements>'),LENGTH(l_merged_lob)+1, '<ResourceRequirements>');
9751 
9752 -- resource requirement details
9753 
9754 -- first find out if resources are derived from route or operations.
9755 -- added to support route/op resource dffs.
9756 l_route_op_res_found := 'N';
9757 IF(l_route_id IS NOT NULL)THEN
9758  OPEN chk_route_res_csr(l_route_id);
9759  FETCH chk_route_res_csr INTO l_route_op_res_found;
9760  IF (chk_route_res_csr%NOTFOUND) THEN
9761   l_route_op_res_found := 'O';
9762  ELSE
9763   l_route_op_res_found := 'R';
9764  END IF;
9765  CLOSE chk_route_res_csr;
9766 END IF;
9767 
9768 OPEN res_req_details_csr(l_workorder_id);
9769 LOOP
9770         FETCH res_req_details_csr
9771         INTO  res_req_details_rec;
9772 
9773         EXIT WHEN res_req_details_csr%NOTFOUND;
9774         IF (l_log_statement >= l_log_current_level)THEN
9775                 fnd_log.string ( l_log_statement, 'ahl.plsql.'
9776                 ||g_pkg_name
9777                 ||'.'
9778                 ||l_api_name , 'Checkpoint 18:  resources :'
9779                 || l_workorder_id);
9780         END IF;
9781         dbms_lob.write(l_merged_lob, LENGTH('<ResourceRequirement>'),LENGTH(l_merged_lob)+1, '<ResourceRequirement>');
9782         dbms_lob.write(l_merged_lob, LENGTH('<OperationSequenceNumber>'),LENGTH(l_merged_lob)+1, '<OperationSequenceNumber>');
9783         dbms_lob.write(l_merged_lob, LENGTH(res_req_details_rec.operation_sequence),LENGTH(l_merged_lob)+1, res_req_details_rec.operation_sequence);
9784         dbms_lob.write(l_merged_lob, LENGTH('</OperationSequenceNumber>'),LENGTH(l_merged_lob)+1, '</OperationSequenceNumber>');
9785         dbms_lob.write(l_merged_lob, LENGTH('<ResourceSequenceNumber>'),LENGTH(l_merged_lob)+1, '<ResourceSequenceNumber>');
9786         dbms_lob.write(l_merged_lob, LENGTH(res_req_details_rec.resource_sequence),LENGTH(l_merged_lob)+1, res_req_details_rec.resource_sequence);
9787         dbms_lob.write(l_merged_lob, LENGTH('</ResourceSequenceNumber>'),LENGTH(l_merged_lob)+1, '</ResourceSequenceNumber>');
9788         dbms_lob.write(l_merged_lob, LENGTH('<ResourceCode>'),LENGTH(l_merged_lob)+1, '<ResourceCode>');
9789         dummy := DBMS_XMLGEN.CONVERT(res_req_details_rec.resource_code);
9790         dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9791         dbms_lob.write(l_merged_lob, LENGTH('</ResourceCode>'),LENGTH(l_merged_lob)+1, '</ResourceCode>');
9792         IF (res_req_details_rec.resource_type_name IS NOT NULL) THEN
9793                 dbms_lob.write(l_merged_lob, LENGTH('<ResourceType>'),LENGTH(l_merged_lob)+1, '<ResourceType>');
9794                 dummy := DBMS_XMLGEN.CONVERT(res_req_details_rec.resource_type_name);
9795                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9796                 dbms_lob.write(l_merged_lob, LENGTH('</ResourceType>'),LENGTH(l_merged_lob)+1, '</ResourceType>');
9797         ELSE
9798                 dbms_lob.write(l_merged_lob, LENGTH('<ResourceType/>'),LENGTH(l_merged_lob)+1, '<ResourceType/>');
9799         END IF;
9800         -- resource_name
9801         IF (res_req_details_rec.resource_name IS NOT NULL) THEN
9802                 dbms_lob.write(l_merged_lob, LENGTH('<Description>'),LENGTH(l_merged_lob)+1, '<Description>');
9803                 dummy := DBMS_XMLGEN.CONVERT(res_req_details_rec.resource_name);
9804                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9805                 dbms_lob.write(l_merged_lob, LENGTH('</Description>'),LENGTH(l_merged_lob)+1, '</Description>');
9806         ELSE
9807                 dbms_lob.write(l_merged_lob, LENGTH('<Description/>'),LENGTH(l_merged_lob)+1, '<Description/>');
9808         END IF;
9809         dbms_lob.write(l_merged_lob, LENGTH('<Quantity>'),LENGTH(l_merged_lob)+1, '<Quantity>');
9810         dbms_lob.write(l_merged_lob, LENGTH(res_req_details_rec.quantity),LENGTH(l_merged_lob)+1, res_req_details_rec.quantity);
9811         dbms_lob.write(l_merged_lob, LENGTH('</Quantity>'),LENGTH(l_merged_lob)+1, '</Quantity>');
9812         dbms_lob.write(l_merged_lob, LENGTH('<Duration>'),LENGTH(l_merged_lob)+1, '<Duration>');
9813         dbms_lob.write(l_merged_lob, LENGTH(res_req_details_rec.duration),LENGTH(l_merged_lob)+1, res_req_details_rec.duration);
9814         dbms_lob.write(l_merged_lob, LENGTH('</Duration>'),LENGTH(l_merged_lob)+1, '</Duration>');
9815         IF (res_req_details_rec.uom_name IS NOT NULL) THEN
9816                 dbms_lob.write(l_merged_lob, LENGTH('<UOM>'),LENGTH(l_merged_lob)+1, '<UOM>');
9817                 dummy := DBMS_XMLGEN.CONVERT(res_req_details_rec.uom_name);
9818                 dbms_lob.write(l_merged_lob, LENGTH(dummy),LENGTH(l_merged_lob)+1, dummy);
9819                 dbms_lob.write(l_merged_lob, LENGTH('</UOM>'),LENGTH(l_merged_lob)+1, '</UOM>');
9820         ELSE
9821                 dbms_lob.write(l_merged_lob, LENGTH('<UOM/>'),LENGTH(l_merged_lob)+1, '<UOM/>');
9822         END IF;
9823 
9824 IF (l_log_statement >= l_log_current_level)THEN
9825     fnd_log.string (
9826       l_log_statement, 'ahl.plsql.'||g_pkg_name||'.'||l_api_name ,
9827       'Checkpoint 19:  before resource DFF' || l_workorder_id);
9828 END IF;
9829 IF(l_route_op_res_found IN('R','O'))THEN -- fix for bug 10048778
9830    IF ((res_req_details_rec.resource_id IS NOT NULL)
9831         AND ((l_route_op_res_found = 'R' AND l_route_id IS NOT NULL)
9832 	OR (l_route_op_res_found = 'O' AND res_req_details_rec.operation_id IS NOT NULL))) THEN
9833           context := dbms_xmlgen.newContext(l_res_dffs);
9834 	  --DBMS_XMLGEN.setbindvalue (context, '1',l_workorder_id);
9835           --DBMS_XMLGEN.setbindvalue (context, '2',l_workorder_id);
9836 	  DBMS_XMLGEN.setbindvalue (context, '1',res_req_details_rec.resource_id);
9837           IF (l_route_op_res_found = 'R') THEN
9838 	    DBMS_XMLGEN.setbindvalue (context, '2','ROUTE');
9839 	    DBMS_XMLGEN.setbindvalue (context, '3',l_route_id);
9840           ELSE
9841 	    DBMS_XMLGEN.setbindvalue (context, '2','OPERATION');
9842 	    DBMS_XMLGEN.setbindvalue (context, '3',res_req_details_rec.operation_id);
9843           END IF;
9844           dbms_xmlgen.setRowsetTag(context, 'ResourceDFFs');
9845           dbms_xmlgen.setRowTag(context,null);
9846           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9847 	  DBMS_XMLGEN.setNullHandling(context, 2);
9848           l_res_dff_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9849           dbms_xmlgen.closeContext(context);
9850           -- Write to lob only when some data exists.
9851           IF dbms_lob.getlength(l_res_dff_lob) > 0
9852           THEN
9853              l_offset := dbms_lob.INSTR(l_res_dff_lob, '>');
9854 
9855              -- copy workorder details into final lob
9856              dbms_lob.copy(l_merged_lob, l_res_dff_lob, dbms_lob.getlength(l_res_dff_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9857 
9858           END IF;
9859    END IF;
9860 END IF;
9861 
9862 dbms_lob.write(l_merged_lob, length('</ResourceRequirement>'),length(l_merged_lob)+1, '</ResourceRequirement>');
9863 END LOOP;
9864 CLOSE res_req_details_csr;
9865 
9866 
9867 dbms_lob.write(l_merged_lob, length('</ResourceRequirements>'),length(l_merged_lob)+1, '</ResourceRequirements>');
9868 
9869 --Tools record
9870 
9871 context := dbms_xmlgen.newContext(l_tools_det);
9872 	  DBMS_XMLGEN.setbindvalue (context, '1',l_workorder_id);
9873 
9874           dbms_xmlgen.setRowsetTag(context, 'Tools');
9875           dbms_xmlgen.setRowTag(context,'Tool');
9876           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9877 	  DBMS_XMLGEN.setNullHandling(context, 2);
9878           l_tool_det_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9879           dbms_xmlgen.closeContext(context);
9880           -- Write to lob only when some data exists.
9881           IF dbms_lob.getlength(l_tool_det_lob) > 0
9882           THEN
9883              l_offset := dbms_lob.INSTR(l_tool_det_lob, '>');
9884 
9885              -- copy workorder details into final lob
9886              dbms_lob.copy(l_merged_lob, l_tool_det_lob, dbms_lob.getlength(l_tool_det_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9887 
9888           END IF;
9889 /*
9890 context := dbms_xmlgen.newContext(l_inst_remove_det || l_workorder_id);
9891           dbms_xmlgen.setRowsetTag(context, 'ComponentRemovalInstalls');
9892           dbms_xmlgen.setRowTag(context,'ComponentRemovalInstall');
9893           dbms_xmlgen.setConvertSpecialChars(context, TRUE);
9894           l_inst_remove_lob := dbms_xmlgen.getXML(context,DBMS_XMLGEN.NONE);
9895           dbms_xmlgen.closeContext(context);
9896           -- Write to lob only when some data exists.
9897           IF dbms_lob.getlength(l_inst_remove_lob) > 0
9898           THEN
9899              l_offset := dbms_lob.INSTR(l_inst_remove_lob, '>');
9900 
9901              -- copy workorder details into final lob
9902              dbms_lob.copy(l_merged_lob, l_inst_remove_lob, dbms_lob.getlength(l_inst_remove_lob), dbms_lob.getlength(l_merged_lob)+1, l_offset+ 1);
9903 
9904           END IF;
9905  */
9906 
9907 --END LOOP;
9908 dbms_lob.write(l_merged_lob, length('</job_card>'),length(l_merged_lob)+1, '</job_card>');
9909 CLOSE wo_details_csr;
9910 END LOOP;
9911 END Get_job_card_det;
9912 END AHL_PRD_PRINT_PVT;