DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTA_SYNC_TASK_UTL

Source


1 PACKAGE BODY jta_sync_task_utl AS
2 /* $Header: jtavstnb.pls 120.2 2006/02/10 02:48:13 sbarat ship $ */
3 /*=======================================================================+
4 |  Copyright (c) 1995 Oracle Corporation Redwood Shores, California, USA |
5 |                            All rights reserved.                        |
6 +========================================================================+
7 | FILENAME
8 |  jtavstnb.pls
9 |
10 | DESCRIPTION
11 |  This package defines the utility commonly used for sync.
12 |
13 | NOTES
14 |
15 | UPDATE NOTES
16 | Date          Developer                Change
17 |------------   ---------------     -------------------------------------
18 | 28-May-2002   Chanik Jang         Created.
19 | 10-Feb-2006   Swapan Barat        Added NOCOPY hint for OUT parameter. Bug# 5029957
20 |                                   (Using dual check-in option to check-in file so that the
21 |                                   code can be propagated in both ver 11 and 12 line, since
22 |                                   NOCOPY is a mandatory mandate for all pl/sql packages.)
23 *=======================================================================*/
24 
25     FUNCTION is_this_first_task(p_task_id IN NUMBER)
26     RETURN BOOLEAN
27     IS
28         CURSOR c_first_taskid (b_task_id NUMBER) IS
29         SELECT min(task_id) task_id
30           FROM jtf_tasks_b
31          WHERE NVL(deleted_flag,'N') = 'N'
32            AND recurrence_rule_id = (SELECT recurrence_rule_id
33                                        FROM jtf_tasks_b
34                                       WHERE task_id = b_task_id);
35 
36         rec_first_taskid  c_first_taskid%ROWTYPE;
37         l_result          BOOLEAN := FALSE;
38     BEGIN
39         OPEN c_first_taskid(b_task_id => p_task_id);
40         FETCH c_first_taskid INTO rec_first_taskid;
41         IF c_first_taskid%FOUND
42         THEN
43             IF p_task_id = rec_first_taskid.task_id
44             THEN
45                 l_result := TRUE;
46             END IF;
47         END IF;
48         CLOSE c_first_taskid;
49 
50         RETURN l_result;
51     END is_this_first_task;
52 
53     FUNCTION get_new_first_taskid(p_calendar_start_date IN DATE,
54                                   p_recurrence_rule_id  IN NUMBER)
55     RETURN NUMBER
56     IS
57         CURSOR c_task (b_start_date DATE, b_recurrence_rule_id NUMBER) IS
58         SELECT task_id
59           FROM jtf_tasks_b
60          WHERE calendar_start_date > b_start_date
61            AND recurrence_rule_id = b_recurrence_rule_id
62            AND NVL(deleted_flag,'N') = 'N'
63         HAVING ROWNUM = 1
64         GROUP BY ROWNUM, task_id, calendar_start_date
65         ORDER BY calendar_start_date;
66 
67         l_task_id NUMBER;
68     BEGIN
69         OPEN c_task(p_calendar_start_date, p_recurrence_rule_id);
70         FETCH c_task INTO l_task_id;
71         IF c_task%NOTFOUND
72         THEN
73             l_task_id := 0;
74         END IF;
75         CLOSE c_task;
76 
77         RETURN l_task_id;
78     END get_new_first_taskid;
79 
80     FUNCTION exist_syncid(p_task_id  IN         NUMBER,
81                           x_sync_id  OUT NOCOPY NUMBER)
82     RETURN BOOLEAN
83     IS
84         CURSOR c_sync (b_task_id NUMBER) IS
85         SELECT task_sync_id
86           FROM jta_sync_task_mapping
87          WHERE task_id = b_task_id;
88 
89         l_result  BOOLEAN := FALSE;
90     BEGIN
91         OPEN c_sync (p_task_id);
92         FETCH c_sync INTO x_sync_id;
93         ----------------------------------------------------------------------
94         -- If it's already been sycned,
95         -- then we must update the mapping table with the new minimum task id
96         ----------------------------------------------------------------------
97         IF c_sync%FOUND
98         THEN
99             l_result := TRUE;
100         END IF;
101         CLOSE c_sync;
102 
103         RETURN l_result;
104     END exist_syncid;
105 
106     PROCEDURE update_mapping(p_task_id IN NUMBER)
107     IS
108         CURSOR c_assignee (b_task_id NUMBER) IS
109         SELECT jtaa.resource_id
110              , jtb.calendar_start_date
111              , jtb.recurrence_rule_id
112           FROM jtf_task_all_assignments jtaa
113              , jtf_tasks_b jtb
114          WHERE jtaa.task_id = b_task_id
115            AND jtb.task_id = jtaa.task_id;
116 
117         l_sync_id NUMBER;
118         l_first BOOLEAN := FALSE;
119         l_exist_new_first_task BOOLEAN := FALSE;
120         l_new_minimum_task_id NUMBER;
121     BEGIN
122         l_first := is_this_first_task(p_task_id => p_task_id);
123 
124         FOR rec_assignee IN c_assignee(p_task_id)
125         LOOP
126             l_new_minimum_task_id := get_new_first_taskid(
127                                         p_calendar_start_date => rec_assignee.calendar_start_date,
128                                         p_recurrence_rule_id  => rec_assignee.recurrence_rule_id
129                                      );
130             IF l_new_minimum_task_id > 0
131             THEN
132                 l_exist_new_first_task := TRUE;
133             END IF;
134 
135             IF l_first and l_exist_new_first_task
136             THEN
137                 IF exist_syncid(p_task_id => p_task_id,
138                                 x_sync_id => l_sync_id)
139                 THEN
140                     jta_sync_task_map_pkg.update_row (
141                         p_task_sync_id => l_sync_id,
142                         p_task_id      => l_new_minimum_task_id,
143                         p_resource_id  => rec_assignee.resource_id
144                     );
145                 END IF;
146             END IF;
147         END LOOP;
148 
149     END update_mapping;
150 
151 END jta_sync_task_utl;