DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTA_SYNC_TASK

Source


1 PACKAGE BODY jta_sync_task AS
2 /* $Header: jtavstsb.pls 115.75 2002/12/12 19:08:05 cjang ship $ */
3 /*=======================================================================+
4  |  Copyright (c) 2002 Oracle Corporation Redwood Shores, California, USA|
5  |                            All rights reserved.                       |
6  +=======================================================================+
7  | FILENAME                                                              |
8  |   jtavstsb.pls                                                        |
9  |                                                                       |
10  | DESCRIPTION                                                           |
11  |   - This package is for Task Business Logic.                          |
12  |                                                                       |
13  | NOTES                                                                 |
14  |                                                                       |
15  | Date          Developer        Change                                 |
16  | ------        ---------------  -------------------------------------- |
17  | 20-Jan-2002   mmarovic/arpatel Created.                               |
18  | 21-Jan-2002   rdespoto         modified.                              |
19  | 25-Jan-2002   arpatel          cleaned up for jtadev5 compilation     |
20  | 28-Jan-2002   arpatel/chanik   Added get_list_appt(),                 |
21  |                                      get_list_task(),                 |
22  |                                      get_count_appt(),                |
23  |                                      get_count_task()                 |
24  | 29-Jan-2002   arpatel/chanik   Added a cursor to find date_selected   |
25  | 30-Jan-2002   arpatel/chanik   Added p_event in get_list_xxxx()       |
26  | 01-Feb-2002   arpatel/chanik   Removed object_type_code clause from   |
27  |                                 get_list_appt cursor                  |
28  | 04-Feb-2002   akaran/sachoudh  Added function get_event_type()        |
29  | 05-Feb-2002   arpatel          Added nvl for flags                    |
30  | 12-Feb-2002   cjang            Added group calendar functionality     |
31  | 20-Feb-2002   cjang            The followings are not synced          |
32  |                                1) Change from Task to Appt            |
33  |                                2) Change from Appt to Task            |
34  |                                Removed event_type and object          |
35  |                                           from cursor c_task          |
36  | 22-Feb-2002   cjang            Refactoring                            |
37  | 27-Feb-2002   cjang            Added a function to check the update   |
38  |                                          privilege                    |
39  | 27-Feb-2002   arpatel          Changed update_data to handle updates  |
40  |                                of descriptions for repeating apmts    |
41  | 27-Feb-2002   cjang            Added separate loop for repeating task |
42  | 28-Feb-2002   cjang            Integrate with invitee function        |
43  | 01-Mar-2002   cjang            Refactoring and Bug Fix                |
44  | 06-Mar-2002   cjang            Modularize UPDATE_DATA()               |
45  |                                           GET_ALL_DATA()              |
46  | 11-Mar-2002   cjang            Modified delete_data                   |
47  | 11-Mar-2002   sanjeev          Changed methods for exclusions         |
48  | 24-Apr-2002   cjang      When jta_sync_task_common.get_all_nonrepeat_tasks
49  |                           is called, pass p_record_index with NVL(x_data.count,0)
50  | 26-Apr-2002   cjang            Commented out debug statements         |
51  | 30-Apr-2002   cjang            Added if condition to check if subject |
52  |                                    is null.                           |
53  |                                   We're not accepting NULL task name  |
54  | 23-May-2002   cjang            Modified delete_data()                 |
55  |                                    to fix bug 2382927                 |
56  | 28-May-2002   cjang            Modified create_ids()                  |
57  |                                Fix Bug# 2387015                       |
58  |                                to avoid using contacts sequence number|
59  | 04-Jun-2002   cjang            Modified delete_data()                 |
60  |                                    to fix bug 2382927                 |
61  |                                For the invalid syncid, new sync anchor|
62  |                                must be assigned                       |
63  +======================================================================*/
64 
65      -------------------------------
66      -- Private Method
67      -------------------------------
68      PROCEDURE get_all_data (
69         p_request_type   IN VARCHAR2,
70         p_syncanchor     IN DATE,
71         p_get_data       IN BOOLEAN,
72         x_totalnew      OUT NOCOPY NUMBER,
73         x_totalmodified OUT NOCOPY NUMBER,
74         x_totaldeleted  OUT NOCOPY NUMBER,
75         x_data          OUT NOCOPY jta_sync_task.task_tbl,
76         x_exclusion_data  OUT NOCOPY Jta_Sync_Task.exclusion_tbl
77      )
78      IS
79         -- Added a group calendar feature
80         -- Used to store the list of group resource ids for the current resource
81         l_resources  jta_sync_task_common.resource_list_tbl;
82         i            NUMBER := 0;
83         l_operation  VARCHAR2(240);
84         l_syncanchor DATE ;
85         l_source_object_type VARCHAR2(60) := RTRIM(p_request_type,'S');
86         l_task_rec jta_sync_task.task_rec;
87         l_resource_id   NUMBER;
88         l_resource_type VARCHAR2(30);
89         l_new_syncanchor  date ;
90 
91      BEGIN
92         x_totalnew := 0;
93         x_totalmodified := 0;
94         x_totaldeleted := 0;
95 
96         jta_sync_task_common.get_resource_details (g_login_resource_id, l_resource_type);
97 
98         l_syncanchor := jta_sync_task_common.convert_gmt_to_server (p_syncanchor);
99         --JTA_SYNC_DEBUG_PKG.DEBUG('l_syncanchor = '||to_char(l_syncanchor,'DD-MON-YYYY HH24:MI:SS'));
100 
101         -----------------------------------------------------
102         -- Get group ids including current resource id
103         -----------------------------------------------------
104         jta_sync_task_common.get_group_resource (
105            p_request_type  => p_request_type,
106            p_resource_id   => g_login_resource_id,
107            p_resource_type => l_resource_type,
108            x_resources     => l_resources
109         );
110 
111         -----------------------------------------------------
112         -- Loop with current resource id and group ids
113         -----------------------------------------------------
114         --l_new_syncanchor := sysdate;
115 
116         FOR j IN l_resources.FIRST .. l_resources.LAST
117         LOOP
118            -------------------------------------------------
119            -- Process non repeat tasks
120            -------------------------------------------------
121            jta_sync_task_common.get_all_nonrepeat_tasks(
122                  p_request_type       => p_request_type,
123                  p_syncanchor         => l_syncanchor,
124                  p_recordindex        => NVL(x_data.count,0),
125                  p_resource_id        => l_resources(j).resource_id,
126                  p_resource_type      => l_resources(j).resource_type,
127                  p_source_object_type => l_source_object_type,
128                  p_get_data           => p_get_data,
129                  x_totalnew           => x_totalnew,
130                  x_totalmodified      => x_totalmodified,
131                  --x_totaldeleted       => x_totaldeleted,
132                  --p_new_syncanchor => l_new_syncanchor,
133                  x_data               => x_data
134            );
135 
136            -------------------------------------------------
137            -- Process repeating tasks
138            -------------------------------------------------
139            IF  l_source_object_type = 'APPOINTMENT'
140            THEN
141               jta_sync_task_common.get_all_repeat_tasks(
142                     p_request_type       => p_request_type,
143                     p_syncanchor         => l_syncanchor,
144                     p_recordindex        => nvl(x_data.count,0) + 1,
145                     p_resource_id        => l_resources(j).resource_id,
146                     p_resource_type      => l_resources(j).resource_type,
147                     p_source_object_type => l_source_object_type,
148                     p_get_data           => p_get_data,
149                     x_totalnew           => x_totalnew,
150                     x_totalmodified      => x_totalmodified,
151                     --x_totaldeleted       => x_totaldeleted,
152                     --p_new_syncanchor => l_new_syncanchor,
153                     x_data               => x_data,
154                     x_exclusion_data     => x_exclusion_data
155                );
156            END IF;
157 
158            ----------------------------------
159            -- processing all deleted records
160            ----------------------------------
161            jta_sync_task_common.get_all_deleted_tasks(
162                p_request_type       => p_request_type,
163                p_syncanchor         => l_syncanchor,
164                p_recordindex        => nvl(x_data.count,0) + 1,
165                p_resource_id        => l_resources(j).resource_id,
166                p_resource_type      => l_resources(j).resource_type,
167                p_source_object_type => l_source_object_type,
168                p_get_data           => p_get_data,
169                --p_new_syncanchor     => l_new_syncanchor,
170                x_totaldeleted       => x_totaldeleted,
171                x_data               => x_data
172            );
173         END LOOP;
174 
175      END get_all_data;
176 
177      -------------------------------
178      -- Public Method
179      -------------------------------
180      PROCEDURE get_count (
181         p_request_type   IN VARCHAR2,
182         p_syncanchor     IN DATE,
183         x_total         OUT NOCOPY NUMBER,
184         x_totalnew      OUT NOCOPY NUMBER,
185         x_totalmodified OUT NOCOPY NUMBER,
186         x_totaldeleted  OUT NOCOPY NUMBER
187      )
188      IS
189         l_syncanchor    DATE;
190         l_data          jta_sync_task.task_tbl;
191         l_exclusion_data jta_sync_task.exclusion_tbl;
192      BEGIN
193         x_total         := 0;
194         x_totalnew      := 0;
195         x_totalmodified := 0;
196         x_totaldeleted  := 0;
197 
198         -- Call the private api to get the data.
199         get_all_data (
200            p_request_type  => p_request_type,
201            p_syncanchor    => p_syncanchor,
202            p_get_data      => FALSE,
203            x_totalnew      => x_totalnew,
204            x_totalmodified => x_totalmodified,
205            x_totaldeleted  => x_totaldeleted,
206            x_data          => l_data,
207            x_exclusion_data => l_exclusion_data
208         );
209         x_total := x_totalnew + x_totalmodified + x_totaldeleted;
210 
211      END get_count;
212 
213      PROCEDURE get_list (
214         p_request_type     IN VARCHAR2,
215         p_syncanchor       IN DATE,
216         x_data            OUT NOCOPY jta_sync_task.task_tbl,
217         x_exclusion_data  OUT NOCOPY Jta_Sync_Task.exclusion_tbl
218      )
219      IS
220         l_totalnew      NUMBER;
221         l_totalmodified NUMBER;
222         l_totaldeleted  NUMBER;
223         l_data          jta_sync_task.task_tbl;
224         l_resource_id   NUMBER;
225         l_resource_type VARCHAR2(30);
226      BEGIN
227         get_all_data (
228            p_request_type  => p_request_type,
229            p_syncanchor    => p_syncanchor,
230            p_get_data      => TRUE,
231            x_totalnew      => l_totalnew,
232            x_totalmodified => l_totalmodified,
233            x_totaldeleted  => l_totaldeleted,
234            x_data          => l_data,
235            x_exclusion_data => x_exclusion_data
236            );
237            x_data := l_data;
238      END get_list;
239 
240      PROCEDURE create_ids (
241         p_num_req IN NUMBER,
242         x_results IN OUT NOCOPY jta_sync_task.task_tbl
243      )
244      IS
245      BEGIN
246         FOR i IN 1 .. NVL (p_num_req, 0)
247         LOOP
248            -- Fix Bug# 2387015 to avoid using contacts sequence number
249            SELECT jta_sync_task_mapping_s.nextval
250              INTO x_results (i).syncid
251              FROM DUAL;
252            x_results (i).resultid := jta_sync_task_common.g_sync_success;   --success, no message will be displayed to user
253         END LOOP;
254      END create_ids;
255 
256      PROCEDURE update_data (p_tasks      IN OUT NOCOPY jta_sync_task.task_tbl
257                            ,p_exclusions IN     jta_sync_task.exclusion_tbl)
258      IS
259          l_resource_id        NUMBER;
260          l_resource_type      VARCHAR2(100);
261          l_is_this_new_task    BOOLEAN;
262      BEGIN
263          jta_sync_task_common.get_resource_details (l_resource_id, l_resource_type);
264 
265          g_login_resource_id := l_resource_id;
266 
267          FOR i IN 1 .. NVL (p_tasks.LAST, 0)
268          LOOP
269             l_is_this_new_task := jta_sync_task_common.is_this_new_task(p_tasks(i).syncid);
270 
271             IF p_tasks(i).subject IS NOT NULL AND
272                ( (    l_is_this_new_task AND p_tasks(i).subject <> FND_API.G_MISS_CHAR) OR
273                  (NOT l_is_this_new_task)
274                )
275             THEN
276                 IF p_tasks(i).category <> FND_API.G_MISS_CHAR OR
277                    p_tasks(i).category IS NOT NULL
278                 THEN
279                    jta_sync_task_category.create_category(p_category_name  => p_tasks(i).category,
280                                                           p_resource_id    => l_resource_id );
281                 END IF;
282 
283                 IF l_is_this_new_task
284                 THEN  -- This is a new task
285                     jta_sync_task_common.create_new_data( p_task_rec      => p_tasks(i)
286                                                         , p_exclusion_tbl => p_exclusions
287                                                         , p_resource_id   => l_resource_id
288                                                         , p_resource_type => l_resource_type);
289                 ELSE -- This is an existing task
290                     jta_sync_task_common.update_existing_data( p_task_rec      => p_tasks(i)
291                                                              , p_exclusion_tbl => p_exclusions
292                                                              , p_resource_id   => l_resource_id
293                                                              , p_resource_type => l_resource_type);
294                 END IF;
295             ELSE
296                  jta_sync_common.put_messages_to_result (
297                     p_tasks(i),
298                     p_status => 2,
299                     p_user_message => 'JTA_SYNC_NULL_TASKNAME'
300                  );
301             END IF;
302 
306 
303             p_tasks(i).recordIndex  := i ;
304          END LOOP; -- for loop of p_tasks
305      END update_data;
307      PROCEDURE delete_data (
308         p_tasks        IN OUT NOCOPY jta_sync_task.task_tbl
309      )
310      IS
311         l_task_id NUMBER;
312         l_delete_flag VARCHAR2(1);
313         l_resource_id NUMBER;
314         l_resource_type VARCHAR2(30);
315         l_status_id NUMBER;
316         l_sync_id      NUMBER;
317         l_source_object_type_code VARCHAR2(60);
318      BEGIN
319         jta_sync_task_common.get_resource_details (l_resource_id, l_resource_type);
320         g_login_resource_id := l_resource_id;
321 
322         FOR i IN 1 .. NVL (p_tasks.LAST, 0)
323         LOOP
324             IF jta_sync_task_common.validate_syncid(p_syncid => p_tasks(i).syncid) -- Fix Bug 2382927
325             THEN
326                fnd_msg_pub.initialize;
327 
328                l_sync_id := p_tasks (i).syncid;
329                l_task_id := jta_sync_task_common.get_task_id (p_sync_id => l_sync_id);
330                l_source_object_type_code := jta_sync_task_common.get_source_object_type(p_task_id => l_task_id);
331 
332                jta_sync_task_common.check_delete_data(
333                       p_task_id     => l_task_id,
334                       p_resource_id => l_resource_id,
335                       p_objectcode  => l_source_object_type_code,
336                       x_status_id   => l_status_id,
337                       x_delete_flag => l_delete_flag);
338 
339                IF l_delete_flag = 'D'
340                THEN
341 
342                    jta_sync_task_common.delete_task_data(p_task_rec => p_tasks(i));
343 
344                ELSIF l_delete_flag = 'U'
345 
346                THEN
347                    jta_sync_task_common.reject_task_data(p_task_rec => p_tasks(i));
348 
349                ELSE -- l_delete_flag = 'X'
350 
351                    p_tasks (i).syncanchor := jta_sync_task_common.convert_server_to_gmt (SYSDATE);
352                    jta_sync_common.put_messages_to_result (p_tasks (i),
353                                                            p_status => jta_sync_task_common.g_sync_success,
354                                                            p_user_message => 'JTA_SYNC_SUCCESS');
355 
356                END IF; -- l_delete_flag
357             --------------------------------------------------------------
358             -- Fix Bug 2382927 :
359             -- When Intellisync sends a sync id which has not been synced,
360             --   the record is ignored and returned as success.
361             --------------------------------------------------------------
362             ELSE -- Cannot found sync id in mapping table
363                 p_tasks (i).syncanchor := jta_sync_task_common.convert_server_to_gmt (SYSDATE); -- Newly added on 04-Jun-2002 to fix bug 2382927
364                 jta_sync_common.put_messages_to_result (
365                    p_tasks(i),
366                    p_status => jta_sync_task_common.g_sync_success,
367                    p_user_message => 'JTA_SYNC_SUCCESS'
368                 );
369             END IF; -- jta_sync_task_common.validate_syncid(p_syncid => p_tasks(i).syncid)
370         END LOOP; -- FOR i IN 1 .. NVL (p_tasks.LAST, 0)
371 
372    END delete_data;
373 
374 END jta_sync_task;