DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSP_PROD_TASK_PARTS_HISTORY

Source


1 PACKAGE BODY CSP_PROD_TASK_PARTS_HISTORY AS
2 /* $Header: cspgpthb.pls 120.2 2012/01/06 12:50:49 vmandava 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              last_updated_by    = fnd_global.user_id,
135              last_update_date   = sysdate
136       where  debrief_header_id = cdl.debrief_header_id;
137 
138     end if;
139 
140     l_task_part_id := null;
141     l_quantity_used:= null;
142 -- Handle the debrief line
143     open  c_task_parts(l_product_task_id,
144                        cdl.inventory_item_id,
145                        cdl.item_revision);
146     fetch c_task_parts into l_task_part_id,
147                             l_quantity_used,
148                             l_actual_times_used,
149                             l_rollup_quantity_used,
150                             l_rollup_times_used;
151     close c_task_parts;
152 
153     l_quantity_used := nvl(l_quantity_used,0);
154     l_actual_times_used := nvl(l_actual_times_used,0);
155     l_rollup_quantity_used := nvl(l_rollup_quantity_used,0);
156     l_rollup_times_used := nvl(l_rollup_times_used,0);
157 
158     if l_task_part_id is null then
159       l_increment := 1;
160       create_task_part(
161         p_product_task_id       => l_product_task_id,
162         p_inventory_item_id     => cdl.inventory_item_id,
163         p_quantity              => cdl.quantity,
164         p_uom_code              => cdl.primary_uom_code,
165         p_revision              => cdl.item_revision,
166         p_actual_times_used     => 1,
167         x_task_part_id          => l_task_part_id);
168 
169       handle_substitutes(
170         p_product_task_id         => l_product_task_id,
171         p_task_part_id            => l_task_part_id,
172         p_inventory_item_id       => cdl.inventory_item_id,
173         p_quantity_used           => cdl.quantity, --new
174         p_actual_times_used       => 1, --new
175         p_rollup_quantity_used    => cdl.quantity,
176         p_rollup_times_used       => 1,
177         p_increment               => l_increment,
178         p_debrief_header_id       => cdl.debrief_header_id ); -- added to handel duplicate count for rolled up times used);
179 
180     else
181       l_inventory_item_id := null;
182       l_increment := 0 ;
183       l_rollup_increment := 0 ;
184 -- Check if this item has already been processed on a different debrief line
185      open  c_existing_line(cdl.debrief_header_id,
186                             cdl.inventory_item_id,
187                             cdl.item_revision
188                             );
189       fetch c_existing_line into l_inventory_item_id;
190       close c_existing_line;
191       if l_inventory_item_id is null then
192         l_increment := 1;
193       end if;
194    --   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
195    CSP_SUPERSESSIONS_PVT.get_replaced_items_list(p_inventory_item_id  => cdl.inventory_item_id
196                                                  ,p_organization_id    => NULL
197                                                  ,x_replaced_item_list => l_replaced_items_list);
198       IF l_replaced_items_list IS NOT NULL THEN
199         l_sql_string :=   'select  cdl.inventory_item_id
200                       from    csf_debrief_lines cdl
201                       where   cdl.debrief_header_id = cdl.debrief_header_id
202                        and     cdl.inventory_item_id IN ' ||  l_replaced_items_list ||
203                       'or     cdl.inventory_item_id = cdl.inventory_item_id
204                        and     cdl.statistics_updated = ' || '''' || 'Y' || '''';
205 
206        OPEN  l_cur for l_sql_string;
207        FETCH l_cur INTO l_rollup_inventory_item_id;
208        CLOSE l_cur;
209        IF l_rollup_inventory_item_id IS NULL THEN
210          l_rollup_increment := 1;
211        END IF;
212       ELSE
213          l_rollup_increment := l_increment;
214       END IF;
215 
216 
217 
218 
219       l_actual_times_used := l_actual_times_used + l_increment;
220 
221       update_task_part(
222         p_task_part_id          => l_task_part_id,
223         p_quantity_used         => l_quantity_used + cdl.quantity,
224         p_actual_times_used     => l_actual_times_used,
225         p_rollup_quantity_used  => l_rollup_quantity_used + cdl.quantity,
226         p_rollup_times_used     => l_rollup_times_used + l_rollup_increment,
227         p_substitute_item       => fnd_api.g_miss_num);
228 
229       handle_substitutes(
230         p_product_task_id         => l_product_task_id,
231         p_task_part_id            => l_task_part_id,
232         p_inventory_item_id       => cdl.inventory_item_id,
233         p_quantity_used           => l_quantity_used + cdl.quantity, --new
234         p_actual_times_used       => l_actual_times_used + l_increment, --new
235         p_rollup_quantity_used    => l_rollup_quantity_used + cdl.quantity,
236         p_rollup_times_used       => l_rollup_times_used + l_increment,
237         p_increment               => l_increment,
238         p_debrief_header_id       => cdl.debrief_header_id ); -- added to handel duplicate count for rolled up times used
239 
240 
241     end if;
242 
243     update csf_debrief_lines
244     set    statistics_updated = 'Y',
245            last_updated_by    = fnd_global.user_id,
246            last_update_date   = sysdate
247     where  debrief_line_id = cdl.debrief_line_id;
248 
249   end loop;
250 
251   update_task_percentage;
252 
253 End Create_parts_history;
254 
255 procedure handle_substitutes(
256             p_product_task_id       in  number,
257             p_task_part_id          in  number,
258             p_inventory_item_id     in  number,
259             p_quantity_used         in  number,
260             p_actual_times_used     in  number,
261             p_rollup_quantity_used  in  number,
262             p_rollup_times_used     in  number,
263             p_increment             in  number,
264             p_debrief_header_id     in  number) IS
265 
266   l_organization_id                 number;
267   l_task_part_id                    number;
268   l_inventory_item_id               number;
269   l_actual_times_used               number;
270   l_rollup_quantity_used            number;
271   l_rollup_times_used               number;
272   l_debrief_line_id                 number;
273 
274   cursor    substitutes is
275   select    ctp.task_part_id,
276             ctp.inventory_item_id,
277             ctp.actual_times_used,
278             ctp.rollup_quantity_used,
279             ctp.rollup_times_used
280   from      csp_task_parts          ctp,
281             mtl_related_items_view  mriv
282   where     mriv.related_item_id    = ctp.inventory_item_id
283   and       mriv.organization_id    = l_organization_id
284   and       mriv.inventory_item_id  = p_inventory_item_id
285   and       mriv.relationship_type_id = 2
286   and       ctp.product_task_id     = p_product_task_id
287   and       ctp.inventory_item_id  <> p_inventory_item_id
288   and       ctp.rollup_quantity_used  is not null
289   and       sysdate between nvl(ctp.start_date,sysdate-1)
290                     and     nvl(ctp.end_date,sysdate+1)
291   order by  ctp.actual_times_used desc;
292 
293   cursor   debrief_line is
294   select  DEBRIEF_LINE_ID
295   from    csf_debrief_lines cdl
296   where   INVENTORY_ITEM_ID = l_inventory_item_id
297   and     debrief_header_id  = p_debrief_header_id
298   and     STATISTICS_UPDATED =  'Y' ;
299 
300 
301 begin
302 
303 
304 
305   l_organization_id := cs_std.get_Item_Valdn_Orgzn_ID;
306   l_task_part_id := null;
307 
308   open  substitutes;
309   fetch substitutes into l_task_part_id,
310                          l_inventory_item_id,
311                          l_actual_times_used,
312                          l_rollup_quantity_used,
313                          l_rollup_times_used;
314   close substitutes;
315 
316 
317   if l_task_part_id is not null then
318 
319     if l_actual_times_used >= p_actual_times_used then --Update rollup of substitute
320         open debrief_line;
321         fetch debrief_line INTO l_debrief_line_id;
322         CLOSE debrief_line;
323         IF l_debrief_line_id IS NULL THEN
324           update_task_part(
325             p_task_part_id            => l_task_part_id,
326             p_quantity_used           => fnd_api.g_miss_num,
327             p_actual_times_used       => fnd_api.g_miss_num,
328             p_rollup_quantity_used    => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
329             p_rollup_times_used       => nvl(l_rollup_times_used,0) + p_rollup_times_used, --new
330             p_substitute_item         => fnd_api.g_miss_num);
331         ELSE
332           update_task_part(
333             p_task_part_id            => l_task_part_id,
334             p_quantity_used           => fnd_api.g_miss_num,
335             p_actual_times_used       => fnd_api.g_miss_num,
336             p_rollup_quantity_used    => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
337             p_rollup_times_used       => fnd_api.g_miss_num,
338             p_substitute_item         => fnd_api.g_miss_num);
339         END IF;
340 
341       update_task_part(
342         p_task_part_id            => p_task_part_id,
343         p_quantity_used           => fnd_api.g_miss_num,
344         p_actual_times_used       => fnd_api.g_miss_num,
345         p_rollup_quantity_used    => null,
346         p_rollup_times_used       => null,
347         p_substitute_item         => l_inventory_item_id);
348 
349     elsif l_actual_times_used < p_actual_times_used then --Make this the preferred item
350 
351         open debrief_line;
352         fetch debrief_line INTO l_debrief_line_id;
353         CLOSE debrief_line;
354         IF l_debrief_line_id IS NULL THEN
355           update_task_part(
356             p_task_part_id            => l_task_part_id,
357             p_quantity_used           => fnd_api.g_miss_num,
358             p_actual_times_used       => fnd_api.g_miss_num,
359             p_rollup_quantity_used    => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
360             p_rollup_times_used       => nvl(l_rollup_times_used,0) + p_rollup_times_used, --new
361             p_substitute_item         => fnd_api.g_miss_num);
362         ELSE
363           update_task_part(
364             p_task_part_id            => l_task_part_id,
365             p_quantity_used           => fnd_api.g_miss_num,
366             p_actual_times_used       => fnd_api.g_miss_num,
367             p_rollup_quantity_used    => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
368             p_rollup_times_used       => fnd_api.g_miss_num,
369             p_substitute_item         => fnd_api.g_miss_num);
370         END IF;
371 
372 
373       update_task_part(
374         p_task_part_id            => p_task_part_id,
375         p_quantity_used           => fnd_api.g_miss_num,
376         p_actual_times_used       => fnd_api.g_miss_num,
377         p_rollup_quantity_used    => null,
378         p_rollup_times_used       => null,
379         p_substitute_item         => l_inventory_item_id);
380 
381       handle_supersede_items(p_product_task_id      => p_product_task_id
382                             ,p_task_part_id         => p_task_part_id
383                             ,p_inventory_item_id    => p_inventory_item_id
384                             ,p_rollup_quantity_used => l_rollup_quantity_used + p_rollup_quantity_used
385                             ,p_rollup_times_used    => l_rollup_times_used + p_rollup_times_used
386                             ,p_debrief_header_id    => p_debrief_header_id );
387     end if;
388   ELSE
389      handle_supersede_items(p_product_task_id      => p_product_task_id
390                             ,p_task_part_id         => p_task_part_id
391                             ,p_inventory_item_id    => p_inventory_item_id
392                             ,p_rollup_quantity_used => p_rollup_quantity_used
393                             ,p_rollup_times_used    => p_rollup_times_used
394                             ,p_debrief_header_id    => p_debrief_header_id );
395   end if;
396 end;
397 
398 procedure handle_supersede_items(p_product_task_id       in  number,
399                                  p_task_part_id          in  number,
400                                  p_inventory_item_id     in  number,
401                                  p_rollup_quantity_used  in  number,
402                                  p_rollup_times_used     in  number,
403                                  p_debrief_header_id     in  number) is
404 
405     l_supersede_item                  number;
406     l_task_part_id                    number;
407     l_rollup_quantity_used            number;
408     l_rollup_times_used               number;
409     l_primary_uom_code                varchar2(50);
410 
411     cursor    supersede_items is
412     select    ctp.task_part_id,
413               ctp.rollup_quantity_used,
414               ctp.rollup_times_used
415     from      csp_task_parts  ctp
416     where     ctp.product_task_id    = p_product_task_id
417     and       ctp.inventory_item_id  = l_supersede_item
418     and       ctp.rollup_quantity_used  is not null
419     and       sysdate between nvl(ctp.start_date,sysdate-1)
420                     and     nvl(ctp.end_date,sysdate+1)
421     order by  ctp.actual_times_used desc;
422 
423     cursor    primary_uom  is
424     select    primary_uom_code
425     from      mtl_system_items_b
426     where     inventory_item_id = l_supersede_item;
427 
428     Type v_cur_type IS REF CURSOR;
429 
430     l_cur v_cur_type;
431     l_sql_string varchar2(2000);
432     l_replaced_items_list varchar2(2000);
433     l_debrief_line_id     NUMBER;
434 
435 BEGIN
436     l_supersede_item := null;
437     csp_supersessions_pvt.get_top_supersede_item(p_item_id => p_inventory_item_id
438                                                 ,p_org_id  => null
439                                                 ,x_item_id => l_supersede_item);
440     IF l_supersede_item <> p_inventory_item_id THEN
441         OPEN supersede_items;
442         FETCH supersede_items INTO l_task_part_id,
443                                    l_rollup_quantity_used,
444                                    l_rollup_times_used;
445         CLOSE supersede_items;
446         OPEN primary_uom;
447         FETCH primary_uom INTO l_primary_uom_code;
448         CLOSE primary_uom;
449 
450         IF l_task_part_id IS NOT NULL THEN
451             CSP_SUPERSESSIONS_PVT.get_replaced_items_list(p_inventory_item_id  => l_supersede_item
452                                                      ,p_organization_id    => NULL
453                                                      ,x_replaced_item_list => l_replaced_items_list);
454             l_sql_string := 'select  DEBRIEF_LINE_ID
455                         from    csf_debrief_lines cdl
456                         where   INVENTORY_ITEM_ID IN ' || l_replaced_items_list ||
457                        'and     debrief_header_id  = ' || p_debrief_header_id ||
458                        'and     STATISTICS_UPDATED =' ||  '''' || 'Y' || '''' ;
459 
460         OPEN l_cur for l_sql_string;
461         FETCH l_cur INTO l_debrief_line_id;
462         CLOSE l_cur;
463            IF l_debrief_line_id IS NOT NULL THEN
464             update_task_part(
465                             p_task_part_id            => l_task_part_id,
466                             p_quantity_used           => fnd_api.g_miss_num,
467                             p_actual_times_used       => fnd_api.g_miss_num,
468                             p_rollup_quantity_used    => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
469                             p_rollup_times_used       => fnd_api.g_miss_num,
470                             p_substitute_item         => fnd_api.g_miss_num);
471             ELSE
472              update_task_part(
473                             p_task_part_id            => l_task_part_id,
474                             p_quantity_used           => fnd_api.g_miss_num,
475                             p_actual_times_used       => fnd_api.g_miss_num,
476                             p_rollup_quantity_used    => nvl(l_rollup_quantity_used,0) + p_rollup_quantity_used,
477                             p_rollup_times_used       => nvl(l_rollup_times_used,0) + p_rollup_times_used, --new
478                             p_substitute_item         => fnd_api.g_miss_num);
479             END IF;
480 
481            update_task_part(
482                            p_task_part_id            => p_task_part_id,
483                            p_quantity_used           => fnd_api.g_miss_num,
484                            p_actual_times_used       => fnd_api.g_miss_num,
485                            p_rollup_quantity_used    => null,
486                            p_rollup_times_used       => null,
487                            p_substitute_item         => l_supersede_item);
488         ELSE
489           create_task_part(
490                            p_product_task_id       => p_product_task_id,
491                            p_inventory_item_id     => l_supersede_item,
492                            p_quantity              => null,
493                            p_uom_code              => l_primary_uom_code,
494                            p_revision              => null,
495                            p_actual_times_used     => null,
496                            x_task_part_id          => l_task_part_id);
497           update_task_part(
498                            p_task_part_id            => l_task_part_id,
499                            p_quantity_used           => fnd_api.g_miss_num,
500                            p_actual_times_used       => fnd_api.g_miss_num,
501                            p_rollup_quantity_used    => p_rollup_quantity_used,
502                            p_rollup_times_used       => p_rollup_times_used,
503                            p_substitute_item         => fnd_api.g_miss_num);
504           update_task_part(
505                            p_task_part_id            => p_task_part_id,
506                            p_quantity_used           => fnd_api.g_miss_num,
507                            p_actual_times_used       => fnd_api.g_miss_num,
508                            p_rollup_quantity_used    => null,
509                            p_rollup_times_used       => null,
510                            p_substitute_item         => l_supersede_item);
511 
512         END IF;
513     END IF;
514 END handle_supersede_items;
515 
516 procedure update_task_percentage is
517 
518   cursor    times_used is
519   select    product_id,
520             sum(cpt.actual_times_used) sum_times_used
521   from      csp_product_tasks cpt
522   group by  cpt.product_id;
523 
524 begin
525   for tu in times_used loop
526     update  csp_product_tasks
527     set     task_percentage = actual_times_used / tu.sum_times_used * 100
528     where   product_id = tu.product_id;
529   end loop;
530 end;
531 
532 PROCEDURE Create_product_task(
533             p_product_id          in    number,
534             p_template_id         in    number,
535             x_product_task_id     OUT NOCOPY   number) is
536 
537   l_product_task_id       number;
538 
539 begin
540   csp_product_tasks_pkg.insert_row(
541     px_product_task_id    => x_product_task_id,
542     p_product_id          => p_product_id,
543     p_task_template_id    => p_template_id,
544     p_auto_manual         => 'A',
545     p_actual_times_used   => 1,
546     p_task_percentage     => null,
547     p_attribute_category  => null,
548     p_attribute1          => null,
549     p_attribute2          => null,
550     p_attribute3          => null,
551     p_attribute4          => null,
552     p_attribute5          => null,
553     p_attribute6          => null,
554     p_attribute7          => null,
555     p_attribute8          => null,
556     p_attribute9          => null,
557     p_attribute10         => null,
558     p_attribute11         => null,
559     p_attribute12         => null,
560     p_attribute13         => null,
561     p_attribute14         => null,
562     p_attribute15         => null,
563     p_created_by          => fnd_global.user_id,
564     p_creation_date       => sysdate,
565     p_last_updated_by     => fnd_global.user_id,
566     p_last_update_date    => sysdate,
567     p_last_update_login   => null);
568 
569 End Create_product_task;
570 
571 PROCEDURE Update_product_task(
572           p_product_task_id     in  number,
573           p_actual_times_used   in  number) is
574 BEGIN
575   CSP_PRODUCT_TASKS_PKG.Update_Row(
576     p_PRODUCT_TASK_ID       => p_product_task_id,
577     p_PRODUCT_ID            => fnd_api.g_miss_num,
578     p_TASK_TEMPLATE_ID      => fnd_api.g_miss_num,
579     p_AUTO_MANUAL           => 'A',
580     p_ACTUAL_TIMES_USED     => p_actual_times_used,
581     p_TASK_PERCENTAGE       => fnd_api.g_miss_num,
582     p_ATTRIBUTE_CATEGORY    => fnd_api.g_miss_char,
583     p_ATTRIBUTE1            => fnd_api.g_miss_char,
584     p_ATTRIBUTE2            => fnd_api.g_miss_char,
585     p_ATTRIBUTE3            => fnd_api.g_miss_char,
586     p_ATTRIBUTE4            => fnd_api.g_miss_char,
587     p_ATTRIBUTE5            => fnd_api.g_miss_char,
588     p_ATTRIBUTE6            => fnd_api.g_miss_char,
589     p_ATTRIBUTE7            => fnd_api.g_miss_char,
590     p_ATTRIBUTE8            => fnd_api.g_miss_char,
591     p_ATTRIBUTE9            => fnd_api.g_miss_char,
592     p_ATTRIBUTE10           => fnd_api.g_miss_char,
593     p_ATTRIBUTE11           => fnd_api.g_miss_char,
594     p_ATTRIBUTE12           => fnd_api.g_miss_char,
595     p_ATTRIBUTE13           => fnd_api.g_miss_char,
596     p_ATTRIBUTE14           => fnd_api.g_miss_char,
597     p_ATTRIBUTE15           => fnd_api.g_miss_char,
598     p_CREATED_BY            => FND_API.G_MISS_NUM,
599     p_CREATION_DATE         => FND_API.G_MISS_DATE,
600     p_LAST_UPDATED_BY       => FND_GLOBAL.USER_ID,
601     p_LAST_UPDATE_DATE      => SYSDATE,
602     p_LAST_UPDATE_LOGIN     => fnd_api.g_miss_num);
603 
604 End Update_product_task;
605 
606 PROCEDURE Create_task_part(
607             p_product_task_id       in  number,
608             p_inventory_item_id     in  number,
609             p_quantity              in  number,
610             p_uom_code              in  varchar2,
611             p_revision              in  varchar2,
612             p_actual_times_used     in  number,
613             x_task_part_id          OUT NOCOPY number) is
614 
615   l_task_part_id                    number := null;
616 
617 begin
618 
619   csp_task_parts_pkg.insert_row(
620     px_task_part_id           => l_task_part_id,
621     p_product_task_id         => p_product_task_id,
622     p_inventory_item_id       => p_inventory_item_id,
623     p_manual_quantity         => null,
624     p_manual_percentage       => null,
625     p_quantity_used           => p_quantity,
626     p_actual_times_used       => p_actual_times_used,
627     p_created_by              => fnd_global.user_id,
628     p_creation_date           => sysdate,
629     p_last_updated_by         => fnd_global.user_id,
630     p_last_update_date        => sysdate,
631     p_last_update_login       => null,
632     p_attribute_category      => null,
633     p_attribute1              => null,
634     p_attribute2              => null,
635     p_attribute3              => null,
636     p_attribute4              => null,
637     p_attribute5              => null,
638     p_attribute6              => null,
639     p_attribute7              => null,
640     p_attribute8              => null,
641     p_attribute9              => null,
642     p_attribute10             => null,
643     p_attribute11             => null,
644     p_attribute12             => null,
645     p_attribute13             => null,
646     p_attribute14             => null,
647     p_attribute15             => null,
648     p_primary_uom_code        => p_uom_code,
649     p_revision                => p_revision,
650     p_start_date              => null,
651     p_end_date                => null,
652     p_rollup_quantity_used    => p_quantity,
653     p_rollup_times_used       => 1,
654     p_substitute_item         => null);
655 
656     x_task_part_id := l_task_part_id;
657 End Create_task_part;
658 
659 PROCEDURE update_task_part(
660             p_task_part_id          number,
661             p_quantity_used         number,
662             p_actual_times_used     number,
663             p_rollup_quantity_used  number,
664             p_rollup_times_used     number,
665             p_substitute_item       number) is
666 
667 BEGIN
668 
669   csp_task_parts_pkg.Update_Row(
670     p_TASK_PART_ID          => p_task_part_id,
671     p_PRODUCT_TASK_ID       => fnd_api.g_miss_num,
672     p_INVENTORY_ITEM_ID     => fnd_api.g_miss_num,
673     p_MANUAL_QUANTITY       => fnd_api.g_miss_num,
674     p_MANUAL_PERCENTAGE     => fnd_api.g_miss_num,
675     p_QUANTITY_USED         => p_quantity_used,
676     p_ACTUAL_TIMES_USED     => p_actual_times_used,
677     p_CREATED_BY            => fnd_api.g_miss_num,
678     p_CREATION_DATE         => fnd_api.g_miss_date,
679     p_LAST_UPDATED_BY       => fnd_global.user_id,
680     p_LAST_UPDATE_DATE      => sysdate,
681     p_LAST_UPDATE_LOGIN     => fnd_api.g_miss_num,
682     p_ATTRIBUTE_CATEGORY    => fnd_api.g_miss_char,
683     p_ATTRIBUTE1            => fnd_api.g_miss_char,
684     p_ATTRIBUTE2            => fnd_api.g_miss_char,
685     p_ATTRIBUTE3            => fnd_api.g_miss_char,
686     p_ATTRIBUTE4            => fnd_api.g_miss_char,
687     p_ATTRIBUTE5            => fnd_api.g_miss_char,
688     p_ATTRIBUTE6            => fnd_api.g_miss_char,
689     p_ATTRIBUTE7            => fnd_api.g_miss_char,
690     p_ATTRIBUTE8            => fnd_api.g_miss_char,
691     p_ATTRIBUTE9            => fnd_api.g_miss_char,
692     p_ATTRIBUTE10           => fnd_api.g_miss_char,
693     p_ATTRIBUTE11           => fnd_api.g_miss_char,
694     p_ATTRIBUTE12           => fnd_api.g_miss_char,
695     p_ATTRIBUTE13           => fnd_api.g_miss_char,
696     p_ATTRIBUTE14           => fnd_api.g_miss_char,
697     p_ATTRIBUTE15           => fnd_api.g_miss_char,
698     p_PRIMARY_UOM_CODE      => fnd_api.g_miss_char,
699     p_REVISION              => fnd_api.g_miss_char,
700     p_START_DATE            => fnd_api.g_miss_date,
701     p_END_DATE              => fnd_api.g_miss_date,
702     P_ROLLUP_QUANTITY_USED  => p_rollup_quantity_used,
703     P_ROLLUP_TIMES_USED     => p_rollup_times_used,
704     P_SUBSTITUTE_ITEM       => p_substitute_item);
705 
706 End Update_task_part;
707 END CSP_PROD_TASK_PARTS_HISTORY;