DBA Data[Home] [Help]

PACKAGE BODY: APPS.LNS_UTILITY_PUB

Source


1 PACKAGE BODY LNS_UTILITY_PUB AS
2 /*$Header: LNS_UTIL_PUBP_B.pls 120.15.12020000.2 2012/07/19 21:01:04 scherkas ship $ */
3 
4   G_PKG_NAME CONSTANT VARCHAR2(30) := 'LNS_UTILITIES';
5   G_FILE_NAME CONSTANT VARCHAR2(30) := 'LNS_UTIL_PUBP_B.pls';
6 
7  --------------------------------------------
8  -- internal package routines
9  --------------------------------------------
10 
11 procedure logMessage(log_level in number
12                     ,module    in varchar2
13                     ,message   in varchar2)
14 is
15 
16 begin
17 
18     IF log_level >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
19       FND_LOG.STRING(log_level, module, message);
20     END IF;
21 
22 end;
23 
24 FUNCTION created_by RETURN NUMBER IS
25 BEGIN
26 
27     RETURN NVL(FND_GLOBAL.user_id,-1);
28 
29 END created_by;
30 
31 FUNCTION creation_date RETURN DATE IS
32 BEGIN
33 
34     RETURN SYSDATE;
35 
36 END creation_date;
37 
38 FUNCTION last_updated_by RETURN NUMBER IS
39 BEGIN
40 
41     RETURN NVL(FND_GLOBAL.user_id,-1);
42 
43 END last_updated_by;
44 
45 FUNCTION last_update_date RETURN DATE IS
46 BEGIN
47 
48     RETURN SYSDATE;
49 
50 END last_update_date;
51 
52 FUNCTION last_update_login RETURN NUMBER IS
53 BEGIN
54 
55     IF FND_GLOBAL.conc_login_id = -1 OR
56        FND_GLOBAL.conc_login_id IS NULL
57     THEN
58         RETURN FND_GLOBAL.login_id;
59     ELSE
60         RETURN FND_GLOBAL.conc_login_id;
61     END IF;
62 
63 END last_update_login;
64 
65 FUNCTION request_id RETURN NUMBER IS
66 BEGIN
67 
68     IF FND_GLOBAL.conc_request_id = -1 OR
69        FND_GLOBAL.conc_request_id IS NULL
70     THEN
71         RETURN NULL;
72     ELSE
73         RETURN FND_GLOBAL.conc_request_id;
74     END IF;
75 
76 END request_id;
77 
78 FUNCTION program_id RETURN NUMBER IS
79 BEGIN
80 
81     IF FND_GLOBAL.conc_program_id = -1 OR
82        FND_GLOBAL.conc_program_id IS NULL
83     THEN
84         RETURN NULL;
85     ELSE
86         RETURN FND_GLOBAL.conc_program_id;
87     END IF;
88 
89 END program_id;
90 
91 FUNCTION program_application_id RETURN NUMBER IS
92 BEGIN
93 
94     IF FND_GLOBAL.prog_appl_id = -1 OR
95        FND_GLOBAL.prog_appl_id IS NULL
96     THEN
97         RETURN NULL;
98     ELSE
99         RETURN FND_GLOBAL.prog_appl_id;
100     END IF;
101 
102 END program_application_id;
103 
104 FUNCTION application_id RETURN NUMBER IS
105 BEGIN
106 
107     IF FND_GLOBAL.resp_appl_id = -1 OR
108        FND_GLOBAL.resp_appl_id IS NULL
109     THEN
110         RETURN NULL;
111     ELSE
112         RETURN FND_GLOBAL.resp_appl_id;
113     END IF;
114 
115 END application_id;
116 
117 FUNCTION program_update_date RETURN DATE IS
118 BEGIN
119 
120     IF program_id IS NULL THEN
121         RETURN NULL;
122     ELSE
123         RETURN SYSDATE;
124     END IF;
125 
126 END program_update_date;
127 
128 FUNCTION user_id RETURN NUMBER IS
129 BEGIN
130 
131     RETURN NVL(FND_GLOBAL.user_id,-1);
132 
133 END user_id;
134 
135 PROCEDURE Validate_any_id(p_api_version   IN  NUMBER := 1.0,
136                           p_init_msg_list IN  VARCHAR2 := FND_API.G_FALSE,
137                           x_msg_count     OUT NOCOPY NUMBER,
138                           x_msg_data      OUT NOCOPY VARCHAR2,
139                           x_return_status OUT NOCOPY VARCHAR2,
140                           p_col_id        IN NUMBER,
141                           p_col_name      IN VARCHAR2,
142                           p_table_name    IN VARCHAR2)
143 IS
144 
145 TYPE refCur IS REF CURSOR;
146 valid_id  refCur;
147 
148     l_return_status VARCHAR2(1);
149     count_id        VARCHAR2(1);
150     l_api_version   NUMBER := p_api_version;
151     l_init_msg_list VARCHAR2(1) := p_init_msg_list;
152     l_api_name      VARCHAR2(20) := 'VALIDATE_ANY_ID';
153     vPlsql          VARCHAR2(2000);
154 BEGIN
155 
156       -- Standard Start of API savepoint
157       SAVEPOINT Validate_any_id_PVT;
158 
159       -- Initialize API return status to SUCCESS
160       x_return_status := FND_API.G_RET_STS_SUCCESS;
161 
162 
163       -- Standard call to check for call compatibility.
164       IF NOT FND_API.Compatible_API_Call (l_api_version,
165                                           p_api_version,
166                                           l_api_name,
167                                           G_PKG_NAME)
168       THEN
169           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
170       END IF;
171 
172       -- Initialize message list if p_init_msg_list is set to TRUE.
173       IF FND_API.to_Boolean(p_init_msg_list)
174       THEN
175           FND_MSG_PUB.initialize;
176       END IF;
177 
178       -- API body
179        vPlsql :=
180              ' Select ''X'' ' ||
181              ' From ' || p_table_name || ' ' ||
182              ' Where exists ' ||
183              '     (Select ' || p_col_name ||
184              '     From ' || p_table_name ||
185              '     Where ' || p_col_name || ' = :a1)';
186              --dbms_output.put_line('plsql is ' || vPLSQL);
187         open valid_id for
188             vPlsql
189             using p_col_id;
190         FETCH valid_id INTO count_id;
191 
192         if valid_id%FOUND then
193             --dbms_output.put_line('FOUND!!');
194             l_return_status := FND_API.G_RET_STS_SUCCESS;
195         else
196             --dbms_output.put_line('NOT FOUND!!');
197             l_return_status := FND_API.G_RET_STS_ERROR;
198         end if;
199         CLOSE valid_id;
200 
201     x_return_status := l_return_status;
202 
203   EXCEPTION
204     WHEN FND_API.G_EXC_ERROR THEN
205         ROLLBACK TO Validate_any_id_PVT;
206         x_return_status := FND_API.G_RET_STS_ERROR;
207         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
208 
209     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
210         ROLLBACK TO Validate_any_id_PVT;
211         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
212         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
213 
214     WHEN OTHERS THEN
215         ROLLBACK TO Validate_any_id_PVT;
216         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
217         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
218             FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
219         END IF;
220         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
221 
222 END Validate_any_id;
223 
224 PROCEDURE Validate_any_varchar(p_api_version   IN  NUMBER := 1.0,
225                                p_init_msg_list IN  VARCHAR2 := FND_API.G_FALSE,
226                                x_msg_count     OUT NOCOPY NUMBER,
227                                x_msg_data      OUT NOCOPY VARCHAR2,
228                                x_return_status OUT NOCOPY VARCHAR2,
229                                p_col_value     IN  VARCHAR2,
230                                p_col_name      IN  VARCHAR2,
231                                p_table_name    IN  VARCHAR2)
232 IS
233 
234 TYPE refCur IS REF CURSOR;
235 valid_id  refCur;
236 
237     l_return_status VARCHAR2(1);
238     count_id        VARCHAR2(1);
239     l_api_version   NUMBER := p_api_version;
240     l_init_msg_list VARCHAR2(1) := p_init_msg_list;
241     l_api_name      VARCHAR2(20) := 'VALIDATE_ANY_VARCHAR';
242 
243     l_col_value varchar2(240);
244     vPLSQL varchar2(1000);
245 
246 BEGIN
247 
248       -- Standard Start of API savepoint
249       SAVEPOINT Validate_any_varchar_PVT;
250 
251       -- Initialize API return status to SUCCESS
252       x_return_status := FND_API.G_RET_STS_SUCCESS;
253 
254 
255       -- Standard call to check for call compatibility.
256       IF NOT FND_API.Compatible_API_Call (l_api_version,
257                                           p_api_version,
258                                           l_api_name,
259                                           G_PKG_NAME)
260       THEN
261           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
262       END IF;
263 
264       -- Initialize message list if p_init_msg_list is set to TRUE.
265       IF FND_API.to_Boolean(p_init_msg_list)
266       THEN
267           FND_MSG_PUB.initialize;
268       END IF;
269 
270       -- API body
271         --dbms_output.put_line('col is ' || p_col_value);
272 
273         vPLSQL := ' Select ''X''   ' ||
274                   ' From ' || p_table_name ||
275                   ' Where exists   ' ||
276                   '   (Select ' || p_col_name ||
277                   '    From ' || p_table_name ||
278                   '    Where ' || p_col_name || ' = :a1)';
279         --dbms_output.put_line('plsql is ' || vPLSQL);
280 
281         OPEN valid_id FOR
282             vPLSQL
283             using p_col_value;
284         FETCH valid_id INTO count_id;
285 
286         if valid_id%FOUND then
287             --dbms_output.put_line('FOUND!!');
288             l_return_status := FND_API.G_RET_STS_SUCCESS;
289         else
290             --dbms_output.put_line('NOT FOUND!!');
291             l_return_status := FND_API.G_RET_STS_ERROR;
292         end if;
293         CLOSE valid_id;
294 
295     x_return_status := l_return_status;
296 
297   EXCEPTION
298     WHEN FND_API.G_EXC_ERROR THEN
299         ROLLBACK TO Validate_any_varchar_PVT;
300         x_return_status := FND_API.G_RET_STS_ERROR;
301         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
302 
303     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
304         ROLLBACK TO Validate_any_varchar_PVT;
305         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
306         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
307 
308     WHEN OTHERS THEN
309         ROLLBACK TO Validate_any_varchar_PVT;
310         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
311         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
312             FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
313         END IF;
314         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
315 
316 END Validate_any_varchar;
317 
318 PROCEDURE Validate_Lookup_CODE(p_api_version   IN  NUMBER := 1.0,
319                                p_init_msg_list IN  VARCHAR2 := FND_API.G_FALSE,
320                                x_msg_count     OUT NOCOPY NUMBER,
321                                x_msg_data      OUT NOCOPY VARCHAR2,
322                                x_return_status OUT NOCOPY VARCHAR2,
323                                p_lookup_type   IN  VARCHAR2,
324                                p_lookup_code   IN  VARCHAR2,
325                                p_lookup_view   IN VARCHAR2 := 'LNS_LOOKUPS')
326 IS
327 
328 TYPE refCur IS REF CURSOR;
329 valid_id  refCur;
330 
331     l_return_status VARCHAR2(1);
332     count_id        NUMBER       := 0;
333     l_api_version   NUMBER       := p_api_version;
334     l_init_msg_list VARCHAR2(1)  := p_init_msg_list;
335     l_api_name      VARCHAR2(20) := 'VALIDATE_LOOKUP_CODE';
336 
337     l_lookup_code varchar2(30);
338     l_lookup_type varchar2(30);
339     vPLSQL varchar2(1000);
340 
341 BEGIN
342 
343       -- Standard Start of API savepoint
344       SAVEPOINT Validate_any_varchar_PVT;
345 
346       -- Initialize API return status to SUCCESS
347       x_return_status := FND_API.G_RET_STS_SUCCESS;
348 
349       -- Standard call to check for call compatibility.
350       IF NOT FND_API.Compatible_API_Call (l_api_version,
351                                           p_api_version,
352                                           l_api_name,
353                                           G_PKG_NAME)
354       THEN
355           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
356       END IF;
357 
358       -- Initialize message list if p_init_msg_list is set to TRUE.
359       IF FND_API.to_Boolean(p_init_msg_list)
360       THEN
361           FND_MSG_PUB.initialize;
362       END IF;
363 
364       -- API body
365       l_lookup_code := '''' || p_lookup_code || '''';
366       l_lookup_type := '''' || p_lookup_type || '''';
367 
368         --dbms_output.put_line('col is ' || l_lookup_code);
369         vPLSQL :=
370               'Select Count(LOOKUP_CODE) '  ||
371               'From ' || p_lookup_view || ' ' ||
372               'Where LOOKUP_TYPE = ' || l_lookup_type  || ' AND ' ||
373               'LOOKUP_CODE = ' || l_lookup_code || ' AND ' ||
374               'ENABLED_FLAG = ''Y''';
375 
376         --dbms_output.put_line('plsql is ' || vPLSQL);
377         OPEN valid_id FOR
378             vPLSQL;
379         FETCH valid_id INTO count_id;
380 
381         CLOSE valid_id ;
382 
383         IF (count_id > 0) then
384                 l_return_status := FND_API.G_RET_STS_SUCCESS;
385         ELSE
386                 l_return_status := FND_API.G_RET_STS_ERROR;
387         END IF ;
388     x_return_status := l_return_status;
389 
390   EXCEPTION
391     WHEN FND_API.G_EXC_ERROR THEN
392         ROLLBACK TO Validate_any_varchar_PVT;
393         x_return_status := FND_API.G_RET_STS_ERROR;
394         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
395 
396     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
397         ROLLBACK TO Validate_any_varchar_PVT;
398         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
399         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
400 
401     WHEN OTHERS THEN
402         ROLLBACK TO Validate_any_varchar_PVT;
403         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
404         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
405             FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
406         END IF;
407         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
408 
409 END Validate_LOOKUP_CODE;
410 
411 Procedure getObjectVersion(p_table_name            IN varchar2
412                           ,p_primary_key_name      IN varchar2
413                           ,p_primary_key_value     IN NUMBER
414                           ,p_object_version_number IN NUMBER
415                           ,x_object_version_number OUT NOCOPY NUMBER
416                           ,x_msg_count             OUT NOCOPY NUMBER
417                           ,x_msg_data              OUT NOCOPY VARCHAR2
418                           ,x_return_status         OUT NOCOPY VARCHAR2)
419 is
420          l_object_version_number number;
421          l_rowid  rowid;
422 
423     -- check whether record has been updated by another user. If not, lock it.
424     BEGIN
425         Execute Immediate
426         'SELECT OBJECT_VERSION_NUMBER, ' ||
427         '       ROWID                  ' ||
428         ' FROM   ' || p_table_name       ||
429         ' Where '  || p_primary_key_name || ' = ' || p_primary_key_value ||
430         ' FOR UPDATE OF ' || p_primary_key_name || ' NOWAIT'
431          INTO   l_object_version_number,
432                l_rowid;
433         IF NOT
434             (
435              (p_object_version_number IS NULL AND l_object_version_number IS NULL)
436              OR
437              (p_object_version_number IS NOT NULL AND
438               l_object_version_number IS NOT NULL AND
439               p_object_version_number = l_object_version_number
440              )
441             )
442         THEN
443             FND_MESSAGE.SET_NAME('LNS', 'LNS_API_RECORD_CHANGED');
444             FND_MESSAGE.SET_TOKEN('TABLE', p_table_name);
445             FND_MSG_PUB.ADD;
446             RAISE FND_API.G_EXC_ERROR;
447         END IF;
448 
449         x_object_version_number := nvl(l_object_version_number, 1) + 1;
450 
451     EXCEPTION WHEN NO_DATA_FOUND THEN
452         FND_MESSAGE.SET_NAME('LNS', 'LNS_API_NO_RECORD');
453         FND_MESSAGE.SET_TOKEN('RECORD', p_primary_key_name);
454         FND_MESSAGE.SET_TOKEN('VALUE', NVL(TO_CHAR(p_primary_key_value), 'null'));
455         FND_MSG_PUB.ADD;
456         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data  => x_msg_data);
457         x_return_status := FND_API.G_RET_STS_ERROR;
458         --RAISE FND_API.G_EXC_ERROR;
459     END getObjectVersion;
460 
461 
462 FUNCTION get_lookup_meaning (p_lookup_type  IN VARCHAR2,
463                              p_lookup_code  IN VARCHAR2)
464  RETURN VARCHAR2 IS
465 l_meaning lns_lookups.meaning%TYPE;
466 l_hash_value NUMBER;
467 
468 BEGIN
469   IF p_lookup_code IS NOT NULL AND
470      p_lookup_type IS NOT NULL THEN
471 
472     l_hash_value := DBMS_UTILITY.get_hash_value(
473                                          p_lookup_type||'@*?'||p_lookup_code,
474                                          1000,
475                                          25000);
476 
477     IF pg_lookups_rec.EXISTS(l_hash_value) THEN
478         l_meaning := pg_lookups_rec(l_hash_value);
479     ELSE
480 
481      SELECT meaning
482        INTO l_meaning
483        FROM lns_lookups
484       WHERE lookup_type = p_lookup_type
485         AND lookup_code = p_lookup_code ;
486 
487      pg_lookups_rec(l_hash_value) := l_meaning;
488 
489     END IF;
490 
491   END IF;
492 
493   return(l_meaning);
494 
495 EXCEPTION
496  WHEN no_data_found  THEN
497   return(null);
498  WHEN OTHERS THEN
499   raise;
500 END;
501 
502 function convertAmount(p_from_amount   in number
503                       ,p_from_currency in varchar2
504                       ,p_to_currency   in varchar2
505                       ,p_exchange_type in varchar2
506                       ,p_exchange_date in date
507                       ,p_exchange_rate in number) return number
508 is
509   l_rate_exists    varchar2(1);
510   l_rate           number;
511   l_convert_amount number;
512   l_to_currency    varchar2(10);
513   l_exchange_type  varchar2(25);
514   l_exchange_date  date;
515   l_precision      number;
516   l_api_name       varchar2(25);
517 
518   /* --Performance bug#4963583
519   cursor c_precision(p_to_currency varchar2) is
520   select fndc.precision
521       FROM gl_sets_of_books sb,
522            fnd_currencies fndc
523      WHERE sb.currency_code = fndc.currency_code
524        and fndc.currency_code = p_to_currency;
525   */
526   cursor c_precision(p_to_currency varchar2) is
527   select fndc.precision
528       FROM fnd_currencies fndc
529      WHERE fndc.currency_code = p_to_currency;
530 begin
531 
532   l_api_name := 'convertAmount';
533   logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_from_amount ' || p_from_amount);
534   logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_from_currency ' || p_from_currency);
535   logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_to_currency ' || p_to_currency);
536   logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_exchange_type ' || p_exchange_type);
537   logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_exchange_date ' || p_exchange_date);
538   logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_exchange_rate ' || p_exchange_rate);
539 
540   if p_to_currency is null then
541     SELECT sb.currency_code into l_to_currency
542       FROM lns_system_options so,
543            gl_sets_of_books sb
544     WHERE  sb.set_of_books_id = so.set_of_books_id;
545   else
546     l_to_currency := p_to_currency ;
547   end if;
548 
549   if p_exchange_date is null then
550      l_exchange_date := sysdate;
551   else
552      l_exchange_Date := p_exchange_date;
553   end if;
554 
555   if p_exchange_type = 'User' then
556     if p_exchange_rate is null then
557         l_convert_amount := -1;
558     else
559         open c_precision(p_to_currency) ;
560         fetch c_precision into l_precision;
561         close c_precision;
562         l_convert_amount := round(p_from_amount * p_exchange_rate, l_precision);
563     end if;
564 
565   else
566      l_exchange_type := p_exchange_type;
567      l_rate_exists := gl_currency_api.rate_exists(X_FROM_CURRENCY   => p_from_currency
568                                                  ,X_TO_CURRENCY     => l_to_currency
569                                                  ,X_CONVERSION_DATE => l_exchange_date
570                                                  ,X_CONVERSION_TYPE => p_exchange_type);
571       if l_rate_exists = 'Y' then
572       -- rate exists
573 
574         /*
575           l_rate := gl_currency_api.get_rate(X_FROM_CURRENCY   => p_from_currency,
576                                              X_TO_CURRENCY     => p_to_currency,
577                                              X_CONVERSION_DATE => p_exchange_date,
578                                              X_CONVERSION_TYPE => p_exchange_type);
579          */
580           logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_from_amount ' || p_from_amount);
581           logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_from_currency ' || p_from_currency);
582           logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - l_to_currency ' || l_to_currency);
583           logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - l_exchange_type ' || l_exchange_type);
584           logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_exchange_date ' || p_exchange_date);
585           logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - p_exchange_rate ' || p_exchange_rate);
586 
587           logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' - calling gl_currency API....');
588           l_convert_amount := gl_currency_api.convert_amount(X_FROM_CURRENCY   => p_from_currency
589                                                             ,X_TO_CURRENCY     => l_to_currency
590                                                             ,X_CONVERSION_DATE => l_exchange_date
591                                                             ,X_CONVERSION_TYPE => l_exchange_type
592                                                             ,X_AMOUNT          => p_from_amount);
593        else
594           return -1;
595 
596        end if;
597 
598   end if;
599 
600   return l_convert_amount;
601 
602 end convertAmount;
603 
604 /*=========================================================================
605 || PUBLIC FUNCTION convertRate
606 ||
607 || DESCRIPTION
608 ||
609 || Overview:  this function will return the rate between 2 currencies for a given date/type
610 ||
611 || Parameter: p_from_currency => currency 1
612 ||            p_to_currency   => currency 2
613 ||
614 ||
615 || Source Tables:  NA
616 ||
617 || Target Tables:  NA
618 ||
619 || Return value: boolean
620 ||
621 || KNOWN ISSUES
622 ||
623 || NOTES
624 ||
625 || MODIFICATION HISTORY
626 || Date                  Author            Description of Changes
627 || 12/01/2004 1:51PM     raverma           Created
628  *=======================================================================*/
629 function convertRate(p_from_currency in varchar
630                     ,p_to_currency   in varchar
631                     ,p_exchange_date in date
632                     ,p_exchange_type in varchar) return number
633 is
634      l_rate number;
635 begin
636 
637       begin
638       l_rate := gl_currency_api.get_rate(X_FROM_CURRENCY   => p_from_currency,
639                                          X_TO_CURRENCY     => p_to_currency,
640                                          X_CONVERSION_DATE => p_exchange_date,
641                                          X_CONVERSION_TYPE => p_exchange_type);
642       exception
643         WHEN GL_CURRENCY_API.NO_RATE  THEN
644             l_rate := -1;
645 
646         When others then
647             l_rate := -1;
648 
649       end;
650 
651       return l_rate;
652 end;
653 
654 
655 /*=========================================================================
656 || PUBLIC FUNCTION Check_PSA_Enabled_Org
657 ||
658 || DESCRIPTION
659 ||
660 || Overview:  this function will return true if MFAR implemented for org
661 ||
662 || Parameter: p_org_id
663 ||
664 || Source Tables:  NA
665 ||
666 || Target Tables:  NA
667 ||
668 || Return value: varchar2(1) 'Y' or 'N'
669 ||
670 || KNOWN ISSUES
671 ||
672 || NOTES
673 ||
674 || MODIFICATION HISTORY
675 || Date                  Author            Description of Changes
676 || 01/20/2005 4:51PM     karamach          Changed return type
677 || 12/01/2004 1:51PM     raverma           Created
678  *=======================================================================*/
679 function Check_PSA_Enabled_Org(p_org_id in number) return varchar2
680 is
681   l_mfar varchar2(10);
682   l_bool boolean := false;
683 
684 begin
685 /* 6-3-2005 raverma always return Y
686     l_bool := PSA_IMPLEMENTATION.get (p_org_id       => p_org_id
687                                      ,p_psa_feature  => 'MFAR'
688                                      ,p_enabled_flag => l_mfar);
689  */
690 --    if (l_bool) then
691 	    return 'Y';
692 --    end if;
693 
694 end Check_PSA_Enabled_Org;
695 
696 
697 /*=========================================================================
698 || PUBLIC FUNCTION IS_CREDIT_MANAGEMENT_INSTALLED
699 ||
700 || DESCRIPTION
701 ||
702 || Overview:  this function will return Y if OCM is installed
703 ||
704 || Parameter: none
705 ||
706 || Source Tables:  NA
707 ||
708 || Target Tables:  NA
709 ||
710 || Return value: varchar2(1) 'Y' or 'N'
711 ||
712 || KNOWN ISSUES
713 ||
714 || NOTES
715 ||
716 || MODIFICATION HISTORY
717 || Date                  Author            Description of Changes
718 || 07/24/2005 5:51PM     karamach          Created
719  *=======================================================================*/
720 function IS_CREDIT_MANAGEMENT_INSTALLED return varchar2
721 is
722   l_bool boolean := false;
723 
724 begin
725 
726     l_bool := AR_CMGT_CREDIT_REQUEST_API.IS_CREDIT_MANAGEMENT_INSTALLED;
727     if (l_bool) then
728 	    return 'Y';
729     end if;
730 
731 				return 'N';
732 
733 end IS_CREDIT_MANAGEMENT_INSTALLED;
734 
735 
736 /*=========================================================================
737 || PUBLIC FUNCTION Check_PSA_Enabled_Current_Org
738 ||
739 || DESCRIPTION
740 ||
741 || Overview:  this function will return true if MFAR implemented for current org
742 ||
743 || Parameter: None
744 ||
745 || Source Tables:  NA
746 ||
747 || Target Tables:  NA
748 ||
749 || Return value: varchar2(1) 'Y' or 'N'
750 ||
751 || KNOWN ISSUES
752 ||
753 || NOTES
754 ||
755 || MODIFICATION HISTORY
756 || Date                  Author            Description of Changes
757 || 03/02/2005 12:10PM     karamach          Created
758  *=======================================================================*/
759 function Check_PSA_Enabled_Current_Org return varchar2
760 is
761    l_org_id number;
762 begin
763 
764 /* 6-3-2005 raverma always return Y
765      select org_id into l_org_id
766        from lns_system_options;
767 
768     return Check_PSA_Enabled_Org(l_org_id);
769 */
770 		return 'Y';
771 
772 end Check_PSA_Enabled_Current_Org;
773 
774 
775 /*=========================================================================
776 || PUBLIC FUNCTION Check_PSA_Enabled_Loan
777 ||
778 || DESCRIPTION
779 ||
780 || Overview:  this function will return true if MFAR implemented for loan
781 ||
782 || Parameter: p_org_id
783 ||
784 || Source Tables:  NA
785 ||
786 || Target Tables:  NA
787 ||
788 || Return value: varchar2(1) 'Y' or 'N'
789 ||
790 || KNOWN ISSUES
791 ||
792 || NOTES
793 ||
794 || MODIFICATION HISTORY
795 || Date                  Author            Description of Changes
796 || 01/20/2005 4:51PM     karamach          Changed return type
797 || 12/01/2004 1:51PM     raverma           Created
798  *=======================================================================*/
799 function Check_PSA_Enabled_Loan(p_loan_id number) return varchar2
800 is
801    l_org_id number;
802 begin
803 
804 /* 6-3-2005 raverma always return Y
805      select org_id into l_org_id
806        from lns_loan_headers_all
807       where loan_id = p_loan_id;
808 
809     return Check_PSA_Enabled_Org(l_org_id);
810  */
811 	 return 'Y';
812 end Check_PSA_Enabled_Loan;
813 
814 /*=========================================================================
815 || PUBLIC FUNCTION Check_Desc_Flex_Setup
816 ||
817 || DESCRIPTION
818 ||
819 || Overview:  this function will return 'Y' if the desc flex implemented
820 ||
821 || Parameter: p_desc_flex_name
822 ||
823 || Source Tables:  NA
824 ||
825 || Target Tables:  NA
826 ||
827 || Return value: varchar2(1) 'Y' or 'N'
828 ||
829 || KNOWN ISSUES
830 ||
831 || NOTES
832 ||
833 || MODIFICATION HISTORY
834 || Date                  Author            Description of Changes
835 || 02/02/2004							     karamach           Created
836  *=======================================================================*/
837 function Check_Desc_Flex_Setup(p_desc_flex_name varchar2) return varchar2
838 is
839   l_bool boolean := false;
840 begin
841 
842     l_bool := FND_FLEX_APIS.is_descr_setup(
843     															x_application_id => 206,
844     															x_desc_flex_name => p_desc_flex_name);
845 
846     if (l_bool) then
847 					return 'Y';
848     end if;
849 
850     return 'N';
851 
852 end Check_Desc_Flex_Setup;
853 
854 
855 /*=========================================================================
856 || PUBLIC FUNCTION getDocumentName
857 ||
858 || DESCRIPTION
859 ||
860 || Overview:  this function will return the transaction type name for a
861 ||             document type 'PRIN', 'INT', 'FEE'
862 ||
863 || Parameter: p_line_type 'PRIN', 'INT', 'FEE'
864 ||
865 || Source Tables:  NA
866 ||
867 || Target Tables:  NA
868 ||
869 || Return value: periodic interest rate on the loan
870 ||
871 || KNOWN ISSUES
872 ||
873 || NOTES
874 ||
875 || MODIFICATION HISTORY
876 || Date                  Author            Description of Changes
877 || 10/06/2004 1:51PM     raverma           Created
878  *=======================================================================*/
879 function getDocumentName(p_line_type   in varchar2) return varchar2
880 
881 is
882     cursor c_document_type(p_type varchar2)
883     is
884       select tty.name
885         from ra_cust_trx_types tty
886              ,lns_system_options lso
887        where tty.cust_trx_type_id = decode(p_type, 'PRIN', lso.trx_type_id, 'INT', lso.interest_trx_type_id, 'FEE', lso.fee_trx_type_id);
888     l_name varchar2(20);
889 
890 begin
891 
892         OPEN c_document_type(p_line_type);
893         FETCH c_document_type INTO l_name;
894         close c_document_type;
895 
896         return l_name;
897 
898 exception
899          when no_data_found then
900             return(null);
901 end getDocumentName;
902 
903 
904 
905 FUNCTION Is_Loan_Manager_Role return VARCHAR2 IS
906 
907 l_loan_manager_flag VARCHAR2(1) ;
908 
909 BEGIN
910 
911 SELECT nvl(manager.manager_flag,'N') INTO l_loan_manager_flag
912 FROM
913 (SELECT
914 rol.manager_flag,rel.role_resource_id
915 FROM
916 jtf_rs_role_relations rel ,
917 jtf_rs_roles_b rol
918 WHERE rel.role_id = rol.role_id
919 and rel.delete_flag <> 'Y'
920 and sysdate between nvl(rel.start_date_active,sysdate) and nvl(rel.end_date_active,sysdate)
921 and rol.role_type_code = 'LOANS'
922 and rol.role_code = 'LOAN_MGR'
923 and rol.active_flag = 'Y') manager,
924 jtf_rs_resource_extns res
925 WHERE
926 manager.role_resource_id(+) = res.resource_id
927 and category = 'EMPLOYEE'
928 and res.start_date_active <= sysdate
929 and (res.end_date_active is null or res.end_date_active >= sysdate)
930 and res.user_id = fnd_global.user_id;
931 
932 return l_loan_manager_flag ;
933 
934 
935 END Is_Loan_Manager_Role ;
936 
937 FUNCTION IS_FED_FIN_ENABLED return VARCHAR2 IS
938 
939 l_fv_enabled_flag VARCHAR2(1) ;
940 l_org_id NUMBER ;
941 
942 BEGIN
943 
944     l_fv_enabled_flag := 'N' ;
945     BEGIN
946         SELECT org_id INTO l_org_id
947         FROM lns_system_options so ;
948 
949         l_fv_enabled_flag := IS_FED_FIN_ENABLED(l_org_id) ;
950 
951     EXCEPTION
952 	   WHEN NO_DATA_FOUND THEN
953 		l_fv_enabled_flag := 'N' ;
954 
955     END ;
956 
957 return l_fv_enabled_flag;
958 
959 END IS_FED_FIN_ENABLED ;
960 
961 -- Bug#14038266
962 FUNCTION IS_FED_FIN_ENABLED(p_org_id IN NUMBER) return VARCHAR2 IS
963 
964 l_fv_enabled_flag VARCHAR2(1) ;
965 
966 BEGIN
967 
968     l_fv_enabled_flag := 'N' ;
969     BEGIN
970         SELECT enable_budgetary_control_flag INTO l_fv_enabled_flag
971         FROM gl_ledgers gl, lns_system_options_all so
972         WHERE so.org_id = p_org_id
973         AND gl.ledger_id = so.set_of_books_id
974         AND fnd_profile.value('FV_ENABLED') = 'Y';
975 
976     EXCEPTION
977 	   WHEN NO_DATA_FOUND THEN
978 		l_fv_enabled_flag := 'N' ;
979 
980     END ;
981 
982 return l_fv_enabled_flag ;
983 
984 END IS_FED_FIN_ENABLED ;
985 
986 --This procedure refreshes the materialized view used for graphs
987 PROCEDURE refresh_mviews(ERRBUF                  OUT NOCOPY VARCHAR2
988                         ,RETCODE                 OUT NOCOPY VARCHAR2
989                         )
990 IS
991    l_api_name CONSTANT VARCHAR2(30) := 'REFRESH_MVIEWS';
992    l_entity_name CONSTANT VARCHAR2(30) := 'LNS_LOAN_DTLS_ALL_MV';
993 
994   --This cursor is used to check if the mv exists already
995   CURSOR Check_MV_Exists(p_mv_name VARCHAR2) IS
996   SELECT MVIEW_NAME,COMPILE_STATE
997   FROM USER_MVIEWS
998   WHERE MVIEW_NAME = p_mv_name;
999 
1000   --This is used for the cursor Check_MV_Exists
1001   l_mv_name 		VARCHAR2(200);
1002   l_compile_state	VARCHAR2(200);
1003   l_return    boolean;
1004 BEGIN
1005 
1006   logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' :BEGIN');
1007 
1008   OPEN Check_MV_Exists(l_entity_name);
1009   FETCH Check_MV_Exists INTO l_mv_name,l_compile_state;
1010   CLOSE Check_MV_Exists;
1011 
1012   if (l_mv_name is not null) then
1013 
1014     fnd_file.put_line(FND_FILE.LOG,
1015 		'Begin dbms_mview.refresh call to refresh data in '|| l_entity_name);
1016     dbms_mview.refresh(l_entity_name, 'C', '', TRUE, FALSE, 0,0,0, TRUE);
1017 
1018     fnd_file.put_line(FND_FILE.LOG,
1019 		'Completed dbms_mview.refresh call to refresh data in '|| l_entity_name);
1020 
1021     --This statement added as workaround for bug#2695199/2639679
1022     --MATERIALIZED VIEWS BECOME INVALID AFTER ALTER OR REFRESH
1023     if (l_compile_state <> 'VALID') then
1024        execute immediate
1025          ' alter materialized view '||l_entity_name||' compile';
1026     end if; --if (l_compile_state <> 'VALID') then
1027 
1028   else
1029 
1030   	logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' : Materialized View '|| l_entity_name || 'NOT FOUND - nothing to refresh');
1031          fnd_file.put_line(FND_FILE.LOG,
1032                 'Materialized View '|| l_entity_name || 'NOT FOUND - nothing to refresh');
1033          fnd_file.put_line(FND_FILE.LOG,
1034                 'Exiting program without performing any action');
1035         RETCODE := 'E';
1036 	ERRBUF := 'Materialized View '|| l_entity_name || 'NOT FOUND - nothing to refresh';
1037         l_return := FND_CONCURRENT.SET_COMPLETION_STATUS(
1038                         status => 'ERROR',
1039                         message => 'Materialized View Refresh has failed. Please review log file.');
1040 
1041   end if; --if (l_mv_name is not null) then
1042 
1043   logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' :END');
1044 
1045 EXCEPTION
1046      when others then
1047 	fnd_file.put_line(FND_FILE.LOG,
1048 			'Exception in refreshing MVs: '||sqlerrm);
1049         RETCODE := 'E';
1050         ERRBUF := 'Exception in refreshing MVs: '||sqlerrm;
1051         l_return := FND_CONCURRENT.SET_COMPLETION_STATUS(
1052                         status => 'ERROR',
1053                         message => 'Materialized View Refresh has failed. Please review log file.');
1054 	--raise;
1055 END refresh_mviews;
1056 
1057 --This function checks if a concurrent program request is pending/running
1058 --Returns 'N' if there are no pending/running requests for the conc program
1059 FUNCTION is_concurrent_request_pending
1060   (p_application_short_name  IN VARCHAR2,
1061    p_concurrent_program_name IN VARCHAR2)
1062 RETURN varchar2
1063 IS
1064    l_api_name     CONSTANT VARCHAR2(30) := 'IS_CONCURRENT_REQUEST_PENDING';
1065    l_is_pending  Varchar2(1);
1066    l_request_id NUMBER;
1067    CURSOR C_CHECK_CP_REQ IS
1068    select request_id
1069           FROM fnd_concurrent_requests fcr,
1070                fnd_concurrent_programs fcp,
1071                fnd_application fa
1072           WHERE fa.application_short_name = p_application_short_name
1073           AND fcp.application_id = fa.application_id
1074           AND fcp.concurrent_program_name = p_concurrent_program_name
1075           AND fcr.program_application_id = fcp.application_id
1076           AND fcr.concurrent_program_id  = fcp.concurrent_program_id
1077           --AND fcr.status_code in ('I', 'Q', 'R') --fnd_lookups CP_STATUS_CODE
1078           AND fcr.phase_code <> 'C' --fnd_lookups CP_PHASE_CODE
1079           AND ROWNUM = 1;
1080 
1081 BEGIN
1082    l_is_pending := 'N';
1083 
1084    logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' :BEGIN');
1085 
1086    open C_CHECK_CP_REQ;
1087    fetch C_CHECK_CP_REQ into l_request_id;
1088    close C_CHECK_CP_REQ;
1089 
1090    if (l_request_id IS NOT NULL) then
1091 	l_is_pending := 'Y';
1092    end if;
1093 
1094    logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' :END');
1095 
1096    return l_is_pending;
1097 
1098 END is_concurrent_request_pending;
1099 
1100 
1101 --This function checks if the given user is a valid Customer Contact or not.
1102 
1103 FUNCTION IS_CUSTOMER_CONTACT(p_fnd_user_id IN NUMBER) return VARCHAR2 IS
1104 
1105 l_customer_contact_flag VARCHAR2(1) ;
1106 l_api_name CONSTANT VARCHAR2(30) := 'IS_CUSTOMER_CONTACT';
1107 
1108 BEGIN
1109 	logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' :BEGIN');
1110 	l_customer_contact_flag := 'N' ;
1111 
1112         SELECT 'Y' INTO l_customer_contact_flag
1113         FROM hz_parties party, fnd_user fnduser
1114         WHERE party.party_type = 'PARTY_RELATIONSHIP'
1115         AND party.status ='A'
1116         AND fnduser.customer_id = party.party_id
1117 	AND fnduser.user_id = p_fnd_user_id;
1118 
1119 logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' :END');
1120 return l_customer_contact_flag ;
1121 EXCEPTION
1122 	WHEN NO_DATA_FOUND THEN
1123 		l_customer_contact_flag := 'N' ;
1124 
1125 
1126 return l_customer_contact_flag ;
1127 
1128 END IS_CUSTOMER_CONTACT ;
1129 
1130 
1131 
1132 --This function returns the number of loans to which a given user has access to
1133 
1134 FUNCTION CUSTOMER_CONTACT_LOANS_COUNT
1135 	(p_fnd_user_id IN NUMBER
1136 	,p_org_id IN NUMBER
1137 	,p_borrower_id IN NUMBER) return NUMBER IS
1138 
1139 l_fnd_user_id NUMBER;
1140 l_number_of_loans NUMBER;
1141 l_subject_id NUMBER;
1142 l_api_name CONSTANT VARCHAR2(30) := 'CUSTOMER_CONTACT_LOANS_COUNT';
1143 l_org_id NUMBER;
1144 BEGIN
1145     logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' :BEGIN');
1146     logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, ' ORGID - ' || p_org_id);
1147     logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, ' FND_USER_ID - ' || p_fnd_user_id);
1148     l_number_of_loans := 0 ;
1149     l_fnd_user_id := p_fnd_user_id;
1150     l_subject_id := -1;
1151     l_org_id := p_org_id;
1152 
1153 
1154 	SELECT person_party_id INTO l_subject_id
1155 	FROM hz_parties party, fnd_user fnduser
1156 	WHERE party.party_type = 'PARTY_RELATIONSHIP'
1157 	AND party.status ='A'
1158 	AND fnduser.customer_id = party.party_id
1159 	AND fnduser.user_id = l_fnd_user_id;
1160 
1161 	logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, ' Subject_ID - ' || l_subject_id);
1162 
1163 	SELECT count(participant.loan_id) INTO l_number_of_loans
1164 	FROM lns_participants participant, LNS_LOAN_HEADERS_ALL header
1165 	WHERE participant.loan_participant_type in ('PRIMARY_BORROWER','COBORROWER','GUARANTOR')
1166 	AND participant.loan_id = header.loan_id
1167 	AND header.org_id = l_org_id
1168 	AND -- participant.hz_party_id in
1169 	participant.loan_id in (SELECT loan_id FROM lns_participants p
1170 	    where p.hz_party_id
1171 	    in
1172 	    (SELECT party_id FROM hz_parties
1173 	      WHERE party_id in
1174 	         (SELECT object_id FROM hz_relationships
1175 		  WHERE subject_id = l_subject_id
1176 		  AND start_date <= sysdate
1177 		  AND ((end_date IS null) or (end_date>=sysdate)))
1178 	     )
1179 	    )
1180 	AND nvl(participant.access_level,decode(participant.loan_participant_type,'PRIMARY_BORROWER',fnd_profile.value('LNS_BORR_ACCESS_LEVEL'),
1181 								 'COBORROWER',fnd_profile.value('LNS_COBORR_ACCESS_LEVEL'),
1182                                                                  'GUARANTOR',fnd_profile.value('LNS_GUAR_ACCESS_LEVEL'))) <> 'NO_ACCESS'
1183 	AND header.loan_status in ('INCOMPLETE','ACTIVE', 'APPROVED', 'DEFAULT', 'DELINQUENT', 'IN_FUNDING', 'PAIDOFF', 'PENDING_CANCELLATION')
1184 	AND participant.hz_party_id = p_borrower_id;
1185 
1186 	logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME,' Loan Count - ' || l_number_of_loans);
1187 	logMessage(FND_LOG.LEVEL_PROCEDURE, G_PKG_NAME, l_api_name || ' :END');
1188 
1189 	return l_number_of_loans ;
1190     EXCEPTION
1191 	   WHEN NO_DATA_FOUND THEN
1192 		l_number_of_loans := 0 ;
1193 	return l_number_of_loans ;
1194 
1195 END CUSTOMER_CONTACT_LOANS_COUNT ;
1196 
1197 /*============================================================================
1198  |  PUBLIC FUNCTION  IS_ENCUM_FIN_ENABLED
1199  |
1200  |  DESCRIPTION
1201  |       It is a function that returns varchar2 as Y/N. 'Y' if encumbrance is
1202  |       enabled, 'N' otherwise
1203  |
1204  |  PARAMETERS
1205  |
1206  |
1207  |  NOTE
1208  |
1209  |  MODIFICATION HISTORY
1210  |  Date            Author             Description of Change
1211  |  13-JUL-2010     MBOLLI    Bug#10126147
1212  |
1213  *==========================================================================*/
1214 
1215 
1216 FUNCTION IS_ENCUM_FIN_ENABLED return VARCHAR2 IS
1217 
1218 l_encum_enabled_flag VARCHAR2(1) ;
1219 l_org_id NUMBER ;
1220 
1221 BEGIN
1222 
1223     l_encum_enabled_flag := 'N' ;
1224     BEGIN
1225         SELECT org_id INTO l_org_id
1226         FROM lns_system_options so ;
1227 
1228         l_encum_enabled_flag := IS_ENCUM_FIN_ENABLED(l_org_id) ;
1229 
1230     EXCEPTION
1231 	   WHEN NO_DATA_FOUND THEN
1232 		l_encum_enabled_flag := 'N' ;
1233 
1234     END ;
1235 
1236     return l_encum_enabled_flag;
1237 
1238 END IS_ENCUM_FIN_ENABLED ;
1239 
1240 
1241 
1242 
1243 /*============================================================================
1244  |  PUBLIC FUNCTION  IS_ENCUM_FIN_ENABLED
1245  |
1246  |  DESCRIPTION
1247  |       It is a function that returns varchar2 as Y/N. 'Y' if encumbrance is
1248  |       enabled, 'N' otherwise
1249  |
1250  |  PARAMETERS
1251  |                P_ORG_ID - Organization Id for which to check the encumbrance
1252  |                            enabled
1253  |
1254  |  NOTE
1255  |
1256  |  MODIFICATION HISTORY
1257  |  Date            Author             Description of Change
1258  |  13-JUL-2010     MBOLLI    Bug#10126147
1259  |  15-May-2012     MBOLLI    Bug#14038266 - Remove the SLAM as criteria to check
1260  |                             whether ledger is encumbrance enabeld or not
1261  |
1262  *==========================================================================*/
1263 
1264 
1265 
1266 FUNCTION IS_ENCUM_FIN_ENABLED (p_org_id IN NUMBER)
1267   RETURN VARCHAR2 IS
1268 
1269   l_encum_enabled_flag  VARCHAR2(1);
1270 
1271 
1272 BEGIN
1273 
1274 
1275   BEGIN
1276 
1277   /*
1278     SELECT nvl(purch_encumbrance_flag,'N')
1279       INTO l_encum_enabled_flag
1280       FROM FINANCIALS_SYSTEM_PARAMS_ALL
1281       WHERE org_id = p_org_id;  -- Bug 5487757
1282 
1283 
1284 
1285      IF (p_org_id = 1448) THEN
1286 	l_encum_enabled_flag := 'Y';
1287      END IF;
1288 
1289       */
1290 
1291         SELECT enable_budgetary_control_flag INTO l_encum_enabled_flag
1292         FROM gl_ledgers gl, lns_system_options_all so
1293         WHERE so.org_id = p_org_id
1294         AND gl.ledger_id = so.set_of_books_id
1295         AND fnd_profile.value('LNS_ENCUMBRANCE_ENABLE') = 'Y';
1296 
1297 
1298 
1299   EXCEPTION
1300     WHEN NO_DATA_FOUND THEN
1301       l_encum_enabled_flag := 'N';
1302   END;
1303 
1304   return l_encum_enabled_flag;
1305 
1306 END IS_ENCUM_FIN_ENABLED;
1307 
1308 
1309 END LNS_UTILITY_PUB;