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