DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTF_TASK_REPEAT_APPT_PVT

Source


1 PACKAGE BODY JTF_TASK_REPEAT_APPT_PVT AS
2 /* $Header: jtfvtkob.pls 120.6 2006/04/27 05:01:19 sbarat ship $ */
3 /*======================================================================+
4 |  Copyright (c) 1995 Oracle Corporation Redwood Shores, California, USA|
5 |                            All rights reserved.                       |
6 +=======================================================================+
7 | FILENAME                                                              |
8 |   jtfvtkob.pls                                                        |
9 |                                                                       |
10 | DESCRIPTION                                                           |
11 |   This is used to process the change of repeating appointments        |
12 | NOTES                                                                 |
13 |                                                                       |
14 | Date          Developer     Change                                    |
15 |------         ------------- ---------------------------------------   |
16 | 26-Mar-2002   cjang         Created                                   |
17 | 28-Mar-2002   cjang         Modified the code for p_change_mode       |
18 |                             Added jtf_task_utl.is_this_first_task(),  |
19 |                                   jtf_task_utl.get_new_first_taskid(),|
20 |                                   jtf_task_utl.exist_syncid()         |
21 | 01-Apr-2002   cjang         Moved jtf_task_utl.is_this_first_task(),  |
22 |                                   jtf_task_utl.get_new_first_taskid(),|
23 |                                   jtf_task_utl.exist_syncid()         |
24 |                                to jtf_task_utl                        |
25 | 02-Apr-2002   cjang         Fixed modify_time and                     |
26 |                                   update_repeat_appointment           |
27 | 03-Apr-2002   cjang         Fixed so as to update last_update_date    |
28 | 08-Apr-2002   cjang         Added update_assignment_status            |
29 | 09-Apr-2002   cjang         Update object_changed_date with SYSDATE   |
30 |                                      in jtf_tasks_b                   |
31 | 24-Apr-2002   cjang         Modified c_future and c_all               |
32 |                                 in update_repeat_appointment          |
33 |                                 to check deleted_flag                 |
34 |                             If chnage mode = ALL, do not check if it's|
35 |                              the first task or not                    |
36 | 02-May-2002   cjang         Commented out update_assignment_status    |
37 | 28-Apr-2002   cjang        Modified the package name to refer the     |
38 |                            followings:                                |
39 |                              - is_this_first_task                     |
40 |                              - get_new_first_taskid                   |
41 |                              - exist_syncid                           |
42 |                              from jtf_task_utl to jta_sync_task_utl   |
43 | 03-Aug-2005   Swapan Barat Added location_id for Enh# 3691788         |
44 | 27-Jan-2006   Swapan Barat Fixed issue in modify_time for bug# 3850322|
45 | 24-Feb_2006   Twan fix issue in bug 4321360                           |
46 | 12-Apr-2006   Swapan Barat Fixed occurs number issue for  when        |
47 |                            change_mode = G_FUTURE for new recurrrence |
48 |                            rule. Bug# 5119782.                        |
49 | 26-Apr-2006   Swapan Barat Fixed bug# 5153942                         |
50 *=======================================================================*/
51 
52     --PROCEDURE update_assignment_status(p_task_id IN NUMBER)
53     --IS
54     --BEGIN
55     --  UPDATE jtf_task_all_assignments
56     --     SET assignment_status_id = 18
57     --   WHERE assignee_role = 'ASSIGNEE'
58     --     AND task_id = p_task_id;
59     --END update_assignment_status;
60 
61     PROCEDURE modify_time(p_old_calendar_start_date IN DATE,
62                           p_old_calendar_end_date   IN DATE,
63                           p_updated_field_rec       updated_field_rec,
64                           x_planned_start_date      OUT NOCOPY DATE,
65                           x_planned_end_date        OUT NOCOPY DATE,
66                           x_scheduled_start_date    OUT NOCOPY DATE,
67                           x_scheduled_end_date      OUT NOCOPY DATE,
68                           x_actual_start_date       OUT NOCOPY DATE,
69                           x_actual_end_date         OUT NOCOPY DATE
70     )
71     IS
72         l_start_date DATE;
73         l_end_date   DATE;
74     BEGIN
75         x_planned_start_date   := p_old_calendar_start_date;
76         x_planned_end_date     := p_old_calendar_end_date;
77         x_scheduled_start_date := p_old_calendar_start_date;
78         x_scheduled_end_date   := p_old_calendar_end_date;
79         x_actual_start_date    := p_old_calendar_start_date;
80         x_actual_end_date      := p_old_calendar_end_date;
81 
82         ---------------------------------------------------
83         -- Check if start time is changed
84         ---------------------------------------------------
85         IF to_char(p_old_calendar_start_date,'HH24:MI:SS') <> to_char(p_updated_field_rec.new_calendar_start_date,'HH24:MI:SS')
86         THEN
87             l_start_date := to_date(to_char(p_old_calendar_start_date,'DD-MON-YYYY')||' '||
88                                     to_char(p_updated_field_rec.new_calendar_start_date,'HH24:MI:SS'),
89                                     'DD-MON-YYYY HH24:MI:SS');
90             x_planned_start_date   := l_start_date;
91             x_scheduled_start_date := l_start_date;
92             x_actual_start_date    := l_start_date;
93         END IF;
94 
95         ---------------------------------------------------
96         -- Check if end time is changed
97         ---------------------------------------------------
98         IF to_char(p_old_calendar_end_date,'HH24:MI:SS') <> to_char(p_updated_field_rec.new_calendar_end_date,'HH24:MI:SS')
99         THEN
100             -- Commented out by SBARAT on 27/01/2006 for bug# 3850322
101             /*l_end_date := to_date(to_char(p_old_calendar_end_date,'DD-MON-YYYY')||' '||
102                                   to_char(p_updated_field_rec.new_calendar_end_date,'HH24:MI:SS'),
103                                   'DD-MON-YYYY HH24:MI:SS');*/
104 
105             -- Added by SBARAT on 27/01/2006 for bug# 3850322
106             l_end_date := NVL(l_start_date, p_old_calendar_start_date) +
107                              (p_updated_field_rec.new_calendar_end_date - p_updated_field_rec.new_calendar_start_date);
108 
109             x_planned_end_date   := l_end_date;
110             x_scheduled_end_date := l_end_date;
111             x_actual_end_date    := l_end_date;
112 
113         END IF;
114     END modify_time;
115 
116     PROCEDURE update_repeat_appointment(
117         p_api_version             IN       NUMBER,
118         p_init_msg_list           IN       VARCHAR2 DEFAULT fnd_api.g_false,
119         p_commit                  IN       VARCHAR2 DEFAULT fnd_api.g_false,
120         p_object_version_number   IN OUT NOCOPY   NUMBER,
121         p_updated_field_rec       IN       updated_field_rec,
122         x_return_status           OUT NOCOPY      VARCHAR2,
123         x_msg_count               OUT NOCOPY      NUMBER,
124         x_msg_data                OUT NOCOPY      VARCHAR2
125     )
126     IS
127 
128         CURSOR c_recur (b_recurrence_rule_id NUMBER) IS
129         SELECT *
130           FROM jtf_task_recur_rules
131          WHERE recurrence_rule_id = b_recurrence_rule_id;
132 
133         rec_recur   c_recur%ROWTYPE;
134 
135         CURSOR c_future (b_start_date DATE, b_recurrence_rule_id NUMBER) IS
136         SELECT task_id, calendar_start_date, calendar_end_date
137           FROM jtf_tasks_b
138          WHERE NVL(deleted_flag,'N') = 'N'
139            AND calendar_start_date >= b_start_date
140            AND recurrence_rule_id   = b_recurrence_rule_id;
141 
142         CURSOR c_all (b_recurrence_rule_id NUMBER) IS
143         SELECT task_id, calendar_start_date, calendar_end_date
144           FROM jtf_tasks_b
145          WHERE NVL(deleted_flag,'N') = 'N'
146            AND recurrence_rule_id = b_recurrence_rule_id;
147 
148         l_new_minimum_task_id       NUMBER;
149         l_task_exclusion_id         jta_task_exclusions.task_exclusion_id%TYPE;
150         l_new_recurrence_rule_id    NUMBER;
151         l_send_notification         VARCHAR2(1);
152         l_rowid                     ROWID;
153         l_first                     BOOLEAN := FALSE;
154         l_exist_new_first_task      BOOLEAN := FALSE;
155         l_start_date_changed        BOOLEAN := FALSE;
156         l_start_time_changed        BOOLEAN := FALSE;
157         l_end_time_changed          BOOLEAN := FALSE;
158         l_object_version_number     NUMBER;
159         l_sync_id                   NUMBER;
160 
161         l_planned_start_date        DATE;
162         l_planned_end_date          DATE;
163         l_scheduled_start_date      DATE;
164         l_scheduled_end_date        DATE;
165         l_actual_start_date         DATE;
166         l_actual_end_date           DATE;
167 
168         l_change_mode               VARCHAR2(1) := p_updated_field_rec.change_mode;
169 
170         l_occurs                    NUMBER:=0;  -- Added by SBARAT on 12/04/2006 for bug# 5119782
171 
172     BEGIN
173         SAVEPOINT update_repeat_appointment_pvt;
174 
175         x_return_status := fnd_api.g_ret_sts_success;
176 
177         IF fnd_api.to_boolean (p_init_msg_list)
178         THEN
179             fnd_msg_pub.initialize;
180         END IF;
181 
182         -----------------------------------------------------------------------
183         --   l_first    l_exist_new_first_task  mapping_table  exclusion_table
184         --   =======    ======================  =============  ===============
185         --      Y               Y                 Update          Insert
186         --
187         --      Y               N               l_change_mode is changed to G_ALL
188         --
189         --      N              Any                  N/A           Insert
190         -----------------------------------------------------------------------
191 
192         IF l_change_mode <> G_ALL
193         THEN
194             ---------------------------------------------------
195             -- Check whether the current task_id is the first task_id
196             --              which has been synced
197             ---------------------------------------------------
198             l_first := jta_sync_task_utl.is_this_first_task(p_task_id => p_updated_field_rec.task_id);
199 
200             -----------------------------------
201             -- Get new minimum task id
202             -----------------------------------
203             l_new_minimum_task_id := jta_sync_task_utl.get_new_first_taskid(
204                                         p_calendar_start_date => p_updated_field_rec.old_calendar_start_date,
205                                         p_recurrence_rule_id  => p_updated_field_rec.recurrence_rule_id
206                                      );
207             IF l_new_minimum_task_id > 0
208             THEN
209                 l_exist_new_first_task := TRUE;
210             END IF;
211 
212 /*
213             -----------------------------------
214             -- Check if start date is changed
215             -----------------------------------
216             IF trunc(p_updated_field_rec.old_calendar_start_date) <>
217                trunc(p_updated_field_rec.new_calendar_start_date)
218             THEN
219                 -- If start date is changed,
220                 --   we update only the current appointment
221                 l_change_mode := G_ONE;
222             END IF;
223 */
224 
225             -----------------------------------
226             -- Check if this is the last one
227             -----------------------------------
228             IF (l_first AND NOT l_exist_new_first_task) OR
229                (l_first AND l_change_mode = G_FUTURE)
230             THEN
231                 -- This repeating rule has only one appointment currently OR
232                 -- A user selected the first task one and
233                 --     chose the option "Update all the future appointments"
234                 l_change_mode := G_ALL;
235             END IF;
236         END IF;
237 
238         --------------------------------------------------------------
239         --
240         -- Process this update based on l_change_mode
241         --
242         --------------------------------------------------------------
243         IF l_change_mode = G_ONE
244         THEN
245             ---------------------------------------------------
246             -- Update mapping table with new minimum task id
247             --    if this is the first one and not the last one
248             ---------------------------------------------------
249             IF l_first and l_exist_new_first_task
250             THEN
251                 IF jta_sync_task_utl.exist_syncid(
252                                 p_task_id => p_updated_field_rec.task_id,
253                                 x_sync_id => l_sync_id)
254                 THEN
255                     UPDATE jta_sync_task_mapping
256                        SET task_id = l_new_minimum_task_id
257                          , last_update_date = SYSDATE
258                      WHERE task_id = p_updated_field_rec.task_id;
259                 END IF;
260             END IF;
261 
262             --------------------------------------------
263             -- Insert this appt into exclusion table
264             --------------------------------------------
265             SELECT jta_task_exclusions_s.NEXTVAL
266               INTO l_task_exclusion_id
267               FROM DUAL;
268 
269             jta_task_exclusions_pkg.insert_row (
270                 p_task_exclusion_id   => l_task_exclusion_id,
271                 p_task_id             => p_updated_field_rec.task_id,
272                 p_recurrence_rule_id  => p_updated_field_rec.recurrence_rule_id,
273                 p_exclusion_date      => p_updated_field_rec.old_calendar_start_date
274             );
275 
276             --------------------------------------------------------
277             -- Update this appointment
278             --------------------------------------------------------
279             jtf_tasks_pvt.update_task (
280                 p_api_version             => p_api_version,
281                 p_init_msg_list           => p_init_msg_list,
282                 p_commit                  => p_commit,
283                 p_object_version_number   => p_object_version_number,
284                 p_task_id                 => p_updated_field_rec.task_id, -- Current appt
285                 p_task_name               => p_updated_field_rec.task_name,
286                 p_task_type_id            => p_updated_field_rec.task_type_id,
287                 p_description             => p_updated_field_rec.description,
288                 p_task_status_id          => p_updated_field_rec.task_status_id,
289                 p_task_priority_id        => p_updated_field_rec.task_priority_id,
290                 p_owner_type_code         => p_updated_field_rec.owner_type_code,
291                 p_owner_id                => p_updated_field_rec.owner_id,
292                 p_owner_territory_id      => p_updated_field_rec.owner_territory_id,
293                 p_assigned_by_id          => p_updated_field_rec.assigned_by_id,
294                 p_customer_id             => p_updated_field_rec.customer_id,
295                 p_cust_account_id         => p_updated_field_rec.cust_account_id,
296                 p_address_id              => p_updated_field_rec.address_id,
297                 p_planned_start_date      => p_updated_field_rec.planned_start_date,
298                 p_planned_end_date        => p_updated_field_rec.planned_end_date,
299                 p_scheduled_start_date    => p_updated_field_rec.scheduled_start_date,
300                 p_scheduled_end_date      => p_updated_field_rec.scheduled_end_date,
301                 p_actual_start_date       => p_updated_field_rec.actual_start_date,
302                 p_actual_end_date         => p_updated_field_rec.actual_end_date,
303                 p_timezone_id             => p_updated_field_rec.timezone_id,
304                 p_source_object_type_code => p_updated_field_rec.source_object_type_code,
305                 p_source_object_id        => p_updated_field_rec.source_object_id,
306                 p_source_object_name      => p_updated_field_rec.source_object_name,
307                 p_duration                => p_updated_field_rec.duration,
308                 p_duration_uom            => p_updated_field_rec.duration_uom,
309                 p_planned_effort          => p_updated_field_rec.planned_effort,
310                 p_planned_effort_uom      => p_updated_field_rec.planned_effort_uom,
311                 p_actual_effort           => p_updated_field_rec.actual_effort,
312                 p_actual_effort_uom       => p_updated_field_rec.actual_effort_uom,
313                 p_percentage_complete     => p_updated_field_rec.percentage_complete,
314                 p_reason_code             => p_updated_field_rec.reason_code,
315                 p_private_flag            => p_updated_field_rec.private_flag,
316                 p_publish_flag            => p_updated_field_rec.publish_flag,
317                 p_restrict_closure_flag   => p_updated_field_rec.restrict_closure_flag,
318                 p_multi_booked_flag       => p_updated_field_rec.multi_booked_flag,
319                 p_milestone_flag          => p_updated_field_rec.milestone_flag,
320                 p_holiday_flag            => p_updated_field_rec.holiday_flag,
321                 p_billable_flag           => p_updated_field_rec.billable_flag,
322                 p_bound_mode_code         => p_updated_field_rec.bound_mode_code,
323                 p_soft_bound_flag         => p_updated_field_rec.soft_bound_flag,
324                 p_workflow_process_id     => p_updated_field_rec.workflow_process_id,
325                 p_notification_flag       => p_updated_field_rec.notification_flag,
326                 p_notification_period     => p_updated_field_rec.notification_period,
327                 p_notification_period_uom => p_updated_field_rec.notification_period_uom,
328                 p_parent_task_id          => p_updated_field_rec.parent_task_id,
329                 p_alarm_start             => p_updated_field_rec.alarm_start,
330                 p_alarm_start_uom         => p_updated_field_rec.alarm_start_uom,
331                 p_alarm_on                => p_updated_field_rec.alarm_on,
332                 p_alarm_count             => p_updated_field_rec.alarm_count,
333                 p_alarm_fired_count       => p_updated_field_rec.alarm_fired_count,
334                 p_alarm_interval          => p_updated_field_rec.alarm_interval,
335                 p_alarm_interval_uom      => p_updated_field_rec.alarm_interval_uom,
336                 p_palm_flag               => p_updated_field_rec.palm_flag,
337                 p_wince_flag              => p_updated_field_rec.wince_flag,
338                 p_laptop_flag             => p_updated_field_rec.laptop_flag,
339                 p_device1_flag            => p_updated_field_rec.device1_flag,
340                 p_device2_flag            => p_updated_field_rec.device2_flag,
341                 p_device3_flag            => p_updated_field_rec.device3_flag,
342                 p_costs                   => p_updated_field_rec.costs,
343                 p_currency_code           => p_updated_field_rec.currency_code,
344                 p_escalation_level        => p_updated_field_rec.escalation_level,
345                 x_return_status           => x_return_status,
346                 x_msg_count               => x_msg_count,
347                 x_msg_data                => x_msg_data,
348                 p_attribute1              => p_updated_field_rec.attribute1,
349                 p_attribute2              => p_updated_field_rec.attribute2,
350                 p_attribute3              => p_updated_field_rec.attribute3,
351                 p_attribute4              => p_updated_field_rec.attribute4,
352                 p_attribute5              => p_updated_field_rec.attribute5,
353                 p_attribute6              => p_updated_field_rec.attribute6,
354                 p_attribute7              => p_updated_field_rec.attribute7,
355                 p_attribute8              => p_updated_field_rec.attribute8,
356                 p_attribute9              => p_updated_field_rec.attribute9,
357                 p_attribute10             => p_updated_field_rec.attribute10,
358                 p_attribute11             => p_updated_field_rec.attribute11,
359                 p_attribute12             => p_updated_field_rec.attribute12,
360                 p_attribute13             => p_updated_field_rec.attribute13,
361                 p_attribute14             => p_updated_field_rec.attribute14,
362                 p_attribute15             => p_updated_field_rec.attribute15,
363                 p_attribute_category      => p_updated_field_rec.attribute_category,
364                 p_date_selected           => p_updated_field_rec.date_selected,
365                 p_category_id             => p_updated_field_rec.category_id,
366                 p_show_on_calendar        => p_updated_field_rec.show_on_calendar,
367                 p_owner_status_id         => p_updated_field_rec.owner_status_id,
368                 p_enable_workflow         => p_updated_field_rec.enable_workflow,
369                 p_abort_workflow          => p_updated_field_rec.abort_workflow,
370                 p_change_mode             => G_SKIP,
371                 p_free_busy_type          => p_updated_field_rec.free_busy_type, -- Bug No 4231616
372 		    p_task_confirmation_status  => jtf_task_utl.g_miss_char,
373 		    p_task_confirmation_counter => jtf_task_utl.g_miss_number,
374 		    p_task_split_flag		  => jtf_task_utl.g_miss_char,
375 		    p_child_position		  => jtf_task_utl.g_miss_char,
376 		    p_child_sequence_num	  => jtf_task_utl.g_miss_number,
377                 p_location_id               => p_updated_field_rec.location_id
378             );
379 
380             IF NOT (x_return_status = fnd_api.g_ret_sts_success)
381             THEN
382                x_return_status := fnd_api.g_ret_sts_unexp_error;
383                RAISE fnd_api.g_exc_unexpected_error;
384             END IF;
385 
386             --------------------------------------------------------
387             -- Nullify recurrence_rule_id for this appointment
388             --------------------------------------------------------
389             UPDATE jtf_tasks_b
390                SET recurrence_rule_id = NULL
391                  , object_changed_date = SYSDATE
392              WHERE task_id = p_updated_field_rec.task_id;
393 
394             IF l_first
395             THEN
396                 UPDATE jtf_tasks_b
397                    SET object_changed_date = SYSDATE
398                  WHERE task_id = l_new_minimum_task_id;
399             END IF;
400 
401             --------------------------------------------------------
402             -- Wipe out the assignment status for invitees
403             -- This will change the status back to 18 (Invited)
404             --------------------------------------------------------
405             --update_assignment_status(p_task_id => p_updated_field_rec.task_id);
406 
407         ELSIF l_change_mode = G_FUTURE
408         THEN
409             -----------------------------------------------------------------
410             -- Create a new repeating rule (use recurrence table handler)
411             -----------------------------------------------------------------
412             OPEN c_recur (p_updated_field_rec.recurrence_rule_id);
413             FETCH c_recur INTO rec_recur;
414             IF c_recur%NOTFOUND
415             THEN
416                 CLOSE c_recur;
417                 fnd_message.set_name ('JTF', 'JTF_TK_INVALID_RECUR_RULE');
418                 fnd_message.set_token ('P_TASK_RECURRENCE_RULE_ID', p_updated_field_rec.recurrence_rule_id);
419                 fnd_msg_pub.add;
420 
421                 x_return_status := fnd_api.g_ret_sts_unexp_error;
422                 RAISE fnd_api.g_exc_unexpected_error;
423             END IF;
424             CLOSE c_recur;
425 
426             SELECT jtf_task_recur_rules_s.NEXTVAL
427               INTO l_new_recurrence_rule_id
428               FROM dual;
429 
430             jtf_task_recur_rules_pkg.insert_row (
431                 x_rowid              => l_rowid,
432                 x_recurrence_rule_id => l_new_recurrence_rule_id,
433                 x_occurs_which       => rec_recur.occurs_which,
434                 x_day_of_week        => rec_recur.day_of_week,
435                 x_date_of_month      => rec_recur.date_of_month,
436                 x_occurs_month       => rec_recur.occurs_month,
437                 x_occurs_uom         => rec_recur.occurs_uom,
438                 x_occurs_every       => rec_recur.occurs_every,
439                 x_occurs_number      => rec_recur.occurs_number,
440                 x_start_date_active  => trunc(p_updated_field_rec.new_calendar_start_date), -- New start date
441                 x_end_date_active    => rec_recur.end_date_active,
442                 x_attribute1         => rec_recur.attribute1 ,
443                 x_attribute2         => rec_recur.attribute2 ,
444                 x_attribute3         => rec_recur.attribute3 ,
445                 x_attribute4         => rec_recur.attribute4 ,
446                 x_attribute5         => rec_recur.attribute5 ,
447                 x_attribute6         => rec_recur.attribute6 ,
448                 x_attribute7         => rec_recur.attribute7 ,
449                 x_attribute8         => rec_recur.attribute8 ,
450                 x_attribute9         => rec_recur.attribute9 ,
451                 x_attribute10        => rec_recur.attribute10 ,
452                 x_attribute11        => rec_recur.attribute11 ,
453                 x_attribute12        => rec_recur.attribute12 ,
454                 x_attribute13        => rec_recur.attribute13 ,
455                 x_attribute14        => rec_recur.attribute14 ,
456                 x_attribute15        => rec_recur.attribute15,
457                 x_attribute_category => rec_recur.attribute_category ,
458                 x_creation_date      => SYSDATE,
459                 x_created_by         => jtf_task_utl.created_by,
460                 x_last_update_date   => SYSDATE,
461                 x_last_updated_by    => jtf_task_utl.updated_by,
462                 x_last_update_login  => fnd_global.login_id,
463                 x_sunday             => rec_recur.sunday,
464                 x_monday             => rec_recur.monday,
465                 x_tuesday            => rec_recur.tuesday,
466                 x_wednesday          => rec_recur.wednesday,
467                 x_thursday           => rec_recur.thursday,
468                 x_friday             => rec_recur.friday,
469                 x_saturday           => rec_recur.saturday,
470                 x_date_selected      => rec_recur.date_selected
471             );
472 
473             -------------------------------------------------
474             -- Find all the future appointments
475             -- This cursor is not selecting the current appt
476             -- The current appt is updated after this loop
477             -------------------------------------------------
478             FOR rec_future IN c_future (b_start_date         => p_updated_field_rec.old_calendar_start_date,
479                                         b_recurrence_rule_id => p_updated_field_rec.recurrence_rule_id)
480             LOOP
481 
482                 l_occurs :=l_occurs + 1;    -- Added by SBARAT on 12/04/2006 for bug# 5119782
483 
484                 --------------------------------------------
485                 -- Insert this appt into exclusion table
486                 --------------------------------------------
487                 SELECT jta_task_exclusions_s.NEXTVAL
488                   INTO l_task_exclusion_id
489                   FROM DUAL;
490 
491                 jta_task_exclusions_pkg.insert_row (
492                     p_task_exclusion_id   => l_task_exclusion_id,
493                     p_task_id             => rec_future.task_id,
494                     p_recurrence_rule_id  => p_updated_field_rec.recurrence_rule_id,
495                     p_exclusion_date      => rec_future.calendar_start_date
496                 );
497 
498                 modify_time(p_old_calendar_start_date => rec_future.calendar_start_date,
499                             p_old_calendar_end_date   => rec_future.calendar_end_date,
500                             p_updated_field_rec       => p_updated_field_rec,
501                             x_planned_start_date      => l_planned_start_date,
502                             x_planned_end_date        => l_planned_end_date,
503                             x_scheduled_start_date    => l_scheduled_start_date,
504                             x_scheduled_end_date      => l_scheduled_end_date,
505                             x_actual_start_date       => l_actual_start_date,
506                             x_actual_end_date         => l_actual_end_date
507                 );
508 
509                 ---------------------------------------------------------
510                 -- Call update_task for each future appt
511                 --   to update the updated fields and recurrence_rule_id
512                 ---------------------------------------------------------
513                 l_object_version_number := jta_sync_task_common.get_ovn (p_task_id => rec_future.task_id);
514 
515                 jtf_tasks_pvt.update_task (
516                     p_api_version             => p_api_version,
517                     p_init_msg_list           => p_init_msg_list,
518                     p_commit                  => p_commit,
519                     p_object_version_number   => l_object_version_number,
520                     p_task_id                 => rec_future.task_id, -- Future appt
521                     p_task_name               => p_updated_field_rec.task_name,
522                     p_task_type_id            => p_updated_field_rec.task_type_id,
523                     p_description             => p_updated_field_rec.description,
524                     p_task_status_id          => p_updated_field_rec.task_status_id,
525                     p_task_priority_id        => p_updated_field_rec.task_priority_id,
526                     p_owner_type_code         => p_updated_field_rec.owner_type_code,
527                     p_owner_id                => p_updated_field_rec.owner_id,
528                     p_owner_territory_id      => p_updated_field_rec.owner_territory_id,
529                     p_assigned_by_id          => p_updated_field_rec.assigned_by_id,
530                     p_customer_id             => p_updated_field_rec.customer_id,
531                     p_cust_account_id         => p_updated_field_rec.cust_account_id,
532                     p_address_id              => p_updated_field_rec.address_id,
533                     p_planned_start_date      => l_planned_start_date,
534                     p_planned_end_date        => l_planned_end_date,
535                     p_scheduled_start_date    => l_scheduled_start_date,
536                     p_scheduled_end_date      => l_scheduled_end_date,
537                     p_actual_start_date       => l_actual_start_date,
538                     p_actual_end_date         => l_actual_end_date,
539                     p_timezone_id             => p_updated_field_rec.timezone_id,
540                     p_source_object_type_code => p_updated_field_rec.source_object_type_code,
541                     p_source_object_id        => p_updated_field_rec.source_object_id,
542                     p_source_object_name      => p_updated_field_rec.source_object_name,
543                     p_duration                => p_updated_field_rec.duration,
544                     p_duration_uom            => p_updated_field_rec.duration_uom,
545                     p_planned_effort          => p_updated_field_rec.planned_effort,
546                     p_planned_effort_uom      => p_updated_field_rec.planned_effort_uom,
547                     p_actual_effort           => p_updated_field_rec.actual_effort,
548                     p_actual_effort_uom       => p_updated_field_rec.actual_effort_uom,
549                     p_percentage_complete     => p_updated_field_rec.percentage_complete,
550                     p_reason_code             => p_updated_field_rec.reason_code,
551                     p_private_flag            => p_updated_field_rec.private_flag,
552                     p_publish_flag            => p_updated_field_rec.publish_flag,
553                     p_restrict_closure_flag   => p_updated_field_rec.restrict_closure_flag,
554                     p_multi_booked_flag       => p_updated_field_rec.multi_booked_flag,
555                     p_milestone_flag          => p_updated_field_rec.milestone_flag,
556                     p_holiday_flag            => p_updated_field_rec.holiday_flag,
557                     p_billable_flag           => p_updated_field_rec.billable_flag,
558                     p_bound_mode_code         => p_updated_field_rec.bound_mode_code,
559                     p_soft_bound_flag         => p_updated_field_rec.soft_bound_flag,
560                     p_workflow_process_id     => p_updated_field_rec.workflow_process_id,
561                     p_notification_flag       => p_updated_field_rec.notification_flag,
562                     p_notification_period     => p_updated_field_rec.notification_period,
563                     p_notification_period_uom => p_updated_field_rec.notification_period_uom,
564                     p_parent_task_id          => p_updated_field_rec.parent_task_id,
565                     p_alarm_start             => p_updated_field_rec.alarm_start,
566                     p_alarm_start_uom         => p_updated_field_rec.alarm_start_uom,
567                     p_alarm_on                => p_updated_field_rec.alarm_on,
568                     p_alarm_count             => p_updated_field_rec.alarm_count,
569                     p_alarm_fired_count       => p_updated_field_rec.alarm_fired_count,
570                     p_alarm_interval          => p_updated_field_rec.alarm_interval,
571                     p_alarm_interval_uom      => p_updated_field_rec.alarm_interval_uom,
572                     p_palm_flag               => p_updated_field_rec.palm_flag,
573                     p_wince_flag              => p_updated_field_rec.wince_flag,
574                     p_laptop_flag             => p_updated_field_rec.laptop_flag,
575                     p_device1_flag            => p_updated_field_rec.device1_flag,
576                     p_device2_flag            => p_updated_field_rec.device2_flag,
577                     p_device3_flag            => p_updated_field_rec.device3_flag,
578                     p_costs                   => p_updated_field_rec.costs,
579                     p_currency_code           => p_updated_field_rec.currency_code,
580                     p_escalation_level        => p_updated_field_rec.escalation_level,
581                     x_return_status           => x_return_status,
582                     x_msg_count               => x_msg_count,
583                     x_msg_data                => x_msg_data,
584                     p_attribute1              => p_updated_field_rec.attribute1,
585                     p_attribute2              => p_updated_field_rec.attribute2,
586                     p_attribute3              => p_updated_field_rec.attribute3,
587                     p_attribute4              => p_updated_field_rec.attribute4,
588                     p_attribute5              => p_updated_field_rec.attribute5,
589                     p_attribute6              => p_updated_field_rec.attribute6,
590                     p_attribute7              => p_updated_field_rec.attribute7,
591                     p_attribute8              => p_updated_field_rec.attribute8,
592                     p_attribute9              => p_updated_field_rec.attribute9,
593                     p_attribute10             => p_updated_field_rec.attribute10,
594                     p_attribute11             => p_updated_field_rec.attribute11,
595                     p_attribute12             => p_updated_field_rec.attribute12,
596                     p_attribute13             => p_updated_field_rec.attribute13,
597                     p_attribute14             => p_updated_field_rec.attribute14,
598                     p_attribute15             => p_updated_field_rec.attribute15,
599                     p_attribute_category      => p_updated_field_rec.attribute_category,
600                     p_date_selected           => p_updated_field_rec.date_selected,
601                     p_category_id             => p_updated_field_rec.category_id,
602                     p_show_on_calendar        => p_updated_field_rec.show_on_calendar,
603                     p_owner_status_id         => p_updated_field_rec.owner_status_id,
604                     p_enable_workflow         => p_updated_field_rec.enable_workflow,
605                     p_abort_workflow          => p_updated_field_rec.abort_workflow,
606                     p_change_mode             => G_SKIP,
607 		        p_free_busy_type          => p_updated_field_rec.free_busy_type, -- Bug No 4231616
608 		        p_task_confirmation_status  => jtf_task_utl.g_miss_char,
609 		        p_task_confirmation_counter => jtf_task_utl.g_miss_number,
610 		        p_task_split_flag		=> jtf_task_utl.g_miss_char,
611 		        p_child_position		=> jtf_task_utl.g_miss_char,
612 		        p_child_sequence_num	      => jtf_task_utl.g_miss_number,
613                     p_location_id               => p_updated_field_rec.location_id
614                 );
615                  --Added by RDESPOTO on 07/29/2004
616                 cac_view_util_pvt.update_repeat_collab_details(
617                   p_source_task_id => p_updated_field_rec.task_id,
618                   p_target_task_id => rec_future.task_id );
619 
620                 IF NOT (x_return_status = fnd_api.g_ret_sts_success)
621                 THEN
622                    x_return_status := fnd_api.g_ret_sts_unexp_error;
623                    RAISE fnd_api.g_exc_unexpected_error;
624                 END IF;
625 
626                 UPDATE jtf_tasks_b
627                    SET recurrence_rule_id = l_new_recurrence_rule_id
628                      , object_changed_date = SYSDATE
629                  WHERE task_id = rec_future.task_id;
630 
631                 UPDATE jtf_tasks_b
632                    SET object_changed_date = SYSDATE
633                  WHERE task_id = p_updated_field_rec.task_id;
634 
635                 IF rec_future.task_id = p_updated_field_rec.task_id
636                 THEN
637                     p_object_version_number := l_object_version_number;
638                 END IF;
639 
640                 --------------------------------------------------------
641                 -- Wipe out the assignment status for invitees
642                 -- This will change the status back to 18 (Invited)
643                 --------------------------------------------------------
644                 --update_assignment_status(p_task_id => rec_future.task_id);
645             END LOOP;
646 
647             -- Added by SBARAT on 12/04/2006 for bug# 5119782
648             UPDATE jtf_task_recur_rules
649                SET occurs_number=l_occurs
650                WHERE recurrence_rule_id = l_new_recurrence_rule_id;
651 
652         ELSIF l_change_mode = G_ALL
653         THEN
654             ------------------------
655             -- Find all tasks
656             ------------------------
657             FOR rec_all IN c_all (b_recurrence_rule_id => p_updated_field_rec.recurrence_rule_id)
658             LOOP
659                 modify_time(p_old_calendar_start_date => rec_all.calendar_start_date,
660                             p_old_calendar_end_date   => rec_all.calendar_end_date,
661                             p_updated_field_rec       => p_updated_field_rec,
662                             x_planned_start_date      => l_planned_start_date,
663                             x_planned_end_date        => l_planned_end_date,
664                             x_scheduled_start_date    => l_scheduled_start_date,
665                             x_scheduled_end_date      => l_scheduled_end_date,
666                             x_actual_start_date       => l_actual_start_date,
667                             x_actual_end_date         => l_actual_end_date
668                 );
669                 --------------------------------------------
670                 -- Call update_task for the each appt
671                 --------------------------------------------
672                 l_object_version_number := jta_sync_task_common.get_ovn (p_task_id => rec_all.task_id);
673 
674                 jtf_tasks_pvt.update_task (
675                     p_api_version             => p_api_version,
676                     p_init_msg_list           => p_init_msg_list,
677                     p_commit                  => p_commit,
678                     p_object_version_number   => l_object_version_number,
679                     p_task_id                 => rec_all.task_id, -- each appt
680                     p_task_name               => p_updated_field_rec.task_name,
681                     p_task_type_id            => p_updated_field_rec.task_type_id,
682                     p_description             => p_updated_field_rec.description,
683                     p_task_status_id          => p_updated_field_rec.task_status_id,
684                     p_task_priority_id        => p_updated_field_rec.task_priority_id,
685                     p_owner_type_code         => p_updated_field_rec.owner_type_code,
686                     p_owner_id                => p_updated_field_rec.owner_id,
687                     p_owner_territory_id      => p_updated_field_rec.owner_territory_id,
688                     p_assigned_by_id          => p_updated_field_rec.assigned_by_id,
689                     p_customer_id             => p_updated_field_rec.customer_id,
690                     p_cust_account_id         => p_updated_field_rec.cust_account_id,
691                     p_address_id              => p_updated_field_rec.address_id,
692                     p_planned_start_date      => l_planned_start_date,
693                     p_planned_end_date        => l_planned_end_date,
694                     p_scheduled_start_date    => l_scheduled_start_date,
695                     p_scheduled_end_date      => l_scheduled_end_date,
696                     p_actual_start_date       => l_actual_start_date,
697                     p_actual_end_date         => l_actual_end_date,
698                     p_timezone_id             => p_updated_field_rec.timezone_id,
699                     p_source_object_type_code => p_updated_field_rec.source_object_type_code,
700                     p_source_object_id        => p_updated_field_rec.source_object_id,
701                     p_source_object_name      => p_updated_field_rec.source_object_name,
702                     p_duration                => p_updated_field_rec.duration,
703                     p_duration_uom            => p_updated_field_rec.duration_uom,
704                     p_planned_effort          => p_updated_field_rec.planned_effort,
705                     p_planned_effort_uom      => p_updated_field_rec.planned_effort_uom,
706                     p_actual_effort           => p_updated_field_rec.actual_effort,
707                     p_actual_effort_uom       => p_updated_field_rec.actual_effort_uom,
708                     p_percentage_complete     => p_updated_field_rec.percentage_complete,
709                     p_reason_code             => p_updated_field_rec.reason_code,
710                     p_private_flag            => p_updated_field_rec.private_flag,
711                     p_publish_flag            => p_updated_field_rec.publish_flag,
712                     p_restrict_closure_flag   => p_updated_field_rec.restrict_closure_flag,
713                     p_multi_booked_flag       => p_updated_field_rec.multi_booked_flag,
714                     p_milestone_flag          => p_updated_field_rec.milestone_flag,
715                     p_holiday_flag            => p_updated_field_rec.holiday_flag,
716                     p_billable_flag           => p_updated_field_rec.billable_flag,
717                     p_bound_mode_code         => p_updated_field_rec.bound_mode_code,
718                     p_soft_bound_flag         => p_updated_field_rec.soft_bound_flag,
719                     p_workflow_process_id     => p_updated_field_rec.workflow_process_id,
720                     p_notification_flag       => p_updated_field_rec.notification_flag,
721                     p_notification_period     => p_updated_field_rec.notification_period,
722                     p_notification_period_uom => p_updated_field_rec.notification_period_uom,
723                     p_parent_task_id          => p_updated_field_rec.parent_task_id,
724                     p_alarm_start             => p_updated_field_rec.alarm_start,
725                     p_alarm_start_uom         => p_updated_field_rec.alarm_start_uom,
726                     p_alarm_on                => p_updated_field_rec.alarm_on,
727                     p_alarm_count             => p_updated_field_rec.alarm_count,
728                     p_alarm_fired_count       => p_updated_field_rec.alarm_fired_count,
729                     p_alarm_interval          => p_updated_field_rec.alarm_interval,
730                     p_alarm_interval_uom      => p_updated_field_rec.alarm_interval_uom,
731                     p_palm_flag               => p_updated_field_rec.palm_flag,
732                     p_wince_flag              => p_updated_field_rec.wince_flag,
733                     p_laptop_flag             => p_updated_field_rec.laptop_flag,
734                     p_device1_flag            => p_updated_field_rec.device1_flag,
735                     p_device2_flag            => p_updated_field_rec.device2_flag,
736                     p_device3_flag            => p_updated_field_rec.device3_flag,
737                     p_costs                   => p_updated_field_rec.costs,
738                     p_currency_code           => p_updated_field_rec.currency_code,
739                     p_escalation_level        => p_updated_field_rec.escalation_level,
740                     x_return_status           => x_return_status,
741                     x_msg_count               => x_msg_count,
742                     x_msg_data                => x_msg_data,
743                     p_attribute1              => p_updated_field_rec.attribute1,
744                     p_attribute2              => p_updated_field_rec.attribute2,
745                     p_attribute3              => p_updated_field_rec.attribute3,
746                     p_attribute4              => p_updated_field_rec.attribute4,
747                     p_attribute5              => p_updated_field_rec.attribute5,
748                     p_attribute6              => p_updated_field_rec.attribute6,
749                     p_attribute7              => p_updated_field_rec.attribute7,
750                     p_attribute8              => p_updated_field_rec.attribute8,
751                     p_attribute9              => p_updated_field_rec.attribute9,
752                     p_attribute10             => p_updated_field_rec.attribute10,
753                     p_attribute11             => p_updated_field_rec.attribute11,
754                     p_attribute12             => p_updated_field_rec.attribute12,
755                     p_attribute13             => p_updated_field_rec.attribute13,
756                     p_attribute14             => p_updated_field_rec.attribute14,
757                     p_attribute15             => p_updated_field_rec.attribute15,
758                     p_attribute_category      => p_updated_field_rec.attribute_category,
759                     p_date_selected           => p_updated_field_rec.date_selected,
760                     p_category_id             => p_updated_field_rec.category_id,
761                     p_show_on_calendar        => p_updated_field_rec.show_on_calendar,
762                     p_owner_status_id         => p_updated_field_rec.owner_status_id,
763                     p_enable_workflow         => p_updated_field_rec.enable_workflow,
764                     p_abort_workflow          => p_updated_field_rec.abort_workflow,
765                     p_change_mode             => G_SKIP,
766 		        p_free_busy_type          => p_updated_field_rec.free_busy_type, -- Bug No 4231616
767 		        p_task_confirmation_status  => jtf_task_utl.g_miss_char,
768 		        p_task_confirmation_counter => jtf_task_utl.g_miss_number,
769 		        p_task_split_flag		=> jtf_task_utl.g_miss_char,
770 		        p_child_position		=> jtf_task_utl.g_miss_char,
771 		        p_child_sequence_num	      => jtf_task_utl.g_miss_number,
772                     p_location_id               => p_updated_field_rec.location_id
773                 );
774 
775                  --Added by RDESPOTO on 07/29/2004
776                 cac_view_util_pvt.update_repeat_collab_details(
777                   p_source_task_id => p_updated_field_rec.task_id,
778                   p_target_task_id => rec_all.task_id );
779 
780                 IF NOT (x_return_status = fnd_api.g_ret_sts_success)
781                 THEN
782                    x_return_status := fnd_api.g_ret_sts_unexp_error;
783                    RAISE fnd_api.g_exc_unexpected_error;
784                 END IF;
785 
786                 IF rec_all.task_id = p_updated_field_rec.task_id
787                 THEN
788                     p_object_version_number := l_object_version_number;
789                 END IF;
790 
791                 --------------------------------------------------------
792                 -- Wipe out the assignment status for invitees
793                 -- This will change the status back to 18 (Invited)
794                 --------------------------------------------------------
795                 --update_assignment_status(p_task_id => rec_all.task_id);
796             END LOOP;
797 
798         END IF; -- end-if trunc(tasks.calendar_start_date) <> trunc(l_calendar_start_date)
799 
800         IF fnd_api.to_boolean (p_commit)
801         THEN
802             COMMIT WORK;
803         END IF;
804 
805         fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
806     EXCEPTION
807         WHEN fnd_api.g_exc_unexpected_error
808         THEN
809             ROLLBACK TO update_repeat_appointment_pvt;
810             x_return_status := fnd_api.g_ret_sts_unexp_error;
811             fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
812         WHEN OTHERS
813         THEN
814             ROLLBACK TO update_repeat_appointment_pvt;
815             fnd_message.set_name ('JTF', 'JTF_TASK_UNKNOWN_ERROR');
816             fnd_message.set_token ('P_TEXT', SQLCODE || SQLERRM);
817             fnd_msg_pub.add;
818             x_return_status := fnd_api.g_ret_sts_unexp_error;
819             fnd_msg_pub.count_and_get (p_count => x_msg_count, p_data => x_msg_data);
820     END update_repeat_appointment;
821 
822 END JTF_TASK_REPEAT_APPT_PVT;