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