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 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;