DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_DEBRIEF_LABOR_PKG

Source


1 PACKAGE BODY CSM_DEBRIEF_LABOR_PKG AS
2 /* $Header: csmudblb.pls 120.4 2008/03/24 08:59:20 ptomar ship $ */
3 
4 -- MODIFICATION HISTORY
5 -- Person      Date    Comments
6 -- Anurag     06/10/02 Created
7 -- ---------   ------  ------------------------------------------
8    -- Enter procedure, function bodies as shown below
9 
10 
11 /*** Globals ***/
12 g_object_name  CONSTANT VARCHAR2(30) := 'CSM_DEBRIEF_LABOR_PKG';  -- package name
13 g_pub_name     CONSTANT VARCHAR2(30) := 'CSF_M_DEBRIEF_LABOR';  -- publication item name
14 g_debug_level           NUMBER; -- debug level
15 
16 CURSOR c_debrief_labor( b_user_name VARCHAR2, b_tranid NUMBER) is
17   SELECT *
18   FROM  csf_m_debrief_labor_inq
19   WHERE tranid$$ = b_tranid
20   AND   clid$$cs = b_user_name;
21 
22 
23 /***
24   This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
25 ***/
26 PROCEDURE APPLY_INSERT
27          (
28            p_record        IN c_debrief_labor%ROWTYPE,
29            p_error_msg     OUT NOCOPY    VARCHAR2,
30            x_return_status IN OUT NOCOPY VARCHAR2
31          ) IS
32 
33 cursor c_deb_head
34        ( b_task_assignment_id number
35        )
36 is
37 select debrief_header_id
38 ,      task_assignment_id
39 from   csf_debrief_headers
40 where  task_assignment_id = b_task_assignment_id;
41 
42 cursor c_task_obj_code
43        ( b_task_assignment_id number
44        )
45 is
46 select source_object_type_code
47 from   jtf_tasks_b jtb
48 ,      jtf_task_assignments jta
49 where  jtb.task_id = jta.task_id
50 and    jta.task_assignment_id = b_task_assignment_id;
51 
52 r_deb_head c_deb_head%rowtype;
53 r_task_obj_code c_task_obj_code%rowtype;
54 
55 -- Cursor to check if the Assignment Status is either of the
56 -- following rejected, on_hold, cancelled, closed or completed
57 CURSOR c_chk_task_status
58      (  p_debrief_header_id CSF_DEBRIEF_HEADERS.DEBRIEF_HEADER_ID%TYPE
59      ) IS
60 SELECT tst.rejected_flag, tst.on_hold_flag, tst.cancelled_flag,
61        tst.closed_flag, tst.completed_flag
62 FROM csf_debrief_headers dh, jtf_task_assignments tas,
63      jtf_task_statuses_b tst
64 WHERE dh.task_assignment_id = tas.task_assignment_id
65 AND tas.assignment_status_id = tst.task_status_id
66 AND dh.debrief_header_id = p_debrief_header_id;
67 
68 l_rejected_flag          VARCHAR2(1);
69 l_on_hold_flag           VARCHAR2(1);
70 l_cancelled_flag         VARCHAR2(1);
71 l_closed_flag            VARCHAR2(1);
72 l_completed_flag         VARCHAR2(1);
73 
74 l_deb_rec                csf_debrief_pub.debrief_rec_type;
75 
76 l_line_rec               csf_debrief_pub.debrief_line_rec_type;
77 l_line_tbl               csf_debrief_pub.debrief_line_tbl_type;
78 
79 
80 l_debrief_header_id      number;
81 l_date                   date           := sysdate;
82 
83 l_issuing_inventory_org_id   csf_debrief_lines.issuing_inventory_org_id%TYPE;
84 l_receiving_inventory_org_id   csf_debrief_lines.receiving_inventory_org_id%TYPE;
85 
86 l_msg_data               varchar2(1024);
87 l_msg_count              number;
88 
89 BEGIN
90 
91 x_return_status := FND_API.G_RET_STS_SUCCESS;
92 
93 -- Start with some initialization.
94 -- We need to know if a debrief header record has been made
95 -- form this task_assignment_id. In that case we have to
96 -- reuse it instead of creating one.
97 -- Prerequisite: at most one record exist with the
98 -- task_assignment_id we're looking for.
99 open c_deb_head
100      ( p_record.task_assignment_id
101      );
102 fetch c_deb_head into r_deb_head;
103 if c_deb_head%found
104 then
105    l_debrief_header_id := r_deb_head.debrief_header_id;
106 else
107    l_debrief_header_id := null;
108 end if;
109 close c_deb_head;
110 
111 
112 
113 -- Create a debrief header record.
114 l_deb_rec.debrief_date       := l_date;
115 --l_deb_rec.debrief_number     := To_Char( l_debrief_header_id );
116 
117 l_deb_rec.task_assignment_id := p_record.task_assignment_id;
118 l_deb_rec.debrief_header_id  := l_debrief_header_id;
119 l_deb_rec.debrief_status_id  := NULL;
120 l_deb_rec.last_update_date   := l_date;
121 l_deb_rec.last_updated_by    := NVL(p_record.last_updated_by,FND_GLOBAL.USER_ID); --12.1
122 l_deb_rec.creation_date      := l_date;
123 l_deb_rec.created_by         := NVL(p_record.created_by,FND_GLOBAL.USER_ID);  --12.1
124 l_deb_rec.last_update_login  := FND_GLOBAL.LOGIN_ID;
125 
126 
127 if l_debrief_header_id is null
128 then
129    -- Create a debrief header.
130    l_deb_rec.debrief_number     := null ;
131 
132    csf_debrief_pub.create_debrief
133    ( p_api_version_number => 1.0
134    , p_init_msg_list      => FND_API.G_TRUE
135    , p_commit             => FND_API.G_FALSE
136    , p_debrief_rec        => l_deb_rec
137    , p_debrief_line_tbl   => l_line_tbl
138    , x_debrief_header_id  => l_debrief_header_id
139    , x_return_status      => x_return_status
140    , x_msg_count          => l_msg_count
141    , x_msg_data           => l_msg_data
142    );
143    -- This could have failed, so we need to check.
144    if x_return_status <> FND_API.G_RET_STS_SUCCESS
145    then
146       /*** exception occurred in API -> return errmsg ***/
147       p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
148       (
149         p_api_error      => TRUE
150       );
151       CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
152                || ' ROOT ERROR: csf_debrief_pub.create_debrief'
153                || ' for PK ' || p_record.DEBRIEF_LINE_ID, 'CSM_DEBRIEF_LABOR_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR );
154       x_return_status := FND_API.G_RET_STS_ERROR;
155       return;
156    end if;
157 end if;
158 
159 -- Make the debrief line.
160 
161 -- Retrieve the issuing organization id.
162 -- We may have to replace this with another master_organization_id.
163 
164 
165 l_line_rec.debrief_line_id          := p_record.debrief_line_id;
166 l_line_rec.debrief_header_id        := l_debrief_header_id;
167 
168 l_line_rec.issuing_inventory_org_id := l_issuing_inventory_org_id;
169 l_line_rec.receiving_inventory_org_id := l_receiving_inventory_org_id;
170 l_line_rec.last_update_date         := l_date;
171 l_line_rec.last_updated_by          := NVL(p_record.last_updated_by,FND_GLOBAL.USER_ID); --12.1
172 l_line_rec.creation_date            := l_date;
173 l_line_rec.created_by               := NVL(p_record.created_by,FND_GLOBAL.USER_ID); --12.1
174 l_line_rec.last_update_login        := FND_GLOBAL.LOGIN_ID;
175 l_line_rec.inventory_item_id        := p_record.inventory_item_id;
176 l_line_rec.txn_billing_type_id      := p_record.txn_billing_type_id;
177 l_line_rec.service_date             := p_record.service_date;
178 --l_line_rec.debrief_line_number      := To_Char( p_record.debrief_line_id );
179 l_line_rec.labor_start_date         := p_record.labor_start_date;
180 l_line_rec.labor_end_date           := p_record.labor_end_date;
181 l_line_rec.business_process_id      := p_record.business_process_id;
182 l_line_rec.channel_code		    	:= 'CSF_MFS';
183 l_line_rec.transaction_type_id      := p_record.transaction_type_id;
184 l_line_rec.uom_code		            := p_record.uom_code;
185 l_line_rec.quantity		            := p_record.quantity;
186 l_line_rec.labor_reason_code	    := p_record.labor_reason_code;
187 l_line_rec.attribute1               := p_record.attribute1;
188 l_line_rec.attribute2               := p_record.attribute2;
189 l_line_rec.attribute3               := p_record.attribute3;
190 l_line_rec.attribute4               := p_record.attribute4;
191 l_line_rec.attribute5               := p_record.attribute5;
192 l_line_rec.attribute6               := p_record.attribute6;
193 l_line_rec.attribute7               := p_record.attribute7;
194 l_line_rec.attribute8               := p_record.attribute8;
195 l_line_rec.attribute9               := p_record.attribute9;
196 l_line_rec.attribute10              := p_record.attribute10;
197 l_line_rec.attribute11              := p_record.attribute11;
198 l_line_rec.attribute12              := p_record.attribute12;
199 l_line_rec.attribute13              := p_record.attribute13;
200 l_line_rec.attribute14              := p_record.attribute14;
201 l_line_rec.attribute15              := p_record.attribute15;
202 l_line_rec.attribute_category       := p_record.attribute_category;
203 
204 l_line_tbl(1) := l_line_rec;
205 
206 -- Fetch SOURCE_OBJECT_TYPE_CODE from task record
207 open c_task_obj_code
208      ( p_record.task_assignment_id
209      );
210 fetch c_task_obj_code into r_task_obj_code;
211 close c_task_obj_code;
212 
213 csf_debrief_pub.create_debrief_lines
214 ( p_api_version_number      => 1.0
215 , p_init_msg_list           => FND_API.G_TRUE
216 , p_commit                  => FND_API.G_FALSE
217 , x_return_status           => x_return_status
218 , x_msg_count               => l_msg_count
219 , x_msg_data                => l_msg_data
220 , p_debrief_header_id       => l_debrief_header_id
221 , p_debrief_line_tbl        => l_line_tbl
222 , p_source_object_type_code => r_task_obj_code.source_object_type_code
223 );
224 if x_return_status <> FND_API.G_RET_STS_SUCCESS
225 then
226     /*** exception occurred in API -> return errmsg ***/
227     p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
228       (
229         p_api_error      => TRUE
230       );
231     CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
232                || ' ROOT ERROR: csf_debrief_pub.create_debrief_lines'
233                || ' for PK ' || p_record.DEBRIEF_LINE_ID ,'CSM_DEBRIEF_LABOR_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR );
234    x_return_status := FND_API.G_RET_STS_ERROR;
235    return;
236 end if;
237 
238 -- For a given debrief header check the task Assignment status.
239 -- If it is one of the following -
240 -- rejected, on_hold, cancelled, closed or completed then call the api
241 --  csf_debrief_update_pkg.form_Call for processing charges
242 
243     OPEN c_chk_task_status ( l_debrief_header_id );
244     FETCH c_chk_task_status INTO l_rejected_flag, l_on_hold_flag,
245        l_cancelled_flag, l_closed_flag, l_completed_flag;
246 
247     IF c_chk_task_status%FOUND THEN
248        IF ( (l_rejected_flag='Y') OR (l_on_hold_flag='Y') OR (l_cancelled_flag='Y')
249           OR (l_closed_flag='Y') OR (l_completed_flag='Y') ) THEN
250           csf_debrief_update_pkg.form_Call (1.0, l_debrief_header_id );
251        END IF;
252     END IF;
253 
254     CLOSE c_chk_task_status;
255 
256 exception
257   when others then
258      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT:'
259                || ' for PK ' || p_record.DEBRIEF_LINE_ID ,'CSM_DEBRIEF_LABOR_PKG.APPLY_INSERT',FND_LOG.LEVEL_EXCEPTION);
260 
261      fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_INSERT', sqlerrm);
262      p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
263      (
264        p_api_error      => TRUE
265      );
266 
267   x_return_status := FND_API.G_RET_STS_ERROR;
268 END APPLY_INSERT;
269 
270 /***
271   This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
272 ***/
273 PROCEDURE APPLY_UPDATE
274          (
275            p_record        IN c_debrief_labor%ROWTYPE,
276            p_error_msg     OUT NOCOPY    VARCHAR2,
277            x_return_status IN OUT NOCOPY VARCHAR2
278          ) IS
279 
280 CURSOR c_cdl
281     ( b_debrief_line_id csf_debrief_lines.debrief_line_id%TYPE
282     )
283 IS
284     SELECT cdl.debrief_header_id
285     ,      cdl.debrief_line_id
286     ,      cdl.last_update_date
287     ,      cdl.issuing_inventory_org_id
288     FROM   csf_debrief_lines cdl
289     WHERE  cdl.debrief_line_id = b_debrief_line_id;
290 
291 r_cdl c_cdl%ROWTYPE;
292 
293 l_line_rec               csf_debrief_pub.debrief_line_rec_type;
294 
295 l_debrief_header_id      number;
296 l_date                   date           := sysdate;
297 
298 l_msg_data               varchar2(1024);
299 l_msg_count              number;
300 
301 
302 BEGIN
303 
304 x_return_status := FND_API.G_RET_STS_SUCCESS;
305 
306 -- Lookup the debrief_header id. It must be there as this is an update
307 -- of a line.
308   OPEN c_cdl
309     (b_debrief_line_id => p_record.debrief_line_id
310     );
311   FETCH c_cdl
312   INTO r_cdl;
313   IF c_cdl%found
314   THEN
315     l_debrief_header_id := r_cdl.debrief_header_id;
316   ELSE
317     -- Let the API complain about it.
318     l_debrief_header_id := NULL;
319   END IF;
320   CLOSE c_cdl;
321 
322 -- Make the debrief line.
323 l_line_rec.issuing_inventory_org_id := r_cdl.issuing_inventory_org_id;
324 l_line_rec.debrief_line_id          := p_record.debrief_line_id;
325 l_line_rec.debrief_header_id        := l_debrief_header_id;
326 l_line_rec.last_update_date         := l_date;
327 l_line_rec.last_updated_by          :=  NVL(p_record.last_updated_by,FND_GLOBAL.USER_ID);  --12.1
328 l_line_rec.last_update_login        := FND_GLOBAL.LOGIN_ID;
329 l_line_rec.inventory_item_id        := p_record.inventory_item_id;
330 l_line_rec.txn_billing_type_id      := p_record.txn_billing_type_id;
331 l_line_rec.service_date             := p_record.service_date;
332 --l_line_rec.debrief_line_number      := To_Char( p_record.debrief_line_id );
333 l_line_rec.labor_start_date         := p_record.labor_start_date;
334 l_line_rec.labor_end_date           := p_record.labor_end_date;
335 l_line_rec.business_process_id      := p_record.business_process_id;
336 l_line_rec.channel_code		        := 'CSF_MFS';
337 l_line_rec.transaction_type_id      := p_record.transaction_type_id;
338 l_line_rec.quantity                 := p_record.quantity;
339 l_line_rec.uom_code                 := p_record.uom_code;
340 l_line_rec.labor_reason_code	    := p_record.labor_reason_code;
341 l_line_rec.attribute1               := p_record.attribute1;
342 l_line_rec.attribute2               := p_record.attribute2;
343 l_line_rec.attribute3               := p_record.attribute3;
344 l_line_rec.attribute4               := p_record.attribute4;
345 l_line_rec.attribute5               := p_record.attribute5;
346 l_line_rec.attribute6               := p_record.attribute6;
347 l_line_rec.attribute7               := p_record.attribute7;
348 l_line_rec.attribute8               := p_record.attribute8;
349 l_line_rec.attribute9               := p_record.attribute9;
350 l_line_rec.attribute10              := p_record.attribute10;
351 l_line_rec.attribute11              := p_record.attribute11;
352 l_line_rec.attribute12              := p_record.attribute12;
353 l_line_rec.attribute13              := p_record.attribute13;
354 l_line_rec.attribute14              := p_record.attribute14;
355 l_line_rec.attribute15              := p_record.attribute15;
356 l_line_rec.attribute_category       := p_record.attribute_category;
357 
358 --check for the stale data
359   -- SERVER_WINS profile value
360   if(fnd_profile.value(csm_profile_pkg.g_JTM_APPL_CONFLICT_RULE)
361        = csm_profile_pkg.g_SERVER_WINS) then
362     if(r_cdl.last_update_date <> p_record.server_last_update_date) then
363        x_return_status := FND_API.G_RET_STS_ERROR;
364        p_error_msg :=
365           'UPWARD SYNC CONFLICT: CLIENT LOST: CSM_DEBRIEF_LABOR_PKG.APPLY_UPDATE: P_KEY = '
366           || p_record.debrief_line_id;
367        csm_util_pkg.log(p_error_msg,'CSM_DEBRIEF_LABOR_PKG.APPLY_UPDATE',FND_LOG.LEVEL_ERROR);
368        return;
369     end if;
370   end if;
371 
372   --CLIENT_WINS (or client is allowd to update the record)
373 
374 -- Update the debrief line
375 csf_debrief_pub.update_debrief_line
376 ( p_api_version_number      => 1.0
377 , p_init_msg_list           => FND_API.G_TRUE
378 , p_commit                  => FND_API.G_FALSE
379 , x_return_status           => x_return_status
380 , x_msg_count               => l_msg_count
381 , x_msg_data                => l_msg_data
382 , p_debrief_line_rec        => l_line_rec
383 );
384 if x_return_status <> FND_API.G_RET_STS_SUCCESS
385 then
386    /*** exception occurred in API -> return errmsg ***/
387    p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
388       (
389         p_api_error      => TRUE
390       );
391    CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_UPDATE:'
392                || ' ROOT ERROR: csf_debrief_pub.update_debrief_lines'
393                || ' for PK ' || p_record.DEBRIEF_LINE_ID,'CSM_DEBRIEF_LABOR_PKG.APPLY_UPDATE',FND_LOG.LEVEL_ERROR );
394    x_return_status := FND_API.G_RET_STS_ERROR;
395    return;
396 end if;
397 
398 exception
399   when others then
400      fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_UPDATE', sqlerrm);
401      p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
402      (
403        p_api_error      => TRUE
404      );
405 
406      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_UPDATE:'
407                || ' for PK ' || p_record.DEBRIEF_LINE_ID,'CSM_DEBRIEF_LABOR_PKG.APPLY_UPDATE',FND_LOG.LEVEL_EXCEPTION );
408 
409      x_return_status := FND_API.G_RET_STS_ERROR;
410 END APPLY_UPDATE;
411 
412 
413 /***
414   This procedure is called by APPLY_CLIENT_CHANGES for every record in in-queue that needs to be processed.
415 ***/
416 PROCEDURE APPLY_RECORD
417          (
418            p_record        IN     c_debrief_labor%ROWTYPE,
419            p_error_msg     OUT NOCOPY    VARCHAR2,
420            x_return_status IN OUT NOCOPY VARCHAR2
421          ) IS
422 BEGIN
423   /*** initialize return status and message list ***/
424   x_return_status := FND_API.G_RET_STS_SUCCESS;
425   FND_MSG_PUB.INITIALIZE;
426 
427   IF p_record.dmltype$$='I' THEN
428     -- Process insert
429     APPLY_INSERT
430       (
431         p_record,
432         p_error_msg,
433         x_return_status
434       );
435   ELSIF p_record.dmltype$$='U' THEN
436     -- Process update
437     APPLY_UPDATE
438       (
439         p_record,
440         p_error_msg,
441         x_return_status
442       );
443   ELSE
444     -- Process delete; not supported for this entity
445       CSM_UTIL_PKG.LOG
446         ( 'Delete is not supported for this entity'
447       || ' for PK ' || p_record.debrief_line_id ,'CSM_DEBRIEF_LABOR_PKG.APPLY_RECORD',FND_LOG.LEVEL_ERROR);
448 
449     p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
450       (
451         p_message        => 'CSM_DML_OPERATION'
452       , p_token_name1    => 'DML'
453       , p_token_value1   => p_record.dmltype$$
454       );
455 
456     x_return_status := FND_API.G_RET_STS_ERROR;
457   END IF;
458 
459 EXCEPTION WHEN OTHERS THEN
460   /*** defer record when any process exception occurs ***/
461     CSM_UTIL_PKG.LOG
462     ( 'Exception occurred in CSM_DEBRIEF_labor_PKG.APPLY_RECORD:' || ' ' || sqlerrm
463       || ' for PK ' || p_record.debrief_line_id ,'CSM_DEBRIEF_LABOR_PKG.APPLY_RECORD',FND_LOG.LEVEL_EXCEPTION);
464 
465   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', sqlerrm);
466   p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
467     (
468       p_api_error      => TRUE
469     );
470 
471   x_return_status := FND_API.G_RET_STS_ERROR;
472 END APPLY_RECORD;
473 
474 /***
475   This procedure is called by CSM_UTIL_PKG when publication item <replace>
476   is dirty. This happens when a mobile field service device executed DML on an updatable table and did
477   a fast sync. This procedure will insert the data that came from mobile into the backend tables using
478   public APIs.
479 ***/
480 PROCEDURE APPLY_CLIENT_CHANGES
481          (
482            p_user_name     IN VARCHAR2,
483            p_tranid        IN NUMBER,
484            p_debug_level   IN NUMBER,
485            x_return_status IN OUT NOCOPY VARCHAR2
486          ) IS
487 
488   l_process_status VARCHAR2(1);
489   l_error_msg      VARCHAR2(4000);
490 BEGIN
491   csm_util_pkg.log('csm_debrief_labor_pkg.apply_client_changes entered','CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR);
492   g_debug_level := p_debug_level;
493   x_return_status := FND_API.G_RET_STS_SUCCESS;
494 
495   /*** loop through debrief labor records in inqueue ***/
496   FOR r_debrief_labor IN c_debrief_labor( p_user_name, p_tranid) LOOP
497 
498     SAVEPOINT save_rec;
499 
500     /*** apply record ***/
501     APPLY_RECORD
502       (
503         r_debrief_labor
504       , l_error_msg
505       , l_process_status
506       );
507 
508     /*** was record processed successfully? ***/
509     IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
510       /*** Yes -> delete record from inqueue ***/
511 
512       CSM_UTIL_PKG.DELETE_RECORD
513         (
514           p_user_name,
515           p_tranid,
516           r_debrief_labor.seqno$$,
517           r_debrief_labor.debrief_line_id,
518           g_object_name,
519           g_pub_name,
520           l_error_msg,
521           l_process_status
522         );
523 
524       /*** was delete successful? ***/
525       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
526         /*** no -> rollback ***/
527           CSM_UTIL_PKG.LOG
528           ( 'Deleting from inqueue failed, rolling back to savepoint'
529       || ' for PK ' || r_debrief_labor.debrief_line_id ,'CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
530         ROLLBACK TO save_rec;
531         x_return_status := FND_API.G_RET_STS_ERROR;
532       END IF;
533     END IF;
534 
535     IF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
536       /*** Record was not processed successfully or delete failed -> defer and reject record ***/
537         CSM_UTIL_PKG.LOG
538         ( 'Record not processed successfully, deferring and rejecting record'
539       || ' for PK ' || r_debrief_labor.debrief_line_id ,'CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
540 
541       CSM_UTIL_PKG.DEFER_RECORD
542        (
543          p_user_name
544        , p_tranid
545        , r_debrief_labor.seqno$$
546        , r_debrief_labor.debrief_line_id
547        , g_object_name
548        , g_pub_name
549        , l_error_msg
550        , l_process_status
551        , r_debrief_labor.dmltype$$
552        );
553 
554       /*** Was defer successful? ***/
555       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
556         /*** no -> rollback ***/
557           CSM_UTIL_PKG.LOG
558           ( 'Defer record failed, rolling back to savepoint'
559       || ' for PK ' || r_debrief_labor.debrief_line_id,'CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR ); -- put PK column here
560         ROLLBACK TO save_rec;
561         x_return_status := FND_API.G_RET_STS_ERROR;
562       END IF;
563     END IF;
564 
565   END LOOP;
566 
567 EXCEPTION WHEN OTHERS THEN
568   /*** catch and log exceptions ***/
569     CSM_UTIL_PKG.LOG
570     ( 'Exception occurred in APPLY_CLIENT_CHANGES:' || ' ' || SQLERRM,'CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
571   x_return_status := FND_API.G_RET_STS_ERROR;
572 END APPLY_CLIENT_CHANGES;
573 
574 END CSM_DEBRIEF_LABOR_PKG;