[Home] [Help]
PACKAGE BODY: APPS.CST_EAM_WORKORDERS_PVT
Source
1 PACKAGE BODY CST_eAM_WorkOrders_PVT AS
2 /* $Header: CSTPEEAB.pls 120.3.12010000.2 2008/10/30 12:15:08 svelumur ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'CST_eAM_WorkOrders_PVT';
5
6 PROCEDURE Generate_XMLData (
7 errcode OUT NOCOPY VARCHAR2,
8 errno OUT NOCOPY NUMBER,
9 p_legal_entity_id IN NUMBER,
10 p_cost_type_id IN NUMBER,
11 p_cost_group_id IN NUMBER,
12 p_range IN NUMBER,
13 p_dummy1 IN NUMBER := NULL,
14 p_dummy2 IN NUMBER := NULL,
15 p_from_workorder IN VARCHAR2 := NULL,
16 p_to_workorder IN VARCHAR2 := NULL,
17 p_specific_workorder IN NUMBER := NULL)
18 IS
19 l_api_name CONSTANT VARCHAR2(30) := 'Generate_XMLData';
20 l_xml_doc CLOB;
21 l_amount NUMBER;
22 l_offset NUMBER;
23 l_length NUMBER;
24 l_buffer VARCHAR2(32767);
25
26 l_return_status VARCHAR2(1);
27 l_msg_count NUMBER;
28 l_msg_data VARCHAR2(2000);
29 l_success BOOLEAN;
30 l_stmt_num NUMBER;
31
32 l_module CONSTANT VARCHAR2(90) := 'cst.plsql.CST_eAM_WorkOrders_PVT.Generate_XMLData';
33 l_log_level CONSTANT NUMBER := fnd_log.G_CURRENT_RUNTIME_LEVEL;
34 l_uLog CONSTANT BOOLEAN := fnd_log.TEST(fnd_log.level_unexpected, l_module) AND fnd_log.level_unexpected >= l_log_level;
35 l_errorLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_error >= l_log_level;
36 l_exceptionLog CONSTANT BOOLEAN := l_errorLog AND fnd_log.level_exception >= l_log_level;
37 l_eventLog CONSTANT BOOLEAN := l_exceptionLog AND fnd_log.level_event >= l_log_level;
38 l_pLog CONSTANT BOOLEAN := l_eventLog AND fnd_log.level_procedure >= l_log_level;
39 l_sLog CONSTANT BOOLEAN := l_pLog AND fnd_log.level_statement >= l_log_level;
40
41 BEGIN
42
43 IF l_plog THEN
44 fnd_log.string(
45 fnd_log.level_procedure,
46 l_module||'.'||l_stmt_num,
47 'Entering CST_eAM_WorkOrders_PVT.Generate_XMLData with '||
48 'p_legal_entity_id = '||p_legal_entity_id||','||
49 'p_cost_group_id = '||p_cost_group_id||','||
50 'p_cost_type_id = '||p_cost_type_id||','||
51 'p_range = '||p_range||','||
52 'p_from_workorder = '||p_from_workorder||','||
53 'p_to_workorder = '||p_to_workorder||','||
54 'p_specific_workorder = '||p_specific_workorder
55 );
56 END IF;
57
58 -- Initialze variables
59 l_stmt_num := 0;
60 DBMS_LOB.createtemporary(l_xml_doc, TRUE);
61
62 -- Initialize message stack
63 l_stmt_num := 10;
64 FND_MSG_PUB.initialize;
65
66 -----------------------------------------------------------------
67 -- Generate XML data for displaying the report parameters values
68 -----------------------------------------------------------------
69 l_stmt_num := 20;
70 Display_Parameters (p_api_version => 1.0,
71 p_init_msg_list => FND_API.G_FALSE,
72 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
73 x_return_status => l_return_status,
74 x_msg_count => l_msg_count,
75 x_msg_data => l_msg_data,
76 p_legal_entity_id => p_legal_entity_id,
77 p_cost_group_id => p_cost_group_id,
78 p_cost_type_id => p_cost_type_id,
79 p_range => p_range,
80 p_from_workorder => p_from_workorder,
81 p_to_workorder => p_to_workorder,
82 p_specific_workorder => p_specific_workorder,
83 x_xml_doc => l_xml_doc);
84
85 -- If return status is not success, add message to the log
86 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
87 l_msg_data := 'Failed generating XML data for report parameter information';
88 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
89 END IF;
90
91 ------------------------------------------------------------------------------------
92 -- Generate Estimation, Actuals data for workoder for given Cost Type and Cost Group
93 ------------------------------------------------------------------------------------
94 l_stmt_num := 30;
95 eAM_Est_Actual_details (p_api_version => 1.0,
96 p_init_msg_list => FND_API.G_FALSE,
97 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
98 x_return_status => l_return_status,
99 x_msg_count => l_msg_count,
100 x_msg_data => l_msg_data,
101 p_legal_entity_id => p_legal_entity_id,
102 p_cost_group_id => p_cost_group_id,
103 p_cost_type_id => p_cost_type_id,
104 p_range => p_range,
105 p_from_workorder => p_from_workorder,
106 p_to_workorder => p_to_workorder,
107 p_specific_workorder => p_specific_workorder,
108 x_xml_doc => l_xml_doc);
109
110 -- If return status is not success, add message to the log
111 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
112 l_msg_data := 'Failed generating Workorder Estimation, Actuals details';
113 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
114 END IF;
115
116 -- Append the XML end tag
117 l_stmt_num := 40;
118 DBMS_LOB.writeappend (l_xml_doc, 9, '</REPORT>');
119
120 -- Get length of the CLOB l_xml_doc
121 l_stmt_num := 50;
122 l_length := nvl(DBMS_LOB.getlength(l_xml_doc), 0);
123 l_offset := 1;
124 l_amount := 16383;
125
126 -- Loop until the length of CLOB data is zero
127 l_stmt_num := 60;
128 LOOP
129 EXIT WHEN l_length <= 0;
130 DBMS_LOB.read (l_xml_doc, l_amount, l_offset, l_buffer);
131 FND_FILE.PUT (FND_FILE.OUTPUT, l_buffer);
132 l_length := l_length - l_amount;
133 l_offset := l_offset + l_amount;
134 END LOOP;
135
136 -- free temporary memory
137 l_stmt_num := 70;
138 DBMS_LOB.FREETEMPORARY (l_xml_doc);
139
140 l_success := FND_CONCURRENT.SET_COMPLETION_STATUS('NORMAL', 'Request Completed Successfully');
141
142
143 IF l_plog THEN
144 fnd_log.string(
145 fnd_log.level_procedure,
146 l_module||'.'||l_stmt_num,
147 'Exiting CST_eAM_WorkOrders_PVT.Generate_XMLData with '||
148 'errno = '||errno
149 );
150 END IF;
151
152 EXCEPTION
153 WHEN fnd_api.g_exc_unexpected_error THEN
154 -- Set return status to error
155 l_msg_data := SUBSTRB (SQLERRM,1,240);
156 l_success := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', l_msg_data);
157
158 IF l_exceptionlog THEN
159 fnd_msg_pub.add_exc_msg(
160 p_pkg_name => 'CST_eAM_WorkOrders_PVT',
161 p_procedure_name => 'Generate_XMLData',
162 p_error_text => 'An exception has occurred.'
163 );
164 fnd_log.string(
165 fnd_log.level_exception,
166 l_module||'.'||l_stmt_num,
167 'An exception has occurred.'
168 );
169 END IF;
170 WHEN OTHERS THEN
171
172 l_msg_data := SUBSTRB (SQLERRM,1,240);
173 l_success := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', l_msg_data);
174
175 IF l_uLog THEN
176 fnd_message.set_name('BOM','CST_UNEXPECTED');
177 fnd_message.set_token('SQLERRM',SQLERRM);
178 fnd_msg_pub.add;
179 fnd_log.message(
180 fnd_log.level_unexpected,
181 l_module||'.'||l_stmt_num,
182 FALSE
183 );
184 END IF;
185 END Generate_XMLData;
186
187 PROCEDURE Display_Parameters(p_api_version IN NUMBER,
188 p_init_msg_list IN VARCHAR2,
189 p_validation_level IN NUMBER,
190 x_return_status OUT NOCOPY VARCHAR2,
191 x_msg_count OUT NOCOPY NUMBER,
192 x_msg_data OUT NOCOPY VARCHAR2,
193 p_legal_entity_id IN NUMBER,
194 p_cost_group_id IN NUMBER,
195 p_cost_type_id IN NUMBER,
196 p_range IN NUMBER,
197 p_from_workorder IN VARCHAR2,
198 p_to_workorder IN VARCHAR2,
199 p_specific_workorder IN NUMBER,
200 x_xml_doc IN OUT NOCOPY CLOB)
201 IS
202 l_api_name CONSTANT VARCHAR2(30) := 'Display_Parameters';
203 l_api_version CONSTANT NUMBER := 1.0;
204 l_ref_cur SYS_REFCURSOR;
205 l_ctx NUMBER;
206 l_xml_temp CLOB;
207 l_offset PLS_INTEGER;
208 l_wip_entity_name VARCHAR2(240);
209 l_stmt_num NUMBER;
210
211 l_legal_entity VARCHAR2(240);
212 l_cost_type VARCHAR2(10);
213 l_cost_group VARCHAR2(10);
214
215 l_module CONSTANT VARCHAR2(90) := 'cst.plsql.CST_eAM_WorkOrders_PVT.Display_Parameters';
216 l_log_level CONSTANT NUMBER := fnd_log.G_CURRENT_RUNTIME_LEVEL;
217 l_uLog CONSTANT BOOLEAN := fnd_log.level_unexpected >= l_log_level AND
218 fnd_log.TEST(fnd_log.level_unexpected, l_module);
219 l_errorLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_error >= l_log_level;
220 l_exceptionLog CONSTANT BOOLEAN := l_errorLog AND fnd_log.level_exception >= l_log_level;
221 l_eventLog CONSTANT BOOLEAN := l_exceptionLog AND fnd_log.level_event >= l_log_level;
222 l_pLog CONSTANT BOOLEAN := l_eventLog AND fnd_log.level_procedure >= l_log_level;
223 l_sLog CONSTANT BOOLEAN := l_pLog AND fnd_log.level_statement >= l_log_level;
224 /*Bug 7305146*/
225 l_encoding VARCHAR2(20);
226 l_xml_header VARCHAR2(100);
227
228 BEGIN
229 IF l_plog THEN
230 fnd_log.string(
231 fnd_log.level_procedure,
232 l_module||'.'||l_stmt_num,
233 'Entering CST_eAM_WorkOrders_PVT.Display_Parameters with '||
234 'p_init_msg_list = '||p_init_msg_list||','||
235 'p_validation_level = '||p_validation_level||','||
236 'p_legal_entity_id = '||p_legal_entity_id||','||
237 'p_cost_group_id = '||p_cost_group_id||','||
238 'p_cost_type_id = '||p_cost_type_id||','||
239 'p_range = '||p_range||','||
240 'p_from_workorder = '||p_from_workorder||','||
241 'p_to_workorder = '||p_to_workorder||','||
242 'p_specific_workorder = '||p_specific_workorder
243 );
244 END IF;
245
246 l_stmt_num := 0;
247 IF NOT FND_API.Compatible_API_Call (l_api_version,
248 p_api_version,
249 l_api_name,
250 G_PKG_NAME )
251 THEN
252 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
253 END IF;
254
255 -- Initialize API return status to success
256 l_stmt_num := 10;
257 x_return_status := FND_API.G_RET_STS_SUCCESS;
258
259 -- Create CLOB object to store the XML data
260 l_stmt_num := 20;
261 DBMS_LOB.createtemporary(l_xml_temp, TRUE);
262
263 -- If it is Specific WorkOrder then get the WP entity Name
264 IF (p_range = 2) THEN
265 l_stmt_num := 30;
266 SELECT wip_entity_name
267 INTO l_wip_entity_name
268 FROM wip_entities
269 WHERE wip_entity_id = p_specific_workorder;
270 END IF;
271
272 l_stmt_num := 30;
273 -- Get Legal Entity Name
274 SELECT xle.name
275 INTO l_legal_entity
276 FROM xle_firstparty_information_v xle
277 WHERE xle.legal_entity_id = p_legal_entity_id;
278
279 l_stmt_num := 40;
280 -- Get PAC Cost Type Name
281 SELECT cct.COST_TYPE
282 INTO l_cost_type
283 FROM cst_cost_types cct
284 WHERE cct.cost_type_id = p_cost_type_id;
285
286 l_stmt_num := 50;
287 -- Get PAC Cost group Name
288 SELECT ccg.cost_group
289 INTO l_cost_group
290 FROM cst_cost_groups ccg
291 WHERE ccg.cost_group_id = p_cost_group_id
292 AND NVL(ccg.cost_group_type,1) = 2;
293
294
295 -- Get the report parameter value for displaying in the report
296 l_stmt_num := 60;
297 OPEN l_ref_cur FOR
298 'SELECT
299 :l_legal_entity NAME,
300 :l_cost_type COST_TYPE,
301 :l_cost_group COST_GROUP,
302 LU.meaning RANGE,
303 :p_from_workorder FROM_WO,
304 :p_to_workorder TO_WO,
305 :l_wip_entity_name ENTITY
306 FROM mfg_lookups LU
307 WHERE LU.lookup_type = ''CST_PAC_EAM_JOB_OPTION''
308 AND LU.lookup_code = :p_range'
309 USING l_legal_entity, l_cost_type, l_cost_group,
310 p_from_workorder, p_to_workorder, l_wip_entity_name, p_range;
311
312 -- create a new context with the SQL query
313 l_stmt_num := 50;
314 l_ctx := DBMS_XMLGEN.newContext (l_ref_cur);
315 DBMS_XMLGEN.setRowSetTag (l_ctx,'REPORTPARAMETERS');
316 DBMS_XMLGEN.setRowTag (l_ctx,NULL);
317
318 -- generate XML data
319 l_stmt_num := 70;
320 DBMS_XMLGEN.getXML (l_ctx, l_xml_temp, DBMS_XMLGEN.none);
321
322 l_stmt_num := 80;
323 l_offset := DBMS_LOB.instr (lob_loc => l_xml_temp,
324 pattern => '>',
325 offset => 1,
326 nth => 1);
327
328 /*Bug 7305146*/
329 /*-- Copy XML header part to the destination XML doc
330 l_stmt_num := 90;
331 DBMS_LOB.copy (x_xml_doc, l_xml_temp, l_offset + 1);*/
332
333 -- Remove the header
334 l_stmt_num := 90;
335 DBMS_LOB.erase (l_xml_temp, l_offset,1);
336
337 l_stmt_num := 100;
338 /*The following 3 lines of code ensures that XML data generated here uses the right encoding*/
339 l_encoding := fnd_profile.value('ICX_CLIENT_IANA_ENCODING');
340 l_xml_header := '<?xml version="1.0" encoding="'|| l_encoding ||'"?>';
341 DBMS_LOB.writeappend (x_xml_doc, length(l_xml_header), l_xml_header);
342
343 -- append the REPORT tag to XML
344 l_stmt_num := 110;
345 DBMS_LOB.writeappend (X_xml_doc, 8, '<REPORT>');
346
347 -- Append the rest to xml output
348 l_stmt_num := 120;
349 DBMS_LOB.append (x_xml_doc, l_xml_temp);
350
351 /* close context and free memory */
352 l_stmt_num := 130;
353 DBMS_XMLGEN.closeContext(l_ctx);
354 CLOSE l_ref_cur;
355 DBMS_LOB.FREETEMPORARY (l_xml_temp);
356
357 IF l_plog THEN
358 fnd_log.string(
359 fnd_log.level_procedure,
360 l_module||'.'||l_stmt_num,
361 'Exiting CST_eAM_WorkOrders_PVT.Display_Parameters with '||
362 'x_return_status = '||x_return_status||','||
363 'x_msg_count = '||x_msg_count||','||
364 'x_msg_data = '||x_msg_data
365 );
366 END IF;
367 EXCEPTION
368 WHEN fnd_api.g_exc_unexpected_error THEN
369 IF l_exceptionlog THEN
370 fnd_msg_pub.add_exc_msg(
371 p_pkg_name => 'CST_eAM_WorkOrders_PVT',
372 p_procedure_name => 'Display_Parameters',
373 p_error_text => 'An exception has occurred.'
374 );
375 fnd_log.string(
376 fnd_log.level_exception,
377 l_module||'.'||l_stmt_num,
378 'An exception has occurred.'
379 );
380 END IF;
381 WHEN OTHERS THEN
382 IF l_uLog THEN
383 fnd_message.set_name('BOM','CST_UNEXPECTED');
384 fnd_message.set_token('SQLERRM',SQLERRM);
385 fnd_msg_pub.add;
386 fnd_log.message(
387 fnd_log.level_unexpected,
388 l_module||'.'||l_stmt_num,
389 FALSE
390 );
391 END IF;
392 END Display_Parameters;
393
394 PROCEDURE eAM_Est_Actual_details(p_api_version IN NUMBER,
395 p_init_msg_list IN VARCHAR2,
396 p_validation_level IN NUMBER,
397 x_return_status OUT NOCOPY VARCHAR2,
398 x_msg_count OUT NOCOPY NUMBER,
399 x_msg_data OUT NOCOPY VARCHAR2,
400 p_legal_entity_id IN NUMBER,
401 p_cost_group_id IN NUMBER,
402 p_cost_type_id IN NUMBER,
403 p_range IN NUMBER,
404 p_from_workorder IN VARCHAR2,
405 p_to_workorder IN VARCHAR2,
406 p_specific_workorder IN NUMBER,
407 x_xml_doc IN OUT NOCOPY CLOB)
408 IS
409 l_api_name CONSTANT VARCHAR2(30) := 'eAM_Est_Actual_details';
410 l_api_version CONSTANT NUMBER := 1.0;
411 l_ref_cur SYS_REFCURSOR;
412 l_ctx NUMBER;
413 l_xml_temp CLOB;
414 l_offset PLS_INTEGER;
415 l_total_rows_processed NUMBER;
416 l_stmt_num NUMBER;
417
418 l_module CONSTANT VARCHAR2(90) := 'cst.plsql.CST_eAM_WorkOrders_PVT.eAM_Est_Actual_details';
419 l_log_level CONSTANT NUMBER := fnd_log.G_CURRENT_RUNTIME_LEVEL;
420 l_uLog CONSTANT BOOLEAN := fnd_log.level_unexpected >= l_log_level AND
421 fnd_log.TEST(fnd_log.level_unexpected, l_module);
422 l_errorLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_error >= l_log_level;
423 l_exceptionLog CONSTANT BOOLEAN := l_errorLog AND fnd_log.level_exception >= l_log_level;
424 l_eventLog CONSTANT BOOLEAN := l_exceptionLog AND fnd_log.level_event >= l_log_level;
425 l_pLog CONSTANT BOOLEAN := l_eventLog AND fnd_log.level_procedure >= l_log_level;
426 l_sLog CONSTANT BOOLEAN := l_pLog AND fnd_log.level_statement >= l_log_level;
427
428 BEGIN
429 l_stmt_num := 0;
430 IF l_plog THEN
431 fnd_log.string(
432 fnd_log.level_procedure,
433 l_module||'.'||l_stmt_num,
434 'Entering CST_eAM_WorkOrders_PVT.eAM_Est_Actual_details with '||
435 'p_init_msg_list = '||p_init_msg_list||','||
436 'p_validation_level = '||p_validation_level||','||
437 'p_legal_entity_id = '||p_legal_entity_id||','||
438 'p_cost_group_id = '||p_cost_group_id||','||
439 'p_cost_type_id = '||p_cost_type_id||','||
440 'p_range = '||p_range||','||
441 'p_from_workorder = '||p_from_workorder||','||
442 'p_to_workorder = '||p_to_workorder||','||
443 'p_specific_workorder = '||p_specific_workorder
444 );
445 END IF;
446
447 -- Initialize API return status to success
448 l_stmt_num := 10;
449 x_return_status := FND_API.G_RET_STS_SUCCESS;
450
451 --Create the CLOB object to store XML data
452 l_stmt_num := 15;
453 l_offset := 21;
454 DBMS_LOB.createtemporary(l_xml_temp, TRUE);
455
456 -- Standard call to check for call compatibility.
457 l_stmt_num := 20;
458 IF NOT FND_API.Compatible_API_Call ( l_api_version,
459 p_api_version,
460 l_api_name,
461 G_PKG_NAME )
462 THEN
463 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
464 END IF;
465
466 /* 1 - ALL , 2 - Specific 3 - Range */
467 l_stmt_num := 30;
468 IF (p_range = 1) THEN
469
470 OPEN l_ref_cur FOR '
471 select we.WIP_ENTITY_NAME ENTITY_NAME,
472 mp.organization_code ORGANIZATION,
473 lu1.meaning CATEGORY,
474 bd.department_code DEPARTMENT,
475 wpepb.operation_seq_num OPERATION_SEQ,
476 sum(nvl(wpepb.system_estimated_mat_cost,0)) EST_MATL_COST,
477 sum(nvl(wpepb.system_estimated_lab_cost,0)) EST_LABR_COST,
478 sum(nvl(wpepb.system_estimated_eqp_cost,0)) EST_EQUIP_COST,
479 sum(nvl(wpepb.actual_mat_cost,0)) ACT_MATL_COST,
480 sum(nvl(wpepb.actual_lab_cost,0)) ACT_LABR_COST,
481 sum(nvl(wpepb.actual_eqp_cost,0)) ACT_EQUIP_COST,
482 sum(nvl(wpepb.system_estimated_mat_cost,0)) - sum(nvl(wpepb.actual_mat_cost,0)) VAR_MATL_COST,
483 sum(nvl(wpepb.system_estimated_lab_cost,0)) - sum(nvl(wpepb.actual_lab_cost,0)) VAR_LABR_COST,
484 sum(nvl(wpepb.system_estimated_eqp_cost,0)) - sum(nvl(wpepb.actual_eqp_cost,0)) VAR_EQUIP_COST
485 FROM CST_PAC_EAM_PERIOD_BALANCES WPEPB,
486 MTL_PARAMETERS mp,
487 WIP_ENTITIES we,
488 BOM_DEPARTMENTS bd,
489 MFG_LOOKUPS lu1
490
491 Where wpepb.legal_entity_id = :p_legal_entity_id
492 and wpepb.cost_group_id = :p_cost_group_id
493 and wpepb.Cost_type_id = :p_cost_type_id
494 and wpepb.wip_entity_id = we.wip_entity_id
495 and wpepb.organization_id = mp.organization_id
496 and we.organization_id = mp.organization_id
497 and we.ENTITY_TYPE in (6,7)
498 and bd.department_id = wpepb.owning_dept_id
499 and bd.organization_id = wpepb.organization_id
500 and lu1.lookup_type = ''BOM_EAM_COST_CATEGORY''
501 and lu1.lookup_code = wpepb.maint_cost_category
502 group by we.WIP_ENTITY_NAME,
503 mp.organization_code,
504 lu1.meaning,
505 bd.department_code,
506 wpepb.operation_seq_num' using p_legal_entity_id, p_cost_group_id, p_cost_type_id ;
507
508 ELSIF (p_range = 2) THEN
509 l_stmt_num := 40;
510 OPEN l_ref_cur FOR '
511 select we.WIP_ENTITY_NAME ENTITY_NAME,
512 mp.organization_code ORGANIZATION,
513 lu1.meaning CATEGORY,
514 bd.department_code DEPARTMENT,
515 wpepb.operation_seq_num OPERATION_SEQ,
516 sum(nvl(wpepb.system_estimated_mat_cost,0)) EST_MATL_COST,
517 sum(nvl(wpepb.system_estimated_lab_cost,0)) EST_LABR_COST,
518 sum(nvl(wpepb.system_estimated_eqp_cost,0)) EST_EQUIP_COST,
519 sum(nvl(wpepb.actual_mat_cost,0)) ACT_MATL_COST,
520 sum(nvl(wpepb.actual_lab_cost,0)) ACT_LABR_COST,
521 sum(nvl(wpepb.actual_eqp_cost,0)) ACT_EQUIP_COST,
522 sum(nvl(wpepb.system_estimated_mat_cost,0)) - sum(nvl(wpepb.actual_mat_cost,0)) VAR_MATL_COST,
523 sum(nvl(wpepb.system_estimated_lab_cost,0)) - sum(nvl(wpepb.actual_lab_cost,0)) VAR_LABR_COST,
524 sum(nvl(wpepb.system_estimated_eqp_cost,0)) - sum(nvl(wpepb.actual_eqp_cost,0)) VAR_EQUIP_COST
525
526 FROM CST_PAC_EAM_PERIOD_BALANCES WPEPB,
527 MTL_PARAMETERS mp,
528 WIP_ENTITIES we,
529 BOM_DEPARTMENTS bd,
530 MFG_LOOKUPS lu1
531
532 Where wpepb.legal_entity_id = :p_legal_entity_id
533 and wpepb.cost_group_id = :p_cost_group_id
534 and wpepb.Cost_type_id = :p_cost_type_id
535 and wpepb.wip_entity_id = we.wip_entity_id
536 and we.wip_entity_id = :p_specific_workorder
537 /* 1 - ALL , 2 - Specific 3 - Range */
538 and wpepb.organization_id = mp.organization_id
539 and we.organization_id = mp.organization_id
540 and we.ENTITY_TYPE in (6,7)
541 and bd.department_id = wpepb.owning_dept_id
542 and bd.organization_id = wpepb.organization_id
543 and lu1.lookup_type = ''BOM_EAM_COST_CATEGORY''
544 and lu1.lookup_code = wpepb.maint_cost_category
545 group by we.WIP_ENTITY_NAME,
546 mp.organization_code,
547 lu1.meaning,
548 bd.department_code,
549 wpepb.operation_seq_num' using p_legal_entity_id, p_cost_group_id, p_cost_type_id, p_specific_workorder ;
550
551 ELSE
552 l_stmt_num := 50;
553 OPEN l_ref_cur FOR '
554 SELECT we.WIP_ENTITY_NAME ENTITY_NAME,
555 mp.organization_code ORGANIZATION,
556 lu1.meaning CATEGORY,
557 bd.department_code DEPARTMENT,
558 wpepb.operation_seq_num OPERATION_SEQ,
559 sum(nvl(wpepb.system_estimated_mat_cost,0)) EST_MATL_COST,
560 sum(nvl(wpepb.system_estimated_lab_cost,0)) EST_LABR_COST,
561 sum(nvl(wpepb.system_estimated_eqp_cost,0)) EST_EQUIP_COST,
562 sum(nvl(wpepb.actual_mat_cost,0)) ACT_MATL_COST,
563 sum(nvl(wpepb.actual_lab_cost,0)) ACT_LABR_COST,
564 sum(nvl(wpepb.actual_eqp_cost,0)) ACT_EQUIP_COST,
565 sum(nvl(wpepb.system_estimated_mat_cost,0)) - sum(nvl(wpepb.actual_mat_cost,0)) VAR_MATL_COST,
566 sum(nvl(wpepb.system_estimated_lab_cost,0)) - sum(nvl(wpepb.actual_lab_cost,0)) VAR_LABR_COST,
567 sum(nvl(wpepb.system_estimated_eqp_cost,0)) - sum(nvl(wpepb.actual_eqp_cost,0)) VAR_EQUIP_COST
568
569 FROM CST_PAC_EAM_PERIOD_BALANCES WPEPB,
570 MTL_PARAMETERS mp,
571 WIP_ENTITIES we,
572 BOM_DEPARTMENTS bd,
573 MFG_LOOKUPS lu1
574
575 Where wpepb.legal_entity_id = :p_legal_entity_id
576 and wpepb.cost_group_id = :p_cost_group_id
577 and wpepb.Cost_type_id = :p_cost_type_id
578 and wpepb.wip_entity_id = we.wip_entity_id
579 and we.wip_entity_name between :p_from_workorder
580 AND :p_to_workorder
581 and wpepb.organization_id = mp.organization_id
582 and we.organization_id = mp.organization_id
583 and we.ENTITY_TYPE in (6,7)
584 and bd.department_id = wpepb.owning_dept_id
585 and bd.organization_id = wpepb.organization_id
586 and lu1.lookup_type = ''BOM_EAM_COST_CATEGORY''
587 and lu1.lookup_code = wpepb.maint_cost_category
588 group by we.WIP_ENTITY_NAME,
589 mp.organization_code,
590 lu1.meaning,
591 bd.department_code,
592 wpepb.operation_seq_num' using p_legal_entity_id, p_cost_group_id, p_cost_type_id, p_from_workorder, p_to_workorder ;
593 END IF;
594
595 -- create a new context with the SQL query
596 l_stmt_num := 60;
597 l_ctx := DBMS_XMLGEN.newContext (l_ref_cur);
598
599 -- Set the row tag and rowset tag
600 l_stmt_num := 70;
601 DBMS_XMLGEN.setRowSetTag (l_ctx,'eAMWorkOrders');
602 DBMS_XMLGEN.setRowTag (l_ctx,'eAMWorkOrderopSeq');
603
604 -- generate XML data
605 l_stmt_num := 80;
606 DBMS_XMLGEN.getXML (l_ctx, l_xml_temp, DBMS_XMLGEN.none);
607
608 -- remove the header (21 characters) and append the rest to xml output
609 l_stmt_num := 90;
610 l_total_rows_processed := DBMS_XMLGEN.getNumRowsProcessed(l_ctx);
611 IF ( l_total_rows_processed > 0) THEN
612 DBMS_LOB.erase (l_xml_temp, l_offset,1);
613 DBMS_LOB.append (x_xml_doc, l_xml_temp);
614 END IF;
615
616 -- close context and free memory
617 l_stmt_num := 100;
618 DBMS_XMLGEN.closeContext(l_ctx);
619 CLOSE l_ref_cur;
620 DBMS_LOB.FREETEMPORARY (l_xml_temp);
621
622
623 -- Add tag ROW_COUNT and total number rows
624 l_stmt_num := 110;
625 DBMS_LOB.writeappend (X_xml_doc, 11, '<ROW_COUNT>');
626 DBMS_LOB.writeappend (X_xml_doc, 10, '<TOT_ROWS>');
627 DBMS_LOB.writeappend (X_xml_doc, length (to_char(l_total_rows_processed)), to_char(l_total_rows_processed));
628 DBMS_LOB.writeappend (X_xml_doc, 11, '</TOT_ROWS>');
629 DBMS_LOB.writeappend (X_xml_doc, 12, '</ROW_COUNT>');
630
631 l_stmt_num := 120;
632 IF l_plog THEN
633 fnd_log.string(
634 fnd_log.level_procedure,
635 l_module||'.'||l_stmt_num,
636 'Exiting CST_eAM_WorkOrders_PVT.eAM_Est_Actual_details with '||
637 'x_return_status = '||x_return_status||','||
638 'x_msg_count = '||x_msg_count||','||
639 'x_msg_data = '||x_msg_data
640 );
641 END IF;
642
643 EXCEPTION
644 WHEN fnd_api.g_exc_unexpected_error THEN
645 IF l_exceptionlog THEN
646 fnd_msg_pub.add_exc_msg(
647 p_pkg_name => 'CST_eAM_WorkOrders_PVT',
648 p_procedure_name => 'eAM_Est_Actual_details',
649 p_error_text => 'An exception has occurred.'
650 );
651 fnd_log.string(
652 fnd_log.level_exception,
653 l_module||'.'||l_stmt_num,
654 'An exception has occurred.'
655 );
656 END IF;
657 WHEN OTHERS THEN
658 IF l_uLog THEN
659 fnd_message.set_name('BOM','CST_UNEXPECTED');
660 fnd_message.set_token('SQLERRM',SQLERRM);
661 fnd_msg_pub.add;
662 fnd_log.message(
663 fnd_log.level_unexpected,
664 l_module||'.'||l_stmt_num,
665 FALSE
666 );
667 END IF;
668 END eAM_Est_Actual_details;
669
670 END CST_eAM_WorkOrders_PVT;