DBA Data[Home] [Help]

PACKAGE BODY: APPS.BSC_PERIODICITIES_PUB

Source


1 PACKAGE BODY BSC_PERIODICITIES_PUB AS
2 /* $Header: BSCPPERB.pls 120.13.12000000.4 2007/05/16 12:51:35 ppandey ship $ */
3 /*
4 REM +=======================================================================+
5 REM |    Copyright (c) 2002 Oracle Corporation, Redwood Shores, CA, USA     |
6 REM |                         All rights reserved.                          |
7 REM +=======================================================================+
8 REM | FILENAME                                                              |
9 REM |     BSCPPERB.pls                                                      |
10 REM |                                                                       |
11 REM | DESCRIPTION                                                           |
12 REM |     Module: PUBLIC package body to manage periodicities               |
13 REM | NOTES                                                                 |
14 REM | 14-JUL-2005 Aditya Rao  Created.                                      |
15 REM | 12-AUG-2005 Aditya Rao added API Get_Incr_Change                      |
16 REM | 25-AUG-2005 Pradeep    Bug #4570854, on delete current periodicity_id |
17 REM |                          need to be used for Annually_source          |
18 REM | 29-AUG-2005 Aditya Rao Fixed Bug#4574115 in API Validate_Periodicity  |
19 REM | 07-OCT-2005 Aditya Rao Fixed Bug#4655119, enabled corresponding DO    |
20 REM |                        created for Periodicities                      |
21 REM | 29-NOV-2005 Krishna Modified for enh#4711274                          |
22 REM | 29-DEC-2005 Krishna Passsing enabled = false for hidden periodicities |
23 REM | 07-FEB-2006 ashankar Fix for the bug4695330                           |
24 REM | 15-FEB-2006 visuri  Fixed bug#4757375 AK check for Delete Periodicity |
25 REM | 21-MAR-2006 ashankar  Fixed bug#5099465 Modified Validate_Periodicity |
26 REM +=======================================================================+
27 */
28 
29 G_PKG_NAME CONSTANT VARCHAR2(30):='BSC_PERIODICITIES_PUB';
30 
31 
32 /*
33 Procedure Name
34 Parameters
35 
36 */
37 
38 PROCEDURE Update_Annually_Source
39 ( p_Calendar_Id    IN  NUMBER
40 , p_Periodicity_Id IN  NUMBER
41 , p_Action         IN  NUMBER
42 , x_Return_Status  OUT NOCOPY  VARCHAR2
43 , x_Msg_Count      OUT NOCOPY  NUMBER
44 , x_Msg_Data       OUT NOCOPY  VARCHAR2
45 );
46 /**************************************************************/
47 
48 PROCEDURE Create_Periodicity (
49   p_Api_Version             IN          NUMBER
50  ,p_Commit                  IN          VARCHAR2
51  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
52  ,p_disable_period_val_flag IN          VARCHAR2
53  ,x_Return_Status           OUT NOCOPY  VARCHAR2
54  ,x_Msg_Count               OUT NOCOPY  NUMBER
55  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
56 ) IS
57     l_Periodicities_Rec_Type  BSC_PERIODICITIES_PUB.Periodicities_Rec_Type;
58     l_Dim_Short_Name          BSC_SYS_CALENDARS_B.SHORT_NAME%TYPE;
59     l_Periodicity_View_Name   VARCHAR2(30);
60     l_Dimobj_Name             BIS_LEVELS_TL.NAME%TYPE;
61     l_Dim_Enabled             VARCHAR2(10);
62 BEGIN
63     SAVEPOINT CreatePeriodicityPUB;
64     FND_MSG_PUB.Initialize;
65 
66     x_Return_Status := FND_API.G_RET_STS_SUCCESS;
67     l_Dim_Enabled   := FND_API.G_TRUE;
68     l_Periodicities_Rec_Type := p_Periodicities_Rec_Type;
69 
70     BSC_PERIODICITIES_PUB.Populate_Periodicity_Record (
71       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
72      ,p_Periodicities_Rec_Type  => p_Periodicities_Rec_Type
73      ,x_Periodicities_Rec_Type  => l_Periodicities_Rec_Type
74      ,x_Return_Status           => x_Return_Status
75      ,x_Msg_Count               => x_Msg_Count
76      ,x_Msg_Data                => x_Msg_Data
77     );
78     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
79         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
80     END IF;
81 
82     BSC_PERIODICITIES_PUB.Validate_Periodicity (
83       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
84      ,p_Periodicities_Rec_Type  => l_Periodicities_Rec_Type
85      ,p_Action_Type             => BSC_PERIODS_UTILITY_PKG.C_CREATE
86      ,x_Return_Status           => x_Return_Status
87      ,x_Msg_Count               => x_Msg_Count
88      ,x_Msg_Data                => x_Msg_Data
89     );
90     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
91         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
92     END IF;
93 
94     BSC_PERIODICITIES_PVT.Create_Periodicity (
95       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
96      ,p_Commit                  => p_Commit
97      ,p_Periodicities_Rec_Type  => l_Periodicities_Rec_Type
98      ,x_Return_Status           => x_Return_Status
99      ,x_Msg_Count               => x_Msg_Count
100      ,x_Msg_Data                => x_Msg_Data
101     );
102     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
103         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
104     END IF;
105 
106     BSC_PERIODICITIES_PUB.Populate_Period_Metadata (
107       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
108      ,p_Commit                  => p_Commit
109      ,p_Action_Type             => BSC_PERIODS_UTILITY_PKG.C_CREATE
110      ,p_Periodicities_Rec_Type  => l_Periodicities_Rec_Type
111      ,p_disable_period_val_flag => p_disable_period_val_flag
112      ,x_Return_Status           => x_Return_Status
113      ,x_Msg_Count               => x_Msg_Count
114      ,x_Msg_Data                => x_Msg_Data
115     );
116     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
117         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
118     END IF;
119 
120     BSC_PERIODICITIES_PUB.Update_Annually_Source (
121       p_Calendar_Id     => l_Periodicities_Rec_Type.Calendar_Id
122      ,p_Periodicity_Id  => l_Periodicities_Rec_Type.Periodicity_Id
123      ,p_Action          => 1  -- Action for new/updated Period.
124      ,x_Return_Status   => x_Return_Status
125      ,x_Msg_Count       => x_Msg_Count
126      ,x_Msg_Data        => x_Msg_Data
127     );
128     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
129         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
130     END IF;
131 
132     BSC_PERIODS_PUB.Create_Periodicity_View (
133       p_Periodicity_Id         => l_Periodicities_Rec_Type.Periodicity_Id
134     , p_Short_Name             => l_Periodicities_Rec_Type.Short_Name
135     , p_Calendar_Id            => l_Periodicities_Rec_Type.Calendar_Id
136     , x_Periodicity_View_Name  => l_Periodicity_View_Name
137     , x_Return_Status          => x_Return_Status
138     , x_Msg_Count              => x_Msg_Count
139     , x_Msg_Data               => x_Msg_Data
140     );
141     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
142         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
143     END IF;
144     IF(l_Periodicities_Rec_Type.Periodicity_Type IN (11,12) )THEN
145       l_Dim_Enabled := FND_API.G_FALSE;
146     END IF;
147 
148     l_Dim_Short_Name := BSC_PERIODS_UTILITY_PKG.Get_Calendar_Short_Name(l_Periodicities_Rec_Type.Calendar_Id);
149     l_Dimobj_Name := BSC_PERIODS_UTILITY_PKG.get_Dimobj_Name_From_period
150                      ( p_Calendar_Id      => l_Periodicities_Rec_Type.Calendar_Id
151                      , p_Periodicity_Name => l_Periodicities_Rec_Type.Name
152                      );
153     -- passed p_Dim_Obj_Enabled = 'T' for Dimension Objects, Bug#4655119
154     BSC_BIS_DIM_OBJ_PUB.Create_Dim_Object
155     (
156             p_commit                  =>  p_Commit
157         ,   p_dim_obj_short_name      =>  l_Periodicities_Rec_Type.Short_Name
158         ,   p_display_name            =>  l_Dimobj_Name
159         ,   p_application_id          =>  l_Periodicities_Rec_Type.Application_id
160         ,   p_description             =>  l_Periodicities_Rec_Type.Description
161         ,   p_data_source             =>  BSC_PERIODS_UTILITY_PKG.C_PMF_DO_TYPE
162         ,   p_source_table            =>  l_Periodicity_View_Name
163         ,   p_where_clause            =>  NULL
164         ,   p_comparison_label_code   =>  NULL
165         ,   p_table_column            =>  NULL
166         ,   p_source_type             =>  BSC_PERIODS_UTILITY_PKG.C_OLTP_DO_TYPE
167         ,   p_maximum_code_size       =>  NULL
168         ,   p_maximum_name_size       =>  NULL
169         ,   p_all_item_text           =>  NULL
170         ,   p_comparison_item_text    =>  NULL
171         ,   p_prototype_default_value =>  NULL
172         ,   p_dimension_values_order  =>  NULL
173         ,   p_comparison_order        =>  1
174         ,   p_dim_short_names         =>  l_Dim_Short_Name
175         ,   p_Dim_Obj_Enabled         =>  l_Dim_Enabled
176         ,   x_return_status           =>  x_return_status
177         ,   x_msg_count               =>  x_msg_count
178         ,   x_msg_data                =>  x_msg_data
179     );
180     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
181         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
182     END IF;
183     IF(l_Periodicities_Rec_Type.ForceRunPopulateCalendar = FND_API.G_TRUE ) THEN
184         BSC_UPDATE_UTIL.Populate_Calendar_Tables
185         ( p_commit         => p_Commit
186         , p_calendar_id    => l_Periodicities_Rec_Type.Calendar_Id
187         , x_return_status  => x_Return_Status
188         , x_msg_count      => x_Msg_Count
189         , x_msg_data       => x_Msg_Data
190         );
191         IF(x_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
192           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
193         END IF;
194     END IF;
195     IF (p_Commit IS NOT NULL AND p_Commit = FND_API.G_TRUE) THEN
196         COMMIT;
197     END IF;
198 
199 EXCEPTION
200     WHEN FND_API.G_EXC_ERROR THEN
201         ROLLBACK TO CreatePeriodicityPUB;
202         IF (x_msg_data IS NULL) THEN
203             FND_MSG_PUB.Count_And_Get
204             (      p_encoded   =>  FND_API.G_FALSE
205                ,   p_count     =>  x_msg_count
206                ,   p_data      =>  x_msg_data
207             );
208         END IF;
209         x_Return_Status :=  FND_API.G_RET_STS_ERROR;
210     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
211         ROLLBACK TO CreatePeriodicityPUB;
212         IF (x_msg_data IS NULL) THEN
213             FND_MSG_PUB.Count_And_Get
214             (      p_encoded   =>  FND_API.G_FALSE
215                ,   p_count     =>  x_msg_count
216                ,   p_data      =>  x_msg_data
217             );
218         END IF;
219         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
220     WHEN NO_DATA_FOUND THEN
221         ROLLBACK TO CreatePeriodicityPUB;
222         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
223         IF (x_msg_data IS NOT NULL) THEN
224             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Create_Periodicity ';
225         ELSE
226             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Create_Periodicity ';
227         END IF;
228     WHEN OTHERS THEN
229         ROLLBACK TO CreatePeriodicityPUB;
230         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
231         IF (x_msg_data IS NOT NULL) THEN
232             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Create_Periodicity ';
233         ELSE
234             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Create_Periodicity ';
235         END IF;
236 END Create_Periodicity;
237 
238 
239 PROCEDURE Update_Periodicity (
240   p_Api_Version             IN          NUMBER
241  ,p_Commit                  IN          VARCHAR2 := FND_API.G_FALSE
242  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
243  ,p_disable_period_val_flag IN          VARCHAR2
244  ,x_Return_Status           OUT NOCOPY  VARCHAR2
245  ,x_Msg_Count               OUT NOCOPY  NUMBER
246  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
247 ) IS
248     l_Periodicities_Rec_Type BSC_PERIODICITIES_PUB.Periodicities_Rec_Type;
249     l_Structural_Flag        VARCHAR2(1);
250     l_Periodicity_View_Name  VARCHAR2(30);
251     l_Message_Name           BSC_MESSAGES.MESSAGE_NAME%TYPE;
252     l_Objective_List         VARCHAR2(2000);
253     l_Dimobj_Name             BIS_LEVELS_TL.NAME%TYPE;
254     l_Dim_Short_Name         BSC_SYS_DIM_GROUPS_TL.SHORT_NAME%TYPE;
255     l_Dim_Enabled            VARCHAR2(10);
256 BEGIN
257     SAVEPOINT UpdatePeriodicityPUB;
258     FND_MSG_PUB.Initialize;
259     l_Dim_Enabled   := FND_API.G_TRUE;
260     x_Return_Status := FND_API.G_RET_STS_SUCCESS;
261 
262     l_Periodicities_Rec_Type := p_Periodicities_Rec_Type;
263 
264     l_Structural_Flag := FND_API.G_FALSE;
265 
266     BSC_PERIODICITIES_PUB.Validate_Periodicity (
267       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
268      ,p_Periodicities_Rec_Type  => l_Periodicities_Rec_Type
269      ,p_Action_Type             => BSC_PERIODS_UTILITY_PKG.C_UPDATE
270      ,x_Return_Status           => x_Return_Status
271      ,x_Msg_Count               => x_Msg_Count
272      ,x_Msg_Data                => x_Msg_Data
273     );
274     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
275       RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
276     END IF;
277 
278     BSC_PERIODICITIES_PUB.Get_Incr_Change (
279        p_Periodicity_Id       => l_Periodicities_Rec_Type.Periodicity_Id
280       ,p_Calendar_ID          => l_Periodicities_Rec_Type.Calendar_Id
281       ,p_Base_Periodicity_Id  => l_Periodicities_Rec_Type.Base_Periodicity_Id
282       ,p_Num_Of_Periods       => l_Periodicities_Rec_Type.Num_Of_Periods
283       ,p_Period_Ids           => l_Periodicities_Rec_Type.Period_IDs
284       ,p_Return_Values        => FND_API.G_FALSE
285       ,x_Message_Name         => l_Message_Name
286       ,x_Objective_List       => l_Objective_List
287     );
288 
289     BSC_PERIODICITIES_PVT.Update_Periodicity (
290       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
291      ,p_Commit                  => p_Commit
292      ,p_Periodicities_Rec_Type  => l_Periodicities_Rec_Type
293      ,x_Structural_Flag         => l_Structural_Flag
294      ,x_Return_Status           => x_Return_Status
295      ,x_Msg_Count               => x_Msg_Count
296      ,x_Msg_Data                => x_Msg_Data
297     );
298     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
299         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
300     END IF;
301 
302     IF (l_Message_Name IS NOT NULL) THEN
303         l_Structural_Flag := FND_API.G_TRUE;
304     END IF ;
305 
306     BSC_PERIODICITIES_PUB.Populate_Period_Metadata (
307       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
308      ,p_Commit                  => p_Commit
309      ,p_Action_Type             => BSC_PERIODS_UTILITY_PKG.C_UPDATE
310      ,p_Periodicities_Rec_Type  => l_Periodicities_Rec_Type
311      ,p_disable_period_val_flag => p_disable_period_val_flag
312      ,x_Return_Status           => x_Return_Status
313      ,x_Msg_Count               => x_Msg_Count
314      ,x_Msg_Data                => x_Msg_Data
315     );
316     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
317         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
318     END IF;
319 
320     BSC_PERIODICITIES_PUB.Update_Annually_Source(
321       p_Calendar_Id     => l_Periodicities_Rec_Type.Calendar_Id
322      ,p_Periodicity_Id  => l_Periodicities_Rec_Type.Periodicity_Id
323      ,p_Action          => 1  -- Action for new/updated Period.
324      ,x_Return_Status   => x_Return_Status
325      ,x_Msg_Count       => x_Msg_Count
326      ,x_Msg_Data        => x_Msg_Data
327     );
328     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
329         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
330     END IF;
331 
332     -- Recreate underlying views.
333     BSC_PERIODS_PUB.Create_Periodicity_View
334     (
335       p_Periodicity_Id         => l_Periodicities_Rec_Type.Periodicity_Id
336     , p_Short_Name             => l_Periodicities_Rec_Type.Short_Name
337     , p_Calendar_Id            => l_Periodicities_Rec_Type.Calendar_Id
338     , x_Periodicity_View_Name  => l_Periodicity_View_Name
339     , x_Return_Status          => x_Return_Status
340     , x_Msg_Count              => x_Msg_Count
341     , x_Msg_Data               => x_Msg_Data
342     );
343     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
344         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
345     END IF;
346 
347     IF(l_Periodicities_Rec_Type.Periodicity_Type IN (11,12) )THEN
348       l_Dim_Enabled := FND_API.G_FALSE;
349     END IF;
350 
351     l_Dim_Short_Name := BSC_PERIODS_UTILITY_PKG.Get_Calendar_Short_Name(l_Periodicities_Rec_Type.Calendar_Id);
352     l_Dimobj_Name := BSC_PERIODS_UTILITY_PKG.get_Dimobj_Name_From_period
353                      ( p_Calendar_Id      => l_Periodicities_Rec_Type.Calendar_Id
354                      , p_Periodicity_Name => l_Periodicities_Rec_Type.Name
355                      );
356     -- passed p_Dim_Obj_Enabled = 'T' for Dimension Objects, Bug#4655119
357     BSC_BIS_DIM_OBJ_PUB.Update_Dim_Object
358     (
359             p_Commit                    =>  p_commit
360         ,   p_Dim_Obj_Short_Name        =>  l_Periodicities_Rec_Type.Short_Name
361         ,   p_Display_Name              =>  l_Dimobj_Name
362         ,   p_Application_Id            =>  l_Periodicities_Rec_Type.Application_id
363         ,   p_Description               =>  l_Periodicities_Rec_Type.Description
364         ,   p_Data_Source               =>  BSC_PERIODS_UTILITY_PKG.C_PMF_DO_TYPE
365         ,   p_Source_Table              =>  l_Periodicity_View_Name
366         ,   p_Where_Clause              =>  NULL
367         ,   p_Comparison_Label_Code     =>  NULL
368         ,   p_Table_Column              =>  NULL
369         ,   p_Source_Type               =>  BSC_PERIODS_UTILITY_PKG.C_OLTP_DO_TYPE
370         ,   p_Maximum_Code_Size         =>  NULL
371         ,   p_Maximum_Name_Size         =>  NULL
372         ,   p_All_Item_Text             =>  NULL
373         ,   p_Comparison_Item_Text      =>  NULL
374         ,   p_Prototype_Default_Value   =>  NULL
375         ,   p_Dimension_Values_Order    =>  NULL
376         ,   p_Comparison_Order          =>  NULL
377         ,   p_Assign_Dim_Short_Names    =>  l_Dim_Short_Name
378         ,   p_Unassign_Dim_Short_Names  =>  NULL
379         ,   p_Dim_Obj_Enabled           =>  l_Dim_Enabled
380         ,   x_Return_Status             =>  x_Return_Status
381         ,   x_Msg_Count                 =>  x_Msg_Count
382         ,   x_Msg_Data                  =>  x_Msg_Data
383     );
384     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
385         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
386     END IF;
387 
388 
389     IF (l_Structural_Flag = FND_API.G_TRUE) THEN
390         BSC_PERIODICITIES_PVT.Incr_Refresh_Objectives(
391           p_Commit                  => p_Commit
392          ,p_Periodicities_Rec_Type  => p_Periodicities_Rec_Type
393          ,x_Return_Status           => x_Return_Status
394          ,x_Msg_Count               => x_Msg_Count
395          ,x_Msg_Data                => x_Msg_Data
396         );
397         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
398             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
399         END IF;
400     END IF;
401     -- populate Calendar tables.
402 
403     IF(l_Periodicities_Rec_Type.ForceRunPopulateCalendar = FND_API.G_TRUE ) THEN
404         BSC_UPDATE_UTIL.Populate_Calendar_Tables
405         ( p_commit         => p_Commit
406         , p_calendar_id    => l_Periodicities_Rec_Type.Calendar_Id
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     END IF;
416 
417     IF ((p_Commit IS NOT NULL) AND p_Commit = FND_API.G_TRUE) THEN
418         COMMIT;
419     END IF;
420 
421 EXCEPTION
422     WHEN FND_API.G_EXC_ERROR THEN
423         ROLLBACK TO UpdatePeriodicityPUB;
424         IF (x_msg_data IS NULL) THEN
425             FND_MSG_PUB.Count_And_Get
426             (      p_encoded   =>  FND_API.G_FALSE
427                ,   p_count     =>  x_msg_count
428                ,   p_data      =>  x_msg_data
429             );
430         END IF;
431         x_Return_Status :=  FND_API.G_RET_STS_ERROR;
432     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
433         ROLLBACK TO UpdatePeriodicityPUB;
434         IF (x_msg_data IS NULL) THEN
435             FND_MSG_PUB.Count_And_Get
436             (      p_encoded   =>  FND_API.G_FALSE
437                ,   p_count     =>  x_msg_count
438                ,   p_data      =>  x_msg_data
439             );
440         END IF;
441         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
442     WHEN NO_DATA_FOUND THEN
443         ROLLBACK TO UpdatePeriodicityPUB;
444         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
445         IF (x_msg_data IS NOT NULL) THEN
446             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Update_Periodicity ';
447         ELSE
448             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Update_Periodicity ';
449         END IF;
450     WHEN OTHERS THEN
451         ROLLBACK TO UpdatePeriodicityPUB;
452         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
453         IF (x_msg_data IS NOT NULL) THEN
454             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Update_Periodicity ';
455         ELSE
456             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Update_Periodicity ';
457         END IF;
458 END Update_Periodicity;
459 
460 
461 
462 -- Delete periodicity API
463 PROCEDURE Delete_Periodicity (
464   p_Api_Version             IN          NUMBER
465  ,p_Commit                  IN          VARCHAR2
466  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
467  ,x_Return_Status           OUT NOCOPY  VARCHAR2
468  ,x_Msg_Count               OUT NOCOPY  NUMBER
469  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
470 ) IS
471     l_Dim_Object_SN  BSC_SYS_PERIODICITIES.SHORT_NAME%TYPE;
472     l_Dimension_SN   BSC_SYS_CALENDARS_B.SHORT_NAME%TYPE;
473     l_Periodicity_View_Name   VARCHAR2(30);
474     l_dim_name       BSC_SYS_CALENDARS_VL.NAME%TYPE;
475     l_dim_obj_name   BSC_SYS_PERIODICITIES_VL.NAME%TYPE;
476     l_regions        VARCHAR2(32000);
477 
478     CURSOR c_Delete_View IS
479         SELECT L.LEVEL_VALUES_VIEW_NAME
480         FROM   BIS_LEVELS L
481         WHERE  L.SHORT_NAME = l_Dim_Object_SN
482         AND    L.LEVEL_VALUES_VIEW_NAME IS NOT NULL;
483 BEGIN
484     SAVEPOINT DeletePeriodicityPUB;
485     FND_MSG_PUB.Initialize;
486 
487     x_Return_Status := FND_API.G_RET_STS_SUCCESS;
488     --dbms_output.PUT_LINE('p_Periodicities_Rec_Type.Periodicity_Id - ' ||p_Periodicities_Rec_Type.Periodicity_Id);
489     --dbms_output.PUT_LINE('p_Periodicities_Rec_Type.Calendar_Id - ' ||p_Periodicities_Rec_Type.Calendar_Id);
490 
491 
492     BSC_PERIODICITIES_PUB.Validate_Periodicity (
493       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
494      ,p_Periodicities_Rec_Type  => p_Periodicities_Rec_Type
495      ,p_Action_Type             => BSC_PERIODS_UTILITY_PKG.C_DELETE
496      ,x_Return_Status           => x_Return_Status
497      ,x_Msg_Count               => x_Msg_Count
498      ,x_Msg_Data                => x_Msg_Data
499     );
500     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
501         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
502     END IF;
503 
504     l_Dim_Object_SN := BSC_PERIODS_UTILITY_PKG.Get_Periodicity_Short_Name(p_Periodicities_Rec_Type.Periodicity_Id);
505     l_Dimension_SN  := BSC_PERIODS_UTILITY_PKG.Get_Calendar_Short_Name(p_Periodicities_Rec_Type.Calendar_Id);
506     l_regions := BSC_UTILITY.Is_Dim_In_AKReport(l_Dimension_SN||'+'||l_Dim_Object_SN);
507     IF(l_regions IS NOT NULL) THEN
508 
509       SELECT c.name
510       INTO   l_dim_name
511       FROM   bsc_sys_calendars_vl c
512       WHERE  c.short_name = l_Dimension_SN;
513 
514       SELECT c.name
515       INTO   l_dim_obj_name
516       FROM   bsc_sys_periodicities_vl c
517       WHERE  c.short_name = l_Dim_Object_SN;
518 
519       FND_MESSAGE.SET_NAME('BIS','BIS_DIM_OBJ_RPTASSOC_ERROR');
520       FND_MESSAGE.SET_TOKEN('DIM_NAME', l_dim_obj_name);
521       FND_MESSAGE.SET_TOKEN('DIM_OBJ_NAME', l_dim_name);
522       FND_MESSAGE.SET_TOKEN('REPORTS_ASSOC', l_regions);
523       FND_MSG_PUB.ADD;
524       RAISE FND_API.G_EXC_ERROR;
525     END IF;
526 
527     BSC_PERIODICITIES_PVT.Delete_Periodicity (
528       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
529      ,p_Commit                  => p_Commit
530      ,p_Periodicities_Rec_Type  => p_Periodicities_Rec_Type
531      ,x_Return_Status           => x_Return_Status
532      ,x_Msg_Count               => x_Msg_Count
533      ,x_Msg_Data                => x_Msg_Data
534     );
535     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
536         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
537     END IF;
538 
539     BSC_PERIODICITIES_PUB.Update_Annually_Source(
540       p_Calendar_Id     => p_Periodicities_Rec_Type.Calendar_Id
541      ,p_Periodicity_Id  => p_Periodicities_Rec_Type.Periodicity_Id
542      ,p_Action          => 2  -- Action for Period Delete.
543      ,x_Return_Status   => x_Return_Status
544      ,x_Msg_Count       => x_Msg_Count
545      ,x_Msg_Data        => x_Msg_Data
546     );
547     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
548       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
549     END IF;
550 
551 
552     --dbms_output.PUT_LINE('Shortnames - ' || l_Dim_Object_SN || ', ' || l_Dimension_SN);
553 
554     BSC_BIS_DIM_OBJ_PUB.Unassign_Dimensions
555     (       p_commit                =>  p_commit
556         ,   p_dim_obj_short_name    =>  l_Dim_Object_SN
557         ,   p_dim_short_names       =>  l_Dimension_SN
558         ,   x_return_status         =>  x_return_status
559         ,   x_msg_count             =>  x_msg_count
560         ,   x_msg_data              =>  x_msg_data
561     );
562     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
563         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
564     END IF;
565 
566     --dbms_output.PUT_LINE(' After Unassign_Dimensions ');
567 
568     -- Get hold of the view that needs to be dropped.
569     FOR cDelView IN c_Delete_View LOOP
570         l_Periodicity_View_Name := cDelView.LEVEL_VALUES_VIEW_NAME;
571     END LOOP;
572 
573     BSC_BIS_DIM_OBJ_PUB.Delete_Dim_Object
574     (       p_commit              => p_commit
575         ,   p_dim_obj_short_name  => l_Dim_Object_SN
576         ,   x_return_status       => x_return_status
577         ,   x_msg_count           => x_msg_count
578         ,   x_msg_data            => x_msg_data
579     );
580     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
581         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
582     END IF;
583 
584     --dbms_output.PUT_LINE(' After Delete_Dim_Object ');
585 
586 
587     -- Drop the periodicity view
588     IF (l_Periodicity_View_Name IS NOT NULL) THEN
589         BSC_PERIODS_PUB.Drop_Periodicity_View
590         (
591           p_Periodicity_View  => l_Periodicity_View_Name
592         , x_Return_Status     => x_Return_Status
593         , x_Msg_Count         => x_Msg_Count
594         , x_Msg_Data          => x_Msg_Data
595         );
596         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
597             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
598         END IF;
599     END IF;
600 
601     IF (p_Commit IS NOT NULL AND p_Commit = FND_API.G_TRUE) THEN
602         COMMIT;
603     END IF;
604 
605 EXCEPTION
606     WHEN FND_API.G_EXC_ERROR THEN
607         ROLLBACK TO DeletePeriodicityPUB;
608         IF (x_msg_data IS NULL) THEN
609             FND_MSG_PUB.Count_And_Get
610             (      p_encoded   =>  FND_API.G_FALSE
611                ,   p_count     =>  x_msg_count
612                ,   p_data      =>  x_msg_data
613             );
614         END IF;
615         x_Return_Status :=  FND_API.G_RET_STS_ERROR;
616     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
617         ROLLBACK TO DeletePeriodicityPUB;
618         IF (x_msg_data IS NULL) THEN
619             FND_MSG_PUB.Count_And_Get
620             (      p_encoded   =>  FND_API.G_FALSE
621                ,   p_count     =>  x_msg_count
622                ,   p_data      =>  x_msg_data
623             );
624         END IF;
625         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
626     WHEN NO_DATA_FOUND THEN
627         ROLLBACK TO DeletePeriodicityPUB;
628         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
629         IF (x_msg_data IS NOT NULL) THEN
630             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Delete_Periodicity ';
631         ELSE
632             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Delete_Periodicity ';
633         END IF;
634     WHEN OTHERS THEN
635         ROLLBACK TO DeletePeriodicityPUB;
636         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
637         IF (x_msg_data IS NOT NULL) THEN
638             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Delete_Periodicity ';
639         ELSE
640             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Delete_Periodicity ';
641         END IF;
642 END Delete_Periodicity;
643 
644 
645 PROCEDURE Validate_Periodicity (
646   p_Api_Version             IN          NUMBER
647  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
648  ,p_Action_Type             IN          VARCHAR2
649  ,x_Return_Status           OUT NOCOPY  VARCHAR2
650  ,x_Msg_Count               OUT NOCOPY  NUMBER
651  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
652 )IS
653 BEGIN
654    BSC_PERIODICITIES_PUB.Validate_Periodicity
655    (
656       p_Api_Version             => p_Api_Version
657      ,p_Periodicities_Rec_Type  => p_Periodicities_Rec_Type
658      ,p_Action_Type             => p_Action_Type
659      ,p_disable_period_val_flag => FND_API.G_FALSE
660      ,x_Return_Status           => x_Return_Status
661      ,x_Msg_Count               => x_Msg_Count
662      ,x_Msg_Data                => x_Msg_Data
663     );
664 END Validate_Periodicity;
665 
666 
667 
668 PROCEDURE Validate_Periodicity (
669   p_Api_Version             IN          NUMBER
670  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
671  ,p_Action_Type             IN          VARCHAR2
672  ,p_disable_period_val_flag IN          VARCHAR2
673  ,x_Return_Status           OUT NOCOPY  VARCHAR2
674  ,x_Msg_Count               OUT NOCOPY  NUMBER
675  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
676 ) IS
677     CURSOR c_Objectives IS
678     SELECT K.NAME
679     FROM   BSC_KPIS_VL K
680          , BSC_KPI_PERIODICITIES P
681     WHERE  P.PERIODICITY_ID = p_Periodicities_Rec_Type.Periodicity_Id
682     AND    K.INDICATOR = P.INDICATOR;
683 
684 
685     l_Periodicity_Name  BSC_SYS_PERIODICITIES_TL.NAME%TYPE;
686     l_Is_Name_Unique    VARCHAR2(1);
687     l_Max_Periodicities NUMBER;
688     l_Count             NUMBER;
689     l_Is_Circular       VARCHAR2(3);
690     l_Objective_Names   VARCHAR2(2000);
691 BEGIN
692     SAVEPOINT ValidatePeriodicityPUB;
693 
694     FND_MSG_PUB.Initialize;
695     x_Return_Status := FND_API.G_RET_STS_SUCCESS;
696 
697 
698     IF ((p_Action_Type = BSC_PERIODS_UTILITY_PKG.C_CREATE) OR (p_Action_Type = BSC_PERIODS_UTILITY_PKG.C_UPDATE)) THEN
699 
700         IF (p_Periodicities_Rec_Type.Calendar_Id IS NULL) THEN
701             FND_MESSAGE.SET_NAME('BSC','BSC_CALENDAR_ID_NULL');
702             FND_MSG_PUB.ADD;
703             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
704         END IF;
705 
706         IF (p_Periodicities_Rec_Type.Custom_Code <> BSC_PERIODS_UTILITY_PKG.C_BASE_PERIODICITY_TYPE) THEN
707             IF (p_Periodicities_Rec_Type.Base_Periodicity_Id IS NULL) THEN
708                 FND_MESSAGE.SET_NAME('BSC','BSC_BASE_PERIODICITY_NULL');
709                 FND_MSG_PUB.ADD;
710                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
711             END IF;
712 
713             IF (p_Periodicities_Rec_Type.Period_IDs IS NULL) THEN
714                 FND_MESSAGE.SET_NAME('BSC','BSC_PERIOD_IDS_NULL');
715                 FND_MSG_PUB.ADD;
716                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
717             END IF;
718         END IF;
719 
720         l_Is_Name_Unique := BSC_PERIODS_UTILITY_PKG.Is_Period_Name_Unique (
721                                   p_Periodicities_Rec_Type.Calendar_Id
722                                 , p_Periodicities_Rec_Type.Name
723                             );
724 
725         -- Validation#3
726         IF (p_Periodicities_Rec_Type.Num_Of_Periods IS NULL) THEN
727             FND_MESSAGE.SET_NAME('BSC','BSC_NUM_PERIODS_CANNOT_NULL');
728             FND_MSG_PUB.ADD;
729             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
730         END IF;
731 
732 
733 
734         IF (p_Action_Type = BSC_PERIODS_UTILITY_PKG.C_CREATE) THEN
735 
736             -- Validation#1:
737             IF(l_Is_Name_Unique = FND_API.G_FALSE) THEN
738                 FND_MESSAGE.SET_NAME('BSC','BSC_PERIOD_EXISTS');
739                 FND_MESSAGE.SET_TOKEN('PERIOD', p_Periodicities_Rec_Type.Name);
740                 FND_MESSAGE.SET_TOKEN('CALENDAR',
741                     BSC_PERIODS_UTILITY_PKG.Get_Calendar_Name(
742                         p_Periodicities_Rec_Type.Calendar_Id
743                     )
744                 );
745                 FND_MSG_PUB.ADD;
746                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
747             END IF;
748 
749             -- Validation#2
750             SELECT COUNT(1) INTO l_Count
751             FROM   BSC_SYS_PERIODICITIES P
752             WHERE  P.PERIODICITY_ID = p_Periodicities_Rec_Type.Periodicity_id;
753 
754             IF (l_Count <> 0) THEN
755                 FND_MESSAGE.SET_NAME('BSC','BSC_PERIODICITY_ID_UNIQUE');
756                 FND_MESSAGE.SET_TOKEN('PERIODICITY_ID', p_Periodicities_Rec_Type.Periodicity_id);
757                 FND_MSG_PUB.ADD;
758                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
759             END IF;
760 
761             -- Validation#2:
762             l_Max_Periodicities := BSC_PERIODS_UTILITY_PKG.Get_Cust_Per_Cnt_By_Calendar(
763                                         p_Periodicities_Rec_Type.Calendar_Id
764                                    );
765             IF(l_Max_Periodicities =  BSC_PERIODS_UTILITY_PKG.C_MAX_CUSTOM_PERIODICITIES) THEN
766                 FND_MESSAGE.SET_NAME('BSC','BSC_PER_CAL_EXCEEDS_LIMIT');
767                 FND_MESSAGE.SET_TOKEN('CALENDAR',
768                     BSC_PERIODS_UTILITY_PKG.Get_Calendar_Name(
769                         p_Periodicities_Rec_Type.Calendar_Id
770                     )
771                 );
772                 FND_MSG_PUB.ADD;
773                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
774             END IF;
775         END IF;
776 
777         IF (p_Action_Type = BSC_PERIODS_UTILITY_PKG.C_UPDATE) THEN
778 
779             SELECT COUNT(1) INTO l_Count
780             FROM   BSC_SYS_PERIODICITIES_VL P
781             WHERE  P.NAME            = p_Periodicities_Rec_Type.Name
782             AND    P.CALENDAR_ID     = p_Periodicities_Rec_Type.Calendar_Id
783             AND    P.PERIODICITY_ID <> p_Periodicities_Rec_Type.Periodicity_id;
784 
785             IF (l_Count <> 0) THEN
786                 FND_MESSAGE.SET_NAME('BSC','BSC_PERIOD_EXISTS');
787                 FND_MESSAGE.SET_TOKEN('PERIOD', p_Periodicities_Rec_Type.Name);
788                 FND_MESSAGE.SET_TOKEN('CALENDAR',
789                     BSC_PERIODS_UTILITY_PKG.Get_Calendar_Name(
790                         p_Periodicities_Rec_Type.Calendar_Id
791                     )
792                 );
793                 FND_MSG_PUB.ADD;
794                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
795             END IF;
796 
797             -- Do not allow update of Base Periodicities .
798             -- Change Periodicity_Type to Custom_Code.
799             SELECT COUNT(1) INTO l_Count
800             FROM   BSC_SYS_PERIODICITIES B
801             WHERE  B.PERIODICITY_ID   = p_Periodicities_Rec_Type.Periodicity_id
802             AND    B.CALENDAR_ID      = p_Periodicities_Rec_Type.Calendar_Id
803             AND    B.PERIODICITY_TYPE <> 0;
804 
805             IF (l_Count <> 0) THEN
806                 FND_MESSAGE.SET_NAME('BSC','BSC_NO_UPT_BASE_PERIODICITIES');
807                 FND_MSG_PUB.ADD;
808                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
809             END IF;
810 
811             -- Check for circular dependency
812             l_Is_Circular := BSC_BIS_KPI_MEAS_PUB.is_Period_Circular (
813                                       p_Periodicities_Rec_Type.Base_Periodicity_Id
814                                     , p_Periodicities_Rec_Type.Periodicity_id
815                              );
816 
817             IF (l_Is_Circular = BSC_BIS_KPI_MEAS_PUB.CIR_REF_EXISTS) THEN
818                 FND_MESSAGE.SET_NAME('BSC','BSC_PERIOD_NO_CIRCULAR_REF');
819                 FND_MSG_PUB.ADD;
820                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
821             END IF;
822         END IF;
823     ELSIF (p_Action_Type = BSC_PERIODS_UTILITY_PKG.C_DELETE) THEN
824 
825         -- You cannot delete a BASE Periodicity
826         SELECT COUNT(1) INTO l_Count
827         FROM   BSC_SYS_PERIODICITIES B
828         WHERE  B.PERIODICITY_ID   = p_Periodicities_Rec_Type.Periodicity_id
829         AND    B.CALENDAR_ID      = p_Periodicities_Rec_Type.Calendar_Id
830         AND    B.PERIODICITY_TYPE <> 0;
831 
832         IF (l_Count <> 0) THEN
833             FND_MESSAGE.SET_NAME('BSC','BSC_NO_DEL_BASE_PERIODICITIES');
834             FND_MSG_PUB.ADD;
835             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
836         END IF;
837 
838         -- You cannot delete a custom periodicity, which is the base
839         -- periodicity of another Custom Periodicity
840 
841         IF(p_disable_period_val_flag=FND_API.G_FALSE)THEN
842 
843             SELECT COUNT(1) INTO l_Count
844             FROM   BSC_SYS_PERIODICITIES B
845             WHERE  TRIM(B.SOURCE) = TO_CHAR(p_Periodicities_Rec_Type.Periodicity_id);
846 
847             IF (l_Count <> 0) THEN
848                 FND_MESSAGE.SET_NAME('BSC','BSC_NO_DEL_IS_BASE_PER');
849                 FND_MSG_PUB.ADD;
850                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
851             END IF;
852         END IF;
853 
854         -- You cannot delete a periodicity, if it being used in some
855         -- objectives.
856 
857         SELECT COUNT(1) INTO l_Count
858         FROM   BSC_KPI_PERIODICITIES P
859         WHERE  P.PERIODICITY_ID = p_Periodicities_Rec_Type.Periodicity_id;
860 
861         IF (l_Count <> 0) THEN
862             FOR cObj IN c_Objectives LOOP
863                 IF(l_Objective_Names IS NULL) THEN
864                     l_Objective_Names := cObj.NAME;
865                 ELSE
866                     l_Objective_Names := l_Objective_Names || ',' || cObj.NAME;
867                 END IF;
868             END LOOP;
869 
870             -- fixed for Bug#4574115
871             FND_MESSAGE.SET_NAME('BSC','BSC_PERIOD_USED_IN_OBJECTIVE');
872             FND_MESSAGE.SET_TOKEN('PERIODICITY', BSC_PERIODS_UTILITY_PKG.Get_Periodicity_Name(p_Periodicities_Rec_Type.Periodicity_id));
873             FND_MESSAGE.SET_TOKEN('OBJECTIVES', l_Objective_Names);
874             FND_MSG_PUB.ADD;
875             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
876         END IF;
877 
878     END IF;
879 
880 EXCEPTION
881     WHEN FND_API.G_EXC_ERROR THEN
882         ROLLBACK TO ValidatePeriodicityPUB;
883         IF (x_msg_data IS NULL) THEN
884             FND_MSG_PUB.Count_And_Get
885             (      p_encoded   =>  FND_API.G_FALSE
886                ,   p_count     =>  x_msg_count
887                ,   p_data      =>  x_msg_data
888             );
889         END IF;
890         x_Return_Status :=  FND_API.G_RET_STS_ERROR;
891     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
892         ROLLBACK TO ValidatePeriodicityPUB;
893         IF (x_msg_data IS NULL) THEN
894             FND_MSG_PUB.Count_And_Get
895             (      p_encoded   =>  FND_API.G_FALSE
896                ,   p_count     =>  x_msg_count
897                ,   p_data      =>  x_msg_data
898             );
899         END IF;
900         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
901     WHEN NO_DATA_FOUND THEN
902         ROLLBACK TO ValidatePeriodicityPUB;
903         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
904         IF (x_msg_data IS NOT NULL) THEN
905             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Validate_Periodicity ';
906         ELSE
907             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Validate_Periodicity ';
908         END IF;
909     WHEN OTHERS THEN
910         ROLLBACK TO ValidatePeriodicityPUB;
911         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
912         IF (x_msg_data IS NOT NULL) THEN
913             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Validate_Periodicity ';
914         ELSE
915             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Validate_Periodicity ';
916         END IF;
917 END Validate_Periodicity;
918 
919 -- This API tries to populate the periodicity record with pre-req/default values.
920 
921 PROCEDURE Populate_Periodicity_Record (
922   p_Api_Version             IN          NUMBER
923  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
924  ,x_Periodicities_Rec_Type  OUT NOCOPY  BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
925  ,x_Return_Status           OUT NOCOPY  VARCHAR2
926  ,x_Msg_Count               OUT NOCOPY  NUMBER
927  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
928 ) IS
929 
930     l_Calendar_Id               BSC_SYS_CALENDARS_B.CALENDAR_ID%TYPE;
931     l_Base_Periodicity_Source   BSC_SYS_PERIODICITIES.SOURCE%TYPE;
932 BEGIN
933     FND_MSG_PUB.Initialize;
934     x_Return_Status := FND_API.G_RET_STS_SUCCESS;
935     x_Periodicities_Rec_Type := p_Periodicities_Rec_Type;
936 
937     l_Calendar_Id := p_Periodicities_Rec_Type.Calendar_Id;
938     l_Base_Periodicity_Source := NULL;
939 
940     -- Get the next periodicity_id from sequence
941     IF (x_Periodicities_Rec_Type.Periodicity_Id IS NULL) THEN
942         x_Periodicities_Rec_Type.Periodicity_Id := BSC_PERIODS_UTILITY_PKG.Get_Next_Periodicity_Id;
943     END IF;
944 
945     IF (x_Periodicities_Rec_Type.Custom_Code IS NULL) THEN
946         x_Periodicities_Rec_Type.Custom_Code := BSC_PERIODS_UTILITY_PKG.C_CUSTOM_PERIODICITY_CODE;
947     END IF;
948 
949     -- If the periodicity_type is Custom then differnt defaults needs to populated differently
950 
951     IF (x_Periodicities_Rec_Type.Custom_Code <> BSC_PERIODS_UTILITY_PKG.C_NON_CUSTOM_PERIODICITY_CODE) THEN
952 
953         -- Populate the BSC_SYS_PERIODICITY.SOURCE column
954         IF (x_Periodicities_Rec_Type.Base_Periodicity_Id IS NOT NULL) THEN
955             /*l_Base_Periodicity_Source := BSC_PERIODS_UTILITY_PKG.Get_Periodicity_Source (
956                                                 x_Periodicities_Rec_Type.Base_Periodicity_Id
957                                          );
958             IF (l_Base_Periodicity_Source IS NOT NULL) THEN
959                 l_Base_Periodicity_Source := l_Base_Periodicity_Source ||
960                                              ',' ||
961                                              x_Periodicities_Rec_Type.Base_Periodicity_Id;
962             ELSE
963                 l_Base_Periodicity_Source := x_Periodicities_Rec_Type.Base_Periodicity_Id;
964             END IF;
965             */
966             -- Fixed for UTP issue#1
967             l_Base_Periodicity_Source := x_Periodicities_Rec_Type.Base_Periodicity_Id;
968 
969         END IF;
970 
971         x_Periodicities_Rec_Type.Source             := l_Base_Periodicity_Source;
972 
973         x_Periodicities_Rec_Type.Num_Of_Subperiods  := BSC_PERIODS_UTILITY_PKG.C_CUST_NUM_OF_SUBPERIODS;
974         x_Periodicities_Rec_Type.Period_Col_Name    := BSC_PERIODS_UTILITY_PKG.C_DFLT_PERIOD_COL_NAME;
975         x_Periodicities_Rec_Type.Subperiod_Col_Name := NULL;
976         x_Periodicities_Rec_Type.Yearly_Flag        := BSC_PERIODS_UTILITY_PKG.C_PERIODICITY_YEARLY_FLAG;
977         x_Periodicities_Rec_Type.Edw_Flag           := 0; -- not used anymore
978         x_Periodicities_Rec_Type.Edw_Periodicity_Id := NULL; -- not used anymore
979 
980         IF(x_Periodicities_Rec_Type.Db_Column_Name IS NULL) THEN
981             x_Periodicities_Rec_Type.Db_Column_Name := BSC_PERIODS_UTILITY_PKG.Get_Next_Cust_Period_DB_Column (
982                                                             l_Calendar_Id
983                                                        );
984         END IF;
985 
986         x_Periodicities_Rec_Type.Periodicity_Type   := BSC_PERIODS_UTILITY_PKG.C_CUST_PERIODICITY_TYPE;
987         x_Periodicities_Rec_Type.Period_Type_Id     := NULL;
988         x_Periodicities_Rec_Type.Record_Type_Id     := NULL;
989         x_Periodicities_Rec_Type.Xtd_Pattern        := NULL;
990 
991     ELSE  -- else these periodicities are of BSC type
992         x_Periodicities_Rec_Type.Num_Of_Subperiods  := BSC_PERIODS_UTILITY_PKG.C_CUST_NUM_OF_SUBPERIODS;
993 
994         IF (x_Periodicities_Rec_Type.Period_Col_Name IS NULL) THEN
995             x_Periodicities_Rec_Type.Period_Col_Name    := BSC_PERIODS_UTILITY_PKG.C_DFLT_PERIOD_COL_NAME;
996         END IF;
997 
998         x_Periodicities_Rec_Type.Subperiod_Col_Name := NULL;
999 
1000         IF (x_Periodicities_Rec_Type.Yearly_Flag IS NULL) THEN
1001             x_Periodicities_Rec_Type.Yearly_Flag        := BSC_PERIODS_UTILITY_PKG.C_PERIODICITY_YEARLY_FLAG;
1002         END IF;
1003 
1004         x_Periodicities_Rec_Type.Edw_Flag           := 0; -- not used anymore
1005         x_Periodicities_Rec_Type.Edw_Periodicity_Id := NULL; -- not used anymore
1006 
1007         x_Periodicities_Rec_Type.Period_Type_Id     := NULL;
1008         x_Periodicities_Rec_Type.Record_Type_Id     := NULL;
1009         x_Periodicities_Rec_Type.Xtd_Pattern        := NULL;
1010 
1011     END IF;
1012 
1013     IF (x_Periodicities_Rec_Type.Short_Name IS NULL) THEN
1014          x_Periodicities_Rec_Type.Short_Name := BSC_PERIODS_UTILITY_PKG.generate_Period_Short_Name
1015                                                                         ( l_Calendar_Id
1016                                                                         , x_Periodicities_Rec_Type.Periodicity_Id
1017                                                                         );
1018     END IF;
1019 
1020 
1021     IF (x_Periodicities_Rec_Type.Application_Id IS NULL) THEN
1022         x_Periodicities_Rec_Type.Application_Id := BSC_PERIODS_UTILITY_PKG.C_BSC_APPLICATION_ID;
1023     END IF;
1024 
1025     IF (x_Periodicities_Rec_Type.Created_By IS NULL) THEN
1026         x_Periodicities_Rec_Type.Created_By := FND_GLOBAL.USER_ID;
1027     END IF;
1028 
1029     IF (x_Periodicities_Rec_Type.Creation_Date IS NULL) THEN
1030         x_Periodicities_Rec_Type.Creation_Date := SYSDATE;
1031     END IF;
1032 
1033     IF (x_Periodicities_Rec_Type.Last_Updated_By IS NULL) THEN
1034         x_Periodicities_Rec_Type.Last_Updated_By := FND_GLOBAL.USER_ID;
1035     END IF;
1036 
1037     IF (x_Periodicities_Rec_Type.Last_Update_Date IS NULL) THEN
1038         x_Periodicities_Rec_Type.Last_Update_Date := SYSDATE;
1039     END IF;
1040 
1041     IF (x_Periodicities_Rec_Type.Last_Update_Login IS NULL) THEN
1042         x_Periodicities_Rec_Type.Last_Update_Login := FND_GLOBAL.LOGIN_ID;
1043     END IF;
1044 
1045 
1046 EXCEPTION
1047     WHEN OTHERS THEN
1048         IF (x_msg_data IS NULL) THEN
1049             FND_MSG_PUB.Count_And_Get
1050             (      p_encoded   =>  FND_API.G_FALSE
1051                ,   p_count     =>  x_msg_count
1052                ,   p_data      =>  x_msg_data
1053             );
1054         END IF;
1055         x_Return_Status :=  FND_API.G_RET_STS_ERROR;
1056 END Populate_Periodicity_Record;
1057 
1058 -- populates the BSC_SYS_PERIODS Metadata.
1059 
1060 PROCEDURE Populate_Period_Metadata (
1061   p_Api_Version             IN          NUMBER
1062  ,p_Commit                  IN          VARCHAR2
1063  ,p_Action_Type             IN          VARCHAR2
1064  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
1065  ,p_disable_period_val_flag IN          VARCHAR2
1066  ,x_Return_Status           OUT NOCOPY  VARCHAR2
1067  ,x_Msg_Count               OUT NOCOPY  NUMBER
1068  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
1069 ) IS
1070     l_Period_Record         BSC_PERIODS_PUB.Period_Record;
1071     l_Struct_Flag           BOOLEAN;
1072 BEGIN
1073     SAVEPOINT PopulatePeriodsPUB;
1074     FND_MSG_PUB.Initialize;
1075     x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1076 
1077     l_Period_Record.Periodicity_Id      := p_Periodicities_Rec_Type.Periodicity_Id;
1078     l_Period_Record.Base_Periodicity_Id := p_Periodicities_Rec_Type.Base_Periodicity_Id;
1079     l_Period_Record.Calendar_Id         := p_Periodicities_Rec_Type.Calendar_Id;
1080     l_Period_Record.Periods             := p_Periodicities_Rec_Type.Period_IDs;
1081     l_Period_Record.No_Of_Periods       := p_Periodicities_Rec_Type.Num_Of_Periods;
1082 
1083     IF (l_Period_Record.Created_By IS NULL) THEN
1084         l_Period_Record.Created_By := FND_GLOBAL.USER_ID;
1085     END IF;
1086 
1087     IF (l_Period_Record.Creation_Date IS NULL) THEN
1088         l_Period_Record.Creation_Date := SYSDATE;
1089     END IF;
1090 
1091     IF (l_Period_Record.Last_Updated_By IS NULL) THEN
1092         l_Period_Record.Last_Updated_By := FND_GLOBAL.USER_ID;
1093     END IF;
1094 
1095     IF (l_Period_Record.Last_Update_Date IS NULL) THEN
1096         l_Period_Record.Last_Update_Date := SYSDATE;
1097     END IF;
1098 
1099     IF (l_Period_Record.Last_Update_Login IS NULL) THEN
1100         l_Period_Record.Last_Update_Login := FND_GLOBAL.LOGIN_ID;
1101     END IF;
1102 
1103     IF (p_Action_Type = BSC_PERIODS_UTILITY_PKG.C_CREATE) THEN
1104         BSC_PERIODS_PUB.Create_Periods
1105         (
1106           p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
1107         , p_Commit                  => p_Commit
1108         , p_Period_Record           => l_Period_Record
1109         , p_disable_period_val_flag => p_disable_period_val_flag
1110         , x_Return_Status           => x_Return_Status
1111         , x_Msg_Count               => x_Msg_Count
1112         , x_Msg_Data                => x_Msg_Data
1113         );
1114         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1115             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1116         END IF;
1117     ELSIF (p_Action_Type = BSC_PERIODS_UTILITY_PKG.C_UPDATE) THEN
1118         BSC_PERIODS_PUB.Update_Periods
1119         (
1120           p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
1121         , p_Commit                  => p_Commit
1122         , p_Period_Record           => l_Period_Record
1123         , x_Structual_Change        => l_Struct_Flag
1124         , p_disable_period_val_flag => p_disable_period_val_flag
1125         , x_Return_Status           => x_Return_Status
1126         , x_Msg_Count               => x_Msg_Count
1127         , x_Msg_Data                => x_Msg_Data
1128         );
1129         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1130             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1131         END IF;
1132     END IF;
1133 
1134     IF (p_Commit IS NOT NULL AND p_Commit = FND_API.G_TRUE) THEN
1135         COMMIT;
1136     END IF;
1137 EXCEPTION
1138     WHEN FND_API.G_EXC_ERROR THEN
1139         ROLLBACK TO PopulatePeriodsPUB;
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         ROLLBACK TO PopulatePeriodsPUB;
1150         IF (x_msg_data IS NULL) THEN
1151             FND_MSG_PUB.Count_And_Get
1152             (      p_encoded   =>  FND_API.G_FALSE
1153                ,   p_count     =>  x_msg_count
1154                ,   p_data      =>  x_msg_data
1155             );
1156         END IF;
1157         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1158     WHEN NO_DATA_FOUND THEN
1159         ROLLBACK TO PopulatePeriodsPUB;
1160         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1161         IF (x_msg_data IS NOT NULL) THEN
1162             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Populate_Period_Metadata ';
1163         ELSE
1164             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Populate_Period_Metadata ';
1165         END IF;
1166     WHEN OTHERS THEN
1167         ROLLBACK TO PopulatePeriodsPUB;
1168         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1169         IF (x_msg_data IS NOT NULL) THEN
1170             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Populate_Period_Metadata ';
1171         ELSE
1172             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Populate_Period_Metadata ';
1173         END IF;
1174 END Populate_Period_Metadata;
1175 
1176 -- Public Retrieve API
1177 PROCEDURE Retrieve_Periodicity (
1178   p_Api_Version             IN          NUMBER
1179  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
1180  ,x_Periodicities_Rec_Type  OUT NOCOPY  BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
1181  ,x_Return_Status           OUT NOCOPY  VARCHAR2
1182  ,x_Msg_Count               OUT NOCOPY  NUMBER
1183  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
1184 ) IS
1185 BEGIN
1186     FND_MSG_PUB.Initialize;
1187     x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1188 
1189     BSC_PERIODICITIES_PVT.Retrieve_Periodicity (
1190       p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
1191      ,p_Periodicities_Rec_Type  => p_Periodicities_Rec_Type
1192      ,x_Periodicities_Rec_Type  => x_Periodicities_Rec_Type
1193      ,x_Return_Status           => x_Return_Status
1194      ,x_Msg_Count               => x_Msg_Count
1195      ,x_Msg_Data                => x_Msg_Data
1196     );
1197     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1198         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1199     END IF;
1200 
1201 EXCEPTION
1202     WHEN FND_API.G_EXC_ERROR THEN
1203         IF (x_msg_data IS NULL) THEN
1204             FND_MSG_PUB.Count_And_Get
1205             (      p_encoded   =>  FND_API.G_FALSE
1206                ,   p_count     =>  x_msg_count
1207                ,   p_data      =>  x_msg_data
1208             );
1209         END IF;
1210         x_Return_Status :=  FND_API.G_RET_STS_ERROR;
1211     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1212         IF (x_msg_data IS NULL) THEN
1213             FND_MSG_PUB.Count_And_Get
1214             (      p_encoded   =>  FND_API.G_FALSE
1215                ,   p_count     =>  x_msg_count
1216                ,   p_data      =>  x_msg_data
1217             );
1218         END IF;
1219         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1220     WHEN NO_DATA_FOUND THEN
1221         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1222         IF (x_msg_data IS NOT NULL) THEN
1223             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Retrieve_Periodicity ';
1224         ELSE
1225             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Retrieve_Periodicity ';
1226         END IF;
1227     WHEN OTHERS THEN
1228         x_Return_Status := FND_API.G_RET_STS_UNEXP_ERROR;
1229         IF (x_msg_data IS NOT NULL) THEN
1230             x_msg_data      :=  x_msg_data||' -> BSC_PERIODICITIES_PUB.Retrieve_Periodicity ';
1231         ELSE
1232             x_msg_data      :=  SQLERRM||' at BSC_PERIODICITIES_PUB.Retrieve_Periodicity ';
1233         END IF;
1234 END Retrieve_Periodicity;
1235 /**********************************************************************************************/
1236 PROCEDURE Update_Annually_Source
1237 ( p_Calendar_Id    IN  NUMBER
1238 , p_Periodicity_Id IN  NUMBER
1239 , p_Action         IN  NUMBER
1240 , x_Return_Status  OUT NOCOPY  VARCHAR2
1241 , x_Msg_Count      OUT NOCOPY  NUMBER
1242 , x_Msg_Data       OUT NOCOPY  VARCHAR2
1243 )IS
1244 BEGIN
1245   FND_MSG_PUB.Initialize;
1246   x_Return_Status := FND_API.G_RET_STS_SUCCESS;
1247   BSC_UPDATE_UTIL.Update_AnualPeriodicity_Src
1248   ( x_calendar_id     => p_Calendar_Id
1249   , x_periodicity_id  => p_Periodicity_Id
1250   , x_action          => p_Action
1251   );
1252 
1253   IF(BSC_PERIODS_UTILITY_PKG.Check_Error_Message('BSC_UPDATE_UTIL.UpdAnualPeriodicitySrc')) THEN
1254     FND_MESSAGE.SET_NAME('BSC','BSC_ERROR_UPDATE_ANUAL_SOURCE');
1255     FND_MSG_PUB.ADD;
1256     RAISE FND_API.G_EXC_ERROR;
1257   END IF;
1258 
1259 EXCEPTION
1260   WHEN FND_API.G_EXC_ERROR THEN
1261     IF (x_msg_data IS NULL) THEN
1262       FND_MSG_PUB.Count_And_Get
1263       ( p_encoded   =>  FND_API.G_FALSE
1264       , p_count     =>  x_msg_count
1265       , p_data      =>  x_msg_data
1266       );
1267     END IF;
1268     x_return_status :=  FND_API.G_RET_STS_ERROR;
1269   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1270     IF (x_msg_data IS NULL) THEN
1271       FND_MSG_PUB.Count_And_Get
1272       ( p_encoded   =>  FND_API.G_FALSE
1273       , p_count     =>  x_msg_count
1274       , p_data      =>  x_msg_data
1275       );
1276     END IF;
1277     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1278   WHEN NO_DATA_FOUND THEN
1279     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1280     IF (x_msg_data IS NOT NULL) THEN
1281       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Delete_Calendar_Indexes ';
1282     ELSE
1283       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Delete_Calendar_Indexes ';
1284     END IF;
1285   WHEN OTHERS THEN
1286     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1287     IF (x_msg_data IS NOT NULL) THEN
1288       x_msg_data      :=  x_msg_data||' -> BSC_CALENDAR_PUB.Delete_Calendar_Indexes ';
1289     ELSE
1290       x_msg_data      :=  SQLERRM||' at BSC_CALENDAR_PUB.Delete_Calendar_Indexes ';
1291     END IF;
1292 END Update_Annually_Source;
1293 /*****************************************************************************************/
1294 
1295 PROCEDURE Get_Incr_Change (
1296    p_Periodicity_Id       IN NUMBER
1297   ,p_Calendar_ID          IN NUMBER
1298   ,p_Base_Periodicity_Id  IN NUMBER
1299   ,p_Num_Of_Periods       IN NUMBER
1300   ,p_Period_Ids           IN VARCHAR2
1301   ,p_Return_Values        IN VARCHAR2
1302   ,x_Message_Name         OUT NOCOPY VARCHAR2
1303   ,x_Objective_List       OUT NOCOPY VARCHAR2
1304 ) IS
1305     l1_Periodicities_Rec_Type    BSC_PERIODICITIES_PUB.Periodicities_Rec_Type;
1306     l2_Periodicities_Rec_Type    BSC_PERIODICITIES_PUB.Periodicities_Rec_Type;
1307     l_Period_Record              BSC_PERIODS_PUB.Period_Record;
1308     l_Structural_Flag            VARCHAR2(1);
1309     l_Comma_List                 VARCHAR2(12228);
1310     l_Return_Status              VARCHAR2(1);
1311     l_Msg_Count                  NUMBER;
1312     l_Msg_Data                   VARCHAR2(2000);
1313 
1314     CURSOR C_Obj_List IS
1315       SELECT K.NAME, K.INDICATOR
1316       FROM   BSc_KPI_PERIODICITIES P
1317             ,BSC_KPIS_VL K
1318       WHERE K.INDICATOR = P.INDICATOR
1319       AND   K.PROTOTYPE_FLAG NOT IN (1, 2, 3)
1320       AND   P.PERIODICITY_ID = p_Periodicity_Id;
1321 
1322 BEGIN
1323 
1324   l1_Periodicities_Rec_Type.Periodicity_Id := p_Periodicity_Id;
1325   l_Structural_Flag := FND_API.G_FALSE;
1326 
1327   BSC_PERIODICITIES_PUB.Retrieve_Periodicity (
1328     p_Api_Version             => BSC_PERIODS_UTILITY_PKG.C_API_VERSION_1_0
1329    ,p_Periodicities_Rec_Type  => l1_Periodicities_Rec_Type
1330    ,x_Periodicities_Rec_Type  => l2_Periodicities_Rec_Type
1331    ,x_Return_Status           => l_Return_Status
1332    ,x_Msg_Count               => l_Msg_Count
1333    ,x_Msg_Data                => l_Msg_Data
1334   );
1335 
1336   IF (p_Num_Of_Periods IS NOT NULL) THEN
1337       IF(l2_Periodicities_Rec_Type.Num_Of_Periods <> p_Num_Of_Periods) THEN
1338           l_Structural_Flag := FND_API.G_TRUE;
1339       END IF;
1340   END IF;
1341 
1342   IF (p_Base_Periodicity_Id IS NOT NULL) THEN
1343       IF (TO_CHAR(p_Base_Periodicity_Id) <> l2_Periodicities_Rec_Type.Source) THEN
1344           l_Structural_Flag := FND_API.G_TRUE;
1345       END IF;
1346   END IF;
1347 
1348   l_Period_Record.Periodicity_Id := p_Periodicity_Id;
1349   l_Period_Record.Periods        := p_Period_Ids;
1350 
1351   IF(BSC_PERIODS_PUB.Is_Period_Modified(l_Period_Record) = FND_API.G_TRUE) THEN
1352     l_Structural_Flag := FND_API.G_TRUE;
1353   END IF;
1354 
1355   IF(l_Structural_Flag = FND_API.G_TRUE) THEN
1356     x_Message_Name := 'BSC_PMD_KPI_STRUCT_INVALID';
1357 
1358     IF(p_Return_Values = FND_API.G_TRUE) THEN
1359         FOR Colst IN C_Obj_List LOOP
1360           IF(x_Objective_List Is NULL) THEN
1361             x_Objective_List := Colst.NAME||'['||Colst.INDICATOR||']';
1362           ELSE
1363             x_Objective_List := x_Objective_List ||','||Colst.NAME||'['||Colst.INDICATOR||']';
1364           END IF;
1365         END LOOP;
1366     END IF;
1367   END IF;
1368 
1369 EXCEPTION
1370   WHEN OTHERS THEN
1371     x_Objective_List := NULL;
1372     x_Message_Name   := 'BSC_ERROR_ACTION_FLAG_CHANGE';
1373 END Get_Incr_Change;
1374 
1375 
1376 PROCEDURE Create_Periodicity (
1377   p_Api_Version             IN          NUMBER
1378  ,p_Commit                  IN          VARCHAR2
1379  ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
1380  ,x_Return_Status           OUT NOCOPY  VARCHAR2
1381  ,x_Msg_Count               OUT NOCOPY  NUMBER
1382  ,x_Msg_Data                OUT NOCOPY  VARCHAR2
1383 ) IS
1384  BEGIN
1385 
1386   BSC_PERIODICITIES_PUB.Create_Periodicity (
1387     p_Api_Version              =>  p_Api_Version
1388    ,p_Commit                   =>  p_Commit
1389    ,p_Periodicities_Rec_Type   =>  p_Periodicities_Rec_Type
1390    ,p_disable_period_val_flag  =>  FND_API.G_FALSE
1391    ,x_Return_Status            =>  x_Return_Status
1392    ,x_Msg_Count                =>  x_Msg_Count
1393    ,x_Msg_Data                 =>  x_Msg_Data
1394  );
1395 
1396  END  Create_Periodicity;
1397 
1398 
1399  PROCEDURE Update_Periodicity (
1400    p_Api_Version             IN          NUMBER
1401   ,p_Commit                  IN          VARCHAR2 := FND_API.G_FALSE
1402   ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
1403   ,x_Return_Status           OUT NOCOPY  VARCHAR2
1404   ,x_Msg_Count               OUT NOCOPY  NUMBER
1405   ,x_Msg_Data                OUT NOCOPY  VARCHAR2
1406  ) IS
1407  BEGIN
1408     BSC_PERIODICITIES_PUB.Update_Periodicity (
1409       p_Api_Version             =>  p_Api_Version
1410      ,p_Commit                  =>  p_Commit
1411      ,p_Periodicities_Rec_Type  =>  p_Periodicities_Rec_Type
1412      ,p_disable_period_val_flag =>  FND_API.G_FALSE
1413      ,x_Return_Status           =>  x_Return_Status
1414      ,x_Msg_Count               =>  x_Msg_Count
1415      ,x_Msg_Data                =>  x_Msg_Data
1416  );
1417 
1418 END Update_Periodicity;
1419 
1420 PROCEDURE Translate_Periodicity (
1421    p_Api_Version             IN          NUMBER
1422   ,p_Commit                  IN          VARCHAR2 := FND_API.G_FALSE
1423   ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
1424   ,p_disable_period_val_flag IN          VARCHAR2
1425   ,x_Return_Status           OUT NOCOPY  VARCHAR2
1426   ,x_Msg_Count               OUT NOCOPY  NUMBER
1427   ,x_Msg_Data                OUT NOCOPY  VARCHAR2
1428  ) IS
1429  BEGIN
1430   x_return_status := FND_API.G_RET_STS_SUCCESS;
1431 
1432   UPDATE bsc_sys_periodicities_tl
1433   SET    name = NVL(p_Periodicities_Rec_Type.name,name)
1434       ,  source_lang = USERENV('LANG')
1435   WHERE  USERENV('LANG') IN (LANGUAGE, SOURCE_LANG)
1436   AND    periodicity_id = p_Periodicities_Rec_Type.Periodicity_Id;
1437 
1438 EXCEPTION
1439   WHEN OTHERS THEN
1440     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1441 
1442 END Translate_Periodicity;
1443 
1444 
1445 PROCEDURE Load_Periodicity (
1446    p_Api_Version             IN          NUMBER
1447   ,p_Commit                  IN          VARCHAR2 := FND_API.G_FALSE
1448   ,p_Periodicities_Rec_Type  IN          BSC_PERIODICITIES_PUB.Periodicities_Rec_Type
1449   ,p_disable_period_val_flag IN          VARCHAR2
1450   ,x_Return_Status           OUT NOCOPY  VARCHAR2
1451   ,x_Msg_Count               OUT NOCOPY  NUMBER
1452   ,x_Msg_Data                OUT NOCOPY  VARCHAR2
1453  ) IS
1454   l_count           NUMBER;
1455   l_name            bsc_sys_periodicities_tl.name%TYPE;
1456  BEGIN
1457     x_return_status := FND_API.G_RET_STS_SUCCESS;
1458 
1459     UPDATE bsc_sys_periodicities
1460     SET num_of_periods = p_Periodicities_Rec_Type.Num_Of_Periods,
1461         source = p_Periodicities_Rec_Type.Source,
1462         num_of_subperiods = p_Periodicities_Rec_Type.Num_Of_Subperiods,
1463         period_col_name = p_Periodicities_Rec_Type.Period_Col_Name,
1464         subperiod_col_name = p_Periodicities_Rec_Type.Subperiod_Col_Name,
1465         yearly_flag = p_Periodicities_Rec_Type.Yearly_Flag,
1466         edw_flag = p_Periodicities_Rec_Type.Edw_Flag,
1467         calendar_id = p_Periodicities_Rec_Type.Calendar_Id,
1468         custom_code = p_Periodicities_Rec_Type.Custom_Code,
1469         db_column_name = p_Periodicities_Rec_Type.Db_Column_Name,
1470         periodicity_type = p_Periodicities_Rec_Type.Periodicity_Type
1471     WHERE periodicity_id = p_Periodicities_Rec_Type.Periodicity_Id;
1472 
1473     IF (SQL%NOTFOUND) THEN
1474       INSERT INTO bsc_sys_periodicities(
1475         periodicity_id,
1476         num_of_periods,
1477         source,
1478         num_of_subperiods,
1479         period_col_name,
1480         subperiod_col_name,
1481         yearly_flag,
1482         edw_flag,
1483         calendar_id,
1484         custom_code,
1485         db_column_name,
1486         periodicity_type)
1487       VALUES(
1488         p_Periodicities_Rec_Type.Periodicity_Id,
1489         p_Periodicities_Rec_Type.Num_Of_Periods,
1490         p_Periodicities_Rec_Type.Source,
1491         p_Periodicities_Rec_Type.Num_Of_Subperiods,
1492         p_Periodicities_Rec_Type.Period_Col_Name,
1493         p_Periodicities_Rec_Type.Subperiod_Col_Name,
1494         p_Periodicities_Rec_Type.Yearly_Flag,
1495         p_Periodicities_Rec_Type.Edw_Flag,
1496         p_Periodicities_Rec_Type.Calendar_Id,
1497         p_Periodicities_Rec_Type.Custom_Code,
1498         p_Periodicities_Rec_Type.Db_Column_Name,
1499         p_Periodicities_Rec_Type.Periodicity_Type
1500       );
1501     END IF;
1502     IF (p_Periodicities_Rec_Type.name IS NULL) THEN
1503       SELECT meaning
1504       INTO   l_name
1505       FROM   bsc_lookups
1506       WHERE  lookup_code=p_Periodicities_Rec_Type.Periodicity_Id
1507       AND    lookup_type = 'BSC_PERIODICITY';
1508     ELSE
1509       l_name := p_Periodicities_Rec_Type.name;
1510 
1511     END IF;
1512 
1513     UPDATE bsc_sys_periodicities_tl
1514     SET    name = l_name,
1515            SOURCE_LANG = userenv('LANG')
1516     WHERE  periodicity_id = p_Periodicities_Rec_Type.Periodicity_Id
1517     AND    userenv('LANG') IN (LANGUAGE, SOURCE_LANG);
1518 
1519     IF (SQL%NOTFOUND) THEN
1520       INSERT INTO bsc_sys_periodicities_tl (
1521         PERIODICITY_ID,
1522         NAME,
1523         LANGUAGE,
1524         SOURCE_LANG,
1525         CREATED_BY,
1526         CREATION_DATE,
1527         LAST_UPDATED_BY,
1528         LAST_UPDATE_DATE,
1529         LAST_UPDATE_LOGIN
1530       ) SELECT
1531         p_Periodicities_Rec_Type.Periodicity_Id,
1532         l_name,
1533         L.LANGUAGE_CODE,
1534         USERENV('LANG'),
1535         FND_GLOBAL.user_id,
1536         SYSDATE,
1537         FND_GLOBAL.user_id,
1538         SYSDATE,
1539         FND_GLOBAL.user_id
1540       FROM FND_LANGUAGES L
1541       WHERE L.INSTALLED_FLAG in ('I', 'B')
1542       AND NOT EXISTS
1543         (SELECT NULL
1544          FROM  bsc_sys_periodicities_tl t
1545          WHERE periodicity_id = p_Periodicities_Rec_Type.Periodicity_Id
1546          AND t.LANGUAGE = L.LANGUAGE_CODE);
1547 
1548     END IF;
1549 
1550 EXCEPTION
1551   WHEN OTHERS THEN
1552     -- If error is set from previous API don't change it.
1553     IF(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1554       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1555     END IF;
1556 END Load_Periodicity;
1557 
1558 END BSC_PERIODICITIES_PUB;