DBA Data[Home] [Help]

PACKAGE BODY: APPS.PSB_POSITIONS_I_PVT

Source


1 PACKAGE BODY PSB_POSITIONS_I_PVT AS
2 /* $Header: PSBWPOIB.pls 120.7 2006/02/18 08:12:10 matthoma ship $ */
3 
4   G_PKG_NAME CONSTANT VARCHAR2(30):= 'PSB_POSITIONS_I_PVT';
5   G_DBUG              VARCHAR2(2000) := 'start';
6 
7 PROCEDURE Initialize_View ( p_worksheet_id IN NUMBER,
8 			    p_start_date   IN DATE,
9 			    p_end_date     IN DATE,
10 			    p_select_date   IN DATE := fnd_api.g_miss_date
11 			  ) IS
12 
13 
14 BEGIN
15 
16      PSB_POSITIONS_PVT.Initialize_View(
17 			       p_worksheet_id     => p_worksheet_id,
18 			       p_start_date       => p_start_date,
19 			       p_end_date         => p_end_date,
20 			       p_select_date      => p_select_date
21 			       );
22 
23 
24 END Initialize_View ;
25 
26 PROCEDURE Define_Worksheet_Values (
27 	    p_api_version              in number,
28 	    p_init_msg_list            in varchar2 := fnd_api.g_false,
29 	    p_commit                   in varchar2 := fnd_api.g_false,
30 	    p_validation_level         in number   := fnd_api.g_valid_level_full,
31 	    p_return_status            OUT  NOCOPY varchar2,
32 	    p_msg_count                OUT  NOCOPY number,
33 	    p_msg_data                 OUT  NOCOPY varchar2,
34 	    p_worksheet_id             in number,
35 	    p_position_id              in number,
36 	    p_pos_effective_start_date in date  := FND_API.G_MISS_DATE,
37 	    p_pos_effective_end_date   in date  := FND_API.G_MISS_DATE,
38 	    p_budget_source             in varchar2:= FND_API.G_MISS_CHAR,
39 	    p_out_worksheet_id         OUT  NOCOPY number,
40 	    p_out_start_date           OUT  NOCOPY date,
41 	    p_out_end_date             OUT  NOCOPY date) IS
42 
43 BEGIN
44 
45      PSB_POSITIONS_PVT.Define_Worksheet_Values (
46 		    p_api_version     => p_api_version,
47 		    p_init_msg_list   => p_init_msg_list,
48 		    p_commit          => p_commit,
49 		    p_validation_level=> p_validation_level,
50 		    p_return_status   => p_return_status,
51 		    p_msg_count       => p_msg_count,
52 		    p_msg_data        => p_msg_data,
53 		    p_worksheet_id    => p_worksheet_id,
54 		    p_position_id     => p_position_id ,
55 		    p_pos_effective_start_date => p_pos_effective_start_date ,
56 		    p_pos_effective_end_date => p_pos_effective_end_date,
57 		    p_budget_source    => p_budget_source,
58 		    p_out_worksheet_id => p_out_worksheet_id ,
59 		    p_out_start_date   => p_out_start_date,
60 		    p_out_end_date     => p_out_end_date
61 			       );
62 
63      --
64 END Define_Worksheet_Values ;
65 
66 
67 -- modify_assignment used for insert/modify assignments
68 
69 PROCEDURE Modify_Assignment (
70   p_api_version         in number,
71   p_init_msg_list       in varchar2 := fnd_api.g_false,
72   p_commit              in varchar2 := fnd_api.g_false,
73   p_validation_level    in number   := fnd_api.g_valid_level_full,
74   p_return_status       OUT  NOCOPY varchar2,
75   p_msg_count           OUT  NOCOPY number,
76   p_msg_data            OUT  NOCOPY varchar2,
77   p_position_assignment_id  in OUT  NOCOPY  number,
78   p_data_extract_id      in number,
79   p_worksheet_id         in number,
80   p_position_id         in number,
81   p_assignment_type in varchar2,
82   p_attribute_id          in number,
83   p_attribute_value_id    in number,
84   p_attribute_value       in varchar2,
85   p_pay_element_id        in number,
86   p_pay_element_option_id in number,
87   p_effective_start_date  in date,
88   p_effective_end_date    in date,
89   p_element_value_type   in varchar2,
90   p_element_value         in number,
91   p_currency_code         in varchar2,
92   p_pay_basis             in varchar2,
93   p_employee_id           in number,
94   p_primary_employee_flag in varchar2,
95   p_global_default_flag   in varchar2,
96   p_assignment_default_rule_id in number,
97   p_modify_flag           in varchar2,
98   p_rowid                 in OUT  NOCOPY varchar2,
99   p_mode                  in varchar2
100  )  IS
101 
102 BEGIN
103 
104   PSB_POSITIONS_PVT.Modify_Assignment (
105      p_api_version              => p_api_version,
106      p_init_msg_list            => p_init_msg_list,
107      p_commit                   => p_commit,
108      p_validation_level         => p_validation_level,
109      p_return_status            => p_return_status,
110      p_msg_count                => p_msg_count,
111      p_msg_data                 => p_msg_data,
112      p_position_assignment_id   => p_position_assignment_id,
113      p_data_extract_id          => p_data_extract_id,
114      p_worksheet_id             => p_worksheet_id,
115      p_position_id              => p_position_id,
116      p_assignment_type       => p_assignment_type,
117      p_attribute_id          => p_attribute_id,
118      p_attribute_value_id    => p_attribute_value_id,
119      p_attribute_value       => p_attribute_value ,
120      p_pay_element_id        => p_pay_element_id ,
121      p_pay_element_option_id => p_pay_element_option_id,
122      p_effective_start_date  => p_effective_start_date,
123      p_effective_end_date    => p_effective_end_date,
124      p_element_value_type       => p_element_value_type,
125      p_element_value         => p_element_value,
126      p_currency_code         => p_currency_code ,
127      p_pay_basis             => p_pay_basis ,
128      p_employee_id           => p_employee_id ,
129      p_primary_employee_flag => p_primary_employee_flag ,
130      p_global_default_flag   => p_global_default_flag,
131      p_assignment_default_rule_id => p_assignment_default_rule_id,
132      p_modify_flag           => p_modify_flag     ,
133      p_rowid                 => p_rowid,
134      p_mode                  => p_mode
135      );
136 
137 END Modify_Assignment;
138 
139 
140 PROCEDURE Create_Default_Assignments(
141   p_api_version          in   number,
142   p_init_msg_list        in   varchar2 := FND_API.G_FALSE,
143   p_commit               in   varchar2 := FND_API.G_FALSE,
144   p_validation_level     in   number   := FND_API.G_VALID_LEVEL_FULL,
145   p_return_status        OUT  NOCOPY  varchar2,
146   p_msg_count            OUT  NOCOPY  number,
147   p_msg_data             OUT  NOCOPY  varchar2,
148   p_worksheet_id         in   number   := FND_API.G_MISS_NUM,
149   p_data_extract_id      in   number,
150   p_position_id          in   number   := FND_API.G_MISS_NUM,
151   p_position_start_date  in   date     := FND_API.G_MISS_DATE,
152   p_position_end_date    in   date     := FND_API.G_MISS_DATE) IS
153 
154   -- bug 4559919
155   -- reverted back the changes done for bug#4151746 as the
156   -- behavior will be as per MPA for R12 across patch levels
157 
158   /* Bug 4273099 start */
159   l_default_rule_id       NUMBER;
160 
161   -- Bug 5040737 used order by 2 clause in the following cursor
162   CURSOR c_Assignment_Ruleset IS
163     SELECT a.default_rule_id,
164 	   f.priority priority,
165 	   b.global_default_flag,
166            b.overwrite,
167 	   a.assignment_type,
168 	   a.attribute_id,
169 	   a.attribute_value_id,
170 	   a.attribute_value,
171 	   a.pay_element_id,
172 	   a.pay_element_option_id,
173 	   a.pay_basis,
174 	   a.element_value_type,
175 	   a.element_value,
176 	   a.currency_code
177       FROM psb_default_assignments a,
178 	   psb_defaults b,
179 	   psb_set_relations c,
180 	   psb_budget_positions d,
181            psb_entity_set e,
182            psb_entity_assignment f
183      WHERE a.default_rule_id = b.default_rule_id
184        AND b.default_rule_id = c.default_rule_id
185        AND c.account_position_set_id = d.account_position_set_id
186        AND d.data_extract_id = p_data_extract_id
187        AND d.position_id     = p_position_id
188        AND e.entity_set_id   = f.entity_set_id
189        AND f.entity_id       = b.default_rule_id
190        AND e.data_extract_id = p_data_extract_id
191        AND e.entity_type     = 'DEFAULT_RULE'
192        AND NVL(e.executable_from_position, 'N') = 'Y'
193      UNION
194     SELECT a.default_rule_id,
195            d.priority priority,
196            b.global_default_flag,
197            b.overwrite,
198 	   a.assignment_type,
199 	   a.attribute_id,
200 	   a.attribute_value_id,
201 	   a.attribute_value,
202 	   a.pay_element_id,
203 	   a.pay_element_option_id,
204 	   a.pay_basis,
205 	   a.element_value_type,
206 	   a.element_value,
207 	   a.currency_code
208       FROM psb_default_assignments a,
209 	   psb_defaults b,
210            psb_entity_set c,
211            psb_entity_assignment d
212      WHERE a.default_rule_id     = b.default_rule_id
213        AND b.global_default_flag = 'Y'
214        AND b.data_extract_id     = p_data_extract_id
215        AND c.entity_set_id       = d.entity_set_id
216        AND b.default_rule_id     = d.entity_id
217        AND c.data_extract_id     = p_data_extract_id
218        AND c.entity_type         = 'DEFAULT_RULE'
219        AND NVL(c.executable_from_position, 'N') = 'Y'
220        ORDER BY 2;
221 
222   CURSOR c_Position IS
223     SELECT effective_start_date,
224 	   effective_end_date
225       FROM psb_positions
226      WHERE position_id = p_position_id ;
227 
228   -- Bug 5040737 used order by 2 clause in the following cursor
229   CURSOR c_Priority_ruleset IS
230     SELECT a.default_rule_id,
231 	   f.priority priority,
232 	   a.global_default_flag,
233            a.overwrite
234       FROM psb_defaults a,
235 	   psb_set_relations b,
236 	   psb_budget_positions c,
237            psb_entity_set e,
238            psb_entity_assignment f
239      WHERE EXISTS
240            (SELECT 1
241 	      FROM PSB_DEFAULT_ACCOUNT_DISTRS d
242 	     WHERE d.default_rule_id = a.default_rule_id)
243        AND a.default_rule_id = b.default_rule_id
244        AND b.account_position_set_id = c.account_position_set_id
245        AND c.data_extract_id = p_data_extract_id
246        AND c.position_id     = p_position_id
247        AND e.entity_set_id   = f.entity_set_id
248        AND f.entity_id       = a.default_rule_id
249        AND e.data_extract_id = p_data_extract_id
250        AND e.entity_type     = 'DEFAULT_RULE'
251        AND NVL(e.executable_from_position, 'N') = 'Y'
252      UNION
253     SELECT a.default_rule_id,
254 	   c.priority priority,
255            a.global_default_flag,
256            a.overwrite
257       FROM psb_defaults a,
258            psb_entity_set b,
259            psb_entity_assignment c
260      WHERE EXISTS (SELECT 1
261       FROM PSB_DEFAULT_ACCOUNT_DISTRS d
262      WHERE d.default_rule_id = a.default_rule_id)
263        AND a.global_default_flag = 'Y'
264        AND a.data_extract_id     = p_data_extract_id
265        AND b.entity_set_id       = c.entity_set_id
266        AND a.default_rule_id     = c.entity_id
267        AND b.data_extract_id     = p_data_extract_id
268        AND b.entity_type         = 'DEFAULT_RULE'
269        AND NVL(b.executable_from_position, 'N') = 'Y'
270        ORDER BY 2;
271 
272   CURSOR c_Global_Dist IS
273     SELECT 'Exists'
274       FROM dual
275      WHERE EXISTS
276 	  (SELECT 1
277 	     FROM PSB_DEFAULT_ACCOUNT_DISTRS a,
278 		  PSB_DEFAULTS b
279             WHERE a.default_rule_id     = b.default_rule_id
280 	      AND b.global_default_flag = 'Y'
281 	      AND b.data_extract_id     = p_data_extract_id
282               AND a.default_rule_id     = l_default_rule_id
283              );
284 
285   CURSOR c_Dist IS
286     SELECT chart_of_accounts_id,
287 	   code_combination_id,
288 	   distribution_percent
289       FROM PSB_DEFAULT_ACCOUNT_DISTRS
290      WHERE default_rule_id = l_default_rule_id;
291 
292   CURSOR l_distribution_id_csr
293     IS
294     SELECT *
295     FROM PSB_POSITION_PAY_DISTRIBUTIONS
296     WHERE (((p_position_end_date IS NOT NULL)
297 	   AND (((effective_start_date <= p_position_end_date)
298 	   AND (effective_end_date IS NULL))
299 	   OR ((effective_start_date BETWEEN p_position_start_date AND p_position_end_date)
300 	   OR (effective_end_date BETWEEN p_position_start_date AND p_position_end_date)
301 	   OR ((effective_start_date < p_position_start_date)
302 	   AND (effective_end_date > p_position_end_date)))))
303 	   OR ((p_position_end_date IS NULL)
304 	   AND (NVL(effective_end_date, p_position_start_date) >= p_position_start_date)))
305            AND data_extract_id = p_data_extract_id
306            AND position_id     = p_position_id
307            AND ((worksheet_id IS NULL AND NOT EXISTS
308            /* Bug 4545909 Start */
309            (SELECT 1 FROM psb_position_pay_distributions
310             WHERE worksheet_id = p_worksheet_id
311               AND position_id  = p_position_id))
312                OR worksheet_id = p_worksheet_id
313                OR (worksheet_id IS NULL AND p_worksheet_id IS NULL));
314            /* Bug 4545909 End */
315 
316   l_position_start_date   DATE;
317   l_position_end_date     DATE;
318   l_return_status         VARCHAR2(1);
319   l_posasgn_id            NUMBER;
320   l_msg_count             NUMBER;
321   l_msg_data              VARCHAR2(2000);
322   l_priority              NUMBER;
323   l_global_default_flag   VARCHAR2(1);
324   l_local_dist_exists     VARCHAR2(1) := FND_API.G_FALSE;
325   l_global_dist_exists    VARCHAR2(1) := FND_API.G_FALSE;
326   l_distribution_id       NUMBER;
327   l_rowid                 VARCHAR2(100);
328   l_overwrite_flag        VARCHAR2(1);
329   l_worksheet_id          NUMBER;
330 
331   /* Bug 4273099 end */
332 
333 BEGIN
334 
335     /* Bug 4545909 Start */
336     IF p_worksheet_id = FND_API.G_MISS_NUM THEN
337       l_worksheet_id := NULL;
338     ELSE
339       l_worksheet_id := p_worksheet_id;
340     END IF;
341     /* Bug 4545909 End */
342 
343     /* Bug 4545909 Start */
344 
345     DELETE FROM psb_budget_positions
346      WHERE position_id     = p_position_id
347        AND data_extract_id = p_data_extract_id;
348 
349     PSB_Budget_Position_Pvt.Add_Position_To_Position_Sets
350       (
351          p_api_version       =>  1.0                         ,
352          p_init_msg_list     =>  FND_API.G_TRUE              ,
353          p_commit            =>  FND_API.G_FALSE             ,
354          p_validation_level  =>  FND_API.G_VALID_LEVEL_FULL  ,
355          p_return_status     =>  l_return_status             ,
356          p_msg_count         =>  l_msg_count                 ,
357          p_msg_data          =>  l_msg_data                  ,
358          p_position_id       =>  p_position_id,
359          p_worksheet_id      =>  l_worksheet_id
360       );
361     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
362       raise FND_API.G_EXC_ERROR;
363     END IF;
364 
365     /* Bug 4545909 End */
366 
367     /* Bug 4273099 start */
368     IF ((p_position_start_date = FND_API.G_MISS_DATE) OR
369 	(p_position_end_date = FND_API.G_MISS_DATE))
370     THEN
371 
372       FOR c_Position_Rec in c_Position LOOP
373 	l_position_start_date := c_Position_Rec.effective_start_date;
374 	l_position_end_date   := c_Position_Rec.effective_end_date;
375       END LOOP;
376 
377     END IF;
378 
379     IF p_position_start_date <> FND_API.G_MISS_DATE THEN
380       l_position_start_date := p_position_start_date;
381     END IF;
382 
383     IF p_position_end_date <> FND_API.G_MISS_DATE THEN
384       l_position_end_date := p_position_end_date;
385     END IF;
386 
387     FOR c_Assignments_Rec in c_Assignment_Ruleset
388     LOOP
389 
390       psb_positions_pvt.Apply_Position_Default_Rules
391           (p_api_version => 1.0,
392            x_return_status => l_return_status,
393 	   x_msg_count => l_msg_count,
394 	   x_msg_data => l_msg_data,
395 	   p_position_assignment_id => l_posasgn_id,
396 	   p_data_extract_id => p_data_extract_id,
397 	   p_position_id => p_position_id,
398 	   p_assignment_type => c_Assignments_Rec.assignment_type,
399 	   p_attribute_id => c_Assignments_Rec.attribute_id,
400 	   p_attribute_value_id => c_Assignments_Rec.attribute_value_id,
401 	   p_attribute_value => c_Assignments_Rec.attribute_value,
402 	   p_pay_element_id => c_Assignments_Rec.pay_element_id,
403 	   p_pay_element_option_id => c_Assignments_Rec.pay_element_option_id,
404            p_effective_start_date => l_position_start_date,
405 	   p_effective_end_date => l_position_end_date,
406 	   p_element_value_type => c_Assignments_Rec.element_value_type,
407 	   p_element_value => c_Assignments_Rec.element_value,
408 	   p_currency_code => c_Assignments_Rec.currency_code,
409 	   p_pay_basis => c_Assignments_Rec.pay_basis,
410 	   p_employee_id => null,
411 	   p_primary_employee_flag => null,
412 	   p_global_default_flag => c_Assignments_Rec.global_default_flag,
413 	   p_assignment_default_rule_id => c_Assignments_Rec.default_rule_id,
414 	   p_modify_flag => c_Assignments_Rec.overwrite,
415            p_worksheet_id => l_worksheet_id );
416     END LOOP;
417 
418     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
419       raise FND_API.G_EXC_ERROR;
420     END IF;
421 
422     FOR c_Priority_Rec in c_Priority_ruleset LOOP
423 
424       l_default_rule_id     := c_Priority_Rec.default_rule_id;
425       l_priority            := c_Priority_Rec.priority;
426       l_global_default_flag := c_Priority_Rec.global_default_flag;
427 
428     IF NVL(c_priority_rec.global_default_flag,'N') = 'N' THEN
429       l_local_dist_exists := FND_API.G_TRUE;
430     END IF;
431 
432     l_overwrite_flag    := c_priority_rec.overwrite;
433 
434     IF l_overwrite_flag IS NULL THEN
435       l_overwrite_flag    := 'N';
436     END IF;
437 
438     FOR c_Global_Dist_Rec in c_Global_Dist LOOP
439       l_global_dist_exists := FND_API.G_TRUE;
440     END LOOP;
441 
442     IF l_overwrite_flag <> 'N' THEN
443 
444       IF ((FND_API.to_Boolean(l_local_dist_exists)) OR
445         (FND_API.to_Boolean(l_global_dist_exists))) THEN
446       BEGIN
447 
448       PSB_POSITION_PAY_DISTR_PVT.Delete_Distributions_Position
449          (p_api_version => 1.0,
450           p_return_status => l_return_status,
451           p_msg_count => l_msg_count,
452           p_msg_data => l_msg_data,
453           p_position_id => p_position_id,
454           p_worksheet_id => l_worksheet_id);
455 
456       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
457         raise FND_API.G_EXC_ERROR;
458       END IF;
459       END;
460       END IF;
461     END IF;
462 
463     PSB_POSITIONS_PVT.g_distr_percent_total:= 0;
464 
465     FOR l_distribution_id_csr_rec IN l_distribution_id_csr
466     LOOP
467       PSB_POSITIONS_PVT.g_distr_percent_total
468         := PSB_POSITIONS_PVT.g_distr_percent_total + l_distribution_id_csr_rec.distribution_percent;
469     END LOOP;
470 
471 
472     FOR c_Dist_Rec in c_Dist LOOP
473 
474         PSB_POSITION_PAY_DISTR_PVT.Apply_Position_Pay_Distr
475 	  (p_api_version => 1.0,
476 	   x_return_status => l_return_status,
477 	   x_msg_count => l_msg_count,
478 	   x_msg_data => l_msg_data,
479 	   p_distribution_id => l_distribution_id,
480 	   p_position_id => p_position_id,
481 	   p_data_extract_id => p_data_extract_id,
482 	   p_worksheet_id => l_worksheet_id,
483 	   p_effective_start_date => l_position_start_date,
484 	   p_effective_end_date => l_position_end_date,
485            p_modify_flag => l_overwrite_flag,
486 	   p_chart_of_accounts_id => c_Dist_Rec.chart_of_accounts_id,
487 	   p_code_combination_id => c_Dist_Rec.code_combination_id,
488 	   p_distribution_percent => c_Dist_Rec.distribution_percent,
489 	   p_global_default_flag => l_global_default_flag,
490 	   p_distribution_default_rule_id => l_default_rule_id,
491 	   p_rowid => l_rowid);
492 
493 
494         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
495 	   raise FND_API.G_EXC_ERROR;
496         END IF;
497 
498       END LOOP;
499 
500     END LOOP;
501 
502   /* Bug 4273099 End */
503 
504 END Create_Default_Assignments;
505 
506 FUNCTION Get_Select_Date RETURN DATE IS
507   BEGIN
508      Return PSB_POSITIONS_PVT.Get_Select_Date ;
509   END Get_Select_Date;
510 
511 
512 FUNCTION Check_Allowed
513 ( p_api_version               IN   NUMBER,
514   p_init_msg_list             IN   VARCHAR2 := FND_API.G_FALSE,
515   p_validation_level          IN   NUMBER := FND_API.G_VALID_LEVEL_NONE,
516   p_msg_count                 OUT  NOCOPY  NUMBER,
517   p_msg_data                  OUT  NOCOPY  VARCHAR2,
518   p_worksheet_id              IN   NUMBER,
519   p_position_budget_group_id  IN   NUMBER
520 ) RETURN VARCHAR2 IS
521 
522   l_api_name                  CONSTANT VARCHAR2(30)   := 'Check_Allowed';
523   l_api_version               CONSTANT NUMBER         := 1.0;
524 
525 BEGIN
526 
527   -- Standard call to check for call compatibility.
528 
529   if not FND_API.Compatible_API_Call (l_api_version,
530 				      p_api_version,
531 				      l_api_name,
532 				      G_PKG_NAME)
533   then
534     raise FND_API.G_EXC_UNEXPECTED_ERROR;
535   end if;
536 
537 
538   -- Initialize message list if p_init_msg_list is set to TRUE
539 
540   if FND_API.to_Boolean (p_init_msg_list) then
541     FND_MSG_PUB.initialize;
542   end if;
543 
544 
545   -- Call Private Function
546 
547   RETURN PSB_WS_POS1.Check_Allowed
548      (p_api_version => 1.0,
549       p_validation_level => p_validation_level,
550       p_worksheet_id => p_worksheet_id,
551       p_position_budget_group_id => p_position_budget_group_id);
552 
553 
554   -- Standard call to get message count and if count is 1, get message info
555 
556   FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
557 			     p_data => p_msg_data);
558 
559 
560 EXCEPTION
561 
562    when FND_API.G_EXC_ERROR then
563      return FND_API.G_FALSE;
564 
565      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
566 				p_data => p_msg_data);
567 
568 
569    when FND_API.G_EXC_UNEXPECTED_ERROR then
570      return FND_API.G_FALSE;
571 
572      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
573 				p_data => p_msg_data);
574 
575 
576    when OTHERS then
577      return FND_API.G_FALSE;
578 
579      if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
580        FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME,
581 				l_api_name);
582      end if;
583 
584      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
585 				p_data => p_msg_data);
586 
587 END Check_Allowed;
588 
589 FUNCTION Rev_Check_Allowed
590 ( p_api_version               IN   NUMBER,
591   p_init_msg_list             IN   VARCHAR2 := FND_API.G_FALSE,
592   p_validation_level          IN   NUMBER := FND_API.G_VALID_LEVEL_NONE,
593   p_msg_count                 OUT  NOCOPY  NUMBER,
594   p_msg_data                  OUT  NOCOPY  VARCHAR2,
595   p_startdate_pp              IN      DATE,
596   p_enddate_cy                IN      DATE,
597   p_worksheet_id              IN   NUMBER,
598   p_position_budget_group_id  IN   NUMBER
599 ) RETURN VARCHAR2 IS
600 
601   l_api_name                  CONSTANT VARCHAR2(30)   := 'Rev_Check_Allowed';
602   l_api_version               CONSTANT NUMBER         := 1.0;
603 
604 BEGIN
605 
606   -- Standard call to check for call compatibility.
607 
608   if not FND_API.Compatible_API_Call (l_api_version,
609 				      p_api_version,
610 				      l_api_name,
611 				      G_PKG_NAME)
612   then
613     raise FND_API.G_EXC_UNEXPECTED_ERROR;
614   end if;
615 
616 
617   -- Initialize message list if p_init_msg_list is set to TRUE
618 
619   if FND_API.to_Boolean (p_init_msg_list) then
620     FND_MSG_PUB.initialize;
621   end if;
622 
623 
624   -- Call Private Function
625 
626   RETURN PSB_POSITIONS_PVT.Rev_Check_Allowed
627      (p_api_version => p_api_version,
628       p_validation_level => p_validation_level,
629       p_startdate_pp     => p_startdate_pp,
630       p_enddate_cy       => p_enddate_cy,
631       p_worksheet_id     => p_worksheet_id,
632       p_position_budget_group_id => p_position_budget_group_id);
633 
634 
635   -- Standard call to get message count and if count is 1, get message info
636 
637   FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
638 			     p_data => p_msg_data);
639 
640 
641 EXCEPTION
642 
643    when FND_API.G_EXC_ERROR then
644      return FND_API.G_FALSE;
645 
646      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
647 				p_data => p_msg_data);
648 
649 
650    when FND_API.G_EXC_UNEXPECTED_ERROR then
651      return FND_API.G_FALSE;
652 
653      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
654 				p_data => p_msg_data);
655 
656 
657    when OTHERS then
658      return FND_API.G_FALSE;
659 
660      if FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
661        FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME,
662 				l_api_name);
663      end if;
664 
665      FND_MSG_PUB.Count_And_Get (p_count => p_msg_count,
666 				p_data => p_msg_data);
667 
668 END Rev_Check_Allowed;
669 
670 PROCEDURE Modify_Distribution_WS
671 ( p_api_version                   IN      NUMBER,
672   p_init_msg_list                 IN      VARCHAR2 := FND_API.G_FALSE,
673   p_commit                        IN      VARCHAR2 := FND_API.G_FALSE,
674   p_validation_level              IN      NUMBER := FND_API.G_VALID_LEVEL_FULL,
675   p_return_status                 OUT  NOCOPY     VARCHAR2,
676   p_msg_count                     OUT  NOCOPY     NUMBER,
677   p_msg_data                      OUT  NOCOPY     VARCHAR2,
678   p_distribution_id               IN OUT  NOCOPY  NUMBER,
679   p_worksheet_id                  IN      NUMBER := FND_API.G_MISS_NUM,
680   p_position_id                   IN      NUMBER,
681   p_data_extract_id               IN      NUMBER,
682   p_effective_start_date          IN      DATE,
683   p_effective_end_date            IN      DATE,
684   p_chart_of_accounts_id          IN      NUMBER,
685   p_code_combination_id           IN      NUMBER,
686   p_distribution_percent          IN      NUMBER,
687   p_global_default_flag           IN      VARCHAR2,
688   p_distribution_default_rule_id  IN      NUMBER,
689   p_rowid                         IN OUT  NOCOPY  VARCHAR2,
690   p_budget_revision_pos_line_id   IN      NUMBER:= FND_API.G_MISS_NUM,
691   p_mode                          IN      VARCHAR2
692   ) IS
693 BEGIN
694   PSB_POSITION_PAY_DISTR_PVT.MODIFY_DISTRIBUTION_WS (
695 
696       p_api_version                   =>     p_api_version,
697       p_init_msg_list                 =>     p_init_msg_list,
698       p_commit                        =>     p_commit,
699       p_validation_level              =>     p_validation_level,
700       p_return_status                 =>     p_return_status,
701       p_msg_count                     =>     p_msg_count,
702       p_msg_data                      =>     p_msg_data,
703       p_distribution_id               =>     p_distribution_id,
704       p_worksheet_id                  =>     p_worksheet_id,
705       p_position_id                   =>     p_position_id,
706       p_data_extract_id               =>     p_data_extract_id,
707       p_effective_start_date          =>     p_effective_start_date,
708       p_effective_end_date            =>     p_effective_end_date,
709       p_chart_of_accounts_id          =>     p_chart_of_accounts_id,
710       p_code_combination_id           =>     p_code_combination_id,
711       p_distribution_percent          =>     p_distribution_percent,
712       p_global_default_flag           =>     p_global_default_flag,
713       p_distribution_default_rule_id  =>     p_distribution_default_rule_id,
714       p_rowid                         =>     p_rowid,
715       p_budget_revision_pos_line_id   =>     p_budget_revision_pos_line_id,
716       p_mode                          =>     p_mode
717 			     );
718 
719 END Modify_Distribution_WS;
720 
721 PROCEDURE DELETE_ROW (
722   p_api_version         in number,
723   p_init_msg_list       in varchar2 := fnd_api.g_false,
724   p_commit              in varchar2 := fnd_api.g_false,
725   p_validation_level    in number := fnd_api.g_valid_level_full,
726   p_return_status       OUT  NOCOPY varchar2,
727   p_msg_count           OUT  NOCOPY number,
728   p_msg_data            OUT  NOCOPY varchar2,
729   p_distribution_id     in number
730 )
731 IS
732 
733 BEGIN
734   PSB_POSITION_PAY_DISTR_PVT.DELETE_ROW (
735 	 p_api_version          => p_api_version,
736 	 p_init_msg_list        => p_init_msg_list,
737 	 p_commit               => p_commit,
738 	 p_validation_level     => p_validation_level,
739 	 p_return_status        => p_return_status,
740 	 p_msg_count            => p_msg_count,
741 	 p_msg_data             => p_msg_data,
742 	 p_distribution_id      => p_distribution_id
743   );
744 END DELETE_ROW;
745 --
746 
747 PROCEDURE LOCK_ROW (
748   p_api_version         in number,
749   p_init_msg_list       in varchar2 := fnd_api.g_false,
750   p_commit              in varchar2 := fnd_api.g_false,
751   p_validation_level    in number   := fnd_api.g_valid_level_full,
752   p_return_status       OUT  NOCOPY varchar2,
753   p_msg_count           OUT  NOCOPY number,
754   p_msg_data            OUT  NOCOPY varchar2,
755   p_row_locked          OUT  NOCOPY varchar2,
756   p_distribution_id      in number,
757   p_position_id          in number,
758   p_data_extract_id      in number,
759   p_effective_start_date   in date,
760   p_effective_end_date  in date,
761   p_chart_of_accounts_id     in number,
762   p_code_combination_id in number,
763   p_distribution_percent     in number,
764   p_global_default_flag in varchar2,
765   p_distribution_default_rule_id     in number
766 ) IS
767 
768 BEGIN
769   PSB_POSITION_PAY_DISTR_PVT.LOCK_ROW (
770   p_api_version              => p_api_version,
771   p_init_msg_list            =>  p_init_msg_list,
772   p_commit                   => p_commit,
773   p_validation_level         => p_validation_level,
774   p_return_status            => p_return_status,
775   p_msg_count                => p_msg_count,
776   p_msg_data                 => p_msg_data,
777   p_row_locked               => p_row_locked,
778   p_distribution_id          => p_distribution_id,
779   p_position_id              => p_position_id,
780   p_data_extract_id          => p_data_extract_id,
781   p_effective_start_date     => p_effective_start_date,
782   p_effective_end_date       => p_effective_end_date,
783   p_chart_of_accounts_id     => p_chart_of_accounts_id,
784   p_code_combination_id      => p_code_combination_id,
785   p_distribution_percent     => p_distribution_percent,
786   p_global_default_flag      => p_global_default_flag,
787   p_distribution_default_rule_id     => p_distribution_default_rule_id
788   );
789 END LOCK_ROW;
790 
791 
792 /* ----------------------------------------------------------------------- */
793 
794 END PSB_POSITIONS_I_PVT;