DBA Data[Home] [Help]

PACKAGE BODY: APPS.EAM_CONSTRUCTION_EST_PVT

Source


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