DBA Data[Home] [Help]

PACKAGE BODY: APPS.CN_RT_QUOTA_ASGNS_PVT

Source


1 PACKAGE BODY CN_RT_QUOTA_ASGNS_PVT as
2 /* $Header: cnxvrqab.pls 120.2 2007/08/10 20:35:41 rnagired ship $ */
3 
4 G_PKG_NAME                  CONSTANT VARCHAR2(30) := 'CN_RT_QUOTA_ASGNS_PVT';
5 G_FILE_NAME                 CONSTANT VARCHAR2(12) := 'cnxvrqab.pls';
6 G_LAST_UPDATE_DATE          DATE    := sysdate;
7 G_LAST_UPDATED_BY           NUMBER  := fnd_global.user_id;
8 G_CREATION_DATE             DATE    := sysdate;
9 G_CREATED_BY                NUMBER  := fnd_global.user_id;
10 G_LAST_UPDATE_LOGIN         NUMBER  := fnd_global.login_id;
11 G_ROWID                     VARCHAR2(30);
12 G_PROGRAM_TYPE              VARCHAR2(30);
13 --|------------------------------------------------------------------------+
14 --|  Procedure Name : Validate_Rt_quota_Asgns
15 --| Description: Validate the Rate Quota Informations like
16 --| Start Date is mandatory, Rate schedule Name is mandatory ,
17 --| End Date must be greater than start date
18 --| Start Date and end must be within the range of quota start date
19 --| and end date
20 --|------------------------------------------------------------------------+
21 PROCEDURE Validate_rt_Quota_asgns
22   (
23    x_return_status	    OUT NOCOPY VARCHAR2 ,
24    x_msg_count		    OUT NOCOPY NUMBER	 ,
25    x_msg_data		    OUT NOCOPY VARCHAR2 ,
26    p_rt_quota_asgns_rec     IN  cn_plan_element_pub.rt_quota_asgns_rec_type,
27    x_rate_schedule_id       OUT NOCOPY NUMBER,
28    x_rt_quota_asgn_id       OUT NOCOPY NUMBER,
29    x_calc_formula_id        OUT NOCOPY NUMBER,
30    p_quota_id               IN  NUMBER,
31    p_quota_name             IN cn_quotas.name%TYPE,
32    p_org_id									IN NUMBER,
33    p_loading_status         IN  VARCHAR2,
34    x_loading_status         OUT NOCOPY VARCHAR2
35    )
36   IS
37 
38 -- Cursor
39 --     CURSOR rt_quota_asgns_seq_curs(l_quota_id NUMBER) IS
40 --	SELECT end_date,
41 --               quota_id
42 --	  FROM cn_rt_quota_asgns
43 --	  WHERE quota_id = l_quota_id
44 --	  ORDER BY start_date DESC ;
45 
46      l_tmp		NUMBER;
47      l_api_name	        CONSTANT VARCHAR2(30) := 'Validate_Rt_Quota_Asgns';
48      l_lkup_meaning     cn_lookups.meaning%TYPE;
49      l_calc_formula_id  cn_calc_formulas.calc_formula_id%TYPE;
50      l_loading_status   VARCHAR2(80);
51 
52 BEGIN
53    --  Initialize API return status to success
54    x_return_status  := FND_API.G_RET_STS_SUCCESS;
55    x_loading_status := p_loading_status ;
56 
57 
58    -- Check Rate Schedule Name is not null
59 
60    l_lkup_meaning := cn_api.get_lkup_meaning('RATE_SCHEDULE_NAME','PE_OBJECT_TYPE');
61    IF ( (cn_api.chk_null_char_para
62 	 (p_char_para => p_rt_quota_asgns_rec.rate_schedule_name,
63 	  p_obj_name  => l_lkup_meaning,
64 	  p_loading_status => x_loading_status,
65 	  x_loading_status => l_loading_status)) = FND_API.G_TRUE ) THEN
66       RAISE FND_API.G_EXC_ERROR ;
67    END IF;
68 
69 
70    -- Check Start Date is not null
71 
72    l_lkup_meaning := cn_api.get_lkup_meaning('RATE_START_DATE','PE_OBJECT_TYPE');
73    IF ( (cn_api.chk_null_char_para
74 	 (p_char_para => p_rt_quota_asgns_rec.start_date,
75 	  p_obj_name  => l_lkup_meaning,
76 	  p_loading_status => x_loading_status,
77 	  x_loading_status => l_loading_status)) = FND_API.G_TRUE ) THEN
78       RAISE FND_API.G_EXC_ERROR ;
79    END IF;
80 
81 
82    -- get rate Schedule ID, raise an error if rate schedule id not found.
83 
84    x_rate_schedule_id
85      := cn_api.get_rate_table_id(p_rt_quota_asgns_rec.rate_schedule_name,p_rt_quota_asgns_rec.org_id);
86 
87    l_calc_formula_id
88      := cn_chk_plan_element_pkg.get_calc_formula_id(
89                     p_rt_quota_asgns_rec.calc_formula_name,p_org_id);
90    x_calc_formula_id := l_calc_formula_id;
91 
92    -- Raise an error, if rate schedule id is null, not exists in the database
93    IF x_rate_schedule_id IS NULL THEN
94       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
95 	THEN
96 	 FND_MESSAGE.SET_NAME ('CN' , 'CN_RATE_SCH_NOT_EXIST');
97 	 FND_MSG_PUB.Add;
98       END IF;
99       x_loading_status := 'RATE_SCH_NOT_EXIST';
100       RAISE FND_API.G_EXC_ERROR ;
101    END IF;
102 
103 
104    -- Validate Rule : End period must be greater than Start period
105 
106    IF (p_rt_quota_asgns_rec.end_date IS NOT NULL
107        AND trunc(p_rt_quota_asgns_rec.end_date) <  Trunc(p_rt_quota_asgns_rec.start_date)) THEN
108       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
109 	THEN
110 	 FND_MESSAGE.SET_NAME ('CN' , 'CN_INVALID_DATE_RANGE');
111 	 FND_MSG_PUB.Add;
112       END IF;
113       x_loading_status := 'INVALID_END_DATE';
114       RAISE FND_API.G_EXC_ERROR ;
115    END IF;
116 
117 
118    -- get the rt_quota Asgns ID if any one of the old value is not null
119    -- for Update only
120    -- clku, 8/27/2001, If condition enhanced to fix bug 1951983
121    IF ( (p_rt_quota_asgns_rec.start_date_old IS NOT NULL AND
122          p_rt_quota_asgns_rec.start_date_old <> cn_api.g_miss_date) OR
123 	    (p_rt_quota_asgns_rec.end_date_old   IS NOT NULL AND
124          p_rt_quota_asgns_rec.end_date_old   <> cn_api.g_miss_date) OR
125  	    (p_rt_quota_asgns_rec.rate_schedule_name_old IS NOT NULL AND
126          p_rt_quota_asgns_rec.rate_schedule_name_old <> cn_api.g_miss_char)) THEN
127 
128       -- Get the rt_quota_asgn_id to Update the exact record.
129 
130       x_rt_quota_asgn_id := cn_chk_plan_element_pkg.get_rt_quota_asgn_id
131 	(p_quota_id         => p_quota_id,
132          p_rate_schedule_id => cn_api.get_rate_table_id
133 	                       (p_rt_quota_asgns_rec.rate_schedule_name_old,p_rt_quota_asgns_rec.org_id),
134          p_calc_formula_id  => l_calc_formula_id,
135 	 p_start_date       => p_rt_quota_asgns_rec.start_date_old,
136 	 p_end_date         => p_rt_quota_asgns_rec.end_date_old
137 	 );
138 
139 
140       -- check the rt_quota_asgns_id is Not null and exists in the database
141 
142       IF x_rt_quota_asgn_id IS NULL THEN
143 	 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
144 	   THEN
145 	    FND_MESSAGE.SET_NAME ('CN' , 'CN_RT_QUOTA_NOT_EXISTS');
146 	    FND_MESSAGE.SET_TOKEN('QUOTA_NAME',p_quota_name);
147 	    FND_MESSAGE.SET_TOKEN('RATE_SCHEDULE_NAME',p_rt_quota_asgns_rec.rate_schedule_name_old );
148 	    FND_MESSAGE.SET_TOKEN('START_DATE',p_rt_quota_asgns_rec.start_date_old );
149 	    FND_MSG_PUB.Add;
150 	 END IF;
151 	 x_loading_status := 'RT_QUOTA_NOT_EXISTS';
152 	 RAISE FND_API.G_EXC_ERROR ;
153       END IF;
154    END IF;
155 
156 
157    -- Check Duplicate or invalid Sequence Date only
158 
159    SELECT COUNT(*)
160 	INTO l_tmp
161 	FROM cn_rt_Quota_asgns
162 	WHERE quota_id           = p_quota_id
163         AND calc_formula_id      = l_calc_formula_id
164         AND  rt_quota_asgn_id   <> Nvl(x_rt_quota_asgn_id,0)
165 	AND Trunc(start_date)    = Trunc(p_rt_quota_Asgns_rec.start_date)
166      ;
167 	      IF (l_tmp <> 0) THEN
168 		 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
169 		   THEN
170 		    FND_MESSAGE.SET_NAME ('CN' , 'CN_RT_QUOTA_EXISTS');
171 		    FND_MSG_PUB.Add;
172 		 END IF;
173 		 x_loading_status := 'RT_QUOTA_EXISTS';
174 	      END IF ;
175 
176    -- Check date Effetcivity, quota rate assigns start date and end must
177    -- be with start date and end date of the quota date
178 
179    cn_chk_plan_element_pkg.chk_date_effective
180      (
181       x_return_status         => x_return_status,
182       p_start_date            => p_rt_quota_asgns_rec.start_date,
183       p_end_date              => p_rt_quota_asgns_rec.end_date,
184       p_quota_id              => p_quota_id,
185       p_object_type           => 'RATE',
186       p_loading_status        => x_loading_status,
187       x_loading_status        => l_loading_status );
188 
189       x_loading_status := l_loading_status;
190 
191    -- check quota type, if quota type is NONE you cannot have rates
192 
193    IF Nvl(cn_chk_plan_element_pkg.get_quota_type ( p_quota_id ),'NONE') = 'NONE' THEN
194       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
195 	THEN
196 	 FND_MESSAGE.SET_NAME ('CN' , 'CN_QUOTA_CANNOT_HAVE_RATE' );
197 	 FND_MSG_PUB.Add;
198       END IF;
199       x_loading_status := 'QUOTA_CANNOT_HAVE_RATE';
200       RAISE FND_API.G_EXC_ERROR ;
201    END IF;
202 
203    -- End of Validate rt Quota Asigns .
204    -- Standard call to get message count and if count is 1, get message info.
205 
206    FND_MSG_PUB.Count_And_Get
207      (
208       p_count   =>  x_msg_count,
209       p_data    =>  x_msg_data,
210       p_encoded => FND_API.G_FALSE
211       );
212 
213 EXCEPTION
214    WHEN FND_API.G_EXC_ERROR THEN
215       x_return_status := FND_API.G_RET_STS_ERROR ;
216       FND_MSG_PUB.Count_And_Get
217 	(
218 	 p_count   =>  x_msg_count ,
219 	 p_data    =>  x_msg_data  ,
220 	 p_encoded => FND_API.G_FALSE
221 	 );
222    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
223       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
224       x_loading_status := 'UNEXPECTED_ERR';
225       FND_MSG_PUB.Count_And_Get
226 	(
227 	 p_count   =>  x_msg_count ,
228 	 p_data    =>  x_msg_data  ,
229 	 p_encoded => FND_API.G_FALSE
230 	 );
231    WHEN OTHERS THEN
232       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
233       x_loading_status := 'UNEXPECTED_ERR';
234       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
235 	THEN
236 	 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
237       END IF;
238       FND_MSG_PUB.Count_And_Get
239         (
240          p_count  =>  x_msg_count,
241          p_data   =>  x_msg_data,
242          p_encoded=> FND_API.G_FALSE
243 	 );
244 
245 END Validate_rt_quota_asgns;
246  --|-----------------------------------------------------------------------+
247  --|  Procedure Name : Create rt Quota Asgns
248  --|
249  --|-----------------------------------------------------------------------+
250 PROCEDURE Create_rt_quota_asgns
251   (
252    p_api_version        IN	NUMBER,
253    p_init_msg_list	    IN	VARCHAR2 := FND_API.G_FALSE,
254    p_commit	    	      IN  VARCHAR2 := FND_API.G_FALSE,
255    p_validation_level	  IN  NUMBER	 :=  FND_API.G_VALID_LEVEL_FULL,
256    x_return_status	    OUT NOCOPY VARCHAR2,
257    x_msg_count		      OUT NOCOPY NUMBER,
258    x_msg_data		        OUT NOCOPY VARCHAR2,
259    p_quota_name         IN  cn_quotas.name%TYPE,
260    p_org_id             IN NUMBER,
261    p_rt_quota_asgns_rec_tbl IN  cn_plan_element_pub.rt_quota_asgns_rec_tbl_type
262                             :=  cn_plan_element_pub.g_miss_rt_quota_asgns_rec_tbl,
263    x_loading_status	    OUT NOCOPY VARCHAR2,
264    x_object_version_number IN OUT NOCOPY NUMBER
265    ) IS
266 
267       l_api_name		CONSTANT VARCHAR2(30)
268 	                        := 'Create_Rt_Quota_Asgns';
269       l_api_version           	CONSTANT NUMBER := 1.0;
270       l_rt_quota_asgn_id       NUMBER;
271       l_quota_id               NUMBER;
272       l_rate_schedule_id       NUMBER;
273       l_tmp                    NUMBER;
274       l_rate_date_seq_rec_tbl  rate_date_seq_rec_tbl_type;
275       l_calc_formula_id        NUMBER;
276       l_loading_status   VARCHAR2(80);
277 
278 BEGIN
279 
280    -- Standard Start of API savepoint
281 
282    SAVEPOINT    create_rt_quota_asgns ;
283 
284 
285    -- Standard call to check for call compatibility.
286 
287    IF NOT FND_API.Compatible_API_Call ( l_api_version ,
288 					p_api_version ,
289 					l_api_name    ,
290 					G_PKG_NAME )
291      THEN
292       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
293    END IF;
294 
295 
296    -- Initialize message list if p_init_msg_list is set to TRUE.
297 
298    IF FND_API.to_Boolean( p_init_msg_list ) THEN
299       FND_MSG_PUB.initialize;
300    END IF;
301 
302 
303    --  Initialize API return status to success
304 
305    x_return_status := FND_API.G_RET_STS_SUCCESS;
306    x_loading_status := 'CN_INSERTED';
307 
308 
309    -- API body
310    -- Validate the Rt quota Assgns
311 
312    IF p_rt_quota_asgns_rec_tbl.COUNT > 0 THEN
313 
314       -- check quota name is missing or null, mandatory
315       IF ( (cn_api.chk_miss_char_para
316 	    ( p_char_para => p_quota_name,
317 	      p_para_name => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
318 	      p_loading_status => x_loading_status,
319 	      x_loading_status => l_loading_status)) = FND_API.G_TRUE) THEN
320 	 RAISE FND_API.G_EXC_ERROR ;
321        ELSIF ( (cn_api.chk_null_char_para
322 		(p_char_para => p_quota_name,
323 		 p_obj_name  => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
324 		 p_loading_status => x_loading_status,
325 		 x_loading_status => l_loading_status)) = FND_API.G_TRUE ) THEN
326 	 RAISE FND_API.G_EXC_ERROR ;
327       END IF;
328 
329 
330       -- get Quota ID
331 
332       l_quota_id  := cn_chk_plan_element_pkg.get_quota_id(p_quota_name,p_org_id);
333 
334 
335       -- if Quota id is null and name is not null then raise an error
336 
337       IF (p_quota_name IS NOT NULL
338 	  AND l_quota_id IS NULL )
339 	    THEN
340 	 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
341 	   THEN
342 	    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
343 	      THEN
344 	       FND_MESSAGE.SET_NAME('CN' , 'CN_PLN_NOT_EXIST');
345 	       FND_MESSAGE.SET_TOKEN('PE_NAME',p_quota_name);
346 	       FND_MSG_PUB.Add;
347 	    END IF;
348 	    x_loading_status := 'CN_PLN_NOT_EXIST' ;
349 	    RAISE FND_API.G_EXC_ERROR;
350 	 END IF;
351       END IF;
352 
353 
354       -- loop through if more than one record in the PL/SQL table
355 
356       l_tmp := p_rt_quota_asgns_rec_tbl.COUNT;
357 
358     --  FOR I IN 1..p_rt_quota_asgns_rec_tbl.COUNT
359     --	LOOP
360     FOR I IN p_rt_quota_asgns_rec_tbl.FIRST..p_rt_quota_asgns_rec_tbl.LAST LOOP
361 
362 	   -- Validate the Quota Rate Assigns
363 
364 	   Validate_rt_quota_asgns
365 	     (
366 	      x_return_status      => x_return_status,
367 	      x_msg_count          => x_msg_count,
368 	      x_msg_data           => x_msg_data,
369 	      p_rt_quota_asgns_rec => p_rt_quota_asgns_rec_tbl(i),
370 	      p_quota_name         => p_quota_name,
371 				p_org_id		         => p_org_id,
372 	      p_quota_id           => l_quota_id,
373 	      x_rate_schedule_id   => l_rate_schedule_id,
374 	      x_rt_quota_asgn_id   => l_rt_quota_asgn_id,
375               x_calc_formula_id    => l_calc_formula_id,
376 	      p_loading_status     => x_loading_status,
377 	      x_loading_status     => l_loading_status
378 	      );
379 
380 	      x_loading_status := l_loading_status;
381 	   -- Check the Return Status and Loading Status
382 
383 	   IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
384 	      RAISE FND_API.G_EXC_ERROR ;
385 	    ELSIF ( x_return_status   = FND_API.G_RET_STS_SUCCESS )
386 	      AND ( x_loading_status  <>  'RT_QUOTA_EXISTS' )
387 	      THEN
388 
389 	      -- Insert the Rt_quota assigns record.
390 
391 
392 	      CN_RT_QUOTA_ASGNS_PKG.begin_record
393 		(x_org_id		         => p_org_id,
394 		 x_Operation            => 'INSERT'
395 		 ,x_Rowid                 => G_ROWID
396 		 ,x_rt_quota_asgn_id      => l_rt_quota_asgn_id
397                  ,x_calc_formula_id       => l_calc_formula_id
398 		 ,x_quota_id              => l_quota_id
399 		 ,x_start_date            => p_rt_quota_asgns_rec_tbl(i).start_date
400 		 ,x_end_date              => p_rt_quota_asgns_rec_tbl(i).end_date
401 		 ,x_rate_schedule_id      => l_rate_schedule_id
402 		 ,x_attribute_category    => p_rt_quota_asgns_rec_tbl(i).attribute_category
403 		 ,x_attribute1            => p_rt_quota_asgns_rec_tbl(i).attribute1
404 		 ,x_attribute2            => p_rt_quota_asgns_rec_tbl(i).attribute2
405 		 ,x_attribute3            => p_rt_quota_asgns_rec_tbl(i).attribute3
406 		 ,x_attribute4            => p_rt_quota_asgns_rec_tbl(i).attribute4
407 		 ,x_attribute5            => p_rt_quota_asgns_rec_tbl(i).attribute5
408 		 ,x_attribute6            => p_rt_quota_asgns_rec_tbl(i).attribute6
409 		 ,x_attribute7            => p_rt_quota_asgns_rec_tbl(i).attribute7
410 		 ,x_attribute8            => p_rt_quota_asgns_rec_tbl(i).attribute8
411 		,x_attribute9            => p_rt_quota_asgns_rec_tbl(i).attribute9
412 		,x_attribute10           => p_rt_quota_asgns_rec_tbl(i).attribute10
413 		,x_attribute11           => p_rt_quota_asgns_rec_tbl(i).attribute11
414 		,x_attribute12           => p_rt_quota_asgns_rec_tbl(i).attribute12
415 		,x_attribute13           => p_rt_quota_asgns_rec_tbl(i).attribute13
416 		,x_attribute14           => p_rt_quota_asgns_rec_tbl(i).attribute14
417 		,x_attribute15           => p_rt_quota_asgns_rec_tbl(i).attribute15
418 		,x_last_update_date      => G_LAST_UPDATE_DATE
419 		,x_last_updated_by       => G_LAST_UPDATED_BY
420 		,x_creation_date         => G_CREATION_DATE
421 		,x_created_by            => G_CREATED_BY
422 		,x_last_update_login     => G_LAST_UPDATE_LOGIN
423 		,x_Program_type          => G_program_type,
424 		 x_object_version_number => x_object_version_number ) ;
425 
426 	      l_rate_date_seq_rec_tbl(i).start_date :=  p_rt_quota_asgns_rec_tbl(i).start_date;
427 	      l_rate_date_seq_rec_tbl(i).start_date_old :=
428 		                                    p_rt_quota_asgns_rec_tbl(i).start_date_old;
429               l_rate_date_seq_rec_tbl(i).end_date :=  p_rt_quota_asgns_rec_tbl(i).end_date ;
430               l_rate_date_seq_rec_tbl(i).end_date_old :=p_rt_quota_asgns_rec_tbl(i).end_date_old;
431 
432 	      l_rate_date_seq_rec_tbl(i).quota_id := l_quota_id;
433 
434 	      l_rate_date_seq_rec_tbl(i).rt_quota_asgn_id := l_rt_quota_asgn_id ;
435 
436 
437 
438 	    ELSIF   x_loading_status = 'RT_QUOTA_EXISTS' THEN
439 	      RAISE FND_API.G_EXC_ERROR ;
440 	   END IF ;
441 	END LOOP;
442 
443 	-- We need to check one level After than
444 
445 	-- Check the Sequence, are there any records exists before this
446 	-- record, if exists it should be
447 
448 
449 	--FOR I IN 1..l_rate_date_seq_rec_tbl.COUNT
450 	  --LOOP
451 	  FOR I IN l_rate_date_seq_rec_tbl.FIRST..l_rate_date_seq_rec_tbl.LAST LOOP
452 	     IF (( Trunc(l_rate_date_seq_rec_tbl(i).start_date_old)
453 		   <> Trunc(l_rate_date_seq_rec_tbl(i).start_date) OR
454 		   Nvl(Trunc(l_rate_date_seq_rec_tbl(i).end_date_old),fnd_api.g_miss_date) <>
455 		   Nvl(Trunc(l_rate_date_seq_rec_tbl(i).end_date),fnd_api.g_miss_date)))
456 	       THEN
457 
458 
459 		-- Check the sequence and overlap of the start date and the end date
460 
461 		cn_chk_plan_element_pkg.chk_rate_quota_iud
462 		  (
463 		   x_return_status      => x_return_status,
464 		   p_start_Date         => l_rate_date_seq_rec_tbl(i).start_date,
465 		   p_end_date           => l_rate_date_seq_rec_tbl(i).end_date,
466 		   p_iud_flag           => 'U',
467 		   p_quota_id           => l_rate_date_seq_rec_tbl(i).quota_id,
468                    p_calc_formula_id    => l_calc_formula_id,
469 		   p_rt_quota_asgn_id   => l_rate_date_seq_rec_tbl(i).rt_quota_asgn_id,
470 		   p_loading_status     => x_loading_status,
471 		   x_loading_status     => l_loading_status
472 		   );
473 
474 		x_loading_status := l_loading_status;
475 		-- Raise an error if the return status is not success
476 
477 		IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
478 		   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
479 		     THEN
480 		      FND_MESSAGE.SET_NAME ('CN' , 'CN_INVALID_DATE_SEQUENCE' );
481 		      FND_MSG_PUB.Add;
482 		   END IF;
483 		   x_loading_status := 'CN_INVALID_DATE_SEQUENCE';
484 		   RAISE FND_API.G_EXC_ERROR ;
485 		END IF;
486 	     END IF;
487 
488 	  END LOOP;
489    END IF;
490    -- End of API body.
491    -- Standard check of p_commit.
492 
493    IF FND_API.To_Boolean( p_commit ) THEN
494       COMMIT WORK;
495    END IF;
496 
497    -- Standard call to get message count and if count is 1, get message info.
498 
499    FND_MSG_PUB.Count_And_Get
500      (
501       p_count   =>  x_msg_count ,
502       p_data    =>  x_msg_data  ,
503       p_encoded => FND_API.G_FALSE
504       );
505 EXCEPTION
506    WHEN FND_API.G_EXC_ERROR THEN
507       ROLLBACK TO create_rt_quota_asgns;
508       x_return_status := FND_API.G_RET_STS_ERROR ;
509       FND_MSG_PUB.Count_And_Get
510 	(
511 	 p_count   =>  x_msg_count ,
512 	 p_data    =>  x_msg_data  ,
513 	 p_encoded => FND_API.G_FALSE
514 	 );
515    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
516       ROLLBACK TO create_rt_quota_asgns;
517       x_loading_status := 'UNEXPECTED_ERR';
518       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
519       FND_MSG_PUB.Count_And_Get
520 	(
521 	 p_count   =>  x_msg_count ,
522 	 p_data    =>  x_msg_data   ,
523 	 p_encoded => FND_API.G_FALSE
524 	 );
525    WHEN OTHERS THEN
526       ROLLBACK TO create_rt_quota_asgns;
527       x_loading_status := 'UNEXPECTED_ERR';
528       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
529       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
530 	THEN
531 	 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
532       END IF;
533       FND_MSG_PUB.Count_And_Get
534 	(
535 	 p_count   =>  x_msg_count ,
536 	 p_data    =>  x_msg_data  ,
537 	 p_encoded => FND_API.G_FALSE
538 	 );
539 
540 END Create_rt_quota_Asgns;
541 --|-------------------------------------------------------------------------+
542 --|  Procedure Name : Update rt Quota Asgns
543 --|
544 --|-------------------------------------------------------------------------+
545 PROCEDURE  Update_rt_quota_asgns
546   (
547    p_api_version	    IN   NUMBER,
548    p_init_msg_list	    IN   VARCHAR2 := FND_API.G_FALSE,
549    p_commit	    	    IN   VARCHAR2 := FND_API.G_FALSE,
550    p_validation_level	    IN   NUMBER	:=
551                                  FND_API.G_VALID_LEVEL_FULL,
552    x_return_status          OUT NOCOPY  VARCHAR2,
553    x_msg_count	            OUT NOCOPY  NUMBER,
554    x_msg_data		    OUT NOCOPY  VARCHAR2,
555    p_quota_name             IN   cn_quotas.name%TYPE,
556    p_org_id             IN NUMBER,
557    p_rt_quota_asgns_rec_tbl IN   cn_plan_element_pub.rt_quota_asgns_rec_tbl_type
558                                  := cn_plan_element_pub.g_miss_rt_quota_asgns_rec_tbl,
559    x_loading_status    	    OUT NOCOPY  VARCHAR2,
560    x_object_version_number IN OUT NOCOPY NUMBER
561    ) IS
562 
563       l_api_name		CONSTANT VARCHAR2(30)
564 	                        := 'Update_Rt_Quota_Asgns';
565       l_api_version             CONSTANT NUMBER := 1.0;
566       l_rt_quota_asgn_id        NUMBER;
567       l_quota_id                NUMBER;
568       l_rate_schedule_id        NUMBER;
569       l_calc_formula_id         NUMBER;
570       l_rate_date_seq_rec_tbl  rate_date_seq_rec_tbl_type;
571       l_loading_status   VARCHAR2(80);
572 
573 BEGIN
574 
575    -- Standard Start of API savepoint
576 
577    SAVEPOINT    Update_Plan_element ;
578 
579    -- Standard call to check for call compatibility.
580 
581    IF NOT FND_API.Compatible_API_Call ( l_api_version ,
582 					p_api_version ,
583 					l_api_name    ,
584 					G_PKG_NAME )
585      THEN
586       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
587    END IF;
588 
589 
590    -- Initialize message list if p_init_msg_list is set to TRUE.
591 
592    IF FND_API.to_Boolean( p_init_msg_list ) THEN
593       FND_MSG_PUB.initialize;
594    END IF;
595 
596 
597    --  Initialize API return status to success
598 
599    x_return_status := FND_API.G_RET_STS_SUCCESS;
600    x_loading_status := 'CN_UPDATED';
601 
602 
603    -- API body
604    -- Validate the Rate Quota assigns
605 
606    IF p_rt_quota_asgns_rec_tbl.COUNT > 0 THEN
607 
608     -- check quota name is missing or null, mandatory
609        IF ( (cn_api.chk_miss_char_para
610 	     ( p_char_para => p_quota_name,
611 	       p_para_name => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
612 	       p_loading_status => x_loading_status,
613 	       x_loading_status => l_loading_status)) = FND_API.G_TRUE) THEN
614 	  RAISE FND_API.G_EXC_ERROR ;
615 	ELSIF ( (cn_api.chk_null_char_para
616 		 (p_char_para => p_quota_name,
617 		  p_obj_name  => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
618 		  p_loading_status => x_loading_status,
619 		  x_loading_status => l_loading_status)) = FND_API.G_TRUE ) THEN
620 	  RAISE FND_API.G_EXC_ERROR ;
621        END IF;
622 
623        l_quota_id  := cn_chk_plan_element_pkg.get_quota_id(p_quota_name,p_org_id);
624 
625        -- get Quota id, if id is null and name is not null then raise an error
626 
627        IF (p_quota_name IS NOT NULL
628 	   AND l_quota_id IS NULL )
629 	     THEN
630 	  IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
631 	    THEN
632 	     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
633 	       THEN
634 		FND_MESSAGE.SET_NAME('CN' , 'CN_PLN_NOT_EXIST');
635 		FND_MESSAGE.SET_TOKEN('PE_NAME',p_quota_name);
636 		FND_MSG_PUB.Add;
637 	     END IF;
638 	     x_loading_status := 'CN_PLN_NOT_EXIST' ;
639 	     RAISE FND_API.G_EXC_ERROR ;
640 	  END IF;
641        END IF;
642 
643 
644        -- loop through if more than one record in the PL/SQL table
645 
646       FOR i IN 1..p_rt_quota_asgns_rec_tbl.COUNT LOOP
647 
648 	 -- Validate the new record and get the old id for update
649 	 Validate_rt_quota_asgns
650 	   (
651 	    x_return_status      => x_return_status,
652 	    x_msg_count          => x_msg_count,
653 	    x_msg_data           => x_msg_data,
654 	    p_rt_quota_asgns_rec => p_rt_quota_asgns_rec_tbl(i),
655 	    p_quota_name         => p_quota_name,
656 			p_org_id						 => p_org_id,
657 	    p_quota_id           => l_quota_id,
658 	    x_rate_schedule_id   => l_rate_schedule_id,
659 	    x_rt_quota_asgn_id   => l_rt_quota_asgn_id,
660             x_calc_formula_id    => l_calc_formula_id,
661 	    p_loading_status     => x_loading_status,
662 	    x_loading_status     => l_loading_status
663 	    );
664      x_loading_status := l_loading_status;
665 
666 	 -- Check the Return Status and the Loading Status
667 
668 	 IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
669 	    RAISE FND_API.G_EXC_ERROR ;
670 	  ELSIF ( x_return_status   = FND_API.G_RET_STS_SUCCESS )
671 	    AND ( x_loading_status  =  'CN_UPDATED' )
672 	    THEN
673             -- Update Rt Quota Assigns
674 	    CN_RT_QUOTA_ASGNS_PKG.begin_record
675 	      (x_org_id		         => p_org_id,
676 	       x_Operation            => 'UPDATE'
677 	       ,x_Rowid                 => G_ROWID
678 	       ,x_rt_quota_asgn_id      => l_rt_quota_asgn_id
679                ,x_calc_formula_id       => l_calc_formula_id
680 	       ,x_quota_id              => l_quota_id
681 	       ,x_start_date            => p_rt_quota_asgns_rec_tbl(i).start_date
682 	       ,x_end_date              => p_rt_quota_asgns_rec_tbl(i).end_date
683 	       ,x_rate_schedule_id      => l_rate_schedule_id
684 	       ,x_attribute_category    => p_rt_quota_asgns_rec_tbl(i).attribute_category
685 	       ,x_attribute1            => p_rt_quota_asgns_rec_tbl(i).attribute1
686 	       ,x_attribute2            => p_rt_quota_asgns_rec_tbl(i).attribute2
687 	       ,x_attribute3            => p_rt_quota_asgns_rec_tbl(i).attribute3
688 	       ,x_attribute4            => p_rt_quota_asgns_rec_tbl(i).attribute4
689 	       ,x_attribute5            => p_rt_quota_asgns_rec_tbl(i).attribute5
690 	       ,x_attribute6            => p_rt_quota_asgns_rec_tbl(i).attribute6
691 	       ,x_attribute7            => p_rt_quota_asgns_rec_tbl(i).attribute7
692 	       ,x_attribute8            => p_rt_quota_asgns_rec_tbl(i).attribute8
693 	      ,x_attribute9            => p_rt_quota_asgns_rec_tbl(i).attribute9
694 	      ,x_attribute10           => p_rt_quota_asgns_rec_tbl(i).attribute10
695 	      ,x_attribute11           => p_rt_quota_asgns_rec_tbl(i).attribute11
696 	      ,x_attribute12           => p_rt_quota_asgns_rec_tbl(i).attribute12
697 	      ,x_attribute13           => p_rt_quota_asgns_rec_tbl(i).attribute13
698 	      ,x_attribute14           => p_rt_quota_asgns_rec_tbl(i).attribute14
699 	      ,x_attribute15           => p_rt_quota_asgns_rec_tbl(i).attribute15
700 	      ,x_last_update_date      => G_LAST_UPDATE_DATE
701 	      ,x_last_updated_by       => G_LAST_UPDATED_BY
702 	      ,x_creation_date         => G_CREATION_DATE
703 	      ,x_created_by            => G_CREATED_BY
704 	      ,x_last_update_login     => G_LAST_UPDATE_LOGIN
705 	      ,x_Program_type          => G_program_type,
706 		 x_object_version_number => x_object_version_number ) ;
707 
708 	        l_rate_date_seq_rec_tbl(i).start_date :=  p_rt_quota_asgns_rec_tbl(i).start_date;
709 	      l_rate_date_seq_rec_tbl(i).start_date_old :=
710 		                                    p_rt_quota_asgns_rec_tbl(i).start_date_old;
711               l_rate_date_seq_rec_tbl(i).end_date :=  p_rt_quota_asgns_rec_tbl(i).end_date ;
712               l_rate_date_seq_rec_tbl(i).end_date_old :=p_rt_quota_asgns_rec_tbl(i).end_date_old;
713 
714 	      l_rate_date_seq_rec_tbl(i).quota_id := l_quota_id;
715 
716 	      l_rate_date_seq_rec_tbl(i).rt_quota_asgn_id := l_rt_quota_asgn_id ;
717 
718 	  ELSIF   x_loading_status = 'RT_QUOTA_EXISTS' THEN
719 	    RAISE FND_API.G_EXC_ERROR ;
720 	 END IF ;
721       END LOOP;
722 
723       	-- We need to check one level After than
724 
725 	-- Check the Sequence, are there any records exists before this
726 	-- record, if exists it should be
727 
728 
729 	FOR I IN 1..l_rate_date_seq_rec_tbl.COUNT
730 	  LOOP
731 
732 	     IF (( Trunc(l_rate_date_seq_rec_tbl(i).start_date_old)
733 		   <> Trunc(l_rate_date_seq_rec_tbl(i).start_date) OR
734 		   Nvl(Trunc(l_rate_date_seq_rec_tbl(i).end_date_old),fnd_api.g_miss_date) <>
735 		   Nvl(Trunc(l_rate_date_seq_rec_tbl(i).end_date),fnd_api.g_miss_date)))
736 	       THEN
737 
738 
739 		-- Check the sequence and overlap of the start date and the end date
740 
741 		cn_chk_plan_element_pkg.chk_rate_quota_iud
742 		  (
743 		   x_return_status      => x_return_status,
744 		   p_start_Date         => l_rate_date_seq_rec_tbl(i).start_date,
745 		   p_end_date           => l_rate_date_seq_rec_tbl(i).end_date,
746 		   p_iud_flag           => 'U',
747 		   p_quota_id           => l_rate_date_seq_rec_tbl(i).quota_id,
748                    p_calc_formula_id    => l_calc_formula_id,
749 		   p_rt_quota_asgn_id   => l_rate_date_seq_rec_tbl(i).rt_quota_asgn_id,
750 		   p_loading_status     => x_loading_status,
751 		   x_loading_status     => l_loading_status
752 		   );
753          x_loading_status := l_loading_status;
754 
755 
756 		-- Raise an error if the return status is not success
757 
758 		IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
759 		   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
760 		     THEN
761 		      FND_MESSAGE.SET_NAME ('CN' , 'CN_INVALID_DATE_SEQUENCE' );
762 		      FND_MSG_PUB.Add;
763 		   END IF;
764 		   x_loading_status := 'CN_INVALID_DATE_SEQUENCE';
765 		   RAISE FND_API.G_EXC_ERROR ;
766 		END IF;
767 	     END IF;
768 
769 	  END LOOP;
770    END IF;
771    -- End of Update API body.
772    -- Standard check of p_commit.
773 
774    IF FND_API.To_Boolean( p_commit ) THEN
775       COMMIT WORK;
776    END IF;
777 
778    -- Standard call to get message count and if count is 1, get message info.
779 
780    FND_MSG_PUB.Count_And_Get
781      (
782       p_count   =>  x_msg_count ,
783       p_data    =>  x_msg_data  ,
784       p_encoded => FND_API.G_FALSE
785       );
786 
787 EXCEPTION
788    WHEN FND_API.G_EXC_ERROR THEN
789       ROLLBACK TO update_Plan_element;
790       x_return_status := FND_API.G_RET_STS_ERROR ;
791       FND_MSG_PUB.Count_And_Get
792 	(
793 	 p_count   =>  x_msg_count ,
794 	 p_data    =>  x_msg_data  ,
795 	 p_encoded => FND_API.G_FALSE
796 	 );
797    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
798       ROLLBACK TO update_Plan_Element;
799       x_loading_status := 'UNEXPECTED_ERR';
800       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
801       FND_MSG_PUB.Count_And_Get
802 	(
803 	 p_count   =>  x_msg_count ,
804 	 p_data    =>  x_msg_data   ,
805 	 p_encoded => FND_API.G_FALSE
806 	 );
807    WHEN OTHERS THEN
808       ROLLBACK TO update_plan_element;
809       x_loading_status := 'UNEXPECTED_ERR';
810       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
811       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
812 	THEN
813 	 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
814       END IF;
815       FND_MSG_PUB.Count_And_Get
816 	(
817 	 p_count   =>  x_msg_count ,
818 	 p_data    =>  x_msg_data  ,
819 	 p_encoded => FND_API.G_FALSE
820 	 );
821 END Update_rt_quota_Asgns;
822 --|-------------------------------------------------------------------------+
823 --|  Procedure Name : Delete rt Quota Asgns
824 --|  Desc: Delete the Rate Quota assgns
825 --|-------------------------------------------------------------------------+
826 PROCEDURE  Delete_rt_quota_asgns
827   (
828    p_api_version	    IN 	NUMBER,
829    p_init_msg_list	    IN	VARCHAR2 := FND_API.G_FALSE,
830    p_commit	    	    IN  VARCHAR2 := FND_API.G_FALSE,
831    p_validation_level	    IN  NUMBER	 :=
832                             FND_API.G_VALID_LEVEL_FULL,
833    x_return_status          OUT NOCOPY VARCHAR2,
834    x_msg_count	            OUT NOCOPY NUMBER,
835    x_msg_data		    OUT NOCOPY VARCHAR2,
836    p_quota_name             IN cn_quotas.name%TYPE,
837    p_org_id				IN NUMBER,
838    p_rt_quota_asgns_rec_tbl IN cn_plan_element_pub.rt_quota_asgns_rec_tbl_type
839                             := cn_plan_element_pub.g_miss_rt_quota_asgns_rec_tbl,
840    x_loading_status    	    OUT NOCOPY 	VARCHAR2
841 
842    ) IS
843 
844       l_api_name		CONSTANT VARCHAR2(30)
845 	                        := 'Delete_Rt_Quota_Asgns';
846       l_api_version             CONSTANT NUMBER := 1.0;
847 
848       l_rt_quota_asgn_id        NUMBER;
849       l_quota_id                NUMBER;
850       l_loading_status   VARCHAR2(80);
851 			l_object_version_number  NUMBER;
852 BEGIN
853    -- Delete RT_QUOTA_ASGNS API, Currently called from Forms Only
854 
855    -- Standard Start of API savepoint
856 
857    SAVEPOINT    Delete_Rt_Quota_Asgns ;
858    --
859    -- Standard call to check for call compatibility.
860    --
861    IF NOT FND_API.Compatible_API_Call ( l_api_version ,
862 					p_api_version ,
863 					l_api_name    ,
864 					G_PKG_NAME )
865      THEN
866       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
867    END IF;
868 
869    -- Initialize message list if p_init_msg_list is set to TRUE.
870 
871    IF FND_API.to_Boolean( p_init_msg_list ) THEN
872       FND_MSG_PUB.initialize;
873    END IF;
874 
875    --  Initialize API return status to success
876 
877    x_return_status := FND_API.G_RET_STS_SUCCESS;
878    x_loading_status := 'CN_DELETED';
879 
880    -- API body
881    -- Validate the Rate Quota assigns
882 
883    --
884    -- get the Rt quota Asign ID to Delete the exact record.
885 
886    IF p_rt_quota_asgns_rec_tbl.COUNT > 0 THEN
887 
888       -- check quota name is missing or null, mandatory
889 
890       IF ( (cn_api.chk_miss_char_para
891 	    ( p_char_para => p_quota_name,
892 	      p_para_name => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
893 	      p_loading_status => x_loading_status,
894 	      x_loading_status => l_loading_status)) = FND_API.G_TRUE) THEN
895 	 RAISE FND_API.G_EXC_ERROR ;
896        ELSIF ( (cn_api.chk_null_char_para
897 		(p_char_para => p_quota_name,
898 		 p_obj_name  => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
899 		 p_loading_status => x_loading_status,
900 		 x_loading_status => l_loading_status)) = FND_API.G_TRUE ) THEN
901 	 RAISE FND_API.G_EXC_ERROR ;
902       END IF;
903 
904       l_quota_id  := cn_chk_plan_element_pkg.get_quota_id(p_quota_name,p_org_id);
905 
906       -- get Quota id, if id is null and name is not null then raise an error
907 
908       IF (p_quota_name IS NOT NULL
909 	  AND l_quota_id IS NULL )
910 	    THEN
911 	 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
912 	   THEN
913 	    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
914 	      THEN
915 	       FND_MESSAGE.SET_NAME('CN' , 'CN_PLN_NOT_EXIST');
916 	       FND_MESSAGE.SET_TOKEN('PE_NAME',p_quota_name);
917 	       FND_MSG_PUB.Add;
918 	    END IF;
919 	    x_loading_status := 'CN_PLN_NOT_EXIST' ;
920 	    RAISE FND_API.G_EXC_ERROR ;
921 	 END IF;
922       END IF;
923 
924 
925       FOR i IN 1..p_rt_quota_asgns_rec_tbl.COUNT
926 	LOOP
927 
928 	   -- get rt quota Assign ID to delete the record
929 
930 	   l_rt_quota_asgn_id := cn_chk_plan_element_pkg.get_rt_quota_asgn_id
931 	     (
932 	      p_quota_id   => l_quota_id,
933               p_rate_schedule_id =>  cn_api.get_rate_table_id(
934                                      p_rt_quota_asgns_rec_tbl(i).rate_schedule_name,p_rt_quota_asgns_rec_tbl(i).org_id),
935               p_calc_formula_id => cn_chk_plan_element_pkg.get_calc_formula_id(
936                                    p_rt_quota_asgns_rec_tbl(i).calc_formula_name,p_org_id),
937 	      p_start_date => p_rt_quota_asgns_rec_tbl(i).start_date,
938 	      p_end_date   => p_rt_quota_asgns_rec_tbl(i).end_date
939 	      );
940 
941 	   -- if rate_quota_assign_id is NULL then Unable to find the record from database
942 
943 	   IF l_rt_quota_asgn_id IS NULL THEN
944 	      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
945 		THEN
946 		 FND_MESSAGE.SET_NAME ('CN' , 'CN_RT_QUOTA_NOT_EXISTS');
947 		 FND_MESSAGE.SET_TOKEN('QUOTA_NAME',p_quota_name);
948 		 FND_MESSAGE.SET_TOKEN('RATE_SCHEDULE_NAME',p_rt_quota_asgns_rec_tbl(i).rate_schedule_name );
949 		 FND_MESSAGE.SET_TOKEN('START_DATE',p_rt_quota_asgns_rec_tbl(i).start_date );
950 		 FND_MSG_PUB.Add;
951 	      END IF;
952 	      x_loading_status := 'RT_QUOTA_NOT_EXISTS';
953 	      RAISE FND_API.G_EXC_ERROR ;
954 	   END IF;
955 
956 	   -- Check wheather delete is Allowed, this only first and last record can be deleted
957 
958 	   cn_chk_plan_element_pkg.chk_rate_quota_iud
959 	     (
960 	      x_return_status      => x_return_status,
961 	      p_start_Date         => p_rt_quota_asgns_rec_tbl(i).start_date,
962 	      p_end_date           => p_rt_quota_asgns_rec_tbl(i).end_date,
963 	      p_iud_flag           => 'D',
964 	      p_quota_id           => l_quota_id,
965               p_calc_formula_id => cn_chk_plan_element_pkg.get_calc_formula_id(
966                                    p_rt_quota_asgns_rec_tbl(i).calc_formula_name,p_org_id),
967               p_rt_quota_asgn_id   => l_rt_quota_asgn_id,
968 	      p_loading_status     => x_loading_status,
969 	      x_loading_status     => l_loading_status
970 	      );
971        x_loading_status := l_loading_status;
972 
973 	   IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
974 	      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
975 		THEN
976 		 FND_MESSAGE.SET_NAME ('CN' , 'CN_RATE_DELETE_NOT_ALLOWED' );
977 		 FND_MSG_PUB.Add;
978 	      END IF;
979 	      x_loading_status := 'CN_RATE_DELETE_NOT_ALLOWED';
980 	      RAISE FND_API.G_EXC_ERROR ;
981 	   END IF;
982 
983 	   -- If the the status is success and the lasding status is CN_DELETED then
984 	   -- delete the record.
985 	   IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
986 	      RAISE FND_API.G_EXC_ERROR ;
987 	    ELSIF ( x_return_status   = FND_API.G_RET_STS_SUCCESS )
988 	      AND ( x_loading_status  =  'CN_DELETED' )
989 	      THEN
990               -- Delete RT quota Assigns
991 	      CN_RT_QUOTA_ASGNS_PKG.begin_record
992 		(x_org_id		         => p_org_id,
993 		 x_Operation            => 'DELETE'
994 		 ,x_Rowid                 => G_ROWID
995 		 ,x_rt_quota_asgn_id      => l_rt_quota_asgn_id
996 		 ,x_calc_formula_id       => NULL
997 		 ,x_quota_id              => NULL
998 		 ,x_start_date            => NULL
999 		 ,x_end_date              => NULL
1000 		 ,x_rate_schedule_id      => NULL
1001 		 ,x_attribute_category    => NULL
1002 		 ,x_attribute1            => NULL
1003 		 ,x_attribute2            => NULL
1004 		 ,x_attribute3            => NULL
1005 		 ,x_attribute4            => NULL
1006 		 ,x_attribute5            => NULL
1007 		 ,x_attribute6            => NULL
1008 		 ,x_attribute7            => NULL
1009 		 ,x_attribute8            => NULL
1010 		 ,x_attribute9            => NULL
1011 		 ,x_attribute10           => NULL
1012 		 ,x_attribute11           => NULL
1013 		 ,x_attribute12           => NULL
1014 		 ,x_attribute13           => NULL
1015 		 ,x_attribute14           => NULL
1016 		 ,x_attribute15           => NULL
1017 		 ,x_last_update_date      => NULL
1018 		 ,x_last_updated_by       => NULL
1019 		 ,x_creation_date         => NULL
1020 		 ,x_created_by            =>  NULL
1021 		,x_last_update_login     =>  NULL
1022 		,x_Program_type          =>  NULL,
1023 		 x_object_version_number => l_object_version_number) ;
1024 	    ELSE
1025 	      RAISE FND_API.G_EXC_ERROR ;
1026 	   END IF ;
1027 	END LOOP;
1028    END IF;
1029 
1030    -- End of Delete API body.
1031    -- Standard check of p_commit.
1032 
1033    IF FND_API.To_Boolean( p_commit ) THEN
1034       COMMIT WORK;
1035    END IF;
1036 
1037 
1038    -- Standard call to get message count and if count is 1, get message info.
1039 
1040    FND_MSG_PUB.Count_And_Get
1041      (
1042       p_count   =>  x_msg_count ,
1043       p_data    =>  x_msg_data  ,
1044       p_encoded => FND_API.G_FALSE
1045       );
1046 
1047 EXCEPTION
1048    WHEN FND_API.G_EXC_ERROR THEN
1049       ROLLBACK TO delete_rt_quota_asgns;
1050       x_return_status := FND_API.G_RET_STS_ERROR ;
1051       FND_MSG_PUB.Count_And_Get
1052 	(
1053 	 p_count   =>  x_msg_count ,
1054 	 p_data    =>  x_msg_data  ,
1055 	 p_encoded => FND_API.G_FALSE
1056 	 );
1057    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1058       ROLLBACK TO delete_rt_quota_asgns;
1059       x_loading_status := 'UNEXPECTED_ERR';
1060       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1061       FND_MSG_PUB.Count_And_Get
1062 	(
1063 	 p_count   =>  x_msg_count ,
1064 	 p_data    =>  x_msg_data   ,
1065 	 p_encoded => FND_API.G_FALSE
1066 	 );
1067    WHEN OTHERS THEN
1068       ROLLBACK TO delete_rt_quota_asgns;
1069       x_loading_status := 'UNEXPECTED_ERR';
1070       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1071       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1072 	THEN
1073 	 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
1074       END IF;
1075       FND_MSG_PUB.Count_And_Get
1076 	(
1077 	 p_count   =>  x_msg_count ,
1078 	 p_data    =>  x_msg_data  ,
1079 	 p_encoded => FND_API.G_FALSE
1080 	 );
1081 END Delete_rt_quota_Asgns;
1082 
1083 END CN_RT_QUOTA_ASGNS_PVT ;