DBA Data[Home] [Help]

PACKAGE BODY: APPS.PSB_ALLOCRULE_PERCENTS_PVT

Source


1 PACKAGE BODY PSB_ALLOCRULE_PERCENTS_PVT AS
2 /* $Header: PSBVARPB.pls 120.2 2005/07/13 11:23:16 shtripat ship $ */
3 
4   G_PKG_NAME CONSTANT VARCHAR2(30):= 'PSB_ALLOCRULE_PERCENTS_PVT';
5   G_DBUG              VARCHAR2(2000);
6 
7 /* ----------------------------------------------------------------------- */
8 
9 PROCEDURE Insert_Row
10 ( p_api_version         IN      NUMBER,
11   p_init_msg_list       IN      VARCHAR2 := FND_API.G_FALSE,
12   p_commit              IN      VARCHAR2 := FND_API.G_FALSE,
13   p_validation_level    IN      NUMBER  :=  FND_API.G_VALID_LEVEL_FULL,
14   p_return_status       OUT  NOCOPY     VARCHAR2,
15   p_msg_count           OUT  NOCOPY     NUMBER,
16   p_msg_data            OUT  NOCOPY     VARCHAR2,
17   P_ALLOCATION_RULE_PERCENT_ID  IN OUT  NOCOPY NUMBER,
18   P_ALLOCATION_RULE_ID   IN     NUMBER,
19   P_PERIOD_NUM           IN     NUMBER,
20   P_MONTHLY              IN     NUMBER,
21   P_QUARTERLY            IN     NUMBER,
22   P_SEMI_ANNUAL          IN     NUMBER,
23   P_ATTRIBUTE1           IN     VARCHAR2,
24   P_ATTRIBUTE2           IN     VARCHAR2,
25   P_ATTRIBUTE3           IN     VARCHAR2,
26   P_ATTRIBUTE4           IN     VARCHAR2,
27   P_ATTRIBUTE5           IN     VARCHAR2,
28   P_CONTEXT              IN     VARCHAR2,
29   P_LAST_UPDATE_DATE     IN     DATE,
30   P_LAST_UPDATED_BY      IN     NUMBER,
31   P_LAST_UPDATE_LOGIN    IN     NUMBER,
32   P_CREATED_BY           IN     NUMBER,
33   P_CREATION_DATE        IN     DATE
34 )   IS
35 
36   l_api_name            CONSTANT VARCHAR2(30)   := 'Insert_Row';
37   l_api_version         CONSTANT NUMBER         := 1.0;
38   l_allocation_rule_percent_id   NUMBER         ;
39 
40 
41  CURSOR C IS
42  select PSB_Allocrule_percents_S.NEXTVAL from DUAL ;
43 BEGIN
44 
45   -- Standard Start of API savepoint
46 
47      SAVEPOINT Insert_Row_Pvt;
48 
49   -- Standard call to check for call compatibility.
50 
51   if not FND_API.Compatible_API_Call (l_api_version,
52 				      p_api_version,
53 				      l_api_name,
54 				      G_PKG_NAME)
55   then
56     raise FND_API.G_EXC_UNEXPECTED_ERROR;
57   end if;
58 
59   -- Initialize message list if p_init_msg_list is set to TRUE.
60 
61   if FND_API.to_Boolean (p_init_msg_list) then
62     FND_MSG_PUB.initialize;
63   end if;
64 
65   -- Initialize API return status to success
66 
67   p_return_status := FND_API.G_RET_STS_SUCCESS;
68 
69   -- API body
70   OPEN C;
71 
72   FETCH C into l_allocation_rule_percent_id;
73   P_allocation_rule_percent_id := l_allocation_rule_percent_id;
74   CLOSE C;
75 
76   INSERT INTO PSB_ALLOCRULE_PERCENTS (
77 	      allocation_rule_percent_id,
78 	      allocation_rule_id,
79 	      number_of_periods,
80 	      period_num,
81 	      percent,
82 	      last_update_date,
83 	      last_updated_by,
84 	      last_update_login,
85 	      created_by,
86 	      creation_date,
87 	      attribute1,
88 	      attribute2,
89 	      attribute3,
90 	      attribute4,
91 	      attribute5,
92 	      context)
93      VALUES  (
94 	      P_ALLOCATION_RULE_PERCENT_ID,
95 	      P_ALLOCATION_RULE_ID,
96 	      12,
97 	      P_PERIOD_NUM,
98 	      P_MONTHLY,
99 	      P_LAST_UPDATE_DATE,
100 	      P_LAST_UPDATED_BY,
101 	      P_LAST_UPDATE_LOGIN,
102 	      P_CREATED_BY,
103 	      P_CREATION_DATE,
104 	      P_ATTRIBUTE1,
105 	      P_ATTRIBUTE2,
106 	      P_ATTRIBUTE3,
107 	      P_ATTRIBUTE4,
108 	      P_ATTRIBUTE5,
109 	      P_CONTEXT);
110 
111   OPEN C;
112 
113   FETCH C into l_allocation_rule_percent_id;
114   P_allocation_rule_percent_id := l_allocation_rule_percent_id;
115   CLOSE C;
116 
117   INSERT INTO PSB_ALLOCRULE_PERCENTS (
118 	      allocation_rule_percent_id,
119 	      allocation_rule_id,
120 	      number_of_periods,
121 	      period_num,
122 	      percent,
123 	      last_update_date,
124 	      last_updated_by,
125 	      last_update_login,
126 	      created_by,
127 	      creation_date,
128 	      attribute1,
129 	      attribute2,
130 	      attribute3,
131 	      attribute4,
132 	      attribute5,
133 	      context)
134      VALUES  (
135 	      P_ALLOCATION_RULE_PERCENT_ID,
136 	      P_ALLOCATION_RULE_ID,
137 	      4,
138 	      P_PERIOD_NUM,
139 	      P_QUARTERLY,
140 	      P_LAST_UPDATE_DATE,
141 	      P_LAST_UPDATED_BY,
142 	      P_LAST_UPDATE_LOGIN,
143 	      P_CREATED_BY,
144 	      P_CREATION_DATE,
145 	      P_ATTRIBUTE1,
146 	      P_ATTRIBUTE2,
147 	      P_ATTRIBUTE3,
148 	      P_ATTRIBUTE4,
149 	      P_ATTRIBUTE5,
150 	      P_CONTEXT);
151 
152   OPEN C;
153 
154   FETCH C into l_allocation_rule_percent_id;
155   P_allocation_rule_percent_id := l_allocation_rule_percent_id;
156   CLOSE C;
157 
158   INSERT INTO PSB_ALLOCRULE_PERCENTS (
159 	      allocation_rule_percent_id,
160 	      allocation_rule_id,
161 	      number_of_periods,
162 	      period_num,
163 	      percent,
164 	      last_update_date,
165 	      last_updated_by,
166 	      last_update_login,
167 	      created_by,
168 	      creation_date,
169 	      attribute1,
170 	      attribute2,
171 	      attribute3,
172 	      attribute4,
173 	      attribute5,
174 	      context)
175      VALUES  (
176 	      P_ALLOCATION_RULE_PERCENT_ID,
177 	      P_ALLOCATION_RULE_ID,
178 	      2,
179 	      P_PERIOD_NUM,
180 	      P_SEMI_ANNUAL,
181 	      P_LAST_UPDATE_DATE,
182 	      P_LAST_UPDATED_BY,
183 	      P_LAST_UPDATE_LOGIN,
184 	      P_CREATED_BY,
185 	      P_CREATION_DATE,
186 	      P_ATTRIBUTE1,
187 	      P_ATTRIBUTE2,
188 	      P_ATTRIBUTE3,
189 	      P_ATTRIBUTE4,
190 	      P_ATTRIBUTE5,
191 	      P_CONTEXT);
192 
193 
194   -- End of API body.
195 
196   -- Standard check of p_commit.
197 
198   if FND_API.to_Boolean (p_commit) then
199     commit work;
200   end if;
201 
202   -- Standard call to get message count and if count is 1, get message info.
203 
204   FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
205 			     p_data  => p_msg_data);
206 
207 EXCEPTION
208 
209    when FND_API.G_EXC_ERROR then
210 
211      rollback to Insert_Row_Pvt;
212 
213      p_return_status := FND_API.G_RET_STS_ERROR;
214 
215      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
216 				p_data  => p_msg_data);
217 
218 
219    when FND_API.G_EXC_UNEXPECTED_ERROR then
220 
221      rollback to Insert_Row_Pvt;
222 
223      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
224 
225      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
226 				p_data  => p_msg_data);
227 
228 
229    when OTHERS then
230 
231      rollback to Insert_Row_Pvt;
232 
233      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
234 
235      if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
236 
237        FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME,
238 				l_api_name);
239      end if;
240 
241      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
242 				p_data  => p_msg_data);
243 
244 END Insert_Row;
245 
246 PROCEDURE Update_Row
247 ( p_api_version         IN      NUMBER,
248   p_init_msg_list       IN      VARCHAR2 := FND_API.G_FALSE,
249   p_commit              IN      VARCHAR2 := FND_API.G_FALSE,
250   p_validation_level    IN      NUMBER  :=  FND_API.G_VALID_LEVEL_FULL,
251   p_return_status       OUT  NOCOPY     VARCHAR2,
252   p_msg_count           OUT  NOCOPY     NUMBER,
253   p_msg_data            OUT  NOCOPY     VARCHAR2,
254   P_ALLOCATION_RULE_ID   IN     NUMBER,
255   P_PERIOD_NUM           IN     NUMBER,
256   P_MONTHLY              IN     NUMBER,
257   P_QUARTERLY            IN     NUMBER,
258   P_SEMI_ANNUAL          IN     NUMBER,
259   P_ATTRIBUTE1           IN     VARCHAR2,
260   P_ATTRIBUTE2           IN     VARCHAR2,
261   P_ATTRIBUTE3           IN     VARCHAR2,
262   P_ATTRIBUTE4           IN     VARCHAR2,
263   P_ATTRIBUTE5           IN     VARCHAR2,
264   P_CONTEXT              IN     VARCHAR2,
265   P_LAST_UPDATE_DATE     IN     DATE,
266   P_LAST_UPDATED_BY      IN     NUMBER,
267   P_LAST_UPDATE_LOGIN    IN     NUMBER
268 )   IS
269 
270   l_api_name            CONSTANT VARCHAR2(30)   := 'Update_Row';
271   l_api_version         CONSTANT NUMBER         := 1.0;
272 
273 BEGIN
274 
275   -- Standard Start of API savepoint
276 
277      SAVEPOINT Update_Row_Pvt;
278 
279   -- Standard call to check for call compatibility.
280 
281   if not FND_API.Compatible_API_Call (l_api_version,
282 				      p_api_version,
283 				      l_api_name,
284 				      G_PKG_NAME)
285   then
286     raise FND_API.G_EXC_UNEXPECTED_ERROR;
287   end if;
288 
289   -- Initialize message list if p_init_msg_list is set to TRUE.
290 
291   if FND_API.to_Boolean (p_init_msg_list) then
292     FND_MSG_PUB.initialize;
293   end if;
294 
295   -- Initialize API return status to success
296 
297   p_return_status := FND_API.G_RET_STS_SUCCESS;
298 
299   -- API body
300 
301   UPDATE PSB_ALLOCRULE_PERCENTS
302   SET
303 	      percent            = P_MONTHLY,
304 	      last_update_date   = P_LAST_UPDATE_DATE,
305 	      last_updated_by    = P_LAST_UPDATED_BY,
306 	      last_update_login  = P_LAST_UPDATE_LOGIN,
307 	      attribute1         = P_ATTRIBUTE1,
308 	      attribute2         = P_ATTRIBUTE2,
309 	      attribute3         = P_ATTRIBUTE3,
310 	      attribute4         = P_ATTRIBUTE4,
311 	      attribute5         = P_ATTRIBUTE5,
312 	      context            = P_CONTEXT
313   WHERE       allocation_rule_id = P_ALLOCATION_RULE_ID
314     AND       number_of_periods  = 12
315     AND       period_num         = P_PERIOD_NUM;
316 
317   IF (SQL%NOTFOUND) THEN
318      RAISE NO_DATA_FOUND;
319   END IF;
320 
321 
322   UPDATE PSB_ALLOCRULE_PERCENTS
323   SET
324 	      percent            = P_QUARTERLY,
325 	      last_update_date   = P_LAST_UPDATE_DATE,
326 	      last_updated_by    = P_LAST_UPDATED_BY,
327 	      last_update_login  = P_LAST_UPDATE_LOGIN,
328 	      attribute1         = P_ATTRIBUTE1,
329 	      attribute2         = P_ATTRIBUTE2,
330 	      attribute3         = P_ATTRIBUTE3,
331 	      attribute4         = P_ATTRIBUTE4,
332 	      attribute5         = P_ATTRIBUTE5,
333 	      context            = P_CONTEXT
334   WHERE       allocation_rule_id = P_ALLOCATION_RULE_ID
335     AND       number_of_periods  = 4
336     AND       period_num         = P_PERIOD_NUM;
337 
338   IF (SQL%NOTFOUND) THEN
339      RAISE NO_DATA_FOUND;
340   END IF;
341 
342   UPDATE PSB_ALLOCRULE_PERCENTS
343   SET
344 	      percent            = P_SEMI_ANNUAL,
345 	      last_update_date   = P_LAST_UPDATE_DATE,
346 	      last_updated_by    = P_LAST_UPDATED_BY,
347 	      last_update_login  = P_LAST_UPDATE_LOGIN,
348 	      attribute1         = P_ATTRIBUTE1,
349 	      attribute2         = P_ATTRIBUTE2,
350 	      attribute3         = P_ATTRIBUTE3,
351 	      attribute4         = P_ATTRIBUTE4,
352 	      attribute5         = P_ATTRIBUTE5,
353 	      context            = P_CONTEXT
354   WHERE       allocation_rule_id = P_ALLOCATION_RULE_ID
355     AND       number_of_periods  = 2
356     AND       period_num         = P_PERIOD_NUM;
357 
358   IF (SQL%NOTFOUND) THEN
359      RAISE NO_DATA_FOUND;
360   END IF;
361 
362   -- Standard check of p_commit.
363 
364   if FND_API.to_Boolean (p_commit) then
365     commit work;
366   end if;
367 
368   -- Standard call to get message count and if count is 1, get message info.
369 
370   FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
371 			     p_data  => p_msg_data);
372 
373 EXCEPTION
374 
375    when FND_API.G_EXC_ERROR then
376 
377      rollback to Update_Row_Pvt;
378 
379      p_return_status := FND_API.G_RET_STS_ERROR;
380 
381      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
382 				p_data  => p_msg_data);
383 
384 
385    when FND_API.G_EXC_UNEXPECTED_ERROR then
386 
387      rollback to Update_Row_Pvt;
388 
389      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
390 
391      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
392 				p_data  => p_msg_data);
393 
394 
395    when OTHERS then
396 
397      rollback to Update_Row_Pvt;
398 
399      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
400 
401      if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
402 
403        FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME,
404 				l_api_name);
405      end if;
406 
407      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
408 				p_data  => p_msg_data);
409 
410 END Update_Row;
411 
412 PROCEDURE Delete_Row
413 ( p_api_version         IN      NUMBER,
414   p_init_msg_list       IN      VARCHAR2 := FND_API.G_FALSE,
415   p_commit              IN      VARCHAR2 := FND_API.G_FALSE,
416   p_validation_level    IN      NUMBER  :=  FND_API.G_VALID_LEVEL_FULL,
417   p_return_status       OUT  NOCOPY     VARCHAR2,
418   p_msg_count           OUT  NOCOPY     NUMBER,
419   p_msg_data            OUT  NOCOPY     VARCHAR2,
420   P_ALLOCATION_RULE_ID   IN     NUMBER,
421   P_PERIOD_NUM           IN     NUMBER
422 )   IS
423 
424   l_api_name            CONSTANT VARCHAR2(30)   := 'Delete_Row';
425   l_api_version         CONSTANT NUMBER         := 1.0;
426 
427  CURSOR C IS
428  select PSB_Allocrule_percents_S.NEXTVAL from DUAL ;
429 BEGIN
430 
431   -- Standard Start of API savepoint
432 
433      SAVEPOINT Delete_Row_Pvt;
434 
435   -- Standard call to check for call compatibility.
436 
437   if not FND_API.Compatible_API_Call (l_api_version,
438 				      p_api_version,
439 				      l_api_name,
440 				      G_PKG_NAME)
441   then
442     raise FND_API.G_EXC_UNEXPECTED_ERROR;
443   end if;
444 
445   -- Initialize message list if p_init_msg_list is set to TRUE.
446 
447   if FND_API.to_Boolean (p_init_msg_list) then
448     FND_MSG_PUB.initialize;
449   end if;
450 
451   -- Initialize API return status to success
452 
453   p_return_status := FND_API.G_RET_STS_SUCCESS;
454 
455   -- API body
456 
457   DELETE FROM PSB_ALLOCRULE_PERCENTS
458   WHERE  ALLOCATION_RULE_ID = P_ALLOCATION_RULE_ID
459     AND  PERIOD_NUM         = P_PERIOD_NUM;
460 
461   IF (SQL%NOTFOUND) THEN
462      RAISE NO_DATA_FOUND;
463   END IF;
464 
465   -- End of API body.
466 
467   -- Standard check of p_commit.
468 
469   if FND_API.to_Boolean (p_commit) then
470     commit work;
471   end if;
472 
473   -- Standard call to get message count and if count is 1, get message info.
474 
475   FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
476 			     p_data  => p_msg_data);
477 
478 EXCEPTION
479 
480    when FND_API.G_EXC_ERROR then
481 
482      rollback to Delete_Row_Pvt;
483 
484      p_return_status := FND_API.G_RET_STS_ERROR;
485 
489 
486      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
487 				p_data  => p_msg_data);
488 
490    when FND_API.G_EXC_UNEXPECTED_ERROR then
491 
492      rollback to Delete_Row_Pvt;
493 
494      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
495 
496      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
497 				p_data  => p_msg_data);
498 
499 
500    when OTHERS then
501 
502      rollback to Delete_Row_Pvt;
503 
504      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
505 
506      if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
507 
508        FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME,
509 				l_api_name);
510      end if;
511 
512      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
513 				p_data  => p_msg_data);
514 
515 END Delete_Row;
516 
517 PROCEDURE Lock_Row
518 ( p_api_version         IN      NUMBER,
519   p_init_msg_list       IN      VARCHAR2 := FND_API.G_FALSE,
520   p_commit              IN      VARCHAR2 := FND_API.G_FALSE,
521   p_validation_level    IN      NUMBER  :=  FND_API.G_VALID_LEVEL_FULL,
522   p_return_status       OUT  NOCOPY     VARCHAR2,
523   p_msg_count           OUT  NOCOPY     NUMBER,
524   p_msg_data            OUT  NOCOPY     VARCHAR2,
525   p_lock_row            OUT  NOCOPY     VARCHAR2,
526   P_ALLOCATION_RULE_ID   IN     NUMBER,
527   P_PERIOD_NUM           IN     NUMBER,
528   P_MONTHLY              IN     NUMBER,
529   P_QUARTERLY            IN     NUMBER,
530   P_SEMI_ANNUAL          IN     NUMBER
531 ) IS
532 
533   l_api_name            CONSTANT VARCHAR2(30)   := 'Lock_Row';
534   l_api_version         CONSTANT NUMBER         := 1.0;
535   l_lock_row1           number(1);
536   l_lock_row2           number(1);
537   l_lock_row3           number(1);
538 
539   Counter NUMBER;
540   CURSOR C IS
541 	 SELECT ALLOCATION_RULE_ID,
542 		PERIOD_NUM,
543 		NUMBER_OF_PERIODS,
544 		PERCENT
545 	   FROM PSB_ALLOCRULE_PERCENTS
546 	  WHERE ALLOCATION_RULE_ID = P_ALLOCATION_RULE_ID
547 	    AND PERIOD_NUM         = P_PERIOD_NUM
548 	  ORDER BY NUMBER_OF_PERIODS
549 	 FOR UPDATE OF PERCENT NOWAIT;
550 
551   Recinfo C%ROWTYPE;
552 BEGIN
553 
554   -- Standard Start of API savepoint
555 
556      SAVEPOINT Lock_Row_Pvt;
557 
558   -- Standard call to check for call compatibility.
559 
560   if not FND_API.Compatible_API_Call (l_api_version,
561 				      p_api_version,
562 				      l_api_name,
563 				      G_PKG_NAME)
564   then
565     raise FND_API.G_EXC_UNEXPECTED_ERROR;
566   end if;
567 
568   -- Initialize message list if p_init_msg_list is set to TRUE.
569 
570   if FND_API.to_Boolean (p_init_msg_list) then
571     FND_MSG_PUB.initialize;
572   end if;
573 
574   -- Initialize API return status to success
575 
576   p_return_status := FND_API.G_RET_STS_SUCCESS;
577 
578   -- API body
579 
580      OPEN C;
581 
582 
583      FETCH C INTO Recinfo;
584 
585      IF (C%NOTFOUND) THEN
586 	CLOSE C;
587 	FND_MESSAGE.Set_Name('FND','FORM_RECORD_DELETED');
588 	FND_MSG_PUB.Add;
589 	RAISE FND_API.G_EXC_ERROR;
590      END IF;
591 
592     IF ((Recinfo.allocation_rule_id = P_ALLOCATION_RULE_ID) AND
593 	( (Recinfo.period_num = P_PERIOD_NUM) OR
594 	  ((Recinfo.period_num  IS NULL ) AND (P_PERIOD_NUM IS NULL)))
595     AND ( (Recinfo.number_of_periods = 2) OR
596 	  ((Recinfo.number_of_periods  IS NULL ) AND (P_SEMI_ANNUAL IS NULL)))
597     AND ( (Recinfo.percent = P_SEMI_ANNUAL) OR
598 	  ((Recinfo.percent  IS NULL ) AND (P_SEMI_ANNUAL IS NULL)))) THEN
599     l_lock_row1 := 1;
600     ELSE
601       FND_MESSAGE.Set_Name('FND','FORM_RECORD_CHANGED');
602       FND_MSG_PUB.Add;
603       RAISE FND_API.G_EXC_ERROR;
604     END IF;
605 
606      FETCH C INTO Recinfo;
607 
608      IF (C%NOTFOUND) THEN
609 	CLOSE C;
610 	FND_MESSAGE.Set_Name('FND','FORM_RECORD_DELETED');
611 	FND_MSG_PUB.Add;
612 	RAISE FND_API.G_EXC_ERROR;
613      END IF;
614 
615     IF ((Recinfo.allocation_rule_id = P_ALLOCATION_RULE_ID) AND
616 	( (Recinfo.period_num = P_PERIOD_NUM) OR
617 	  ((Recinfo.period_num  IS NULL ) AND (P_PERIOD_NUM IS NULL)))
618     AND ( (Recinfo.number_of_periods = 4) OR
619 	  ((Recinfo.number_of_periods  IS NULL ) AND (P_QUARTERLY IS NULL)))
620     AND ( (Recinfo.percent = P_QUARTERLY) OR
621 	  ((Recinfo.percent  IS NULL ) AND (P_QUARTERLY IS NULL)))) THEN
622     l_lock_row2 := 1;
623     ELSE
624       FND_MESSAGE.Set_Name('FND','FORM_RECORD_CHANGED');
625       FND_MSG_PUB.Add;
626       RAISE FND_API.G_EXC_ERROR;
627     END IF;
628 
629      FETCH C INTO Recinfo;
630 
631      IF (C%NOTFOUND) THEN
632 	CLOSE C;
633 	FND_MESSAGE.Set_Name('FND','FORM_RECORD_DELETED');
634 	FND_MSG_PUB.Add;
635 	RAISE FND_API.G_EXC_ERROR;
636      END IF;
637 
638     IF ((Recinfo.allocation_rule_id = P_ALLOCATION_RULE_ID) AND
639 	( (Recinfo.period_num = P_PERIOD_NUM) OR
640 	  ((Recinfo.period_num  IS NULL ) AND (P_PERIOD_NUM IS NULL)))
644 	  ((Recinfo.percent  IS NULL ) AND (P_MONTHLY IS NULL)))) THEN
641     AND ( (Recinfo.number_of_periods = 12) OR
642 	  ((Recinfo.number_of_periods  IS NULL ) AND (P_MONTHLY IS NULL)))
643     AND ( (Recinfo.percent = P_MONTHLY) OR
645     l_lock_row3 := 1;
646     ELSE
647       FND_MESSAGE.Set_Name('FND','FORM_RECORD_CHANGED');
648       FND_MSG_PUB.Add;
649       RAISE FND_API.G_EXC_ERROR;
650     END IF;
651 
652 
653     CLOSE C;
654     if ((l_lock_row1 = 1) AND (l_lock_row2 = 1) AND (l_lock_row3 = 1))then
655     p_lock_row := FND_API.G_TRUE;
656     end if;
657   -- Standard check of p_commit.
658 
659   if FND_API.to_Boolean (p_commit) then
660     commit work;
661   end if;
662 
663   -- Standard call to get message count and if count is 1, get message info.
664 
665   FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
666 			     p_data  => p_msg_data);
667 
668 EXCEPTION
669 
670    when FND_API.G_EXC_ERROR then
671 
672      rollback to Lock_Row_Pvt;
673 
674      p_return_status := FND_API.G_RET_STS_ERROR;
675 
676      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
677 				p_data  => p_msg_data);
678 
679 
680    when FND_API.G_EXC_UNEXPECTED_ERROR then
681 
682      rollback to Lock_Row_Pvt;
683 
684      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
685 
686      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
687 				p_data  => p_msg_data);
688 
689 
690    when OTHERS then
691 
692      rollback to Lock_Row_Pvt;
693 
694      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
695 
696      if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
697 
698        FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME,
699 				l_api_name);
700      end if;
701 
702      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
703 				p_data  => p_msg_data);
704 
705 END Lock_Row;
706 
707   -- API body
708   -- Get Debug Information
709 
710   -- This Module is used to retrieve Debug Information for this routine. It
711   -- prints Debug Information when run as a Batch Process from SQL*Plus. For
712   -- the Debug Information to be printed on the Screen, the SQL*Plus parameter
713   -- 'Serveroutput' should be set to 'ON'
714 
715   FUNCTION get_debug RETURN VARCHAR2 IS
716   BEGIN
717 
718     return(g_dbug);
719 
720   END get_debug;
721 
722 /* ----------------------------------------------------------------------- */
723 
724 END PSB_ALLOCRULE_PERCENTS_PVT;