DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_CALENDAR_PUB

Source


1 PACKAGE BODY BSC_CALENDAR_PUB AS
2 /* $Header: BSCPCALB.pls 120.4 2007/12/18 06:49:19 lbodired ship $ */
3 /*
4 REM +=======================================================================+
5 REM |    Copyright (c) 2004 Oracle Corporation, Redwood Shores, CA, USA     |
6 REM |                         All rights reserved.                          |
7 REM +=======================================================================+
8 REM | FILENAME                                                              |
9 REM |     BSCPCALB.pls                                                      |
10 REM |                                                                       |
11 REM | DESCRIPTION                                                           |
12 REM |     Module: Public package for populating the calendar  tables        |
13 REM | NOTES                                                                 |
14 REM | 07-JUN-2005 Krishna  Created.                                         |
15 REM | 31-AUG-2005 Aditya Rao fixed Bug#4565308 for START_DAY of fiscal year |
16 REM | 29-NOV-2005 Krishna Modified for enh#4711274                          |
17 REM | 06-JUL-07 psomesul  Bug#6168487 - CHANGING CALENDAR DEF WHICH IS IN PRODUCTION IS NOT TRIGGERING  TO USER |
18 REM +=======================================================================+
19 */
20 
21 G_PKG_NAME CONSTANT VARCHAR2(30):='BSC_CALENDAR_PUB';
22 
23 FISCAL_YEAR_CHANGE  NUMBER := 0;
24 --The following three APIs are used to call BIA populate canlednars
25 --in different phases
26 --For every calendar we create we create dimension also
27 PROCEDURE Create_Calendar_Dimension
28 ( p_Api_Version            IN          NUMBER
29 , p_Commit                 IN          VARCHAR2
30 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
31 , x_Return_Status          OUT NOCOPY  VARCHAR2
32 , x_Msg_Count              OUT NOCOPY  NUMBER
33 , x_Msg_Data               OUT NOCOPY  VARCHAR2
34 );
35 
36 PROCEDURE Update_Calendar_Dimension
37 ( p_Api_Version            IN          NUMBER
38 , p_Commit                 IN          VARCHAR2
39 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
40 , x_Return_Status          OUT NOCOPY  VARCHAR2
41 , x_Msg_Count              OUT NOCOPY  NUMBER
42 , x_Msg_Data               OUT NOCOPY  VARCHAR2
43 );
44 
45 PROCEDURE Change_Fiscal_Year
46 IS
47 BEGIN
48   FISCAL_YEAR_CHANGE := 1;
49 END Change_Fiscal_Year;
50 
51 FUNCTION  Get_Fiscal_Year
52 RETURN NUMBER IS
53 BEGIN
54   RETURN FISCAL_YEAR_CHANGE;
55 END Get_Fiscal_Year;
56 
57 PROCEDURE Create_Calendar
58 ( p_Api_Version            IN          NUMBER
59 , p_Commit                 IN          VARCHAR2
60 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
61 , x_Return_Status          OUT NOCOPY  VARCHAR2
62 , x_Msg_Count              OUT NOCOPY  NUMBER
63 , x_Msg_Data               OUT NOCOPY  VARCHAR2
64 )IS
65 l_Calendar_Record BSC_CALENDAR_PUB.Calendar_Type_Record;
66 BEGIN
67   SAVEPOINT CreateCalendarPubSP;
68   FND_MSG_PUB.Initialize;
69   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
70 
71   BSC_CALENDAR_PUB.Validate_Calendar_Action
72   ( p_Api_Version      => p_Api_Version
73   , p_Commit           => p_Commit
74   , p_Calendar_Record  => p_Calendar_Record
75   , p_Action           => BSC_PERIODS_UTILITY_PKG.C_CREATE
76   , x_Return_Status    => x_Return_Status
77   , x_Msg_Count        => x_Msg_Count
78   , x_Msg_Data         => x_Msg_Data
79   );
80   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
81     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
82   END IF;
83 
84   BSC_CALENDAR_PUB.Fill_Default_Values_Create_Cal
85   ( p_Api_Version      => p_Api_Version
86   , p_Commit           => p_Commit
87   , p_Calendar_Record  => p_Calendar_Record
88   , x_Calendar_Record  => l_Calendar_Record
89   , x_Return_Status    => x_Return_Status
90   , x_Msg_Count        => x_Msg_Count
91   , x_Msg_Data         => x_Msg_Data
92   );
93   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
94     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
95   END IF;
96 
97   BSC_CALENDAR_PVT.Create_Calendar
98   ( p_Api_Version      => p_Api_Version
99   , p_Commit           => p_Commit
100   , p_Calendar_Record  => l_Calendar_Record
101   , x_Return_Status    => x_Return_Status
102   , x_Msg_Count        => x_Msg_Count
103   , x_Msg_Data         => x_Msg_Data
104   );
105   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
106     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
107   END IF;
108 
109   BSC_CALENDAR_PUB.Create_Calendar_Dimension
110   ( p_Api_Version      => p_Api_Version
111   , p_Commit           => p_Commit
112   , p_Calendar_Record  => l_Calendar_Record
113   , x_Return_Status    => x_Return_Status
114   , x_Msg_Count        => x_Msg_Count
115   , x_Msg_Data         => x_Msg_Data
116   );
117   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
118     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
119   END IF;
120 
121   BSC_CALENDAR_PUB.Create_Calendar_Post_Action
122   ( p_Api_Version      => p_Api_Version
123   , p_Commit           => p_Commit
124   , p_Calendar_Record  => l_Calendar_Record
125   , x_Return_Status    => x_Return_Status
126   , x_Msg_Count        => x_Msg_Count
127   , x_Msg_Data         => x_Msg_Data
128   );
129   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
130     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
131   END IF;
132 
133   IF ((p_Commit IS NOT NULL) AND (p_Commit = FND_API.G_TRUE)) THEN
134     COMMIT;
135   END IF;
136 
137 EXCEPTION
138   WHEN FND_API.G_EXC_ERROR THEN
139     ROLLBACK TO CreateCalendarPubSP;
140     IF (x_msg_data IS NULL) THEN
141       FND_MSG_PUB.Count_And_Get
142       ( p_encoded   =>  FND_API.G_FALSE
143       , p_count     =>  x_msg_count
144       , p_data      =>  x_msg_data
145       );
146     END IF;
147     x_return_status :=  FND_API.G_RET_STS_ERROR;
148   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
149     ROLLBACK TO CreateCalendarPubSP;
150     IF (x_msg_data IS NULL) THEN
151       FND_MSG_PUB.Count_And_Get
152       ( p_encoded   =>  FND_API.G_FALSE
153       , p_count     =>  x_msg_count
154       , p_data      =>  x_msg_data
155       );
156     END IF;
157     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
158   WHEN NO_DATA_FOUND THEN
159     ROLLBACK TO CreateCalendarPubSP;
160     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
161     IF (x_msg_data IS NOT NULL) THEN
162       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Create_Calendar ';
163     ELSE
164       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Create_Calendar ';
165     END IF;
166   WHEN OTHERS THEN
167     ROLLBACK TO CreateCalendarPubSP;
168     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
169     IF (x_msg_data IS NOT NULL) THEN
170       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Create_Calendar ';
171     ELSE
172       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Create_Calendar ';
173     END IF;
174 END Create_Calendar;
175 
176 /*****************************************************************************************/
177 
178 PROCEDURE Update_Calendar
179 ( p_Api_Version            IN          NUMBER
180 , p_Commit                 IN          VARCHAR2
181 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
182 , x_Return_Status          OUT NOCOPY  VARCHAR2
183 , x_Msg_Count              OUT NOCOPY  NUMBER
184 , x_Msg_Data               OUT NOCOPY  VARCHAR2
185 )IS
186 l_Calendar_Record BSC_CALENDAR_PUB.Calendar_Type_Record;
187 l_Fiscal_Year       BSC_SYS_CALENDARS_B.FISCAL_YEAR%TYPE;
188 l_Start_Month       BSC_SYS_CALENDARS_B.START_MONTH%TYPE;
189 l_Start_Day         BSC_SYS_CALENDARS_B.START_DAY%TYPE;
190 l_Calendar_Old_Name BSC_SYS_CALENDARS_TL.NAME%TYPE;
191 BEGIN
192   SAVEPOINT UpdateCalendarPubSP;
193   FND_MSG_PUB.Initialize;
194   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
195 
196   SELECT fiscal_year
197         ,start_month
198         ,start_day
199         ,name
200   INTO   l_Fiscal_Year
201         ,l_Start_Month
202         ,l_Start_Day
203         ,l_Calendar_Old_Name
204   FROM   bsc_sys_calendars_vl
205   WHERE  calendar_id = p_Calendar_Record.Calendar_Id;
206 
207   -- added for Bug#4565308
208   IF((l_Fiscal_Year <> p_Calendar_Record.Fiscal_Year)
209       OR (l_Start_Month <> p_Calendar_Record.Start_Month)
210       OR (l_Start_Day <> p_Calendar_Record.Start_Day)) THEN
211     Change_Fiscal_Year();
212   END IF;
213 
214   BSC_CALENDAR_PUB.Validate_Calendar_Action
215   ( p_Api_Version      => p_Api_Version
216   , p_Commit           => p_Commit
217   , p_Calendar_Record  => p_Calendar_Record
218   , p_Action           => BSC_PERIODS_UTILITY_PKG.C_UPDATE
219   , x_Return_Status    => x_Return_Status
220   , x_Msg_Count        => x_Msg_Count
221   , x_Msg_Data         => x_Msg_Data
222   );
223   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
224     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
225   END IF;
226 
227   BSC_CALENDAR_PUB.Retrieve_And_Populate_Cal_Rec
228   ( p_Api_Version      => p_Api_Version
229   , p_Commit           => p_Commit
230   , p_Calendar_Record  => p_Calendar_Record
231   , x_Calendar_Record  => l_Calendar_Record
232   , x_Return_Status    => x_Return_Status
233   , x_Msg_Count        => x_Msg_Count
234   , x_Msg_Data         => x_Msg_Data
235   );
236   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
237     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
238   END IF;
239 
240   BSC_CALENDAR_PVT.Update_Calendar
241   ( p_Api_Version      => p_Api_Version
242   , p_Commit           => p_Commit
243   , p_Calendar_Record  => l_Calendar_Record
244   , x_Return_Status    => x_Return_Status
245   , x_Msg_Count        => x_Msg_Count
246   , x_Msg_Data         => x_Msg_Data
247   );
248   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
249     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
250   END IF;
251 
252   BSC_CALENDAR_PUB.Update_Calendar_Dimension
253   ( p_Api_Version      => p_Api_Version
254   , p_Commit           => p_Commit
255   , p_Calendar_Record  => l_Calendar_Record
256   , x_Return_Status    => x_Return_Status
257   , x_Msg_Count        => x_Msg_Count
258   , x_Msg_Data         => x_Msg_Data
259   );
260   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
261     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
262   END IF;
263 
264   IF(UPPER(LTRIM(RTRIM(p_Calendar_Record.Name))) <> UPPER(LTRIM(RTRIM(l_Calendar_Old_Name)))) THEN
265     BSC_CALENDAR_PVT.Update_PeriodNames_In_Calendar
266     ( p_Calendar_Id        => p_Calendar_Record.Calendar_Id
267     , x_Return_Status      => x_Return_Status
268     , x_Msg_Count          => x_Msg_Count
269     , x_Msg_Data           => x_Msg_Data
270     );
271     IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
272       RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
273     END IF;
274   END IF;
275 
276   BSC_CALENDAR_PUB.Update_Calendar_Post_Action
277   ( p_Api_Version      => p_Api_Version
278   , p_Commit           => p_Commit
279   , p_Calendar_Record  => l_Calendar_Record
280   , x_Return_Status    => x_Return_Status
281   , x_Msg_Count        => x_Msg_Count
282   , x_Msg_Data         => x_Msg_Data
283   );
284   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
285     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
286   END IF;
287 
288   IF ((p_Commit IS NOT NULL) AND (p_Commit = FND_API.G_TRUE)) THEN
289     COMMIT;
290   END IF;
291 
292 EXCEPTION
293   WHEN FND_API.G_EXC_ERROR THEN
294     ROLLBACK TO UpdateCalendarPubSP;
295     IF (x_msg_data IS NULL) THEN
296       FND_MSG_PUB.Count_And_Get
297       ( p_encoded   =>  FND_API.G_FALSE
298       , p_count     =>  x_msg_count
299       , p_data      =>  x_msg_data
300       );
301     END IF;
302     x_return_status :=  FND_API.G_RET_STS_ERROR;
303   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
304     ROLLBACK TO UpdateCalendarPubSP;
305     IF (x_msg_data IS NULL) THEN
306       FND_MSG_PUB.Count_And_Get
307       ( p_encoded   =>  FND_API.G_FALSE
308       , p_count     =>  x_msg_count
309       , p_data      =>  x_msg_data
310       );
311     END IF;
312     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
313   WHEN NO_DATA_FOUND THEN
314     ROLLBACK TO UpdateCalendarPubSP;
315     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
316     IF (x_msg_data IS NOT NULL) THEN
317       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Update_Calendar ';
318     ELSE
319       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Update_Calendar ';
320     END IF;
321   WHEN OTHERS THEN
322     ROLLBACK TO UpdateCalendarPubSP;
323     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
324     IF (x_msg_data IS NOT NULL) THEN
325       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Update_Calendar ';
326     ELSE
327       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Update_Calendar ';
328     END IF;
329 END Update_Calendar;
330 
331 
332 
333 /****************************************************************************************/
334 PROCEDURE Delete_Calendar
335 ( p_Api_Version            IN          NUMBER
336 , p_Commit                 IN          VARCHAR2
337 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
338 , x_Return_Status          OUT NOCOPY  VARCHAR2
339 , x_Msg_Count              OUT NOCOPY  NUMBER
340 , x_Msg_Data               OUT NOCOPY  VARCHAR2
341 )IS
342 CURSOR C_Periodicity_ShortNames IS
343 SELECT short_name
344 FROM   bsc_sys_periodicities
345 WHERE  calendar_id = p_Calendar_Record.Calendar_Id;
346 
347 CURSOR C_Per_Views IS
348 SELECT B.level_values_view_name
349 FROM   bsc_sys_periodicities P,
350        bis_levels        B
351 WHERE  b.short_name = P.short_name
352 AND    P.calendar_id = p_Calendar_Record.Calendar_Id
353 AND    P.db_column_name IS NOT NULL;
354 
355 CURSOR C_Clendar_ShortName IS
356 SELECT short_name
357 FROM   bsc_sys_calendars_b
358 WHERE  calendar_id = p_Calendar_Record.Calendar_Id;
359 
360 l_Views_Array     varchar2_tabletype;
361 l_Comma_Per_ShortNames  VARCHAR2(32000);
362 l_Calendar_ShortName    BSC_SYS_CALENDARS_B.SHORT_NAME%TYPE;
363 l_DimObj_ViewName       BIS_LEVELS.LEVEL_VALUES_VIEW_NAME%TYPE;
364 l_count                NUMBER;
365 
366 BEGIN
367   SAVEPOINT DeleteCalendarPubSP;
368   FND_MSG_PUB.Initialize;
369   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
370 
371   BSC_CALENDAR_PUB.Validate_Calendar_Action
372   ( p_Api_Version      => p_Api_Version
373   , p_Commit           => p_Commit
374   , p_Calendar_Record  => p_Calendar_Record
375   , p_Action           => BSC_PERIODS_UTILITY_PKG.C_DELETE
376   , x_Return_Status    => x_Return_Status
377   , x_Msg_Count        => x_Msg_Count
378   , x_Msg_Data         => x_Msg_Data
379   );
380   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
381     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
382   END IF;
383 
384   FOR CCAL IN C_Clendar_ShortName LOOP
385     l_Calendar_ShortName := CCAL.short_name;
386   END LOOP;
387 
388   FOR CD IN C_Periodicity_ShortNames LOOP
389     IF(l_Comma_Per_ShortNames IS NULL) THEN
390       l_Comma_Per_ShortNames := CD.short_name;
391     ELSE
392       l_Comma_Per_ShortNames := l_Comma_Per_ShortNames || ','||CD.short_name;
393     END IF;
394   END LOOP;
395 
396   l_count := 0;
397   FOR CViews IN C_Per_Views  LOOP
398       l_count := l_count + 1;
399       l_Views_Array(l_count) := CViews.level_values_view_name;
400   END LOOP;
401 
402   BSC_BIS_DIMENSION_PUB.UnAssign_Dimension_Objects
403   ( p_commit               => p_Commit
404   , p_dim_short_name       => l_Calendar_ShortName
405   , p_dim_obj_short_names  => l_Comma_Per_ShortNames
406   , p_time_stamp           => NULL
407   , x_return_status        => x_Return_Status
408   , x_msg_count            => x_Msg_Count
409   , x_msg_data             => x_Msg_Data
410   );
411   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
412     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
413   END IF;
414 
415   --Delete dimension objects corresponding to periodicities
416   FOR CPER in C_Periodicity_ShortNames LOOP
417     BSC_BIS_DIM_OBJ_PUB.Delete_Dim_Object
418     ( p_commit              => p_commit
419     , p_dim_obj_short_name  => CPER.short_name
420     , x_return_status       => x_Return_Status
421     , x_msg_count           => x_Msg_Count
422     , x_msg_data            => x_Msg_Data
423     );
424     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
425       RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
426     END IF;
427   END LOOP;
428   --Delete dimension corresponding to calendar
429   BSC_BIS_DIMENSION_PUB.Delete_Dimension
430   ( p_commit          => p_commit
431   , p_dim_short_name  => l_Calendar_ShortName
432   , x_return_status   => x_Return_Status
433   , x_msg_count       => x_Msg_Count
434   , x_msg_data        => x_Msg_Data
435   );
436   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
437     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
438   END IF;
439   --Delete calendar
440   BSC_CALENDAR_PVT.Delete_Calendar
441   ( p_Api_Version      => p_Api_Version
442   , p_Commit           => p_Commit
443   , p_Calendar_Record  => p_Calendar_Record
444   , x_Return_Status    => x_Return_Status
445   , x_Msg_Count        => x_Msg_Count
446   , x_Msg_Data         => x_Msg_Data
447   );
448   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
449     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
450   END IF;
451 
452 
453   FOR index_loop IN 1..l_count LOOP
454     l_DimObj_ViewName := l_Views_Array(index_loop);
455     IF(l_DimObj_ViewName IS NOT NULL) THEN
456       BSC_PERIODS_PUB.Drop_Periodicity_View
457       ( p_Periodicity_View  => l_DimObj_ViewName
458       , x_Return_Status     => x_Return_Status
459       , x_Msg_Count         => x_Msg_Count
460       , x_Msg_Data          => x_Msg_Data
461       );
462       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
463         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
464       END IF;
465     END IF;
466   END LOOP;
467   IF ((p_Commit IS NOT NULL) AND (p_Commit = FND_API.G_TRUE)) THEN
468     COMMIT;
469   END IF;
470 
471 EXCEPTION
472   WHEN FND_API.G_EXC_ERROR THEN
473     ROLLBACK TO DeleteCalendarPubSP;
474     IF (x_msg_data IS NULL) THEN
475       FND_MSG_PUB.Count_And_Get
476       ( p_encoded   =>  FND_API.G_FALSE
477       , p_count     =>  x_msg_count
478       , p_data      =>  x_msg_data
479       );
480     END IF;
481     x_return_status :=  FND_API.G_RET_STS_ERROR;
482   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
483     ROLLBACK TO DeleteCalendarPubSP;
484     IF (x_msg_data IS NULL) THEN
485       FND_MSG_PUB.Count_And_Get
486       ( p_encoded   =>  FND_API.G_FALSE
487       , p_count     =>  x_msg_count
488       , p_data      =>  x_msg_data
489       );
490     END IF;
491     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
492   WHEN NO_DATA_FOUND THEN
493     ROLLBACK TO DeleteCalendarPubSP;
494     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
495     IF (x_msg_data IS NOT NULL) THEN
496       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Delete_Calendar ';
497     ELSE
498       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Delete_Calendar ';
499     END IF;
500   WHEN OTHERS THEN
501     ROLLBACK TO DeleteCalendarPubSP;
502     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
503     IF (x_msg_data IS NOT NULL) THEN
504       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Delete_Calendar ';
505     ELSE
506       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Delete_Calendar ';
507     END IF;
508 END Delete_Calendar;
509 
510 /***********************************************************************************/
511 
512 PROCEDURE Validate_Calendar_Action
513 ( p_Api_Version            IN          NUMBER
514 , p_Commit                 IN          VARCHAR2
515 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
516 , p_Action                 IN          VARCHAR2
517 , x_Return_Status          OUT NOCOPY  VARCHAR2
518 , x_Msg_Count              OUT NOCOPY  NUMBER
519 , x_Msg_Data               OUT NOCOPY  VARCHAR2
520 )IS
521 l_count             NUMBER := 0;
522 l_Objective_Names   VARCHAR2(32000);
523 l_Calendar_Name     BSC_SYS_CALENDARS_TL.NAME%TYPE;
524 
525 CURSOR C_Objectives IS
526 SELECT k.name
527 FROM   bsc_kpis_vl K
528 WHERE  K.calendar_id = p_Calendar_Record.Calendar_Id;
529 
530 
531 BEGIN
532 
533   FND_MSG_PUB.Initialize;
534   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
535   IF(p_Action = BSC_PERIODS_UTILITY_PKG.C_CREATE OR p_Action = BSC_PERIODS_UTILITY_PKG.C_UPDATE) THEN
536     IF(BIS_UTILITIES_PVT.Value_Missing_Or_Null(p_Calendar_Record.Name) = FND_API.G_TRUE) THEN
537       FND_MESSAGE.SET_NAME('BSC','BSC_CALENDAR_NAME_NULL');
538       FND_MSG_PUB.ADD;
539       RAISE FND_API.G_EXC_ERROR;
540     END IF;
541     IF(BIS_UTILITIES_PVT.Value_Missing_Or_Null(p_Calendar_Record.Dim_Short_Name) = FND_API.G_TRUE) THEN
542       FND_MESSAGE.SET_NAME('BSC','BSC_CAL_SHORT_NAME_NULL');
543       FND_MSG_PUB.ADD;
544       RAISE FND_API.G_EXC_ERROR;
545     END IF;
546   END IF;
547 
548   IF(p_Action = BSC_PERIODS_UTILITY_PKG.C_CREATE ) THEN
549     SELECT COUNT(1)
550     INTO   l_count
551     FROM   bsc_sys_calendars_b
552     WHERE  TRIM(calendar_id) = TRIM(p_Calendar_Record.Calendar_Id);
553     IF(l_count > 0)THEN
554       FND_MESSAGE.SET_NAME('BSC','BSC_CAL_ID_EXISTS');
555       FND_MSG_PUB.ADD;
556       RAISE FND_API.G_EXC_ERROR;
557     END IF;
558 
559     SELECT COUNT(1)
560     INTO   l_count
561     FROM   bsc_sys_calendars_vl
562     WHERE  TRIM(NAME) = TRIM(p_Calendar_Record.Name);
563     IF(l_count > 0)THEN
564       FND_MESSAGE.SET_NAME('BSC','BSC_CALENDAR_EXISTS');
565       FND_MESSAGE.SET_TOKEN('CALENDAR_NAME',TRIM(p_Calendar_Record.Name));
566       FND_MSG_PUB.ADD;
567       RAISE FND_API.G_EXC_ERROR;
568     END IF;
569 
570     SELECT COUNT(1)
571     INTO   l_count
572     FROM   bsc_sys_calendars_b
573     WHERE  TRIM(short_name) = TRIM(p_Calendar_Record.Dim_Short_Name);
574     IF( l_count > 0 ) THEN
575       FND_MESSAGE.SET_NAME('BSC','BSC_CAL_SHORT_NAME_UNIQUE');
576       FND_MSG_PUB.ADD;
577       RAISE FND_API.G_EXC_ERROR;
578     END IF;
579 
580   ELSIF(p_Action = BSC_PERIODS_UTILITY_PKG.C_UPDATE) THEN
581     IF(p_Calendar_Record.Fiscal_Year IS NULL) THEN
582       FND_MESSAGE.SET_NAME('BSC','BSC_FISCAL_YEAR_NULL');
583       FND_MSG_PUB.ADD;
584       RAISE FND_API.G_EXC_ERROR;
585     END IF;
586 
587     SELECT COUNT(1)
588     INTO   l_count
589     FROM   BSC_SYS_CALENDARS_B
590     WHERE  CALENDAR_ID <> p_Calendar_Record.Calendar_Id
591     AND    TRIM(short_name) = TRIM(p_Calendar_Record.Dim_Short_Name);
592     IF( l_count > 0 ) THEN
593       FND_MESSAGE.SET_NAME('BSC','BSC_CAL_SHORT_NAME_UNIQUE');
594       FND_MSG_PUB.ADD;
595       RAISE FND_API.G_EXC_ERROR;
596     END IF;
597   ELSIF(p_Action = BSC_PERIODS_UTILITY_PKG.C_DELETE ) THEN
598 
599     l_count := 0;
600     SELECT COUNT(1)
601     INTO   l_count
602     FROM   bsc_sys_calendars_b
603     WHERE  calendar_id = p_Calendar_Record.Calendar_Id;
604     --first check if the calendar passed exists or not
605     IF(l_count = 0 ) THEN
606       FND_MESSAGE.SET_NAME('BSC','BSC_CALENDAR_DEL_ALREADY');
607       FND_MSG_PUB.ADD;
608       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
609     END IF;
610 
611     l_count := 0;
612     SELECT COUNT(K.INDICATOR)
613     INTO   l_count
614     FROM   BSC_KPI_PERIODICITIES K,
615            BSC_SYS_PERIODICITIES S
616     WHERE  S.PERIODICITY_ID = K.PERIODICITY_ID
617     AND    S.CALENDAR_ID = p_Calendar_Record.Calendar_Id;
618 
619     SELECT name
620     INTO   l_Calendar_Name
621     FROM   bsc_sys_calendars_vl
622     WHERE  calendar_id = p_Calendar_Record.Calendar_Id;
623 
624     IF (l_count <> 0) THEN
625       FOR cObj IN C_Objectives LOOP
626         IF(l_Objective_Names IS NULL) THEN
627           l_Objective_Names := cObj.name;
628         ELSE
629           l_Objective_Names := l_Objective_Names || ',' || cObj.name;
630         END IF;
631       END LOOP;
632       FND_MESSAGE.SET_NAME('BSC','BSC_CALENDAR_USED_IN_OBJECTIVE');
633       FND_MESSAGE.SET_TOKEN('CALENDAR', l_Calendar_Name);
634       FND_MESSAGE.SET_TOKEN('OBJECTIVES', l_Objective_Names);
635       FND_MSG_PUB.ADD;
636       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
637     END IF;
638 
639   END IF;
640 
641   IF ((p_Commit IS NOT NULL) AND (p_Commit = FND_API.G_TRUE)) THEN
642     COMMIT;
643   END IF;
644 
645 EXCEPTION
646   WHEN FND_API.G_EXC_ERROR THEN
647     IF (x_msg_data IS NULL) THEN
648       FND_MSG_PUB.Count_And_Get
649       ( p_encoded   =>  FND_API.G_FALSE
650       , p_count     =>  x_msg_count
651       , p_data      =>  x_msg_data
652       );
653     END IF;
654     x_return_status :=  FND_API.G_RET_STS_ERROR;
655   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
656     IF (x_msg_data IS NULL) THEN
657       FND_MSG_PUB.Count_And_Get
658       ( p_encoded   =>  FND_API.G_FALSE
659       , p_count     =>  x_msg_count
660       , p_data      =>  x_msg_data
661       );
662     END IF;
663     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
664   WHEN NO_DATA_FOUND THEN
665     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
666     IF (x_msg_data IS NOT NULL) THEN
667       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Validate_Calendar_Action ';
668     ELSE
669       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Validate_Calendar_Action ';
670     END IF;
671   WHEN OTHERS THEN
672     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
673     IF (x_msg_data IS NOT NULL) THEN
674       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Validate_Calendar_Action ';
675     ELSE
676       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Validate_Calendar_Action ';
677     END IF;
678 END Validate_Calendar_Action;
679 
680 /*******************************************************************************************/
681 
682 PROCEDURE Retrieve_And_Populate_Cal_Rec
683 ( p_Api_Version            IN          NUMBER
684 , p_Commit                 IN          VARCHAR2
685 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
686 , x_Calendar_Record        OUT NOCOPY  BSC_CALENDAR_PUB.Calendar_Type_Record
687 , x_Return_Status          OUT NOCOPY  VARCHAR2
688 , x_Msg_Count              OUT NOCOPY  NUMBER
689 , x_Msg_Data               OUT NOCOPY  VARCHAR2
690 )IS
691 
692 BEGIN
693   FND_MSG_PUB.Initialize;
694   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
695 
696  SELECT  calendar_id
697        , edw_flag
698        , edw_calendar_id
699        , edw_calendar_type_id
700        , fiscal_year
701        , fiscal_change
702        , range_yr_mod
703        , current_year
704        , start_month
705        , start_day
706        , name
707        , help
708        , created_by
709        , creation_date
710        , last_updated_by
711        , last_update_date
712        , last_update_login
713   INTO   x_Calendar_Record.Calendar_Id
714        , x_Calendar_Record.Edw_Flag
715        , x_Calendar_Record.Edw_Calendar_Id
716        , x_Calendar_Record.Edw_Calendar_Type_Id
717        , x_Calendar_Record.Fiscal_Year
718        , x_Calendar_Record.Fiscal_Change
719        , x_Calendar_Record.Range_Yr_Mod
720        , x_Calendar_Record.Current_Year
721        , x_Calendar_Record.Start_Month
722        , x_Calendar_Record.Start_Day
723        , x_Calendar_Record.Name
724        , x_Calendar_Record.Help
725        , x_Calendar_Record.Created_By
726        , x_Calendar_Record.Creation_Date
727        , x_Calendar_Record.Last_Updated_By
728        , x_Calendar_Record.Last_Update_Date
729        , x_Calendar_Record.Last_Update_Login
730   FROM  bsc_sys_calendars_vl
731   WHERE calendar_id = p_Calendar_Record.Calendar_Id;
732 
733 
734   IF(p_Calendar_Record.Name <> x_Calendar_Record.Name) THEN
735     x_Calendar_Record.Name := p_Calendar_Record.Name;
736   END IF;
737 
738   IF(p_Calendar_Record.Help <> x_Calendar_Record.Help) THEN
739     x_Calendar_Record.Help := p_Calendar_Record.Help;
740   END IF;
741 
742   IF(p_Calendar_Record.Fiscal_Year <> x_Calendar_Record.Fiscal_Year) THEN
743     x_Calendar_Record.Fiscal_Year := p_Calendar_Record.Fiscal_Year;
744   END IF;
745 
746   IF(p_Calendar_Record.Current_Year <> x_Calendar_Record.Current_Year) THEN
747     x_Calendar_Record.Current_Year := p_Calendar_Record.Current_Year;
748   END IF;
749 
750   IF(p_Calendar_Record.Start_Month <> x_Calendar_Record.Start_Month) THEN
751     x_Calendar_Record.Start_Month := p_Calendar_Record.Start_Month;
752   END IF;
753 
754   -- added for Bug#4565308
755   IF(p_Calendar_Record.Start_Day <> x_Calendar_Record.Start_Day) THEN
756     x_Calendar_Record.Start_Day := p_Calendar_Record.Start_Day;
757   END IF;
758 
759   IF(p_Calendar_Record.Last_Update_Date IS NULL ) THEN
760       x_Calendar_Record.Last_Update_Date := SYSDATE;
761   ELSE
762       x_Calendar_Record.Last_Update_Date := p_Calendar_Record.Last_Update_Date;
763   END IF;
764 
765   IF (p_Calendar_Record.Last_Updated_By IS NULL) THEN
766     x_Calendar_Record.Last_Updated_By := FND_GLOBAL.USER_ID;
767   ELSE
768     x_Calendar_Record.Last_Updated_By := p_Calendar_Record.Last_Updated_By;
769   END IF;
770 
771   IF (p_Calendar_Record.Last_Update_Login IS NULL) THEN
772     x_Calendar_Record.Last_Update_Login := FND_GLOBAL.LOGIN_ID;
773   ELSE
774     x_Calendar_Record.Last_Update_Login := p_Calendar_Record.Last_Update_Login;
775   END IF;
776 
777   x_Calendar_Record.Dim_Short_Name  := p_Calendar_Record.Dim_Short_Name;
778   x_Calendar_Record.Application_Id  := p_Calendar_Record.Application_Id;
779 
780 
781 EXCEPTION
782   WHEN NO_DATA_FOUND THEN
783     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
784     IF (x_msg_data IS NOT NULL) THEN
785       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Retrieve_And_Populate_Cal_Rec';
786     ELSE
787       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Retrieve_And_Populate_Cal_Rec ';
788     END IF;
789   WHEN OTHERS THEN
790     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
791     IF (x_msg_data IS NOT NULL) THEN
792       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Retrieve_And_Populate_Cal_Rec ';
793     ELSE
794       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Retrieve_And_Populate_Cal_Rec ';
795     END IF;
796 END Retrieve_And_Populate_Cal_Rec;
797 /*************************************************************************************/
798 
799 PROCEDURE Create_Calendar_Post_Action
800 ( p_Api_Version            IN          NUMBER
801 , p_Commit                 IN          VARCHAR2
802 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
803 , x_Return_Status          OUT NOCOPY  VARCHAR2
804 , x_Msg_Count              OUT NOCOPY  NUMBER
805 , x_Msg_Data               OUT NOCOPY  VARCHAR2
806 )IS
807 
808 BEGIN
809   SAVEPOINT CreateCalendarPostActionSP;
810   FND_MSG_PUB.Initialize;
811   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
812 
813   BSC_CALENDAR_PUB.Create_Periodicities_Calendar
814   ( p_Api_Version      => p_Api_Version
815   , p_Commit           => p_Commit
816   , p_Calendar_Record  => p_Calendar_Record
817   , x_Return_Status    => x_Return_Status
818   , x_Msg_Count        => x_Msg_Count
819   , x_Msg_Data         => x_Msg_Data
820   );
821   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
822     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
823   END IF;
824 
825   BSC_UPDATE_UTIL.Populate_Calendar_Tables
826   ( p_commit         => p_Commit
827   , p_calendar_id    => p_Calendar_Record.Calendar_Id
828   , x_return_status  => x_Return_Status
829   , x_msg_count      => x_Msg_Count
830   , x_msg_data       => x_Msg_Data
831   );
832   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
833     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
834   END IF;
835 
836 EXCEPTION
837   WHEN FND_API.G_EXC_ERROR THEN
838     ROLLBACK TO CreateCalendarPostActionSP;
839     IF (x_msg_data IS NULL) THEN
840       FND_MSG_PUB.Count_And_Get
841       ( p_encoded   =>  FND_API.G_FALSE
842       , p_count     =>  x_msg_count
843       , p_data      =>  x_msg_data
844       );
845     END IF;
846     x_return_status :=  FND_API.G_RET_STS_ERROR;
847   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
848     ROLLBACK TO CreateCalendarPostActionSP;
849     IF (x_msg_data IS NULL) THEN
850       FND_MSG_PUB.Count_And_Get
851       ( p_encoded   =>  FND_API.G_FALSE
852       , p_count     =>  x_msg_count
853       , p_data      =>  x_msg_data
854       );
855     END IF;
856     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
857   WHEN NO_DATA_FOUND THEN
858     ROLLBACK TO CreateCalendarPostActionSP;
859      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
860     IF (x_msg_data IS NOT NULL) THEN
861       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Create_Calendar_Post_Action';
862     ELSE
863       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Create_Calendar_Post_Action ';
864     END IF;
865   WHEN OTHERS THEN
866     ROLLBACK TO CreateCalendarPostActionSP;
867     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
868     IF (x_msg_data IS NOT NULL) THEN
869       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Create_Calendar_Post_Action ';
870     ELSE
871       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Create_Calendar_Post_Action ';
872     END IF;
873 
874 END Create_Calendar_Post_Action;
875 
876 /*************************************************************************************/
877 
878 PROCEDURE Fill_Default_Values_Create_Cal
879 ( p_Api_Version            IN          NUMBER
880 , p_Commit                 IN          VARCHAR2
881 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
882 , x_Calendar_Record        OUT NOCOPY  BSC_CALENDAR_PUB.Calendar_Type_Record
883 , x_Return_Status          OUT NOCOPY  VARCHAR2
884 , x_Msg_Count              OUT NOCOPY  NUMBER
885 , x_Msg_Data               OUT NOCOPY  VARCHAR2
886 )IS
887 
888 BEGIN
889   FND_MSG_PUB.Initialize;
890   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
891 
892     x_Calendar_Record := p_Calendar_Record;
893 
894   IF (p_Calendar_Record.Calendar_Id IS NULL) THEN
895     x_Calendar_Record.Calendar_Id := BSC_PERIODS_UTILITY_PKG.Get_Next_Calendar_Id;
896   ELSE
897     x_Calendar_Record.Calendar_Id := p_Calendar_Record.Calendar_Id;
898   END IF;
899 
900   IF(p_Calendar_Record.Name IS NULL) THEN
901     x_Calendar_Record.Name := BSC_APPS.Get_Lookup_Value('BSC_UI_COMMON', 'CALENDAR') ||' '|| x_Calendar_Record.Calendar_Id;
902   ELSE
903     x_Calendar_Record.Name := P_Calendar_Record.Name;
904   END IF;
905 
906   IF(p_Calendar_Record.Help IS NULL) THEN
907     x_Calendar_Record.Help := p_Calendar_Record.Name;
908   ELSE
909     x_Calendar_Record.Help := P_Calendar_Record.Help;
910   END IF;
911 
912   IF(p_Calendar_Record.Edw_Flag IS NULL) THEN
913     x_Calendar_Record.Edw_Flag := BSC_PERIODS_UTILITY_PKG.C_CONSTANT_ZERO;
914   ELSE
915     x_Calendar_Record.Edw_Flag := p_Calendar_Record.Edw_Flag;
916   END IF;
917 
918   IF(p_Calendar_Record.Edw_Calendar_Id IS NOT NULL) THEN
919     x_Calendar_Record.Edw_Calendar_Id := p_Calendar_Record.Edw_Calendar_Id;
920   END IF;
921 
922   IF(p_Calendar_Record.Edw_Calendar_Type_Id IS NOT NULL) THEN
923     x_Calendar_Record.Edw_Calendar_Type_Id := p_Calendar_Record.Edw_Calendar_Type_Id;
924   END IF;
925 
926   IF(p_Calendar_Record.Fiscal_Year IS NULL) THEN
927     x_Calendar_Record.Fiscal_Year := to_char(SYSDATE,'YYYY');
928   ELSE
929     x_Calendar_Record.Fiscal_Year := p_Calendar_Record.Fiscal_Year;
930   END IF;
931 
932   IF(p_Calendar_Record.Fiscal_Change IS NULL) THEN
933     x_Calendar_Record.Fiscal_Change := BSC_PERIODS_UTILITY_PKG.C_CONSTANT_ZERO;
934   ELSE
935     x_Calendar_Record.Fiscal_Change  := p_Calendar_Record.Fiscal_Change;
936   END IF;
937 
938   IF(p_Calendar_Record.Range_Yr_Mod IS NULL) THEN
939     x_Calendar_Record.Range_Yr_Mod := BSC_PERIODS_UTILITY_PKG.C_CONSTANT_ZERO;
940   ELSE
941     x_Calendar_Record.Range_Yr_Mod := p_Calendar_Record.Range_Yr_Mod;
942   END IF;
943 
944   IF(p_Calendar_Record.Start_Month IS NULL) THEN
945     x_Calendar_Record.Start_Month := BSC_PERIODS_UTILITY_PKG.C_DEFAULT_START_MONTH;
946   ELSE
947     x_Calendar_Record.Start_Month := p_Calendar_Record.Start_Month;
948   END IF;
949 
950   IF(p_Calendar_Record.Start_Day IS NULL) THEN
951     x_Calendar_Record.Start_Day := BSC_PERIODS_UTILITY_PKG.C_DEFAULT_START_DAY;
952   ELSE
953     x_Calendar_Record.Start_Day  := p_Calendar_Record.Start_Day;
954   END IF;
955 
956   IF(p_Calendar_Record.Dim_Short_Name IS NULL) THEN
957     x_Calendar_Record.Dim_Short_Name := BSC_PERIODS_UTILITY_PKG.Get_Unique_Short_Name();
958   ELSE
959     x_Calendar_Record.Dim_Short_Name  := p_Calendar_Record.Dim_Short_Name;
960   END IF;
961 
962   IF(p_Calendar_Record.Application_Id IS NULL) THEN
963     x_Calendar_Record.Application_Id := BSC_PERIODS_UTILITY_PKG.C_BSC_APPLICATION_ID;
964   ELSE
965     x_Calendar_Record.Application_Id  := p_Calendar_Record.Application_Id;
966   END IF;
967 
968 
969 EXCEPTION
970   WHEN FND_API.G_EXC_ERROR THEN
971     IF (x_msg_data IS NULL) THEN
972       FND_MSG_PUB.Count_And_Get
973       ( p_encoded   =>  FND_API.G_FALSE
974       , p_count     =>  x_msg_count
975       , p_data      =>  x_msg_data
976       );
977     END IF;
978     x_return_status :=  FND_API.G_RET_STS_ERROR;
979   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
980     IF (x_msg_data IS NULL) THEN
981       FND_MSG_PUB.Count_And_Get
982       ( p_encoded   =>  FND_API.G_FALSE
983       , p_count     =>  x_msg_count
984       , p_data      =>  x_msg_data
985       );
986     END IF;
987     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
988   WHEN NO_DATA_FOUND THEN
989     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
990     IF (x_msg_data IS NOT NULL) THEN
991       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Fill_Default_Values_Create_Cal';
992     ELSE
993       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Fill_Default_Values_Create_Cal ';
994     END IF;
995   WHEN OTHERS THEN
996     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
997     IF (x_msg_data IS NOT NULL) THEN
998       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Fill_Default_Values_Create_Cal ';
999     ELSE
1000       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Fill_Default_Values_Create_Cal';
1001     END IF;
1002 END Fill_Default_Values_Create_Cal;
1003 
1004 /*****************************************************************************************/
1005 
1006 PROCEDURE Update_Calendar_Post_Action
1007 ( p_Api_Version            IN          NUMBER
1008 , p_Commit                 IN          VARCHAR2
1009 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
1010 , x_Return_Status          OUT NOCOPY  VARCHAR2
1011 , x_Msg_Count              OUT NOCOPY  NUMBER
1012 , x_Msg_Data               OUT NOCOPY  VARCHAR2
1013 )IS
1014 l_System_Stage   bsc_sys_init.property_value%TYPE;
1015 
1016 BEGIN
1017   SAVEPOINT UpdateCalendarPostActionSP;
1018   FND_MSG_PUB.Initialize;
1019   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1020 
1021   SELECT property_value
1022   INTO   l_System_Stage
1023   from   bsc_sys_init
1024   WHERE  property_code =  BSC_PERIODS_UTILITY_PKG.C_SYSTEM_STAGE;
1025 
1026   IF(l_System_Stage = 2 AND  Get_Fiscal_Year() = 1) THEN
1027     BSC_CALENDAR_PVT.Update_Fiscal_Change
1028     ( p_Api_Version            => p_Api_Version
1029     , p_Commit                 => p_Commit
1030     , p_Calendar_Id            => p_Calendar_Record.Calendar_Id
1031     , x_Return_Status          => x_Return_Status
1032     , x_Msg_Count              => x_Msg_Count
1033     , x_Msg_Data               => x_Msg_Data
1034     );
1035     IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
1036       RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1037     END IF;
1038 
1039     BSC_CALENDAR_PUB.Flag_Changes_For_Objectives
1040     ( p_Api_Version            => p_Api_Version
1041     , p_Commit                 => p_Commit
1042     , p_Calendar_Id            => p_Calendar_Record.Calendar_Id
1043     , x_Return_Status          => x_Return_Status
1044     , x_Msg_Count              => x_Msg_Count
1045     , x_Msg_Data               => x_Msg_Data
1046     );
1047     IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
1048       RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1049     END IF;
1050 
1051     BSC_UPDATE_UTIL.Populate_Calendar_Tables
1052     ( p_commit         => p_Commit
1053     , p_calendar_id    => p_Calendar_Record.Calendar_Id
1054     , x_return_status  => x_Return_Status
1055     , x_msg_count      => x_Msg_Count
1056     , x_msg_data       => x_Msg_Data
1057     );
1058     IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
1059       RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1060     END IF;
1061 
1062   END IF;
1063 
1064 
1065 EXCEPTION
1066   WHEN FND_API.G_EXC_ERROR THEN
1067     ROLLBACK TO UpdateCalendarPostActionSP;
1068     IF (x_msg_data IS NULL) THEN
1069       FND_MSG_PUB.Count_And_Get
1070       ( p_encoded   =>  FND_API.G_FALSE
1071       , p_count     =>  x_msg_count
1072       , p_data      =>  x_msg_data
1073       );
1074     END IF;
1075     x_return_status :=  FND_API.G_RET_STS_ERROR;
1076   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1077     ROLLBACK TO UpdateCalendarPostActionSP;
1078     IF (x_msg_data IS NULL) THEN
1079       FND_MSG_PUB.Count_And_Get
1080       ( p_encoded   =>  FND_API.G_FALSE
1081       , p_count     =>  x_msg_count
1082       , p_data      =>  x_msg_data
1083       );
1084     END IF;
1085     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1086   WHEN NO_DATA_FOUND THEN
1087     ROLLBACK TO UpdateCalendarPostActionSP;
1088     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1089     IF (x_msg_data IS NOT NULL) THEN
1090       x_msg_data      :=  x_msg_data ||'BSC_CALENDAR_PUB.Update_Calendar_Post_Action ';
1091     ELSE
1092       x_msg_data      :=  SQLERRM || 'at BSC_CALENDAR_PUB.Update_Calendar_Post_Action ';
1093     END IF;
1094   WHEN OTHERS THEN
1095     ROLLBACK TO UpdateCalendarPostActionSP;
1096     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1097     IF (x_msg_data IS NOT NULL) THEN
1098       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Update_Calendar_Post_Action ';
1099     ELSE
1100       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Update_Calendar_Post_Action ';
1101     END IF;
1102 END Update_Calendar_Post_Action;
1103 
1104 /*****************************************************************************************/
1105 
1106 PROCEDURE Flag_Changes_For_Objectives
1107 ( p_Api_Version            IN          NUMBER
1108 , p_Commit                 IN          VARCHAR2
1109 , p_Calendar_Id            IN          NUMBER
1110 , x_Return_Status          OUT NOCOPY  VARCHAR2
1111 , x_Msg_Count              OUT NOCOPY  NUMBER
1112 , x_Msg_Data               OUT NOCOPY  VARCHAR2
1113 )IS
1114 
1115 
1116 CURSOR C_FLAG_OBJECTIVES IS
1117   SELECT DISTINCT(K.indicator)
1118   FROM   bsc_kpi_periodicities K,
1119          bsc_sys_periodicities S
1120   WHERE  S.periodicity_id = K.periodicity_id
1121   AND    S.calendar_id    = p_Calendar_Id;
1122 
1123 BEGIN
1124   FND_MSG_PUB.Initialize;
1125   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1126 
1127   FOR CD IN C_FLAG_OBJECTIVES LOOP
1128     BSC_DESIGNER_PVT.ActionFlag_Change(CD.indicator,BSC_DESIGNER_PVT.G_ActionFlag.Update_Update);
1129 
1130     IF(BSC_PERIODS_UTILITY_PKG.Check_Error_Message('ActionFlag_Change')) THEN
1131       FND_MESSAGE.SET_NAME('BSC','BSC_ERROR_ACTION_FLAG_CHANGE');
1132       FND_MSG_PUB.ADD;
1133       RAISE FND_API.G_EXC_ERROR;
1134     END IF;
1135 
1136   END LOOP;
1137 
1138 EXCEPTION
1139   WHEN FND_API.G_EXC_ERROR THEN
1140     IF (x_msg_data IS NULL) THEN
1141       FND_MSG_PUB.Count_And_Get
1142       ( p_encoded   =>  FND_API.G_FALSE
1143       , p_count     =>  x_msg_count
1144       , p_data      =>  x_msg_data
1145       );
1146     END IF;
1147     x_return_status :=  FND_API.G_RET_STS_ERROR;
1148   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1149     IF (x_msg_data IS NULL) THEN
1150       FND_MSG_PUB.Count_And_Get
1151       ( p_encoded   =>  FND_API.G_FALSE
1152       , p_count     =>  x_msg_count
1153       , p_data      =>  x_msg_data
1154       );
1155     END IF;
1156     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1157   WHEN NO_DATA_FOUND THEN
1158     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1159     IF (x_msg_data IS NOT NULL) THEN
1160       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Flag_Changes_For_Objectives ';
1161     ELSE
1162       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Flag_Changes_For_Objectives ';
1163     END IF;
1164   WHEN OTHERS THEN
1165     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1166     IF (x_msg_data IS NOT NULL) THEN
1167       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Flag_Changes_For_Objectives ';
1168     ELSE
1169       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Flag_Changes_For_Objectives ';
1170     END IF;
1171 END Flag_Changes_For_Objectives;
1172 /*****************************************************************************************/
1173 
1174 PROCEDURE Create_Periodicities_Calendar
1175 ( p_Api_Version            IN          NUMBER
1176 , p_Commit                 IN          VARCHAR2
1177 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
1178 , x_Return_Status          OUT NOCOPY  VARCHAR2
1179 , x_Msg_Count              OUT NOCOPY  NUMBER
1180 , x_Msg_Data               OUT NOCOPY  VARCHAR2
1181 )IS
1182 l_Calendar_Record     BSC_CALENDAR_PUB.Calendar_Type_Record;
1183 h_tmp_array           BSC_UPDATE_UTIL.t_array_of_number;
1184 h_count               NUMBER;
1185 h_new_per_id          NUMBER;
1186 h_periodicity_type    NUMBER;
1187 h_new_source          VARCHAR2(200);
1188 l_Periodicity_Record  BSC_PERIODICITIES_PUB.Periodicities_Rec_Type;
1189 
1190 l_Periodicity_Ids    BSC_UTILITY.VARCHAR_TABLETYPE;
1191 l_Periodicity_Count  NUMBER;
1192 l_Count              NUMBER;
1193 
1194 CURSOR c_base_per (p_calendar_id NUMBER, p_custom_code NUMBER) IS
1195   SELECT PERIODICITY_ID
1196   FROM   BSC_SYS_PERIODICITIES
1197   WHERE  CALENDAR_ID = p_calendar_id
1198   AND    CUSTOM_CODE < p_custom_code
1199   ORDER  BY PERIODICITY_ID;
1200 
1201 CURSOR c_new_per (p_calendar_id NUMBER) IS
1202   SELECT PERIODICITY_ID,SOURCE
1203   FROM   BSC_SYS_PERIODICITIES
1204   WHERE  CALENDAR_ID = p_calendar_id
1205   ORDER  BY PERIODICITY_ID;
1206 
1207 CURSOR c_get_per (p_calendar_id NUMBER, p_periodicity_type NUMBER) IS
1208   SELECT PERIODICITY_ID
1209   FROM   BSC_SYS_PERIODICITIES
1210   WHERE  CALENDAR_ID = p_calendar_id
1211   AND    PERIODICITY_TYPE = p_periodicity_type;
1212 
1213 BEGIN
1214   FND_MSG_PUB.Initialize;
1215   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1216   BSC_APPS.Init_Bsc_Apps;
1217   l_Count := 1;
1218 
1219   IF (p_Calendar_Record.Base_Periodicities_Ids IS NOT NULL) THEN
1220     BSC_UTILITY.Parse_String
1221     ( p_List         => p_Calendar_Record.Base_Periodicities_Ids
1222     , p_Separator    => BSC_PERIODS_UTILITY_PKG.C_COMMA_SEPARATOR
1223     , p_List_Data    => l_Periodicity_Ids
1224     , p_List_number  => l_Periodicity_Count
1225     );
1226   END IF;
1227 
1228   FOR CD IN c_base_per(1, 1) LOOP
1229     SELECT  NULL
1230           , num_of_periods
1231           , source
1232           , num_of_subperiods
1233           , period_col_name
1234           , subperiod_col_name
1235           , yearly_flag
1236           , edw_flag
1237           , p_Calendar_Record.Calendar_Id
1238           , edw_periodicity_id
1239           , custom_code
1240           , db_column_name
1241           , periodicity_type
1242           , name
1243     INTO    l_Periodicity_Record.Periodicity_Id
1244           , l_Periodicity_Record.Num_Of_Periods
1245           , l_Periodicity_Record.Source
1246           , l_Periodicity_Record.Num_Of_Subperiods
1247           , l_Periodicity_Record.Period_Col_Name
1248           , l_Periodicity_Record.Subperiod_Col_Name
1249           , l_Periodicity_Record.Yearly_Flag
1250           , l_Periodicity_Record.Edw_Flag
1251           , l_Periodicity_Record.Calendar_Id
1252           , l_Periodicity_Record.Edw_Periodicity_Id
1253           , l_Periodicity_Record.Custom_Code
1254           , l_Periodicity_Record.Db_Column_Name
1255           , l_Periodicity_Record.Periodicity_Type
1256           , l_Periodicity_Record.Name
1257     FROM bsc_sys_periodicities_vl
1258     WHERE periodicity_id = CD.periodicity_id;
1259 
1260     IF (p_Calendar_Record.Base_Periodicities_Ids IS NOT NULL) THEN
1261         IF (l_Periodicity_Count > 0) THEN
1262             l_Periodicity_Record.Periodicity_Id := l_Periodicity_Ids(l_Count);
1263         END IF;
1264 
1265         l_Periodicity_Count := l_Periodicity_Count - 1;
1266         l_Count := l_Count + 1;
1267     END IF;
1268     l_Periodicity_Record.ForceRunPopulateCalendar := FND_API.G_FALSE;
1269 
1270     BSC_PERIODICITIES_PUB.Create_Periodicity
1271     ( p_Api_Version             => p_Api_Version
1272     , p_Commit                  => p_Commit
1273     , p_Periodicities_Rec_Type  => l_Periodicity_Record
1274     , x_Return_Status           => x_Return_Status
1275     , x_Msg_Count               => x_Msg_Count
1276     , x_Msg_Data                => x_Msg_Data
1277     );
1278 
1279   END LOOP;
1280   FOR cd_new_per IN c_new_per(p_Calendar_Record.Calendar_Id) LOOP
1281     h_new_source := '';
1282     IF cd_new_per.source IS NOT NULL THEN
1283       h_count := BSC_UPDATE_UTIL.Decompose_Numeric_List(cd_new_per.source,h_tmp_array,',');
1284       FOR h_i IN 1.. h_count LOOP
1285         h_periodicity_type := h_tmp_array(h_i);
1286 
1287         OPEN c_get_per(p_Calendar_Record.Calendar_Id, h_periodicity_type);
1288         FETCH c_get_per INTO h_new_per_id;
1289         IF c_get_per%FOUND THEN
1290           IF h_new_source IS NOT NULL THEN
1291             h_new_source := h_new_source  || ',' || h_new_per_id;
1292           ELSE
1293             h_new_source :=h_new_per_id;
1294           END IF;
1295         END IF;
1296         CLOSE c_get_per;
1297       END LOOP;
1298 
1299       UPDATE bsc_sys_periodicities
1300       SET    source = h_new_source
1301       WHERE  periodicity_id = cd_new_per.periodicity_id;
1302     END IF;
1303   END LOOP;
1304 
1305 
1306 
1307 EXCEPTION
1308   WHEN FND_API.G_EXC_ERROR THEN
1309     IF (x_msg_data IS NULL) THEN
1310       FND_MSG_PUB.Count_And_Get
1311       ( p_encoded   =>  FND_API.G_FALSE
1312       , p_count     =>  x_msg_count
1313       , p_data      =>  x_msg_data
1314       );
1315     END IF;
1316     x_return_status :=  FND_API.G_RET_STS_ERROR;
1317   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1318     IF (x_msg_data IS NULL) THEN
1319       FND_MSG_PUB.Count_And_Get
1320       ( p_encoded   =>  FND_API.G_FALSE
1321       , p_count     =>  x_msg_count
1322       , p_data      =>  x_msg_data
1323       );
1324     END IF;
1325     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1326   WHEN NO_DATA_FOUND THEN
1327     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1328     IF (x_msg_data IS NOT NULL) THEN
1329       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Create_Periodicities_Calendar ';
1330     ELSE
1331       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Create_Periodicities_Calendar ';
1332     END IF;
1333   WHEN OTHERS THEN
1334     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1335     IF (x_msg_data IS NOT NULL) THEN
1336       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Create_Periodicities_Calendar ';
1337     ELSE
1338       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Create_Periodicities_Calendar ';
1339     END IF;
1340 END Create_Periodicities_Calendar;
1341 /*********************************************************************************/
1342 PROCEDURE Create_Calendar_Dimension
1343 ( p_Api_Version            IN          NUMBER
1344 , p_Commit                 IN          VARCHAR2
1345 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
1346 , x_Return_Status          OUT NOCOPY  VARCHAR2
1347 , x_Msg_Count              OUT NOCOPY  NUMBER
1348 , x_Msg_Data               OUT NOCOPY  VARCHAR2
1349 )IS
1350 l_Short_Name  bsc_sys_calendars_b.short_name%TYPE;
1351 BEGIN
1352   FND_MSG_PUB.Initialize;
1353   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1354 
1355   IF(p_Calendar_Record.Dim_Short_Name IS NULL) THEN
1356     l_Short_Name := BSC_PERIODS_UTILITY_PKG.Get_Unique_Short_Name();
1357   ELSE
1358     l_Short_Name := p_Calendar_Record.Dim_Short_Name;
1359   END IF;
1360 
1361   BSC_BIS_DIMENSION_PUB.Create_Dimension
1362   ( p_commit                => p_Commit
1363   , p_dim_short_name        => l_Short_Name
1364   , p_display_name          => p_Calendar_Record.Name
1365   , p_description           => p_Calendar_Record.Help
1366   , p_dim_obj_short_names   => NULL
1367   , p_application_id        => p_Calendar_Record.Application_Id
1368   , p_create_view           => 0
1369   , x_return_status         => x_Return_Status
1370   , x_msg_count             => x_Msg_Count
1371   , x_msg_data              => x_Msg_Data
1372   );
1373   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
1374     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1375   END IF;
1376 
1377   UPDATE bsc_sys_calendars_b
1378   SET    short_name  = l_Short_Name
1379   WHERE  calendar_id = p_Calendar_Record.calendar_id;
1380 
1381 
1382 EXCEPTION
1383   WHEN FND_API.G_EXC_ERROR THEN
1384     IF (x_msg_data IS NULL) THEN
1385       FND_MSG_PUB.Count_And_Get
1386       ( p_encoded   =>  FND_API.G_FALSE
1387       , p_count     =>  x_msg_count
1388       , p_data      =>  x_msg_data
1389       );
1390     END IF;
1391     x_return_status :=  FND_API.G_RET_STS_ERROR;
1392   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1393     IF (x_msg_data IS NULL) THEN
1394       FND_MSG_PUB.Count_And_Get
1395       ( p_encoded   =>  FND_API.G_FALSE
1396       , p_count     =>  x_msg_count
1397       , p_data      =>  x_msg_data
1398       );
1399     END IF;
1400     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1401   WHEN NO_DATA_FOUND THEN
1402     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1403     IF (x_msg_data IS NOT NULL) THEN
1404       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Create_Calendar_Dimension ';
1405     ELSE
1406       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Create_Calendar_Dimension ';
1407     END IF;
1408   WHEN OTHERS THEN
1409     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1410     IF (x_msg_data IS NOT NULL) THEN
1411       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Create_Calendar_Dimension ';
1412     ELSE
1413       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Create_Calendar_Dimension ';
1414     END IF;
1415 END Create_Calendar_Dimension;
1416 /*******************************************************************************/
1417 PROCEDURE Update_Calendar_Dimension
1418 ( p_Api_Version            IN          NUMBER
1419 , p_Commit                 IN          VARCHAR2
1420 , p_Calendar_Record        IN          BSC_CALENDAR_PUB.Calendar_Type_Record
1421 , x_Return_Status          OUT NOCOPY  VARCHAR2
1422 , x_Msg_Count              OUT NOCOPY  NUMBER
1423 , x_Msg_Data               OUT NOCOPY  VARCHAR2
1424 )IS
1425 CURSOR C_comma_objNames IS
1426 SELECT obj_short_name
1427 FROM   bsc_bis_dim_obj_by_dim_vl
1428 WHERE  dim_short_name = p_Calendar_Record.Dim_Short_Name;
1429 
1430 
1431 l_Short_Name  bsc_sys_calendars_b.short_name%TYPE;
1432 l_dim_obj_shortNames    VARCHAR2(32000);
1433 BEGIN
1434   FND_MSG_PUB.Initialize;
1435   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1436 
1437   FOR CD IN C_comma_objNames LOOP
1438     IF(l_dim_obj_shortNames IS NULL) THEN
1439       l_dim_obj_shortNames := CD.obj_short_name;
1440     ELSE
1441       l_dim_obj_shortNames := l_dim_obj_shortNames || ',' ||CD.obj_short_name;
1442     END IF;
1443   END LOOP;
1444 
1445 
1446   BSC_BIS_DIMENSION_PUB.Update_Dimension
1447   ( p_commit               => p_Commit
1448   , p_dim_short_name       => p_Calendar_Record.Dim_Short_Name
1449   , p_display_name         => p_Calendar_Record.Name
1450   , p_description          => p_Calendar_Record.Help
1451   , p_application_id       => p_Calendar_Record.Application_Id
1452   , p_dim_obj_short_names  => l_dim_obj_shortNames
1453   , p_time_stamp           => NULL
1454   , x_return_status        => x_return_status
1455   , x_msg_count            => x_msg_count
1456   , x_msg_data             => x_msg_data
1457   );
1458 
1459   IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
1460     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1461   END IF;
1462 
1463 
1464 EXCEPTION
1465   WHEN FND_API.G_EXC_ERROR THEN
1466     IF (x_msg_data IS NULL) THEN
1467       FND_MSG_PUB.Count_And_Get
1468       ( p_encoded   =>  FND_API.G_FALSE
1469       , p_count     =>  x_msg_count
1470       , p_data      =>  x_msg_data
1471       );
1472     END IF;
1473     x_return_status :=  FND_API.G_RET_STS_ERROR;
1474   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1475     IF (x_msg_data IS NULL) THEN
1476       FND_MSG_PUB.Count_And_Get
1477       ( p_encoded   =>  FND_API.G_FALSE
1478       , p_count     =>  x_msg_count
1479       , p_data      =>  x_msg_data
1480       );
1481     END IF;
1482     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1483   WHEN NO_DATA_FOUND THEN
1484     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1485     IF (x_msg_data IS NOT NULL) THEN
1486       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Update_Calendar_Dimension ';
1487     ELSE
1488       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Update_Calendar_Dimension ';
1489     END IF;
1490   WHEN OTHERS THEN
1491     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1492     IF (x_msg_data IS NOT NULL) THEN
1493       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Update_Calendar_Dimension ';
1494     ELSE
1495       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Update_Calendar_Dimension ';
1496     END IF;
1497 END Update_Calendar_Dimension;
1498 
1499 
1500 FUNCTION get_production_obj_having_cal(
1501   p_cal_id  IN   bsc_kpis_b.calendar_id%TYPE
1502   )
1503 RETURN VARCHAR2 IS
1504   l_result        VARCHAR2(32000);
1505   CURSOR c_objs IS
1506     SELECT  indicator, name, calendar_id
1507     FROM bsc_kpis_vl
1508     WHERE prototype_flag = 0
1509       AND calendar_id    = p_cal_id;
1510 BEGIN
1511   l_result := NULL;
1512   IF (p_cal_id IS NOT NULL) THEN
1513     FOR cd IN c_objs LOOP
1514        IF (l_result IS NULL) THEN
1515            l_result := cd.name;
1516        ELSE
1517            l_result := l_result || ',' || cd.name;
1518        END IF;
1519     END LOOP;
1520   END IF;
1521   RETURN l_result;
1522 END get_production_obj_having_cal;
1523 
1524 PROCEDURE comp_leapyear_prioryear(
1525   p_calid IN NUMBER,
1526   p_cyear IN NUMBER,
1527   p_pyear IN NUMBER,
1528   x_result OUT nocopy NUMBER
1529  )IS
1530 lday number :=0;
1531 lmonth number:=0;
1532 
1533 CURSOR diff IS
1534 SELECT day30, MONTH
1535 FROM bsc_db_calendar
1536 WHERE calendar_id = p_calid
1537 AND   year =  p_cyear
1538 MINUS
1539 SELECT day30, MONTH
1540 FROM bsc_db_calendar
1541 WHERE calendar_id = p_calid
1542 AND   year = p_pyear;
1543 BEGIN
1544   OPEN diff;
1545   IF diff%NOTFOUND THEN
1546     x_result := -1;
1547   ELSE
1548     FETCH diff into lday, lmonth;
1549   END IF;
1550   CLOSE diff;
1551   IF lday <>0 THEN
1552    SELECT day365
1553    INTO x_result
1554    FROM bsc_db_calendar
1555    WHERE calendar_id = p_calid
1556    AND  year  = p_cyear
1557    AND  day30 = lday
1558    AND  MONTH = lmonth;
1559  END IF;
1560 EXCEPTION
1561  WHEN OTHERS THEN
1562    x_result := -1;
1563 END comp_leapyear_prioryear;
1564 
1565 
1566 END BSC_CALENDAR_PUB;