DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_TASK_ASSIGNMENTS_PKG

Source


1 PACKAGE BODY CSM_TASK_ASSIGNMENTS_PKG AS
2 /* $Header: csmutab.pls 120.6 2008/03/24 09:01:14 ptomar ship $ */
3 
4   /*
5    * The function to be called by CSM_SERVICEP_WRAPPER_PKG, for upward sync of
6    * publication item CSM_TASK_ASSIGNMENTS
7    */
8 
9 -- Purpose: Update Task Assignments changes on Handheld to Enterprise database
10 --
11 -- MODIFICATION HISTORY
12 -- Person      Date                 Comments
13 -- DBhagat     11th September 2002  Created
14 --
15 -- ---------   -------------------  ------------------------------------------
16    -- Enter package declarations as shown below
17 
18 /*** Globals ***/
19 g_object_name  CONSTANT VARCHAR2(30) := 'CSM_TASK_ASSIGNMENTS_PKG';  -- package name
20 g_pub_name     CONSTANT VARCHAR2(30) := 'CSM_TASK_ASSIGNMENTS';  -- publication item name
21 g_debug_level           NUMBER; -- debug level
22 
23 CURSOR c_task_assignments_inq( b_user_name VARCHAR2, b_tranid NUMBER) IS
24   SELECT *
25   FROM  csm_task_assignments_inq
26   WHERE tranid$$ = b_tranid
27   AND   clid$$cs = b_user_name;
28 
29 /***
30   This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
31 ***/
32 PROCEDURE APPLY_INSERT
33          (
34            p_record        IN c_task_assignments_inq%ROWTYPE,
35            p_error_msg     OUT NOCOPY    VARCHAR2,
36            x_return_status IN OUT NOCOPY VARCHAR2
37          ) IS
38 
39 l_task_assignment_id NUMBER;
40 l_msg_count          NUMBER;
41 l_msg_data           VARCHAR2(4000);
42 
43   CURSOR c_task_assignment
44     ( b_task_assignment_id number
45     )
46   IS
47     SELECT jta.object_version_number
48     FROM   jtf_task_assignments jta
49     WHERE  jta.task_assignment_id = b_task_assignment_id;
50 
51   l_ovn                   NUMBER;
52   l_task_object_version_number number;
53   l_task_status_id             number;
54   l_task_status_name           varchar2(240);
55   l_task_type_id	       number;
56 
57 BEGIN
58   CSM_UTIL_PKG.LOG('Entering CSM_TASK_ASSIGNMENTS_PKG.APPLY_INSERT for task_assignment_id ' || p_record.task_assignment_id ,
59                          'CSM_TASK_ASSIGNMENTS_PKG.APPLY_INSERT',FND_LOG.LEVEL_PROCEDURE);
60 
61   -- Create a Task Assignment
62   JTF_TASK_ASSIGNMENTS_PUB.create_task_assignment (
63     p_api_version          => 1.0,
64     p_init_msg_list        => FND_API.G_TRUE,
65     p_commit               => FND_API.G_FALSE,
66     p_task_assignment_id   => p_record.TASK_ASSIGNMENT_ID,
67     p_task_id              => p_record.TASK_ID,
68     p_resource_type_code   => 'RS_EMPLOYEE',
69     p_resource_id          => p_record.resource_id,
70     p_assignment_status_id => p_record.ASSIGNMENT_STATUS_ID,
71     p_attribute1           => p_record.attribute1,
72     p_attribute2           => p_record.attribute2,
73     p_attribute3           => p_record.attribute3,
74     p_attribute4           => p_record.attribute4,
75     p_attribute5           => p_record.attribute5,
76     p_attribute6           => p_record.attribute6,
77     p_attribute7           => p_record.attribute7,
78     p_attribute8           => p_record.attribute8,
79     p_attribute9           => p_record.attribute9,
80     p_attribute10          => p_record.attribute10,
81     p_attribute11          => p_record.attribute11,
82     p_attribute12          => p_record.attribute12,
83     p_attribute13          => p_record.attribute13,
84     p_attribute14          => p_record.attribute14,
85     p_attribute15          => p_record.attribute15,
86 --Bug 5182470
87     p_attribute_category   => p_record.attribute_category,
88     x_return_status        => x_return_status,
89     x_msg_count            => l_msg_count,
90     x_msg_data             => l_msg_data,
91     x_task_assignment_id   => l_task_assignment_id
92   );
93   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
94   THEN
95 
96     x_return_status := FND_API.G_RET_STS_ERROR;
97     CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
98       || ' ROOT ERROR: JTF_TASK_ASSIGNMENTS_PUB.create_task_assignment'
99       || ' for PK ' || p_record.TASK_ASSIGNMENT_ID,
100       g_object_name || '.APPLY_INSERT',FND_LOG.LEVEL_ERROR );
101     RETURN ;
102   END IF;
103 
104    -- Ask for the task. It must exist. Exceptions will abort.
105   OPEN c_task_assignment
106     ( b_task_assignment_id => p_record.task_assignment_id
107     );
108   FETCH c_task_assignment INTO l_ovn;
109   CLOSE c_task_assignment;
110 
111   -- Synchronize Task Assignment and Task statuses
112   IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
113 
114   csf_task_assignments_pub.update_assignment_status
115     ( p_api_version                => 1.0
116     , p_init_msg_list              => FND_API.G_TRUE
117     , p_commit                     => FND_API.G_FALSE
118     , p_validation_level 		   => FND_API.G_VALID_LEVEL_NONE
119     , x_return_status              => x_return_status
120     , x_msg_count                  => l_msg_count
121     , x_msg_data                   => l_msg_data
122     , p_task_assignment_id         => p_record.task_assignment_id
123     , p_assignment_status_id       => p_record.assignment_status_id
124     , p_object_version_number      => l_ovn
125     , p_update_task                => 'T'
126     , x_task_object_version_number => l_task_object_version_number
127     , x_task_status_id             => l_task_status_id
128     );
129  END IF;
130   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
131   THEN
132 
133     x_return_status := FND_API.G_RET_STS_ERROR;
134     CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
135       || ' ROOT ERROR: csf_tasks_pub.update_assignment_status'
136       || ' for PK ' || p_record.TASK_ASSIGNMENT_ID,
137       g_object_name || '.APPLY_UPDATE',FND_LOG.LEVEL_ERROR );
138     RETURN ;
139   END IF;
140 
141 
142   -- success
143   x_return_status := FND_API.G_RET_STS_SUCCESS;
144 
145 EXCEPTION WHEN OTHERS THEN
146      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT:' ||g_object_name || '.APPLY_INSERT',
147        FND_LOG.LEVEL_EXCEPTION );
148 
149   x_return_status := FND_API.G_RET_STS_ERROR;
150 END APPLY_INSERT;
151 
152 /***
153   This procedure is called by APPLY_CRECORD when
154   an updated record is to be processed.
155 ***/
156 PROCEDURE APPLY_UPDATE
157          (
158            p_record        IN c_task_assignments_inq%ROWTYPE,
159            p_error_msg     OUT NOCOPY    VARCHAR2,
160            x_return_status IN OUT NOCOPY VARCHAR2
161          ) IS
162 
163   CURSOR c_task_assignment
164     ( b_task_assignment_id number
165     )
166   IS
167     SELECT jta.task_id
168     ,      jta.object_version_number
169     ,      jta.last_update_date
170     ,      jta.last_updated_by
171     FROM   jtf_task_assignments jta
172     WHERE  jta.task_assignment_id = b_task_assignment_id;
173 
174   r_task_assignment       c_task_assignment%ROWTYPE;
175   l_ovn                   NUMBER;
176   l_profile_value         varchar2(240);
177 
178   -- Declare OUT parameters
179   l_msg_count             NUMBER;
180   l_msg_data              VARCHAR2(4000);
181   l_task_object_version_number number;
182   l_task_status_id             number;
183   l_task_status_name           varchar2(240);
184   l_task_type_id	       number;
185 
186 BEGIN
187 
188   -- Ask for the task. It must exist. Exceptions will abort.
189   OPEN c_task_assignment
190     ( b_task_assignment_id => p_record.task_assignment_id
191     );
192   FETCH c_task_assignment INTO r_task_assignment;
193   l_ovn := r_task_assignment.object_version_number;
194   CLOSE c_task_assignment;
195 
196   --check for the stale data
197   l_profile_value := fnd_profile.value(csm_profile_pkg.g_JTM_APPL_CONFLICT_RULE);
198   -- SERVER_WINS profile value
199   IF(l_profile_value = csm_profile_pkg.g_SERVER_WINS AND
200        ASG_DEFER.IS_DEFERRED(p_record.clid$$cs, p_record.tranid$$,g_pub_name, p_record.seqno$$) <> FND_API.G_TRUE)
201   THEN
202     IF(r_task_assignment.last_update_date <> p_record.server_last_update_date AND r_task_assignment.last_updated_by <> asg_base.get_user_id(p_record.clid$$cs)) THEN
203       p_error_msg := 'UPWARD SYNC CONFLICT: CLIENT LOST For JTF_TASK_ASSIGNMENTS: CSM_TASK_ASSIGNMENTS_PKG.APPLY_UPDATE: P_KEY = '
204         || p_record.task_assignment_id;
205       x_return_status := FND_API.G_RET_STS_ERROR;
206       csm_util_pkg.log(p_error_msg,
207         g_object_name || '.APPLY_UPDATE',
208         FND_LOG.LEVEL_ERROR);
209     RETURN;
210     END IF;
211   END IF;
212 
213   -- The column assignment_status_id is the status of the task_assignment_id.
214   -- The column task_assignment_id is task_assignment_id.
215   -- Validation is not a good thing for this particular API-call: as
216   -- the palm application does the check for state changes, it is not
217   -- necessary to redo them here. Even worse, a state change in two steps
218   -- A -> B and B -> C may be OK for palm application, but if the intermediate
219   -- step is not sent to CRM, the API will see A -> C and refuse it.
220   -- To allow for A -> C no validation is done.
221   csf_task_assignments_pub.update_assignment_status
222     ( p_api_version                => 1.0
223     , p_init_msg_list              => FND_API.G_TRUE
224     , p_commit                     => FND_API.G_FALSE
225     , p_validation_level 		   => FND_API.G_VALID_LEVEL_NONE
226     , x_return_status              => x_return_status
227     , x_msg_count                  => l_msg_count
228     , x_msg_data                   => l_msg_data
229     , p_task_assignment_id         => p_record.task_assignment_id
230     , p_assignment_status_id       => p_record.assignment_status_id
231     , p_object_version_number      => l_ovn
232     , p_update_task                => 'T'
233     , x_task_object_version_number => l_task_object_version_number
234     , x_task_status_id             => l_task_status_id
235     );
236   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
237   THEN
238 
239     x_return_status := FND_API.G_RET_STS_ERROR;
240     CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_UPDATE:'
241       || ' ROOT ERROR: csf_tasks_pub.update_assignment_status'
242       || ' for PK ' || p_record.TASK_ASSIGNMENT_ID,
243       g_object_name || '.APPLY_UPDATE',FND_LOG.LEVEL_ERROR );
244     RETURN ;
245   END IF;
246 
247   -- Also need to update the actual times of the task assignment update
248   -- use a different procedure for this because the csf_tasks_pub.update_assignment_status
249   -- doesn't support the actual times and the csf_tasks_pub.Update_Task_Assignment doen't
250   -- support the validation level set to none.
251   csf_task_assignments_pub.Update_Task_Assignment
252     ( p_api_version                => 1.0
253     , p_init_msg_list              => FND_API.G_TRUE
254     , p_commit                     => FND_API.G_FALSE
255     , p_task_assignment_id         => p_record.task_assignment_id
256     , p_object_version_number      => l_ovn
257     , p_task_id                    => p_record.task_id
258     , p_resource_type_code         => FND_API.G_MISS_CHAR
259     , p_resource_id                => FND_API.G_MISS_NUM --p_record.resource_id
260     , p_resource_territory_id      => FND_API.G_MISS_NUM
261     , p_assignment_status_id       => FND_API.G_MISS_NUM
262     , p_actual_start_date          => p_record.actual_start_date
263     , p_actual_end_date            => p_record.actual_end_date
264     , p_sched_travel_distance      => FND_API.G_MISS_NUM
265     , p_sched_travel_duration      => FND_API.G_MISS_NUM
266     , p_sched_travel_duration_uom  => FND_API.G_MISS_CHAR
267     , p_shift_construct_id         => FND_API.G_MISS_NUM
268     , p_object_capacity_id         => FND_API.G_MISS_NUM
269     , p_attribute1                 => p_record.attribute1
270     , p_attribute2                 => p_record.attribute2
271     , p_attribute3                 => p_record.attribute3
272     , p_attribute4                 => p_record.attribute4
273     , p_attribute5                 => p_record.attribute5
274     , p_attribute6                 => p_record.attribute6
275     , p_attribute7                 => p_record.attribute7
276     , p_attribute8                 => p_record.attribute8
277     , p_attribute9                 => p_record.attribute9
278     , p_attribute10                => p_record.attribute10
279     , p_attribute11                => p_record.attribute11
280     , p_attribute12                => p_record.attribute12
281     , p_attribute13                => p_record.attribute13
282     , p_attribute14                => p_record.attribute14
283     , p_attribute15                => p_record.attribute15
284 --Bug 5182470
285     , p_attribute_category         => p_record.attribute_category
286     , x_return_status              => x_return_status
287     , x_msg_count                  => l_msg_count
288     , x_msg_data                   => l_msg_data
289     , x_task_object_version_number => l_task_object_version_number
290     , x_task_status_id             => l_task_status_id
291     );
292 
293   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
294   THEN
295     x_return_status := FND_API.G_RET_STS_ERROR;
296 
297     CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_UPDATE:'
298       || ' ROOT ERROR: csf_tasks_pub.Update_Task_Assignment'
299       || ' for PK ' || p_record.TASK_ASSIGNMENT_ID,
300       g_object_name || '.APPLY_UPDATE',
301       FND_LOG.LEVEL_ERROR );
302     RETURN ;
303   END IF;
304 
305   -- success
306   x_return_status := FND_API.G_RET_STS_SUCCESS;
307 
308 EXCEPTION
309   WHEN others THEN
310      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_UPDATE:'
311        || ' for PK ' || p_record.task_assignment_id,
312        g_object_name || '.APPLY_UPDATE',
313        FND_LOG.LEVEL_EXCEPTION );
314 
315      x_return_status := FND_API.G_RET_STS_ERROR;
316 
317 END APPLY_UPDATE;
318 
319 
320 /***
321   This procedure is called by APPLY_CLIENT_CHANGES when a record
322   is to be processed.
323 ***/
324 PROCEDURE APPLY_RECORD
325          (
326            p_record        IN     c_task_assignments_inq%ROWTYPE,
327            p_error_msg     OUT NOCOPY    VARCHAR2,
328            x_return_status IN OUT NOCOPY VARCHAR2
329          ) IS
330 BEGIN
331 
332   /*** initialize return status and message list ***/
333   x_return_status := FND_API.G_RET_STS_SUCCESS;
334   FND_MSG_PUB.INITIALIZE;
335 
336 
337   IF p_record.dmltype$$='I' THEN
338     -- Process insert
339     APPLY_INSERT
340       (
341         p_record,
342         p_error_msg,
343         x_return_status
344       );
345   ELSIF p_record.dmltype$$='U' THEN
346     -- Process update
347     APPLY_UPDATE
348       (
349         p_record,
350         p_error_msg,
351         x_return_status
352       );
353   ELSE
354     -- Process delete and insert;
355     -- Not supported for this entity
356     CSM_UTIL_PKG.LOG
357       ( 'Delete and Insert is not supported for this entity'
358         || ' for PK ' || p_record.task_assignment_id ,
359         g_object_name || '.APPLY_RECORD',
360         FND_LOG.LEVEL_ERROR);
361 
362     p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
363       (
364         p_message        => 'CSM_DML_OPERATION'
365       , p_token_name1    => 'DML'
366       , p_token_value1   => p_record.dmltype$$
367       );
368 
369     x_return_status := FND_API.G_RET_STS_ERROR;
370   END IF;
371 
372 EXCEPTION WHEN OTHERS THEN
373   /*** defer record when any process exception occurs ***/
374   CSM_UTIL_PKG.LOG
375     ( 'Exception occurred in ' || g_object_name || '.APPLY_RECORD:' || ' ' || SQLERRM
376       || ' for PK ' || p_record.task_assignment_id ,
377       g_object_name || '.APPLY_RECORD',
378       FND_LOG.LEVEL_EXCEPTION);
379   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', SQLERRM);
380   p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
381     (
382       p_api_error      => TRUE
383     );
384 
385   x_return_status := FND_API.G_RET_STS_ERROR;
386 
387 END APPLY_RECORD;
388 
389 
390 /***
391   APPLY_CLIENT_CHANGE procedure is called by SM_SERVICEP_WRAPPER_PKG, for upward sync of
392   publication item CSM_TASK_ASSIGNMENTS
393 ***/
394 PROCEDURE APPLY_CLIENT_CHANGES
395          (
396            p_user_name     IN VARCHAR2,
397            p_tranid        IN NUMBER,
398            p_debug_level   IN NUMBER,
399            x_return_status IN OUT NOCOPY VARCHAR2
400          )
401   IS
402   l_process_status VARCHAR2(1);
403   l_error_msg      VARCHAR2(4000);
404 
405 -- ER 3079918
406 CURSOR c_chk_task_status
407     (  p_task_assignment_id NUMBER
408     )
409 IS
410 SELECT dh.debrief_header_id, tst.rejected_flag, tst.on_hold_flag,
411          tst.cancelled_flag, tst.closed_flag, tst.completed_flag
412 FROM csf_debrief_headers dh, jtf_task_assignments tas,
413            jtf_task_statuses_b tst
414 WHERE dh.task_assignment_id  = tas.task_assignment_id
415 AND tas.assignment_status_id = tst.task_status_id
416 AND tas.task_assignment_id   = p_task_assignment_id;
417 
418 l_rejected_flag   VARCHAR2(1);
419 l_on_hold_flag    VARCHAR2(1);
420 l_cancelled_flag  VARCHAR2(1);
421 l_closed_flag     VARCHAR2(1);
422 l_completed_flag  VARCHAR2(1);
423 l_dbl_count       NUMBER := NULL;
424 l_header_id       NUMBER := NULL;
425 
426 BEGIN
427   csm_util_pkg.log
428   ( g_object_name || '.APPLY_CLIENT_CHANGES entered',
429     g_object_name || '.APPLY_CLIENT_CHANGES',
430     FND_LOG.LEVEL_PROCEDURE);
431   g_debug_level := p_debug_level;
432   x_return_status := FND_API.G_RET_STS_SUCCESS;
433 
434   /*** loop through task assignments records in inqueue ***/
435   FOR r_task_assignments IN c_task_assignments_inq( p_user_name, p_tranid) LOOP
436 
437     SAVEPOINT save_rec;
438 
439     /*** apply record ***/
440     APPLY_RECORD
441       (
442         r_task_assignments
443       , l_error_msg
444       , l_process_status
445       );
446 
447     /*** was record processed successfully? ***/
448     IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
449     -- if update to charges fail, then do not defer the record
450      BEGIN
451        OPEN c_chk_task_status (r_task_assignments.task_assignment_id);
452        FETCH c_chk_task_status INTO l_header_id, l_rejected_flag,
453            l_on_hold_flag, l_cancelled_flag, l_closed_flag, l_completed_flag;
454 
455        IF c_chk_task_status%FOUND THEN
456          IF ( (l_rejected_flag='Y') OR (l_on_hold_flag='Y')
457              OR (l_cancelled_flag='Y') OR (l_closed_flag='Y')
458              OR (l_completed_flag='Y') ) THEN
459 
460            csf_debrief_update_pkg.form_Call (1.0, l_header_id);
461          END IF;
462        END IF;
463 
464        CLOSE c_chk_task_status;
465       EXCEPTION
466          WHEN others THEN
467              NULL;
468       END;
469 
470       /*** If Yes -> delete record from inqueue ***/
471       CSM_UTIL_PKG.DELETE_RECORD
472         (
473           p_user_name,
474           p_tranid,
475           r_task_assignments.seqno$$,
476           r_task_assignments.task_assignment_id,
477           g_object_name,
478           g_pub_name,
479           l_error_msg,
480           l_process_status
481         );
482 
483       /*** was delete successful? ***/
484       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
485         /*** If No -> rollback ***/
486         CSM_UTIL_PKG.LOG
487         ( 'Deleting from inqueue failed, rolling back to savepoint'
488           || ' for PK ' || r_task_assignments.task_assignment_id ,
489           g_object_name || '.APPLY_CLIENT_CHANGES',
490           FND_LOG.LEVEL_ERROR); -- put PK column here
491         ROLLBACK TO save_rec;
492         x_return_status := FND_API.G_RET_STS_ERROR;
493       END IF;
494     END IF;
495 
496     IF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
497       /*** Record was not processed successfully or delete failed
498       -> defer and reject record ***/
499       CSM_UTIL_PKG.LOG
500       ( 'Record not processed successfully, deferring and rejecting record'
501         || ' for PK ' || r_task_assignments.task_assignment_id ,
502         g_object_name || '.APPLY_CLIENT_CHANGES',
503         FND_LOG.LEVEL_ERROR); -- put PK column here
504 
505       CSM_UTIL_PKG.DEFER_RECORD
506        ( p_user_name
507        , p_tranid
508        , r_task_assignments.seqno$$
509        , r_task_assignments.task_assignment_id
510        , g_object_name
511        , g_pub_name
512        , l_error_msg
513        , l_process_status
514        , 'U'
515        );
516 
517       /*** Was defer successful? ***/
518       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
519         /*** no -> rollback ***/
520         CSM_UTIL_PKG.LOG
521         ( 'Defer record failed, rolling back to savepoint'
522           || ' for PK ' || r_task_assignments.task_assignment_id ,
523           g_object_name || '.APPLY_CLIENT_CHANGES',
524           FND_LOG.LEVEL_ERROR); -- put PK column here
525         ROLLBACK TO save_rec;
526         x_return_status := FND_API.G_RET_STS_ERROR;
527       END IF;
528     END IF;
529 
530   END LOOP;
531 
532 EXCEPTION WHEN OTHERS THEN
533   IF c_chk_task_status%ISOPEN THEN
534       CLOSE c_chk_task_status;
535   END IF;
536 
537   /*** catch and log exceptions ***/
538   CSM_UTIL_PKG.LOG
539   ( 'Exception occurred in ' || g_object_name || '.APPLY_CLIENT_CHANGES:' || ' ' || SQLERRM,
540     g_object_name || '.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
541   x_return_status := FND_API.G_RET_STS_ERROR;
542 
543 END APPLY_CLIENT_CHANGES;
544 
545 FUNCTION CONFLICT_RESOLUTION_METHOD (p_user_name IN VARCHAR2,
546                                      p_tran_id IN NUMBER,
547                                      p_sequence IN NUMBER)
548 RETURN VARCHAR2 IS
549 l_profile_value VARCHAR2(30) ;
550 l_user_id NUMBER ;
551 cursor get_user_id(l_tran_id in number,
552                    l_user_name in varchar2,
553 		   l_sequence in number)
554 IS
555 SELECT b.last_updated_by
556 FROM JTF_TASK_ASSIGNMENTS b,
557      CSM_TASK_ASSIGNMENTS_INQ a
558 WHERE a.clid$$cs = l_user_name
559 AND tranid$$ = l_tran_id
560 AND seqno$$ = l_sequence
561 AND a.task_assignment_id = b.task_assignment_id ;
562 
563 BEGIN
564   CSM_UTIL_PKG.LOG('Entering CSM_TASK_ASSIGNMENTS_PKG.CONFLICT_RESOLUTION_METHOD for user ' || p_user_name ,'CSM_TASK_ASSIGNMENTS_PKG.CONFLICT_RESOLUTION_METHOD',FND_LOG.LEVEL_PROCEDURE);
565  l_profile_value := fnd_profile.value(csm_profile_pkg.g_JTM_APPL_CONFLICT_RULE);
566 OPEN get_user_id(p_tran_id, p_user_name, p_sequence) ;
567 FETCH get_user_id
568  INTO l_user_id ;
569 CLOSE get_user_id ;
570 
571   if l_profile_value = 'SERVER_WINS' AND l_user_id <> asg_base.get_user_id(p_user_name) then
572       RETURN 'S' ;
573   else
574       RETURN 'C' ;
575   END IF ;
576 
577 EXCEPTION
578   WHEN OTHERS THEN
579      RETURN 'C';
580 END CONFLICT_RESOLUTION_METHOD;
581 
582 END CSM_TASK_ASSIGNMENTS_PKG; -- Package spec