[Home] [Help]
PACKAGE BODY: APPS.CSP_PROD_TASK_PARTS_HISTORY
Source
1 PACKAGE BODY CSP_PROD_TASK_PARTS_HISTORY AS
2 /* $Header: cspgpthb.pls 115.14 2004/03/10 18:46:55 jjalla ship $ */
3 -- Start of Comments
4 -- Package name : CSP_PROD_TASK_PARTS_HISTORY
5 -- Purpose : This package includes the procedures that handle the history of Product-Task-Parts details.
6 -- History : 04-May-2001, Arul Joseph.
7 -- NOTE :
8 -- End of Comments
9 procedure create_parts_history(
10 errbuf OUT NOCOPY varchar2,
11 retcode OUT NOCOPY number) is
12
13 cursor c_debrief_lines is
14 select cia.inventory_item_id product_id,
15 jtb.template_id,
16 cdl.inventory_item_id,
17 inv_convert.inv_um_convert(
18 cdl.inventory_item_id,
19 null,
20 cdl.quantity,
21 cdl.uom_code,
22 msib.primary_uom_code,
23 null,
24 null) quantity,
25 msib.primary_uom_code,
26 cdl.item_revision,
27 cdh.statistics_updated,
28 cdh.debrief_header_id,
29 cdl.debrief_line_id
30 from csf_debrief_lines cdl,
31 csf_debrief_headers cdh,
32 jtf_task_assignments jta,
33 jtf_tasks_b jtb,
34 mtl_system_items_b msib,
35 cs_incidents_all cia
36 where cdl.statistics_updated is null
37 and cdl.spare_update_status = 'SUCCEEDED'
38 and cdl.issuing_sub_inventory_code is not null
39 and cdl.inventory_item_id = msib.inventory_item_id
40 and cdl.issuing_inventory_org_id = msib.organization_id
41 and cdh.debrief_header_id = cdl.debrief_header_id
42 and jta.task_assignment_id = cdh.task_assignment_id
43 and jtb.task_id = jta.task_id
44 and jtb.template_id is not null
45 and jtb.source_object_type_code = 'SR'
46 and cia.incident_id = jtb.source_object_id
47 and cia.inventory_item_id is not null
48 order by cdh.debrief_header_id;
49
50 cursor c_product_task(p_template_id number,
51 p_product_id number) is
52 select product_task_id,
53 actual_times_used
54 from csp_product_tasks cpt
55 where cpt.task_template_id = p_template_id
56 and cpt.product_id = p_product_id;
57
58 cursor c_existing_line(p_debrief_header_id number,
59 p_inventory_item_id number,
60 p_revision varchar2) is
61 select cdl.inventory_item_id
62 from csf_debrief_lines cdl
63 where cdl.debrief_header_id = p_debrief_header_id
64 and cdl.inventory_item_id = p_inventory_item_id
65 and nvl(cdl.item_revision,0) = nvl(p_revision,0)
66 and cdl.statistics_updated = 'Y';
67
68 Type v_cur_type IS REF CURSOR;
69
70 l_task_part_id number;
71 l_quantity_used number;
72 l_rollup_quantity_used number;
73 l_rollup_times_used number;
74 l_substitute_item number;
75 l_actual_times_used number;
76 l_product_task_id number;
77 l_statistics varchar2(2000);
78 l_inventory_item_id number;
79 l_increment number := 1;
80 l_debrief_header_id number;
81 l_sql_string varchar2(2000);
82 l_cur v_cur_type;
83 l_replaced_items_list varchar2(2000);
84 l_rollup_increment number;
85 l_rollup_inventory_item_id number;
86 cursor c_task_parts(p_product_task_id number,
87 p_inventory_item_id number,
88 p_revision varchar2) is
89 select ctp.task_part_id,
90 ctp.quantity_used,
91 ctp.actual_times_used,
92 ctp.rollup_quantity_used,
93 ctp.rollup_times_used
94 from csp_task_parts ctp
95 where ctp.product_task_id = p_product_task_id
96 and ctp.inventory_item_id = p_inventory_item_id
97 and nvl(ctp.revision,'-') = nvl(p_revision,'-') ;
98 l_temp_item_id NUMBER;
99 BEGIN
100
101 l_debrief_header_id := -1;
102
103 for cdl in c_debrief_lines loop
104
105 l_temp_item_id := cdl.inventory_item_id;
106
107 l_actual_times_used := null;
108 l_product_task_id := null;
109 open c_product_task(cdl.template_id,
110 cdl.product_id);
111 fetch c_product_task into l_product_task_id,
112 l_actual_times_used;
113 close c_product_task;
114
115 if cdl.debrief_header_id <> l_debrief_header_id and
116 cdl.statistics_updated is null then
117
118 l_debrief_header_id := cdl.debrief_header_id;
119 l_actual_times_used := nvl(l_actual_times_used,0) + 1;
120
121 if l_product_task_id is null then
122 create_product_task(
123 p_product_id => cdl.product_id,
124 p_template_id => cdl.template_id,
125 x_product_task_id => l_product_task_id);
126 else
127 update_product_task(
128 p_product_task_id => l_product_task_id,
129 p_actual_times_used => l_actual_times_used);
130 end if;
131
132 update csf_debrief_headers
133 set statistics_updated = 'Y'
134 where debrief_header_id = cdl.debrief_header_id;
135
136 end if;
137
138 l_task_part_id := null;
139 l_quantity_used:= null;
140 -- Handle the debrief line
141 open c_task_parts(l_product_task_id,
142 cdl.inventory_item_id,
143 cdl.item_revision);
144 fetch c_task_parts into l_task_part_id,
145 l_quantity_used,
146 l_actual_times_used,
147 l_rollup_quantity_used,
148 l_rollup_times_used;
149 close c_task_parts;
150
151 l_quantity_used := nvl(l_quantity_used,0);
152 l_actual_times_used := nvl(l_actual_times_used,0);
153 l_rollup_quantity_used := nvl(l_rollup_quantity_used,0);
154 l_rollup_times_used := nvl(l_rollup_times_used,0);
155
156 if l_task_part_id is null then
157 l_increment := 1;
158 create_task_part(
159 p_product_task_id => l_product_task_id,
160 p_inventory_item_id => cdl.inventory_item_id,
161 p_quantity => cdl.quantity,
162 p_uom_code => cdl.primary_uom_code,
163 p_revision => cdl.item_revision,
164 p_actual_times_used => 1,
165 x_task_part_id => l_task_part_id);
166
167 handle_substitutes(
168 p_product_task_id => l_product_task_id,
169 p_task_part_id => l_task_part_id,
170 p_inventory_item_id => cdl.inventory_item_id,
171 p_quantity_used => cdl.quantity, --new
172 p_actual_times_used => 1, --new
173 p_rollup_quantity_used => cdl.quantity,
174 p_rollup_times_used => 1,
175 p_increment => l_increment,
176 p_debrief_header_id => cdl.debrief_header_id ); -- added to handel duplicate count for rolled up times used);
177
178 else
179 l_inventory_item_id := null;
180 l_increment := 0 ;
181 l_rollup_increment := 0 ;
182 -- Check if this item has already been processed on a different debrief line
183 open c_existing_line(cdl.debrief_header_id,
184 cdl.inventory_item_id,
185 cdl.item_revision
186 );
187 fetch c_existing_line into l_inventory_item_id;
188 close c_existing_line;
189 if l_inventory_item_id is null then
190 l_increment := 1;
191 end if;
192 -- we should also consider if any of the items which are replaced by this item already processed so modified above static cursor with ref cursor
193 CSP_SUPERSESSIONS_PVT.get_replaced_items_list(p_inventory_item_id => cdl.inventory_item_id
194 ,p_organization_id => NULL
195 ,x_replaced_item_list => l_replaced_items_list);
196 IF l_replaced_items_list IS NOT NULL THEN
197 l_sql_string := 'select cdl.inventory_item_id
198 from csf_debrief_lines cdl
199 where cdl.debrief_header_id = cdl.debrief_header_id
200 and cdl.inventory_item_id IN ' || l_replaced_items_list ||
201 'or cdl.inventory_item_id = cdl.inventory_item_id
202 and cdl.statistics_updated = ' || '''' || 'Y' || '''';
203
204 OPEN l_cur for l_sql_string;
205 FETCH l_cur INTO l_rollup_inventory_item_id;
206 CLOSE l_cur;
207 IF l_rollup_inventory_item_id IS NULL THEN
208 l_rollup_increment := 1;
209 END IF;
210 ELSE
211 l_rollup_increment := l_increment;
212 END IF;
213
214
215
216
217 l_actual_times_used := l_actual_times_used + l_increment;
218
219 update_task_part(
220 p_task_part_id => l_task_part_id,
221 p_quantity_used => l_quantity_used + cdl.quantity,
222 p_actual_times_used => l_actual_times_used,
223 p_rollup_quantity_used => l_rollup_quantity_used + cdl.quantity,
224 p_rollup_times_used => l_rollup_times_used + l_rollup_increment,
225 p_substitute_item => fnd_api.g_miss_num);
226
227 handle_substitutes(
228 p_product_task_id => l_product_task_id,
229 p_task_part_id => l_task_part_id,
230 p_inventory_item_id => cdl.inventory_item_id,
231 p_quantity_used => l_quantity_used + cdl.quantity, --new
232 p_actual_times_used => l_actual_times_used + l_increment, --new
233 p_rollup_quantity_used => l_rollup_quantity_used + cdl.quantity,
234 p_rollup_times_used => l_rollup_times_used + l_increment,
235 p_increment => l_increment,
236 p_debrief_header_id => cdl.debrief_header_id ); -- added to handel duplicate count for rolled up times used
237
238
239 end if;
240
241 update csf_debrief_lines
242 set statistics_updated = 'Y'
243 where debrief_line_id = cdl.debrief_line_id;
244
245 end loop;
246
247 update_task_percentage;
248
249 End Create_parts_history;
250
251 procedure handle_substitutes(
252 p_product_task_id in number,
253 p_task_part_id in number,
254 p_inventory_item_id in number,
255 p_quantity_used in number,
256 p_actual_times_used in number,
257 p_rollup_quantity_used in number,
258 p_rollup_times_used in number,
259 p_increment in number,
260 p_debrief_header_id in number) IS
261
262 l_organization_id number;
263 l_task_part_id number;
264 l_inventory_item_id number;
265 l_actual_times_used number;
266 l_rollup_quantity_used number;
267 l_rollup_times_used number;
268 l_debrief_line_id number;
269
270 cursor substitutes is
271 select ctp.task_part_id,
272 ctp.inventory_item_id,
273 ctp.actual_times_used,
274 ctp.rollup_quantity_used,
275 ctp.rollup_times_used
276 from csp_task_parts ctp,
277 mtl_related_items_view mriv
278 where mriv.related_item_id = ctp.inventory_item_id
279 and mriv.organization_id = l_organization_id
280 and mriv.inventory_item_id = p_inventory_item_id
281 and mriv.relationship_type_id = 2
282 and ctp.product_task_id = p_product_task_id
283 and ctp.inventory_item_id <> p_inventory_item_id
284 and ctp.rollup_quantity_used is not null
285 and sysdate between nvl(ctp.start_date,sysdate-1)
286 and nvl(ctp.end_date,sysdate+1)
287 order by ctp.actual_times_used desc;
288
289 cursor debrief_line is
290 select DEBRIEF_LINE_ID
291 from csf_debrief_lines cdl
292 where INVENTORY_ITEM_ID = l_inventory_item_id
293 and debrief_header_id = p_debrief_header_id
294 and STATISTICS_UPDATED = 'Y' ;
295
296
297 begin
298
299
300
301 l_organization_id := cs_std.get_Item_Valdn_Orgzn_ID;
302 l_task_part_id := null;
303
304 open substitutes;
305 fetch substitutes into l_task_part_id,
306 l_inventory_item_id,
307 l_actual_times_used,
308 l_rollup_quantity_used,
309 l_rollup_times_used;
310 close substitutes;
311
312
313 if l_task_part_id is not null then
314
315 if l_actual_times_used >= p_actual_times_used then --Update rollup of substitute
316 open debrief_line;
317 fetch debrief_line INTO l_debrief_line_id;
318 CLOSE debrief_line;
319 IF l_debrief_line_id IS NULL THEN
320 update_task_part(
321 p_task_part_id => l_task_part_id,
322 p_quantity_used => fnd_api.g_miss_num,
323 p_actual_times_used => fnd_api.g_miss_num,
324 p_rollup_quantity_used => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
325 p_rollup_times_used => nvl(l_rollup_times_used,0) + p_rollup_times_used, --new
326 p_substitute_item => fnd_api.g_miss_num);
327 ELSE
328 update_task_part(
329 p_task_part_id => l_task_part_id,
330 p_quantity_used => fnd_api.g_miss_num,
331 p_actual_times_used => fnd_api.g_miss_num,
332 p_rollup_quantity_used => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
333 p_rollup_times_used => fnd_api.g_miss_num,
334 p_substitute_item => fnd_api.g_miss_num);
335 END IF;
336
337 update_task_part(
338 p_task_part_id => p_task_part_id,
339 p_quantity_used => fnd_api.g_miss_num,
340 p_actual_times_used => fnd_api.g_miss_num,
341 p_rollup_quantity_used => null,
342 p_rollup_times_used => null,
343 p_substitute_item => l_inventory_item_id);
344
345 elsif l_actual_times_used < p_actual_times_used then --Make this the preferred item
346
347 open debrief_line;
348 fetch debrief_line INTO l_debrief_line_id;
349 CLOSE debrief_line;
350 IF l_debrief_line_id IS NULL THEN
351 update_task_part(
352 p_task_part_id => l_task_part_id,
353 p_quantity_used => fnd_api.g_miss_num,
354 p_actual_times_used => fnd_api.g_miss_num,
355 p_rollup_quantity_used => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
356 p_rollup_times_used => nvl(l_rollup_times_used,0) + p_rollup_times_used, --new
357 p_substitute_item => fnd_api.g_miss_num);
358 ELSE
359 update_task_part(
360 p_task_part_id => l_task_part_id,
361 p_quantity_used => fnd_api.g_miss_num,
362 p_actual_times_used => fnd_api.g_miss_num,
363 p_rollup_quantity_used => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
364 p_rollup_times_used => fnd_api.g_miss_num,
365 p_substitute_item => fnd_api.g_miss_num);
366 END IF;
367
368
369 update_task_part(
370 p_task_part_id => p_task_part_id,
371 p_quantity_used => fnd_api.g_miss_num,
372 p_actual_times_used => fnd_api.g_miss_num,
373 p_rollup_quantity_used => null,
374 p_rollup_times_used => null,
375 p_substitute_item => l_inventory_item_id);
376
377 handle_supersede_items(p_product_task_id => p_product_task_id
378 ,p_task_part_id => p_task_part_id
379 ,p_inventory_item_id => p_inventory_item_id
380 ,p_rollup_quantity_used => l_rollup_quantity_used + p_rollup_quantity_used
381 ,p_rollup_times_used => l_rollup_times_used + p_rollup_times_used
382 ,p_debrief_header_id => p_debrief_header_id );
383 end if;
384 ELSE
385 handle_supersede_items(p_product_task_id => p_product_task_id
386 ,p_task_part_id => p_task_part_id
387 ,p_inventory_item_id => p_inventory_item_id
388 ,p_rollup_quantity_used => p_rollup_quantity_used
389 ,p_rollup_times_used => p_rollup_times_used
390 ,p_debrief_header_id => p_debrief_header_id );
391 end if;
392 end;
393
394 procedure handle_supersede_items(p_product_task_id in number,
395 p_task_part_id in number,
396 p_inventory_item_id in number,
397 p_rollup_quantity_used in number,
398 p_rollup_times_used in number,
399 p_debrief_header_id in number) is
400
401 l_supersede_item number;
402 l_task_part_id number;
403 l_rollup_quantity_used number;
404 l_rollup_times_used number;
405 l_primary_uom_code varchar2(50);
406
407 cursor supersede_items is
408 select ctp.task_part_id,
409 ctp.rollup_quantity_used,
410 ctp.rollup_times_used
411 from csp_task_parts ctp
412 where ctp.product_task_id = p_product_task_id
413 and ctp.inventory_item_id = l_supersede_item
414 and ctp.rollup_quantity_used is not null
415 and sysdate between nvl(ctp.start_date,sysdate-1)
416 and nvl(ctp.end_date,sysdate+1)
417 order by ctp.actual_times_used desc;
418
419 cursor primary_uom is
420 select primary_uom_code
421 from mtl_system_items_b
422 where inventory_item_id = l_supersede_item;
423
424 Type v_cur_type IS REF CURSOR;
425
426 l_cur v_cur_type;
427 l_sql_string varchar2(2000);
428 l_replaced_items_list varchar2(2000);
429 l_debrief_line_id NUMBER;
430
431 BEGIN
432 l_supersede_item := null;
433 csp_supersessions_pvt.get_top_supersede_item(p_item_id => p_inventory_item_id
434 ,p_org_id => null
435 ,x_item_id => l_supersede_item);
436 IF l_supersede_item <> p_inventory_item_id THEN
437 OPEN supersede_items;
438 FETCH supersede_items INTO l_task_part_id,
439 l_rollup_quantity_used,
440 l_rollup_times_used;
441 CLOSE supersede_items;
442 OPEN primary_uom;
443 FETCH primary_uom INTO l_primary_uom_code;
444 CLOSE primary_uom;
445
446 IF l_task_part_id IS NOT NULL THEN
447 CSP_SUPERSESSIONS_PVT.get_replaced_items_list(p_inventory_item_id => l_supersede_item
448 ,p_organization_id => NULL
449 ,x_replaced_item_list => l_replaced_items_list);
450 l_sql_string := 'select DEBRIEF_LINE_ID
451 from csf_debrief_lines cdl
452 where INVENTORY_ITEM_ID IN ' || l_replaced_items_list ||
453 'and debrief_header_id = ' || p_debrief_header_id ||
454 'and STATISTICS_UPDATED =' || '''' || 'Y' || '''' ;
455
456 OPEN l_cur for l_sql_string;
457 FETCH l_cur INTO l_debrief_line_id;
458 CLOSE l_cur;
459 IF l_debrief_line_id IS NOT NULL THEN
460 update_task_part(
461 p_task_part_id => l_task_part_id,
462 p_quantity_used => fnd_api.g_miss_num,
463 p_actual_times_used => fnd_api.g_miss_num,
464 p_rollup_quantity_used => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
465 p_rollup_times_used => fnd_api.g_miss_num,
466 p_substitute_item => fnd_api.g_miss_num);
467 ELSE
468 update_task_part(
469 p_task_part_id => l_task_part_id,
470 p_quantity_used => fnd_api.g_miss_num,
471 p_actual_times_used => fnd_api.g_miss_num,
472 p_rollup_quantity_used => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
473 p_rollup_times_used => nvl(l_rollup_times_used,0) + p_rollup_times_used, --new
474 p_substitute_item => fnd_api.g_miss_num);
475 END IF;
476
477 update_task_part(
478 p_task_part_id => p_task_part_id,
479 p_quantity_used => fnd_api.g_miss_num,
480 p_actual_times_used => fnd_api.g_miss_num,
481 p_rollup_quantity_used => null,
482 p_rollup_times_used => null,
483 p_substitute_item => l_supersede_item);
484 ELSE
485 create_task_part(
486 p_product_task_id => p_product_task_id,
487 p_inventory_item_id => l_supersede_item,
488 p_quantity => null,
489 p_uom_code => l_primary_uom_code,
490 p_revision => null,
491 p_actual_times_used => null,
492 x_task_part_id => l_task_part_id);
493 update_task_part(
494 p_task_part_id => l_task_part_id,
495 p_quantity_used => fnd_api.g_miss_num,
496 p_actual_times_used => fnd_api.g_miss_num,
497 p_rollup_quantity_used => p_rollup_quantity_used,
498 p_rollup_times_used => p_rollup_times_used,
499 p_substitute_item => fnd_api.g_miss_num);
500 update_task_part(
501 p_task_part_id => p_task_part_id,
502 p_quantity_used => fnd_api.g_miss_num,
503 p_actual_times_used => fnd_api.g_miss_num,
504 p_rollup_quantity_used => null,
505 p_rollup_times_used => null,
506 p_substitute_item => l_supersede_item);
507
508 END IF;
509 END IF;
510 END handle_supersede_items;
511
512 procedure update_task_percentage is
513
514 cursor times_used is
515 select product_id,
516 sum(cpt.actual_times_used) sum_times_used
517 from csp_product_tasks cpt
518 group by cpt.product_id;
519
520 begin
521 for tu in times_used loop
522 update csp_product_tasks
523 set task_percentage = actual_times_used / tu.sum_times_used * 100
524 where product_id = tu.product_id;
525 end loop;
526 end;
527
528 PROCEDURE Create_product_task(
529 p_product_id in number,
530 p_template_id in number,
531 x_product_task_id OUT NOCOPY number) is
532
533 l_product_task_id number;
534
535 begin
536 csp_product_tasks_pkg.insert_row(
537 px_product_task_id => x_product_task_id,
538 p_product_id => p_product_id,
539 p_task_template_id => p_template_id,
540 p_auto_manual => 'A',
541 p_actual_times_used => 1,
542 p_task_percentage => null,
543 p_attribute_category => null,
544 p_attribute1 => null,
545 p_attribute2 => null,
546 p_attribute3 => null,
547 p_attribute4 => null,
548 p_attribute5 => null,
549 p_attribute6 => null,
550 p_attribute7 => null,
551 p_attribute8 => null,
552 p_attribute9 => null,
553 p_attribute10 => null,
554 p_attribute11 => null,
555 p_attribute12 => null,
556 p_attribute13 => null,
557 p_attribute14 => null,
558 p_attribute15 => null,
559 p_created_by => fnd_global.user_id,
560 p_creation_date => sysdate,
561 p_last_updated_by => fnd_global.user_id,
562 p_last_update_date => sysdate,
563 p_last_update_login => null);
564
565 End Create_product_task;
566
567 PROCEDURE Update_product_task(
568 p_product_task_id in number,
569 p_actual_times_used in number) is
570 BEGIN
571 CSP_PRODUCT_TASKS_PKG.Update_Row(
572 p_PRODUCT_TASK_ID => p_product_task_id,
573 p_PRODUCT_ID => fnd_api.g_miss_num,
574 p_TASK_TEMPLATE_ID => fnd_api.g_miss_num,
575 p_AUTO_MANUAL => 'A',
576 p_ACTUAL_TIMES_USED => p_actual_times_used,
577 p_TASK_PERCENTAGE => fnd_api.g_miss_num,
578 p_ATTRIBUTE_CATEGORY => fnd_api.g_miss_char,
579 p_ATTRIBUTE1 => fnd_api.g_miss_char,
580 p_ATTRIBUTE2 => fnd_api.g_miss_char,
581 p_ATTRIBUTE3 => fnd_api.g_miss_char,
582 p_ATTRIBUTE4 => fnd_api.g_miss_char,
583 p_ATTRIBUTE5 => fnd_api.g_miss_char,
584 p_ATTRIBUTE6 => fnd_api.g_miss_char,
585 p_ATTRIBUTE7 => fnd_api.g_miss_char,
586 p_ATTRIBUTE8 => fnd_api.g_miss_char,
587 p_ATTRIBUTE9 => fnd_api.g_miss_char,
588 p_ATTRIBUTE10 => fnd_api.g_miss_char,
589 p_ATTRIBUTE11 => fnd_api.g_miss_char,
590 p_ATTRIBUTE12 => fnd_api.g_miss_char,
591 p_ATTRIBUTE13 => fnd_api.g_miss_char,
592 p_ATTRIBUTE14 => fnd_api.g_miss_char,
593 p_ATTRIBUTE15 => fnd_api.g_miss_char,
594 p_CREATED_BY => FND_API.G_MISS_NUM,
595 p_CREATION_DATE => FND_API.G_MISS_DATE,
596 p_LAST_UPDATED_BY => FND_GLOBAL.USER_ID,
597 p_LAST_UPDATE_DATE => SYSDATE,
598 p_LAST_UPDATE_LOGIN => fnd_api.g_miss_num);
599
600 End Update_product_task;
601
602 PROCEDURE Create_task_part(
603 p_product_task_id in number,
604 p_inventory_item_id in number,
605 p_quantity in number,
606 p_uom_code in varchar2,
607 p_revision in varchar2,
608 p_actual_times_used in number,
609 x_task_part_id OUT NOCOPY number) is
610
611 l_task_part_id number := null;
612
613 begin
614
615 csp_task_parts_pkg.insert_row(
616 px_task_part_id => l_task_part_id,
617 p_product_task_id => p_product_task_id,
618 p_inventory_item_id => p_inventory_item_id,
619 p_manual_quantity => null,
620 p_manual_percentage => null,
621 p_quantity_used => p_quantity,
622 p_actual_times_used => p_actual_times_used,
623 p_created_by => fnd_global.user_id,
624 p_creation_date => sysdate,
625 p_last_updated_by => fnd_global.user_id,
626 p_last_update_date => sysdate,
627 p_last_update_login => null,
628 p_attribute_category => null,
629 p_attribute1 => null,
630 p_attribute2 => null,
631 p_attribute3 => null,
632 p_attribute4 => null,
633 p_attribute5 => null,
634 p_attribute6 => null,
635 p_attribute7 => null,
636 p_attribute8 => null,
637 p_attribute9 => null,
638 p_attribute10 => null,
639 p_attribute11 => null,
640 p_attribute12 => null,
641 p_attribute13 => null,
642 p_attribute14 => null,
643 p_attribute15 => null,
644 p_primary_uom_code => p_uom_code,
645 p_revision => p_revision,
646 p_start_date => null,
647 p_end_date => null,
648 p_rollup_quantity_used => p_quantity,
649 p_rollup_times_used => 1,
650 p_substitute_item => null);
651
652 x_task_part_id := l_task_part_id;
653 End Create_task_part;
654
655 PROCEDURE update_task_part(
656 p_task_part_id number,
657 p_quantity_used number,
658 p_actual_times_used number,
659 p_rollup_quantity_used number,
660 p_rollup_times_used number,
661 p_substitute_item number) is
662
663 BEGIN
664
665 csp_task_parts_pkg.Update_Row(
666 p_TASK_PART_ID => p_task_part_id,
667 p_PRODUCT_TASK_ID => fnd_api.g_miss_num,
668 p_INVENTORY_ITEM_ID => fnd_api.g_miss_num,
669 p_MANUAL_QUANTITY => fnd_api.g_miss_num,
670 p_MANUAL_PERCENTAGE => fnd_api.g_miss_num,
671 p_QUANTITY_USED => p_quantity_used,
672 p_ACTUAL_TIMES_USED => p_actual_times_used,
673 p_CREATED_BY => fnd_api.g_miss_num,
674 p_CREATION_DATE => fnd_api.g_miss_date,
675 p_LAST_UPDATED_BY => fnd_global.user_id,
676 p_LAST_UPDATE_DATE => sysdate,
677 p_LAST_UPDATE_LOGIN => fnd_api.g_miss_num,
678 p_ATTRIBUTE_CATEGORY => fnd_api.g_miss_char,
679 p_ATTRIBUTE1 => fnd_api.g_miss_char,
680 p_ATTRIBUTE2 => fnd_api.g_miss_char,
681 p_ATTRIBUTE3 => fnd_api.g_miss_char,
682 p_ATTRIBUTE4 => fnd_api.g_miss_char,
683 p_ATTRIBUTE5 => fnd_api.g_miss_char,
684 p_ATTRIBUTE6 => fnd_api.g_miss_char,
685 p_ATTRIBUTE7 => fnd_api.g_miss_char,
686 p_ATTRIBUTE8 => fnd_api.g_miss_char,
687 p_ATTRIBUTE9 => fnd_api.g_miss_char,
688 p_ATTRIBUTE10 => fnd_api.g_miss_char,
689 p_ATTRIBUTE11 => fnd_api.g_miss_char,
690 p_ATTRIBUTE12 => fnd_api.g_miss_char,
691 p_ATTRIBUTE13 => fnd_api.g_miss_char,
692 p_ATTRIBUTE14 => fnd_api.g_miss_char,
693 p_ATTRIBUTE15 => fnd_api.g_miss_char,
694 p_PRIMARY_UOM_CODE => fnd_api.g_miss_char,
695 p_REVISION => fnd_api.g_miss_char,
696 p_START_DATE => fnd_api.g_miss_date,
697 p_END_DATE => fnd_api.g_miss_date,
698 P_ROLLUP_QUANTITY_USED => p_rollup_quantity_used,
699 P_ROLLUP_TIMES_USED => p_rollup_times_used,
700 P_SUBSTITUTE_ITEM => p_substitute_item);
701
702 End Update_task_part;
703 END CSP_PROD_TASK_PARTS_HISTORY;