[Home] [Help]
PACKAGE BODY: APPS.EAM_CONSTRUCTION_EST_PVT
Source
1 PACKAGE BODY EAM_CONSTRUCTION_EST_PVT AS
2 /* $Header: EAMVCESB.pls 120.29.12020000.4 2012/10/08 11:50:11 antmishr ship $ */
3 -- Start of Comments
4 -- Package name : EAM_CONSTRUCTION_EST_PVT
5 -- Purpose : Privatre Package Body for Construction estimate
6 -- History :
7 -- NOTE :
8 -- End of Comments
9
10 G_PKG_NAME CONSTANT VARCHAR2(30) := 'EAM_CONSTRUCTION_EST_PVT';
11 G_FILE_NAME CONSTANT VARCHAR2(12) := 'EAMVCESB.pls';
12 G_DEBUG_FILENAME CONSTANT VARCHAR2(50) := 'EAM_CONSTRUCTION_EST_DBG.log';
13
14 PROCEDURE INIT_DEBUG(
15 p_init_msg_list IN VARCHAR2,
16 p_debug_filename IN VARCHAR2 := G_DEBUG_FILENAME,
17 p_debug_file_mode IN VARCHAR2 := 'w',
18 p_debug IN OUT NOCOPY VARCHAR2
19 )
20 IS
21 l_output_dir VARCHAR2(512);
22 l_mesg_token_tbl EAM_ERROR_MESSAGE_PVT.MESG_TOKEN_TBL_TYPE;
23 l_out_mesg_token_tbl EAM_ERROR_MESSAGE_PVT.MESG_TOKEN_TBL_TYPE;
24 l_token_tbl EAM_ERROR_MESSAGE_PVT.TOKEN_TBL_TYPE;
25 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
26 BEGIN
27 p_debug := NVL(FND_PROFILE.VALUE('EAM_DEBUG'), 'N');
28 EAM_PROCESS_WO_PVT.SET_DEBUG(p_debug);
29
30 EAM_ERROR_MESSAGE_PVT.SET_BO_IDENTIFIER(p_bo_identifier => 'EAM');
31
32 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
33 EAM_ERROR_MESSAGE_PVT.INITIALIZE;
34 END IF;
35
36 EAM_WORKORDER_UTIL_PKG.LOG_PATH(l_output_dir);
37
38 IF p_debug = 'Y' THEN
39 IF trim(l_output_dir) IS NULL OR trim(l_output_dir) = '' THEN
40 l_out_mesg_token_tbl := l_mesg_token_tbl;
41 EAM_ERROR_MESSAGE_PVT.ADD_ERROR_TOKEN(
42 p_message_text => 'Debug is set to Y so an output directory' ||
43 ' must be specified. Debug will be turned' ||
44 ' off since no directory is specified',
45 p_mesg_token_tbl => l_mesg_token_tbl,
46 x_mesg_token_tbl => l_out_mesg_token_tbl,
47 p_token_tbl => l_token_tbl);
48 l_mesg_token_tbl := l_out_mesg_token_tbl;
49 p_debug := 'N';
50 EAM_PROCESS_WO_PVT.SET_DEBUG(p_debug);
51 END IF;
52
53 IF trim(p_debug_filename) IS NULL OR trim(p_debug_filename) = '' THEN
54 l_out_mesg_token_tbl := l_mesg_token_tbl;
55 EAM_ERROR_MESSAGE_PVT.Add_Error_Token(
56 p_Message_text => 'Debug is set to Y so an output filename' ||
57 ' must be specified. Debug will be turned' ||
58 ' off since no filename is specified',
59 p_Mesg_Token_Tbl => l_mesg_token_tbl,
60 x_Mesg_Token_Tbl => l_out_mesg_token_tbl,
61 p_Token_Tbl => l_token_tbl);
62 l_mesg_token_tbl := l_out_mesg_token_tbl;
63 p_debug:= 'N';
64 EAM_PROCESS_WO_PVT.SET_DEBUG(p_debug);
65 END IF;
66
67 IF p_debug = 'Y' THEN
68 l_out_mesg_token_tbl := l_mesg_token_tbl;
69 EAM_ERROR_MESSAGE_PVT.Open_Debug_Session(
70 p_debug_filename => p_debug_filename,
71 p_output_dir => l_output_dir,
72 p_debug_file_mode => p_debug_file_mode,
73 x_return_status => l_return_status,
74 p_mesg_token_tbl => l_mesg_token_tbl,
75 x_mesg_token_tbl => l_out_mesg_token_tbl);
76 l_mesg_token_tbl := l_out_mesg_token_tbl;
77
78 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
79 p_debug:= 'N';
80 EAM_PROCESS_WO_PVT.SET_DEBUG(p_debug);
81 END IF;
82 END IF;
83 END IF;
84 EXCEPTION
85 WHEN OTHERS THEN
86 NULL;
87 END INIT_DEBUG;
88
89 PROCEDURE DEBUG(p_message IN VARCHAR2) IS
90 l_log_level CONSTANT NUMBER := fnd_log.g_current_runtime_level;
91 l_sLog CONSTANT BOOLEAN := fnd_log.level_statement >= l_log_level;
92 BEGIN
93 EAM_ERROR_MESSAGE_PVT.WRITE_DEBUG(p_message);
94 IF (l_sLog) THEN
95 FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, 'eam.plsql.EAM_CONSTRUCTION_EST_PVT', p_message);
96 END IF;
97 EXCEPTION
98 WHEN OTHERS THEN
99 NULL;
100 END DEBUG;
101
102 PROCEDURE GET_UNIT_RESOURCE_COST(
103 p_resource_id IN NUMBER
104 , p_cost_type_id IN NUMBER
105 , p_ext_precision IN NUMBER
106 , p_org_id IN NUMBER
107 , x_unit_resource_value OUT NOCOPY NUMBER
108 , x_return_status OUT NOCOPY VARCHAR2
109 )
110 IS
111
112 BEGIN
113
114 SELECT ROUND(DECODE(BR.FUNCTIONAL_CURRENCY_FLAG, 1, 1,
115 NVL(CRC.RESOURCE_RATE,0)) * 1 -- 1 TO REPRESENT UNIT RESOURCE QUANTITY
116 * DECODE(NULL, 1, NULL, 2, 1, 1) ,p_ext_precision)
117 INTO X_UNIT_RESOURCE_VALUE
118 FROM CST_RESOURCE_COSTS CRC, BOM_RESOURCES BR
119 WHERE CRC.RESOURCE_ID = p_resource_id
120 AND BR.RESOURCE_ID = CRC.RESOURCE_ID
121 AND BR.ORGANIZATION_ID = p_org_id
122 AND CRC.COST_TYPE_ID = p_cost_type_id;
123 x_return_status := 'S';
124
125 EXCEPTION
126 WHEN OTHERS THEN
127 x_return_status := 'E';
128 END GET_UNIT_RESOURCE_COST;
129
130 PROCEDURE GET_UNIT_STOCKED_MAT_COST(
131 p_inv_id IN NUMBER
132 , p_cost_method IN NUMBER
133 , p_cost_group_id IN NUMBER
134 , p_org_id IN NUMBER
135 , p_ext_precision IN NUMBER
136 , x_unit_mat_value OUT NOCOPY NUMBER
137 , x_return_status OUT NOCOPY VARCHAR2
138 )
139 IS
140
141 BEGIN
142
143 SELECT ROUND(SUM( 1 * -- 1 TO REPRESENT UNIT MAT QUANTITY
144 DECODE(MSI.EAM_ITEM_TYPE, 3,DECODE(NULL,'Y',0, NVL(CCICV.ITEM_COST,0)), NVL(CCICV.ITEM_COST,0))), p_ext_precision) MAT_VALUE
145 INTO x_unit_mat_value
146 FROM CST_CG_ITEM_COSTS_VIEW CCICV,
147 MTL_SYSTEM_ITEMS_B MSI
148 WHERE CCICV.INVENTORY_ITEM_ID = p_inv_id
149 AND CCICV.ORGANIZATION_ID = p_org_id
150 AND CCICV.COST_GROUP_ID = DECODE(p_cost_method,1,1, p_cost_group_id)
151 AND MSI.ORGANIZATION_ID = p_org_id
152 AND MSI.INVENTORY_ITEM_ID = p_inv_id
153 AND MSI.STOCK_ENABLED_FLAG = 'Y';
154
155 EXCEPTION
156 WHEN OTHERS THEN
157 x_return_status := 'E';
158 END GET_UNIT_STOCKED_MAT_COST;
159
160 PROCEDURE GET_UNIT_NON_STOCKED_MAT_COST(
161 p_inv_id IN NUMBER
162 , p_org_id IN NUMBER
163 , p_ext_precision IN NUMBER
164 , x_unit_mat_value OUT NOCOPY NUMBER
165 , x_return_status OUT NOCOPY VARCHAR2
166 )
167 IS
168
169 BEGIN
170 SELECT ROUND(MSIK.LIST_PRICE_PER_UNIT,p_ext_precision)
171 INTO x_unit_mat_value
172 FROM MTL_SYSTEM_ITEMS_VL MSIK
173 WHERE MSIK.ORGANIZATION_ID = p_org_id
174 AND MSIK.INVENTORY_ITEM_ID = p_inv_id
175 AND MSIK.STOCK_ENABLED_FLAG = 'N';
176
177 EXCEPTION
178 WHEN OTHERS THEN
179 x_return_status := 'E';
180 END GET_UNIT_NON_STOCKED_MAT_COST;
181
182 PROCEDURE EXPLODE_INITIAL_ESTIMATE(
183 p_api_version IN NUMBER := 1.0
184 , p_init_msg_list IN VARCHAR2 := 'F'
185 , p_commit IN VARCHAR2
186 , p_estimate_id IN NUMBER
187 , x_ce_msg_tbl OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CE_MESSAGE_TBL
188 , x_return_status OUT NOCOPY VARCHAR2
189 , x_msg_count OUT NOCOPY NUMBER
190 , x_msg_data OUT NOCOPY VARCHAR2)
191 IS
192
193 l_in_eam_ce_wo_lines_tbl EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL;
194 l_out_eam_ce_wo_lines_tbl EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL;
195 l_estimate_id NUMBER := p_estimate_id;
196 l_return_status VARCHAR2(1);
197
198 BEGIN
199 debug('Inside API EXPLODE_INITIAL_ESTIMATE');
200 debug(' p_estimate_id - ' || p_estimate_id);
201 debug(' p_commit - ' || p_commit);
202
203 SAVEPOINT EXPLODE_INITIAL_ESTIMATE;
204
205 -- The initial loading of exploded activities
206 -- EXPLODE_CE_ACTIVITIES to explode the activites and the construction units
207 debug('Calling API - EXPLODE_CE_ACTIVITIES');
208 EXPLODE_CE_ACTIVITIES(
209 p_estimate_id => l_estimate_id
210 , p_eam_ce_wo_lines_tbl => l_in_eam_ce_wo_lines_tbl
211 , x_eam_ce_wo_lines_tbl => l_out_eam_ce_wo_lines_tbl
212 , x_ce_msg_tbl => x_ce_msg_tbl
213 , x_return_status => l_return_status
214 );
215
216 IF nvl(l_return_status,'S') <> 'S' THEN
217 -- Log error, but continue processing
218 l_return_status := 'E';
219 debug('Error in API - EXPLODE_CE_ACTIVITIES');
220 RAISE FND_API.G_EXC_ERROR;
221 END IF; -- nvl(l_return_status,'S') <> 'S'
222 debug('Completed API - EXPLODE_CE_ACTIVITIES');
223
224 -- All the associated acitivites are exploeded and
225 -- available in l_out_eam_ce_wo_lines_tbl
226 -- Insert all the work order lines in to
227 -- EAM_CE_WORK_ORDER_LINES, but dont commit the data
228 debug('Calling API - INSERT_ALL_WO_LINES');
229 INSERT_ALL_WO_LINES(
230 p_api_version => 1.0
231 , p_init_msg_list => FND_API.G_FALSE
232 , p_commit => p_commit
233 , p_estimate_id => l_estimate_id
234 , p_eam_ce_wo_lines_tbl => l_out_eam_ce_wo_lines_tbl
235 , x_return_status => l_return_status
236 , x_msg_count => x_msg_count
237 , x_msg_data => x_msg_data
238 );
239
240 IF nvl(l_return_status,'S') <> 'S' THEN
241 -- Log error, but continue processing
242 l_return_status := 'E';
243 debug('Error in API - INSERT_ALL_WO_LINES');
244 RAISE FND_API.G_EXC_ERROR;
245 END IF; -- nvl(l_return_status,'S') <> 'S'
246 debug('Completed API - INSERT_ALL_WO_LINES');
247
248 x_return_status := FND_API.G_RET_STS_SUCCESS;
249 debug ('End EXPLODE_INITIAL_ESTIMATE');
250 --COMMIT;
251 EXCEPTION
252 WHEN FND_API.G_EXC_ERROR THEN
253 ROLLBACK TO EXPLODE_INITIAL_ESTIMATE;
254 x_return_status := FND_API.G_RET_STS_ERROR;
255 debug('FND_API.G_EXC_ERROR Error in API - EXPLODE_INITIAL_ESTIMATE');
256 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
257 p_data => x_msg_data);
258 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
259 ROLLBACK TO EXPLODE_INITIAL_ESTIMATE;
260 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
261 debug('FND_API.G_EXC_UNEXPECTED_ERROR Error in API - EXPLODE_INITIAL_ESTIMATE');
262 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
263 p_data => x_msg_data);
264 WHEN OTHERS THEN
265 ROLLBACK TO EXPLODE_INITIAL_ESTIMATE;
266 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
267 debug('OTHERS Error in API - EXPLODE_INITIAL_ESTIMATE');
268 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
269 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, 'EXPLODE_INITIAL_ESTIMATE');
270 END IF;
271 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
272 p_data => x_msg_data);
273
274 END EXPLODE_INITIAL_ESTIMATE;
275
276 PROCEDURE DELETE_WO_LINE(
277 p_api_version IN NUMBER := 1.0
278 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
279 , p_commit IN VARCHAR2
280 , p_work_order_line_id IN NUMBER
281 , x_return_status OUT NOCOPY VARCHAR2
282 , x_msg_count OUT NOCOPY NUMBER
283 , x_msg_data OUT NOCOPY VARCHAR2
284 )
285 IS
286
287 BEGIN
288 SAVEPOINT DELETE_WO_LINE;
289 debug('Inside API - DELETE_WO_LINE');
290 debug(' p_work_order_line_id - ' || p_work_order_line_id);
291 -- Validate input parameters
292
293 IF (p_work_order_line_id IS NULL) THEN
294 --FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
295 --FND_MESSAGE.SET_TOKEN('PARAMETER', 'ORGANIZATION_ID');
296 --FND_MESSAGE.SET_TOKEN('VALUE', p_parent_wo_line_rec.ORGANIZATION_ID);
297 --FND_MSG_PUB.ADD;
298 RAISE FND_API.G_EXC_ERROR;
299 END IF;
300
301 EAM_CE_WORK_ORDER_LINES_PKG.DELETE_ROW(
302 p_work_order_line_id => p_work_order_line_id
303 );
304
305 IF NVL(p_commit,'F') = 'T' THEN
306 debug(' Committing');
307 COMMIT;
308 END IF;
309 x_return_status := 'S';
310 debug('End API - DELETE_WO_LINE');
311
312 EXCEPTION
313 WHEN FND_API.G_EXC_ERROR THEN
314 ROLLBACK TO DELETE_WO_LINE;
315 x_return_status := FND_API.G_RET_STS_ERROR;
316 debug('FND_API.G_EXC_ERROR Error in API - DELETE_WO_LINE');
317 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
318 p_data => x_msg_data);
319 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
320 ROLLBACK TO DELETE_WO_LINE;
321 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
322 debug('FND_API.G_EXC_UNEXPECTED_ERROR Error in API - DELETE_WO_LINE');
323 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
324 p_data => x_msg_data);
325 WHEN OTHERS THEN
326 ROLLBACK TO DELETE_WO_LINE;
327 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
328 debug('OTHERS Error in API - DELETE_WO_LINE');
329 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
330 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, 'DELETE_WO_LINE');
331 END IF;
332 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
333 p_data => x_msg_data);
334 END DELETE_WO_LINE;
335
336 PROCEDURE INSERT_PARENT_WO_LINE(
337 p_api_version IN NUMBER := 1.0
338 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
339 , p_commit IN VARCHAR2
340 , p_estimate_id IN NUMBER
341 , p_parent_wo_line_rec IN EAM_EST_DATASTRUCTURES_PUB.EAM_CE_PARENT_WO_REC
342 , x_return_status OUT NOCOPY VARCHAR2
343 , x_msg_count OUT NOCOPY NUMBER
344 , x_msg_data OUT NOCOPY VARCHAR2
345 )
346
347 IS
348
349 l_estimate_rec EAM_EST_DATASTRUCTURES_PUB.EAM_CONSTRUCTION_ESTIMATE_REC;
350 l_parent_ce_wo_line_rec EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_REC;
351 l_creation_date DATE := SYSDATE;
352 l_created_by NUMBER := FND_GLOBAL.USER_ID;
353 l_last_updated_date DATE := SYSDATE;
354 l_last_updated_by NUMBER := FND_GLOBAL.USER_ID;
355 l_last_updated_login NUMBER;
356 l_wo_line_id_seq NUMBER;
357 l_parent_wo_num NUMBER;
358
359 CURSOR EST_PARENT_CSR IS
360 SELECT ESTIMATE_ID ,
361 ORGANIZATION_ID ,
362 CREATE_PARENT_WO_FLAG,
363 PARENT_WO_ID
364 FROM EAM_CONSTRUCTION_ESTIMATES
365 WHERE ESTIMATE_ID = p_estimate_id
366 AND ORGANIZATION_ID = p_parent_wo_line_rec.ORGANIZATION_ID;
367
368 -- Bug 12541554
369 CURSOR GET_SYSTEM_STATUS (p_user_defined_status_id IN NUMBER) IS
370 SELECT
371 SYSTEM_STATUS
372 FROM EAM_WO_STATUSES_V
373 WHERE STATUS_ID = p_user_defined_status_id
374 AND ENABLED_FLAG = 'Y';
375
376 l_system_status_rec GET_SYSTEM_STATUS%ROWTYPE;
377 l_estimate_parent_rec EST_PARENT_CSR%ROWTYPE;
378
379 BEGIN
380
381 SAVEPOINT INSERT_PARENT_WO_LINE;
382 debug('Inside API - INSERT_PARENT_WO_LINE');
383 debug(' p_parent_wo_line_rec.ORGANIZATION_ID - ' || p_parent_wo_line_rec.ORGANIZATION_ID);
384 debug(' p_estimate_id - ' || p_estimate_id);
385 debug(' p_commit - ' || p_commit);
386 -- Validate input parameters
387
388 IF (p_parent_wo_line_rec.ORGANIZATION_ID IS NULL) THEN
389 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
390 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ORGANIZATION_ID');
391 FND_MESSAGE.SET_TOKEN('VALUE', p_parent_wo_line_rec.ORGANIZATION_ID);
392 FND_MSG_PUB.ADD;
393 RAISE FND_API.G_EXC_ERROR;
394 END IF;
395
396 IF (p_estimate_id IS NULL) THEN
397 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
398 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ESTIMATE_NUMBER');
399 FND_MESSAGE.SET_TOKEN('VALUE', p_estimate_id);
400 FND_MSG_PUB.ADD;
401 RAISE FND_API.G_EXC_ERROR;
402 END IF;
403
404 -- If the parent details already exist, update the estimate
405 OPEN EST_PARENT_CSR;
406 FETCH EST_PARENT_CSR INTO l_estimate_parent_rec;
407 CLOSE EST_PARENT_CSR;
408
409
410 -- Update the estimate table with the create parent flag
411 -- and parent work order number
412 -- Construct estimate rec with the parent wo details
413 l_estimate_rec.ESTIMATE_ID := p_estimate_id;
414 l_estimate_rec.ORGANIZATION_ID := p_parent_wo_line_rec.ORGANIZATION_ID;
415 l_estimate_rec.ESTIMATE_NUMBER := FND_API.G_MISS_CHAR;
416 l_estimate_rec.ESTIMATE_DESCRIPTION := FND_API.G_MISS_CHAR;
417 l_estimate_rec.GROUPING_OPTION := FND_API.G_MISS_NUM;
418
419 -- Bug 12541554
420 -- Get the system status from user defined status id
421 BEGIN
422 OPEN GET_SYSTEM_STATUS(p_parent_wo_line_rec.STATUS_TYPE);
423 FETCH GET_SYSTEM_STATUS INTO l_system_status_rec;
424 CLOSE GET_SYSTEM_STATUS;
425 EXCEPTION
426 WHEN OTHERS THEN
427 l_system_status_rec.SYSTEM_STATUS := p_parent_wo_line_rec.STATUS_TYPE;
428 END;
429
430 -- If the create parent flag is Y then the
431 -- PARENT_WO_ID holds the ESTIMATE_WORK_ORDER_LINE_ID
432 -- CE work order lines table
433 -- If the create parent flag is N the the
434 -- PARENT_WO_ID holds the wip entity id of the
435 -- existing work order
436 debug(' p_parent_wo_line_rec.CREATE_PARENT_FLAG - ' || p_parent_wo_line_rec.CREATE_PARENT_FLAG);
437 IF p_parent_wo_line_rec.CREATE_PARENT_FLAG = 'Y' THEN
438 -- PARENT_WO_ID holds ESTIMATE_WORK_ORDER_LINE_ID
439 -- The the corresponding ESTIMATE_WORK_ORDER_LINE_ID contains all the
440 -- parent work order details
441 debug(' l_estimate_parent_rec.PARENT_WO_ID - ' || l_estimate_parent_rec.PARENT_WO_ID);
442 IF NVL(l_estimate_parent_rec.PARENT_WO_ID,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM
443 AND NVL(l_estimate_parent_rec.CREATE_PARENT_WO_FLAG,'N') <> 'N' THEN
444
445 l_wo_line_id_seq := l_estimate_parent_rec.PARENT_WO_ID;
446
447 debug(' Updating EAM_CE_WORK_ORDER_LINES_PKG Parent Work Order line - ' || l_wo_line_id_seq);
448 EAM_CE_WORK_ORDER_LINES_PKG.UPDATE_ROW(
449 p_estimate_work_order_line_id => l_wo_line_id_seq
450 ,p_estimate_work_order_id => FND_API.G_MISS_NUM
451 ,p_src_cu_id => FND_API.G_MISS_NUM
452 ,p_src_activity_id => FND_API.G_MISS_NUM
453 ,p_src_activity_qty => FND_API.G_MISS_NUM
454 ,p_src_op_seq_num => FND_API.G_MISS_NUM
455 ,p_src_acct_class_code => FND_API.G_MISS_CHAR
456 ,p_src_diff_id => FND_API.G_MISS_NUM
457 ,p_diff_qty => FND_API.G_MISS_NUM
458 ,p_estimate_id => p_estimate_id
459 ,p_organization_id => p_parent_wo_line_rec.ORGANIZATION_ID
460 ,p_work_order_seq_num => FND_API.G_MISS_NUM
461 ,p_work_order_number => p_parent_wo_line_rec.PARENT_WORK_ORDER_NUMBER
462 ,p_work_order_description => p_parent_wo_line_rec.WORK_ORDER_DESCRIPTION
463 ,p_ref_wip_entity_id => FND_API.G_MISS_NUM
464 ,p_primary_item_id => FND_API.G_MISS_NUM
465 ,p_status_type => l_system_status_rec.SYSTEM_STATUS -- Bug 12541554
466 --,p_status_type => FND_API.G_MISS_NUM
467 ,p_acct_class_code => p_parent_wo_line_rec.ACCT_CLASS_CODE
468 ,p_scheduled_start_date => sysdate
469 ,p_scheduled_completion_date => FND_API.G_MISS_DATE
470 ,p_project_id => p_parent_wo_line_rec.PROJECT_ID
471 ,p_task_id => p_parent_wo_line_rec.TASK_ID
472 ,p_maintenance_object_id => p_parent_wo_line_rec.MAINTENANCE_OBJECT_ID
473 ,p_maintenance_object_type => p_parent_wo_line_rec.MAINTENANCE_OBJECT_TYPE
474 ,p_maintenance_object_source => p_parent_wo_line_rec.MAINTENANCE_OBJECT_SOURCE
475 ,p_owning_department_id => p_parent_wo_line_rec.OWNING_DEPARTMENT_ID
476 ,p_user_defined_status_id => p_parent_wo_line_rec.STATUS_TYPE
477 ,p_op_seq_num => FND_API.G_MISS_NUM
478 ,p_op_description => FND_API.G_MISS_CHAR
479 ,p_standard_operation_id => FND_API.G_MISS_NUM
480 ,p_op_department_id => FND_API.G_MISS_NUM
481 ,p_op_long_description => FND_API.G_MISS_CHAR
482 ,p_res_seq_num => FND_API.G_MISS_NUM
483 ,p_res_id => FND_API.G_MISS_NUM
484 ,p_res_uom => FND_API.G_MISS_CHAR
485 ,p_res_basis_type => FND_API.G_MISS_NUM
486 ,p_res_usage_rate_or_amount => FND_API.G_MISS_NUM
487 ,p_res_required_units => FND_API.G_MISS_NUM
488 ,p_res_assigned_units => FND_API.G_MISS_NUM
489 ,p_item_type => FND_API.G_MISS_NUM
490 ,p_required_quantity => FND_API.G_MISS_NUM
491 ,p_unit_price => FND_API.G_MISS_NUM
492 ,p_uom => FND_API.G_MISS_CHAR
493 ,p_basis_type => FND_API.G_MISS_NUM
494 ,p_suggested_vendor_name => FND_API.G_MISS_CHAR
495 ,p_suggested_vendor_id => FND_API.G_MISS_NUM
496 ,p_suggested_vendor_site => FND_API.G_MISS_CHAR
497 ,p_suggested_vendor_site_id => FND_API.G_MISS_NUM
498 ,p_mat_inventory_item_id => FND_API.G_MISS_NUM
499 ,p_mat_component_seq_num => FND_API.G_MISS_NUM
500 ,p_mat_supply_subinventory => FND_API.G_MISS_CHAR
501 ,p_mat_supply_locator_id => FND_API.G_MISS_NUM
502 ,p_di_amount => FND_API.G_MISS_NUM
503 ,p_di_order_type_lookup_code => FND_API.G_MISS_CHAR
504 ,p_di_description => FND_API.G_MISS_CHAR
505 ,p_di_purchase_category_id => FND_API.G_MISS_NUM
506 ,p_di_auto_request_material => FND_API.G_MISS_CHAR
507 ,p_di_need_by_date => FND_API.G_MISS_DATE
508 ,p_work_order_line_cost => FND_API.G_MISS_NUM
509 ,p_creation_date => sysdate
510 ,p_created_by => FND_GLOBAL.LOGIN_ID
511 ,p_last_update_date => sysdate
512 ,p_last_updated_by => FND_GLOBAL.LOGIN_ID
513 ,p_last_update_login => FND_GLOBAL.LOGIN_ID
514 ,p_work_order_type => FND_API.G_MISS_NUM
515 ,p_activity_type => FND_API.G_MISS_NUM
516 ,p_activity_source => FND_API.G_MISS_NUM
517 ,p_activity_cause => FND_API.G_MISS_NUM
518 ,p_available_qty => FND_API.G_MISS_NUM
519 ,p_item_comments => FND_API.G_MISS_CHAR
520 ,p_cu_qty => FND_API.G_MISS_NUM
521 ,p_res_sch_flag => FND_API.G_MISS_NUM
522 );
523
524 ELSE
525
526 SELECT EAM_CE_WORK_ORDER_LINES_S.NEXTVAL INTO l_wo_line_id_seq FROM DUAL;
527 debug(' Generating new Parent Work order - ' || l_wo_line_id_seq);
528
529 EAM_CE_WORK_ORDER_LINES_PKG.INSERT_ROW(
530 p_estimate_work_order_line_id => l_wo_line_id_seq
531 ,p_estimate_work_order_id => FND_API.G_MISS_NUM
532 ,p_src_cu_id => FND_API.G_MISS_NUM
533 ,p_src_activity_id => FND_API.G_MISS_NUM
534 ,p_src_activity_qty => FND_API.G_MISS_NUM
535 ,p_src_op_seq_num => FND_API.G_MISS_NUM
536 ,p_src_acct_class_code => FND_API.G_MISS_CHAR
537 ,p_src_diff_id => FND_API.G_MISS_NUM
538 ,p_diff_qty => FND_API.G_MISS_NUM
539 ,p_estimate_id => p_estimate_id
540 ,p_organization_id => p_parent_wo_line_rec.ORGANIZATION_ID
541 ,p_work_order_seq_num => FND_API.G_MISS_NUM
542 ,p_work_order_number => p_parent_wo_line_rec.PARENT_WORK_ORDER_NUMBER
543 ,p_work_order_description => p_parent_wo_line_rec.WORK_ORDER_DESCRIPTION
544 ,p_ref_wip_entity_id => FND_API.G_MISS_NUM
545 ,p_primary_item_id => FND_API.G_MISS_NUM
546 ,p_status_type => l_system_status_rec.SYSTEM_STATUS -- Bug 12541554
547 --,p_status_type => FND_API.G_MISS_NUM
548 ,p_acct_class_code => p_parent_wo_line_rec.ACCT_CLASS_CODE
549 ,p_scheduled_start_date => sysdate
550 ,p_scheduled_completion_date => FND_API.G_MISS_DATE
551 ,p_project_id => p_parent_wo_line_rec.PROJECT_ID
552 ,p_task_id => p_parent_wo_line_rec.TASK_ID
553 ,p_maintenance_object_id => p_parent_wo_line_rec.MAINTENANCE_OBJECT_ID
554 ,p_maintenance_object_type => p_parent_wo_line_rec.MAINTENANCE_OBJECT_TYPE
555 ,p_maintenance_object_source => p_parent_wo_line_rec.MAINTENANCE_OBJECT_SOURCE
556 ,p_owning_department_id => p_parent_wo_line_rec.OWNING_DEPARTMENT_ID
557 ,p_user_defined_status_id => p_parent_wo_line_rec.STATUS_TYPE
558 ,p_op_seq_num => FND_API.G_MISS_NUM
559 ,p_op_description => FND_API.G_MISS_CHAR
560 ,p_standard_operation_id => FND_API.G_MISS_NUM
561 ,p_op_department_id => FND_API.G_MISS_NUM
562 ,p_op_long_description => FND_API.G_MISS_CHAR
563 ,p_res_seq_num => FND_API.G_MISS_NUM
564 ,p_res_id => FND_API.G_MISS_NUM
565 ,p_res_uom => FND_API.G_MISS_CHAR
566 ,p_res_basis_type => FND_API.G_MISS_NUM
567 ,p_res_usage_rate_or_amount => FND_API.G_MISS_NUM
568 ,p_res_required_units => FND_API.G_MISS_NUM
569 ,p_res_assigned_units => FND_API.G_MISS_NUM
570 ,p_item_type => FND_API.G_MISS_NUM
571 ,p_required_quantity => FND_API.G_MISS_NUM
572 ,p_unit_price => FND_API.G_MISS_NUM
573 ,p_uom => FND_API.G_MISS_CHAR
574 ,p_basis_type => FND_API.G_MISS_NUM
575 ,p_suggested_vendor_name => FND_API.G_MISS_CHAR
576 ,p_suggested_vendor_id => FND_API.G_MISS_NUM
577 ,p_suggested_vendor_site => FND_API.G_MISS_CHAR
578 ,p_suggested_vendor_site_id => FND_API.G_MISS_NUM
579 ,p_mat_inventory_item_id => FND_API.G_MISS_NUM
580 ,p_mat_component_seq_num => FND_API.G_MISS_NUM
581 ,p_mat_supply_subinventory => FND_API.G_MISS_CHAR
582 ,p_mat_supply_locator_id => FND_API.G_MISS_NUM
583 ,p_di_amount => FND_API.G_MISS_NUM
584 ,p_di_order_type_lookup_code => FND_API.G_MISS_CHAR
585 ,p_di_description => FND_API.G_MISS_CHAR
586 ,p_di_purchase_category_id => FND_API.G_MISS_NUM
587 ,p_di_auto_request_material => FND_API.G_MISS_CHAR
588 ,p_di_need_by_date => FND_API.G_MISS_DATE
589 ,p_work_order_line_cost => FND_API.G_MISS_NUM
590 ,p_creation_date => sysdate
591 ,p_created_by => FND_GLOBAL.LOGIN_ID
592 ,p_last_update_date => sysdate
593 ,p_last_updated_by => FND_GLOBAL.LOGIN_ID
594 ,p_last_update_login => FND_GLOBAL.LOGIN_ID
595 ,p_work_order_type => FND_API.G_MISS_NUM
596 ,p_activity_type => FND_API.G_MISS_NUM
597 ,p_activity_source => FND_API.G_MISS_NUM
598 ,p_activity_cause => FND_API.G_MISS_NUM
599 ,p_available_qty => FND_API.G_MISS_NUM
600 ,p_item_comments => FND_API.G_MISS_CHAR
601 ,p_cu_qty => FND_API.G_MISS_NUM
602 ,p_res_sch_flag => FND_API.G_MISS_NUM
603 );
604
605
606 END IF; -- IF l_estimate_parent_rec.PARENT_WO_ID IS NULL THEN
607 debug(' Parent Work order line processing completed.');
608
609 debug(' Updating Estimate header.');
610 -- Update the estimates table with the ESTIMATE_WORK_ORDER_LINE_ID
611 -- generated
612 EAM_CONSTRUCTION_ESTIMATES_PKG.UPDATE_ROW(
613 p_ESTIMATE_ID => p_estimate_id,
614 p_ORGANIZATION_ID => l_estimate_rec.ORGANIZATION_ID,
615 p_ESTIMATE_NUMBER => l_estimate_rec.ESTIMATE_NUMBER,
616 p_ESTIMATE_DESCRIPTION => l_estimate_rec.ESTIMATE_DESCRIPTION,
617 p_GROUPING_OPTION => l_estimate_rec.GROUPING_OPTION,
618 p_PARENT_WO_ID => l_wo_line_id_seq,
619 p_CREATE_PARENT_WO_FLAG => p_parent_wo_line_rec.CREATE_PARENT_FLAG,
620 p_CREATION_DATE => l_creation_date,
621 p_CREATED_BY => l_created_by,
622 p_LAST_UPDATE_DATE => l_last_updated_date,
623 p_LAST_UPDATED_BY => l_last_updated_by,
624 p_LAST_UPDATE_LOGIN => l_last_updated_login,
625 p_ATTRIBUTE_CATEGORY => l_estimate_rec.attribute_category,
626 p_ATTRIBUTE1 => l_estimate_rec.attribute1,
627 p_ATTRIBUTE2 => l_estimate_rec.attribute2,
628 p_ATTRIBUTE3 => l_estimate_rec.attribute3,
629 p_ATTRIBUTE4 => l_estimate_rec.attribute4,
630 p_ATTRIBUTE5 => l_estimate_rec.attribute5,
631 p_ATTRIBUTE6 => l_estimate_rec.attribute6,
632 p_ATTRIBUTE7 => l_estimate_rec.attribute7,
633 p_ATTRIBUTE8 => l_estimate_rec.attribute8,
634 p_ATTRIBUTE9 => l_estimate_rec.attribute9,
635 p_ATTRIBUTE10 => l_estimate_rec.attribute10,
636 p_ATTRIBUTE11 => l_estimate_rec.attribute11,
637 p_ATTRIBUTE12 => l_estimate_rec.attribute12,
638 p_ATTRIBUTE13 => l_estimate_rec.attribute13,
639 p_ATTRIBUTE14 => l_estimate_rec.attribute14,
640 p_ATTRIBUTE15 => l_estimate_rec.attribute15
641 );
642
643 ELSE
644
645 IF nvl(p_parent_wo_line_rec.PARENT_WORK_ORDER_NUMBER,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
646 -- p_parent_wo_line_rec.CREATE_PARENT_FLAG is 'N' the PARENT_WORK_ORDER_NUMBER is
647 -- existing wip entity id
648 -- Update the estimates table with the wip entity id (PARENT_WORK_ORDER_NUMBER)
649 -- of the existing work order
650 debug(' p_parent_wo_line_rec.PARENT_WORK_ORDER_NUMBER - ' || p_parent_wo_line_rec.PARENT_WORK_ORDER_NUMBER);
651 debug(' Updating estimate header with parent wip entity id - ' || l_parent_wo_num);
652
653 l_parent_wo_num := TO_NUMBER(p_parent_wo_line_rec.PARENT_WORK_ORDER_NUMBER);
654
655 EAM_CONSTRUCTION_ESTIMATES_PKG.UPDATE_ROW(
656 p_ESTIMATE_ID => p_estimate_id,
657 p_ORGANIZATION_ID => l_estimate_rec.ORGANIZATION_ID,
658 p_ESTIMATE_NUMBER => l_estimate_rec.ESTIMATE_NUMBER,
659 p_ESTIMATE_DESCRIPTION => l_estimate_rec.ESTIMATE_DESCRIPTION,
660 p_GROUPING_OPTION => l_estimate_rec.GROUPING_OPTION,
661 p_PARENT_WO_ID => l_parent_wo_num,
662 p_CREATE_PARENT_WO_FLAG => p_parent_wo_line_rec.CREATE_PARENT_FLAG,
663 p_CREATION_DATE => l_creation_date,
664 p_CREATED_BY => l_created_by,
665 p_LAST_UPDATE_DATE => l_last_updated_date,
666 p_LAST_UPDATED_BY => l_last_updated_by,
667 p_LAST_UPDATE_LOGIN => l_last_updated_login,
668 p_ATTRIBUTE_CATEGORY => l_estimate_rec.attribute_category,
669 p_ATTRIBUTE1 => l_estimate_rec.attribute1,
670 p_ATTRIBUTE2 => l_estimate_rec.attribute2,
671 p_ATTRIBUTE3 => l_estimate_rec.attribute3,
672 p_ATTRIBUTE4 => l_estimate_rec.attribute4,
673 p_ATTRIBUTE5 => l_estimate_rec.attribute5,
674 p_ATTRIBUTE6 => l_estimate_rec.attribute6,
675 p_ATTRIBUTE7 => l_estimate_rec.attribute7,
676 p_ATTRIBUTE8 => l_estimate_rec.attribute8,
677 p_ATTRIBUTE9 => l_estimate_rec.attribute9,
678 p_ATTRIBUTE10 => l_estimate_rec.attribute10,
679 p_ATTRIBUTE11 => l_estimate_rec.attribute11,
680 p_ATTRIBUTE12 => l_estimate_rec.attribute12,
681 p_ATTRIBUTE13 => l_estimate_rec.attribute13,
682 p_ATTRIBUTE14 => l_estimate_rec.attribute14,
683 p_ATTRIBUTE15 => l_estimate_rec.attribute15
684 );
685
686 -- If the create work order flag has been switched from Y to N
687 -- then delete the work order line created when the flag was Y
688 IF NVL(l_estimate_parent_rec.CREATE_PARENT_WO_FLAG,'N') = 'Y' AND
689 NVL(l_estimate_parent_rec.PARENT_WO_ID, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
690
691 debug(' Create parent work order flag flipped. Deleting existing work order line');
692 EAM_CE_WORK_ORDER_LINES_PKG.DELETE_ROW (
693 p_work_order_line_id => l_estimate_parent_rec.PARENT_WO_ID
694 );
695 END IF; -- NVL(l_estimate_parent_rec.CREATE_PARENT_WO_FLAG,'N') = 'Y'
696 ELSE
697 -- No parent record entered
698 -- make work order number in the estimate table as null
699 debug(' No parent work order entered. Making work order number NULL in Estimate table.');
700 EAM_CONSTRUCTION_ESTIMATES_PKG.UPDATE_ROW(
701 p_ESTIMATE_ID => p_estimate_id,
702 p_ORGANIZATION_ID => l_estimate_rec.ORGANIZATION_ID,
703 p_ESTIMATE_NUMBER => l_estimate_rec.ESTIMATE_NUMBER,
704 p_ESTIMATE_DESCRIPTION => l_estimate_rec.ESTIMATE_DESCRIPTION,
705 p_GROUPING_OPTION => l_estimate_rec.GROUPING_OPTION,
706 p_PARENT_WO_ID => NULL,
707 p_CREATE_PARENT_WO_FLAG => p_parent_wo_line_rec.CREATE_PARENT_FLAG,
708 p_CREATION_DATE => l_creation_date,
709 p_CREATED_BY => l_created_by,
710 p_LAST_UPDATE_DATE => l_last_updated_date,
711 p_LAST_UPDATED_BY => l_last_updated_by,
712 p_LAST_UPDATE_LOGIN => l_last_updated_login,
713 p_ATTRIBUTE_CATEGORY => l_estimate_rec.attribute_category,
714 p_ATTRIBUTE1 => l_estimate_rec.attribute1,
715 p_ATTRIBUTE2 => l_estimate_rec.attribute2,
716 p_ATTRIBUTE3 => l_estimate_rec.attribute3,
717 p_ATTRIBUTE4 => l_estimate_rec.attribute4,
718 p_ATTRIBUTE5 => l_estimate_rec.attribute5,
719 p_ATTRIBUTE6 => l_estimate_rec.attribute6,
720 p_ATTRIBUTE7 => l_estimate_rec.attribute7,
721 p_ATTRIBUTE8 => l_estimate_rec.attribute8,
722 p_ATTRIBUTE9 => l_estimate_rec.attribute9,
723 p_ATTRIBUTE10 => l_estimate_rec.attribute10,
724 p_ATTRIBUTE11 => l_estimate_rec.attribute11,
725 p_ATTRIBUTE12 => l_estimate_rec.attribute12,
726 p_ATTRIBUTE13 => l_estimate_rec.attribute13,
727 p_ATTRIBUTE14 => l_estimate_rec.attribute14,
728 p_ATTRIBUTE15 => l_estimate_rec.attribute15
729 );
730
731 IF NVL(l_estimate_parent_rec.CREATE_PARENT_WO_FLAG,'N') = 'Y' AND
732 NVL(l_estimate_parent_rec.PARENT_WO_ID, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
733 EAM_CE_WORK_ORDER_LINES_PKG.DELETE_ROW (
734 p_work_order_line_id => l_estimate_parent_rec.PARENT_WO_ID
735 );
736 END IF;
737 END IF;
738 END IF; -- p_parent_wo_line_rec.CREATE_PARENT_FLAG = 'Y'
739 IF NVL(p_commit,'F') = 'T' THEN
740 debug('Committing');
741 COMMIT;
742 END IF;
743 debug('End API - INSERT_PARENT_WO_LINE');
744 x_return_status := 'S';
745 EXCEPTION
746 WHEN FND_API.G_EXC_ERROR THEN
747 ROLLBACK TO INSERT_PARENT_WO_LINE;
748 debug('FND_API.G_EXC_ERROR Error in API - INSERT_PARENT_WO_LINE');
749 x_return_status := FND_API.G_RET_STS_ERROR;
750 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
751 p_data => x_msg_data);
752 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
753 ROLLBACK TO INSERT_PARENT_WO_LINE;
754 debug('FND_API.G_EXC_UNEXPECTED_ERROR Error in API - INSERT_PARENT_WO_LINE');
755 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
756 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
757 p_data => x_msg_data);
758 WHEN OTHERS THEN
759 ROLLBACK TO INSERT_PARENT_WO_LINE;
760 debug('FND_API.G_EXC_UNEXPECTED_ERROR Error in API - INSERT_PARENT_WO_LINE');
761 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
762 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
763 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, 'INSERT_PARENT_WO_LINE');
764 END IF;
765 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
766 p_data => x_msg_data);
767 END INSERT_PARENT_WO_LINE;
768
769 PROCEDURE EXPLODE_STD_OP(
770 p_std_op_id IN NUMBER
771 , p_op_seq IN NUMBER
772 , p_op_seq_desc IN VARCHAR2
773 , p_org_id IN NUMBER
774 , p_estimate_id IN NUMBER
775 , x_return_status OUT NOCOPY VARCHAR2
776 , x_msg_count OUT NOCOPY NUMBER
777 , x_msg_data OUT NOCOPY VARCHAR2
778 )
779 IS
780
781 CURSOR STD_OP_RES_CUR IS
782 SELECT
783 p_op_seq OPERATION_SEQ_NUM,
784 p_op_seq_desc OPERATION_DESC,
785 BSOR.RESOURCE_SEQ_NUM,
786 BSO.ORGANIZATION_ID,
787 BSOR.LAST_UPDATE_DATE,
788 BSOR.LAST_UPDATED_BY,
789 BSOR.CREATION_DATE,
790 BSOR.CREATED_BY,
791 BSOR.LAST_UPDATE_LOGIN,
792 BSOR.REQUEST_ID,
793 BSOR.PROGRAM_APPLICATION_ID,
794 BSOR.PROGRAM_ID,
795 BSOR.PROGRAM_UPDATE_DATE,
796 BSOR.RESOURCE_ID,
797 BR.UNIT_OF_MEASURE,
798 BSOR.BASIS_TYPE,
799 BSOR.USAGE_RATE_OR_AMOUNT,
800 BSOR.ACTIVITY_ID,
801 BSOR.SCHEDULE_FLAG,
802 BSOR.ASSIGNED_UNITS,
803 DECODE(BSOR.AUTOCHARGE_TYPE,1,2,4,3,2,2,3,3,2) AUTOCHARGE_TYPE,
804 BSOR.STANDARD_RATE_FLAG,
805 0 APPLIED_RESOURCE_UNITS,
806 0 APPLIED_RESOURCE_VALUE,
807 SYSDATE START_DATE,
808 BSO.DEPARTMENT_ID,
809 DECODE(BSOR.SCHEDULE_FLAG,2,NULL,BSOR.RESOURCE_SEQ_NUM) ,
810 BSOR.SUBSTITUTE_GROUP_NUM
811 FROM BOM_STANDARD_OPERATIONS BSO,
812 BOM_STD_OP_RESOURCES BSOR,
813 BOM_RESOURCES BR
814 WHERE BSO.STANDARD_OPERATION_ID = BSOR.STANDARD_OPERATION_ID
815 AND BR.RESOURCE_ID = BSOR.RESOURCE_ID
816 AND BSO.STANDARD_OPERATION_ID = p_std_op_id
817 AND BSO.ORGANIZATION_ID = p_org_id;
818
819 l_cost_type_id NUMBER := 0;
820 l_cost_group_id NUMBER := 0;
821 l_primary_cost_method NUMBER := 0;
822 l_ext_precision NUMBER := 0 ;
823 l_unit_cost NUMBER := 0;
824
825 BEGIN
826 --SAVEPOINT EXPLODE_STD_OP;
827 -- Get the Cost Type ID
828 debug('Inside API - EXPLODE_STD_OP');
829 debug(' p_std_op_id - ' || p_std_op_id);
830 debug(' p_op_seq - ' || p_op_seq);
831 debug(' p_op_seq_desc - ' || p_op_seq_desc);
832 debug(' p_org_id - ' || p_org_id);
833 BEGIN
834 SELECT NVL(MP.DEFAULT_COST_GROUP_ID,-1) ,
835 DECODE (MP.PRIMARY_COST_METHOD, 1, MP.PRIMARY_COST_METHOD, NVL(MP.AVG_RATES_COST_TYPE_ID,-1)),
836 MP.PRIMARY_COST_METHOD
837 INTO l_cost_group_id, l_cost_type_id,
838 l_primary_cost_method
839 FROM MTL_PARAMETERS MP
840 WHERE ORGANIZATION_ID = p_org_id;
841
842 SELECT EXTENDED_PRECISION
843 INTO l_ext_precision
844 FROM FND_CURRENCIES FC,
845 GL_SETS_OF_BOOKS SOB ,
846 HR_ORGANIZATION_INFORMATION HROI
847 WHERE HROI.ORGANIZATION_ID = p_org_id
848 AND HROI.ORG_INFORMATION1 = TO_CHAR(SOB.SET_OF_BOOKS_ID)
849 AND HROI.ORG_INFORMATION_CONTEXT = 'Accounting Information'
850 AND SOB.CURRENCY_CODE = FC.CURRENCY_CODE
851 AND FC.ENABLED_FLAG = 'Y';
852
853 EXCEPTION
854 WHEN OTHERS THEN
855 l_cost_type_id := 0 ;
856 l_cost_group_id := 0;
857 l_primary_cost_method := 0;
858 l_ext_precision := 5;
859 END;
860
861 debug(' l_cost_type_id - ' || l_cost_type_id );
862 debug(' l_cost_group_id - ' || l_cost_group_id );
863 debug(' l_primary_cost_method - ' || l_primary_cost_method );
864 debug(' l_ext_precision - ' || l_ext_precision );
865
866 FOR std_op_rec IN STD_OP_RES_CUR LOOP
867
868 IF NVL(std_op_rec.RESOURCE_ID, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
869 -- Calculate Cost
870 debug(' Getting unit resource cost for std_op_rec.RESOURCE_ID - ' || std_op_rec.RESOURCE_ID );
871 GET_UNIT_RESOURCE_COST(
872 p_resource_id => std_op_rec.RESOURCE_ID
873 , p_cost_type_id => l_cost_type_id
874 , p_ext_precision => l_ext_precision
875 , p_org_id => p_org_id
876 , x_unit_resource_value => l_unit_cost
877 , x_return_status => x_return_status
878 );
879 debug(' Unit resource cost - ' || l_unit_cost);
880
881 IF nvl(x_return_status,'S') <> 'S' THEN
882 -- Log error, but continue processing
883 x_return_status := 'E';
884 RAISE FND_API.G_EXC_ERROR;
885 END IF; -- nvl(l_return_status,'S') <> 'S'
886 END IF;
887
888 -- Call EAM_CE_WORK_ORDER_LINES_PKG.INSERT_ROW
889 -- to insert wo line row
890
891 EAM_CE_WORK_ORDER_LINES_PKG.INSERT_ROW(
892 p_estimate_work_order_line_id => NULL
893 ,p_estimate_work_order_id => FND_API.G_MISS_NUM
894 ,p_src_cu_id => NULL
895 ,p_src_activity_id => NULL
896 ,p_src_activity_qty => NULL
897 ,p_src_op_seq_num => NULL
898 ,p_src_acct_class_code => NULL
899 ,p_src_diff_id => NULL
900 ,p_diff_qty => NULL
901 ,p_estimate_id => p_estimate_id
902 ,p_organization_id => p_org_id
903 ,p_work_order_seq_num => NULL
904 ,p_work_order_number => NULL
905 ,p_work_order_description => NULL
906 ,p_ref_wip_entity_id => NULL
907 ,p_primary_item_id => NULL
908 ,p_status_type => NULL
909 ,p_acct_class_code => NULL
910 ,p_scheduled_start_date => std_op_rec.START_DATE
911 ,p_scheduled_completion_date => NULL
912 ,p_project_id => NULL
913 ,p_task_id => NULL
914 ,p_maintenance_object_id => NULL
915 ,p_maintenance_object_type => NULL
916 ,p_maintenance_object_source => NULL
917 ,p_owning_department_id => std_op_rec.DEPARTMENT_ID
918 ,p_user_defined_status_id => NULL
919 ,p_op_seq_num => std_op_rec.OPERATION_SEQ_NUM
920 ,p_op_description => std_op_rec.OPERATION_DESC
921 ,p_standard_operation_id => p_std_op_id
922 ,p_op_department_id => std_op_rec.DEPARTMENT_ID
923 ,p_op_long_description => NULL
924 ,p_res_seq_num => std_op_rec.RESOURCE_SEQ_NUM
925 ,p_res_id => std_op_rec.RESOURCE_ID
926 ,p_res_uom => std_op_rec.UNIT_OF_MEASURE
927 ,p_res_basis_type => std_op_rec.BASIS_TYPE
928 ,p_res_usage_rate_or_amount => std_op_rec.USAGE_RATE_OR_AMOUNT
929 ,p_res_required_units => std_op_rec.USAGE_RATE_OR_AMOUNT
930 ,p_res_assigned_units => std_op_rec.ASSIGNED_UNITS
931 ,p_item_type => NULL
932 ,p_required_quantity => std_op_rec.USAGE_RATE_OR_AMOUNT
933 ,p_unit_price => l_unit_cost
934 ,p_uom => NULL
935 ,p_basis_type => NULL
936 ,p_suggested_vendor_name => NULL
937 ,p_suggested_vendor_id => NULL
938 ,p_suggested_vendor_site => NULL
939 ,p_suggested_vendor_site_id => NULL
940 ,p_mat_inventory_item_id => NULL
941 ,p_mat_component_seq_num => NULL
942 ,p_mat_supply_subinventory => NULL
943 ,p_mat_supply_locator_id => NULL
944 ,p_di_amount => NULL
945 ,p_di_order_type_lookup_code => NULL
946 ,p_di_description => NULL
947 ,p_di_purchase_category_id => NULL
948 ,p_di_auto_request_material => NULL
949 ,p_di_need_by_date => NULL
950 ,p_work_order_line_cost => l_unit_cost
951 ,p_creation_date => sysdate
952 ,p_created_by => FND_GLOBAL.LOGIN_ID
953 ,p_last_update_date => sysdate
954 ,p_last_updated_by => FND_GLOBAL.LOGIN_ID
955 ,p_last_update_login => FND_GLOBAL.LOGIN_ID
956 ,p_work_order_type => NULL
957 ,p_activity_type => NULL
958 ,p_activity_source => NULL
959 ,p_activity_cause => NULL
960 ,p_available_qty => NULL
961 ,p_item_comments => NULL
962 ,p_cu_qty => NULL
963 ,p_res_sch_flag => std_op_rec.SCHEDULE_FLAG
964 );
965
966 END LOOP; -- FOR std_op_rec IN STD_OP_RES_CUR LOOP
967 debug('End of API - EXPLODE_STD_OP');
968 x_return_status := 'S';
969 EXCEPTION
970 WHEN FND_API.G_EXC_ERROR THEN
971 --ROLLBACK TO EXPLODE_STD_OP;
972 x_return_status := FND_API.G_RET_STS_ERROR;
973 debug('FND_API.G_EXC_ERROR Error in API - EXPLODE_STD_OP');
974 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
975 p_data => x_msg_data);
976 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
977 -- ROLLBACK TO EXPLODE_STD_OP;
978 debug('FND_API.G_EXC_UNEXPECTED_ERROR Error in API - EXPLODE_STD_OP');
979 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
980 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
981 p_data => x_msg_data);
982 WHEN OTHERS THEN
983 -- ROLLBACK TO EXPLODE_STD_OP;
984 debug('OTHERS Error in API - EXPLODE_STD_OP');
985 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
986 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
987 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, 'EXPLODE_STD_OP');
988 END IF;
989 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
990 p_data => x_msg_data);
991 END EXPLODE_STD_OP;
992
993
994 PROCEDURE INSERT_ALL_WO_LINES(
995 p_api_version IN NUMBER := 1.0
996 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
997 , p_commit IN VARCHAR2
998 , p_estimate_id IN NUMBER
999 , p_eam_ce_wo_lines_tbl IN EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL
1000 , x_return_status OUT NOCOPY VARCHAR2
1001 , x_msg_count OUT NOCOPY NUMBER
1002 , x_msg_data OUT NOCOPY VARCHAR2
1003 )
1004 IS
1005 l_ce_tab_index NUMBER := 0;
1006 l_cost_type_id NUMBER := 0;
1007 l_cost_group_id NUMBER := 0;
1008 l_primary_cost_method NUMBER := 0;
1009 l_ext_precision NUMBER := 0 ;
1010 l_return_status VARCHAR2(1);
1011 l_org_id NUMBER := 0;
1012 l_unit_cost NUMBER := 0;
1013
1014 CURSOR GET_SYSTEM_STATUS (p_user_defined_status_id IN NUMBER) IS
1015 SELECT
1016 SYSTEM_STATUS
1017 FROM EAM_WO_STATUSES_V
1018 WHERE STATUS_ID = p_user_defined_status_id
1019 AND ENABLED_FLAG = 'Y';
1020
1021 l_system_status_rec GET_SYSTEM_STATUS%ROWTYPE;
1022
1023 BEGIN
1024
1025 SAVEPOINT INSERT_ALL_WO_LINES;
1026 debug('Inside API - INSERT_ALL_WO_LINES');
1027 debug(' p_eam_ce_wo_lines_tbl.COUNT - ' || p_eam_ce_wo_lines_tbl.COUNT);
1028 debug(' p_estimate_id - ' || p_estimate_id);
1029 debug(' p_commit - ' || p_commit);
1030
1031 -- Get the Cost Type ID
1032 BEGIN
1033 IF p_eam_ce_wo_lines_tbl.COUNT > 0 THEN
1034 -- Get the org id from the first record
1035 l_org_id := p_eam_ce_wo_lines_tbl(1).ORGANIZATION_ID;
1036
1037 SELECT NVL(MP.DEFAULT_COST_GROUP_ID,-1) ,
1038 DECODE (MP.PRIMARY_COST_METHOD, 1, MP.PRIMARY_COST_METHOD, NVL(MP.AVG_RATES_COST_TYPE_ID,-1)),
1039 MP.PRIMARY_COST_METHOD
1040 INTO l_cost_group_id, l_cost_type_id,
1041 l_primary_cost_method
1042 FROM MTL_PARAMETERS MP
1043 WHERE ORGANIZATION_ID = l_org_id;
1044
1045 SELECT EXTENDED_PRECISION
1046 INTO l_ext_precision
1047 FROM FND_CURRENCIES FC,
1048 GL_SETS_OF_BOOKS SOB ,
1049 HR_ORGANIZATION_INFORMATION HROI
1050 WHERE HROI.ORGANIZATION_ID = l_org_id
1051 AND HROI.ORG_INFORMATION1 = TO_CHAR(SOB.SET_OF_BOOKS_ID)
1052 AND HROI.ORG_INFORMATION_CONTEXT = 'Accounting Information'
1053 AND SOB.CURRENCY_CODE = FC.CURRENCY_CODE
1054 AND FC.ENABLED_FLAG = 'Y';
1055 ELSE
1056 l_cost_type_id := 0 ;
1057 l_cost_group_id := 0;
1058 l_primary_cost_method := 0;
1059 l_ext_precision := 5;
1060 END IF;
1061
1062 EXCEPTION
1063 WHEN OTHERS THEN
1064 l_cost_type_id := 0 ;
1065 l_cost_group_id := 0;
1066 l_primary_cost_method := 0;
1067 l_ext_precision := 5;
1068 END;
1069 debug(' l_cost_type_id - ' || l_cost_type_id);
1070 debug(' l_cost_group_id - ' || l_cost_group_id);
1071 debug(' l_primary_cost_method - ' || l_primary_cost_method);
1072 debug(' l_ext_precision - ' || l_ext_precision);
1073
1074 IF p_eam_ce_wo_lines_tbl.COUNT > 0 THEN
1075
1076
1077 /*
1078 -- When new set of work order lines are being estimated
1079 -- The old WO lines needs to be deleted
1080 -- None of these operations are committed until saved
1081 --
1082 EAM_CE_WORK_ORDER_LINES_PKG.DELETE_ALL_WITH_ESTIMATE_ID(
1083 p_estimate_id => p_estimate_id
1084 );
1085 */
1086 -- If the p_estimate_work_order_line_id exists then update the
1087 -- ce work order lines, else insert new row
1088
1089 --EAM_CONSTRUCTION_MESSAGE_PVT.DUMP_CE_WO_TBL(
1090 --p_eam_ce_wo_lines_tbl => p_eam_ce_wo_lines_tbl);
1091 debug(' Beginning insert/update in to EAM_CE_WORK_ORDER_LINES');
1092 FOR l_ce_tab_index IN p_eam_ce_wo_lines_tbl.FIRST .. p_eam_ce_wo_lines_tbl.LAST
1093 LOOP
1094
1095 -- Assigning unit cost before recalculating
1096 l_unit_cost := p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_LINE_COST;
1097
1098 IF p_eam_ce_wo_lines_tbl(l_ce_tab_index).ESTIMATE_WORK_ORDER_LINE_ID IS NOT NULL THEN
1099
1100 -- debug(' Update Work Order line - ' || p_eam_ce_wo_lines_tbl(l_ce_tab_index).ESTIMATE_WORK_ORDER_LINE_ID);
1101 -- If the resource is modified the cost needs to be calcuated again
1102 IF NVL(p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_ID, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
1103 -- Calculate Cost
1104 GET_UNIT_RESOURCE_COST(
1105 p_resource_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_ID
1106 , p_cost_type_id => l_cost_type_id
1107 , p_ext_precision => l_ext_precision
1108 , p_org_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ORGANIZATION_ID
1109 , x_unit_resource_value => l_unit_cost
1110 , x_return_status => l_return_status
1111 );
1112
1113 IF nvl(l_return_status,'S') <> 'S' THEN
1114 -- Log error, but continue processing
1115 x_return_status := 'E';
1116 RAISE FND_API.G_EXC_ERROR;
1117 END IF; -- nvl(l_return_status,'S') <> 'S'
1118 END IF;
1119
1120 -- Get the system status from user defined status id
1121 BEGIN
1122 OPEN GET_SYSTEM_STATUS(p_eam_ce_wo_lines_tbl(l_ce_tab_index).USER_DEFINED_STATUS_ID);
1123 FETCH GET_SYSTEM_STATUS INTO l_system_status_rec;
1124 CLOSE GET_SYSTEM_STATUS;
1125 EXCEPTION
1126 WHEN OTHERS THEN
1127 l_system_status_rec.SYSTEM_STATUS := p_eam_ce_wo_lines_tbl(l_ce_tab_index).USER_DEFINED_STATUS_ID;
1128 END;
1129
1130 -- Call UPDATE_ROW TO update the changes
1131 EAM_CE_WORK_ORDER_LINES_PKG.UPDATE_ROW(
1132 p_estimate_work_order_line_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ESTIMATE_WORK_ORDER_LINE_ID
1133 ,p_estimate_work_order_id => FND_API.G_MISS_NUM
1134 ,p_src_cu_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_CU_ID
1135 ,p_src_activity_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_ACTIVITY_ID
1136 ,p_src_activity_qty => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_ACTIVITY_QTY
1137 ,p_src_op_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_OP_SEQ_NUM
1138 ,p_src_acct_class_code => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_ACCT_CLASS_CODE
1139 ,p_src_diff_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DIFFICULTY_ID
1140 ,p_diff_qty => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DIFFICULTY_QTY
1141 ,p_estimate_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ESTIMATE_ID
1142 ,p_organization_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ORGANIZATION_ID
1143 ,p_work_order_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_SEQ_NUM
1144 ,p_work_order_number => p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_NUMBER
1145 ,p_work_order_description => p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_DESCRIPTION
1146 ,p_ref_wip_entity_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).REF_WIP_ENTITY_ID
1147 ,p_primary_item_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).PRIMARY_ITEM_ID
1148 ,p_status_type => l_system_status_rec.SYSTEM_STATUS
1149 ,p_acct_class_code => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ACCT_CLASS_CODE
1150 ,p_scheduled_start_date => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SCHEDULED_START_DATE
1151 ,p_scheduled_completion_date => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SCHEDULED_COMPLETION_DATE
1152 ,p_project_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).PROJECT_ID
1153 ,p_task_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).TASK_ID
1154 ,p_maintenance_object_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAINTENANCE_OBJECT_ID
1155 ,p_maintenance_object_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAINTENANCE_OBJECT_TYPE
1156 ,p_maintenance_object_source => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAINTENANCE_OBJECT_SOURCE
1157 ,p_owning_department_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OWNING_DEPARTMENT_ID
1158 ,p_user_defined_status_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).USER_DEFINED_STATUS_ID
1159 ,p_op_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OP_SEQ_NUM
1160 ,p_op_description => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OP_DESCRIPTION
1161 ,p_standard_operation_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).STANDARD_OPERATION_ID
1162 ,p_op_department_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OP_DEPARTMENT_ID
1163 ,p_op_long_description => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OP_LONG_DESCRIPTION
1164 ,p_res_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_SEQ_NUM
1165 ,p_res_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_ID
1166 ,p_res_uom => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_UOM
1167 ,p_res_basis_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_BASIS_TYPE
1168 ,p_res_usage_rate_or_amount => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_USAGE_RATE_OR_AMOUNT
1169 ,p_res_required_units => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_REQUIRED_UNITS
1170 ,p_res_assigned_units => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_ASSIGNED_UNITS
1171 ,p_item_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ITEM_TYPE
1172 ,p_required_quantity => p_eam_ce_wo_lines_tbl(l_ce_tab_index).REQUIRED_QUANTITY
1173 ,p_unit_price => p_eam_ce_wo_lines_tbl(l_ce_tab_index).UNIT_PRICE
1174 ,p_uom => p_eam_ce_wo_lines_tbl(l_ce_tab_index).UOM
1175 ,p_basis_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).BASIS_TYPE
1176 ,p_suggested_vendor_name => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SUGGESTED_VENDOR_NAME
1177 ,p_suggested_vendor_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SUGGESTED_VENDOR_ID
1178 ,p_suggested_vendor_site => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SUGGESTED_VENDOR_SITE
1179 ,p_suggested_vendor_site_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SUGGESTED_VENDOR_SITE_ID
1180 ,p_mat_inventory_item_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAT_INVENTORY_ITEM_ID
1181 ,p_mat_component_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAT_COMPONENT_SEQ_NUM
1182 ,p_mat_supply_subinventory => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAT_SUPPLY_SUBINVENTORY
1183 ,p_mat_supply_locator_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAT_SUPPLY_LOCATOR_ID
1184 ,p_di_amount => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_AMOUNT
1185 ,p_di_order_type_lookup_code => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_ORDER_TYPE_LOOKUP_CODE
1186 ,p_di_description => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_DESCRIPTION
1187 ,p_di_purchase_category_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_PURCHASE_CATEGORY_ID
1188 ,p_di_auto_request_material => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_AUTO_REQUEST_MATERIAL
1189 ,p_di_need_by_date => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_NEED_BY_DATE
1190 ,p_work_order_line_cost => l_unit_cost
1191 ,p_creation_date => sysdate
1192 ,p_created_by => FND_GLOBAL.LOGIN_ID
1193 ,p_last_update_date => sysdate
1194 ,p_last_updated_by => FND_GLOBAL.LOGIN_ID
1195 ,p_last_update_login => FND_GLOBAL.LOGIN_ID
1196 ,p_work_order_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_TYPE
1197 ,p_activity_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ACTIVITY_TYPE
1198 ,p_activity_source => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ACTIVITY_SOURCE
1199 ,p_activity_cause => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ACTIVITY_CAUSE
1200 ,p_available_qty => p_eam_ce_wo_lines_tbl(l_ce_tab_index).AVAILABLE_QUANTITY
1201 ,p_item_comments => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ITEM_COMMENTS
1202 ,p_cu_qty => p_eam_ce_wo_lines_tbl(l_ce_tab_index).CU_QTY
1203 ,p_res_sch_flag => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_SCHEDULED_FLAG
1204 );
1205
1206 ELSE
1207
1208 --debug(' p_eam_ce_wo_lines_tbl(l_ce_tab_index).ESTIMATE_WORK_ORDER_LINE_ID NOT NULL, so Insert.');
1209 -- Assigning unit cost before recalculating
1210 l_unit_cost := p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_LINE_COST;
1211
1212 -- If the resource is modified the cost needs to be calcuated again
1213 IF NVL(p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_ID, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
1214 -- Calculate Cost
1215 GET_UNIT_RESOURCE_COST(
1216 p_resource_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_ID
1217 , p_cost_type_id => l_cost_type_id
1218 , p_ext_precision => l_ext_precision
1219 , p_org_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ORGANIZATION_ID
1220 , x_unit_resource_value => l_unit_cost
1221 , x_return_status => l_return_status
1222 );
1223
1224 IF nvl(l_return_status,'S') <> 'S' THEN
1225 -- Log error, but continue processing
1226 x_return_status := 'E';
1227 RAISE FND_API.G_EXC_ERROR;
1228 END IF; -- nvl(l_return_status,'S') <> 'S'
1229 END IF;
1230
1231 -- Get the system status from user defined status id
1232 BEGIN
1233 OPEN GET_SYSTEM_STATUS(p_eam_ce_wo_lines_tbl(l_ce_tab_index).USER_DEFINED_STATUS_ID);
1234 FETCH GET_SYSTEM_STATUS INTO l_system_status_rec;
1235 CLOSE GET_SYSTEM_STATUS;
1236 EXCEPTION
1237 WHEN OTHERS THEN
1238 l_system_status_rec.SYSTEM_STATUS := p_eam_ce_wo_lines_tbl(l_ce_tab_index).USER_DEFINED_STATUS_ID;
1239 END;
1240
1241 -- Call EAM_CE_WORK_ORDER_LINES_PKG.INSERT_ROW
1242 -- to insert wo line row
1243
1244 EAM_CE_WORK_ORDER_LINES_PKG.INSERT_ROW(
1245 p_estimate_work_order_line_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ESTIMATE_WORK_ORDER_LINE_ID
1246 ,p_estimate_work_order_id => FND_API.G_MISS_NUM
1247 ,p_src_cu_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_CU_ID
1248 ,p_src_activity_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_ACTIVITY_ID
1249 ,p_src_activity_qty => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_ACTIVITY_QTY
1250 ,p_src_op_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_OP_SEQ_NUM
1251 ,p_src_acct_class_code => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SRC_ACCT_CLASS_CODE
1252 ,p_src_diff_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DIFFICULTY_ID
1253 ,p_diff_qty => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DIFFICULTY_QTY
1254 ,p_estimate_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ESTIMATE_ID
1255 ,p_organization_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ORGANIZATION_ID
1256 ,p_work_order_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_SEQ_NUM
1257 ,p_work_order_number => p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_NUMBER
1258 ,p_work_order_description => p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_DESCRIPTION
1259 ,p_ref_wip_entity_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).REF_WIP_ENTITY_ID
1260 ,p_primary_item_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).PRIMARY_ITEM_ID
1261 ,p_status_type => l_system_status_rec.SYSTEM_STATUS
1262 ,p_acct_class_code => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ACCT_CLASS_CODE
1263 ,p_scheduled_start_date => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SCHEDULED_START_DATE
1264 ,p_scheduled_completion_date => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SCHEDULED_COMPLETION_DATE
1265 ,p_project_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).PROJECT_ID
1266 ,p_task_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).TASK_ID
1267 ,p_maintenance_object_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAINTENANCE_OBJECT_ID
1268 ,p_maintenance_object_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAINTENANCE_OBJECT_TYPE
1269 ,p_maintenance_object_source => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAINTENANCE_OBJECT_SOURCE
1270 ,p_owning_department_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OWNING_DEPARTMENT_ID
1271 ,p_user_defined_status_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).USER_DEFINED_STATUS_ID
1272 ,p_op_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OP_SEQ_NUM
1273 ,p_op_description => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OP_DESCRIPTION
1274 ,p_standard_operation_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).STANDARD_OPERATION_ID
1275 ,p_op_department_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OP_DEPARTMENT_ID
1276 ,p_op_long_description => p_eam_ce_wo_lines_tbl(l_ce_tab_index).OP_LONG_DESCRIPTION
1277 ,p_res_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_SEQ_NUM
1278 ,p_res_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_ID
1279 ,p_res_uom => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_UOM
1280 ,p_res_basis_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_BASIS_TYPE
1281 ,p_res_usage_rate_or_amount => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_USAGE_RATE_OR_AMOUNT
1282 ,p_res_required_units => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_REQUIRED_UNITS
1283 ,p_res_assigned_units => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_ASSIGNED_UNITS
1284 ,p_item_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ITEM_TYPE
1285 ,p_required_quantity => p_eam_ce_wo_lines_tbl(l_ce_tab_index).REQUIRED_QUANTITY
1286 ,p_unit_price => p_eam_ce_wo_lines_tbl(l_ce_tab_index).UNIT_PRICE
1287 ,p_uom => p_eam_ce_wo_lines_tbl(l_ce_tab_index).UOM
1288 ,p_basis_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).BASIS_TYPE
1289 ,p_suggested_vendor_name => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SUGGESTED_VENDOR_NAME
1290 ,p_suggested_vendor_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SUGGESTED_VENDOR_ID
1291 ,p_suggested_vendor_site => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SUGGESTED_VENDOR_SITE
1292 ,p_suggested_vendor_site_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).SUGGESTED_VENDOR_SITE_ID
1293 ,p_mat_inventory_item_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAT_INVENTORY_ITEM_ID
1294 ,p_mat_component_seq_num => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAT_COMPONENT_SEQ_NUM
1295 ,p_mat_supply_subinventory => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAT_SUPPLY_SUBINVENTORY
1296 ,p_mat_supply_locator_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).MAT_SUPPLY_LOCATOR_ID
1297 ,p_di_amount => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_AMOUNT
1298 ,p_di_order_type_lookup_code => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_ORDER_TYPE_LOOKUP_CODE
1299 ,p_di_description => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_DESCRIPTION
1300 ,p_di_purchase_category_id => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_PURCHASE_CATEGORY_ID
1301 ,p_di_auto_request_material => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_AUTO_REQUEST_MATERIAL
1302 ,p_di_need_by_date => p_eam_ce_wo_lines_tbl(l_ce_tab_index).DI_NEED_BY_DATE
1303 ,p_work_order_line_cost => l_unit_cost
1304 ,p_creation_date => sysdate
1305 ,p_created_by => FND_GLOBAL.LOGIN_ID
1306 ,p_last_update_date => sysdate
1307 ,p_last_updated_by => FND_GLOBAL.LOGIN_ID
1308 ,p_last_update_login => FND_GLOBAL.LOGIN_ID
1309 ,p_work_order_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).WORK_ORDER_TYPE
1310 ,p_activity_type => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ACTIVITY_TYPE
1311 ,p_activity_source => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ACTIVITY_SOURCE
1312 ,p_activity_cause => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ACTIVITY_CAUSE
1313 ,p_available_qty => p_eam_ce_wo_lines_tbl(l_ce_tab_index).AVAILABLE_QUANTITY
1314 ,p_item_comments => p_eam_ce_wo_lines_tbl(l_ce_tab_index).ITEM_COMMENTS
1315 ,p_cu_qty => p_eam_ce_wo_lines_tbl(l_ce_tab_index).CU_QTY
1316 ,p_res_sch_flag => p_eam_ce_wo_lines_tbl(l_ce_tab_index).RES_SCHEDULED_FLAG
1317 );
1318 END IF; -- p_eam_ce_wo_lines_tbl(l_ce_tab_index).ESTIMATE_WORK_ORDER_LINE_ID IS NOT NULL
1319 END LOOP; -- l_ce_tab_index IN p_eam_ce_wo_lines_tbl.FIRST .. p_eam_ce_wo_lines_tbl.LAST
1320 END IF; -- p_eam_ce_wo_lines_tbl.COUNT > 0
1321 debug(' End of insert/update in to EAM_CE_WORK_ORDER_LINES. Total Inserted - ' || p_eam_ce_wo_lines_tbl.count);
1322
1323 IF NVL(p_commit,'F') = 'T' THEN
1324 debug('Committing');
1325 COMMIT;
1326 END IF;
1327 debug('End of API - INSERT_ALL_WO_LINES');
1328 x_return_status := 'S';
1329 EXCEPTION
1330 WHEN FND_API.G_EXC_ERROR THEN
1331 ROLLBACK TO INSERT_ALL_WO_LINES;
1332 debug('FND_API.G_EXC_ERROR Error in API INSERT_ALL_WO_LINES');
1333 x_return_status := FND_API.G_RET_STS_ERROR;
1334 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
1335 p_data => x_msg_data);
1336 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1337 ROLLBACK TO INSERT_ALL_WO_LINES;
1338 debug('FND_API.G_EXC_UNEXPECTED_ERROR Error in API INSERT_ALL_WO_LINES');
1339 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1340 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
1341 p_data => x_msg_data);
1342 WHEN OTHERS THEN
1343 ROLLBACK TO INSERT_ALL_WO_LINES;
1344 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1345 debug('OTHERS Error in API INSERT_ALL_WO_LINES');
1346 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1347 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, 'INSERT_ALL_WO_LINES');
1348 END IF;
1349 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
1350 p_data => x_msg_data);
1351 END INSERT_ALL_WO_LINES;
1352
1353 PROCEDURE EXPLODE_CE_ACTIVITIES(
1354 p_estimate_id IN NUMBER
1355 , p_eam_ce_wo_lines_tbl IN EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL
1356 , x_eam_ce_wo_lines_tbl OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL
1357 , x_ce_msg_tbl OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CE_MESSAGE_TBL
1358 , x_return_status OUT NOCOPY VARCHAR2
1359 )
1360 IS
1361 l_eam_wo_rec EAM_PROCESS_WO_PUB.eam_wo_rec_type;
1362 l_eam_op_tbl EAM_PROCESS_WO_PUB.eam_op_tbl_type;
1363 l_eam_op_network_tbl EAM_PROCESS_WO_PUB.eam_op_network_tbl_type;
1364 l_eam_res_tbl EAM_PROCESS_WO_PUB.eam_res_tbl_type;
1365 l_eam_res_inst_tbl EAM_PROCESS_WO_PUB.eam_res_inst_tbl_type;
1366 l_eam_sub_res_tbl EAM_PROCESS_WO_PUB.eam_sub_res_tbl_type;
1367 l_eam_res_usage_tbl EAM_PROCESS_WO_PUB.eam_res_usage_tbl_type;
1368 l_eam_mat_req_tbl EAM_PROCESS_WO_PUB.eam_mat_req_tbl_type;
1369
1370 l_out_eam_wo_rec EAM_PROCESS_WO_PUB.eam_wo_rec_type;
1371 l_out_eam_op_tbl EAM_PROCESS_WO_PUB.eam_op_tbl_type;
1372 l_out_eam_op_network_tbl EAM_PROCESS_WO_PUB.eam_op_network_tbl_type;
1373 l_out_eam_res_tbl EAM_PROCESS_WO_PUB.eam_res_tbl_type;
1374 l_out_eam_res_inst_tbl EAM_PROCESS_WO_PUB.eam_res_inst_tbl_type;
1375 l_out_eam_sub_res_tbl EAM_PROCESS_WO_PUB.eam_sub_res_tbl_type;
1376 l_out_eam_res_usage_tbl EAM_PROCESS_WO_PUB.eam_res_usage_tbl_type;
1377 l_out_eam_mat_req_tbl EAM_PROCESS_WO_PUB.eam_mat_req_tbl_type;
1378
1379 l_mesg_token_tbl EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
1380 l_ce_association_rec EAM_EST_DATASTRUCTURES_PUB.EAM_ESTIMATE_ASSOCIATIONS_REC;
1381
1382 l_return_status VARCHAR2(1);
1383 l_estimate_id NUMBER := p_estimate_id;
1384 l_eam_ce_wo_lines_tbl EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL := p_eam_ce_wo_lines_tbl;
1385 x_upd_eam_ce_wo_lines_tbl EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL;
1386
1387 l_debug_filename VARCHAR(50) := G_DEBUG_FILENAME;
1388 l_debug VARCHAR2(1) := 'N';
1389
1390 CURSOR ESTIMATION_ASSOCIATION_CSR IS
1391 SELECT ESTIMATE_ASSOCIATION_ID,
1392 ORGANIZATION_ID,
1393 ESTIMATE_ID,
1394 CU_ID,
1395 ACCT_CLASS_CODE,
1396 ACTIVITY_ID,
1397 ACTIVITY_QTY,
1398 RESOURCE_MULTIPLIER,
1399 DIFFICULTY_ID,
1400 CU_QTY
1401 FROM EAM_ESTIMATE_ASSOCIATIONS
1402 WHERE ESTIMATE_ID = p_estimate_id;
1403
1404 BEGIN
1405 INIT_DEBUG(
1406 p_init_msg_list => FND_API.G_TRUE,
1407 p_debug_filename => l_debug_filename,
1408 p_debug_file_mode => 'w',
1409 p_debug => l_debug);
1410
1411 /* IF (l_debug = 'Y') THEN
1412 DEBUG('Start EXPLODE_CE_ACTIVITIES');
1413 END IF;*/
1414 debug('Inside API - EXPLODE_CE_ACTIVITIES');
1415 debug(' p_eam_ce_wo_lines_tbls.count - ' || p_eam_ce_wo_lines_tbl.count);
1416
1417 -- The cursor ESTIMATION_ASSOCIATION_CSR contains all the activity associated
1418 -- with the estimate. Loop through the acitivity to explode the resource,
1419 -- material.
1420 FOR l_estimation_association_rec IN ESTIMATION_ASSOCIATION_CSR
1421 LOOP
1422 -- Populate the work order record l_eam_wo_rec with activity id, organization id
1423 -- status
1424 /*IF (l_debug = 'Y') THEN
1425 DEBUG('Getting Values from the Cursor ESTIMATION_ASSOCIATION_CSR');
1426 DEBUG('l_estimation_association_rec.ACTIVITY_ID - ' || l_estimation_association_rec.ACTIVITY_ID);
1427 END IF;*/
1428
1429 debug('Calling EAM_EXPLODE_ACTIVITY_PVT.EXPLODE_ACTIVITY for activity id - ' || l_estimation_association_rec.ACTIVITY_ID);
1430
1431 l_eam_wo_rec.asset_activity_id := l_estimation_association_rec.ACTIVITY_ID;
1432 l_eam_wo_rec.organization_id := l_estimation_association_rec.ORGANIZATION_ID;
1433 l_eam_wo_rec.scheduled_start_date := sysdate;
1434 l_eam_wo_rec.status_type := NULL;
1435 l_eam_wo_rec.alternate_bom_designator := NULL;
1436
1437 -- Initializing resource, material tables
1438 -- This initialization is required as it clears our the records from
1439 -- previous EXPLODE_ACTIVITY call
1440 l_eam_op_tbl := INIT_EAM_OP_TBL_TYPE;
1441 l_eam_op_network_tbl := INIT_EAM_OP_NTK_TBL_TYPE;
1442 l_eam_res_tbl := INIT_EAM_RES_TBL_TYPE;
1443 l_eam_res_inst_tbl := INIT_EAM_RES_INST_TBL_TYPE;
1444 l_eam_sub_res_tbl := INIT_EAM_SUB_RES_TBL_TYPE;
1445 l_eam_res_usage_tbl := INIT_EAM_RES_USG_TBL_TYPE;
1446 l_eam_mat_req_tbl := INIT_EAM_MAT_REQ_TBL_TYPE;
1447
1448 -- Calling EAM_EXPLODE_ACTIVITY_PVT.EXPLODE_ACTIVITY to explode the activities
1449 EAM_EXPLODE_ACTIVITY_PVT.EXPLODE_ACTIVITY
1450 ( p_validation_level => FND_API.G_VALID_LEVEL_FULL
1451 , p_eam_wo_rec => l_eam_wo_rec
1452 , p_eam_op_tbl => l_eam_op_tbl
1453 , p_eam_op_network_tbl => l_eam_op_network_tbl
1454 , p_eam_res_tbl => l_eam_res_tbl
1455 , p_eam_res_inst_tbl => l_eam_res_inst_tbl
1456 , p_eam_sub_res_tbl => l_eam_sub_res_tbl
1457 , p_eam_res_usage_tbl => l_eam_res_usage_tbl
1458 , p_eam_mat_req_tbl => l_eam_mat_req_tbl
1459 , x_eam_wo_rec => l_out_eam_wo_rec
1460 , x_eam_op_tbl => l_out_eam_op_tbl
1461 , x_eam_op_network_tbl => l_out_eam_op_network_tbl
1462 , x_eam_res_tbl => l_out_eam_res_tbl
1463 , x_eam_res_inst_tbl => l_out_eam_res_inst_tbl
1464 , x_eam_sub_res_tbl => l_out_eam_sub_res_tbl
1465 , x_eam_res_usage_tbl => l_out_eam_res_usage_tbl
1466 , x_eam_mat_req_tbl => l_out_eam_mat_req_tbl
1467 , x_mesg_token_tbl => l_mesg_token_tbl
1468 , x_return_status => l_return_status
1469 );
1470
1471 IF nvl(l_return_status,'S') <> 'S' THEN
1472 -- Log error, but continue processing
1473 l_return_status := 'E';
1474 END IF; -- nvl(l_return_status,'S') <> 'S'
1475
1476 -- IF (l_debug = 'Y') THEN
1477 debug('Completed EAM_EXPLODE_ACTIVITY_PVT.EXPLODE_ACTIVITY');
1478 DEBUG(' l_out_eam_op_tbl.count - ' || l_out_eam_op_tbl.count);
1479 DEBUG(' l_out_eam_res_tbl.count - ' || l_out_eam_res_tbl.count);
1480 DEBUG(' l_out_eam_mat_req_tbl.count - ' || l_out_eam_mat_req_tbl.count);
1481 -- END IF;
1482
1483 -- Building the source association rec. This source association record
1484 -- contains the estimate id, cu id, activity id which resulted in the
1485 -- current resource, material explosion
1486 l_ce_association_rec.ESTIMATE_ID := l_estimation_association_rec.ESTIMATE_ID;
1487 l_ce_association_rec.ORGANIZATION_ID := l_estimation_association_rec.ORGANIZATION_ID;
1488 l_ce_association_rec.CU_ID := l_estimation_association_rec.CU_ID;
1489 l_ce_association_rec.ACCT_CLASS_CODE := l_estimation_association_rec.ACCT_CLASS_CODE;
1490 l_ce_association_rec.ACTIVITY_ID := l_estimation_association_rec.ACTIVITY_ID;
1491 l_ce_association_rec.ACTIVITY_QTY := l_estimation_association_rec.ACTIVITY_QTY;
1492 l_ce_association_rec.RESOURCE_MULTIPLIER := l_estimation_association_rec.RESOURCE_MULTIPLIER;
1493 l_ce_association_rec.DIFFICULTY_ID := l_estimation_association_rec.DIFFICULTY_ID;
1494 l_ce_association_rec.CU_QTY := l_estimation_association_rec.CU_QTY;
1495
1496 debug(' Dumping the association record');
1497 debug(' l_ce_association_rec.ESTIMATE_ID - ' || l_ce_association_rec.ESTIMATE_ID);
1498 debug(' l_ce_association_rec.ORGANIZATION_ID - ' || l_ce_association_rec.ORGANIZATION_ID);
1499 debug(' l_ce_association_rec.CU_QTY - ' || l_ce_association_rec.CU_QTY);
1500 debug(' l_ce_association_rec.DIFFICULTY_ID - ' || l_ce_association_rec.DIFFICULTY_ID);
1501 debug(' l_ce_association_rec.ACCT_CLASS_CODE - ' || l_ce_association_rec.ACCT_CLASS_CODE);
1502 debug(' l_ce_association_rec.ACTIVITY_ID - ' || l_ce_association_rec.ACTIVITY_ID);
1503 debug(' l_ce_association_rec.ACTIVITY_QTY - ' || l_ce_association_rec.ACTIVITY_QTY);
1504 debug(' l_ce_association_rec.RESOURCE_MULTIPLIER - ' || l_ce_association_rec.RESOURCE_MULTIPLIER);
1505 debug(' l_ce_association_rec.DIFFICULTY_ID - ' || l_ce_association_rec.DIFFICULTY_ID);
1506
1507 -- Populate the WO lines table with the exploded operations and material
1508 -- table
1509 debug('Calling POPULATE_CE_WORK_ORDER_LINES');
1510 POPULATE_CE_WORK_ORDER_LINES(
1511 p_estimate_id => l_estimate_id
1512 , p_ce_associatin_rec => l_ce_association_rec
1513 , p_eam_ce_wo_lines_tbl => l_eam_ce_wo_lines_tbl
1514 , p_eam_op_tbl => l_out_eam_op_tbl
1515 , p_eam_op_network_tbl => l_out_eam_op_network_tbl
1516 , p_eam_res_tbl => l_out_eam_res_tbl
1517 , p_eam_res_inst_tbl => l_out_eam_res_inst_tbl
1518 , p_eam_sub_res_tbl => l_out_eam_sub_res_tbl
1519 , p_eam_res_usage_tbl => l_out_eam_res_usage_tbl
1520 , p_eam_mat_req_tbl => l_out_eam_mat_req_tbl
1521 , x_eam_ce_wo_lines_tbl => x_upd_eam_ce_wo_lines_tbl
1522 , x_return_status => l_return_status
1523 );
1524
1525 IF nvl(l_return_status,'S') <> 'S' THEN
1526 -- Log error, but continue processing
1527 l_return_status := 'E';
1528 END IF; -- nvl(l_return_status,'S') <> 'S'
1529 debug('Completed POPULATE_CE_WORK_ORDER_LINES');
1530 debug(' x_upd_eam_ce_wo_lines_tbl.count - ' || x_upd_eam_ce_wo_lines_tbl.count);
1531 -- Copying the output of POPULATE_CE_WORK_ORDER_LINES back in to the input
1532 -- so that the addition of operations/material lines is appended at the
1533 -- end of the work order lines
1534 l_eam_ce_wo_lines_tbl := x_upd_eam_ce_wo_lines_tbl;
1535
1536 END LOOP; -- l_estimation_association_rec IN ESTIMATION_ASSOCIATION_CSR
1537
1538 -- Log l_eam_ce_wo_lines_tbl entries
1539 --EAM_CONSTRUCTION_MESSAGE_PVT.DUMP_CE_WO_TBL(p_eam_ce_wo_lines_tbl => x_upd_eam_ce_wo_lines_tbl);
1540
1541 -- Copy the exploded operations, resource, material table to the out params
1542 x_eam_ce_wo_lines_tbl := x_upd_eam_ce_wo_lines_tbl;
1543 x_return_status := 'S';
1544
1545 -- Delete all the association entry
1546 DELETE FROM EAM_ESTIMATE_ASSOCIATIONS WHERE ESTIMATE_ID = p_estimate_id;
1547
1548 --IF (l_debug = 'Y') THEN
1549 DEBUG('End of API - EXPLODE_CE_ACTIVITIES');
1550 --END IF;
1551 EXCEPTION
1552 WHEN OTHERS THEN
1553 DEBUG('Others Exception in API - EXPLODE_CE_ACTIVITIES');
1554 x_return_status := 'E';
1555 END EXPLODE_CE_ACTIVITIES;
1556
1557 PROCEDURE POPULATE_CE_WORK_ORDER_LINES(
1558 p_estimate_id IN NUMBER
1559 , p_ce_associatin_rec IN EAM_EST_DATASTRUCTURES_PUB.EAM_ESTIMATE_ASSOCIATIONS_REC
1560 , p_eam_ce_wo_lines_tbl IN EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL
1561 , p_eam_op_tbl IN EAM_PROCESS_WO_PUB.eam_op_tbl_type
1562 , p_eam_op_network_tbl IN EAM_PROCESS_WO_PUB.eam_op_network_tbl_type
1563 , p_eam_res_tbl IN EAM_PROCESS_WO_PUB.eam_res_tbl_type
1564 , p_eam_res_inst_tbl IN EAM_PROCESS_WO_PUB.eam_res_inst_tbl_type
1565 , p_eam_sub_res_tbl IN EAM_PROCESS_WO_PUB.eam_sub_res_tbl_type
1566 , p_eam_res_usage_tbl IN EAM_PROCESS_WO_PUB.eam_res_usage_tbl_type
1567 , p_eam_mat_req_tbl IN EAM_PROCESS_WO_PUB.eam_mat_req_tbl_type
1568 , x_eam_ce_wo_lines_tbl OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL
1569 , x_return_status OUT NOCOPY VARCHAR2)
1570 IS
1571
1572 l_eam_ce_wo_lines_tbl EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL;
1573 l_wo_lines_count NUMBER := p_eam_ce_wo_lines_tbl.COUNT;
1574 l_op_tbl_count NUMBER := p_eam_op_tbl.COUNT;
1575 l_res_tbl_count NUMBER := p_eam_res_tbl.COUNT;
1576 l_mat_tbl_count NUMBER := p_eam_mat_req_tbl.COUNT;
1577
1578 l_wo_ind NUMBER := 0;
1579 l_op_index NUMBER := 0;
1580 l_res_index NUMBER := 0;
1581 l_mat_index NUMBER := 0;
1582 l_ce_tab_index NUMBER := 0;
1583 l_cost_type_id NUMBER := 0;
1584 l_cost_group_id NUMBER := 0;
1585 l_primary_cost_method NUMBER := 0;
1586 l_ext_precision NUMBER := 0 ;
1587 l_return_status VARCHAR2(1);
1588
1589 BEGIN
1590
1591 -- Populating the ce work order lines from the operations, material table
1592 -- The p_eam_ce_wo_lines_tbl contains the input work order lines
1593 l_eam_ce_wo_lines_tbl := p_eam_ce_wo_lines_tbl;
1594 l_wo_ind := l_wo_lines_count;
1595
1596 debug('Inside API - POPULATE_CE_WORK_ORDER_LINES');
1597 debug(' l_wo_lines_count - ' || l_wo_lines_count);
1598 debug(' l_op_tbl_count - ' || l_op_tbl_count);
1599 debug(' l_res_tbl_count - ' || l_res_tbl_count);
1600 debug(' l_mat_tbl_count - ' || l_mat_tbl_count);
1601 --debug('Populating Work Order Lines Table');
1602
1603 -- Get the Cost Type ID
1604 BEGIN
1605 SELECT NVL(MP.DEFAULT_COST_GROUP_ID,-1) ,
1606 DECODE (MP.PRIMARY_COST_METHOD, 1, MP.PRIMARY_COST_METHOD, NVL(MP.AVG_RATES_COST_TYPE_ID,-1)),
1607 MP.PRIMARY_COST_METHOD
1608 INTO l_cost_group_id, l_cost_type_id,
1609 l_primary_cost_method
1610 FROM MTL_PARAMETERS MP
1611 WHERE ORGANIZATION_ID = p_ce_associatin_rec.ORGANIZATION_ID;
1612
1613 SELECT EXTENDED_PRECISION
1614 INTO l_ext_precision
1615 FROM FND_CURRENCIES FC,
1616 GL_SETS_OF_BOOKS SOB ,
1617 HR_ORGANIZATION_INFORMATION HROI
1618 WHERE HROI.ORGANIZATION_ID = p_ce_associatin_rec.ORGANIZATION_ID
1619 AND HROI.ORG_INFORMATION1 = TO_CHAR(SOB.SET_OF_BOOKS_ID)
1620 AND HROI.ORG_INFORMATION_CONTEXT = 'Accounting Information'
1621 AND SOB.CURRENCY_CODE = FC.CURRENCY_CODE
1622 AND FC.ENABLED_FLAG = 'Y';
1623
1624 EXCEPTION
1625 WHEN OTHERS THEN
1626 l_cost_type_id := 0 ;
1627 l_cost_group_id := 0;
1628 l_primary_cost_method := 0;
1629 l_ext_precision := 5;
1630 END;
1631
1632 debug(' Populating estimate work order operation, resource, material lines');
1633 -- Populating operations table
1634 IF l_op_tbl_count > 0 THEN
1635 FOR l_op_index IN p_eam_op_tbl.FIRST .. p_eam_op_tbl.LAST
1636 LOOP
1637
1638 -- Populating the resources which are part of the same operation sequence
1639
1640 IF l_res_tbl_count > 0 THEN
1641 FOR l_res_index IN p_eam_res_tbl.FIRST .. p_eam_res_tbl.LAST
1642 LOOP
1643 IF p_eam_res_tbl(l_res_index).OPERATION_SEQ_NUM = p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM THEN
1644
1645 l_wo_ind := l_wo_ind + 1;
1646 --debug(' Work order resource line - ' || l_res_index);
1647 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_CU_ID := p_ce_associatin_rec.CU_ID;
1648 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_ACTIVITY_ID := p_ce_associatin_rec.ACTIVITY_ID;
1649 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_ACTIVITY_QTY := p_ce_associatin_rec.ACTIVITY_QTY;
1650 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_ACCT_CLASS_CODE := p_ce_associatin_rec.ACCT_CLASS_CODE;
1651 l_eam_ce_wo_lines_tbl(l_wo_ind).ORGANIZATION_ID := p_ce_associatin_rec.ORGANIZATION_ID;
1652 l_eam_ce_wo_lines_tbl(l_wo_ind).ESTIMATE_ID := p_ce_associatin_rec.ESTIMATE_ID;
1653 l_eam_ce_wo_lines_tbl(l_wo_ind).DIFFICULTY_QTY := p_ce_associatin_rec.RESOURCE_MULTIPLIER;
1654 l_eam_ce_wo_lines_tbl(l_wo_ind).DIFFICULTY_ID := p_ce_associatin_rec.DIFFICULTY_ID;
1655 l_eam_ce_wo_lines_tbl(l_wo_ind).CU_QTY := p_ce_associatin_rec.CU_QTY;
1656
1657 -- Defaulting Class Code to SRC_ACCT_CLASS_CODE
1658 l_eam_ce_wo_lines_tbl(l_wo_ind).ACCT_CLASS_CODE := p_ce_associatin_rec.ACCT_CLASS_CODE;
1659
1660 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_SEQ_NUM := p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM;
1661 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_DESCRIPTION := p_eam_op_tbl(l_op_index).DESCRIPTION;
1662 l_eam_ce_wo_lines_tbl(l_wo_ind).STANDARD_OPERATION_ID := p_eam_op_tbl(l_op_index).STANDARD_OPERATION_ID;
1663 --l_eam_ce_wo_lines_tbl(l_wo_ind).STANDARD_OPERATION_ID := null;
1664 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_DEPARTMENT_ID := p_eam_op_tbl(l_op_index).DEPARTMENT_ID;
1665 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_LONG_DESCRIPTION := p_eam_op_tbl(l_op_index).LONG_DESCRIPTION;
1666
1667 -- Defaulting owning department id with operation department id
1668 l_eam_ce_wo_lines_tbl(l_wo_ind).OWNING_DEPARTMENT_ID := p_eam_op_tbl(l_op_index).DEPARTMENT_ID;
1669
1670 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_SEQ_NUM := p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM;
1671 l_eam_ce_wo_lines_tbl(l_wo_ind).RES_SEQ_NUM := p_eam_res_tbl(l_res_index).RESOURCE_SEQ_NUM;
1672 l_eam_ce_wo_lines_tbl(l_wo_ind).RES_ID := p_eam_res_tbl(l_res_index).RESOURCE_ID;
1673 l_eam_ce_wo_lines_tbl(l_wo_ind).RES_UOM := p_eam_res_tbl(l_res_index).UOM_CODE;
1674 l_eam_ce_wo_lines_tbl(l_wo_ind).RES_BASIS_TYPE := p_eam_res_tbl(l_res_index).BASIS_TYPE;
1675 l_eam_ce_wo_lines_tbl(l_wo_ind).RES_USAGE_RATE_OR_AMOUNT := p_eam_res_tbl(l_res_index).USAGE_RATE_OR_AMOUNT;
1676 --l_eam_ce_wo_lines_tbl(l_wo_ind).RES_REQUIRED_UNITS := p_eam_res_tbl(l_res_index).APPLIED_RESOURCE_UNITS;
1677 l_eam_ce_wo_lines_tbl(l_wo_ind).RES_ASSIGNED_UNITS := p_eam_res_tbl(l_res_index).ASSIGNED_UNITS;
1678 l_eam_ce_wo_lines_tbl(l_wo_ind).RES_SCHEDULED_FLAG := p_eam_res_tbl(l_res_index).SCHEDULED_FLAG;
1679
1680 -- Bug 13510580
1681 -- Storing operation seq number in src_op_seq_num so that the activity operation seq number
1682 -- is retained. This will facilitate in uniquely identifying the work order line using
1683 -- source activity id and source operation seq num
1684 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_OP_SEQ_NUM := p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM;
1685
1686 -- Calculate the total usuage amount
1687 -- Bug 10336408
1688 -- SRC_ACTIVITY_QTY contains the correct qty
1689 l_eam_ce_wo_lines_tbl(l_wo_ind).REQUIRED_QUANTITY :=
1690 --NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).CU_QTY,1) *
1691 NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).DIFFICULTY_QTY,1) *
1692 NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_ACTIVITY_QTY,1) *
1693 NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).RES_USAGE_RATE_OR_AMOUNT,1);
1694
1695 -- Calculate Cost
1696 GET_UNIT_RESOURCE_COST(
1697 p_resource_id => l_eam_ce_wo_lines_tbl(l_wo_ind).RES_ID
1698 , p_cost_type_id => l_cost_type_id
1699 , p_ext_precision => l_ext_precision
1700 , p_org_id => p_ce_associatin_rec.ORGANIZATION_ID
1701 , x_unit_resource_value => l_eam_ce_wo_lines_tbl(l_wo_ind).WORK_ORDER_LINE_COST
1702 , x_return_status => l_return_status
1703 );
1704
1705 IF nvl(l_return_status,'S') <> 'S' THEN
1706 -- Log error, but continue processing
1707 x_return_status := 'E';
1708 RAISE FND_API.G_EXC_ERROR;
1709 END IF; -- nvl(l_return_status,'S') <> 'S'
1710
1711 --l_wo_ind := l_wo_ind + 1;
1712 END IF; -- p_eam_res_tbl(l_res_index).OPERATION_SEQ_NUM = p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM
1713 END LOOP; -- l_res_index IN p_eam_res_tbl.FIRST .. p_eam_res_tbl.LAST
1714 END IF; -- l_res_tbl_count > 0
1715 --debug(' Completed work order resource lines');
1716
1717 -- Need to determine the following attributes
1718 -- UOM
1719 -- ITEM_TYPE
1720 -- BASIS_TYPE
1721 -- SUGGESTED_VENDOR_SITE
1722 -- SUGGESTED_VENDOR_SITE_ID
1723 -- DI_AMOUNT
1724 -- DI_ORDER_TYPE_LOOKUP_CODE
1725 -- DI_DESCRIPTION
1726 -- DI_PURCHASE_CATEGORY_ID
1727 -- WORK_ORDER_LINE_COST
1728
1729 -- Populating the material req which are part of the same operation sequence
1730 --debug('Total Number Material Requirements Entry - ' || l_mat_tbl_count);
1731 debug(' Work order material lines - ' || l_mat_tbl_count);
1732 IF l_mat_tbl_count > 0 THEN
1733 FOR l_mat_index IN p_eam_mat_req_tbl.FIRST .. p_eam_mat_req_tbl.LAST
1734 LOOP
1735 IF p_eam_mat_req_tbl(l_mat_index).OPERATION_SEQ_NUM = p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM THEN
1736
1737 l_wo_ind := l_wo_ind + 1;
1738
1739 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_CU_ID := p_ce_associatin_rec.CU_ID;
1740 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_ACTIVITY_ID := p_ce_associatin_rec.ACTIVITY_ID;
1741 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_ACTIVITY_QTY := p_ce_associatin_rec.ACTIVITY_QTY;
1742 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_ACCT_CLASS_CODE := p_ce_associatin_rec.ACCT_CLASS_CODE;
1743 l_eam_ce_wo_lines_tbl(l_wo_ind).ORGANIZATION_ID := p_ce_associatin_rec.ORGANIZATION_ID;
1744 l_eam_ce_wo_lines_tbl(l_wo_ind).ESTIMATE_ID := p_ce_associatin_rec.ESTIMATE_ID;
1745 l_eam_ce_wo_lines_tbl(l_wo_ind).DIFFICULTY_QTY := p_ce_associatin_rec.RESOURCE_MULTIPLIER;
1746 l_eam_ce_wo_lines_tbl(l_wo_ind).DIFFICULTY_ID := p_ce_associatin_rec.DIFFICULTY_ID;
1747 l_eam_ce_wo_lines_tbl(l_wo_ind).CU_QTY := p_ce_associatin_rec.CU_QTY;
1748 -- Defaulting Class Code to SRC_ACCT_CLASS_CODE
1749 l_eam_ce_wo_lines_tbl(l_wo_ind).ACCT_CLASS_CODE := p_ce_associatin_rec.ACCT_CLASS_CODE;
1750
1751 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_SEQ_NUM := p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM;
1752 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_DESCRIPTION := p_eam_op_tbl(l_op_index).DESCRIPTION;
1753 l_eam_ce_wo_lines_tbl(l_wo_ind).STANDARD_OPERATION_ID := p_eam_op_tbl(l_op_index).STANDARD_OPERATION_ID;
1754 --l_eam_ce_wo_lines_tbl(l_wo_ind).STANDARD_OPERATION_ID := null;
1755 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_DEPARTMENT_ID := p_eam_op_tbl(l_op_index).DEPARTMENT_ID;
1756 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_LONG_DESCRIPTION := p_eam_op_tbl(l_op_index).LONG_DESCRIPTION;
1757
1758 -- Defaulting owning department id with operation department id
1759 l_eam_ce_wo_lines_tbl(l_wo_ind).OWNING_DEPARTMENT_ID := p_eam_op_tbl(l_op_index).DEPARTMENT_ID;
1760
1761 l_eam_ce_wo_lines_tbl(l_wo_ind).OP_SEQ_NUM := p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM;
1762 l_eam_ce_wo_lines_tbl(l_wo_ind).RES_USAGE_RATE_OR_AMOUNT := p_eam_mat_req_tbl(l_mat_index).QUANTITY_PER_ASSEMBLY;
1763 --l_eam_ce_wo_lines_tbl(l_wo_ind).REQUIRED_QUANTITY := p_eam_mat_req_tbl(l_mat_index).REQUIRED_QUANTITY;
1764 l_eam_ce_wo_lines_tbl(l_wo_ind).UNIT_PRICE := p_eam_mat_req_tbl(l_mat_index).UNIT_PRICE;
1765 l_eam_ce_wo_lines_tbl(l_wo_ind).SUGGESTED_VENDOR_NAME := p_eam_mat_req_tbl(l_mat_index).SUGGESTED_VENDOR_NAME;
1766 l_eam_ce_wo_lines_tbl(l_wo_ind).MAT_INVENTORY_ITEM_ID := p_eam_mat_req_tbl(l_mat_index).INVENTORY_ITEM_ID;
1767
1768 IF (EAM_WL_UTIL_PKG.IS_STOCK_ENABLE(
1769 p_inventory_item_id => l_eam_ce_wo_lines_tbl(l_wo_ind).MAT_INVENTORY_ITEM_ID,
1770 p_organization_id => p_ce_associatin_rec.ORGANIZATION_ID) = 'Y' ) THEN
1771 -- Stocked Inventory
1772 l_eam_ce_wo_lines_tbl(l_wo_ind).ITEM_TYPE := 1;
1773 ELSE -- Non Stock Direct
1774 l_eam_ce_wo_lines_tbl(l_wo_ind).ITEM_TYPE := 2;
1775 END IF; -- Stock enabled
1776
1777 -- Bug 13510580
1778 -- Storing operation seq number in src_op_seq_num so that the activity operation seq number
1779 -- is retained. This will facilitate in uniquely identifying the work order line using
1780 -- source activity id and source operation seq num
1781 l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_OP_SEQ_NUM := p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM;
1782
1783
1784 l_eam_ce_wo_lines_tbl(l_wo_ind).MAT_COMPONENT_SEQ_NUM := p_eam_mat_req_tbl(l_mat_index).COMPONENT_SEQUENCE_ID;
1785 l_eam_ce_wo_lines_tbl(l_wo_ind).MAT_SUPPLY_SUBINVENTORY := p_eam_mat_req_tbl(l_mat_index).SUPPLY_SUBINVENTORY;
1786 l_eam_ce_wo_lines_tbl(l_wo_ind).MAT_SUPPLY_LOCATOR_ID := p_eam_mat_req_tbl(l_mat_index).VENDOR_ID;
1787 l_eam_ce_wo_lines_tbl(l_wo_ind).SUGGESTED_VENDOR_ID := p_eam_mat_req_tbl(l_mat_index).SUPPLY_LOCATOR_ID;
1788 l_eam_ce_wo_lines_tbl(l_wo_ind).DI_AUTO_REQUEST_MATERIAL := p_eam_mat_req_tbl(l_mat_index).AUTO_REQUEST_MATERIAL;
1789 l_eam_ce_wo_lines_tbl(l_wo_ind).MAT_SUPPLY_LOCATOR_ID := p_eam_mat_req_tbl(l_mat_index).SUPPLY_LOCATOR_ID;
1790
1791 -- Bug 10336408
1792 -- SRC_ACTIVITY_QTY contains the correct qty
1793 l_eam_ce_wo_lines_tbl(l_wo_ind).REQUIRED_QUANTITY :=
1794 --NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).CU_QTY,1) *
1795 NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).SRC_ACTIVITY_QTY,1) *
1796 NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).RES_USAGE_RATE_OR_AMOUNT,1);
1797
1798 -- Calculate Cost based on the item type
1799 IF NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).ITEM_TYPE, '1') = 1 THEN
1800
1801 GET_UNIT_STOCKED_MAT_COST(
1802 p_inv_id => l_eam_ce_wo_lines_tbl(l_wo_ind).MAT_INVENTORY_ITEM_ID
1803 , p_cost_method => l_primary_cost_method
1804 , p_cost_group_id => l_cost_group_id
1805 , p_org_id => p_ce_associatin_rec.ORGANIZATION_ID
1806 , p_ext_precision => l_ext_precision
1807 , x_unit_mat_value => l_eam_ce_wo_lines_tbl(l_wo_ind).WORK_ORDER_LINE_COST
1808 , x_return_status => l_return_status
1809 );
1810
1811 ELSIF NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).ITEM_TYPE, '1') = 2 THEN
1812
1813 GET_UNIT_NON_STOCKED_MAT_COST(
1814 p_inv_id => l_eam_ce_wo_lines_tbl(l_wo_ind).MAT_INVENTORY_ITEM_ID
1815 , p_org_id => p_ce_associatin_rec.ORGANIZATION_ID
1816 , p_ext_precision => l_ext_precision
1817 , x_unit_mat_value => l_eam_ce_wo_lines_tbl(l_wo_ind).WORK_ORDER_LINE_COST
1818 , x_return_status => l_return_status
1819 );
1820
1821 END IF; -- NVL(l_eam_ce_wo_lines_tbl(l_wo_ind).ITEM_TYPE, '1')
1822
1823 IF nvl(l_return_status,'S') <> 'S' THEN
1824 -- Log error, but continue processing
1825 x_return_status := 'E';
1826 RAISE FND_API.G_EXC_ERROR;
1827 END IF; -- nvl(l_return_status,'S') <> 'S'
1828
1829 --l_wo_ind := l_wo_ind + 1;
1830 END IF; --p_eam_mat_req_tbl(l_mat_index).OPERATION_SEQ_NUM = p_eam_op_tbl(l_op_index).OPERATION_SEQ_NUM
1831 END LOOP; -- l_mat_index IN p_eam_mat_req_tbl.FIRST .. p_eam_mat_req_tbl.LAST
1832 END IF; -- l_mat_tbl_count > 0
1833 -- debug(' Completed work order material lines');
1834
1835
1836 END LOOP; -- l_op_index IN p_eam_op_tbl.FIRST .. p_eam_op_tbl.LAST
1837 END IF; -- l_op_tbl_count > 0
1838 debug(' Completed populating estimate work order operation, resource, material lines');
1839 debug(' Total Populated in l_eam_ce_wo_lines_tbl - ' || l_eam_ce_wo_lines_tbl.count);
1840
1841 -- This block populates the common attributes for all the work order lines
1842 -- Also once all the attribute are populated, it calles
1843 -- EAM_CE_WORK_ORDER_LINES_PKG.INSERT_ROW
1844 /* IF l_wo_ind > 0 THEN
1845 FOR l_ce_tab_index IN l_eam_ce_wo_lines_tbl.FIRST .. l_eam_ce_wo_lines_tbl.LAST
1846 LOOP
1847
1848
1849 -- Following not moified
1850 --l_eam_ce_wo_lines_tbl(l_wo_ind).WORK_ORDER_SEQ_NUM := NULL;
1851 --l_eam_ce_wo_lines_tbl(l_wo_ind).WORK_ORDER_NUMBER := NULL;
1852 --l_eam_ce_wo_lines_tbl(l_wo_ind).WORK_ORDER_DESCRIPTION := NULL;
1853
1854 --l_eam_ce_wo_lines_tbl(l_wo_ind).PRIMARY_ITEM_ID := NULL;
1855 --l_eam_ce_wo_lines_tbl(l_wo_ind).STATUS_TYPE := NULL;
1856 --l_eam_ce_wo_lines_tbl(l_wo_ind).ACCT_CLASS_CODE := NULL;
1857 --l_eam_ce_wo_lines_tbl(l_wo_ind).SCHEDULED_START_DATE := p_ce_associatin_rec.ESTIMATE_ID;
1858 --l_eam_ce_wo_lines_tbl(l_wo_ind).SCHEDULED_COMPLETION_DATE := p_ce_associatin_rec.ESTIMATE_ID;
1859 --l_eam_ce_wo_lines_tbl(l_wo_ind).PROJECT_ID := p_ce_associatin_rec.ESTIMATE_ID;
1860 --l_eam_ce_wo_lines_tbl(l_wo_ind).TASK_ID := p_ce_associatin_rec.ESTIMATE_ID;
1861 --l_eam_ce_wo_lines_tbl(l_wo_ind).MAINTENANCE_OBJECT_ID := p_ce_associatin_rec.ESTIMATE_ID;
1862 --l_eam_ce_wo_lines_tbl(l_wo_ind).MAINTENANCE_OBJECT_TYPE := p_ce_associatin_rec.ESTIMATE_ID;
1863 --l_eam_ce_wo_lines_tbl(l_wo_ind).MAINTENANCE_OBJECT_SOURCE := p_ce_associatin_rec.ESTIMATE_ID;
1864 --l_eam_ce_wo_lines_tbl(l_wo_ind).OWNING_DEPARTMENT_ID := p_ce_associatin_rec.ESTIMATE_ID;
1865 --l_eam_ce_wo_lines_tbl(l_wo_ind).USER_DEFINED_STATUS_ID := p_ce_associatin_rec.CU_ID;
1866
1867 END LOOP; -- l_ce_tab_index IN p_eam_ce_wo_lines_tbl.FIRST .. p_eam_ce_wo_lines_tbl.LAST
1868 END IF; -- l_wo_ind > 0
1869 */
1870 -- debug('Done populating Work Order Lines table');
1871
1872 -- Copy the output table
1873 x_eam_ce_wo_lines_tbl := l_eam_ce_wo_lines_tbl;
1874 debug('End of API - POPULATE_CE_WORK_ORDER_LINES');
1875
1876 EXCEPTION
1877 WHEN FND_API.G_EXC_ERROR THEN
1878 x_return_status := 'E';
1879 debug('In to FND_API.G_EXC_ERROR in POPULATE_CE_WORK_ORDER_LINES');
1880 WHEN OTHERS THEN
1881 x_return_status := 'E';
1882 debug('In to Others exception in POPULATE_CE_WORK_ORDER_LINES');
1883 END POPULATE_CE_WORK_ORDER_LINES;
1884
1885 FUNCTION INIT_EAM_OP_TBL_TYPE RETURN EAM_PROCESS_WO_PUB.eam_op_tbl_type
1886 IS
1887 l_eam_op_tbl EAM_PROCESS_WO_PUB.eam_op_tbl_type;
1888 BEGIN
1889 RETURN l_eam_op_tbl;
1890 END INIT_EAM_OP_TBL_TYPE;
1891
1892 FUNCTION INIT_EAM_OP_NTK_TBL_TYPE RETURN EAM_PROCESS_WO_PUB.eam_op_network_tbl_type
1893 IS
1894 l_eam_op_network_tbl EAM_PROCESS_WO_PUB.eam_op_network_tbl_type;
1895 BEGIN
1896 RETURN l_eam_op_network_tbl;
1897 END INIT_EAM_OP_NTK_TBL_TYPE;
1898
1899 FUNCTION INIT_EAM_RES_TBL_TYPE RETURN EAM_PROCESS_WO_PUB.eam_res_tbl_type
1900 IS
1901 l_eam_res_tbl EAM_PROCESS_WO_PUB.eam_res_tbl_type;
1902 BEGIN
1903 RETURN l_eam_res_tbl;
1904 END INIT_EAM_RES_TBL_TYPE;
1905
1906 FUNCTION INIT_EAM_RES_INST_TBL_TYPE RETURN EAM_PROCESS_WO_PUB.eam_res_inst_tbl_type
1907 IS
1908 l_eam_res_inst_tbl EAM_PROCESS_WO_PUB.eam_res_inst_tbl_type;
1909 BEGIN
1910 RETURN l_eam_res_inst_tbl;
1911 END INIT_EAM_RES_INST_TBL_TYPE;
1912
1913 FUNCTION INIT_EAM_SUB_RES_TBL_TYPE RETURN EAM_PROCESS_WO_PUB.eam_sub_res_tbl_type
1914 IS
1915 l_eam_sub_res_tbl EAM_PROCESS_WO_PUB.eam_sub_res_tbl_type;
1916 BEGIN
1917 RETURN l_eam_sub_res_tbl;
1918 END INIT_EAM_SUB_RES_TBL_TYPE;
1919
1920 FUNCTION INIT_EAM_RES_USG_TBL_TYPE RETURN EAM_PROCESS_WO_PUB.eam_res_usage_tbl_type
1921 IS
1922 l_eam_res_usage_tbl EAM_PROCESS_WO_PUB.eam_res_usage_tbl_type;
1923 BEGIN
1924 RETURN l_eam_res_usage_tbl;
1925 END INIT_EAM_RES_USG_TBL_TYPE;
1926
1927 FUNCTION INIT_EAM_MAT_REQ_TBL_TYPE RETURN EAM_PROCESS_WO_PUB.eam_mat_req_tbl_type
1928 IS
1929 l_eam_mat_req_tbl EAM_PROCESS_WO_PUB.eam_mat_req_tbl_type;
1930 BEGIN
1931 RETURN l_eam_mat_req_tbl;
1932 END INIT_EAM_MAT_REQ_TBL_TYPE;
1933
1934 PROCEDURE GET_CU_RECS(
1935 p_api_version IN NUMBER,
1936 p_commit IN VARCHAR2,
1937 p_init_msg_list IN VARCHAR2,
1938 p_validation_level IN NUMBER,
1939 p_org_id IN NUMBER,
1940 px_cu_tbl IN OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CONSTRUCTION_UNITS_TBL,
1941 x_return_status OUT NOCOPY VARCHAR2,
1942 x_msg_count OUT NOCOPY NUMBER,
1943 x_msg_data OUT NOCOPY VARCHAR2
1944 )
1945 IS
1946 l_api_name CONSTANT VARCHAR2(30) := 'GET_CU_RECS';
1947 l_api_version CONSTANT NUMBER := 1.0;
1948 l_debug_filename VARCHAR(50) := G_DEBUG_FILENAME;
1949 l_debug VARCHAR2(1) := 'N';
1950 l_index NUMBER := 0;
1951 BEGIN
1952 SAVEPOINT GET_CU_RECS;
1953
1954 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
1955 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1956 END IF;
1957
1958 --Initialize message list if p_init_msg_list is set to TRUE.
1959 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
1960 FND_MSG_PUB.INITIALIZE;
1961 END IF;
1962
1963 --Initialize API return status to success
1964 x_return_status := FND_API.G_RET_STS_SUCCESS;
1965
1966 INIT_DEBUG(
1967 p_init_msg_list => p_init_msg_list,
1968 p_debug_filename => l_debug_filename,
1969 p_debug_file_mode => 'W',
1970 p_debug => l_debug);
1971
1972 IF (l_debug = 'Y') THEN
1973 DEBUG('GET_CU_RECS ' ||
1974 p_api_version ||'-'||
1975 p_commit ||'-'||
1976 p_init_msg_list ||'-'||
1977 p_validation_level);
1978 DEBUG('Organization ID : ' || p_org_id);
1979 END IF;
1980
1981 IF px_cu_tbl.COUNT > 0 THEN
1982 l_index := 0;
1983 WHILE l_index < px_cu_tbl.COUNT LOOP
1984 BEGIN
1985 l_index := l_index + 1;
1986 SELECT CU_NAME,
1987 DESCRIPTION,
1988 ORGANIZATION_ID,
1989 CU_EFFECTIVE_FROM,
1990 CU_EFFECTIVE_TO
1991 INTO px_cu_tbl(l_index).CU_NAME,
1992 px_cu_tbl(l_index).DESCRIPTION,
1993 px_cu_tbl(l_index).ORGANIZATION_ID,
1994 px_cu_tbl(l_index).CU_EFFECTIVE_FROM,
1995 px_cu_tbl(l_index).CU_EFFECTIVE_TO
1996 FROM EAM_CONSTRUCTION_UNITS
1997 WHERE CU_ID = px_cu_tbl(l_index).CU_ID
1998 AND ORGANIZATION_ID = p_org_id
1999 AND CU_EFFECTIVE_FROM <= SYSDATE
2000 AND (CU_EFFECTIVE_TO IS NULL OR CU_EFFECTIVE_TO > SYSDATE);
2001
2002 IF (l_debug = 'Y') THEN
2003 DEBUG('CU record ' || l_index);
2004 DEBUG(' CU_ID : ' || px_cu_tbl(l_index).CU_ID);
2005 DEBUG(' CU_NAME : ' || px_cu_tbl(l_index).CU_NAME);
2006 DEBUG(' DESCRIPTION : ' || px_cu_tbl(l_index).DESCRIPTION);
2007 DEBUG(' ORGANIZATION_ID : ' || px_cu_tbl(l_index).ORGANIZATION_ID);
2008 DEBUG(' CU_EFFECTIVE_FROM : ' || px_cu_tbl(l_index).CU_EFFECTIVE_FROM);
2009 DEBUG(' CU_EFFECTIVE_TO : ' || px_cu_tbl(l_index).CU_EFFECTIVE_TO);
2010 END IF;
2011 EXCEPTION
2012 WHEN OTHERS THEN
2013 FND_MESSAGE.SET_NAME('EAM','EAM_INVALID_CU_ID');
2014 FND_MESSAGE.SET_TOKEN('CU_ID', px_cu_tbl(l_index).CU_ID);
2015 FND_MSG_PUB.ADD;
2016 RAISE FND_API.G_EXC_ERROR;
2017 END;
2018 END LOOP;
2019 END IF;
2020 EXCEPTION
2021 WHEN FND_API.G_EXC_ERROR THEN
2022 ROLLBACK TO GET_CU_RECS;
2023 x_return_status := FND_API.G_RET_STS_ERROR;
2024 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2025 p_count => x_msg_count,
2026 p_data => x_msg_data);
2027 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2028 ROLLBACK TO GET_CU_RECS;
2029 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2030 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2031 p_count => x_msg_count,
2032 p_data => x_msg_data);
2033 WHEN OTHERS THEN
2034 ROLLBACK TO GET_CU_RECS;
2035 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2036 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2037 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2038 END IF;
2039 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2040 p_count => x_msg_count,
2041 p_data => x_msg_data);
2042 END GET_CU_RECS;
2043
2044 PROCEDURE GET_CU_ACTIVITIES(
2045 p_api_version IN NUMBER,
2046 p_commit IN VARCHAR2,
2047 p_init_msg_list IN VARCHAR2,
2048 p_validation_level IN NUMBER,
2049 p_cu_id IN NUMBER,
2050 x_activities_tbl OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_ESTIMATE_ASSOCIATIONS_TBL,
2051 x_return_status OUT NOCOPY VARCHAR2,
2052 x_msg_count OUT NOCOPY NUMBER,
2053 x_msg_data OUT NOCOPY VARCHAR2
2054 )
2055 IS
2056 CURSOR cu_activities_cur IS
2057 SELECT ECU.CU_ID,
2058 ECU.ORGANIZATION_ID,
2059 ECUD.ACCT_CLASS_CODE,
2060 ECUD.ACTIVITY_ID,
2061 ECUD.CU_ACTIVITY_QTY
2062 FROM EAM_CONSTRUCTION_UNITS ECU,
2063 EAM_CONSTRUCTION_UNIT_DETAILS ECUD
2064 WHERE ECU.CU_ID = p_cu_id
2065 AND ECU.CU_ID = ECUD.CU_ID
2066 AND ECU.CU_EFFECTIVE_FROM < SYSDATE + 1
2067 AND (ECU.CU_EFFECTIVE_TO IS NULL OR ECU.CU_EFFECTIVE_TO > SYSDATE)
2068 AND (ECUD.CU_ACTIVITY_EFFECTIVE_TO IS NULL OR ECUD.CU_ACTIVITY_EFFECTIVE_TO > SYSDATE);
2069
2070 l_api_name CONSTANT VARCHAR2(30) := 'GET_CU_ACTIVITIES';
2071 l_api_version CONSTANT NUMBER := 1.0;
2072 l_debug_filename VARCHAR(50) := G_DEBUG_FILENAME;
2073 l_debug VARCHAR2(1) := 'N';
2074 l_activity_count NUMBER := 0;
2075 l_activities_rec EAM_EST_DATASTRUCTURES_PUB.EAM_ESTIMATE_ASSOCIATIONS_REC;
2076 BEGIN
2077 SAVEPOINT GET_CU_ACTIVITIES;
2078
2079 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2080 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2081 END IF;
2082
2083 --Initialize message list if p_init_msg_list is set to TRUE.
2084 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
2085 FND_MSG_PUB.INITIALIZE;
2086 END IF;
2087
2088 --Initialize API return status to success
2089 x_return_status := FND_API.G_RET_STS_SUCCESS;
2090
2091 INIT_DEBUG(
2092 p_init_msg_list => p_init_msg_list,
2093 p_debug_filename => l_debug_filename,
2094 p_debug_file_mode => 'W',
2095 p_debug => l_debug);
2096
2097 IF (l_debug = 'Y') THEN
2098 DEBUG('GET_CU_ACTIVITIES ' ||
2099 p_api_version ||'-'||
2100 p_commit ||'-'||
2101 p_init_msg_list ||'-'||
2102 p_validation_level);
2103 DEBUG('Construction Unit ID : ' || p_cu_id);
2104 END IF;
2105
2106 FOR cu_activity_rec IN cu_activities_cur
2107 LOOP
2108 l_activity_count := l_activity_count + 1;
2109
2110 l_activities_rec.CU_ID := cu_activity_rec.CU_ID;
2111 l_activities_rec.CU_QTY := NULL;
2112 l_activities_rec.ORGANIZATION_ID := cu_activity_rec.ORGANIZATION_ID;
2113 l_activities_rec.ACCT_CLASS_CODE := cu_activity_rec.ACCT_CLASS_CODE;
2114 l_activities_rec.ACTIVITY_ID := cu_activity_rec.ACTIVITY_ID;
2115 l_activities_rec.ACTIVITY_QTY := cu_activity_rec.CU_ACTIVITY_QTY;
2116
2117 IF l_activities_rec.CU_ID IS NOT NULL THEN
2118 BEGIN
2119 SELECT CU_NAME,
2120 DESCRIPTION
2121 INTO l_activities_rec.CU_NAME,
2122 l_activities_rec.CU_DESCRIPTION
2123 FROM EAM_CONSTRUCTION_UNITS
2124 WHERE CU_ID = l_activities_rec.CU_ID;
2125 EXCEPTION
2126 WHEN OTHERS THEN
2127 NULL;
2128 END;
2129 END IF;
2130
2131 IF l_activities_rec.ACTIVITY_ID IS NOT NULL THEN
2132 BEGIN
2133 SELECT CONCATENATED_SEGMENTS,
2134 DESCRIPTION
2135 INTO l_activities_rec.ACTIVITY_NAME,
2136 l_activities_rec.ACTIVITY_DESCRIPTION
2137 FROM MTL_SYSTEM_ITEMS_KFV
2138 WHERE INVENTORY_ITEM_ID = l_activities_rec.ACTIVITY_ID
2139 AND ORGANIZATION_ID = l_activities_rec.ORGANIZATION_ID;
2140 EXCEPTION
2141 WHEN OTHERS THEN
2142 NULL;
2143 END;
2144 END IF;
2145
2146 x_activities_tbl(l_activity_count) := l_activities_rec;
2147
2148 IF (l_debug = 'Y') THEN
2149 DEBUG('CU activity ' || l_activity_count);
2150 DEBUG(' CU_ID : ' || x_activities_tbl(l_activity_count).CU_ID);
2151 DEBUG(' CU_QTY : ' || x_activities_tbl(l_activity_count).CU_QTY);
2152 DEBUG(' CU_NAME : ' || x_activities_tbl(l_activity_count).CU_NAME);
2153 DEBUG(' CU_DESCRIPTION : ' || x_activities_tbl(l_activity_count).CU_DESCRIPTION);
2154 DEBUG(' ORGANIZATION_ID : ' || x_activities_tbl(l_activity_count).ORGANIZATION_ID);
2155 DEBUG(' ACCT_CLASS_CODE : ' || x_activities_tbl(l_activity_count).ACCT_CLASS_CODE);
2156 DEBUG(' ACTIVITY_ID : ' || x_activities_tbl(l_activity_count).ACTIVITY_ID);
2157 DEBUG(' ACTIVITY_NAME : ' || x_activities_tbl(l_activity_count).ACTIVITY_NAME);
2158 DEBUG(' ACTIVITY_DESCRIPTION : ' || x_activities_tbl(l_activity_count).ACTIVITY_DESCRIPTION);
2159 DEBUG(' ACTIVITY_QTY : ' || x_activities_tbl(l_activity_count).ACTIVITY_QTY);
2160 DEBUG(' DIFFICULTY_ID : ' || x_activities_tbl(l_activity_count).DIFFICULTY_ID);
2161 DEBUG(' RESOURCE_MULTIPLIER : ' || x_activities_tbl(l_activity_count).RESOURCE_MULTIPLIER);
2162 END IF;
2163 END LOOP;
2164
2165 IF (l_debug = 'Y') THEN
2166 DEBUG('x_return_status : ' || x_return_status);
2167 DEBUG('x_msg_count : ' || x_msg_count);
2168 END IF;
2169 EXCEPTION
2170 WHEN FND_API.G_EXC_ERROR THEN
2171 ROLLBACK TO GET_CU_ACTIVITIES;
2172 x_return_status := FND_API.G_RET_STS_ERROR;
2173 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2174 p_count => x_msg_count,
2175 p_data => x_msg_data);
2176 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2177 ROLLBACK TO GET_CU_ACTIVITIES;
2178 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2179 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2180 p_count => x_msg_count,
2181 p_data => x_msg_data);
2182 WHEN OTHERS THEN
2183 ROLLBACK TO GET_CU_ACTIVITIES;
2184 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2185 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2186 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2187 END IF;
2188 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2189 p_count => x_msg_count,
2190 p_data => x_msg_data);
2191 END GET_CU_ACTIVITIES;
2192
2193 PROCEDURE CREATE_ESTIMATE(
2194 p_api_version IN NUMBER,
2195 p_commit IN VARCHAR2,
2196 p_init_msg_list IN VARCHAR2,
2197 p_validation_level IN NUMBER,
2198 px_estimate_rec IN OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CONSTRUCTION_ESTIMATE_REC,
2199 x_return_status OUT NOCOPY VARCHAR2,
2200 x_msg_count OUT NOCOPY NUMBER,
2201 x_msg_data OUT NOCOPY VARCHAR2
2202 )
2203 IS
2204 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_ESTIMATE';
2205 l_api_version CONSTANT NUMBER := 1.0;
2206 l_debug_filename VARCHAR(50) := G_DEBUG_FILENAME;
2207 l_debug VARCHAR2(1) := 'N';
2208 l_creation_date DATE := SYSDATE;
2209 l_created_by NUMBER := FND_GLOBAL.USER_ID;
2210 l_last_updated_date DATE := SYSDATE;
2211 l_last_updated_by NUMBER := FND_GLOBAL.USER_ID;
2212 l_last_updated_login NUMBER;
2213 l_estimate_exist VARCHAR2(1) := 'N';
2214
2215
2216 BEGIN
2217 SAVEPOINT CREATE_ESTIMATE;
2218
2219 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2220 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2221 END IF;
2222
2223 --Initialize message list if p_init_msg_list is set to TRUE.
2224 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
2225 FND_MSG_PUB.INITIALIZE;
2226 END IF;
2227
2228 --Initialize API return status to success
2229 x_return_status := FND_API.G_RET_STS_SUCCESS;
2230
2231 INIT_DEBUG(
2232 p_init_msg_list => p_init_msg_list,
2233 p_debug_filename => l_debug_filename,
2234 p_debug_file_mode => 'W',
2235 p_debug => l_debug);
2236
2237 IF (l_debug = 'Y') THEN
2238 DEBUG('CREATE_ESTIMATE ' ||
2239 p_api_version ||'-'||
2240 p_commit ||'-'||
2241 p_init_msg_list ||'-'||
2242 p_validation_level);
2243 DEBUG('ESTIMATE_ID : ' || px_estimate_rec.ESTIMATE_ID);
2244 DEBUG('ORGANIZATION_ID : ' || px_estimate_rec.ORGANIZATION_ID);
2245 DEBUG('ESTIMATE_NUMBER : ' || px_estimate_rec.ESTIMATE_NUMBER);
2246 DEBUG('ESTIMATE_DESCRIPTION : ' || px_estimate_rec.ESTIMATE_DESCRIPTION);
2247 DEBUG('GROUPING_OPTION : ' || px_estimate_rec.GROUPING_OPTION);
2248 DEBUG('PARENT_WO_ID : ' || px_estimate_rec.PARENT_WO_ID);
2249 DEBUG('CREATE_PARENT_WO_FLAG : ' || px_estimate_rec.CREATE_PARENT_WO_FLAG);
2250 END IF;
2251
2252 IF (px_estimate_rec.ORGANIZATION_ID IS NULL) THEN
2253 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2254 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ORGANIZATION_ID');
2255 FND_MESSAGE.SET_TOKEN('VALUE', px_estimate_rec.ORGANIZATION_ID);
2256 FND_MSG_PUB.ADD;
2257 RAISE FND_API.G_EXC_ERROR;
2258 END IF;
2259
2260 IF (px_estimate_rec.ESTIMATE_NUMBER IS NULL) THEN
2261 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2262 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ESTIMATE_NUMBER');
2263 FND_MESSAGE.SET_TOKEN('VALUE', px_estimate_rec.ESTIMATE_NUMBER);
2264 FND_MSG_PUB.ADD;
2265 RAISE FND_API.G_EXC_ERROR;
2266 ELSE
2267 BEGIN
2268 SELECT 'Y'
2269 INTO l_estimate_exist
2270 FROM EAM_CONSTRUCTION_ESTIMATES
2271 WHERE ESTIMATE_NUMBER = px_estimate_rec.ESTIMATE_NUMBER
2272 AND ROWNUM = 1;
2273 EXCEPTION
2274 WHEN NO_DATA_FOUND THEN
2275 l_estimate_exist := 'N';
2276 END;
2277 IF l_estimate_exist = 'Y' THEN
2278 FND_MESSAGE.SET_NAME('EAM','EAM_ESTIMATE_NAME_UNIQUE');
2279 FND_MESSAGE.SET_TOKEN('ESTIMATE_NAME', px_estimate_rec.ESTIMATE_NUMBER);
2280 FND_MSG_PUB.ADD;
2281 RAISE FND_API.G_EXC_ERROR;
2282 END IF;
2283 END IF;
2284
2285
2286
2287 EAM_CONSTRUCTION_ESTIMATES_PKG.INSERT_ROW(
2288 px_ESTIMATE_ID => px_estimate_rec.ESTIMATE_ID,
2289 p_ORGANIZATION_ID => px_estimate_rec.ORGANIZATION_ID,
2290 p_ESTIMATE_NUMBER => px_estimate_rec.ESTIMATE_NUMBER,
2291 p_ESTIMATE_DESCRIPTION => px_estimate_rec.ESTIMATE_DESCRIPTION,
2292 p_GROUPING_OPTION => px_estimate_rec.GROUPING_OPTION,
2293 p_PARENT_WO_ID => px_estimate_rec.PARENT_WO_ID,
2294 p_CREATE_PARENT_WO_FLAG => px_estimate_rec.CREATE_PARENT_WO_FLAG,
2295 p_CREATION_DATE => l_creation_date,
2296 p_CREATED_BY => l_created_by,
2297 p_LAST_UPDATE_DATE => l_last_updated_date,
2298 p_LAST_UPDATED_BY => l_last_updated_by,
2299 p_LAST_UPDATE_LOGIN => l_last_updated_login,
2300 p_ATTRIBUTE_CATEGORY => px_estimate_rec.attribute_category,
2301 p_ATTRIBUTE1 => px_estimate_rec.attribute1,
2302 p_ATTRIBUTE2 => px_estimate_rec.attribute2,
2303 p_ATTRIBUTE3 => px_estimate_rec.attribute3,
2304 p_ATTRIBUTE4 => px_estimate_rec.attribute4,
2305 p_ATTRIBUTE5 => px_estimate_rec.attribute5,
2306 p_ATTRIBUTE6 => px_estimate_rec.attribute6,
2307 p_ATTRIBUTE7 => px_estimate_rec.attribute7,
2308 p_ATTRIBUTE8 => px_estimate_rec.attribute8,
2309 p_ATTRIBUTE9 => px_estimate_rec.attribute9,
2310 p_ATTRIBUTE10 => px_estimate_rec.attribute10,
2311 p_ATTRIBUTE11 => px_estimate_rec.attribute11,
2312 p_ATTRIBUTE12 => px_estimate_rec.attribute12,
2313 p_ATTRIBUTE13 => px_estimate_rec.attribute13,
2314 p_ATTRIBUTE14 => px_estimate_rec.attribute14,
2315 p_ATTRIBUTE15 => px_estimate_rec.attribute15
2316 );
2317
2318 IF (l_debug = 'Y') THEN
2319 DEBUG('Created estimate with ID : ' || px_estimate_rec.ESTIMATE_ID);
2320 END IF;
2321
2322 IF (p_commit = FND_API.G_TRUE) THEN
2323 COMMIT;
2324 END IF;
2325
2326 IF (l_debug = 'Y') THEN
2327 DEBUG('x_return_status : ' || x_return_status);
2328 DEBUG('x_msg_count : ' || x_msg_count);
2329 END IF;
2330 EXCEPTION
2331 WHEN FND_API.G_EXC_ERROR THEN
2332 ROLLBACK TO CREATE_ESTIMATE;
2333 x_return_status := FND_API.G_RET_STS_ERROR;
2334 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2335 p_count => x_msg_count,
2336 p_data => x_msg_data);
2337 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2338 ROLLBACK TO CREATE_ESTIMATE;
2339 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2340 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2341 p_count => x_msg_count,
2342 p_data => x_msg_data);
2343 WHEN OTHERS THEN
2344 ROLLBACK TO CREATE_ESTIMATE;
2345 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2346 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2347 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2348 END IF;
2349 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2350 p_count => x_msg_count,
2351 p_data => x_msg_data);
2352 END CREATE_ESTIMATE;
2353
2354 PROCEDURE UPDATE_ESTIMATE(
2355 p_api_version IN NUMBER,
2356 p_commit IN VARCHAR2,
2357 p_init_msg_list IN VARCHAR2,
2358 p_validation_level IN NUMBER,
2359 p_estimate_rec IN EAM_EST_DATASTRUCTURES_PUB.EAM_CONSTRUCTION_ESTIMATE_REC,
2360 x_return_status OUT NOCOPY VARCHAR2,
2361 x_msg_count OUT NOCOPY NUMBER,
2362 x_msg_data OUT NOCOPY VARCHAR2
2363 )
2364 IS
2365 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_ESTIMATE';
2366 l_api_version CONSTANT NUMBER := 1.0;
2367 l_debug_filename VARCHAR(50) := G_DEBUG_FILENAME;
2368 l_debug VARCHAR2(1) := 'N';
2369 l_creation_date DATE := SYSDATE;
2370 l_created_by NUMBER := FND_GLOBAL.USER_ID;
2371 l_last_updated_date DATE := SYSDATE;
2372 l_last_updated_by NUMBER := FND_GLOBAL.USER_ID;
2373 l_last_updated_login NUMBER;
2374 l_estimate_exist VARCHAR2(1) := 'N';
2375 l_parent_creation_flag VARCHAR(1) := FND_API.G_MISS_CHAR;
2376 l_parent_wo_id NUMBER := FND_API.G_MISS_NUM;
2377 l_validate boolean;
2378 x_error_segments number;
2379 x_error_message varchar2(2000);
2380 l_attribute_category VARCHAR2(240);
2381
2382 BEGIN
2383 SAVEPOINT UPDATE_ESTIMATE;
2384
2385 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2386 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2387 END IF;
2388
2389 --Initialize message list if p_init_msg_list is set to TRUE.
2390 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
2391 FND_MSG_PUB.INITIALIZE;
2392 END IF;
2393
2394 --Initialize API return status to success
2395 x_return_status := FND_API.G_RET_STS_SUCCESS;
2396
2397 INIT_DEBUG(
2398 p_init_msg_list => p_init_msg_list,
2399 p_debug_filename => l_debug_filename,
2400 p_debug_file_mode => 'W',
2401 p_debug => l_debug);
2402
2403 IF (l_debug = 'Y') THEN
2404 DEBUG('UPDATE_ESTIMATE ' ||
2405 p_api_version ||'-'||
2406 p_commit ||'-'||
2407 p_init_msg_list ||'-'||
2408 p_validation_level);
2409 DEBUG('ESTIMATE_ID : ' || p_estimate_rec.ESTIMATE_ID);
2410 DEBUG('ORGANIZATION_ID : ' || p_estimate_rec.ORGANIZATION_ID);
2411 DEBUG('ESTIMATE_NUMBER : ' || p_estimate_rec.ESTIMATE_NUMBER);
2412 DEBUG('ESTIMATE_DESCRIPTION : ' || p_estimate_rec.ESTIMATE_DESCRIPTION);
2413 DEBUG('GROUPING_OPTION : ' || p_estimate_rec.GROUPING_OPTION);
2414 DEBUG('PARENT_WO_ID : ' || p_estimate_rec.PARENT_WO_ID);
2415 DEBUG('CREATE_PARENT_WO_FLAG : ' || p_estimate_rec.CREATE_PARENT_WO_FLAG);
2416 END IF;
2417
2418 IF (p_estimate_rec.ESTIMATE_ID IS NULL) THEN
2419 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2420 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ESTIMATE_ID');
2421 FND_MESSAGE.SET_TOKEN('VALUE', p_estimate_rec.ESTIMATE_ID);
2422 FND_MSG_PUB.ADD;
2423 RAISE FND_API.G_EXC_ERROR;
2424 END IF;
2425
2426 IF (p_estimate_rec.ORGANIZATION_ID IS NULL) THEN
2427 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2428 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ORGANIZATION_ID');
2429 FND_MESSAGE.SET_TOKEN('VALUE', p_estimate_rec.ORGANIZATION_ID);
2430 FND_MSG_PUB.ADD;
2431 RAISE FND_API.G_EXC_ERROR;
2432 END IF;
2433
2434 IF (p_estimate_rec.ESTIMATE_NUMBER IS NULL) THEN
2435 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2436 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ESTIMATE_NUMBER');
2437 FND_MESSAGE.SET_TOKEN('VALUE', p_estimate_rec.ESTIMATE_NUMBER);
2438 FND_MSG_PUB.ADD;
2439 RAISE FND_API.G_EXC_ERROR;
2440 ELSE
2441 BEGIN
2442 SELECT 'Y'
2443 INTO l_estimate_exist
2444 FROM EAM_CONSTRUCTION_ESTIMATES
2445 WHERE ESTIMATE_NUMBER = p_estimate_rec.ESTIMATE_NUMBER
2446 AND ESTIMATE_ID <> p_estimate_rec.ESTIMATE_ID
2447 AND ROWNUM = 1;
2448 EXCEPTION
2449 WHEN NO_DATA_FOUND THEN
2450 l_estimate_exist := 'N';
2451 END;
2452 IF l_estimate_exist = 'Y' THEN
2453 FND_MESSAGE.SET_NAME('EAM','EAM_ESTIMATE_NAME_UNIQUE');
2454 FND_MESSAGE.SET_TOKEN('ESTIMATE_NAME', p_estimate_rec.ESTIMATE_NUMBER);
2455 FND_MSG_PUB.ADD;
2456 RAISE FND_API.G_EXC_ERROR;
2457 END IF;
2458 END IF;
2459
2460 -- Verifying data
2461 IF NVL(p_estimate_rec.PARENT_WO_ID, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM OR
2462 p_estimate_rec.PARENT_WO_ID IS NOT NULL THEN
2463 l_parent_wo_id := p_estimate_rec.PARENT_WO_ID;
2464 END IF; -- NVL(p_estimate_rec.PARENT_WO_ID, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM
2465
2466 IF NVL(p_estimate_rec.CREATE_PARENT_WO_FLAG, FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR OR
2467 p_estimate_rec.CREATE_PARENT_WO_FLAG IS NOT NULL THEN
2468 l_parent_creation_flag := p_estimate_rec.CREATE_PARENT_WO_FLAG;
2469 END IF; -- NVL(p_estimate_rec.PARENT_WO_ID, FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM
2470
2471 -- Bug 13498107
2472 -- Validation of Description Flexfields
2473 l_attribute_category := p_estimate_rec.attribute_category;
2474 IF (NVL(l_attribute_category, FND_API.G_MISS_CHAR) = FND_API.G_MISS_CHAR) THEN
2475 l_attribute_category := null;
2476 END IF;
2477
2478 l_validate := EAM_COMMON_UTILITIES_PVT.validate_desc_flex_field (
2479 p_app_short_name => 'EAM',
2480 p_desc_flex_name => 'EAM_CONSTRUCTION_ESTIMATES_DFF',
2481 p_ATTRIBUTE_CATEGORY => l_attribute_category ,
2482 p_ATTRIBUTE1 => p_estimate_rec.attribute1 ,
2483 p_ATTRIBUTE2 => p_estimate_rec.attribute2 ,
2484 p_ATTRIBUTE3 => p_estimate_rec.attribute3 ,
2485 p_ATTRIBUTE4 => p_estimate_rec.attribute4 ,
2486 p_ATTRIBUTE5 => p_estimate_rec.attribute5 ,
2487 p_ATTRIBUTE6 => p_estimate_rec.attribute6 ,
2488 p_ATTRIBUTE7 => p_estimate_rec.attribute7 ,
2489 p_ATTRIBUTE8 => p_estimate_rec.attribute8 ,
2490 p_ATTRIBUTE9 => p_estimate_rec.attribute9 ,
2491 p_ATTRIBUTE10 => p_estimate_rec.attribute10 ,
2492 p_ATTRIBUTE11 => p_estimate_rec.attribute11 ,
2493 p_ATTRIBUTE12 => p_estimate_rec.attribute12 ,
2494 p_ATTRIBUTE13 => p_estimate_rec.attribute13 ,
2495 p_ATTRIBUTE14 => p_estimate_rec.attribute14 ,
2496 p_ATTRIBUTE15 => p_estimate_rec.attribute15 ,
2497 x_error_segments => x_error_segments ,
2498 x_error_message => x_error_message);
2499
2500 IF (not l_validate) THEN
2501 FND_MESSAGE.SET_NAME('EAM', 'EAM_INVALID_DESC_FLEX');
2502 FND_MESSAGE.SET_TOKEN('ERROR_MSG', x_error_message);
2503 FND_MSG_PUB.Add;
2504 RAISE FND_API.G_EXC_ERROR;
2505 END IF;
2506
2507
2508 EAM_CONSTRUCTION_ESTIMATES_PKG.UPDATE_ROW(
2509 p_ESTIMATE_ID => p_estimate_rec.ESTIMATE_ID,
2510 p_ORGANIZATION_ID => p_estimate_rec.ORGANIZATION_ID,
2511 p_ESTIMATE_NUMBER => p_estimate_rec.ESTIMATE_NUMBER,
2512 p_ESTIMATE_DESCRIPTION => p_estimate_rec.ESTIMATE_DESCRIPTION,
2513 p_GROUPING_OPTION => p_estimate_rec.GROUPING_OPTION,
2514 p_PARENT_WO_ID => l_parent_wo_id,
2515 p_CREATE_PARENT_WO_FLAG => l_parent_creation_flag,
2516 p_CREATION_DATE => l_creation_date,
2517 p_CREATED_BY => l_created_by,
2518 p_LAST_UPDATE_DATE => l_last_updated_date,
2519 p_LAST_UPDATED_BY => l_last_updated_by,
2520 p_LAST_UPDATE_LOGIN => l_last_updated_login,
2521 p_ATTRIBUTE_CATEGORY => p_estimate_rec.attribute_category,
2522 p_ATTRIBUTE1 => p_estimate_rec.attribute1,
2523 p_ATTRIBUTE2 => p_estimate_rec.attribute2,
2524 p_ATTRIBUTE3 => p_estimate_rec.attribute3,
2525 p_ATTRIBUTE4 => p_estimate_rec.attribute4,
2526 p_ATTRIBUTE5 => p_estimate_rec.attribute5,
2527 p_ATTRIBUTE6 => p_estimate_rec.attribute6,
2528 p_ATTRIBUTE7 => p_estimate_rec.attribute7,
2529 p_ATTRIBUTE8 => p_estimate_rec.attribute8,
2530 p_ATTRIBUTE9 => p_estimate_rec.attribute9,
2531 p_ATTRIBUTE10 => p_estimate_rec.attribute10,
2532 p_ATTRIBUTE11 => p_estimate_rec.attribute11,
2533 p_ATTRIBUTE12 => p_estimate_rec.attribute12,
2534 p_ATTRIBUTE13 => p_estimate_rec.attribute13,
2535 p_ATTRIBUTE14 => p_estimate_rec.attribute14,
2536 p_ATTRIBUTE15 => p_estimate_rec.attribute15
2537 );
2538
2539 IF (l_debug = 'Y') THEN
2540 DEBUG('Update estimate with ID : ' || p_estimate_rec.ESTIMATE_ID);
2541 END IF;
2542
2543 IF (p_commit = FND_API.G_TRUE) THEN
2544 COMMIT;
2545 END IF;
2546
2547 IF (l_debug = 'Y') THEN
2548 DEBUG('x_return_status : ' || x_return_status);
2549 DEBUG('x_msg_count : ' || x_msg_count);
2550 END IF;
2551 EXCEPTION
2552 WHEN FND_API.G_EXC_ERROR THEN
2553 ROLLBACK TO UPDATE_ESTIMATE;
2554 x_return_status := FND_API.G_RET_STS_ERROR;
2555 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2556 p_count => x_msg_count,
2557 p_data => x_msg_data);
2558 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2559 ROLLBACK TO UPDATE_ESTIMATE;
2560 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2561 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2562 p_count => x_msg_count,
2563 p_data => x_msg_data);
2564 WHEN OTHERS THEN
2565 ROLLBACK TO UPDATE_ESTIMATE;
2566 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2567 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2568 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2569 END IF;
2570 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2571 p_count => x_msg_count,
2572 p_data => x_msg_data);
2573 END UPDATE_ESTIMATE;
2574
2575 PROCEDURE SET_ACTIVITIES_FOR_CE(
2576 p_api_version IN NUMBER,
2577 p_commit IN VARCHAR2,
2578 p_init_msg_list IN VARCHAR2,
2579 p_validation_level IN NUMBER,
2580 p_ce_id IN NUMBER,
2581 px_activities_tbl IN OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_ESTIMATE_ASSOCIATIONS_TBL,
2582 x_return_status OUT NOCOPY VARCHAR2,
2583 x_msg_count OUT NOCOPY NUMBER,
2584 x_msg_data OUT NOCOPY VARCHAR2
2585 )
2586 IS
2587 l_api_name CONSTANT VARCHAR2(30) := 'SET_ACTIVITIES_FOR_CE';
2588 l_api_version CONSTANT NUMBER := 1.0;
2589 l_debug_filename VARCHAR(50) := G_DEBUG_FILENAME;
2590 l_debug VARCHAR2(1) := 'N';
2591 l_index NUMBER := 0;
2592 l_est_association_id NUMBER;
2593 l_ce_id NUMBER;
2594 l_organization_id NUMBER;
2595 l_cu_id NUMBER;
2596 l_cu_qty NUMBER;
2597 l_acct_class_code VARCHAR2(10);
2598 l_activity_id NUMBER;
2599 l_activity_qty NUMBER;
2600 l_difficulty_id NUMBER;
2601 l_resource_multiplier NUMBER;
2602 l_creation_date DATE := SYSDATE;
2603 l_created_by NUMBER := FND_GLOBAL.USER_ID;
2604 l_last_updated_date DATE := SYSDATE;
2605 l_last_updated_by NUMBER := FND_GLOBAL.USER_ID;
2606 l_last_updated_login NUMBER;
2607 BEGIN
2608 SAVEPOINT SET_ACTIVITIES_FOR_CE;
2609
2610 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
2611 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2612 END IF;
2613
2614 --Initialize message list if p_init_msg_list is set to TRUE.
2615 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
2616 FND_MSG_PUB.INITIALIZE;
2617 END IF;
2618
2619 --Initialize API return status to success
2620 x_return_status := FND_API.G_RET_STS_SUCCESS;
2621
2622 INIT_DEBUG(
2623 p_init_msg_list => p_init_msg_list,
2624 p_debug_filename => l_debug_filename,
2625 p_debug_file_mode => 'W',
2626 p_debug => l_debug);
2627
2628 IF (l_debug = 'Y') THEN
2629 DEBUG('SET_ACTIVITIES_FOR_CE ' ||
2630 p_api_version ||'-'||
2631 p_commit ||'-'||
2632 p_init_msg_list ||'-'||
2633 p_validation_level);
2634 DEBUG('Construction Estimate ID : ' || p_ce_id);
2635 IF px_activities_tbl.COUNT > 0 THEN
2636 l_index := 0;
2637 WHILE l_index < px_activities_tbl.COUNT LOOP
2638 l_index := l_index + 1;
2639 DEBUG('Association ' || l_index || ' :');
2640 DEBUG(' ESTIMATE_ASSOCIATION_ID : ' || px_activities_tbl(l_index).ESTIMATE_ASSOCIATION_ID);
2641 DEBUG(' ORGANIZATION_ID : ' || px_activities_tbl(l_index).ORGANIZATION_ID);
2642 DEBUG(' ESTIMATE_ID : ' || px_activities_tbl(l_index).ESTIMATE_ID);
2643 DEBUG(' CU_ID : ' || px_activities_tbl(l_index).CU_ID);
2644 DEBUG(' CU_QTY : ' || px_activities_tbl(l_index).CU_QTY);
2645 DEBUG(' ACCT_CLASS_CODE : ' || px_activities_tbl(l_index).ACCT_CLASS_CODE);
2646 DEBUG(' ACTIVITY_ID : ' || px_activities_tbl(l_index).ACTIVITY_ID);
2647 DEBUG(' ACTIVITY_QTY : ' || px_activities_tbl(l_index).ACTIVITY_QTY);
2648 DEBUG(' DIFFICULTY_ID : ' || px_activities_tbl(l_index).DIFFICULTY_ID);
2649 DEBUG(' RESOURCE_MULTIPLIER : ' || px_activities_tbl(l_index).RESOURCE_MULTIPLIER);
2650 END LOOP;
2651 END IF;
2652 END IF;
2653
2654 --Validate Construction Estimate ID exist
2655 IF p_ce_id IS NULL THEN
2656 FND_MESSAGE.SET_NAME('EAM','EAM_INVALID_CE_ID');
2657 FND_MESSAGE.SET_TOKEN('CE_ID', p_ce_id);
2658 FND_MSG_PUB.ADD;
2659 RAISE FND_API.G_EXC_ERROR;
2660 END IF;
2661
2662 BEGIN
2663 SELECT ESTIMATE_ID,
2664 ORGANIZATION_ID
2665 INTO l_ce_id,
2666 l_organization_id
2667 FROM EAM_CONSTRUCTION_ESTIMATES
2668 WHERE ESTIMATE_ID = p_ce_id;
2669 EXCEPTION
2670 WHEN OTHERS THEN
2671 FND_MESSAGE.SET_NAME('EAM','EAM_INVALID_CE_ID');
2672 FND_MESSAGE.SET_TOKEN('CE_ID', p_ce_id);
2673 FND_MSG_PUB.ADD;
2674 RAISE FND_API.G_EXC_ERROR;
2675 END;
2676
2677 IF px_activities_tbl.COUNT > 0 THEN
2678 l_index := 0;
2679 WHILE l_index < px_activities_tbl.COUNT LOOP
2680 l_index := l_index + 1;
2681 IF (px_activities_tbl(l_index).ORGANIZATION_ID IS NOT NULL AND px_activities_tbl(l_index).ORGANIZATION_ID <> l_organization_id) THEN
2682 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2683 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ORGANIZATION_ID');
2684 FND_MESSAGE.SET_TOKEN('VALUE', px_activities_tbl(l_index).ORGANIZATION_ID);
2685 FND_MSG_PUB.ADD;
2686 RAISE FND_API.G_EXC_ERROR;
2687 END IF;
2688
2689 IF (px_activities_tbl(l_index).ESTIMATE_ID IS NOT NULL AND px_activities_tbl(l_index).ESTIMATE_ID <> l_ce_id) THEN
2690 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2691 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ESTIMATE_ID');
2692 FND_MESSAGE.SET_TOKEN('VALUE', px_activities_tbl(l_index).ESTIMATE_ID);
2693 FND_MSG_PUB.ADD;
2694 RAISE FND_API.G_EXC_ERROR;
2695 END IF;
2696
2697 l_cu_id := px_activities_tbl(l_index).CU_ID;
2698
2699 IF (px_activities_tbl(l_index).CU_QTY IS NULL OR px_activities_tbl(l_index).CU_QTY < 1) THEN
2700 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2701 FND_MESSAGE.SET_TOKEN('PARAMETER', 'CU_QTY');
2702 FND_MESSAGE.SET_TOKEN('VALUE', px_activities_tbl(l_index).CU_QTY);
2703 FND_MSG_PUB.ADD;
2704 RAISE FND_API.G_EXC_ERROR;
2705 END IF;
2706 l_cu_qty := px_activities_tbl(l_index).CU_QTY;
2707
2708 /*IF (px_activities_tbl(l_index).ACCT_CLASS_CODE IS NULL) THEN
2709 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2710 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ACCT_CLASS_CODE');
2711 FND_MESSAGE.SET_TOKEN('VALUE', px_activities_tbl(l_index).ACCT_CLASS_CODE);
2712 FND_MSG_PUB.ADD;
2713 RAISE FND_API.G_EXC_ERROR;
2714 END IF;*/
2715 l_acct_class_code := px_activities_tbl(l_index).ACCT_CLASS_CODE;
2716
2717 IF (px_activities_tbl(l_index).ACTIVITY_ID IS NULL) THEN
2718 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2719 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ACTIVITY_ID');
2720 FND_MESSAGE.SET_TOKEN('VALUE', px_activities_tbl(l_index).ACTIVITY_ID);
2721 FND_MSG_PUB.ADD;
2722 RAISE FND_API.G_EXC_ERROR;
2723 END IF;
2724 l_activity_id := px_activities_tbl(l_index).ACTIVITY_ID;
2725
2726 IF (px_activities_tbl(l_index).ACTIVITY_QTY IS NULL) THEN
2727 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2728 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ACTIVITY_QTY');
2729 FND_MESSAGE.SET_TOKEN('VALUE', px_activities_tbl(l_index).ACTIVITY_QTY);
2730 FND_MSG_PUB.ADD;
2731 RAISE FND_API.G_EXC_ERROR;
2732 END IF;
2733 l_activity_qty := px_activities_tbl(l_index).ACTIVITY_QTY;
2734
2735 l_difficulty_id := px_activities_tbl(l_index).DIFFICULTY_ID;
2736
2737 IF (px_activities_tbl(l_index).RESOURCE_MULTIPLIER IS NULL) THEN
2738 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
2739 FND_MESSAGE.SET_TOKEN('PARAMETER', 'RESOURCE_MULTIPLIER');
2740 FND_MESSAGE.SET_TOKEN('VALUE', px_activities_tbl(l_index).RESOURCE_MULTIPLIER);
2741 FND_MSG_PUB.ADD;
2742 RAISE FND_API.G_EXC_ERROR;
2743 END IF;
2744 l_resource_multiplier := px_activities_tbl(l_index).RESOURCE_MULTIPLIER;
2745 l_est_association_id := NULL;
2746
2747 EAM_ESTIMATE_ASSOCIATIONS_PKG.INSERT_ROW(
2748 px_ESTIMATE_ASSOCIATION_ID => l_est_association_id,
2749 p_ORGANIZATION_ID => l_organization_id,
2750 p_ESTIMATE_ID => l_ce_id,
2751 p_CU_ID => l_cu_id,
2752 p_CU_QTY => l_cu_qty,
2753 p_ACCT_CLASS_CODE => l_acct_class_code,
2754 p_ACTIVITY_ID => l_activity_id,
2755 p_ACTIVITY_QTY => l_activity_qty,
2756 p_DIFFICULTY_ID => l_difficulty_id,
2757 p_RESOURCE_MULTIPLIER => l_resource_multiplier,
2758 p_CREATION_DATE => l_creation_date,
2759 p_CREATED_BY => l_created_by,
2760 p_LAST_UPDATE_DATE => l_last_updated_date,
2761 p_LAST_UPDATED_BY => l_last_updated_by,
2762 p_LAST_UPDATE_LOGIN => l_last_updated_login
2763 );
2764
2765 IF (l_debug = 'Y') THEN
2766 DEBUG('Created Estimate Association with ID : ' || l_est_association_id);
2767 END IF;
2768 px_activities_tbl(l_index).ESTIMATE_ASSOCIATION_ID := l_est_association_id;
2769 END LOOP;
2770 END IF;
2771
2772 IF (p_commit = FND_API.G_TRUE) THEN
2773 COMMIT;
2774 END IF;
2775
2776 IF (l_debug = 'Y') THEN
2777 DEBUG('x_return_status : ' || x_return_status);
2778 DEBUG('x_msg_count : ' || x_msg_count);
2779 END IF;
2780 EXCEPTION
2781 WHEN FND_API.G_EXC_ERROR THEN
2782 ROLLBACK TO SET_ACTIVITIES_FOR_CE;
2783 x_return_status := FND_API.G_RET_STS_ERROR;
2784 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2785 p_count => x_msg_count,
2786 p_data => x_msg_data);
2787 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2788 ROLLBACK TO SET_ACTIVITIES_FOR_CE;
2789 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2790 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2791 p_count => x_msg_count,
2792 p_data => x_msg_data);
2793 WHEN OTHERS THEN
2794 ROLLBACK TO SET_ACTIVITIES_FOR_CE;
2795 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2796 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2797 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2798 END IF;
2799 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
2800 p_count => x_msg_count,
2801 p_data => x_msg_data);
2802 END SET_ACTIVITIES_FOR_CE;
2803
2804 --This is a private procedure which will retrive the wo lines for a construction
2805 --estimate from the EAM_CE_WORK_ORDER_LINES table in the proper order based on
2806 --the p_group_option parameter.
2807 --This procedure does not do any error handling, but it may throw error, thus
2808 --the calling procedure should have logic in place to catch possible error thrown
2809 --from this procedure.
2810 PROCEDURE GET_CE_WO_LNS_BY_GROUP_OPT(
2811 p_ce_id IN NUMBER,
2812 p_group_option IN VARCHAR2,
2813 x_ce_wo_ln_tbl OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL)
2814 IS
2815 --The group by 'None' option gets the lines in the order they are stored in the table.
2816 CURSOR none_cur IS
2817 SELECT *
2818 FROM EAM_CE_WORK_ORDER_LINES
2819 WHERE ESTIMATE_ID = p_ce_id
2820 AND estimate_work_order_line_id NOT IN (SELECT parent_wo_id
2821 FROM EAM_CONSTRUCTION_ESTIMATES
2822 WHERE estimate_id = p_ce_id
2823 AND nvl(create_parent_wo_flag, 'N') = 'Y');
2824
2825 --The group by 'Single Work Order', 'Construction Unit' and 'Activity' options all work as follow:
2826 -- First of all, order by src_cu_id, which is a view only field
2827 -- Second, order by src_activity_id, which is also a view only field
2828 -- Third, order by op_seq_num, which was defaulted from src_op_seq_num and later updated through UI
2829 -- Lastly, within the same op_seq_num:
2830 -- 1. Display the resources first, order by res_seq_num
2831 -- 2. Display the inventory materials second, order by mat_component_seq_num
2832 -- 3. Display the direct items last, order by di_description
2833 CURSOR general_cur IS
2834 SELECT ECWOL.*,
2835 NVL(ECWOL.OP_SEQ_NUM, ECWOL.SRC_OP_SEQ_NUM) OP_SEQ_NUM_DERIVED
2836 FROM EAM_CE_WORK_ORDER_LINES ECWOL
2837 WHERE ECWOL.ESTIMATE_ID = p_ce_id
2838 AND ECWOL.estimate_work_order_line_id NOT IN (SELECT parent_wo_id
2839 FROM EAM_CONSTRUCTION_ESTIMATES
2840 WHERE estimate_id = p_ce_id
2841 AND nvl(create_parent_wo_flag, 'N') = 'Y')
2842 ORDER BY ECWOL.SRC_CU_ID,
2843 ECWOL.SRC_ACTIVITY_ID,
2844 OP_SEQ_NUM_DERIVED,
2845 ECWOL.RES_SEQ_NUM,
2846 ECWOL.MAT_COMPONENT_SEQ_NUM,
2847 ECWOL.DI_DESCRIPTION;
2848
2849 --The group by 'WIP Accounting Class' option works as follow:
2850 -- First of all, order by src_acct_class_code
2851 -- Second, order by src_cu_id, which is a view only field
2852 -- Third, order by src_activity_id, which is also a view only field
2853 -- Fourth, order by op_seq_num, which was defaulted from src_op_seq_num and later updated through UI
2854 -- Lastly, within the same op_seq_num:
2855 -- 1. Display the resources first, order by res_seq_num
2856 -- 2. Display the inventory materials second, order by mat_component_seq_num
2857 -- 3. Display the direct items last, order by di_description
2858 CURSOR wip_acct_cur IS
2859 SELECT ECWOL.*,
2860 NVL(ECWOL.OP_SEQ_NUM, ECWOL.SRC_OP_SEQ_NUM) OP_SEQ_NUM_DERIVED
2861 FROM EAM_CE_WORK_ORDER_LINES ECWOL
2862 WHERE ECWOL.ESTIMATE_ID = p_ce_id
2863 AND ECWOL.estimate_work_order_line_id NOT IN (SELECT parent_wo_id
2864 FROM EAM_CONSTRUCTION_ESTIMATES
2865 WHERE estimate_id = p_ce_id
2866 AND nvl(create_parent_wo_flag, 'N') = 'Y')
2867 ORDER BY ECWOL.SRC_ACCT_CLASS_CODE,
2868 ECWOL.SRC_CU_ID,
2869 ECWOL.SRC_ACTIVITY_ID,
2870 OP_SEQ_NUM_DERIVED,
2871 ECWOL.RES_SEQ_NUM,
2872 ECWOL.MAT_COMPONENT_SEQ_NUM,
2873 ECWOL.DI_DESCRIPTION;
2874
2875 l_ce_wo_ln_rec EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_REC;
2876 l_wo_ln_index NUMBER := 0;
2877 BEGIN
2878 IF p_group_option = 'None' THEN
2879 --Populate x_ce_wo_ln_tbl
2880 l_wo_ln_index := 0;
2881 FOR wo_line_rec IN none_cur LOOP
2882 l_wo_ln_index := l_wo_ln_index + 1;
2883
2884 l_ce_wo_ln_rec.ESTIMATE_WORK_ORDER_LINE_ID := wo_line_rec.ESTIMATE_WORK_ORDER_LINE_ID;
2885 l_ce_wo_ln_rec.SRC_CU_ID := wo_line_rec.SRC_CU_ID;
2886 l_ce_wo_ln_rec.SRC_ACTIVITY_ID := wo_line_rec.SRC_ACTIVITY_ID;
2887 l_ce_wo_ln_rec.SRC_ACTIVITY_QTY := wo_line_rec.SRC_ACTIVITY_QTY;
2888 l_ce_wo_ln_rec.DIFFICULTY_ID := wo_line_rec.SRC_DIFFICULTY_ID;
2889 l_ce_wo_ln_rec.DIFFICULTY_QTY := wo_line_rec.DIFFICULTY_QTY;
2890 l_ce_wo_ln_rec.CU_QTY := wo_line_rec.CU_QTY;
2891 l_ce_wo_ln_rec.SRC_OP_SEQ_NUM := wo_line_rec.SRC_OP_SEQ_NUM;
2892 l_ce_wo_ln_rec.SRC_ACCT_CLASS_CODE := wo_line_rec.SRC_ACCT_CLASS_CODE;
2893 l_ce_wo_ln_rec.ESTIMATE_ID := wo_line_rec.ESTIMATE_ID;
2894 l_ce_wo_ln_rec.ORGANIZATION_ID := wo_line_rec.ORGANIZATION_ID;
2895 l_ce_wo_ln_rec.WORK_ORDER_SEQ_NUM := wo_line_rec.WORK_ORDER_SEQ_NUM;
2896 l_ce_wo_ln_rec.WORK_ORDER_NUMBER := wo_line_rec.WORK_ORDER_NUMBER;
2897 l_ce_wo_ln_rec.WORK_ORDER_DESCRIPTION := wo_line_rec.WORK_ORDER_DESCRIPTION;
2898 l_ce_wo_ln_rec.REF_WIP_ENTITY_ID := wo_line_rec.REF_WIP_ENTITY_ID;
2899 l_ce_wo_ln_rec.PRIMARY_ITEM_ID := wo_line_rec.PRIMARY_ITEM_ID;
2900 l_ce_wo_ln_rec.ACCT_CLASS_CODE := wo_line_rec.ACCT_CLASS_CODE;
2901 l_ce_wo_ln_rec.STATUS_TYPE := wo_line_rec.STATUS_TYPE;
2902 l_ce_wo_ln_rec.SCHEDULED_START_DATE := wo_line_rec.SCHEDULED_START_DATE;
2903 l_ce_wo_ln_rec.SCHEDULED_COMPLETION_DATE := wo_line_rec.SCHEDULED_COMPLETION_DATE;
2904 l_ce_wo_ln_rec.PROJECT_ID := wo_line_rec.PROJECT_ID;
2905 l_ce_wo_ln_rec.TASK_ID := wo_line_rec.TASK_ID;
2906 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_ID := wo_line_rec.MAINTENANCE_OBJECT_ID;
2907 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_TYPE := wo_line_rec.MAINTENANCE_OBJECT_TYPE;
2908 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_SOURCE := wo_line_rec.MAINTENANCE_OBJECT_SOURCE;
2909 l_ce_wo_ln_rec.OWNING_DEPARTMENT_ID := wo_line_rec.OWNING_DEPARTMENT_ID;
2910 l_ce_wo_ln_rec.USER_DEFINED_STATUS_ID := wo_line_rec.USER_DEFINED_STATUS_ID;
2911 l_ce_wo_ln_rec.OP_SEQ_NUM := wo_line_rec.OP_SEQ_NUM;
2912 l_ce_wo_ln_rec.OP_DESCRIPTION := wo_line_rec.OP_DESCRIPTION;
2913 l_ce_wo_ln_rec.STANDARD_OPERATION_ID := wo_line_rec.STANDARD_OPERATION_ID;
2914 l_ce_wo_ln_rec.OP_DEPARTMENT_ID := wo_line_rec.OP_DEPARTMENT_ID;
2915 l_ce_wo_ln_rec.OP_LONG_DESCRIPTION := wo_line_rec.OP_LONG_DESCRIPTION;
2916 l_ce_wo_ln_rec.RES_SEQ_NUM := wo_line_rec.RES_SEQ_NUM;
2917 l_ce_wo_ln_rec.RES_ID := wo_line_rec.RES_ID;
2918 l_ce_wo_ln_rec.RES_UOM := wo_line_rec.RES_UOM;
2919 l_ce_wo_ln_rec.RES_BASIS_TYPE := wo_line_rec.RES_BASIS_TYPE;
2920 l_ce_wo_ln_rec.RES_USAGE_RATE_OR_AMOUNT := wo_line_rec.RES_USAGE_RATE_OR_AMOUNT;
2921 l_ce_wo_ln_rec.RES_REQUIRED_UNITS := wo_line_rec.RES_REQUIRED_UNITS;
2922 l_ce_wo_ln_rec.RES_ASSIGNED_UNITS := wo_line_rec.RES_ASSIGNED_UNITS;
2923 l_ce_wo_ln_rec.ITEM_TYPE := wo_line_rec.ITEM_TYPE;
2924 l_ce_wo_ln_rec.REQUIRED_QUANTITY := wo_line_rec.REQUIRED_QUANTITY;
2925 l_ce_wo_ln_rec.UNIT_PRICE := wo_line_rec.UNIT_PRICE;
2926 l_ce_wo_ln_rec.UOM := wo_line_rec.UOM;
2927 l_ce_wo_ln_rec.BASIS_TYPE := wo_line_rec.BASIS_TYPE;
2928 l_ce_wo_ln_rec.SUGGESTED_VENDOR_NAME := wo_line_rec.SUGGESTED_VENDOR_NAME;
2929 l_ce_wo_ln_rec.SUGGESTED_VENDOR_ID := wo_line_rec.SUGGESTED_VENDOR_ID;
2930 l_ce_wo_ln_rec.SUGGESTED_VENDOR_SITE := wo_line_rec.SUGGESTED_VENDOR_SITE;
2931 l_ce_wo_ln_rec.SUGGESTED_VENDOR_SITE_ID := wo_line_rec.SUGGESTED_VENDOR_SITE_ID;
2932 l_ce_wo_ln_rec.MAT_INVENTORY_ITEM_ID := wo_line_rec.MAT_INVENTORY_ITEM_ID;
2933 l_ce_wo_ln_rec.MAT_COMPONENT_SEQ_NUM := wo_line_rec.MAT_COMPONENT_SEQ_NUM;
2934 l_ce_wo_ln_rec.MAT_SUPPLY_SUBINVENTORY := wo_line_rec.MAT_SUPPLY_SUBINVENTORY;
2935 l_ce_wo_ln_rec.MAT_SUPPLY_LOCATOR_ID := wo_line_rec.MAT_SUPPLY_LOCATOR_ID;
2936 l_ce_wo_ln_rec.DI_AMOUNT := wo_line_rec.DI_AMOUNT;
2937 l_ce_wo_ln_rec.DI_ORDER_TYPE_LOOKUP_CODE := wo_line_rec.DI_ORDER_TYPE_LOOKUP_CODE;
2938 l_ce_wo_ln_rec.DI_DESCRIPTION := wo_line_rec.DI_DESCRIPTION;
2939 l_ce_wo_ln_rec.DI_PURCHASE_CATEGORY_ID := wo_line_rec.DI_PURCHASE_CATEGORY_ID;
2940 l_ce_wo_ln_rec.DI_AUTO_REQUEST_MATERIAL := wo_line_rec.DI_AUTO_REQUEST_MATERIAL;
2941 l_ce_wo_ln_rec.DI_NEED_BY_DATE := wo_line_rec.DI_NEED_BY_DATE;
2942 l_ce_wo_ln_rec.WORK_ORDER_LINE_COST := wo_line_rec.WO_LINE_PER_UNIT_COST;
2943
2944 l_ce_wo_ln_rec.RES_SCHEDULED_FLAG := wo_line_rec.RES_SCHEDULED_FLAG;
2945 l_ce_wo_ln_rec.AVAILABLE_QUANTITY := wo_line_rec.ITEM_COMMENTS;
2946 l_ce_wo_ln_rec.ITEM_COMMENTS := wo_line_rec.ITEM_COMMENTS;
2947 l_ce_wo_ln_rec.CU_QTY := wo_line_rec.CU_QTY;
2948
2949 -- Addtl WO Details which are not in the defaults region must be set to null
2950 l_ce_wo_ln_rec.WORK_ORDER_TYPE := wo_line_rec.WORK_ORDER_TYPE;
2951 l_ce_wo_ln_rec.ACTIVITY_TYPE := wo_line_rec.ACTIVITY_TYPE;
2952 l_ce_wo_ln_rec.ACTIVITY_CAUSE := wo_line_rec.ACTIVITY_CAUSE;
2953 l_ce_wo_ln_rec.ACTIVITY_SOURCE := wo_line_rec.ACTIVITY_SOURCE;
2954
2955
2956 x_ce_wo_ln_tbl(l_wo_ln_index) := l_ce_wo_ln_rec;
2957 END LOOP;
2958 ELSIF p_group_option = 'Single Work Order'
2959 OR p_group_option = 'Construction Unit'
2960 OR p_group_option = 'Activity'
2961 THEN
2962 --Populate x_ce_wo_ln_tbl
2963 l_wo_ln_index := 0;
2964 FOR wo_line_rec IN general_cur LOOP
2965 l_wo_ln_index := l_wo_ln_index + 1;
2966
2967 l_ce_wo_ln_rec.ESTIMATE_WORK_ORDER_LINE_ID := wo_line_rec.ESTIMATE_WORK_ORDER_LINE_ID;
2968 l_ce_wo_ln_rec.SRC_CU_ID := wo_line_rec.SRC_CU_ID;
2969 l_ce_wo_ln_rec.SRC_ACTIVITY_ID := wo_line_rec.SRC_ACTIVITY_ID;
2970 l_ce_wo_ln_rec.SRC_ACTIVITY_QTY := wo_line_rec.SRC_ACTIVITY_QTY;
2971 l_ce_wo_ln_rec.DIFFICULTY_ID := wo_line_rec.SRC_DIFFICULTY_ID;
2972 l_ce_wo_ln_rec.DIFFICULTY_QTY := wo_line_rec.DIFFICULTY_QTY;
2973 l_ce_wo_ln_rec.CU_QTY := wo_line_rec.CU_QTY;
2974 l_ce_wo_ln_rec.SRC_OP_SEQ_NUM := wo_line_rec.SRC_OP_SEQ_NUM;
2975 l_ce_wo_ln_rec.SRC_ACCT_CLASS_CODE := wo_line_rec.SRC_ACCT_CLASS_CODE;
2976 l_ce_wo_ln_rec.ESTIMATE_ID := wo_line_rec.ESTIMATE_ID;
2977 l_ce_wo_ln_rec.ORGANIZATION_ID := wo_line_rec.ORGANIZATION_ID;
2978 l_ce_wo_ln_rec.WORK_ORDER_SEQ_NUM := wo_line_rec.WORK_ORDER_SEQ_NUM;
2979 l_ce_wo_ln_rec.WORK_ORDER_NUMBER := wo_line_rec.WORK_ORDER_NUMBER;
2980 l_ce_wo_ln_rec.WORK_ORDER_DESCRIPTION := wo_line_rec.WORK_ORDER_DESCRIPTION;
2981 l_ce_wo_ln_rec.REF_WIP_ENTITY_ID := wo_line_rec.REF_WIP_ENTITY_ID;
2982 l_ce_wo_ln_rec.PRIMARY_ITEM_ID := wo_line_rec.PRIMARY_ITEM_ID;
2983 l_ce_wo_ln_rec.ACCT_CLASS_CODE := wo_line_rec.ACCT_CLASS_CODE;
2984 l_ce_wo_ln_rec.STATUS_TYPE := wo_line_rec.STATUS_TYPE;
2985 l_ce_wo_ln_rec.SCHEDULED_START_DATE := wo_line_rec.SCHEDULED_START_DATE;
2986 l_ce_wo_ln_rec.SCHEDULED_COMPLETION_DATE := wo_line_rec.SCHEDULED_COMPLETION_DATE;
2987 l_ce_wo_ln_rec.PROJECT_ID := wo_line_rec.PROJECT_ID;
2988 l_ce_wo_ln_rec.TASK_ID := wo_line_rec.TASK_ID;
2989 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_ID := wo_line_rec.MAINTENANCE_OBJECT_ID;
2990 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_TYPE := wo_line_rec.MAINTENANCE_OBJECT_TYPE;
2991 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_SOURCE := wo_line_rec.MAINTENANCE_OBJECT_SOURCE;
2992 l_ce_wo_ln_rec.OWNING_DEPARTMENT_ID := wo_line_rec.OWNING_DEPARTMENT_ID;
2993 l_ce_wo_ln_rec.USER_DEFINED_STATUS_ID := wo_line_rec.USER_DEFINED_STATUS_ID;
2994 l_ce_wo_ln_rec.OP_SEQ_NUM := wo_line_rec.OP_SEQ_NUM_DERIVED; --NVL(OP_SEQ_NUM, SRC_OP_SEQ_NUM)
2995 l_ce_wo_ln_rec.OP_DESCRIPTION := wo_line_rec.OP_DESCRIPTION;
2996 l_ce_wo_ln_rec.STANDARD_OPERATION_ID := wo_line_rec.STANDARD_OPERATION_ID;
2997 l_ce_wo_ln_rec.OP_DEPARTMENT_ID := wo_line_rec.OP_DEPARTMENT_ID;
2998 l_ce_wo_ln_rec.OP_LONG_DESCRIPTION := wo_line_rec.OP_LONG_DESCRIPTION;
2999 l_ce_wo_ln_rec.RES_SEQ_NUM := wo_line_rec.RES_SEQ_NUM;
3000 l_ce_wo_ln_rec.RES_ID := wo_line_rec.RES_ID;
3001 l_ce_wo_ln_rec.RES_UOM := wo_line_rec.RES_UOM;
3002 l_ce_wo_ln_rec.RES_BASIS_TYPE := wo_line_rec.RES_BASIS_TYPE;
3003 l_ce_wo_ln_rec.RES_USAGE_RATE_OR_AMOUNT := wo_line_rec.RES_USAGE_RATE_OR_AMOUNT;
3004 l_ce_wo_ln_rec.RES_REQUIRED_UNITS := wo_line_rec.RES_REQUIRED_UNITS;
3005 l_ce_wo_ln_rec.RES_ASSIGNED_UNITS := wo_line_rec.RES_ASSIGNED_UNITS;
3006 l_ce_wo_ln_rec.ITEM_TYPE := wo_line_rec.ITEM_TYPE;
3007 l_ce_wo_ln_rec.REQUIRED_QUANTITY := wo_line_rec.REQUIRED_QUANTITY;
3008 l_ce_wo_ln_rec.UNIT_PRICE := wo_line_rec.UNIT_PRICE;
3009 l_ce_wo_ln_rec.UOM := wo_line_rec.UOM;
3010 l_ce_wo_ln_rec.BASIS_TYPE := wo_line_rec.BASIS_TYPE;
3011 l_ce_wo_ln_rec.SUGGESTED_VENDOR_NAME := wo_line_rec.SUGGESTED_VENDOR_NAME;
3012 l_ce_wo_ln_rec.SUGGESTED_VENDOR_ID := wo_line_rec.SUGGESTED_VENDOR_ID;
3013 l_ce_wo_ln_rec.SUGGESTED_VENDOR_SITE := wo_line_rec.SUGGESTED_VENDOR_SITE;
3014 l_ce_wo_ln_rec.SUGGESTED_VENDOR_SITE_ID := wo_line_rec.SUGGESTED_VENDOR_SITE_ID;
3015 l_ce_wo_ln_rec.MAT_INVENTORY_ITEM_ID := wo_line_rec.MAT_INVENTORY_ITEM_ID;
3016 l_ce_wo_ln_rec.MAT_COMPONENT_SEQ_NUM := wo_line_rec.MAT_COMPONENT_SEQ_NUM;
3017 l_ce_wo_ln_rec.MAT_SUPPLY_SUBINVENTORY := wo_line_rec.MAT_SUPPLY_SUBINVENTORY;
3018 l_ce_wo_ln_rec.MAT_SUPPLY_LOCATOR_ID := wo_line_rec.MAT_SUPPLY_LOCATOR_ID;
3019 l_ce_wo_ln_rec.DI_AMOUNT := wo_line_rec.DI_AMOUNT;
3020 l_ce_wo_ln_rec.DI_ORDER_TYPE_LOOKUP_CODE := wo_line_rec.DI_ORDER_TYPE_LOOKUP_CODE;
3021 l_ce_wo_ln_rec.DI_DESCRIPTION := wo_line_rec.DI_DESCRIPTION;
3022 l_ce_wo_ln_rec.DI_PURCHASE_CATEGORY_ID := wo_line_rec.DI_PURCHASE_CATEGORY_ID;
3023 l_ce_wo_ln_rec.DI_AUTO_REQUEST_MATERIAL := wo_line_rec.DI_AUTO_REQUEST_MATERIAL;
3024 l_ce_wo_ln_rec.DI_NEED_BY_DATE := wo_line_rec.DI_NEED_BY_DATE;
3025 l_ce_wo_ln_rec.WORK_ORDER_LINE_COST := wo_line_rec.WO_LINE_PER_UNIT_COST;
3026 l_ce_wo_ln_rec.RES_SCHEDULED_FLAG := wo_line_rec.RES_SCHEDULED_FLAG;
3027 l_ce_wo_ln_rec.AVAILABLE_QUANTITY := wo_line_rec.ITEM_COMMENTS;
3028 l_ce_wo_ln_rec.ITEM_COMMENTS := wo_line_rec.ITEM_COMMENTS;
3029 l_ce_wo_ln_rec.CU_QTY := wo_line_rec.CU_QTY;
3030
3031 -- Addtl WO Details which are not in the defaults region must be set to null
3032 l_ce_wo_ln_rec.WORK_ORDER_TYPE := wo_line_rec.WORK_ORDER_TYPE;
3033 l_ce_wo_ln_rec.ACTIVITY_TYPE := wo_line_rec.ACTIVITY_TYPE;
3034 l_ce_wo_ln_rec.ACTIVITY_CAUSE := wo_line_rec.ACTIVITY_CAUSE;
3035 l_ce_wo_ln_rec.ACTIVITY_SOURCE := wo_line_rec.ACTIVITY_SOURCE;
3036
3037 x_ce_wo_ln_tbl(l_wo_ln_index) := l_ce_wo_ln_rec;
3038 END LOOP;
3039 ELSIF p_group_option = 'WIP Accounting Class' THEN
3040 --Populate x_ce_wo_ln_tbl
3041 l_wo_ln_index := 0;
3042 FOR wo_line_rec IN wip_acct_cur LOOP
3043 l_wo_ln_index := l_wo_ln_index + 1;
3044
3045 l_ce_wo_ln_rec.ESTIMATE_WORK_ORDER_LINE_ID := wo_line_rec.ESTIMATE_WORK_ORDER_LINE_ID;
3046 l_ce_wo_ln_rec.SRC_CU_ID := wo_line_rec.SRC_CU_ID;
3047 l_ce_wo_ln_rec.SRC_ACTIVITY_ID := wo_line_rec.SRC_ACTIVITY_ID;
3048 l_ce_wo_ln_rec.SRC_ACTIVITY_QTY := wo_line_rec.SRC_ACTIVITY_QTY;
3049 l_ce_wo_ln_rec.DIFFICULTY_ID := wo_line_rec.SRC_DIFFICULTY_ID;
3050 l_ce_wo_ln_rec.DIFFICULTY_QTY := wo_line_rec.DIFFICULTY_QTY;
3051 l_ce_wo_ln_rec.CU_QTY := wo_line_rec.CU_QTY;
3052 l_ce_wo_ln_rec.SRC_OP_SEQ_NUM := wo_line_rec.SRC_OP_SEQ_NUM;
3053 l_ce_wo_ln_rec.SRC_ACCT_CLASS_CODE := wo_line_rec.SRC_ACCT_CLASS_CODE;
3054 l_ce_wo_ln_rec.ESTIMATE_ID := wo_line_rec.ESTIMATE_ID;
3055 l_ce_wo_ln_rec.ORGANIZATION_ID := wo_line_rec.ORGANIZATION_ID;
3056 l_ce_wo_ln_rec.WORK_ORDER_SEQ_NUM := wo_line_rec.WORK_ORDER_SEQ_NUM;
3057 l_ce_wo_ln_rec.WORK_ORDER_NUMBER := wo_line_rec.WORK_ORDER_NUMBER;
3058 l_ce_wo_ln_rec.WORK_ORDER_DESCRIPTION := wo_line_rec.WORK_ORDER_DESCRIPTION;
3059 l_ce_wo_ln_rec.REF_WIP_ENTITY_ID := wo_line_rec.REF_WIP_ENTITY_ID;
3060 l_ce_wo_ln_rec.PRIMARY_ITEM_ID := wo_line_rec.PRIMARY_ITEM_ID;
3061 l_ce_wo_ln_rec.ACCT_CLASS_CODE := NVL(wo_line_rec.ACCT_CLASS_CODE, wo_line_rec.SRC_ACCT_CLASS_CODE);
3062 l_ce_wo_ln_rec.STATUS_TYPE := wo_line_rec.STATUS_TYPE;
3063 l_ce_wo_ln_rec.SCHEDULED_START_DATE := wo_line_rec.SCHEDULED_START_DATE;
3064 l_ce_wo_ln_rec.SCHEDULED_COMPLETION_DATE := wo_line_rec.SCHEDULED_COMPLETION_DATE;
3065 l_ce_wo_ln_rec.PROJECT_ID := wo_line_rec.PROJECT_ID;
3066 l_ce_wo_ln_rec.TASK_ID := wo_line_rec.TASK_ID;
3067 l_ce_wo_ln_rec.USER_DEFINED_STATUS_ID := wo_line_rec.USER_DEFINED_STATUS_ID;
3068 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_ID := wo_line_rec.MAINTENANCE_OBJECT_ID;
3069 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_TYPE := wo_line_rec.MAINTENANCE_OBJECT_TYPE;
3070 l_ce_wo_ln_rec.MAINTENANCE_OBJECT_SOURCE := wo_line_rec.MAINTENANCE_OBJECT_SOURCE;
3071 l_ce_wo_ln_rec.OWNING_DEPARTMENT_ID := wo_line_rec.OWNING_DEPARTMENT_ID;
3072 l_ce_wo_ln_rec.OP_SEQ_NUM := wo_line_rec.OP_SEQ_NUM_DERIVED; --NVL(OP_SEQ_NUM, SRC_OP_SEQ_NUM)
3073 l_ce_wo_ln_rec.OP_DESCRIPTION := wo_line_rec.OP_DESCRIPTION;
3074 l_ce_wo_ln_rec.STANDARD_OPERATION_ID := wo_line_rec.STANDARD_OPERATION_ID;
3075 l_ce_wo_ln_rec.OP_DEPARTMENT_ID := wo_line_rec.OP_DEPARTMENT_ID;
3076 l_ce_wo_ln_rec.OP_LONG_DESCRIPTION := wo_line_rec.OP_LONG_DESCRIPTION;
3077 l_ce_wo_ln_rec.RES_SEQ_NUM := wo_line_rec.RES_SEQ_NUM;
3078 l_ce_wo_ln_rec.RES_ID := wo_line_rec.RES_ID;
3079 l_ce_wo_ln_rec.RES_UOM := wo_line_rec.RES_UOM;
3080 l_ce_wo_ln_rec.RES_BASIS_TYPE := wo_line_rec.RES_BASIS_TYPE;
3081 l_ce_wo_ln_rec.RES_USAGE_RATE_OR_AMOUNT := wo_line_rec.RES_USAGE_RATE_OR_AMOUNT;
3082 l_ce_wo_ln_rec.RES_REQUIRED_UNITS := wo_line_rec.RES_REQUIRED_UNITS;
3083 l_ce_wo_ln_rec.RES_ASSIGNED_UNITS := wo_line_rec.RES_ASSIGNED_UNITS;
3084 l_ce_wo_ln_rec.ITEM_TYPE := wo_line_rec.ITEM_TYPE;
3085 l_ce_wo_ln_rec.REQUIRED_QUANTITY := wo_line_rec.REQUIRED_QUANTITY;
3086 l_ce_wo_ln_rec.UNIT_PRICE := wo_line_rec.UNIT_PRICE;
3087 l_ce_wo_ln_rec.UOM := wo_line_rec.UOM;
3088 l_ce_wo_ln_rec.BASIS_TYPE := wo_line_rec.BASIS_TYPE;
3089 l_ce_wo_ln_rec.SUGGESTED_VENDOR_NAME := wo_line_rec.SUGGESTED_VENDOR_NAME;
3090 l_ce_wo_ln_rec.SUGGESTED_VENDOR_ID := wo_line_rec.SUGGESTED_VENDOR_ID;
3091 l_ce_wo_ln_rec.SUGGESTED_VENDOR_SITE := wo_line_rec.SUGGESTED_VENDOR_SITE;
3092 l_ce_wo_ln_rec.SUGGESTED_VENDOR_SITE_ID := wo_line_rec.SUGGESTED_VENDOR_SITE_ID;
3093 l_ce_wo_ln_rec.MAT_INVENTORY_ITEM_ID := wo_line_rec.MAT_INVENTORY_ITEM_ID;
3094 l_ce_wo_ln_rec.MAT_COMPONENT_SEQ_NUM := wo_line_rec.MAT_COMPONENT_SEQ_NUM;
3095 l_ce_wo_ln_rec.MAT_SUPPLY_SUBINVENTORY := wo_line_rec.MAT_SUPPLY_SUBINVENTORY;
3096 l_ce_wo_ln_rec.MAT_SUPPLY_LOCATOR_ID := wo_line_rec.MAT_SUPPLY_LOCATOR_ID;
3097 l_ce_wo_ln_rec.DI_AMOUNT := wo_line_rec.DI_AMOUNT;
3098 l_ce_wo_ln_rec.DI_ORDER_TYPE_LOOKUP_CODE := wo_line_rec.DI_ORDER_TYPE_LOOKUP_CODE;
3099 l_ce_wo_ln_rec.DI_DESCRIPTION := wo_line_rec.DI_DESCRIPTION;
3100 l_ce_wo_ln_rec.DI_PURCHASE_CATEGORY_ID := wo_line_rec.DI_PURCHASE_CATEGORY_ID;
3101 l_ce_wo_ln_rec.DI_AUTO_REQUEST_MATERIAL := wo_line_rec.DI_AUTO_REQUEST_MATERIAL;
3102 l_ce_wo_ln_rec.DI_NEED_BY_DATE := wo_line_rec.DI_NEED_BY_DATE;
3103 l_ce_wo_ln_rec.WORK_ORDER_LINE_COST := wo_line_rec.WO_LINE_PER_UNIT_COST;
3104 l_ce_wo_ln_rec.RES_SCHEDULED_FLAG := wo_line_rec.RES_SCHEDULED_FLAG;
3105 l_ce_wo_ln_rec.AVAILABLE_QUANTITY := wo_line_rec.ITEM_COMMENTS;
3106 l_ce_wo_ln_rec.ITEM_COMMENTS := wo_line_rec.ITEM_COMMENTS;
3107 l_ce_wo_ln_rec.CU_QTY := wo_line_rec.CU_QTY;
3108
3109 -- Addtl WO Details which are not in the defaults region must be set to null
3110 l_ce_wo_ln_rec.WORK_ORDER_TYPE := wo_line_rec.WORK_ORDER_TYPE;
3111 l_ce_wo_ln_rec.ACTIVITY_TYPE := wo_line_rec.ACTIVITY_TYPE;
3112 l_ce_wo_ln_rec.ACTIVITY_CAUSE := wo_line_rec.ACTIVITY_CAUSE;
3113 l_ce_wo_ln_rec.ACTIVITY_SOURCE := wo_line_rec.ACTIVITY_SOURCE;
3114
3115 x_ce_wo_ln_tbl(l_wo_ln_index) := l_ce_wo_ln_rec;
3116 END LOOP;
3117 ELSE
3118 --Unsupported group option
3119 FND_MESSAGE.SET_NAME('EAM','EAM_UNSUPPORTED_GROUP_OPTION');
3120 FND_MESSAGE.SET_TOKEN('OPTION', p_group_option);
3121 FND_MSG_PUB.ADD;
3122 RAISE FND_API.G_EXC_ERROR;
3123 END IF;
3124 END GET_CE_WO_LNS_BY_GROUP_OPT;
3125
3126 --This is a private procedure, it takes a wo defaults record and a list of wo
3127 --lines for a particular construction estimate, and it sets the values for the
3128 --wo lines based on the wo defaults and the group option in the wo defaults.
3129 --This procedure does not do any error handling, but it may throw error, thus
3130 --the calling procedure should have logic in place to catch possible error thrown
3131 --from this procedure.
3132 PROCEDURE SET_WO_LNS_FROM_WO_DEFAULTS(
3133 p_ce_wo_defaults IN EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WO_DEFAULTS_REC,
3134 p_group_option IN VARCHAR2,
3135 px_ce_wo_ln_tbl IN OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL
3136 )
3137 IS
3138 BEGIN
3139 IF px_ce_wo_ln_tbl.COUNT > 0 THEN
3140 FOR i IN px_ce_wo_ln_tbl.FIRST..px_ce_wo_ln_tbl.LAST LOOP
3141 IF p_group_option = 'None' THEN
3142 --NULL out everything
3143 px_ce_wo_ln_tbl(i).WORK_ORDER_NUMBER := NULL;
3144 px_ce_wo_ln_tbl(i).SCHEDULED_START_DATE := NULL;
3145 px_ce_wo_ln_tbl(i).SCHEDULED_COMPLETION_DATE := NULL;
3146 px_ce_wo_ln_tbl(i).USER_DEFINED_STATUS_ID := NULL;
3147 px_ce_wo_ln_tbl(i).WORK_ORDER_DESCRIPTION := NULL;
3148 px_ce_wo_ln_tbl(i).PROJECT_ID := NULL;
3149 px_ce_wo_ln_tbl(i).TASK_ID := NULL;
3150 px_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_ID := NULL;
3151 px_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_TYPE := NULL;
3152 px_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_SOURCE := NULL;
3153 --px_ce_wo_ln_tbl(i).ACCT_CLASS_CODE := NULL;
3154 ELSE
3155 --Always use the value of SCHEDULED_START_DATE, SCHEDULED_COMPLETION_DATE, USER_DEFINED_STATUS_ID,
3156 --WORK_ORDER_DESCRIPTION, PROJECT_ID, TASK_ID, MAINTENANCE_OBJECT_ID, MAINTENANCE_OBJECT_TYPE
3157 --and MAINTENANCE_OBJECT_SOURCE passed in
3158 px_ce_wo_ln_tbl(i).WORK_ORDER_NUMBER := NULL;
3159 px_ce_wo_ln_tbl(i).SCHEDULED_START_DATE := p_ce_wo_defaults.SCHEDULED_START_DATE;
3160 px_ce_wo_ln_tbl(i).SCHEDULED_COMPLETION_DATE := p_ce_wo_defaults.SCHEDULED_COMPLETION_DATE;
3161 px_ce_wo_ln_tbl(i).USER_DEFINED_STATUS_ID := p_ce_wo_defaults.USER_DEFINED_STATUS_ID;
3162 px_ce_wo_ln_tbl(i).WORK_ORDER_DESCRIPTION := p_ce_wo_defaults.WORK_ORDER_DESCRIPTION;
3163 px_ce_wo_ln_tbl(i).PROJECT_ID := p_ce_wo_defaults.PROJECT_ID;
3164 px_ce_wo_ln_tbl(i).TASK_ID := p_ce_wo_defaults.TASK_ID;
3165 px_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_ID := p_ce_wo_defaults.MAINTENANCE_OBJECT_ID;
3166 px_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_TYPE := p_ce_wo_defaults.MAINTENANCE_OBJECT_TYPE;
3167 px_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_SOURCE := p_ce_wo_defaults.MAINTENANCE_OBJECT_SOURCE;
3168 IF (p_ce_wo_defaults.ACCT_CLASS_CODE IS NOT NULL) THEN
3169 px_ce_wo_ln_tbl(i).ACCT_CLASS_CODE := p_ce_wo_defaults.ACCT_CLASS_CODE;
3170 END IF;
3171
3172 IF p_group_option = 'Single Work Order' THEN
3173 --Only copy WORK_ORDER_NUMBER for group option 'Single Work Order'
3174 px_ce_wo_ln_tbl(i).WORK_ORDER_NUMBER := p_ce_wo_defaults.DEFAULT_WORK_ORDER_NUMBER;
3175 ELSIF p_group_option <> 'WIP Accounting Class'
3176 AND p_group_option <> 'Activity'
3177 AND p_group_option <> 'Construction Unit' THEN
3178 --Unsupported group option
3179 FND_MESSAGE.SET_NAME('EAM','EAM_UNSUPPORTED_GROUP_OPTION');
3180 FND_MESSAGE.SET_TOKEN('OPTION', p_group_option);
3181 FND_MSG_PUB.ADD;
3182 RAISE FND_API.G_EXC_ERROR;
3183 END IF;
3184 END IF;
3185 END LOOP;
3186 END IF;
3187 END SET_WO_LNS_FROM_WO_DEFAULTS;
3188
3189 --This is a private procedure, it takes a sorted list of wo lines as input,
3190 --then resolves the work_order_seq_num and op_seq_num contention based on
3191 --the p_group_option parameter. The work_order_seq_num starts from 1 in increment
3192 --of 1, and the op_seq_num starts from 10 in increment of 10.
3193 --This procedure does not do any error handling, but it may throw error, thus
3194 --the calling procedure should have logic in place to catch possible error thrown
3195 --from this procedure.
3196 PROCEDURE RESOLVE_SORT_CONTENTION(
3197 p_group_option IN VARCHAR2,
3198 px_ce_wo_ln_tbl IN OUT NOCOPY EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL
3199 )
3200 IS
3201 l_new_wo_seq_num NUMBER;
3202 l_new_op_seq_num NUMBER;
3203 l_tmp_cu_id NUMBER;
3204 l_tmp_actvity_id NUMBER;
3205 l_tmp_op_seq_num NUMBER;
3206 l_tmp_acct_class_code VARCHAR2(10);
3207 BEGIN
3208 IF px_ce_wo_ln_tbl.COUNT > 0 THEN
3209 FOR i IN px_ce_wo_ln_tbl.FIRST..px_ce_wo_ln_tbl.LAST LOOP
3210 IF p_group_option = 'Single Work Order' THEN
3211 IF i = 1 THEN
3212 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3213 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3214 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3215
3216 l_new_wo_seq_num := 1;
3217 l_new_op_seq_num := 10;
3218 ELSE
3219 IF (NVL(l_tmp_cu_id, 0) = NVL(px_ce_wo_ln_tbl(i).SRC_CU_ID, 0)) THEN
3220 --Same CU as the last wo line
3221 IF (l_tmp_actvity_id = px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID) THEN
3222 --Same activity as the last wo line
3223 IF (l_tmp_op_seq_num <> px_ce_wo_ln_tbl(i).OP_SEQ_NUM) THEN
3224 --Different op_seq_num as the last wo line
3225 --Update l_tmp_op_seq_num with new op_seq_num
3226 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3227 --Increase l_new_op_seq_num by 10
3228 l_new_op_seq_num := l_new_op_seq_num + 10;
3229 END IF;
3230 ELSE
3231 --Different activity as the last wo line
3232 --Update l_tmp_actvity_id and l_tmp_op_seq_num
3233 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3234 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3235 --Increase l_new_op_seq_num by 10
3236 l_new_op_seq_num := l_new_op_seq_num + 10;
3237 END IF;
3238 ELSE
3239 --Different CU as the last wo line
3240 --Update l_tmp_cu_id, l_tmp_actvity_id and l_tmp_op_seq_num
3241 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3242 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3243 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3244 --Increase l_new_op_seq_num by 10
3245 l_new_op_seq_num := l_new_op_seq_num + 10;
3246 END IF;
3247 END IF;
3248
3249 --Set new values for work_order_seq_num and op_seq_num
3250 px_ce_wo_ln_tbl(i).WORK_ORDER_SEQ_NUM := l_new_wo_seq_num;
3251 px_ce_wo_ln_tbl(i).OP_SEQ_NUM := l_new_op_seq_num;
3252 ELSIF p_group_option = 'Construction Unit' THEN
3253 IF i = 1 THEN
3254 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3255 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3256 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3257
3258 l_new_wo_seq_num := 1;
3259 l_new_op_seq_num := 10;
3260 ELSE
3261 IF (NVL(l_tmp_cu_id, 0) = NVL(px_ce_wo_ln_tbl(i).SRC_CU_ID, 0)) THEN
3262 --Same CU as the last wo line
3263 IF (l_tmp_actvity_id = px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID) THEN
3264 --Same activity as the last wo line
3265 IF (l_tmp_op_seq_num <> px_ce_wo_ln_tbl(i).OP_SEQ_NUM) THEN
3266 --Different op_seq_num as the last wo line
3267 --Update l_tmp_op_seq_num with new op_seq_num
3268 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3269 --Increase l_new_op_seq_num by 10
3270 l_new_op_seq_num := l_new_op_seq_num + 10;
3271 END IF;
3272 ELSE
3273 --Different activity as the last wo line
3274 --Update l_tmp_actvity_id and l_tmp_op_seq_num
3275 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3276 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3277 --Increase l_new_op_seq_num by 10
3278 l_new_op_seq_num := l_new_op_seq_num + 10;
3279 END IF;
3280 ELSE
3281 --Different CU as the last wo line
3282 --Update l_tmp_cu_id, l_tmp_actvity_id and l_tmp_op_seq_num
3283 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3284 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3285 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3286 --Increase l_new_wo_seq_num by 1
3287 --Reset l_new_op_seq_num to 10
3288 l_new_wo_seq_num := l_new_wo_seq_num + 1;
3289 l_new_op_seq_num := 10;
3290 END IF;
3291 END IF;
3292
3293 --Set new values for work_order_seq_num and op_seq_num
3294 px_ce_wo_ln_tbl(i).WORK_ORDER_SEQ_NUM := l_new_wo_seq_num;
3295 px_ce_wo_ln_tbl(i).OP_SEQ_NUM := l_new_op_seq_num;
3296 ELSIF p_group_option = 'Activity' THEN
3297 IF i = 1 THEN
3298 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3299 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3300 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3301
3302 l_new_wo_seq_num := 1;
3303 l_new_op_seq_num := 10;
3304 ELSE
3305 IF (NVL(l_tmp_cu_id, 0) = NVL(px_ce_wo_ln_tbl(i).SRC_CU_ID, 0)) THEN
3306 --Same CU as the last wo line
3307 IF (l_tmp_actvity_id = px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID) THEN
3308 --Same activity as the last wo line
3309 IF (l_tmp_op_seq_num <> px_ce_wo_ln_tbl(i).OP_SEQ_NUM) THEN
3310 --Different op_seq_num as the last wo line
3311 --Update l_tmp_op_seq_num with new op_seq_num
3312 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3313 --Increase l_new_op_seq_num by 10
3314 l_new_op_seq_num := l_new_op_seq_num + 10;
3315 END IF;
3316 ELSE
3317 --Different activity as the last wo line
3318 --Update l_tmp_actvity_id and l_tmp_op_seq_num
3319 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3320 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3321 --Increase l_new_wo_seq_num by 1
3322 --Reset l_new_op_seq_num to 10
3323 l_new_wo_seq_num := l_new_wo_seq_num + 1;
3324 l_new_op_seq_num := 10;
3325 END IF;
3326 ELSE
3327 --Different CU as the last wo line
3328 --Update l_tmp_cu_id, l_tmp_actvity_id and l_tmp_op_seq_num
3329 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3330 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3331 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3332 --Increase l_new_wo_seq_num by 1
3333 --Reset l_new_op_seq_num to 10
3334 l_new_wo_seq_num := l_new_wo_seq_num + 1;
3335 l_new_op_seq_num := 10;
3336 END IF;
3337 END IF;
3338
3339 --Set new values for work_order_seq_num and op_seq_num
3340 px_ce_wo_ln_tbl(i).WORK_ORDER_SEQ_NUM := l_new_wo_seq_num;
3341 px_ce_wo_ln_tbl(i).OP_SEQ_NUM := l_new_op_seq_num;
3342 ELSIF p_group_option = 'WIP Accounting Class' THEN
3343 IF i = 1 THEN
3344 l_tmp_acct_class_code := NVL(px_ce_wo_ln_tbl(i).ACCT_CLASS_CODE, 'DEFAULT');
3345 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3346 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3347 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3348
3349 l_new_wo_seq_num := 1;
3350 l_new_op_seq_num := 10;
3351 ELSE
3352 IF (NVL(l_tmp_acct_class_code, 'DEFAULT') = NVL(px_ce_wo_ln_tbl(i).ACCT_CLASS_CODE, 'DEFAULT')) THEN
3353 --Same WIP accounting class code as the last wo line
3354 IF (NVL(l_tmp_cu_id, 0) = NVL(px_ce_wo_ln_tbl(i).SRC_CU_ID, 0)) THEN
3355 --Same CU as the last wo line
3356 IF (l_tmp_actvity_id = px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID) THEN
3357 --Same activity as the last wo line
3358 IF (l_tmp_op_seq_num <> px_ce_wo_ln_tbl(i).OP_SEQ_NUM) THEN
3359 --Different op_seq_num as the last wo line
3360 --Update l_tmp_op_seq_num with new op_seq_num
3361 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3362 --Increase l_new_op_seq_num by 10
3363 l_new_op_seq_num := l_new_op_seq_num + 10;
3364 END IF;
3365 ELSE
3366 --Different activity as the last wo line
3367 --Update l_tmp_actvity_id and l_tmp_op_seq_num
3368 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3369 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3370 --Increase l_new_op_seq_num by 10
3371 l_new_op_seq_num := l_new_op_seq_num + 10;
3372 END IF;
3373 ELSE
3374 --Different CU as the last wo line
3375 --Update l_tmp_cu_id, l_tmp_actvity_id and l_tmp_op_seq_num
3376 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3377 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3378 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3379 --Increase l_new_op_seq_num by 10
3380 l_new_op_seq_num := l_new_op_seq_num + 10;
3381 END IF;
3382 ELSE
3383 --Different WIP accounting class code as the last wo line
3384 --Update l_tmp_acct_class_code, l_tmp_cu_id, l_tmp_actvity_id and l_tmp_op_seq_num
3385 l_tmp_acct_class_code := px_ce_wo_ln_tbl(i).ACCT_CLASS_CODE;
3386 l_tmp_cu_id := px_ce_wo_ln_tbl(i).SRC_CU_ID;
3387 l_tmp_actvity_id := px_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID;
3388 l_tmp_op_seq_num := px_ce_wo_ln_tbl(i).OP_SEQ_NUM;
3389 --Increase l_new_wo_seq_num by 1
3390 --Reset l_new_op_seq_num to 10
3391 l_new_wo_seq_num := l_new_wo_seq_num + 1;
3392 l_new_op_seq_num := 10;
3393 END IF;
3394 END IF;
3395
3396 --Set new values for work_order_seq_num and op_seq_num
3397 px_ce_wo_ln_tbl(i).WORK_ORDER_SEQ_NUM := l_new_wo_seq_num;
3398 px_ce_wo_ln_tbl(i).OP_SEQ_NUM := l_new_op_seq_num;
3399 ELSIF p_group_option = 'None' THEN
3400 --NULL out work_order_seq_num and op_seq_num
3401 px_ce_wo_ln_tbl(i).WORK_ORDER_SEQ_NUM := NULL;
3402 --px_ce_wo_ln_tbl(i).OP_SEQ_NUM := NULL;
3403 ELSE
3404 --Unsupported group option
3405 FND_MESSAGE.SET_NAME('EAM','EAM_UNSUPPORTED_GROUP_OPTION');
3406 FND_MESSAGE.SET_TOKEN('OPTION', p_group_option);
3407 FND_MSG_PUB.ADD;
3408 RAISE FND_API.G_EXC_ERROR;
3409 END IF;
3410 END LOOP;
3411 END IF;
3412 END RESOLVE_SORT_CONTENTION;
3413
3414 PROCEDURE UPDATE_CE_WO_LNS_BY_GROUP_OPT(
3415 p_api_version IN NUMBER,
3416 p_commit IN VARCHAR2,
3417 p_init_msg_list IN VARCHAR2,
3418 p_validation_level IN NUMBER,
3419 p_ce_wo_defaults IN EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WO_DEFAULTS_REC,
3420 x_return_status OUT NOCOPY VARCHAR2,
3421 x_msg_count OUT NOCOPY NUMBER,
3422 x_msg_data OUT NOCOPY VARCHAR2
3423 )
3424 IS
3425 --Note: When order by a column, all rows with that column having the value of NULL
3426 --would come last in the sorted list
3427
3428 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_CE_WO_LNS_BY_GROUP_OPT';
3429 l_api_version CONSTANT NUMBER := 1.0;
3430 l_debug_filename VARCHAR(50) := G_DEBUG_FILENAME;
3431 l_debug VARCHAR2(1) := 'N';
3432 l_group_option VARCHAR2(80);
3433 l_ce_wo_ln_tbl EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_TBL;
3434 BEGIN
3435 SAVEPOINT UPDATE_CE_WO_LNS_BY_GROUP_OPT;
3436
3437 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
3438 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3439 END IF;
3440
3441 --Initialize message list if p_init_msg_list is set to TRUE.
3442 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
3443 FND_MSG_PUB.INITIALIZE;
3444 END IF;
3445
3446 --Initialize API return status to success
3447 x_return_status := FND_API.G_RET_STS_SUCCESS;
3448
3449 INIT_DEBUG(
3450 p_init_msg_list => p_init_msg_list,
3451 p_debug_filename => l_debug_filename,
3452 p_debug_file_mode => 'W',
3453 p_debug => l_debug);
3454
3455 IF (l_debug = 'Y') THEN
3456 DEBUG('UPDATE_CE_WO_LNS_BY_GROUP_OPT ' ||
3457 p_api_version ||'-'||
3458 p_commit ||'-'||
3459 p_init_msg_list ||'-'||
3460 p_validation_level);
3461 DEBUG('DUMP EAM_CE_WO_DEFAULTS_REC');
3462 DEBUG(' ESTIMATE_ID : ' || p_ce_wo_defaults.ESTIMATE_ID);
3463 DEBUG(' DEFAULT_WORK_ORDER_NUMBER : ' || p_ce_wo_defaults.DEFAULT_WORK_ORDER_NUMBER);
3464 DEBUG(' ORGANIZATION_ID : ' || p_ce_wo_defaults.ORGANIZATION_ID);
3465 DEBUG(' ASSET_GROUP_ID : ' || p_ce_wo_defaults.ASSET_GROUP_ID);
3466 DEBUG(' ASSET_NUMBER : ' || p_ce_wo_defaults.ASSET_NUMBER);
3467 DEBUG(' MAINTENANCE_OBJECT_ID : ' || p_ce_wo_defaults.MAINTENANCE_OBJECT_ID);
3468 DEBUG(' MAINTENANCE_OBJECT_TYPE : ' || p_ce_wo_defaults.MAINTENANCE_OBJECT_TYPE);
3469 DEBUG(' MAINTENANCE_OBJECT_SOURCE : ' || p_ce_wo_defaults.MAINTENANCE_OBJECT_SOURCE);
3470 DEBUG(' WORK_ORDER_DESCRIPTION : ' || p_ce_wo_defaults.WORK_ORDER_DESCRIPTION);
3471 DEBUG(' ACCT_CLASS_CODE : ' || p_ce_wo_defaults.ACCT_CLASS_CODE);
3472 DEBUG(' PROJECT_ID : ' || p_ce_wo_defaults.PROJECT_ID);
3473 DEBUG(' TASK_ID : ' || p_ce_wo_defaults.TASK_ID);
3474 DEBUG(' SCHEDULED_START_DATE : ' || p_ce_wo_defaults.SCHEDULED_START_DATE);
3475 DEBUG(' SCHEDULED_COMPLETION_DATE : ' || p_ce_wo_defaults.SCHEDULED_COMPLETION_DATE);
3476 DEBUG(' USER_DEFINED_STATUS_ID : ' || p_ce_wo_defaults.USER_DEFINED_STATUS_ID);
3477 DEBUG(' GROUPING_OPTION : ' || p_ce_wo_defaults.GROUPING_OPTION);
3478 END IF;
3479
3480 BEGIN
3481 SELECT MEANING
3482 INTO l_group_option
3483 FROM MFG_LOOKUPS
3484 WHERE LOOKUP_TYPE = 'CONSTRUCTION_GROUP_OPTIONS'
3485 AND ENABLED_FLAG = 'Y'
3486 AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE-1)
3487 AND NVL(END_DATE_ACTIVE, SYSDATE+1)
3488 AND LOOKUP_CODE = p_ce_wo_defaults.GROUPING_OPTION;
3489 EXCEPTION
3490 WHEN OTHERS THEN
3491 --Unsupported group option
3492 FND_MESSAGE.SET_NAME('EAM','EAM_ERROR_DERIVE_GROUP_OPTION');
3493 FND_MESSAGE.SET_TOKEN('OPTION_ID', p_ce_wo_defaults.GROUPING_OPTION);
3494 FND_MSG_PUB.ADD;
3495 RAISE FND_API.G_EXC_ERROR;
3496 END;
3497
3498 IF l_group_option = 'None'
3499 OR l_group_option = 'Activity'
3500 OR l_group_option = 'Construction Unit'
3501 OR l_group_option = 'Single Work Order'
3502 OR l_group_option = 'WIP Accounting Class'
3503 THEN
3504 --First retrive the wo lines for this estimate in the order specified by the group option
3505 GET_CE_WO_LNS_BY_GROUP_OPT(
3506 p_ce_id => p_ce_wo_defaults.ESTIMATE_ID,
3507 p_group_option => l_group_option,
3508 x_ce_wo_ln_tbl => l_ce_wo_ln_tbl);
3509
3510 IF l_ce_wo_ln_tbl.COUNT > 0 THEN
3511 SET_WO_LNS_FROM_WO_DEFAULTS(
3512 p_ce_wo_defaults => p_ce_wo_defaults,
3513 p_group_option => l_group_option,
3514 px_ce_wo_ln_tbl => l_ce_wo_ln_tbl);
3515
3516 RESOLVE_SORT_CONTENTION(
3517 p_group_option => l_group_option,
3518 px_ce_wo_ln_tbl => l_ce_wo_ln_tbl);
3519 END IF;
3520 ELSE
3521 --Unsupported group option
3522 FND_MESSAGE.SET_NAME('EAM','EAM_UNSUPPORTED_GROUP_OPTION');
3523 FND_MESSAGE.SET_TOKEN('OPTION', l_group_option);
3524 FND_MSG_PUB.ADD;
3525 RAISE FND_API.G_EXC_ERROR;
3526 END IF;
3527
3528 --Now update the wo lines
3529 IF l_ce_wo_ln_tbl.COUNT > 0 THEN
3530 FOR i IN l_ce_wo_ln_tbl.FIRST..l_ce_wo_ln_tbl.LAST LOOP
3531 EAM_CE_WORK_ORDER_LINES_PKG.UPDATE_ROW(
3532 p_estimate_work_order_line_id => l_ce_wo_ln_tbl(i).ESTIMATE_WORK_ORDER_LINE_ID,
3533 p_estimate_work_order_id => FND_API.G_MISS_NUM,
3534 p_src_cu_id => l_ce_wo_ln_tbl(i).SRC_CU_ID,
3535 p_src_activity_id => l_ce_wo_ln_tbl(i).SRC_ACTIVITY_ID,
3536 p_src_activity_qty => l_ce_wo_ln_tbl(i).SRC_ACTIVITY_QTY,
3537 p_src_op_seq_num => l_ce_wo_ln_tbl(i).SRC_OP_SEQ_NUM,
3538 p_src_acct_class_code => l_ce_wo_ln_tbl(i).SRC_ACCT_CLASS_CODE,
3539 p_src_diff_id => l_ce_wo_ln_tbl(i).DIFFICULTY_ID,
3540 p_diff_qty => l_ce_wo_ln_tbl(i).DIFFICULTY_QTY,
3541 p_estimate_id => l_ce_wo_ln_tbl(i).ESTIMATE_ID,
3542 p_organization_id => l_ce_wo_ln_tbl(i).ORGANIZATION_ID,
3543 p_work_order_seq_num => l_ce_wo_ln_tbl(i).WORK_ORDER_SEQ_NUM,
3544 p_work_order_number => l_ce_wo_ln_tbl(i).WORK_ORDER_NUMBER,
3545 p_work_order_description => l_ce_wo_ln_tbl(i).WORK_ORDER_DESCRIPTION,
3546 p_ref_wip_entity_id => l_ce_wo_ln_tbl(i).REF_WIP_ENTITY_ID,
3547 p_primary_item_id => l_ce_wo_ln_tbl(i).PRIMARY_ITEM_ID,
3548 p_status_type => l_ce_wo_ln_tbl(i).STATUS_TYPE,
3549 p_acct_class_code => l_ce_wo_ln_tbl(i).ACCT_CLASS_CODE,
3550 p_scheduled_start_date => l_ce_wo_ln_tbl(i).SCHEDULED_START_DATE,
3551 p_scheduled_completion_date => l_ce_wo_ln_tbl(i).SCHEDULED_COMPLETION_DATE,
3552 p_project_id => l_ce_wo_ln_tbl(i).PROJECT_ID,
3553 p_task_id => l_ce_wo_ln_tbl(i).TASK_ID,
3554 p_maintenance_object_id => l_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_ID,
3555 p_maintenance_object_type => l_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_TYPE,
3556 p_maintenance_object_source => l_ce_wo_ln_tbl(i).MAINTENANCE_OBJECT_SOURCE,
3557 p_owning_department_id => l_ce_wo_ln_tbl(i).OWNING_DEPARTMENT_ID,
3558 p_user_defined_status_id => l_ce_wo_ln_tbl(i).USER_DEFINED_STATUS_ID,
3559 p_op_seq_num => l_ce_wo_ln_tbl(i).OP_SEQ_NUM,
3560 p_op_description => l_ce_wo_ln_tbl(i).OP_DESCRIPTION,
3561 p_standard_operation_id => l_ce_wo_ln_tbl(i).STANDARD_OPERATION_ID,
3562 p_op_department_id => l_ce_wo_ln_tbl(i).OP_DEPARTMENT_ID,
3563 p_op_long_description => l_ce_wo_ln_tbl(i).OP_LONG_DESCRIPTION,
3564 p_res_seq_num => l_ce_wo_ln_tbl(i).RES_SEQ_NUM,
3565 p_res_id => l_ce_wo_ln_tbl(i).RES_ID,
3566 p_res_uom => l_ce_wo_ln_tbl(i).RES_UOM,
3567 p_res_basis_type => l_ce_wo_ln_tbl(i).RES_BASIS_TYPE,
3568 p_res_usage_rate_or_amount => l_ce_wo_ln_tbl(i).RES_USAGE_RATE_OR_AMOUNT,
3569 p_res_required_units => l_ce_wo_ln_tbl(i).RES_REQUIRED_UNITS,
3570 p_res_assigned_units => l_ce_wo_ln_tbl(i).RES_ASSIGNED_UNITS,
3571 p_item_type => l_ce_wo_ln_tbl(i).ITEM_TYPE,
3572 p_required_quantity => l_ce_wo_ln_tbl(i).REQUIRED_QUANTITY,
3573 p_unit_price => l_ce_wo_ln_tbl(i).UNIT_PRICE,
3574 p_uom => l_ce_wo_ln_tbl(i).UOM,
3575 p_basis_type => l_ce_wo_ln_tbl(i).BASIS_TYPE,
3576 p_suggested_vendor_name => l_ce_wo_ln_tbl(i).SUGGESTED_VENDOR_NAME,
3577 p_suggested_vendor_id => l_ce_wo_ln_tbl(i).SUGGESTED_VENDOR_ID,
3578 p_suggested_vendor_site => l_ce_wo_ln_tbl(i).SUGGESTED_VENDOR_SITE,
3579 p_suggested_vendor_site_id => l_ce_wo_ln_tbl(i).SUGGESTED_VENDOR_SITE_ID,
3580 p_mat_inventory_item_id => l_ce_wo_ln_tbl(i).MAT_INVENTORY_ITEM_ID,
3581 p_mat_component_seq_num => l_ce_wo_ln_tbl(i).MAT_COMPONENT_SEQ_NUM,
3582 p_mat_supply_subinventory => l_ce_wo_ln_tbl(i).MAT_SUPPLY_SUBINVENTORY,
3583 p_mat_supply_locator_id => l_ce_wo_ln_tbl(i).MAT_SUPPLY_LOCATOR_ID,
3584 p_di_amount => l_ce_wo_ln_tbl(i).DI_AMOUNT,
3585 p_di_order_type_lookup_code => l_ce_wo_ln_tbl(i).DI_ORDER_TYPE_LOOKUP_CODE,
3586 p_di_description => l_ce_wo_ln_tbl(i).DI_DESCRIPTION,
3587 p_di_purchase_category_id => l_ce_wo_ln_tbl(i).DI_PURCHASE_CATEGORY_ID,
3588 p_di_auto_request_material => l_ce_wo_ln_tbl(i).DI_AUTO_REQUEST_MATERIAL,
3589 p_di_need_by_date => l_ce_wo_ln_tbl(i).DI_NEED_BY_DATE,
3590 p_work_order_line_cost => l_ce_wo_ln_tbl(i).WORK_ORDER_LINE_COST,
3591 p_creation_date => FND_API.G_MISS_DATE,
3592 p_created_by => FND_API.G_MISS_NUM,
3593 p_last_update_date => SYSDATE,
3594 p_last_updated_by => FND_GLOBAL.USER_ID,
3595 p_last_update_login => FND_GLOBAL.USER_ID
3596 ,p_work_order_type => l_ce_wo_ln_tbl(i).WORK_ORDER_TYPE
3597 ,p_activity_type => l_ce_wo_ln_tbl(i).ACTIVITY_TYPE
3598 ,p_activity_source => l_ce_wo_ln_tbl(i).ACTIVITY_SOURCE
3599 ,p_activity_cause => l_ce_wo_ln_tbl(i).ACTIVITY_CAUSE
3600 ,p_available_qty => l_ce_wo_ln_tbl(i).AVAILABLE_QUANTITY
3601 ,p_item_comments => l_ce_wo_ln_tbl(i).ITEM_COMMENTS
3602 ,p_cu_qty => l_ce_wo_ln_tbl(i).CU_QTY
3603 ,p_res_sch_flag => l_ce_wo_ln_tbl(i).RES_SCHEDULED_FLAG);
3604 END LOOP;
3605 END IF;
3606
3607 IF p_commit = FND_API.G_TRUE THEN
3608 COMMIT;
3609 END IF;
3610 EXCEPTION
3611 WHEN FND_API.G_EXC_ERROR THEN
3612 ROLLBACK TO UPDATE_CE_WO_LNS_BY_GROUP_OPT;
3613 x_return_status := FND_API.G_RET_STS_ERROR;
3614 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
3615 p_count => x_msg_count,
3616 p_data => x_msg_data);
3617 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3618 ROLLBACK TO UPDATE_CE_WO_LNS_BY_GROUP_OPT;
3619 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3620 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
3621 p_count => x_msg_count,
3622 p_data => x_msg_data);
3623 WHEN OTHERS THEN
3624 ROLLBACK TO UPDATE_CE_WO_LNS_BY_GROUP_OPT;
3625 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3626 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3627 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
3628 END IF;
3629 FND_MSG_PUB.Count_And_Get(p_encoded => 'F',
3630 p_count => x_msg_count,
3631 p_data => x_msg_data);
3632 END UPDATE_CE_WO_LNS_BY_GROUP_OPT;
3633
3634 PROCEDURE CREATE_CU_WORKORDERS(
3635 p_api_version IN NUMBER := 1.0
3636 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3637 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
3638 ,p_estimate_id IN NUMBER
3639 ,x_return_status OUT NOCOPY VARCHAR2
3640 ,x_msg_count OUT NOCOPY NUMBER
3641 ,x_msg_data OUT NOCOPY VARCHAR2
3642 ,p_organization_id IN NUMBER
3643 ,p_debug_filename IN VARCHAR2 := 'EAM_CU_DEBUG.log'
3644 ,p_debug_file_mode IN VARCHAR2 := 'w'
3645 )
3646
3647 IS
3648
3649 l_api_name CONSTANT VARCHAR(30) := 'create_cu_workorders';
3650 l_api_version CONSTANT NUMBER := 1.0;
3651 l_return_status VARCHAR2(250);
3652 l_stmt_num NUMBER := 0;
3653
3654 l_wo_seq_exists NUMBER := 0;
3655 l_wo_exists NUMBER := 0;
3656 l_noasset NUMBER :=0;
3657 l_header_id NUMBER := 0;
3658 l_batch_id NUMBER := 0;
3659 l_op_seq NUMBER := 0;
3660 l_res_seq NUMBER :=-99;
3661 l_mat_seq NUMBER := -99;
3662 l_direct_desc VARCHAR2(30) := NULL;
3663 l_api_message VARCHAR2(1000);
3664 l_msg_count NUMBER := 0;
3665 l_msg_data VARCHAR2(8000);
3666 l_wo_seq NUMBER := 0;
3667 l_previous_wo_seq NUMBER := 0;
3668 l_previous_op_seq NUMBER := 0;
3669 l_previous_res_seq NUMBER := 0;
3670 l_parent_wo NUMBER;
3671 wo NUMBER := 0;
3672 op NUMBER :=0;
3673 res NUMBER :=0;
3674 mat NUMBER :=0;
3675 di NUMBER :=0;
3676 l_output_dir VARCHAR2(512);
3677 l_debug VARCHAR2(1) := 'Y';
3678 l_create_parent VARCHAR2(1) := 'N';
3679 l_parent_job_id NUMBER := -99;
3680 l_parent_wip_entity_id NUMBER := -99;
3681 i NUMBER := 0;
3682
3683 msg_index number;
3684 temp_err_mesg varchar2(4000);
3685
3686
3687 l_ce_lines_rec EAM_CE_WORK_ORDER_LINES%ROWTYPE;
3688 l_ce_parent_rec EAM_CE_WORK_ORDER_LINES%ROWTYPE;
3689 --l_ce_lines_tbl celines_table_type;
3690
3691 l_Mesg_Token_Tbl EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
3692 l_out_mesg_token_tbl EAM_ERROR_MESSAGE_PVT.mesg_token_tbl_type;
3693 l_Token_Tbl EAM_ERROR_MESSAGE_PVT.Token_Tbl_Type;
3694
3695 l_eam_wo_rec EAM_PROCESS_WO_PUB.eam_wo_rec_type;
3696 l_eam_empty_wo_rec EAM_PROCESS_WO_PUB.eam_wo_rec_type;
3697 l_eam_wo_tbl EAM_PROCESS_WO_PUB.eam_wo_tbl_type;
3698 l_eam_op_rec EAM_PROCESS_WO_PUB.eam_op_rec_type;
3699 l_eam_empty_op_rec EAM_PROCESS_WO_PUB.eam_op_rec_type;
3700 l_eam_res_rec EAM_PROCESS_WO_PUB.eam_res_rec_type;
3701 l_eam_mat_rec EAM_PROCESS_WO_PUB.eam_mat_req_rec_type;
3702 l_eam_direct_rec EAM_PROCESS_WO_PUB.eam_direct_items_rec_type;
3703
3704 l_eam_op_tbl EAM_PROCESS_WO_PUB.eam_op_tbl_type;
3705 l_eam_wo_comp_tbl EAM_PROCESS_WO_PUB.eam_wo_comp_tbl_type;
3706 l_eam_wo_quality_tbl EAM_PROCESS_WO_PUB.eam_wo_quality_tbl_type;
3707 l_eam_meter_reading_tbl EAM_PROCESS_WO_PUB.eam_meter_reading_tbl_type;
3708 l_eam_wo_comp_rebuild_tbl EAM_PROCESS_WO_PUB.eam_wo_comp_rebuild_tbl_type;
3709 l_eam_wo_comp_mr_read_tbl EAM_PROCESS_WO_PUB.eam_wo_comp_mr_read_tbl_type;
3710 l_eam_counter_prop_tbl EAM_PROCESS_WO_PUB.eam_counter_prop_tbl_type;
3711 l_out_eam_counter_prop_tbl EAM_PROCESS_WO_PUB.eam_counter_prop_tbl_type;
3712 l_eam_op_comp_tbl EAM_PROCESS_WO_PUB.eam_op_comp_tbl_type;
3713 l_eam_request_tbl EAM_PROCESS_WO_PUB.eam_request_tbl_type;
3714 l_out_eam_wo_comp_tbl EAM_PROCESS_WO_PUB.eam_wo_comp_tbl_type;
3715 l_out_eam_wo_quality_tbl EAM_PROCESS_WO_PUB.eam_wo_quality_tbl_type;
3716 l_out_eam_meter_reading_tbl EAM_PROCESS_WO_PUB.eam_meter_reading_tbl_type;
3717 l_out_eam_wo_comp_rebuild_tbl EAM_PROCESS_WO_PUB.eam_wo_comp_rebuild_tbl_type;
3718 l_out_eam_wo_comp_mr_read_tbl EAM_PROCESS_WO_PUB.eam_wo_comp_mr_read_tbl_type;
3719 l_out_eam_op_comp_tbl EAM_PROCESS_WO_PUB.eam_op_comp_tbl_type;
3720 l_out_eam_request_tbl EAM_PROCESS_WO_PUB.eam_request_tbl_type;
3721
3722 l_workorder_rec1 EAM_PROCESS_WO_PUB.eam_wo_rec_type;
3723 l_workorder_rec2 EAM_PROCESS_WO_PUB.eam_wo_rec_type;
3724 l_workorder_rec3 EAM_PROCESS_WO_PUB.eam_wo_rec_type;
3725
3726 l_eam_op_tbl1 EAM_PROCESS_WO_PUB.eam_op_tbl_type;
3727 l_eam_op_tbl2 EAM_PROCESS_WO_PUB.eam_op_tbl_type;
3728 l_eam_op_network_tbl EAM_PROCESS_WO_PUB.eam_op_network_tbl_type;
3729 l_eam_op_network_tbl1 EAM_PROCESS_WO_PUB.eam_op_network_tbl_type;
3730 l_eam_op_network_tbl2 EAM_PROCESS_WO_PUB.eam_op_network_tbl_type;
3731 l_eam_res_tbl EAM_PROCESS_WO_PUB.eam_res_tbl_type;
3732 l_eam_res_tbl1 EAM_PROCESS_WO_PUB.eam_res_tbl_type;
3733 l_eam_res_tbl2 EAM_PROCESS_WO_PUB.eam_res_tbl_type;
3734 l_eam_res_inst_tbl EAM_PROCESS_WO_PUB.eam_res_inst_tbl_type;
3735 l_eam_res_inst_tbl1 EAM_PROCESS_WO_PUB.eam_res_inst_tbl_type;
3736 l_eam_res_inst_tbl2 EAM_PROCESS_WO_PUB.eam_res_inst_tbl_type;
3737 l_eam_sub_res_tbl EAM_PROCESS_WO_PUB.eam_sub_res_tbl_type;
3738 l_eam_sub_res_tbl1 EAM_PROCESS_WO_PUB.eam_sub_res_tbl_type;
3739 l_eam_sub_res_tbl2 EAM_PROCESS_WO_PUB.eam_sub_res_tbl_type;
3740 l_eam_res_usage_tbl EAM_PROCESS_WO_PUB.eam_res_usage_tbl_type;
3741 l_eam_res_usage_tbl1 EAM_PROCESS_WO_PUB.eam_res_usage_tbl_type;
3742 l_eam_res_usage_tbl2 EAM_PROCESS_WO_PUB.eam_res_usage_tbl_type;
3743 l_eam_mat_req_tbl EAM_PROCESS_WO_PUB.eam_mat_req_tbl_type;
3744 l_eam_mat_req_tbl1 EAM_PROCESS_WO_PUB.eam_mat_req_tbl_type;
3745 l_eam_mat_req_tbl2 EAM_PROCESS_WO_PUB.eam_mat_req_tbl_type;
3746 l_wip_entity_id NUMBER;
3747 l_wip_entity_name VARCHAR2(240);
3748
3749 l_eam_wo_relations_tbl EAM_PROCESS_WO_PUB.eam_wo_relations_tbl_type;
3750 l_eam_wo_relations_tbl1 EAM_PROCESS_WO_PUB.eam_wo_relations_tbl_type;
3751 l_eam_wo_relations_tbl2 EAM_PROCESS_WO_PUB.eam_wo_relations_tbl_type;
3752 l_eam_relation_rec EAM_PROCESS_WO_PUB.eam_wo_relations_rec_type;
3753
3754 l_eam_wo_tbl1 EAM_PROCESS_WO_PUB.eam_wo_tbl_type;
3755 l_eam_wo_tbl2 EAM_PROCESS_WO_PUB.eam_wo_tbl_type;
3756 l_eam_wo_tbl3 EAM_PROCESS_WO_PUB.eam_wo_tbl_type;
3757
3758 l_eam_direct_items_tbl EAM_PROCESS_WO_PUB.eam_direct_items_tbl_type;
3759 l_eam_direct_items_tbl_1 EAM_PROCESS_WO_PUB.eam_direct_items_tbl_type;
3760
3761 CURSOR c_ecwl IS
3762 SELECT *
3763 FROM EAM_CE_WORK_ORDER_LINES
3764 WHERE organization_id = p_organization_id
3765 AND estimate_id = p_estimate_id
3766 AND estimate_work_order_line_id NOT IN (SELECT parent_wo_id
3767 FROM EAM_CONSTRUCTION_ESTIMATES
3768 WHERE ORGANIZATION_ID = P_ORGANIzATION_ID
3769 AND estimate_id = p_estimate_id
3770 AND nvl(create_parent_wo_flag, 'N') = 'Y'
3771 )
3772 ORDER BY
3773 work_order_seq_num,
3774 op_seq_num,
3775 res_seq_num;
3776
3777 BEGIN
3778
3779 -------------------------------------------------------------------------
3780 -- standard start of API savepoint
3781 -------------------------------------------------------------------------
3782 --dbms_output.put_line('1');
3783 SAVEPOINT CREATE_CU_WORKORDERS;
3784
3785 -------------------------------------------------------------------------
3786 -- standard call to check for call compatibility
3787 -------------------------------------------------------------------------
3788 IF NOT fnd_api.compatible_api_call (
3789 l_api_version,
3790 p_api_version,
3791 l_api_name,
3792 G_PKG_NAME ) then
3793
3794 RAISE fnd_api.g_exc_unexpected_error;
3795
3796 END IF;
3797
3798 -------------------------------------------------------------------------
3799 -- Initialize message list if p_init_msg_list is set to TRUE
3800 -------------------------------------------------------------------------
3801 --dbms_output.put_line('2');
3802 IF FND_API.to_Boolean(p_init_msg_list) THEN
3803 FND_MSG_PUB.initialize;
3804 END IF;
3805
3806
3807 -------------------------------------------------------------------------
3808 -- initialize api return status to success
3809 -------------------------------------------------------------------------
3810 x_return_status := fnd_api.g_ret_sts_success;
3811
3812 -- assign to local variables
3813 l_stmt_num := 10;
3814
3815 -------------------------------------------------------------------------
3816 -- Open Debug
3817 -------------------------------------------------------------------------
3818
3819 EAM_WORKORDER_UTIL_PKG.log_path(l_output_dir);
3820 -- Set the global variable for debug.
3821
3822 IF l_debug = 'Y'
3823 THEN
3824
3825 IF trim(l_output_dir) IS NULL OR trim(l_output_dir) = ''
3826 THEN
3827
3828 -- If debug is Y then out dir must be specified
3829
3830 l_out_mesg_token_tbl := l_mesg_token_tbl;
3831 EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3832 ( p_Message_text => 'Debug is set to Y so an output directory' || ' must be specified. Debug will be turned' || ' off since no directory is specified'
3833 , p_Mesg_Token_Tbl => l_mesg_token_tbl
3834 , x_Mesg_Token_Tbl => l_out_mesg_token_tbl
3835 , p_Token_Tbl => l_token_tbl
3836 );
3837 l_mesg_token_tbl := l_out_mesg_token_tbl;
3838
3839 l_debug := 'N';
3840
3841 END IF;
3842
3843 IF trim(p_debug_filename) IS NULL OR trim(p_debug_filename) = ''
3844 THEN
3845
3846 l_out_mesg_token_tbl := l_mesg_token_tbl;
3847 EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3848 ( p_Message_text => 'Debug is set to Y so an output filename' || ' must be specified. Debug will be turned' || ' off since no filename is specified'
3849 , p_Mesg_Token_Tbl => l_mesg_token_tbl
3850 , x_Mesg_Token_Tbl => l_out_mesg_token_tbl
3851 , p_Token_Tbl => l_token_tbl
3852 );
3853 l_mesg_token_tbl := l_out_mesg_token_tbl;
3854
3855 l_debug:= 'N';
3856
3857 END IF;
3858
3859 IF l_debug = 'Y'
3860 THEN
3861 l_out_mesg_token_tbl := l_mesg_token_tbl;
3862 EAM_ERROR_MESSAGE_PVT.Open_Debug_Session
3863 ( p_debug_filename => p_debug_filename
3864 , p_output_dir => l_output_dir
3865 , p_debug_file_mode => p_debug_file_mode
3866 , x_return_status => l_return_status
3867 , p_mesg_token_tbl => l_mesg_token_tbl
3868 , x_mesg_token_tbl => l_out_mesg_token_tbl
3869 );
3870 l_mesg_token_tbl := l_out_mesg_token_tbl;
3871
3872 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
3873 THEN
3874 --dbms_output.put_line ('Unable to open file for debug');
3875 EAM_PROCESS_WO_PVT.Set_Debug('N');
3876 END IF;
3877 END IF;
3878
3879 END IF;
3880
3881 -------------------------------------------------------------------------
3882 -- Select parent WO details
3883 -------------------------------------------------------------------------
3884
3885 SELECT nvl(create_parent_wo_flag, 'N'), parent_wo_id
3886 INTO l_create_parent, l_parent_job_id
3887 FROM EAM_CONSTRUCTION_ESTIMATES
3888 WHERE organization_id = p_organization_id
3889 AND estimate_id = p_estimate_id;
3890
3891 -------------------------------------------------------------------------
3892 -- Check All CE Lines have a WO Sequence
3893 -------------------------------------------------------------------------
3894 BEGIN
3895 --dbms_output.put_line('3');
3896
3897 IF nvl(l_create_parent, 'N') = 'N' THEN
3898 --dbms_output.put_line('create parent no');
3899 SELECT 1
3900 INTO l_wo_seq_exists
3901 FROM EAM_CE_WORK_ORDER_LINES
3902 WHERE organization_id = p_organization_id
3903 AND estimate_id = p_estimate_id
3904 AND work_order_seq_num IS NULL
3905 AND rownum = 1;
3906
3907 ELSE
3908 --dbms_output.put_line('create parent yes');
3909 SELECT 1
3910 INTO l_wo_seq_exists
3911 FROM EAM_CE_WORK_ORDER_LINES
3912 WHERE organization_id = p_organization_id
3913 AND estimate_id = p_estimate_id
3914 AND work_order_seq_num IS NULL
3915 AND estimate_work_order_line_id <> l_parent_job_id
3916 AND rownum = 1;
3917
3918 END IF;
3919
3920 l_stmt_num := 20;
3921
3922 IF l_wo_seq_exists = 1 THEN
3923 /* lOG errro */
3924 --dbms_output.put_line('4');
3925 RAISE FND_API.g_exc_error;
3926 END IF;
3927
3928 EXCEPTION
3929 WHEN NO_DATA_FOUND THEN
3930 NULL;
3931
3932 END;
3933
3934
3935
3936 -------------------------------------------------------------------------
3937 -- Check NO CE LINE already has a work order
3938 -------------------------------------------------------------------------
3939 BEGIN
3940 --dbms_output.put_line('3');
3941 SELECT 1
3942 INTO l_wo_exists
3943 FROM EAM_CE_WORK_ORDER_LINES
3944 WHERE organization_id = p_organization_id
3945 AND estimate_id = p_estimate_id
3946 AND estimate_work_order_id IS NOT NULL
3947 AND rownum = 1;
3948
3949 l_stmt_num := 25;
3950
3951 IF l_wo_exists = 1 THEN
3952 /* lOG errro */
3953 --dbms_output.put_line('4');
3954 RAISE FND_API.g_exc_error;
3955 END IF;
3956
3957 EXCEPTION
3958 WHEN NO_DATA_FOUND THEN
3959 NULL;
3960
3961 END;
3962
3963 -------------------------------------------------------------------------
3964 -- Check all WO lines have an asset
3965 -------------------------------------------------------------------------
3966 BEGIN
3967 --dbms_output.put_line('5');
3968 SELECT 1
3969 INTO l_noasset
3970 FROM EAM_CE_WORK_ORDER_LINES
3971 WHERE organization_id = p_organization_id
3972 AND estimate_id = p_estimate_id
3973 AND maintenance_object_id IS NULL
3974 AND rownum = 1;
3975
3976 l_stmt_num := 29;
3977
3978 IF l_noasset = 1 THEN
3979 /* lOG errro */
3980 --dbms_output.put_line('4');
3981 RAISE FND_API.g_exc_error;
3982 END IF;
3983
3984 EXCEPTION
3985 WHEN NO_DATA_FOUND THEN
3986 NULL;
3987
3988 END;
3989
3990 -------------------------------------------------------------------------
3991 -- First Create the Parent WO
3992 -------------------------------------------------------------------------
3993 l_stmt_num := 30;
3994
3995 BEGIN
3996
3997 --dbms_output.put_line('Creating parent');
3998
3999 IF NVL(l_create_parent, 'N') = 'Y' THEN
4000 /* Create the Parent WO */
4001 --dbms_output.put_line('Creating parent 2' || l_parent_job_id);
4002 BEGIN
4003 SELECT *
4004 INTO l_ce_parent_rec
4005 FROM EAM_CE_WORK_ORDER_LINES
4006 WHERE estimate_work_order_line_id = l_parent_job_id;
4007 --dbms_output.put_line('Creating parent 3' || l_parent_job_id);
4008
4009 l_eam_wo_rec := l_eam_empty_wo_rec;
4010 l_eam_wo_tbl := l_eam_wo_tbl3;
4011
4012 l_eam_wo_rec.header_id := 1;
4013 l_eam_wo_rec.batch_id := 1;
4014 l_stmt_num := 35;
4015 --dbms_output.put_line('Calling PWO');
4016 Populate_WO (
4017 p_parent_wo => null
4018 , p_ce_line_rec => l_ce_parent_rec
4019 , x_eam_wo_rec => l_eam_wo_rec
4020 , x_return_status => l_return_status
4021 , x_msg_count => l_msg_count
4022 , x_msg_data => l_msg_data);
4023 --dbms_output.put_line('Back Calling PWO');
4024
4025 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4026 --dbms_output.put_line('New WO error...');
4027 --EAM_CONSTRUCTION_MESSAGE_PVT.debug(l_msg_data);
4028 l_api_message := 'Populate_WO returned error';
4029 --FND_MESSAGE.set_name('BOM','CST_API_MESSAGE');
4030 FND_MESSAGE.set_token('TEXT', l_api_message);
4031 FND_MSG_pub.add;
4032 RAISE FND_API.g_exc_error;
4033 END IF;
4034
4035 l_eam_wo_tbl(1) := l_eam_wo_rec;
4036 --dbms_output.put_line('Calling WO API for parent');
4037 EAM_PROCESS_WO_PUB.Process_Master_Child_WO
4038 ( p_bo_identifier => 'EAM'
4039 , p_init_msg_list => TRUE
4040 , p_api_version_number => 1.0
4041 , p_eam_wo_tbl => l_eam_wo_tbl
4042 , p_eam_wo_relations_tbl => l_eam_wo_relations_tbl
4043 , p_eam_op_tbl => l_eam_op_tbl
4044 , p_eam_op_network_tbl => l_eam_op_network_tbl
4045 , p_eam_res_tbl => l_eam_res_tbl
4046 , p_eam_res_inst_tbl => l_eam_res_inst_tbl
4047 , p_eam_sub_res_tbl => l_eam_sub_res_tbl
4048 , p_eam_res_usage_tbl => l_eam_res_usage_tbl
4049 , p_eam_mat_req_tbl => l_eam_mat_req_tbl
4050 , p_eam_direct_items_tbl => l_eam_direct_items_tbl
4051 , p_eam_wo_comp_tbl => l_eam_wo_comp_tbl
4052 , p_eam_wo_quality_tbl => l_eam_wo_quality_tbl
4053 , p_eam_meter_reading_tbl => l_eam_meter_reading_tbl
4054 , p_eam_counter_prop_tbl => l_eam_counter_prop_tbl
4055 , p_eam_wo_comp_rebuild_tbl => l_eam_wo_comp_rebuild_tbl
4056 , p_eam_wo_comp_mr_read_tbl => l_eam_wo_comp_mr_read_tbl
4057 , p_eam_op_comp_tbl => l_eam_op_comp_tbl
4058 , p_eam_request_tbl => l_eam_request_tbl
4059 , x_eam_wo_tbl => l_eam_wo_tbl1
4060 , x_eam_wo_relations_tbl => l_eam_wo_relations_tbl1
4061 , x_eam_op_tbl => l_eam_op_tbl1
4062 , x_eam_op_network_tbl => l_eam_op_network_tbl1
4063 , x_eam_res_tbl => l_eam_res_tbl1
4064 , x_eam_res_inst_tbl => l_eam_res_inst_tbl1
4065 , x_eam_sub_res_tbl => l_eam_sub_res_tbl1
4066 , x_eam_res_usage_tbl => l_eam_res_usage_tbl
4067 , x_eam_mat_req_tbl => l_eam_mat_req_tbl1
4068 , x_eam_direct_items_tbl => l_eam_direct_items_tbl_1
4069 , x_eam_wo_comp_tbl => l_out_eam_wo_comp_tbl
4070 , x_eam_wo_quality_tbl => l_out_eam_wo_quality_tbl
4071 , x_eam_meter_reading_tbl => l_out_eam_meter_reading_tbl
4072 , x_eam_counter_prop_tbl => l_out_eam_counter_prop_tbl
4073 , x_eam_wo_comp_rebuild_tbl => l_out_eam_wo_comp_rebuild_tbl
4074 , x_eam_wo_comp_mr_read_tbl => l_out_eam_wo_comp_mr_read_tbl
4075 , x_eam_op_comp_tbl => l_out_eam_op_comp_tbl
4076 , x_eam_request_tbl => l_out_eam_request_tbl
4077 , x_return_status => l_return_status
4078 , x_msg_count => l_msg_count
4079 , p_debug => 'Y' --NVL(fnd_profile.value('EAM_DEBUG'), 'N')
4080 , p_debug_filename => 'createcu3.log'
4081 , p_output_dir => l_output_dir
4082 , p_commit => 'N'
4083 , p_debug_file_mode => 'w'
4084 );
4085 --dbms_output.put_line('Back from creating pwo');
4086 x_return_status := l_return_status;
4087 x_msg_count := l_msg_count;
4088 --dbms_output.put_line('Back from creating pwo' || l_return_status || x_return_status);
4089
4090
4091 IF(x_return_status <> 'S') then
4092 --dbms_output.put_line('Error after creating pwo' || SQLERRM);
4093 -- ROLLBACK TO CREATE_CU_WORKORDERS;
4094 RAISE FND_API.G_EXC_ERROR;
4095 END IF;
4096
4097 UPDATE EAM_CE_WORK_ORDER_LINES
4098 SET estimate_work_order_id = l_eam_wo_tbl1(1).wip_entity_id
4099 WHERE estimate_work_order_line_id = l_parent_job_id;
4100
4101 UPDATE eam_work_order_details
4102 SET estimate_id = p_estimate_id
4103 WHERE wip_entity_id = l_eam_wo_tbl1(1).wip_entity_id
4104 AND organization_id = l_eam_wo_tbl1(1).organization_id;
4105
4106 l_parent_job_id := l_eam_wo_tbl1(1).wip_entity_id;
4107
4108
4109 EXCEPTION
4110 WHEN OTHERS THEN
4111 --dbms_output.put_line('Creating parent 2' || l_stmt_num || SQLERRM);
4112 RAISE FND_API.g_exc_error;
4113 END;
4114
4115
4116 END IF;
4117 EXCEPTION
4118 WHEN OTHERS THEN
4119 RAISE FND_API.g_exc_error;
4120
4121 END;
4122
4123 -------------------------------------------------------------------------
4124 -- For each Work Order line, populate the WO API tables
4125 -------------------------------------------------------------------------
4126 l_eam_wo_tbl1 := l_eam_wo_tbl2; --making the wo table empty again
4127
4128 l_stmt_num := 80;
4129 FOR c_ecwl_rec IN c_ecwl LOOP
4130
4131 l_stmt_num := 82;
4132
4133 l_wo_seq := c_ecwl_rec.work_order_seq_num;
4134
4135 --dbms_output.put_line('Inside loop...');
4136
4137 IF (l_debug = 'Y') THEN
4138 EAM_ERROR_MESSAGE_PVT.Write_Debug('Inside the Loop ...') ;
4139 END IF;
4140
4141 IF (l_previous_wo_seq = 0) OR (l_wo_seq <> l_previous_wo_seq) THEN
4142
4143 /* New Work Order*/
4144 --dbms_output.put_line('New WO...');
4145 l_stmt_num := 86;
4146 wo := wo + 1;
4147 l_eam_wo_rec := l_eam_empty_wo_rec;
4148 l_eam_relation_rec := null;
4149
4150 --dbms_output.put_line('New WO...' || wo);
4151
4152 l_eam_wo_rec.header_id := wo;
4153 l_eam_wo_rec.batch_id := l_wo_seq;
4154 l_stmt_num := 88;
4155
4156 Populate_WO ( p_parent_wo => null
4157 , p_ce_line_rec => c_ecwl_rec
4158 , x_eam_wo_rec => l_eam_wo_rec
4159 , x_return_status => l_return_status
4160 , x_msg_count => l_msg_count
4161 , x_msg_data => l_msg_data);
4162
4163 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4164 --dbms_output.put_line('New WO error...' || wo);
4165 --EAM_CONSTRUCTION_MESSAGE_PVT.debug(l_msg_data);
4166 l_api_message := 'Populate_WO returned error';
4167 --FND_MESSAGE.set_name('BOM','CST_API_MESSAGE');
4168 FND_MESSAGE.set_token('TEXT', l_api_message);
4169 FND_MSG_pub.add;
4170 RAISE FND_API.g_exc_error;
4171 END IF;
4172
4173
4174 l_eam_wo_tbl(wo) := l_eam_wo_rec;
4175 l_previous_wo_seq := l_wo_seq;
4176 --bug 13718746
4177 l_previous_op_seq := 0; -- Reset operation sequence as this is a new work order
4178
4179 --dbms_output.put_line('WO...' || l_eam_wo_tbl(1).header_id);
4180
4181 /* Populate the Relationship Record */
4182 IF nvl(l_parent_job_id, -99) <> -99 THEN
4183
4184 l_eam_relation_rec.batch_id := wo;
4185 l_eam_relation_rec.parent_object_id := l_parent_job_id;
4186 l_eam_relation_rec.parent_object_type_id := 1;
4187 l_eam_relation_rec.parent_header_id := l_parent_job_id;
4188 l_eam_relation_rec.child_object_type_id := 1;
4189 l_eam_relation_rec.child_header_id :=wo;
4190 l_eam_relation_rec.child_object_id :=wo;
4191 l_eam_relation_rec.parent_relationship_type := 1;
4192 l_eam_relation_rec.transaction_type := EAM_PROCESS_WO_PUB.G_OPR_CREATE;
4193
4194 l_eam_wo_relations_tbl(wo) := l_eam_relation_rec;
4195
4196 END IF;
4197
4198 END IF; --wo seq comparison
4199
4200 l_op_seq := c_ecwl_rec.op_seq_num;
4201
4202 IF (l_op_seq <> l_previous_op_seq) OR (l_previous_op_seq =0 ) THEN
4203 /* New Operation */
4204 l_stmt_num := 92;
4205 op := op + 1;
4206 l_eam_op_rec := l_eam_empty_op_rec;
4207
4208 l_eam_op_rec.header_id := wo;
4209 l_eam_op_rec.batch_id := l_wo_seq;
4210
4211 POPULATE_OPERATION ( p_ce_line_rec => c_ecwl_rec
4212 , x_eam_op_rec => l_eam_op_rec
4213 , x_return_status => l_return_status
4214 , x_msg_count => l_msg_count
4215 , x_msg_data => l_msg_data);
4216
4217
4218 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4219 --EAM_CONSTRUCTION_MESSAGE_PVT.debug(l_msg_data);
4220 l_api_message := 'POPULATE_OPERATION returned error';
4221 --FND_MESSAGE.set_name('BOM','CST_API_MESSAGE');
4222 FND_MESSAGE.set_token('TEXT', l_api_message);
4223 FND_MSG_pub.add;
4224 RAISE FND_API.g_exc_error;
4225 END IF;
4226
4227
4228 l_eam_op_tbl(op) := l_eam_op_rec;
4229 l_previous_op_seq := l_op_seq;
4230
4231 END IF; --op seq comparison
4232
4233 l_res_seq := c_ecwl_rec.res_id;
4234 --dbms_output.put_line('Inside resource- ID...' || l_res_seq);
4235
4236 IF (l_res_seq IS NOT null) OR (l_res_seq <> -99) OR (l_res_seq <> FND_API.G_MISS_NUM) THEN
4237 --dbms_output.put_line('Inside resource...' || l_eam_wo_tbl(1).header_id);
4238 /* This is a Resource Line */
4239 l_stmt_num := 120;
4240 res := res + 1;
4241 l_eam_res_rec := null;
4242
4243 l_eam_res_rec.header_id := wo;
4244 l_eam_res_rec.batch_id := l_wo_seq;
4245
4246 POPULATE_RESOURCE ( p_ce_line_rec => c_ecwl_rec
4247 , x_eam_res_rec => l_eam_res_rec
4248 , x_return_status => l_return_status
4249 , x_msg_count => l_msg_count
4250 , x_msg_data => l_msg_data);
4251
4252
4253 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4254 --EAM_CONSTRUCTION_MESSAGE_PVT.debug(l_msg_data);
4255 l_api_message := 'POPULATE_RESOURCE returned error';
4256 --FND_MESSAGE.set_name('BOM','CST_API_MESSAGE');
4257 FND_MESSAGE.set_token('TEXT', l_api_message);
4258 FND_MSG_pub.add;
4259 RAISE FND_API.g_exc_error;
4260 END IF;
4261
4262
4263 l_eam_res_tbl(res) := l_eam_res_rec;
4264
4265 END IF; --res id comparison
4266
4267 l_mat_seq := c_ecwl_rec.mat_inventory_item_id;
4268 --dbms_output.put_line('Inside material- ID...' || l_mat_seq);
4269
4270 IF (l_mat_seq IS NOT null) OR (l_mat_seq <> -99) OR (l_mat_seq <> FND_API.G_MISS_NUM) THEN
4271 --dbms_output.put_line('Inside mat...' || l_eam_wo_tbl(1).header_id);
4272 /* This is a Material Line */
4273 l_stmt_num := 140;
4274 mat := mat + 1;
4275 l_eam_mat_rec := null;
4276
4277 l_eam_mat_rec.header_id := wo;
4278 l_eam_mat_rec.batch_id := l_wo_seq;
4279
4280 POPULATE_MATERIAL ( p_ce_line_rec => c_ecwl_rec
4281 , x_eam_mat_rec => l_eam_mat_rec
4282 , x_eam_direct_rec => l_eam_direct_rec
4283 , x_return_status => l_return_status
4284 , x_msg_count => l_msg_count
4285 , x_msg_data => l_msg_data);
4286
4287
4288 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4289 --EAM_CONSTRUCTION_MESSAGE_PVT.debug(l_msg_data);
4290 l_api_message := 'POPULATE_MATERIAL returned error';
4291 --FND_MESSAGE.set_name('BOM','CST_API_MESSAGE');
4292 FND_MESSAGE.set_token('TEXT', l_api_message);
4293 FND_MSG_pub.add;
4294 RAISE FND_API.g_exc_error;
4295 END IF;
4296
4297
4298 l_eam_mat_req_tbl(mat) := l_eam_mat_rec;
4299
4300 END IF; --mat id comparison
4301
4302 l_direct_desc := c_ecwl_rec.di_description;
4303 --dbms_output.put_line('Inside direct- ID...' || l_direct_desc);
4304
4305 IF (l_direct_desc IS NOT null) OR (l_direct_desc <> FND_API.G_MISS_CHAR) THEN
4306 --dbms_output.put_line('Inside direct...' || l_eam_wo_tbl(1).header_id);
4307 /* This is a Material Line */
4308 l_stmt_num := 160;
4309 di := di + 1;
4310 l_eam_direct_rec := null;
4311
4312 l_eam_direct_rec.header_id := wo;
4313 l_eam_direct_rec.batch_id := l_wo_seq;
4314
4315 POPULATE_MATERIAL ( p_ce_line_rec => c_ecwl_rec
4316 , x_eam_mat_rec => l_eam_mat_rec
4317 , x_eam_direct_rec => l_eam_direct_rec
4318 , x_return_status => l_return_status
4319 , x_msg_count => l_msg_count
4320 , x_msg_data => l_msg_data);
4321
4322
4323 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4324 --EAM_CONSTRUCTION_MESSAGE_PVT.debug(l_msg_data);
4325 l_api_message := 'POPULATE_MATERIAL returned error';
4326 --FND_MESSAGE.set_name('BOM','CST_API_MESSAGE');
4327 FND_MESSAGE.set_token('TEXT', l_api_message);
4328 FND_MSG_pub.add;
4329 RAISE FND_API.g_exc_error;
4330 END IF;
4331
4332
4333 l_eam_direct_items_tbl(di) := l_eam_direct_rec;
4334
4335 END IF; --direct desc comparison
4336
4337 END LOOP;
4338
4339 /* Call the WO API */
4340 --dbms_output.put_line('Calling WO API');
4341 /* --dbms_output.put_line('l_eam_wo_tbl(1).header_id...' || l_eam_wo_tbl(1).header_id);
4342 --dbms_output.put_line('l_eam_wo_tbl(2).header_id...' || l_eam_wo_tbl(2).header_id);
4343 --dbms_output.put_line('l_eam_wo_tbl(1).name...' || l_eam_wo_tbl(1).wip_entity_name);
4344 --dbms_output.put_line('l_eam_wo_tbl(2).name...' || l_eam_wo_tbl(2).wip_entity_name);
4345 --dbms_output.put_line('l_eam_op_tbl(1).header...' || l_eam_op_tbl(1).header_id);
4346 --dbms_output.put_line('l_eam_op_tbl(2).header...' || l_eam_op_tbl(2).header_id);*/
4347 l_stmt_num := 400;
4348 IF l_eam_wo_tbl.count > 0 THEN
4349 l_stmt_num := 401;
4350 EAM_PROCESS_WO_PUB.Process_Master_Child_WO
4351 ( p_bo_identifier => 'EAM'
4352 , p_init_msg_list => TRUE
4353 , p_api_version_number => 1.0
4354 , p_eam_wo_tbl => l_eam_wo_tbl
4355 , p_eam_wo_relations_tbl => l_eam_wo_relations_tbl
4356 , p_eam_op_tbl => l_eam_op_tbl
4357 , p_eam_op_network_tbl => l_eam_op_network_tbl
4358 , p_eam_res_tbl => l_eam_res_tbl
4359 , p_eam_res_inst_tbl => l_eam_res_inst_tbl
4360 , p_eam_sub_res_tbl => l_eam_sub_res_tbl
4361 , p_eam_res_usage_tbl => l_eam_res_usage_tbl
4362 , p_eam_mat_req_tbl => l_eam_mat_req_tbl
4363 , p_eam_direct_items_tbl => l_eam_direct_items_tbl
4364 , p_eam_wo_comp_tbl => l_eam_wo_comp_tbl
4365 , p_eam_wo_quality_tbl => l_eam_wo_quality_tbl
4366 , p_eam_meter_reading_tbl => l_eam_meter_reading_tbl
4367 , p_eam_counter_prop_tbl => l_eam_counter_prop_tbl
4368 , p_eam_wo_comp_rebuild_tbl => l_eam_wo_comp_rebuild_tbl
4369 , p_eam_wo_comp_mr_read_tbl => l_eam_wo_comp_mr_read_tbl
4370 , p_eam_op_comp_tbl => l_eam_op_comp_tbl
4371 , p_eam_request_tbl => l_eam_request_tbl
4372 , x_eam_wo_tbl => l_eam_wo_tbl1
4373 , x_eam_wo_relations_tbl => l_eam_wo_relations_tbl1
4374 , x_eam_op_tbl => l_eam_op_tbl1
4375 , x_eam_op_network_tbl => l_eam_op_network_tbl1
4376 , x_eam_res_tbl => l_eam_res_tbl1
4377 , x_eam_res_inst_tbl => l_eam_res_inst_tbl1
4378 , x_eam_sub_res_tbl => l_eam_sub_res_tbl1
4379 , x_eam_res_usage_tbl => l_eam_res_usage_tbl
4380 , x_eam_mat_req_tbl => l_eam_mat_req_tbl1
4381 , x_eam_direct_items_tbl => l_eam_direct_items_tbl_1
4382 , x_eam_wo_comp_tbl => l_out_eam_wo_comp_tbl
4383 , x_eam_wo_quality_tbl => l_out_eam_wo_quality_tbl
4384 , x_eam_meter_reading_tbl => l_out_eam_meter_reading_tbl
4385 , x_eam_counter_prop_tbl => l_out_eam_counter_prop_tbl
4386 , x_eam_wo_comp_rebuild_tbl => l_out_eam_wo_comp_rebuild_tbl
4387 , x_eam_wo_comp_mr_read_tbl => l_out_eam_wo_comp_mr_read_tbl
4388 , x_eam_op_comp_tbl => l_out_eam_op_comp_tbl
4389 , x_eam_request_tbl => l_out_eam_request_tbl
4390 , x_return_status => l_return_status
4391 , x_msg_count => l_msg_count
4392 , p_debug => NVL(fnd_profile.value('EAM_DEBUG'), 'N')
4393 , p_debug_filename => 'createcu1.log'
4394 , p_output_dir => l_output_dir
4395 , p_commit => 'N'
4396 , p_debug_file_mode => 'w'
4397 );
4398
4399 x_return_status := l_return_status;
4400 x_msg_count := l_msg_count;
4401
4402
4403 IF(x_return_status<>'S') then
4404 RAISE FND_API.G_EXC_ERROR;
4405 END IF;
4406
4407 END IF; -- l_eam_wo_tbl.count > 0
4408 l_stmt_num := 402;
4409 /* --dbms_output.put_line('----l_return_status---' || l_return_status);
4410 --dbms_output.put_line('----x_eam_wo_rec---' || l_eam_wo_tbl1(1).WIP_ENTITY_name);
4411 --dbms_output.put_line('----x_eam_wo_rec---' || l_eam_wo_tbl1(2).WIP_ENTITY_name);*/
4412 -- Bug 10082577
4413 IF l_eam_wo_tbl1.count > 0 THEN
4414 FOR i IN l_eam_wo_tbl1.FIRST..l_eam_wo_tbl1.LAST LOOP
4415 BEGIN
4416 UPDATE EAM_CE_WORK_ORDER_LINES
4417 SET estimate_work_order_id = l_eam_wo_tbl1(i).wip_entity_id
4418 WHERE work_order_seq_num = l_eam_wo_tbl1(i).batch_id
4419 and estimate_id = p_estimate_id;
4420
4421 UPDATE eam_work_order_details
4422 SET estimate_id = p_estimate_id
4423 WHERE wip_entity_id = l_eam_wo_tbl1(i).wip_entity_id
4424 AND organization_id = l_eam_wo_tbl1(i).organization_id;
4425
4426 EXCEPTION
4427 WHEN OTHERS THEN
4428 RAISE FND_API.G_EXC_ERROR;
4429 END;
4430 END LOOP;
4431 END IF; -- l_eam_wo_tbl1.count > 0
4432 COMMIT;
4433
4434 EXCEPTION
4435
4436 WHEN fnd_api.g_exc_error THEN
4437 --ROLLBACK TO
4438 ROLLBACK TO CREATE_CU_WORKORDERS;
4439 x_return_status := fnd_api.g_ret_sts_error;
4440 --dbms_output.put_line('exzc');
4441
4442 -- Get message count and data
4443 fnd_msg_pub.count_and_get
4444 ( p_count => x_msg_count
4445 , p_data => x_msg_data
4446 );
4447 --
4448 WHEN fnd_api.g_exc_unexpected_error THEN
4449 ROLLBACK TO CREATE_CU_WORKORDERS;
4450 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4451 --dbms_output.put_line('unex');
4452
4453 -- Get message count and data
4454 fnd_msg_pub.count_and_get
4455 ( p_count => x_msg_count
4456 , p_data => x_msg_data
4457 );
4458 --
4459 WHEN OTHERS THEN
4460 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4461 --dbms_output.put_line('others' || l_stmt_num);
4462 --
4463 ROLLBACK TO CREATE_CU_WORKORDERS;
4464 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error)
4465 THEN
4466 fnd_msg_pub.add_exc_msg
4467 ( 'EAM_CONSTRUCTION_EST_PVT'
4468 , 'Create_CU_Workorders : l_stmt_num - '||to_char(l_stmt_num)
4469 );
4470
4471 END IF;
4472 -- Get message count and data
4473 fnd_msg_pub.count_and_get
4474 ( p_count => x_msg_count
4475 , p_data => x_msg_data
4476 );
4477 END CREATE_CU_WORKORDERS;
4478
4479 procedure populate_WO(
4480 p_parent_wo IN NUMBER
4481 , p_init_msg_list VARCHAR2 := FND_API.G_FALSE
4482 , p_ce_line_rec IN EAM_CE_WORK_ORDER_LINES%ROWTYPE
4483 , x_eam_wo_rec IN OUT NOCOPY EAM_PROCESS_WO_PUB.eam_wo_rec_type
4484 , x_return_status OUT NOCOPY VARCHAR2
4485 , x_msg_count OUT NOCOPY NUMBER
4486 , x_msg_data OUT NOCOPY VARCHAR2
4487 ) IS
4488
4489 l_eam_wo_rec EAM_PROCESS_WO_PUB.eam_wo_rec_type;
4490 l_stmt_num NUMBER := 0;
4491 l_string VARCHAR2(2000);
4492 l_item_id NUMBER;
4493 l_eam_item NUMBER;
4494 l_failure_required varchar2(1); -- bug 7675526
4495 BEGIN
4496
4497 l_string := 'Inside' || G_PKG_NAME || '.Populate_WO';
4498
4499 x_return_status := fnd_api.g_ret_sts_success;
4500
4501 IF fnd_api.to_Boolean(p_init_msg_list) then
4502 fnd_msg_pub.initialize;
4503 end if;
4504
4505 /* Is this the parent WO record */
4506 /* Not a parent WO record */
4507
4508 /* This is a new work order */
4509
4510
4511 l_stmt_num := 50;
4512 l_eam_wo_rec := x_eam_wo_rec;
4513
4514 --dbms_output.put_line('PWO: 1');
4515
4516 /* Populate the WO Number if it has been provided by the user in the estimate */
4517 if p_ce_line_rec.work_order_number is not null then
4518 l_eam_wo_rec.wip_entity_name := p_ce_line_rec.work_order_number;
4519 end if;
4520
4521 l_stmt_num := 60;
4522
4523 l_eam_wo_rec.organization_id := p_ce_line_rec.organization_id;
4524 l_eam_wo_rec.FIRM_PLANNED_FLAG := 2;
4525 l_eam_wo_rec.description := p_ce_line_rec.work_order_description;
4526 --l_eam_wo_rec.inventory_item_id := p_ce_line_rec.inventory_item_id;
4527 l_eam_wo_rec.maintenance_object_id := p_ce_line_rec.maintenance_object_id;
4528 l_eam_wo_rec.maintenance_object_id := p_ce_line_rec.maintenance_object_id;
4529 l_eam_wo_rec.maintenance_object_type := p_ce_line_rec.maintenance_object_type;
4530 l_eam_wo_rec.maintenance_object_source := nvl(p_ce_line_rec.maintenance_object_source, 1);
4531 l_eam_wo_rec.class_code := p_ce_line_rec.acct_class_code;
4532 l_eam_wo_rec.activity_type := p_ce_line_rec.activity_type;
4533 l_eam_wo_rec.activity_cause := p_ce_line_rec.activity_cause;
4534 l_eam_wo_rec.activity_source := p_ce_line_rec.activity_source;
4535 l_eam_wo_rec.work_order_type := p_ce_line_rec.work_order_type;
4536 l_eam_wo_rec.status_type := nvl(p_ce_line_rec.status_type, 1);
4537 l_eam_wo_rec.job_quantity := 1;
4538 l_eam_wo_rec.owning_department := p_ce_line_rec.owning_department_id;
4539 l_eam_wo_rec.project_id := p_ce_line_rec.project_id;
4540 l_eam_wo_rec.task_id := p_ce_line_rec.task_id;
4541 --l_eam_wo_rec.parent_wip_entity_id := p_ce_line_rec.activity_soure;
4542 l_eam_wo_rec.scheduled_start_date := nvl(p_ce_line_rec.scheduled_start_date, sysdate);
4543 l_eam_wo_rec.scheduled_completion_date := nvl(p_ce_line_rec.scheduled_completion_date, sysdate);
4544 l_eam_wo_rec.user_defined_status_id := p_ce_line_rec.user_defined_status_id;
4545 l_eam_wo_rec.user_id := fnd_global.user_id;
4546
4547 --l_eam_wo_rec.responsibility_id := 55240; --fnd_glabal.resp_id
4548 -- Bug 10082577 - Replacing responsibility
4549 l_eam_wo_rec.responsibility_id := fnd_global.resp_id;
4550 l_eam_wo_rec.transaction_type := EAM_PROCESS_WO_PVT.G_OPR_CREATE;
4551
4552 l_stmt_num := 70;
4553 --dbms_output.put_line('PWO: 2');
4554
4555 BEGIN
4556 SELECT cii.inventory_item_id, msi.eam_item_type
4557 INTO l_item_id, l_eam_item
4558 FROM csi_item_instances cii, mtl_system_items_b msi
4559 WHERE cii.inventory_item_id = msi.inventory_item_id
4560 AND cii.last_vld_organization_id = msi.organization_id
4561 AND cii.instance_id = p_ce_line_rec.maintenance_object_id;
4562
4563 IF l_eam_item = 1 THEN
4564 l_eam_wo_rec.asset_group_id := l_item_id;
4565 l_eam_wo_rec.rebuild_item_id := null;
4566 ELSIF l_eam_item = 3 THEN
4567 l_eam_wo_rec.rebuild_item_id := l_item_id;
4568 l_eam_wo_rec.asset_group_id := null;
4569 END IF;
4570
4571 EXCEPTION
4572 WHEN OTHERS THEN
4573 DEBUG('Cannot find the item id');
4574 RAISE FND_API.g_exc_error;
4575 END;
4576
4577 --Populate the failure entry record -- bug 7675526 Begin
4578
4579 BEGIN
4580
4581
4582 SELECT efsa.failure_code_required
4583 INTO l_failure_required
4584 FROM eam_failure_set_associations efsa , eam_failure_sets efs
4585 WHERE efsa.inventory_item_id = l_item_id
4586 AND efsa.set_id = efs.set_id (+)
4587 AND (efsa.EFFECTIVE_END_DATE is null or efs.EFFECTIVE_END_DATE >= sysdate )
4588 AND ( efs.EFFECTIVE_END_DATE is null or efs.EFFECTIVE_END_DATE >=sysdate ) ;
4589
4590 EXCEPTION
4591 WHEN OTHERS THEN
4592 l_failure_required := null;
4593 END;
4594
4595 l_eam_wo_rec.failure_code_required := l_failure_required; -- bug 7675526 End
4596
4597 /*Add code for estimate id */
4598
4599 l_stmt_num := 80;
4600 x_eam_wo_rec := l_eam_wo_rec;
4601
4602 -- Standard Call to get message count and if count = 1, get message info
4603 FND_MSG_PUB.Count_And_Get (
4604 p_count => x_msg_count,
4605 p_data => x_msg_data );
4606
4607 -- Print messages to log file
4608
4609
4610 EXCEPTION
4611 WHEN fnd_api.g_exc_error THEN
4612 x_return_status := fnd_api.g_ret_sts_error;
4613
4614 -- Get message count and data
4615 fnd_msg_pub.count_and_get
4616 ( p_count => x_msg_count
4617 , p_data => x_msg_data
4618 );
4619
4620 WHEN fnd_api.g_exc_unexpected_error THEN
4621 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4622
4623 -- Get message count and data
4624 fnd_msg_pub.count_and_get
4625 ( p_count => x_msg_count
4626 , p_data => x_msg_data
4627 );
4628 --
4629 WHEN OTHERS THEN
4630 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4631 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error)
4632 THEN
4633 fnd_msg_pub.add_exc_msg
4634 ( 'EAM_CONSTRUCTION_EST_PVT'
4635 , 'Populate_WO : Statement - '|| to_char(l_stmt_num)
4636 );
4637
4638 END IF;
4639
4640 -- Get message count and data
4641 fnd_msg_pub.count_and_get
4642 ( p_count => x_msg_count
4643 , p_data => x_msg_data
4644 );
4645
4646
4647 END populate_WO;
4648
4649 procedure POPULATE_OPERATION(
4650 p_ce_line_rec IN EAM_CE_WORK_ORDER_LINES%ROWTYPE
4651 , p_init_msg_list VARCHAR2 := FND_API.G_FALSE
4652 , x_eam_op_rec IN OUT NOCOPY EAM_PROCESS_WO_PUB.eam_op_rec_type
4653 , x_return_status OUT NOCOPY VARCHAR2
4654 , x_msg_count OUT NOCOPY NUMBER
4655 , x_msg_data OUT NOCOPY VARCHAR2
4656 ) IS
4657
4658 l_eam_op_rec EAM_PROCESS_WO_PUB.eam_op_rec_type;
4659 l_stmt_num NUMBER := 0;
4660 BEGIN
4661
4662 IF fnd_api.to_Boolean(p_init_msg_list) then
4663 fnd_msg_pub.initialize;
4664 end if;
4665
4666 x_return_status := fnd_api.g_ret_sts_success;
4667
4668 l_eam_op_rec := x_eam_op_rec;
4669
4670 l_eam_op_rec.organization_id := p_ce_line_rec.organization_id;
4671 l_eam_op_rec.operation_seq_num := p_ce_line_rec.op_seq_num;
4672 --l_eam_op_rec.standard_operation_id := p_ce_line_rec.standard_operation_id;
4673 l_eam_op_rec.standard_operation_id := null;
4674 l_eam_op_rec.department_id := p_ce_line_rec.op_department_id;
4675 l_eam_op_rec.description := p_ce_line_rec.op_description;
4676 l_eam_op_rec.start_date := nvl(p_ce_line_rec.scheduled_start_date, sysdate);
4677 l_eam_op_rec.completion_date := nvl(p_ce_line_rec.scheduled_completion_date, sysdate);
4678 l_eam_op_rec.long_description := p_ce_line_rec.op_long_description;
4679 l_eam_op_rec.transaction_type := EAM_PROCESS_WO_PUB.G_OPR_CREATE;
4680
4681
4682
4683 x_eam_op_rec := l_eam_op_rec;
4684
4685
4686 -- Standard Call to get message count and if count = 1, get message info
4687 FND_MSG_PUB.Count_And_Get (
4688 p_count => x_msg_count,
4689 p_data => x_msg_data );
4690
4691 -- Print messages to log file
4692
4693
4694 EXCEPTION
4695 WHEN fnd_api.g_exc_error THEN
4696 x_return_status := fnd_api.g_ret_sts_error;
4697
4698 -- Get message count and data
4699 fnd_msg_pub.count_and_get
4700 ( p_count => x_msg_count
4701 , p_data => x_msg_data
4702 );
4703
4704 WHEN fnd_api.g_exc_unexpected_error THEN
4705 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4706
4707 -- Get message count and data
4708 fnd_msg_pub.count_and_get
4709 ( p_count => x_msg_count
4710 , p_data => x_msg_data
4711 );
4712 --
4713 WHEN OTHERS THEN
4714 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4715 --EAM_CONSTRUCTION_MESSAGE_PVT.DEBUG('EAM_CONSTRUCTION_EST_PVT.POPULATE_OPERATION: Statement(' || to_char(l_stmt_num) || '): ' || substr(SQLERRM,1,240));
4716 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error)
4717 THEN
4718 fnd_msg_pub.add_exc_msg
4719 ( 'EAM_CONSTRUCTION_EST_PVT'
4720 , 'Populate_WO : Statement - '|| to_char(l_stmt_num)
4721 );
4722
4723 END IF;
4724
4725 -- Get message count and data
4726 fnd_msg_pub.count_and_get
4727 ( p_count => x_msg_count
4728 , p_data => x_msg_data
4729 );
4730
4731 END POPULATE_OPERATION;
4732
4733 procedure POPULATE_RESOURCE(
4734 p_ce_line_rec IN EAM_CE_WORK_ORDER_LINES%ROWTYPE
4735 , p_init_msg_list VARCHAR2 := FND_API.G_FALSE
4736 , x_eam_res_rec IN OUT NOCOPY EAM_PROCESS_WO_PUB.eam_res_rec_type
4737 , x_return_status OUT NOCOPY VARCHAR2
4738 , x_msg_count OUT NOCOPY NUMBER
4739 , x_msg_data OUT NOCOPY VARCHAR2
4740 ) IS
4741
4742 l_eam_res_rec EAM_PROCESS_WO_PUB.eam_res_rec_type;
4743 l_stmt_num NUMBER := 0;
4744 l_autocharge NUMBER;
4745 BEGIN
4746
4747 IF fnd_api.to_Boolean(p_init_msg_list) then
4748 fnd_msg_pub.initialize;
4749 end if;
4750
4751 x_return_status := fnd_api.g_ret_sts_success;
4752
4753 l_eam_res_rec := x_eam_res_rec;
4754
4755 l_eam_res_rec.organization_id := p_ce_line_rec.organization_id;
4756 l_eam_res_rec.SCHEDULED_FLAG := p_ce_line_rec.RES_SCHEDULED_FLAG;
4757 l_eam_res_rec.operation_seq_num := p_ce_line_rec.op_seq_num;
4758 l_eam_res_rec.resource_seq_num := p_ce_line_rec.res_seq_num;
4759 l_eam_res_rec.department_id := p_ce_line_rec.op_department_id;
4760 l_eam_res_rec.resource_id := p_ce_line_rec.res_id;
4761 l_eam_res_rec.uom_code := p_ce_line_rec.res_uom;
4762 l_eam_res_rec.basis_type := p_ce_line_rec.res_basis_type;
4763 l_eam_res_rec.usage_rate_or_amount := p_ce_line_rec.required_quantity;
4764 l_eam_res_rec.assigned_units := nvl(p_ce_line_rec.res_assigned_units,1);
4765 l_eam_res_rec.start_date := nvl(p_ce_line_rec.scheduled_start_date, sysdate);
4766 l_eam_res_rec.completion_date := nvl(p_ce_line_rec.scheduled_completion_date, sysdate);
4767 l_eam_res_rec.transaction_type := EAM_PROCESS_WO_PUB.G_OPR_CREATE;
4768
4769 /* Get Charge Type: Ideally this should be copied into the CE table as part of the Activity explosion -
4770 but since the charge type was not included in the data model, deriving it here. In future this may be
4771 a good ebhancement */
4772
4773 BEGIN
4774 select DECODE(BOR.AUTOCHARGE_TYPE,1,2,4,3,3,3,2) autocharge
4775 into l_autocharge
4776 from BOM_OPERATION_RESOURCES BOR, BOM_OPERATIONAL_ROUTINGS BORT, BOM_OPERATION_SEQUENCES BOS
4777 where BOR.RESOURCE_ID = p_ce_line_rec.res_id
4778 and BORT.assembly_item_id = p_ce_line_rec.SRC_ACTIVITY_ID
4779 AND BORT.organization_id = p_ce_line_rec.organization_id
4780 AND BOS.ROUTING_SEQUENCE_ID = BORT.COMMON_ROUTING_SEQUENCE_ID
4781 AND BOS.OPERATION_SEQUENCE_ID = BOR.OPERATION_SEQUENCE_ID
4782 AND BOS.EFFECTIVITY_DATE <= sysdate
4783 AND NVL(BOS.DISABLE_DATE, sysdate + 2) >= sysdate
4784 AND (BOR.ACD_TYPE IS NULL OR BOR.ACD_TYPE <> 3);
4785
4786 EXCEPTION
4787 WHEN OTHERS THEN
4788 l_autocharge := 3; --default it to PO Receipt for manually added rows
4789 END;
4790
4791 l_eam_res_rec.autocharge_type := l_autocharge;
4792
4793 x_eam_res_rec := l_eam_res_rec;
4794
4795 -- Standard Call to get message count and if count = 1, get message info
4796 FND_MSG_PUB.Count_And_Get (
4797 p_count => x_msg_count,
4798 p_data => x_msg_data );
4799
4800 -- Print messages to log file
4801
4802
4803 EXCEPTION
4804 WHEN fnd_api.g_exc_error THEN
4805 x_return_status := fnd_api.g_ret_sts_error;
4806
4807 -- Get message count and data
4808 fnd_msg_pub.count_and_get
4809 ( p_count => x_msg_count
4810 , p_data => x_msg_data
4811 );
4812
4813 WHEN fnd_api.g_exc_unexpected_error THEN
4814 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4815
4816 -- Get message count and data
4817 fnd_msg_pub.count_and_get
4818 ( p_count => x_msg_count
4819 , p_data => x_msg_data
4820 );
4821 --
4822 WHEN OTHERS THEN
4823 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4824 --EAM_CONSTRUCTION_MESSAGE_PVT.DEBUG('EAM_CONSTRUCTION_EST_PVT.POPULATE_RESOURCE: Statement(' || to_char(l_stmt_num) || '): ' || substr(SQLERRM,1,240));
4825 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error)
4826 THEN
4827 fnd_msg_pub.add_exc_msg
4828 ( 'EAM_CONSTRUCTION_EST_PVT'
4829 , 'POPULATE_RESOURCE : Statement - '|| to_char(l_stmt_num)
4830 );
4831
4832 END IF;
4833
4834 -- Get message count and data
4835 fnd_msg_pub.count_and_get
4836 ( p_count => x_msg_count
4837 , p_data => x_msg_data
4838 );
4839
4840 END POPULATE_RESOURCE;
4841
4842 procedure POPULATE_MATERIAL(
4843 p_ce_line_rec IN EAM_CE_WORK_ORDER_LINES%ROWTYPE
4844 , p_init_msg_list VARCHAR2 := FND_API.G_FALSE
4845 , x_eam_mat_rec IN OUT NOCOPY EAM_PROCESS_WO_PUB.eam_mat_req_rec_type
4846 , x_eam_direct_rec IN OUT NOCOPY EAM_PROCESS_WO_PUB.eam_direct_items_rec_type
4847 , x_return_status OUT NOCOPY VARCHAR2
4848 , x_msg_count OUT NOCOPY NUMBER
4849 , x_msg_data OUT NOCOPY VARCHAR2
4850 ) IS
4851
4852 l_eam_mat_rec EAM_PROCESS_WO_PUB.eam_mat_req_rec_type;
4853 l_eam_direct_rec EAM_PROCESS_WO_PUB.eam_direct_items_rec_type;
4854 l_stmt_num NUMBER := 0;
4855 BEGIN
4856
4857 IF fnd_api.to_Boolean(p_init_msg_list) then
4858 fnd_msg_pub.initialize;
4859 end if;
4860
4861 x_return_status := fnd_api.g_ret_sts_success;
4862
4863 l_eam_mat_rec := x_eam_mat_rec;
4864 l_eam_direct_rec := x_eam_direct_rec;
4865
4866 IF p_ce_line_rec.mat_inventory_item_id IS NOT NULL THEN
4867 l_eam_mat_rec.organization_id := p_ce_line_rec.organization_id;
4868 l_eam_mat_rec.operation_seq_num := p_ce_line_rec.op_seq_num;
4869 l_eam_mat_rec.inventory_item_id := p_ce_line_rec.mat_inventory_item_id;
4870 l_eam_mat_rec.department_id := p_ce_line_rec.op_department_id;
4871 l_eam_mat_rec.date_required := nvl(p_ce_line_rec.scheduled_start_date, sysdate);
4872 l_eam_mat_rec.required_quantity := p_ce_line_rec.required_quantity;
4873 l_eam_mat_rec.QUANTITY_PER_ASSEMBLY := p_ce_line_rec.required_quantity;
4874 l_eam_mat_rec.supply_subinventory := p_ce_line_rec.mat_supply_subinventory;
4875 l_eam_mat_rec.supply_locator_id := p_ce_line_rec.mat_supply_locator_id;
4876 --l_eam_mat_rec.component_sequence_id := p_ce_line_rec.organization_id;
4877 l_eam_mat_rec.comments := p_ce_line_rec.item_comments;
4878 l_eam_mat_rec.SUGGESTED_VENDOR_NAME := p_ce_line_rec.SUGGESTED_VENDOR_NAME;
4879 l_eam_mat_rec.vendor_id := p_ce_line_rec.suggested_vendor_id;
4880 --l_eam_mat_rec.unit_price := p_ce_line_rec.item_comments;
4881 l_eam_mat_rec.unit_price := p_ce_line_rec.unit_price; --bug # 12911560
4882 l_eam_mat_rec.transaction_type := EAM_PROCESS_WO_PUB.G_OPR_CREATE;
4883
4884 ELSE
4885 l_eam_direct_rec.organization_id := p_ce_line_rec.organization_id;
4886 l_eam_direct_rec.description := p_ce_line_rec.di_description;
4887 l_eam_direct_rec.purchasing_category_id := p_ce_line_rec.di_purchase_category_id;
4888 --l_eam_direct_rec.direct_item_sequence_id := p_ce_line_rec.organization_id;
4889 l_eam_direct_rec.operation_seq_num := p_ce_line_rec.op_seq_num;
4890 l_eam_direct_rec.department_id := p_ce_line_rec.op_department_id;
4891 l_eam_direct_rec.SUGGESTED_VENDOR_NAME := p_ce_line_rec.SUGGESTED_VENDOR_NAME;
4892 l_eam_direct_rec.SUGGESTED_VENDOR_ID := p_ce_line_rec.SUGGESTED_VENDOR_ID;
4893 l_eam_direct_rec.SUGGESTED_VENDOR_SITE := p_ce_line_rec.SUGGESTED_VENDOR_SITE;
4894 l_eam_direct_rec.SUGGESTED_VENDOR_SITE_ID := p_ce_line_rec.SUGGESTED_VENDOR_SITE_ID;
4895 --l_eam_direct_rec.unit_price := p_ce_line_rec.SUGGESTED_VENDOR_ID;
4896 l_eam_mat_rec.unit_price := p_ce_line_rec.unit_price; --bug # 12911560
4897 l_eam_direct_rec.required_quantity := p_ce_line_rec.required_quantity;
4898 --l_eam_direct_rec.uom := p_ce_line_rec.SUGGESTED_VENDOR_SITE;
4899 l_eam_direct_rec.need_by_date := p_ce_line_rec.di_need_by_date;
4900 l_eam_direct_rec.transaction_type := EAM_PROCESS_WO_PUB.G_OPR_CREATE;
4901
4902 END IF; --stockable or non-stockable item
4903
4904
4905 x_eam_mat_rec := l_eam_mat_rec;
4906 x_eam_direct_rec := l_eam_direct_rec;
4907
4908 -- Standard Call to get message count and if count = 1, get message info
4909 FND_MSG_PUB.Count_And_Get (
4910 p_count => x_msg_count,
4911 p_data => x_msg_data );
4912
4913 -- Print messages to log file
4914
4915
4916 EXCEPTION
4917 WHEN fnd_api.g_exc_error THEN
4918 x_return_status := fnd_api.g_ret_sts_error;
4919
4920 -- Get message count and data
4921 fnd_msg_pub.count_and_get
4922 ( p_count => x_msg_count
4923 , p_data => x_msg_data
4924 );
4925
4926 WHEN fnd_api.g_exc_unexpected_error THEN
4927 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4928
4929 -- Get message count and data
4930 fnd_msg_pub.count_and_get
4931 ( p_count => x_msg_count
4932 , p_data => x_msg_data
4933 );
4934 --
4935 WHEN OTHERS THEN
4936 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4937 --EAM_CONSTRUCTION_MESSAGE_PVT.DEBUG('EAM_CONSTRUCTION_EST_PVT.POPULATE_RESOURCE: Statement(' || to_char(l_stmt_num) || '): ' || substr(SQLERRM,1,240));
4938 IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error)
4939 THEN
4940 fnd_msg_pub.add_exc_msg
4941 ( 'EAM_CONSTRUCTION_EST_PVT'
4942 , 'POPULATE_RESOURCE : Statement - '|| to_char(l_stmt_num)
4943 );
4944
4945 END IF;
4946
4947 -- Get message count and data
4948 fnd_msg_pub.count_and_get
4949 ( p_count => x_msg_count
4950 , p_data => x_msg_data
4951 );
4952
4953 END POPULATE_MATERIAL;
4954
4955 PROCEDURE COPY_EST_WORKBENCH(
4956 p_api_version IN NUMBER := 1.0
4957 , p_init_msg_list IN VARCHAR2 := 'F'
4958 , p_commit IN VARCHAR2
4959 , p_src_estimate_id IN NUMBER
4960 , p_org_id IN NUMBER
4961 , p_cpy_estimate_id OUT NOCOPY NUMBER
4962 , x_return_status OUT NOCOPY VARCHAR2
4963 , x_msg_count OUT NOCOPY NUMBER
4964 , x_msg_data OUT NOCOPY VARCHAR2
4965 )
4966
4967 IS
4968
4969
4970 l_est_workorder_line_rec EAM_EST_DATASTRUCTURES_PUB.EAM_CE_WORK_ORDER_LINES_REC;
4971 l_creation_date DATE := SYSDATE;
4972 l_created_by NUMBER := FND_GLOBAL.USER_ID;
4973 l_last_updated_date DATE := SYSDATE;
4974 l_last_updated_by NUMBER := FND_GLOBAL.USER_ID;
4975 l_last_updated_login NUMBER;
4976 l_parent_estimate_wo_line_id NUMBER := 0;
4977 l_wo_line_id_seq NUMBER :=0;
4978
4979 CURSOR SRC_EST_WORKORDER_LINES_CUR IS
4980 SELECT CEWOL.*
4981 FROM EAM_CE_WORK_ORDER_LINES CEWOL
4982 WHERE ESTIMATE_ID = p_src_estimate_id
4983 AND ORGANIZATION_ID = p_org_id
4984 ORDER BY ESTIMATE_WORK_ORDER_LINE_ID;
4985
4986 CURSOR SRC_ESTIMATES_CUR IS
4987 SELECT ECE.*
4988 FROM EAM_CONSTRUCTION_ESTIMATES ECE
4989 WHERE ESTIMATE_ID = p_src_estimate_id
4990 AND ORGANIZATION_ID = p_org_id;
4991 l_estimate_rec SRC_ESTIMATES_CUR%ROWTYPE;
4992
4993 BEGIN
4994 SAVEPOINT COPY_EST_WORKBENCH;
4995 -- Copy the following from the src estimate id
4996 -- Estimate Entries in EAM_CONSTRUCTION_ESTIMATES
4997 -- Estimate Work Bench Enteries in EAM_CE_WORK_ORDER_LINES
4998 -- Clear out WO Order Related details
4999
5000 -- Checking input parameters
5001 IF (p_org_id IS NULL) THEN
5002 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
5003 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ORGANIZATION_ID');
5004 FND_MESSAGE.SET_TOKEN('VALUE', p_org_id);
5005 FND_MSG_PUB.ADD;
5006 RAISE FND_API.G_EXC_ERROR;
5007 END IF;
5008
5009 IF (p_src_estimate_id IS NULL) THEN
5010 FND_MESSAGE.SET_NAME('EAM','EAM_EA_INVALID_PARAM');
5011 FND_MESSAGE.SET_TOKEN('PARAMETER', 'ESTIMATE_ID');
5012 FND_MESSAGE.SET_TOKEN('VALUE', p_src_estimate_id);
5013 FND_MSG_PUB.ADD;
5014 RAISE FND_API.G_EXC_ERROR;
5015 END IF;
5016
5017 -- Fetch the Estimates Cursor
5018 OPEN SRC_ESTIMATES_CUR;
5019 FETCH SRC_ESTIMATES_CUR INTO l_estimate_rec;
5020 CLOSE SRC_ESTIMATES_CUR;
5021
5022 -- Initialize destination estimate rec
5023 -- and call EAM_CONSTRUCTION_ESTIMATES_PKG.INSERT_ROW API
5024 l_estimate_rec.ESTIMATE_ID := NULL;
5025 -- Bug 13698217
5026 l_estimate_rec.ESTIMATE_NUMBER := 'Copy of ' || substr(l_estimate_rec.ESTIMATE_NUMBER,1,20);
5027 IF l_estimate_rec.ESTIMATE_DESCRIPTION IS NULL THEN
5028 l_estimate_rec.ESTIMATE_DESCRIPTION := '';
5029 ELSE
5030 l_estimate_rec.ESTIMATE_DESCRIPTION := 'Copy of ' || l_estimate_rec.ESTIMATE_DESCRIPTION;
5031 END IF; -- l_estimate_rec.ESTIMATE_DESCRIPTION IS NULL
5032
5033 IF NVL(l_estimate_rec.CREATE_PARENT_WO_FLAG,'N') = 'Y' AND
5034 NVL(l_estimate_rec.PARENT_WO_ID,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
5035 -- In this case the PARENT_WO_ID corresponds to the
5036 -- ESTIMATE_WORK_ORDER_LINE_ID in the ce work order lines table
5037 -- This parent information needs to be copied and updated
5038
5039 -- The parent Work order id will be updated after inserting in to lines table
5040 l_parent_estimate_wo_line_id := l_estimate_rec.PARENT_WO_ID;
5041 l_estimate_rec.PARENT_WO_ID := NULL;
5042 l_estimate_rec.CREATE_PARENT_WO_FLAG := 'Y';
5043
5044 ELSIF NVL(l_estimate_rec.CREATE_PARENT_WO_FLAG,'N') = 'N' AND
5045 NVL(l_estimate_rec.PARENT_WO_ID,FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM THEN
5046
5047 l_estimate_rec.PARENT_WO_ID := NULL;
5048 l_estimate_rec.CREATE_PARENT_WO_FLAG := 'N';
5049
5050 ELSIF NVL(l_estimate_rec.CREATE_PARENT_WO_FLAG,'N') = 'N' AND
5051 NVL(l_estimate_rec.PARENT_WO_ID,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
5052
5053 -- l_estimate_rec.PARENT_WO_ID := NULL;
5054 l_estimate_rec.CREATE_PARENT_WO_FLAG := 'N';
5055
5056 ELSE
5057
5058 l_estimate_rec.PARENT_WO_ID := NULL;
5059 l_estimate_rec.CREATE_PARENT_WO_FLAG := 'N';
5060
5061 END IF; -- NVL(l_estimate_rec.CREATE_PARENT_WO_FLAG,'N') = 'Y'
5062
5063
5064 EAM_CONSTRUCTION_ESTIMATES_PKG.INSERT_ROW(
5065 px_ESTIMATE_ID => l_estimate_rec.ESTIMATE_ID,
5066 p_ORGANIZATION_ID => l_estimate_rec.ORGANIZATION_ID,
5067 p_ESTIMATE_NUMBER => l_estimate_rec.ESTIMATE_NUMBER,
5068 p_ESTIMATE_DESCRIPTION => l_estimate_rec.ESTIMATE_DESCRIPTION,
5069 p_GROUPING_OPTION => l_estimate_rec.GROUPING_OPTION,
5070 p_PARENT_WO_ID => l_estimate_rec.PARENT_WO_ID,
5071 p_CREATE_PARENT_WO_FLAG => l_estimate_rec.CREATE_PARENT_WO_FLAG,
5072 p_CREATION_DATE => l_creation_date,
5073 p_CREATED_BY => l_created_by,
5074 p_LAST_UPDATE_DATE => l_last_updated_date,
5075 p_LAST_UPDATED_BY => l_last_updated_by,
5076 p_LAST_UPDATE_LOGIN => l_last_updated_login,
5077 p_ATTRIBUTE_CATEGORY => l_estimate_rec.attribute_category,
5078 p_ATTRIBUTE1 => l_estimate_rec.attribute1,
5079 p_ATTRIBUTE2 => l_estimate_rec.attribute2,
5080 p_ATTRIBUTE3 => l_estimate_rec.attribute3,
5081 p_ATTRIBUTE4 => l_estimate_rec.attribute4,
5082 p_ATTRIBUTE5 => l_estimate_rec.attribute5,
5083 p_ATTRIBUTE6 => l_estimate_rec.attribute6,
5084 p_ATTRIBUTE7 => l_estimate_rec.attribute7,
5085 p_ATTRIBUTE8 => l_estimate_rec.attribute8,
5086 p_ATTRIBUTE9 => l_estimate_rec.attribute9,
5087 p_ATTRIBUTE10 => l_estimate_rec.attribute10,
5088 p_ATTRIBUTE11 => l_estimate_rec.attribute11,
5089 p_ATTRIBUTE12 => l_estimate_rec.attribute12,
5090 p_ATTRIBUTE13 => l_estimate_rec.attribute13,
5091 p_ATTRIBUTE14 => l_estimate_rec.attribute14,
5092 p_ATTRIBUTE15 => l_estimate_rec.attribute15
5093 );
5094
5095 IF nvl(x_return_status,FND_API.G_RET_STS_SUCCESS) <> FND_API.G_RET_STS_SUCCESS THEN
5096 -- Log error, but continue processing
5097 x_return_status := FND_API.G_RET_STS_ERROR;
5098 RAISE FND_API.G_EXC_ERROR;
5099 END IF; -- nvl(l_return_status,'S') <> 'S'
5100
5101 -- Newly Copied Estimate ID
5102 p_cpy_estimate_id := l_estimate_rec.ESTIMATE_ID;
5103
5104 -- Need to copy Work Order Lines
5105 FOR l_est_workorder_line_rec IN SRC_EST_WORKORDER_LINES_CUR
5106 LOOP
5107 -- Clear Estimate WO Line id
5108 -- and work order related details
5109 IF (l_estimate_rec.CREATE_PARENT_WO_FLAG = 'Y' AND
5110 l_parent_estimate_wo_line_id = l_est_workorder_line_rec.ESTIMATE_WORK_ORDER_LINE_ID) THEN
5111
5112 SELECT EAM_CE_WORK_ORDER_LINES_S.NEXTVAL INTO l_wo_line_id_seq FROM DUAL;
5113
5114 EAM_CE_WORK_ORDER_LINES_PKG.INSERT_ROW(
5115 p_estimate_work_order_line_id => l_wo_line_id_seq
5116 ,p_estimate_work_order_id => NULL
5117 ,p_src_cu_id => l_est_workorder_line_rec.SRC_CU_ID
5118 ,p_src_activity_id => l_est_workorder_line_rec.SRC_ACTIVITY_ID
5119 ,p_src_activity_qty => l_est_workorder_line_rec.SRC_ACTIVITY_QTY
5120 ,p_src_op_seq_num => l_est_workorder_line_rec.SRC_OP_SEQ_NUM
5121 ,p_src_acct_class_code => l_est_workorder_line_rec.SRC_ACCT_CLASS_CODE
5122 ,p_src_diff_id => l_est_workorder_line_rec.SRC_DIFFICULTY_ID
5123 ,p_diff_qty => l_est_workorder_line_rec.DIFFICULTY_QTY
5124 ,p_estimate_id => p_cpy_estimate_id
5125 ,p_organization_id => l_est_workorder_line_rec.ORGANIZATION_ID
5126 ,p_work_order_seq_num => NULL
5127 ,p_work_order_number => NULL
5128 ,p_work_order_description => NULL
5129 ,p_ref_wip_entity_id => NULL
5130 ,p_primary_item_id => l_est_workorder_line_rec.PRIMARY_ITEM_ID
5131 ,p_status_type => l_est_workorder_line_rec.STATUS_TYPE
5132 ,p_acct_class_code => l_est_workorder_line_rec.ACCT_CLASS_CODE
5133 ,p_scheduled_start_date => sysdate
5134 ,p_scheduled_completion_date => NULL
5135 ,p_project_id => l_est_workorder_line_rec.PROJECT_ID
5136 ,p_task_id => l_est_workorder_line_rec.TASK_ID
5137 ,p_maintenance_object_id => NULL
5138 ,p_maintenance_object_type => NULL
5139 ,p_maintenance_object_source => NULL
5140 ,p_owning_department_id => l_est_workorder_line_rec.OWNING_DEPARTMENT_ID
5141 ,p_user_defined_status_id => NULL
5142 ,p_op_seq_num => l_est_workorder_line_rec.OP_SEQ_NUM
5143 ,p_op_description => l_est_workorder_line_rec.OP_DESCRIPTION
5144 ,p_standard_operation_id => l_est_workorder_line_rec.STANDARD_OPERATION_ID
5145 ,p_op_department_id => l_est_workorder_line_rec.OP_DEPARTMENT_ID
5146 ,p_op_long_description => l_est_workorder_line_rec.OP_LONG_DESCRIPTION
5147 ,p_res_seq_num => l_est_workorder_line_rec.RES_SEQ_NUM
5148 ,p_res_id => l_est_workorder_line_rec.RES_ID
5149 ,p_res_uom => l_est_workorder_line_rec.RES_UOM
5150 ,p_res_basis_type => l_est_workorder_line_rec.RES_BASIS_TYPE
5151 ,p_res_usage_rate_or_amount => l_est_workorder_line_rec.RES_USAGE_RATE_OR_AMOUNT
5152 ,p_res_required_units => l_est_workorder_line_rec.RES_REQUIRED_UNITS
5153 ,p_res_assigned_units => l_est_workorder_line_rec.RES_ASSIGNED_UNITS
5154 ,p_item_type => l_est_workorder_line_rec.ITEM_TYPE
5155 ,p_required_quantity => l_est_workorder_line_rec.REQUIRED_QUANTITY
5156 ,p_unit_price => l_est_workorder_line_rec.UNIT_PRICE
5157 ,p_uom => l_est_workorder_line_rec.UOM
5158 ,p_basis_type => l_est_workorder_line_rec.BASIS_TYPE
5159 ,p_suggested_vendor_name => l_est_workorder_line_rec.SUGGESTED_VENDOR_NAME
5160 ,p_suggested_vendor_id => l_est_workorder_line_rec.SUGGESTED_VENDOR_ID
5161 ,p_suggested_vendor_site => l_est_workorder_line_rec.SUGGESTED_VENDOR_SITE
5162 ,p_suggested_vendor_site_id => l_est_workorder_line_rec.SUGGESTED_VENDOR_SITE_ID
5163 ,p_mat_inventory_item_id => l_est_workorder_line_rec.MAT_INVENTORY_ITEM_ID
5164 ,p_mat_component_seq_num => l_est_workorder_line_rec.MAT_COMPONENT_SEQ_NUM
5165 ,p_mat_supply_subinventory => l_est_workorder_line_rec.MAT_SUPPLY_SUBINVENTORY
5166 ,p_mat_supply_locator_id => l_est_workorder_line_rec.MAT_SUPPLY_LOCATOR_ID
5167 ,p_di_amount => l_est_workorder_line_rec.DI_AMOUNT
5168 ,p_di_order_type_lookup_code => l_est_workorder_line_rec.DI_ORDER_TYPE_LOOKUP_CODE
5169 ,p_di_description => l_est_workorder_line_rec.DI_DESCRIPTION
5170 ,p_di_purchase_category_id => l_est_workorder_line_rec.DI_PURCHASE_CATEGORY_ID
5171 ,p_di_auto_request_material => l_est_workorder_line_rec.DI_AUTO_REQUEST_MATERIAL
5172 ,p_di_need_by_date => l_est_workorder_line_rec.DI_NEED_BY_DATE
5173 ,p_work_order_line_cost => l_est_workorder_line_rec.WO_LINE_PER_UNIT_COST
5174 ,p_creation_date => sysdate
5175 ,p_created_by => FND_GLOBAL.LOGIN_ID
5176 ,p_last_update_date => sysdate
5177 ,p_last_updated_by => FND_GLOBAL.LOGIN_ID
5178 ,p_last_update_login => FND_GLOBAL.LOGIN_ID
5179 ,p_work_order_type => l_est_workorder_line_rec.WORK_ORDER_TYPE
5180 ,p_activity_type => l_est_workorder_line_rec.ACTIVITY_TYPE
5181 ,p_activity_source => l_est_workorder_line_rec.ACTIVITY_SOURCE
5182 ,p_activity_cause => l_est_workorder_line_rec.ACTIVITY_CAUSE
5183 ,p_available_qty => l_est_workorder_line_rec.AVAILABLE_QUANTITY
5184 ,p_item_comments => l_est_workorder_line_rec.ITEM_COMMENTS
5185 ,p_cu_qty => l_est_workorder_line_rec.CU_QTY
5186 ,p_res_sch_flag => l_est_workorder_line_rec.RES_SCHEDULED_FLAG
5187 );
5188
5189 -- Update the estimate with the estimate line id
5190 EAM_CONSTRUCTION_ESTIMATES_PKG.UPDATE_ROW(
5191 p_ESTIMATE_ID => l_estimate_rec.ESTIMATE_ID,
5192 p_ORGANIZATION_ID => l_estimate_rec.ORGANIZATION_ID,
5193 p_ESTIMATE_NUMBER => l_estimate_rec.ESTIMATE_NUMBER,
5194 p_ESTIMATE_DESCRIPTION => l_estimate_rec.ESTIMATE_DESCRIPTION,
5195 p_GROUPING_OPTION => l_estimate_rec.GROUPING_OPTION,
5196 p_PARENT_WO_ID => l_wo_line_id_seq,
5197 p_CREATE_PARENT_WO_FLAG => l_estimate_rec.CREATE_PARENT_WO_FLAG,
5198 p_CREATION_DATE => l_creation_date,
5199 p_CREATED_BY => l_created_by,
5200 p_LAST_UPDATE_DATE => l_last_updated_date,
5201 p_LAST_UPDATED_BY => l_last_updated_by,
5202 p_LAST_UPDATE_LOGIN => l_last_updated_login,
5203 p_ATTRIBUTE_CATEGORY => l_estimate_rec.attribute_category,
5204 p_ATTRIBUTE1 => l_estimate_rec.attribute1,
5205 p_ATTRIBUTE2 => l_estimate_rec.attribute2,
5206 p_ATTRIBUTE3 => l_estimate_rec.attribute3,
5207 p_ATTRIBUTE4 => l_estimate_rec.attribute4,
5208 p_ATTRIBUTE5 => l_estimate_rec.attribute5,
5209 p_ATTRIBUTE6 => l_estimate_rec.attribute6,
5210 p_ATTRIBUTE7 => l_estimate_rec.attribute7,
5211 p_ATTRIBUTE8 => l_estimate_rec.attribute8,
5212 p_ATTRIBUTE9 => l_estimate_rec.attribute9,
5213 p_ATTRIBUTE10 => l_estimate_rec.attribute10,
5214 p_ATTRIBUTE11 => l_estimate_rec.attribute11,
5215 p_ATTRIBUTE12 => l_estimate_rec.attribute12,
5216 p_ATTRIBUTE13 => l_estimate_rec.attribute13,
5217 p_ATTRIBUTE14 => l_estimate_rec.attribute14,
5218 p_ATTRIBUTE15 => l_estimate_rec.attribute15
5219 );
5220
5221 ELSE
5222 EAM_CE_WORK_ORDER_LINES_PKG.INSERT_ROW(
5223 p_estimate_work_order_line_id => NULL
5224 ,p_estimate_work_order_id => NULL
5225 ,p_src_cu_id => l_est_workorder_line_rec.SRC_CU_ID
5226 ,p_src_activity_id => l_est_workorder_line_rec.SRC_ACTIVITY_ID
5227 ,p_src_activity_qty => l_est_workorder_line_rec.SRC_ACTIVITY_QTY
5228 ,p_src_op_seq_num => l_est_workorder_line_rec.SRC_OP_SEQ_NUM
5229 ,p_src_acct_class_code => l_est_workorder_line_rec.SRC_ACCT_CLASS_CODE
5230 ,p_src_diff_id => l_est_workorder_line_rec.SRC_DIFFICULTY_ID
5231 ,p_diff_qty => l_est_workorder_line_rec.DIFFICULTY_QTY
5232 ,p_estimate_id => p_cpy_estimate_id
5233 ,p_organization_id => l_est_workorder_line_rec.ORGANIZATION_ID
5234 ,p_work_order_seq_num => NULL
5235 ,p_work_order_number => NULL
5236 ,p_work_order_description => NULL
5237 ,p_ref_wip_entity_id => NULL
5238 ,p_primary_item_id => l_est_workorder_line_rec.PRIMARY_ITEM_ID
5239 ,p_status_type => l_est_workorder_line_rec.STATUS_TYPE
5240 ,p_acct_class_code => l_est_workorder_line_rec.ACCT_CLASS_CODE
5241 ,p_scheduled_start_date => sysdate
5242 ,p_scheduled_completion_date => NULL
5243 ,p_project_id => l_est_workorder_line_rec.PROJECT_ID
5244 ,p_task_id => l_est_workorder_line_rec.TASK_ID
5245 ,p_maintenance_object_id => NULL
5246 ,p_maintenance_object_type => NULL
5247 ,p_maintenance_object_source => NULL
5248 ,p_owning_department_id => l_est_workorder_line_rec.OWNING_DEPARTMENT_ID
5249 ,p_user_defined_status_id => l_est_workorder_line_rec.USER_DEFINED_STATUS_ID
5250 ,p_op_seq_num => l_est_workorder_line_rec.OP_SEQ_NUM
5251 ,p_op_description => l_est_workorder_line_rec.OP_DESCRIPTION
5252 ,p_standard_operation_id => l_est_workorder_line_rec.STANDARD_OPERATION_ID
5253 ,p_op_department_id => l_est_workorder_line_rec.OP_DEPARTMENT_ID
5254 ,p_op_long_description => l_est_workorder_line_rec.OP_LONG_DESCRIPTION
5255 ,p_res_seq_num => l_est_workorder_line_rec.RES_SEQ_NUM
5256 ,p_res_id => l_est_workorder_line_rec.RES_ID
5257 ,p_res_uom => l_est_workorder_line_rec.RES_UOM
5258 ,p_res_basis_type => l_est_workorder_line_rec.RES_BASIS_TYPE
5259 ,p_res_usage_rate_or_amount => l_est_workorder_line_rec.RES_USAGE_RATE_OR_AMOUNT
5260 ,p_res_required_units => l_est_workorder_line_rec.RES_REQUIRED_UNITS
5261 ,p_res_assigned_units => l_est_workorder_line_rec.RES_ASSIGNED_UNITS
5262 ,p_item_type => l_est_workorder_line_rec.ITEM_TYPE
5263 ,p_required_quantity => l_est_workorder_line_rec.REQUIRED_QUANTITY
5264 ,p_unit_price => l_est_workorder_line_rec.UNIT_PRICE
5265 ,p_uom => l_est_workorder_line_rec.UOM
5266 ,p_basis_type => l_est_workorder_line_rec.BASIS_TYPE
5267 ,p_suggested_vendor_name => l_est_workorder_line_rec.SUGGESTED_VENDOR_NAME
5268 ,p_suggested_vendor_id => l_est_workorder_line_rec.SUGGESTED_VENDOR_ID
5269 ,p_suggested_vendor_site => l_est_workorder_line_rec.SUGGESTED_VENDOR_SITE
5270 ,p_suggested_vendor_site_id => l_est_workorder_line_rec.SUGGESTED_VENDOR_SITE_ID
5271 ,p_mat_inventory_item_id => l_est_workorder_line_rec.MAT_INVENTORY_ITEM_ID
5272 ,p_mat_component_seq_num => l_est_workorder_line_rec.MAT_COMPONENT_SEQ_NUM
5273 ,p_mat_supply_subinventory => l_est_workorder_line_rec.MAT_SUPPLY_SUBINVENTORY
5274 ,p_mat_supply_locator_id => l_est_workorder_line_rec.MAT_SUPPLY_LOCATOR_ID
5275 ,p_di_amount => l_est_workorder_line_rec.DI_AMOUNT
5276 ,p_di_order_type_lookup_code => l_est_workorder_line_rec.DI_ORDER_TYPE_LOOKUP_CODE
5277 ,p_di_description => l_est_workorder_line_rec.DI_DESCRIPTION
5278 ,p_di_purchase_category_id => l_est_workorder_line_rec.DI_PURCHASE_CATEGORY_ID
5279 ,p_di_auto_request_material => l_est_workorder_line_rec.DI_AUTO_REQUEST_MATERIAL
5280 ,p_di_need_by_date => l_est_workorder_line_rec.DI_NEED_BY_DATE
5281 ,p_work_order_line_cost => l_est_workorder_line_rec.WO_LINE_PER_UNIT_COST
5282 ,p_creation_date => sysdate
5283 ,p_created_by => FND_GLOBAL.LOGIN_ID
5284 ,p_last_update_date => sysdate
5285 ,p_last_updated_by => FND_GLOBAL.LOGIN_ID
5286 ,p_last_update_login => FND_GLOBAL.LOGIN_ID
5287 ,p_work_order_type => l_est_workorder_line_rec.WORK_ORDER_TYPE
5288 ,p_activity_type => l_est_workorder_line_rec.ACTIVITY_TYPE
5289 ,p_activity_source => l_est_workorder_line_rec.ACTIVITY_SOURCE
5290 ,p_activity_cause => l_est_workorder_line_rec.ACTIVITY_CAUSE
5291 ,p_available_qty => l_est_workorder_line_rec.AVAILABLE_QUANTITY
5292 ,p_item_comments => l_est_workorder_line_rec.ITEM_COMMENTS
5293 ,p_cu_qty => l_est_workorder_line_rec.CU_QTY
5294 ,p_res_sch_flag => l_est_workorder_line_rec.RES_SCHEDULED_FLAG
5295 );
5296 END IF;
5297
5298
5299
5300 END LOOP;
5301
5302 IF NVL(p_commit,'F') = 'T' THEN
5303 COMMIT;
5304 END IF;
5305 x_return_status := FND_API.G_RET_STS_SUCCESS;
5306
5307 EXCEPTION
5308 WHEN FND_API.G_EXC_ERROR THEN
5309 ROLLBACK TO COPY_EST_WORKBENCH;
5310 x_return_status := FND_API.G_RET_STS_ERROR;
5311 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
5312 p_data => x_msg_data);
5313 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5314 ROLLBACK TO COPY_EST_WORKBENCH;
5315
5316 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5317 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
5318 p_data => x_msg_data);
5319 WHEN OTHERS THEN
5320 ROLLBACK TO COPY_EST_WORKBENCH;
5321 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5322 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5323 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, 'COPY_EST_WORKBENCH');
5324 END IF;
5325 FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
5326 p_data => x_msg_data);
5327 END COPY_EST_WORKBENCH;
5328
5329 End EAM_CONSTRUCTION_EST_PVT;