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.12020000.2 2013/01/25 09:36:49 ndamala 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              l_rate_date_seq_rec_tbl(i).calc_formula_id := l_calc_formula_id ;
436 
437 
438 
439 	    ELSIF   x_loading_status = 'RT_QUOTA_EXISTS' THEN
440 	      RAISE FND_API.G_EXC_ERROR ;
441 	   END IF ;
442 	END LOOP;
443 
444 	-- We need to check one level After than
445 
446 	-- Check the Sequence, are there any records exists before this
447 	-- record, if exists it should be
448 
449 
450 	--FOR I IN 1..l_rate_date_seq_rec_tbl.COUNT
451 	  --LOOP
452 	  FOR I IN l_rate_date_seq_rec_tbl.FIRST..l_rate_date_seq_rec_tbl.LAST LOOP
453 	     IF (( Trunc(l_rate_date_seq_rec_tbl(i).start_date_old)
454 		   <> Trunc(l_rate_date_seq_rec_tbl(i).start_date) OR
455 		   Nvl(Trunc(l_rate_date_seq_rec_tbl(i).end_date_old),fnd_api.g_miss_date) <>
456 		   Nvl(Trunc(l_rate_date_seq_rec_tbl(i).end_date),fnd_api.g_miss_date)))
457 	       THEN
458 
459 
460 		-- Check the sequence and overlap of the start date and the end date
461 
462 		cn_chk_plan_element_pkg.chk_rate_quota_iud
463 		  (
464 		   x_return_status      => x_return_status,
465 		   p_start_Date         => l_rate_date_seq_rec_tbl(i).start_date,
466 		   p_end_date           => l_rate_date_seq_rec_tbl(i).end_date,
467 		   p_iud_flag           => 'U',
468 		   p_quota_id           => l_rate_date_seq_rec_tbl(i).quota_id,
469                    p_calc_formula_id    =>l_rate_date_seq_rec_tbl(i).calc_formula_id ,
470 		   p_rt_quota_asgn_id   => l_rate_date_seq_rec_tbl(i).rt_quota_asgn_id,
471 		   p_loading_status     => x_loading_status,
472 		   x_loading_status     => l_loading_status
473 		   );
474 
475 		x_loading_status := l_loading_status;
476 		-- Raise an error if the return status is not success
477 
478 		IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
479 		   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
480 		     THEN
481 		      FND_MESSAGE.SET_NAME ('CN' , 'CN_INVALID_DATE_SEQUENCE' );
482 		      FND_MSG_PUB.Add;
483 		   END IF;
484 		   x_loading_status := 'CN_INVALID_DATE_SEQUENCE';
485 		   RAISE FND_API.G_EXC_ERROR ;
486 		END IF;
487 	     END IF;
488 
489 	  END LOOP;
490    END IF;
491    -- End of API body.
492    -- Standard check of p_commit.
493 
494    IF FND_API.To_Boolean( p_commit ) THEN
495       COMMIT WORK;
496    END IF;
497 
498    -- Standard call to get message count and if count is 1, get message info.
499 
500    FND_MSG_PUB.Count_And_Get
501      (
502       p_count   =>  x_msg_count ,
503       p_data    =>  x_msg_data  ,
504       p_encoded => FND_API.G_FALSE
505       );
506 EXCEPTION
507    WHEN FND_API.G_EXC_ERROR THEN
508       ROLLBACK TO create_rt_quota_asgns;
509       x_return_status := FND_API.G_RET_STS_ERROR ;
510       FND_MSG_PUB.Count_And_Get
511 	(
512 	 p_count   =>  x_msg_count ,
513 	 p_data    =>  x_msg_data  ,
514 	 p_encoded => FND_API.G_FALSE
515 	 );
516    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
517       ROLLBACK TO create_rt_quota_asgns;
518       x_loading_status := 'UNEXPECTED_ERR';
519       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
520       FND_MSG_PUB.Count_And_Get
521 	(
522 	 p_count   =>  x_msg_count ,
523 	 p_data    =>  x_msg_data   ,
524 	 p_encoded => FND_API.G_FALSE
525 	 );
526    WHEN OTHERS THEN
527       ROLLBACK TO create_rt_quota_asgns;
528       x_loading_status := 'UNEXPECTED_ERR';
529       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
530       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
531 	THEN
532 	 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
533       END IF;
534       FND_MSG_PUB.Count_And_Get
535 	(
536 	 p_count   =>  x_msg_count ,
537 	 p_data    =>  x_msg_data  ,
538 	 p_encoded => FND_API.G_FALSE
539 	 );
540 
541 END Create_rt_quota_Asgns;
542 --|-------------------------------------------------------------------------+
543 --|  Procedure Name : Update rt Quota Asgns
544 --|
545 --|-------------------------------------------------------------------------+
546 PROCEDURE  Update_rt_quota_asgns
547   (
548    p_api_version	    IN   NUMBER,
549    p_init_msg_list	    IN   VARCHAR2 := FND_API.G_FALSE,
550    p_commit	    	    IN   VARCHAR2 := FND_API.G_FALSE,
551    p_validation_level	    IN   NUMBER	:=
552                                  FND_API.G_VALID_LEVEL_FULL,
553    x_return_status          OUT NOCOPY  VARCHAR2,
554    x_msg_count	            OUT NOCOPY  NUMBER,
555    x_msg_data		    OUT NOCOPY  VARCHAR2,
556    p_quota_name             IN   cn_quotas.name%TYPE,
557    p_org_id             IN NUMBER,
558    p_rt_quota_asgns_rec_tbl IN   cn_plan_element_pub.rt_quota_asgns_rec_tbl_type
559                                  := cn_plan_element_pub.g_miss_rt_quota_asgns_rec_tbl,
560    x_loading_status    	    OUT NOCOPY  VARCHAR2,
561    x_object_version_number IN OUT NOCOPY NUMBER
562    ) IS
563 
564       l_api_name		CONSTANT VARCHAR2(30)
565 	                        := 'Update_Rt_Quota_Asgns';
566       l_api_version             CONSTANT NUMBER := 1.0;
567       l_rt_quota_asgn_id        NUMBER;
568       l_quota_id                NUMBER;
569       l_rate_schedule_id        NUMBER;
570       l_calc_formula_id         NUMBER;
571       l_rate_date_seq_rec_tbl  rate_date_seq_rec_tbl_type;
572       l_loading_status   VARCHAR2(80);
573 
574 BEGIN
575 
576    -- Standard Start of API savepoint
577 
578    SAVEPOINT    Update_Plan_element ;
579 
580    -- Standard call to check for call compatibility.
581 
582    IF NOT FND_API.Compatible_API_Call ( l_api_version ,
583 					p_api_version ,
584 					l_api_name    ,
585 					G_PKG_NAME )
586      THEN
587       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
588    END IF;
589 
590 
591    -- Initialize message list if p_init_msg_list is set to TRUE.
592 
593    IF FND_API.to_Boolean( p_init_msg_list ) THEN
594       FND_MSG_PUB.initialize;
595    END IF;
596 
597 
598    --  Initialize API return status to success
599 
600    x_return_status := FND_API.G_RET_STS_SUCCESS;
601    x_loading_status := 'CN_UPDATED';
602 
603 
604    -- API body
605    -- Validate the Rate Quota assigns
606 
607    IF p_rt_quota_asgns_rec_tbl.COUNT > 0 THEN
608 
609     -- check quota name is missing or null, mandatory
610        IF ( (cn_api.chk_miss_char_para
611 	     ( p_char_para => p_quota_name,
612 	       p_para_name => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
613 	       p_loading_status => x_loading_status,
614 	       x_loading_status => l_loading_status)) = FND_API.G_TRUE) THEN
615 	  RAISE FND_API.G_EXC_ERROR ;
616 	ELSIF ( (cn_api.chk_null_char_para
617 		 (p_char_para => p_quota_name,
618 		  p_obj_name  => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
619 		  p_loading_status => x_loading_status,
620 		  x_loading_status => l_loading_status)) = FND_API.G_TRUE ) THEN
621 	  RAISE FND_API.G_EXC_ERROR ;
622        END IF;
623 
624        l_quota_id  := cn_chk_plan_element_pkg.get_quota_id(p_quota_name,p_org_id);
625 
626        -- get Quota id, if id is null and name is not null then raise an error
627 
628        IF (p_quota_name IS NOT NULL
629 	   AND l_quota_id IS NULL )
630 	     THEN
631 	  IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
632 	    THEN
633 	     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
634 	       THEN
635 		FND_MESSAGE.SET_NAME('CN' , 'CN_PLN_NOT_EXIST');
636 		FND_MESSAGE.SET_TOKEN('PE_NAME',p_quota_name);
637 		FND_MSG_PUB.Add;
638 	     END IF;
639 	     x_loading_status := 'CN_PLN_NOT_EXIST' ;
640 	     RAISE FND_API.G_EXC_ERROR ;
641 	  END IF;
642        END IF;
643 
644 
645        -- loop through if more than one record in the PL/SQL table
646 
647       FOR i IN 1..p_rt_quota_asgns_rec_tbl.COUNT LOOP
648 
649 	 -- Validate the new record and get the old id for update
650 	 Validate_rt_quota_asgns
651 	   (
652 	    x_return_status      => x_return_status,
653 	    x_msg_count          => x_msg_count,
654 	    x_msg_data           => x_msg_data,
655 	    p_rt_quota_asgns_rec => p_rt_quota_asgns_rec_tbl(i),
656 	    p_quota_name         => p_quota_name,
657 			p_org_id						 => p_org_id,
658 	    p_quota_id           => l_quota_id,
659 	    x_rate_schedule_id   => l_rate_schedule_id,
660 	    x_rt_quota_asgn_id   => l_rt_quota_asgn_id,
661             x_calc_formula_id    => l_calc_formula_id,
662 	    p_loading_status     => x_loading_status,
663 	    x_loading_status     => l_loading_status
664 	    );
665      x_loading_status := l_loading_status;
666 
667 	 -- Check the Return Status and the Loading Status
668 
669 	 IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
670 	    RAISE FND_API.G_EXC_ERROR ;
671 	  ELSIF ( x_return_status   = FND_API.G_RET_STS_SUCCESS )
672 	    AND ( x_loading_status  =  'CN_UPDATED' )
673 	    THEN
674             -- Update Rt Quota Assigns
675 	    CN_RT_QUOTA_ASGNS_PKG.begin_record
676 	      (x_org_id		         => p_org_id,
677 	       x_Operation            => 'UPDATE'
678 	       ,x_Rowid                 => G_ROWID
679 	       ,x_rt_quota_asgn_id      => l_rt_quota_asgn_id
680                ,x_calc_formula_id       => l_calc_formula_id
681 	       ,x_quota_id              => l_quota_id
682 	       ,x_start_date            => p_rt_quota_asgns_rec_tbl(i).start_date
683 	       ,x_end_date              => p_rt_quota_asgns_rec_tbl(i).end_date
684 	       ,x_rate_schedule_id      => l_rate_schedule_id
685 	       ,x_attribute_category    => p_rt_quota_asgns_rec_tbl(i).attribute_category
686 	       ,x_attribute1            => p_rt_quota_asgns_rec_tbl(i).attribute1
687 	       ,x_attribute2            => p_rt_quota_asgns_rec_tbl(i).attribute2
688 	       ,x_attribute3            => p_rt_quota_asgns_rec_tbl(i).attribute3
689 	       ,x_attribute4            => p_rt_quota_asgns_rec_tbl(i).attribute4
690 	       ,x_attribute5            => p_rt_quota_asgns_rec_tbl(i).attribute5
691 	       ,x_attribute6            => p_rt_quota_asgns_rec_tbl(i).attribute6
692 	       ,x_attribute7            => p_rt_quota_asgns_rec_tbl(i).attribute7
693 	       ,x_attribute8            => p_rt_quota_asgns_rec_tbl(i).attribute8
694 	      ,x_attribute9            => p_rt_quota_asgns_rec_tbl(i).attribute9
695 	      ,x_attribute10           => p_rt_quota_asgns_rec_tbl(i).attribute10
696 	      ,x_attribute11           => p_rt_quota_asgns_rec_tbl(i).attribute11
697 	      ,x_attribute12           => p_rt_quota_asgns_rec_tbl(i).attribute12
698 	      ,x_attribute13           => p_rt_quota_asgns_rec_tbl(i).attribute13
699 	      ,x_attribute14           => p_rt_quota_asgns_rec_tbl(i).attribute14
700 	      ,x_attribute15           => p_rt_quota_asgns_rec_tbl(i).attribute15
701 	      ,x_last_update_date      => G_LAST_UPDATE_DATE
702 	      ,x_last_updated_by       => G_LAST_UPDATED_BY
703 	      ,x_creation_date         => G_CREATION_DATE
704 	      ,x_created_by            => G_CREATED_BY
705 	      ,x_last_update_login     => G_LAST_UPDATE_LOGIN
706 	      ,x_Program_type          => G_program_type,
707 		 x_object_version_number => x_object_version_number ) ;
708 
709 	        l_rate_date_seq_rec_tbl(i).start_date :=  p_rt_quota_asgns_rec_tbl(i).start_date;
710 	      l_rate_date_seq_rec_tbl(i).start_date_old :=
711 		                                    p_rt_quota_asgns_rec_tbl(i).start_date_old;
712               l_rate_date_seq_rec_tbl(i).end_date :=  p_rt_quota_asgns_rec_tbl(i).end_date ;
713               l_rate_date_seq_rec_tbl(i).end_date_old :=p_rt_quota_asgns_rec_tbl(i).end_date_old;
714 
715 	      l_rate_date_seq_rec_tbl(i).quota_id := l_quota_id;
716 
717 	      l_rate_date_seq_rec_tbl(i).rt_quota_asgn_id := l_rt_quota_asgn_id ;
718               l_rate_date_seq_rec_tbl(i).calc_formula_id := l_calc_formula_id ;
719 
720 	  ELSIF   x_loading_status = 'RT_QUOTA_EXISTS' THEN
721 	    RAISE FND_API.G_EXC_ERROR ;
722 	 END IF ;
723       END LOOP;
724 
725       	-- We need to check one level After than
726 
727 	-- Check the Sequence, are there any records exists before this
728 	-- record, if exists it should be
729 
730 
731 	FOR I IN 1..l_rate_date_seq_rec_tbl.COUNT
732 	  LOOP
733 
734 	     IF (( Trunc(l_rate_date_seq_rec_tbl(i).start_date_old)
735 		   <> Trunc(l_rate_date_seq_rec_tbl(i).start_date) OR
736 		   Nvl(Trunc(l_rate_date_seq_rec_tbl(i).end_date_old),fnd_api.g_miss_date) <>
737 		   Nvl(Trunc(l_rate_date_seq_rec_tbl(i).end_date),fnd_api.g_miss_date)))
738 	       THEN
739 
740 
741 		-- Check the sequence and overlap of the start date and the end date
742 
743 		cn_chk_plan_element_pkg.chk_rate_quota_iud
744 		  (
745 		   x_return_status      => x_return_status,
746 		   p_start_Date         => l_rate_date_seq_rec_tbl(i).start_date,
747 		   p_end_date           => l_rate_date_seq_rec_tbl(i).end_date,
748 		   p_iud_flag           => 'U',
749 		   p_quota_id           => l_rate_date_seq_rec_tbl(i).quota_id,
750                    p_calc_formula_id    => l_rate_date_seq_rec_tbl(i).calc_formula_id,
751 		   p_rt_quota_asgn_id   => l_rate_date_seq_rec_tbl(i).rt_quota_asgn_id,
752 		   p_loading_status     => x_loading_status,
753 		   x_loading_status     => l_loading_status
754 		   );
755          x_loading_status := l_loading_status;
756 
757 
758 		-- Raise an error if the return status is not success
759 
760 		IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
761 		   IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
762 		     THEN
763 		      FND_MESSAGE.SET_NAME ('CN' , 'CN_INVALID_DATE_SEQUENCE' );
764 		      FND_MSG_PUB.Add;
765 		   END IF;
766 		   x_loading_status := 'CN_INVALID_DATE_SEQUENCE';
767 		   RAISE FND_API.G_EXC_ERROR ;
768 		END IF;
769 	     END IF;
770 
771 	  END LOOP;
772    END IF;
773    -- End of Update API body.
774    -- Standard check of p_commit.
775 
776    IF FND_API.To_Boolean( p_commit ) THEN
777       COMMIT WORK;
778    END IF;
779 
780    -- Standard call to get message count and if count is 1, get message info.
781 
782    FND_MSG_PUB.Count_And_Get
783      (
784       p_count   =>  x_msg_count ,
785       p_data    =>  x_msg_data  ,
786       p_encoded => FND_API.G_FALSE
787       );
788 
789 EXCEPTION
790    WHEN FND_API.G_EXC_ERROR THEN
791       ROLLBACK TO update_Plan_element;
792       x_return_status := FND_API.G_RET_STS_ERROR ;
793       FND_MSG_PUB.Count_And_Get
794 	(
795 	 p_count   =>  x_msg_count ,
796 	 p_data    =>  x_msg_data  ,
797 	 p_encoded => FND_API.G_FALSE
798 	 );
799    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
800       ROLLBACK TO update_Plan_Element;
801       x_loading_status := 'UNEXPECTED_ERR';
802       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
803       FND_MSG_PUB.Count_And_Get
804 	(
805 	 p_count   =>  x_msg_count ,
806 	 p_data    =>  x_msg_data   ,
807 	 p_encoded => FND_API.G_FALSE
808 	 );
809    WHEN OTHERS THEN
810       ROLLBACK TO update_plan_element;
811       x_loading_status := 'UNEXPECTED_ERR';
812       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
813       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
814 	THEN
815 	 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
816       END IF;
817       FND_MSG_PUB.Count_And_Get
818 	(
819 	 p_count   =>  x_msg_count ,
820 	 p_data    =>  x_msg_data  ,
821 	 p_encoded => FND_API.G_FALSE
822 	 );
823 END Update_rt_quota_Asgns;
824 --|-------------------------------------------------------------------------+
825 --|  Procedure Name : Delete rt Quota Asgns
826 --|  Desc: Delete the Rate Quota assgns
827 --|-------------------------------------------------------------------------+
828 PROCEDURE  Delete_rt_quota_asgns
829   (
830    p_api_version	    IN 	NUMBER,
831    p_init_msg_list	    IN	VARCHAR2 := FND_API.G_FALSE,
832    p_commit	    	    IN  VARCHAR2 := FND_API.G_FALSE,
833    p_validation_level	    IN  NUMBER	 :=
834                             FND_API.G_VALID_LEVEL_FULL,
835    x_return_status          OUT NOCOPY VARCHAR2,
836    x_msg_count	            OUT NOCOPY NUMBER,
837    x_msg_data		    OUT NOCOPY VARCHAR2,
838    p_quota_name             IN cn_quotas.name%TYPE,
839    p_org_id				IN NUMBER,
840    p_rt_quota_asgns_rec_tbl IN cn_plan_element_pub.rt_quota_asgns_rec_tbl_type
841                             := cn_plan_element_pub.g_miss_rt_quota_asgns_rec_tbl,
842    x_loading_status    	    OUT NOCOPY 	VARCHAR2
843 
844    ) IS
845 
846       l_api_name		CONSTANT VARCHAR2(30)
847 	                        := 'Delete_Rt_Quota_Asgns';
848       l_api_version             CONSTANT NUMBER := 1.0;
849 
850       l_rt_quota_asgn_id        NUMBER;
851       l_quota_id                NUMBER;
852       l_loading_status   VARCHAR2(80);
853 			l_object_version_number  NUMBER;
854 BEGIN
855    -- Delete RT_QUOTA_ASGNS API, Currently called from Forms Only
856 
857    -- Standard Start of API savepoint
858 
859    SAVEPOINT    Delete_Rt_Quota_Asgns ;
860    --
861    -- Standard call to check for call compatibility.
862    --
863    IF NOT FND_API.Compatible_API_Call ( l_api_version ,
864 					p_api_version ,
865 					l_api_name    ,
866 					G_PKG_NAME )
867      THEN
868       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
869    END IF;
870 
871    -- Initialize message list if p_init_msg_list is set to TRUE.
872 
873    IF FND_API.to_Boolean( p_init_msg_list ) THEN
874       FND_MSG_PUB.initialize;
875    END IF;
876 
877    --  Initialize API return status to success
878 
879    x_return_status := FND_API.G_RET_STS_SUCCESS;
880    x_loading_status := 'CN_DELETED';
881 
882    -- API body
883    -- Validate the Rate Quota assigns
884 
885    --
886    -- get the Rt quota Asign ID to Delete the exact record.
887 
888    IF p_rt_quota_asgns_rec_tbl.COUNT > 0 THEN
889 
890       -- check quota name is missing or null, mandatory
891 
892       IF ( (cn_api.chk_miss_char_para
893 	    ( p_char_para => p_quota_name,
894 	      p_para_name => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
895 	      p_loading_status => x_loading_status,
896 	      x_loading_status => l_loading_status)) = FND_API.G_TRUE) THEN
897 	 RAISE FND_API.G_EXC_ERROR ;
898        ELSIF ( (cn_api.chk_null_char_para
899 		(p_char_para => p_quota_name,
900 		 p_obj_name  => CN_CHK_PLAN_ELEMENT_PKG.G_PE_NAME,
901 		 p_loading_status => x_loading_status,
902 		 x_loading_status => l_loading_status)) = FND_API.G_TRUE ) THEN
903 	 RAISE FND_API.G_EXC_ERROR ;
904       END IF;
905 
906       l_quota_id  := cn_chk_plan_element_pkg.get_quota_id(p_quota_name,p_org_id);
907 
908       -- get Quota id, if id is null and name is not null then raise an error
909 
910       IF (p_quota_name IS NOT NULL
911 	  AND l_quota_id IS NULL )
912 	    THEN
913 	 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
914 	   THEN
915 	    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
916 	      THEN
917 	       FND_MESSAGE.SET_NAME('CN' , 'CN_PLN_NOT_EXIST');
918 	       FND_MESSAGE.SET_TOKEN('PE_NAME',p_quota_name);
919 	       FND_MSG_PUB.Add;
920 	    END IF;
921 	    x_loading_status := 'CN_PLN_NOT_EXIST' ;
922 	    RAISE FND_API.G_EXC_ERROR ;
923 	 END IF;
924       END IF;
925 
926 
927       FOR i IN 1..p_rt_quota_asgns_rec_tbl.COUNT
928 	LOOP
929 
930 	   -- get rt quota Assign ID to delete the record
931 
932 	   l_rt_quota_asgn_id := cn_chk_plan_element_pkg.get_rt_quota_asgn_id
933 	     (
934 	      p_quota_id   => l_quota_id,
935               p_rate_schedule_id =>  cn_api.get_rate_table_id(
936                                      p_rt_quota_asgns_rec_tbl(i).rate_schedule_name,p_rt_quota_asgns_rec_tbl(i).org_id),
937               p_calc_formula_id => cn_chk_plan_element_pkg.get_calc_formula_id(
938                                    p_rt_quota_asgns_rec_tbl(i).calc_formula_name,p_org_id),
939 	      p_start_date => p_rt_quota_asgns_rec_tbl(i).start_date,
940 	      p_end_date   => p_rt_quota_asgns_rec_tbl(i).end_date
941 	      );
942 
943 	   -- if rate_quota_assign_id is NULL then Unable to find the record from database
944 
945 	   IF l_rt_quota_asgn_id IS NULL THEN
946 	      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
947 		THEN
948 		 FND_MESSAGE.SET_NAME ('CN' , 'CN_RT_QUOTA_NOT_EXISTS');
949 		 FND_MESSAGE.SET_TOKEN('QUOTA_NAME',p_quota_name);
950 		 FND_MESSAGE.SET_TOKEN('RATE_SCHEDULE_NAME',p_rt_quota_asgns_rec_tbl(i).rate_schedule_name );
951 		 FND_MESSAGE.SET_TOKEN('START_DATE',p_rt_quota_asgns_rec_tbl(i).start_date );
952 		 FND_MSG_PUB.Add;
953 	      END IF;
954 	      x_loading_status := 'RT_QUOTA_NOT_EXISTS';
955 	      RAISE FND_API.G_EXC_ERROR ;
956 	   END IF;
957 
958 	   -- Check wheather delete is Allowed, this only first and last record can be deleted
959 
960 	   cn_chk_plan_element_pkg.chk_rate_quota_iud
961 	     (
962 	      x_return_status      => x_return_status,
963 	      p_start_Date         => p_rt_quota_asgns_rec_tbl(i).start_date,
964 	      p_end_date           => p_rt_quota_asgns_rec_tbl(i).end_date,
965 	      p_iud_flag           => 'D',
966 	      p_quota_id           => l_quota_id,
967               p_calc_formula_id => cn_chk_plan_element_pkg.get_calc_formula_id(
968                                    p_rt_quota_asgns_rec_tbl(i).calc_formula_name,p_org_id),
969               p_rt_quota_asgn_id   => l_rt_quota_asgn_id,
970 	      p_loading_status     => x_loading_status,
971 	      x_loading_status     => l_loading_status
972 	      );
973        x_loading_status := l_loading_status;
974 
975 	   IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
976 	      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
977 		THEN
978 		 FND_MESSAGE.SET_NAME ('CN' , 'CN_RATE_DELETE_NOT_ALLOWED' );
979 		 FND_MSG_PUB.Add;
980 	      END IF;
981 	      x_loading_status := 'CN_RATE_DELETE_NOT_ALLOWED';
982 	      RAISE FND_API.G_EXC_ERROR ;
983 	   END IF;
984 
985 	   -- If the the status is success and the lasding status is CN_DELETED then
986 	   -- delete the record.
987 	   IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
988 	      RAISE FND_API.G_EXC_ERROR ;
989 	    ELSIF ( x_return_status   = FND_API.G_RET_STS_SUCCESS )
990 	      AND ( x_loading_status  =  'CN_DELETED' )
991 	      THEN
992               -- Delete RT quota Assigns
993 	      CN_RT_QUOTA_ASGNS_PKG.begin_record
994 		(x_org_id		         => p_org_id,
995 		 x_Operation            => 'DELETE'
996 		 ,x_Rowid                 => G_ROWID
997 		 ,x_rt_quota_asgn_id      => l_rt_quota_asgn_id
998 		 ,x_calc_formula_id       => NULL
999 		 ,x_quota_id              => NULL
1000 		 ,x_start_date            => NULL
1001 		 ,x_end_date              => NULL
1002 		 ,x_rate_schedule_id      => NULL
1003 		 ,x_attribute_category    => NULL
1004 		 ,x_attribute1            => NULL
1005 		 ,x_attribute2            => NULL
1006 		 ,x_attribute3            => NULL
1007 		 ,x_attribute4            => NULL
1008 		 ,x_attribute5            => NULL
1009 		 ,x_attribute6            => NULL
1010 		 ,x_attribute7            => NULL
1011 		 ,x_attribute8            => NULL
1012 		 ,x_attribute9            => NULL
1013 		 ,x_attribute10           => NULL
1014 		 ,x_attribute11           => NULL
1015 		 ,x_attribute12           => NULL
1016 		 ,x_attribute13           => NULL
1017 		 ,x_attribute14           => NULL
1018 		 ,x_attribute15           => NULL
1019 		 ,x_last_update_date      => NULL
1020 		 ,x_last_updated_by       => NULL
1021 		 ,x_creation_date         => NULL
1022 		 ,x_created_by            =>  NULL
1023 		,x_last_update_login     =>  NULL
1024 		,x_Program_type          =>  NULL,
1025 		 x_object_version_number => l_object_version_number) ;
1026 	    ELSE
1027 	      RAISE FND_API.G_EXC_ERROR ;
1028 	   END IF ;
1029 	END LOOP;
1030    END IF;
1031 
1032    -- End of Delete API body.
1033    -- Standard check of p_commit.
1034 
1035    IF FND_API.To_Boolean( p_commit ) THEN
1036       COMMIT WORK;
1037    END IF;
1038 
1039 
1040    -- Standard call to get message count and if count is 1, get message info.
1041 
1042    FND_MSG_PUB.Count_And_Get
1043      (
1044       p_count   =>  x_msg_count ,
1045       p_data    =>  x_msg_data  ,
1046       p_encoded => FND_API.G_FALSE
1047       );
1048 
1049 EXCEPTION
1050    WHEN FND_API.G_EXC_ERROR THEN
1051       ROLLBACK TO delete_rt_quota_asgns;
1052       x_return_status := FND_API.G_RET_STS_ERROR ;
1053       FND_MSG_PUB.Count_And_Get
1054 	(
1055 	 p_count   =>  x_msg_count ,
1056 	 p_data    =>  x_msg_data  ,
1057 	 p_encoded => FND_API.G_FALSE
1058 	 );
1059    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1060       ROLLBACK TO delete_rt_quota_asgns;
1061       x_loading_status := 'UNEXPECTED_ERR';
1062       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1063       FND_MSG_PUB.Count_And_Get
1064 	(
1065 	 p_count   =>  x_msg_count ,
1066 	 p_data    =>  x_msg_data   ,
1067 	 p_encoded => FND_API.G_FALSE
1068 	 );
1069    WHEN OTHERS THEN
1070       ROLLBACK TO delete_rt_quota_asgns;
1071       x_loading_status := 'UNEXPECTED_ERR';
1072       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1073       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1074 	THEN
1075 	 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME ,l_api_name );
1076       END IF;
1077       FND_MSG_PUB.Count_And_Get
1078 	(
1079 	 p_count   =>  x_msg_count ,
1080 	 p_data    =>  x_msg_data  ,
1081 	 p_encoded => FND_API.G_FALSE
1082 	 );
1083 END Delete_rt_quota_Asgns;
1084 
1085 END CN_RT_QUOTA_ASGNS_PVT ;