DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_HZ_LOCATION_PKG

Source


1 PACKAGE BODY CSM_HZ_LOCATION_PKG AS
2 /* $Header: csmuhzlb.pls 120.2.12020000.4 2013/04/09 11:26:02 saradhak ship $ */
3 
4 error EXCEPTION;
5 
6 
7 /*** Globals ***/
8 g_object_name  CONSTANT VARCHAR2(30) := 'CSM_HZ_LOCATION_PKG';
9 g_pub_name     CONSTANT VARCHAR2(30) := 'CSM_HZ_LOCATIONS';
10 g_debug_level           NUMBER; -- debug level
11 
12 /* Select all inq records */
13 CURSOR c_hz_location( b_user_name VARCHAR2, b_tranid NUMBER) is
14   SELECT *
15   FROM  CSM_HZ_LOCATIONS_INQ
16   WHERE tranid$$ = b_tranid
17   AND   clid$$cs = b_user_name;
18 
19 procedure create_ship_to_address(p_user_name IN VARCHAR2,l_ta_id IN NUMBER,l_adrs_line_1  IN VARCHAR2
20                                  ,l_adrs_line_2  IN VARCHAR2,l_adrs_line_3  IN VARCHAR2,l_region_1 IN VARCHAR2,l_region_2 IN VARCHAR2
21 								 ,l_region_3 IN VARCHAR2
22 								 ,l_city  IN VARCHAR2,l_country  IN VARCHAR2,l_pincode  IN VARCHAR2
23 								 ,l_phone1  IN VARCHAR2, l_phone2 IN VARCHAR2, l_phone3  IN VARCHAR2
24 								 ,x_loc_id IN OUT NUMBER,x_cust_id OUT NOCOPY NUMBER, x_ovn  IN OUT NUMBER
25 								 ,l_ret OUT NOCOPY VARCHAR2 ,l_msg_cnt  OUT NOCOPY NUMBER  ,l_msg_data  OUT NOCOPY VARCHAR2)
26 Is
27 
28  l_rs_type VARCHAR2(100):='RS_EMPLOYEE';
29  l_rs_id  NUMBER;
30  l_user_id   NUMBER;
31  l_resp_id   NUMBER;
32  l_app_id    NUMBER;
33  l_org_id    NUMBER;
34 
35  l_style VARCHAR2(200):='GENERIC';
36 
37  CURSOR c_style IS
38  select address_style from fnd_territories_vl where address_style is not null
39  and TERRITORY_CODE=l_country
40  UNION ALL SELECT 'GENERIC' FROM DUAL;
41 
42 BEGIN
43 
44 	SELECT user_id,responsibility_id, app_id ,org_id,resource_id
45 	INTO  l_user_id,l_resp_id,l_app_id,l_org_id,l_rs_id
46 	FROM  asg_user WHERE user_name=p_user_name;
47 
48 	fnd_global.apps_initialize(l_user_id, l_resp_id, l_app_id);
49    --mo_global.set_policy_context('S',l_org_id);  also done by CSP api ..so leave it to them
50     MO_GLOBAL.INIT ('CSM');
51 
52    CSP_SHIP_TO_ADDRESS_PVT.ship_to_address_handler(p_task_assignment_id=> l_ta_id,p_resource_type=>l_rs_type,
53     p_resource_id => l_rs_id, p_customer_id => x_cust_id,p_location_id    => x_loc_id
54    ,p_style => l_style,p_address_line_1  =>l_adrs_line_1,p_address_line_2  =>l_adrs_line_2    ,p_address_line_3  =>l_adrs_line_3
55    ,p_country  =>l_country , p_postal_code => l_pincode, p_town_or_city  => l_city
56    ,p_telephone_number_1 =>l_phone1 ,p_telephone_number_2 =>l_phone2    ,p_telephone_number_3 =>l_phone3
57    ,p_tax_name =>null,p_region_1=>l_region_1,p_region_2=>l_region_2,p_region_3=>null
58    ,p_loc_information13       => null ,p_loc_information14       => null ,p_loc_information15       => null ,p_loc_information16       => null
59    ,p_loc_information17       => null ,p_loc_information18       => null,p_loc_information19       => null
60    ,p_loc_information20       => null   ,p_timezone    => null   ,p_primary_flag=> null   ,p_status => null
61    ,p_api_version_number     => 1.0,p_init_msg_list           => FND_API.G_TRUE , p_commit                  => FND_API.G_TRUE
62    ,p_attribute_category     => null  ,p_attribute1             => null   ,p_attribute2             => null
63    ,p_attribute3             => null ,p_attribute4             => null   ,p_attribute5             => null
64    ,p_attribute6             => null,p_attribute7             => null   ,p_attribute8             => null
65    ,p_attribute9             => null,p_attribute10             => null   ,p_attribute11             => null
66    ,p_attribute12             => null,p_attribute13            => null   ,p_attribute14             => null
67    ,p_attribute15             => null,p_attribute16             => null   ,p_attribute17             => null
68    ,p_attribute18             => null,p_attribute19             => null   ,p_attribute20             => null
69    ,p_object_version_number => x_ovn  ,x_return_status  => l_ret   ,x_msg_count  => l_msg_cnt    ,x_msg_data   => l_msg_data
70    );
71 
72 END create_ship_to_address;
73 
74 /***
75   This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
76 ***/
77 PROCEDURE APPLY_INSERT
78          (
79            p_record        IN c_hz_location%ROWTYPE,
80            p_error_msg     out nocopy    VARCHAR2,
81            x_return_status IN out nocopy VARCHAR2
82          ) IS
83 
84 --Variable Declarations
85 x_ovn  NUMBER := 1;
86 l_msg_count             NUMBER;
87 l_msg_data              VARCHAR2(4000);
88 l_location_rec          hz_location_v2pub.location_rec_type;
89 l_party_site_rec        hz_party_site_v2pub.party_site_rec_type;
90 l_location_id           NUMBER := NULL;
91 l_person_party_id       NUMBER;
92 l_user_id               NUMBER;
93 l_party_site_id         NUMBER := NULL;
94 l_party_site_number     VARCHAR2(30);
95 
96 x_loc_id NUMBER;
97 x_cust_id NUMBER;
98 
99 CURSOR c_get_party_site (c_location_id NUMBER)
100 IS
101   SELECT PARTY_SITE_ID FROM HZ_PARTY_SITES
102   WHERE LOCATION_ID = c_location_id;
103 
104 CURSOR c_get_party_id (c_user VARCHAR2)
105 IS
106   SELECT PERSON_PARTY_ID
107   FROM   ASG_USER asg,
108          FND_USER fnd
109   WHERE asg.USER_NAME = c_user
110   AND   fnd.USER_ID   = asg.USER_ID;
111 
112 CURSOR c_req_hdr(b_uid VARCHAR2,tid number,lid number)
113 IS
117 
114       SELECT TASK_ASSIGNMENT_ID  FROM CSM_REQ_HEADERS_INQ
115       WHERE  tranid$$    = tid AND   clid$$cs     = b_uid
116       AND   SHIP_TO_LOCATION_ID  = lid AND   ADDRESS_TYPE='S';
118   l_ta_id NUMBER:=NULL;
119 BEGIN
120 
121   x_return_status := FND_API.G_RET_STS_SUCCESS;
122   CSM_UTIL_PKG.LOG('Entering CSM_HZ_LOCATION_PKG.APPLY_INSERT for Special Location Id ' || p_record.LOCATION_ID ,
123                          'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_PROCEDURE);
124 
125 
126    OPEN   c_get_party_site (p_record.location_id);
127    FETCH  c_get_party_site  INTO l_party_site_id;
128    CLOSE  c_get_party_site ;
129 
130 
131   IF l_party_site_id IS NULL THEN
132 
133      OPEN   c_req_hdr(  p_record.CLID$$CS,p_record.tranid$$,p_record.location_id  );
134      FETCH  c_req_hdr  INTO l_ta_id;
135      CLOSE  c_req_hdr ;
136 
137     IF l_ta_id IS NULL THEN --Personal Task
138 
139 			l_location_rec.location_id            := p_record.location_id;
140 			l_location_rec.country                := p_record.country;
141 			l_location_rec.address1               := p_record.address1;
142 			l_location_rec.address2               := p_record.address2;
143 			l_location_rec.address3               := p_record.address3;
144 			l_location_rec.address4               := p_record.address4;
145 			l_location_rec.city                   := p_record.city;
146 			l_location_rec.postal_code            := p_record.postal_code;
147 			l_location_rec.state                  := p_record.state;
148 			l_location_rec.province               := p_record.province;
149 			l_location_rec.county                 := p_record.county;
150 			l_location_rec.address_lines_phonetic := p_record.address_lines_phonetic;
151 			l_location_rec.created_by_module      := 'CSFDEAR';
152 
153 			CSM_UTIL_PKG.LOG('Before calling hz_location_v2pub.create_location for Location ID ' || p_record.LOCATION_ID ,
154 								 'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_EVENT);
155 
156 		  --Call the location API to create a new location record.
157 		   hz_location_v2pub.create_location (
158 			  p_init_msg_list              => FND_API.G_TRUE,
159 			  p_location_rec               => l_location_rec,
160 			  x_location_id                => l_location_id,
161 			  x_return_status              => x_return_status,
162 			  x_msg_count                  => l_msg_count,
163 			  x_msg_data                   => l_msg_data
164 			);
165 
166 			IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
167 				/*** exception occurred in API -> return errmsg ***/
168 				p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
169 				(
170 					p_api_error      => TRUE
171 				);
172 				CSM_UTIL_PKG.log( 'Error in  hz_location_v2pub.create_location ' || p_error_msg
173 					 || ' for Location ID ' || p_record.LOCATION_ID,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
174 			   x_return_status := FND_API.G_RET_STS_ERROR;
175 			   RETURN;
176 			END IF;
177 
178 			--Get the person party id for the user from fnd user.
179 			OPEN   c_get_party_id (p_record.CLID$$CS);
180 			FETCH  c_get_party_id  INTO l_person_party_id;
181 			CLOSE  c_get_party_id ;
182 
183 			l_party_site_rec.location_id       := l_location_id;
184 			l_party_site_rec.party_id          := l_person_party_id;
185 			l_party_site_rec.created_by_module := 'CSFDEAR'; -- Calling Module 'CSF: Departure Arrival'
186 
187 			-- If the profile "Generate Party Number" is No, then
188 			-- TCA expects the caller to pass the party number.
189 			IF fnd_profile.VALUE('HZ_GENERATE_PARTY_SITE_NUMBER') = 'N' THEN
190 			  SELECT hz_party_site_number_s.NEXTVAL INTO l_party_site_rec.party_site_number
191 				FROM dual;
192 			END IF;
193 
194 			hz_party_site_v2pub.create_party_site(
195 			  p_init_msg_list              => fnd_api.g_false
196 			, p_party_site_rec             => l_party_site_rec
197 			, x_return_status              => x_return_status
198 			, x_msg_count                  => l_msg_count
199 			, x_msg_data                   => l_msg_data
200 			, x_party_site_id              => l_party_site_id
201 			, x_party_site_number          => l_party_site_number
202 			);
203 
204 			IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
205 				/*** exception occurred in API -> return errmsg ***/
206 				p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
207 				(
208 					p_api_error      => TRUE
209 				);
210 				CSM_UTIL_PKG.log( 'Error in hz_party_site_v2pub.create_party_site ' || p_error_msg||'  for location id ' || p_record.LOCATION_ID,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
211 			   x_return_status := FND_API.G_RET_STS_ERROR;
212 			   RETURN;
213 			END IF;
214 
215 			CSM_UTIL_PKG.log( 'New Party Site_id: ' ||l_party_site_id ,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
216 
217 		  --Update the Task when the Party site id
218 		  --This has to be done for all cases as Client is providing only Location id
219 		   UPDATE CSM_TASKS_INQ
220 		   SET    LOCATION_ID = l_party_site_id
221 		   WHERE  tranid$$    = p_record.tranid$$
222 		   AND   clid$$cs     = p_record.CLID$$CS
223 		   AND   location_id  = p_record.location_id;
224 
225     ELSE
226 		   CSM_UTIL_PKG.LOG('Before calling csp create_ship_to_address for Location ID ' || p_record.LOCATION_ID ,
227 								 'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_EVENT);
228 
229 	       create_ship_to_address(p_record.CLID$$CS,l_ta_id,p_record.address1,p_record.address2,p_record.address3,
230 		                          p_record.county,p_record.state ,p_record.province,p_record.city ,p_record.country,p_record.postal_code,
231 								  null, null, null,
232 								  x_loc_id ,x_cust_id , x_ovn,x_return_status  ,l_msg_count,l_msg_data );
233 
234 			IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
235 				/*** exception occurred in API -> return errmsg ***/
236 				p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
237 				(
238 					p_api_error      => TRUE
239 				);
240 				CSM_UTIL_PKG.log( 'Error in csp create_ship_to_address  ' || p_error_msg||'  for location id ' || p_record.LOCATION_ID,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
241 			    x_return_status := FND_API.G_RET_STS_ERROR;
242 			   RETURN;
243 			END IF;
244 
245            CSM_UTIL_PKG.log( 'New HR Location_id: ' ||x_loc_id ,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
246 
247 		   UPDATE CSM_REQ_HEADERS_INQ   --support for special address
248 		   SET    SHIP_TO_LOCATION_ID = x_loc_id,
249 				  SHIP_TO_LOC_SRC='HR'
250 		   WHERE  tranid$$    = p_record.tranid$$
251 		   AND   clid$$cs     = p_record.CLID$$CS
252 		   AND   SHIP_TO_LOCATION_ID  = p_record.location_id
253 		   AND   ADDRESS_TYPE='S';
254 	END IF;
255   END IF;
256 
257   CSM_UTIL_PKG.LOG('Leaving CSM_HZ_LOCATION_PKG.APPLY_INSERT for Location ID ' || p_record.LOCATION_ID ,
258                          'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_PROCEDURE);
259   x_return_status := FND_API.G_RET_STS_SUCCESS;
260 
261 EXCEPTION WHEN OTHERS THEN
262   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_INSERT', substr(sqlerrm,1,2000));
263      p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
264      (
265        p_api_error      => TRUE
266      );
267      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT: ' || substr(sqlerrm,1,2000)
268                || ' for location_id ' || p_record.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_EXCEPTION);
269 
270   x_return_status := FND_API.G_RET_STS_ERROR;
271 END APPLY_INSERT;
272 
273 
274 /***
275   This procedure is called by APPLY_CLIENT_CHANGES for every record in in-queue that needs to be processed.
276 ***/
277 PROCEDURE APPLY_RECORD
278          (
279            p_record        IN     c_hz_location%ROWTYPE,
280            p_error_msg     out nocopy    VARCHAR2,
281            x_return_status IN out nocopy VARCHAR2
282          ) IS
283   l_rc                    BOOLEAN;
284   l_access_id             NUMBER;
285 BEGIN
286   /*** initialize return status and message list ***/
287   x_return_status := FND_API.G_RET_STS_SUCCESS;
288   FND_MSG_PUB.INITIALIZE;
289 
290   CSM_UTIL_PKG.LOG('Entering CSM_HZ_LOCATION_PKG.APPLY_RECORD for Special Location Id ' || p_record.LOCATION_ID ,
291                          'CSM_HZ_LOCATION_PKG.APPLY_RECORD',FND_LOG.LEVEL_PROCEDURE);
292 
293   IF p_record.dmltype$$='I' THEN
294     -- Process insert
295     APPLY_INSERT
296       (
297         p_record,
298         p_error_msg,
299         x_return_status
300       );
301   ELSE --Delete and update is not supported for this PI
302     -- invalid dml type
303       CSM_UTIL_PKG.LOG
304         ( 'Invalid DML type: ' || p_record.dmltype$$ || ' is not supported for this entity'
305       || ' for Locaton ID ' || p_record.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_RECORD',FND_LOG.LEVEL_ERROR);
306 
307     p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
308       (
309         p_message        => 'CSM_DML_OPERATION'
310       , p_token_name1    => 'DML'
311       , p_token_value1   => p_record.dmltype$$
312       );
313 
314     x_return_status := FND_API.G_RET_STS_ERROR;
315   END IF;
316 
320      fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', substr(sqlerrm,1,2000));
317   CSM_UTIL_PKG.LOG('Leaving CSM_HZ_LOCATION_PKG.APPLY_RECORD for Locaton ID ' || p_record.LOCATION_ID ,
318                          'CSM_HZ_LOCATION_PKG.APPLY_RECORD',FND_LOG.LEVEL_PROCEDURE);
319 EXCEPTION WHEN OTHERS THEN
321      p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
322      (
323        p_api_error      => TRUE
324      );
325      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_RECORD: ' || substr(sqlerrm,1,2000)
326                || ' for Locaton ID ' || p_record.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_RECORD',FND_LOG.LEVEL_EXCEPTION);
327 
328   x_return_status := FND_API.G_RET_STS_ERROR;
329 
330 END APPLY_RECORD;
331 
332 PROCEDURE DEFER_DEPENDENT_RECORDS(p_user_name IN VARCHAR2, p_tranid IN NUMBER,p_loc_id IN NUMBER,p_err_msg IN VARCHAR2)
333 IS
334 l_ret_status varchar2(1);
335 BEGIN
336    CSM_UTIL_PKG.log( 'Deferring dependent records for Locaton ID ' || p_loc_id ,'CSM_HZ_LOCATION_PKG.DEFER_DEPENDENT_RECORDS',FND_LOG.LEVEL_PROCEDURE);
337 
338  --PERSONAL Tasks
339    FOR rec in (SELECT TASK_ID ,SEQNO$$,DMLTYPE$$
340                FROM  CSM_TASKS_INQ
341                WHERE  tranid$$    = p_tranid
342                AND   clid$$cs     = p_user_name
343                AND   location_id  = p_loc_id)
344    LOOP
345       CSM_UTIL_PKG.DEFER_RECORD
346        ( p_user_name , p_tranid   , rec.seqno$$
347        , rec.TASK_ID , g_object_name , 'CSM_TASKS'
348        , 'Creation of new Location failed :'||p_err_msg , l_ret_status , rec.dmltype$$
349        );
350    END LOOP;
351 
352  --Requirement lines/headers with special address
353    FOR rec in (SELECT REQUIREMENT_HEADER_ID ,SEQNO$$,DMLTYPE$$
354                FROM  CSM_REQ_HEADERS_INQ
355                WHERE  tranid$$    = p_tranid
356                AND   clid$$cs     = p_user_name
357                AND   SHIP_TO_LOCATION_ID  = p_loc_id
358                AND   ADDRESS_TYPE='S')
359    LOOP
360 
361       CSM_UTIL_PKG.DEFER_RECORD
362        ( p_user_name , p_tranid   , rec.seqno$$
363        , rec.REQUIREMENT_HEADER_ID , g_object_name , 'CSM_REQ_HEADERS'
364        , 'Creation of Special Ship To Location failed :'||p_err_msg , l_ret_status , rec.dmltype$$
365        );
366 
367 	   FOR rec2 IN (SELECT REQUIREMENT_LINE_ID ,SEQNO$$,DMLTYPE$$
368                     FROM  CSM_REQ_LINES_INQ
369                     WHERE  tranid$$    = p_tranid
370                     AND   clid$$cs     = p_user_name
371 					AND   REQUIREMENT_HEADER_ID=rec.REQUIREMENT_HEADER_ID)
372 	   LOOP
373 		  CSM_UTIL_PKG.DEFER_RECORD
374 		   ( p_user_name , p_tranid   , rec2.seqno$$
375 		   , rec2.REQUIREMENT_LINE_ID , g_object_name , 'CSM_REQ_LINES'
376 		   , 'Header failed on creation of special address :'||p_err_msg , l_ret_status , rec2.dmltype$$
377 		   );
378 	   END LOOP;
379     END LOOP;
380 
381 
382 END DEFER_DEPENDENT_RECORDS;
383 
384 /***
385   This procedure is called by CSM_SERVICEP_WRAPPER_PKG when publication item CSM_HZ_LOCATION
386   is dirty. This happens when a mobile field service device executed DML on an updatable table and did
387   a fast sync. This procedure will insert the data that came from mobile into the backend tables using
388   public APIs.
389 ***/
390 PROCEDURE APPLY_CLIENT_CHANGES
391          (
392            p_user_name     IN VARCHAR2,
393            p_tranid        IN NUMBER,
394            p_debug_level   IN NUMBER,
395            x_return_status IN OUT NOCOPY VARCHAR2
396          ) IS
397 
398   l_process_status VARCHAR2(1);
399   l_error_msg      VARCHAR2(4000);
400 
401 BEGIN
402 CSM_UTIL_PKG.LOG('Entering CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES ',
403                          'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
404   g_debug_level := p_debug_level;
405   x_return_status := FND_API.G_RET_STS_SUCCESS;
406 
407   /*** loop through all the  records in inqueue ***/
408   FOR r_hz_location_rec IN c_hz_location( p_user_name, p_tranid) LOOP
409     SAVEPOINT save_rec ;
410     /*** apply record ***/
411     APPLY_RECORD
412       (
413         r_hz_location_rec
414       , l_error_msg
415       , l_process_status
416       );
417 
418     /*** was record processed successfully? ***/
419     IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
420       /*** Yes -> Reject record from inqueue ***/
421       CSM_UTIL_PKG.DELETE_RECORD
422         (
423           p_user_name,
424           p_tranid,
425           r_hz_location_rec.seqno$$,
426           r_hz_location_rec.LOCATION_ID,
427           g_object_name,
428           g_pub_name,
429           l_error_msg,
430           l_process_status
431         );
432       /*** was delete successful? ***/
433       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
434        /*** no -> rollback ***/
435           CSM_UTIL_PKG.LOG
436           ( 'Deleting from inqueue failed, rolling back to savepoint'
437       || ' for Location ID ' || r_hz_location_rec.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
438         ROLLBACK TO save_rec;
439         x_return_status := FND_API.G_RET_STS_ERROR;
440       END IF;
441     ELSIF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
442       /*** Record was not applied successfully -> defer and reject records ***/
443       csm_util_pkg.log( 'Record not processed successfully, deferring and rejecting record'
444       || ' for PK ' || r_hz_location_rec.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
445 
446       CSM_UTIL_PKG.DEFER_RECORD
447        (
448          p_user_name
449        , p_tranid
450        , r_hz_location_rec.seqno$$
451        , r_hz_location_rec.LOCATION_ID
452        , g_object_name
453        , g_pub_name
454        , l_error_msg
455        , l_process_status
456        , r_hz_location_rec.dmltype$$
457        );
458 
459 	   DEFER_DEPENDENT_RECORDS(p_user_name,p_tranid,r_hz_location_rec.LOCATION_ID,l_error_msg);
460 
461       /*** Was defer successful? ***/
462       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
463         /*** no -> rollback ***/
464           CSM_UTIL_PKG.LOG
465           ( 'Defer record failed, rolling back to savepoint'
466           || ' for PK ' || r_hz_location_rec.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
467         ROLLBACK TO save_rec;
468         x_return_status := FND_API.G_RET_STS_ERROR;
469       END IF;
470     END IF;
471 
472   END LOOP;
473 
474   CSM_UTIL_PKG.LOG('Leaving CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',
475                          'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
476 
477 EXCEPTION WHEN OTHERS THEN
478   /*** catch and log exceptions ***/
479      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_CLIENT_CHANGES: ' || substr(sqlerrm,1,2000)
480                ,'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
481 
482   x_return_status := FND_API.G_RET_STS_ERROR;
483 
484 END APPLY_CLIENT_CHANGES;
485 
486 END CSM_HZ_LOCATION_PKG;