DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_SETUPFUNCTIONS_PVT

Source


1 PACKAGE BODY OKL_SETUPFUNCTIONS_PVT AS
2 /* $Header: OKLRSDFB.pls 115.12 2003/07/23 19:05:22 sgorantl noship $ */
3 -- Start of wraper code generated automatically by Debug code generator
4   L_MODULE VARCHAR2(40) := 'LEASE.SETUP.FUNCTIONS';
5   L_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6   L_LEVEL_PROCEDURE NUMBER;
7   IS_DEBUG_PROCEDURE_ON BOOLEAN;
8 -- End of wraper code generated automatically by Debug code generator
9 
10 -- Not required as new version will not be creatd while updating the function
11 /*
12 ---------------------------------------------------------------------------
13   -- PROCEDURE get_version to calculate the new version number for the
14   -- function to be created
15   ---------------------------------------------------------------------------
16   PROCEDURE get_version(p_dsfv_rec						IN dsfv_rec_type,
17   						x_return_status					OUT NOCOPY VARCHAR2,
18 						x_new_version					OUT NOCOPY VARCHAR2) IS
19     CURSOR okl_dsf_laterversionsexist_csr (p_name IN Okl_Data_Src_Fnctns_V.NAME%TYPE,
20 		   					   			   p_date IN Okl_Data_Src_Fnctns_V.END_DATE%TYPE
21 	) IS
22     SELECT '1'
23     FROM Okl_Data_Src_Fnctns_V
24     WHERE name = p_name
25 	AND NVL(end_date,OKL_API.G_MISS_DATE) > p_date;
26 
27 	l_check			VARCHAR2(1) := '?';
28 	l_row_not_found	BOOLEAN := FALSE;
29   BEGIN
30   	   IF p_dsfv_rec.version = OKL_API.G_MISS_CHAR THEN
31 	   	  x_new_version := G_INIT_VERSION;
32 	   ELSE
33           -- Check for future versions of the same formula
34 		  OPEN okl_dsf_laterversionsexist_csr (p_dsfv_rec.name,
35 							  			 	   p_dsfv_rec.end_date);
36     	  FETCH okl_dsf_laterversionsexist_csr INTO l_check;
37     	  l_row_not_found := okl_dsf_laterversionsexist_csr%NOTFOUND;
38     	  CLOSE okl_dsf_laterversionsexist_csr;
39 
40     	  IF l_row_not_found = TRUE then
41   	   	   	 x_new_version := TO_CHAR(TO_NUMBER(p_dsfv_rec.version, G_VERSION_FORMAT)
42 			                  + G_VERSION_MAJOR_INCREMENT, G_VERSION_FORMAT);
43 		  ELSE
44 		  	 x_new_version := TO_CHAR(TO_NUMBER(p_dsfv_rec.version, G_VERSION_FORMAT)
45 			 			   	  + G_VERSION_MINOR_INCREMENT, G_VERSION_FORMAT);
46     	  END IF;
47 	   END IF;
48 
49 	   x_return_status := OKL_API.G_RET_STS_SUCCESS;
50   EXCEPTION
51 	WHEN OTHERS THEN
52 		-- store SQL error message on message stack
53 		OKL_API.SET_MESSAGE(p_app_name	    =>	G_APP_NAME,
54 							p_msg_name		=>	G_UNEXPECTED_ERROR,
55 							p_token1		=>	G_SQLCODE_TOKEN,
56 							p_token1_value	=>	sqlcode,
57 							p_token2		=>	G_SQLERRM_TOKEN,
58 							p_token2_value	=>	sqlerrm);
59 	   x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
60 
61        IF (okl_dsf_laterversionsexist_csr%ISOPEN) THEN
62 	   	  CLOSE okl_dsf_laterversionsexist_csr;
63        END IF;
64 
65   END get_version;
66 
67 */
68 
69   ---------------------------------------------------------------------------
70   -- PROCEDURE get_rec for: OKL_DATA_SRC_FNCTNS_V
71   -- Fix this once the view data structure is fixed
72   ---------------------------------------------------------------------------
73   PROCEDURE get_rec (
74     p_dsfv_rec                     IN dsfv_rec_type,
75 	x_return_status				   OUT NOCOPY VARCHAR2,
76     x_no_data_found                OUT NOCOPY BOOLEAN,
77 	x_dsfv_rec					   OUT NOCOPY dsfv_rec_type
78   ) IS
79     CURSOR okl_dsfv_pk_csr (p_id                 IN NUMBER) IS
80     SELECT
81             ID,
82             OBJECT_VERSION_NUMBER,
83             SFWT_FLAG,
84             NVL(FNCTN_CODE, OKL_API.G_MISS_CHAR) FNCTN_CODE,
85             NAME,
86             NVL(DESCRIPTION,OKL_API.G_MISS_CHAR) DESCRIPTION,
87             VERSION,
88             START_DATE,
89             NVL(END_DATE,OKL_API.G_MISS_DATE) END_DATE,
90 			SOURCE,
91             NVL(ATTRIBUTE_CATEGORY, OKL_API.G_MISS_CHAR) ATTRIBUTE_CATEGORY,
92             NVL(ATTRIBUTE1, OKL_API.G_MISS_CHAR) ATTRIBUTE1,
93             NVL(ATTRIBUTE2, OKL_API.G_MISS_CHAR) ATTRIBUTE2,
94             NVL(ATTRIBUTE3, OKL_API.G_MISS_CHAR) ATTRIBUTE3,
95             NVL(ATTRIBUTE4, OKL_API.G_MISS_CHAR) ATTRIBUTE4,
96             NVL(ATTRIBUTE5, OKL_API.G_MISS_CHAR) ATTRIBUTE5,
97             NVL(ATTRIBUTE6, OKL_API.G_MISS_CHAR) ATTRIBUTE6,
98             NVL(ATTRIBUTE7, OKL_API.G_MISS_CHAR) ATTRIBUTE7,
99             NVL(ATTRIBUTE8, OKL_API.G_MISS_CHAR) ATTRIBUTE8,
100             NVL(ATTRIBUTE9, OKL_API.G_MISS_CHAR) ATTRIBUTE9,
101             NVL(ATTRIBUTE10, OKL_API.G_MISS_CHAR) ATTRIBUTE10,
102             NVL(ATTRIBUTE11, OKL_API.G_MISS_CHAR) ATTRIBUTE11,
103             NVL(ATTRIBUTE12, OKL_API.G_MISS_CHAR) ATTRIBUTE12,
104             NVL(ATTRIBUTE13, OKL_API.G_MISS_CHAR) ATTRIBUTE13,
105             NVL(ATTRIBUTE14, OKL_API.G_MISS_CHAR) ATTRIBUTE14,
106             NVL(ATTRIBUTE15, OKL_API.G_MISS_CHAR) ATTRIBUTE15,
107             NVL(ORG_ID,  OKL_API.G_MISS_NUM) ORG_ID,
108             CREATED_BY,
109             CREATION_DATE,
110             LAST_UPDATED_BY,
111             LAST_UPDATE_DATE,
112             NVL(LAST_UPDATE_LOGIN, OKL_API.G_MISS_NUM) LAST_UPDATE_LOGIN
113       FROM Okl_Data_Src_Fnctns_V
114      WHERE okl_Data_Src_Fnctns_v.id    = p_id;
115     l_okl_dsfv_pk                  okl_dsfv_pk_csr%ROWTYPE;
116     l_dsfv_rec                     dsfv_rec_type;
117   BEGIN
118     x_return_status := OKL_API.G_RET_STS_SUCCESS;
119     x_no_data_found := TRUE;
120 
121     -- Get current database values
122     OPEN okl_dsfv_pk_csr (p_dsfv_rec.id);
123     FETCH okl_dsfv_pk_csr INTO
124               l_dsfv_rec.ID,
125               l_dsfv_rec.OBJECT_VERSION_NUMBER,
126               l_dsfv_rec.SFWT_FLAG,
127               l_dsfv_rec.FNCTN_CODE,
128               l_dsfv_rec.NAME,
129               l_dsfv_rec.DESCRIPTION,
130               l_dsfv_rec.VERSION,
131               l_dsfv_rec.START_DATE,
132               l_dsfv_rec.END_DATE,
133 			  l_dsfv_rec.SOURCE,
134               l_dsfv_rec.ATTRIBUTE_CATEGORY,
135               l_dsfv_rec.ATTRIBUTE1,
136               l_dsfv_rec.ATTRIBUTE2,
137               l_dsfv_rec.ATTRIBUTE3,
138               l_dsfv_rec.ATTRIBUTE4,
139               l_dsfv_rec.ATTRIBUTE5,
140               l_dsfv_rec.ATTRIBUTE6,
141               l_dsfv_rec.ATTRIBUTE7,
142               l_dsfv_rec.ATTRIBUTE8,
143               l_dsfv_rec.ATTRIBUTE9,
144               l_dsfv_rec.ATTRIBUTE10,
145               l_dsfv_rec.ATTRIBUTE11,
146               l_dsfv_rec.ATTRIBUTE12,
147               l_dsfv_rec.ATTRIBUTE13,
148               l_dsfv_rec.ATTRIBUTE14,
149               l_dsfv_rec.ATTRIBUTE15,
150               l_dsfv_rec.ORG_ID,
151               l_dsfv_rec.CREATED_BY,
152               l_dsfv_rec.CREATION_DATE,
153               l_dsfv_rec.LAST_UPDATED_BY,
154               l_dsfv_rec.LAST_UPDATE_DATE,
155               l_dsfv_rec.LAST_UPDATE_LOGIN;
156     x_no_data_found := okl_dsfv_pk_csr%NOTFOUND;
157     CLOSE okl_dsfv_pk_csr;
158     x_dsfv_rec := l_dsfv_rec;
159 EXCEPTION
160 	WHEN OTHERS THEN
161 		-- store SQL error message on message stack
162 		OKL_API.SET_MESSAGE(p_app_name	    =>	G_APP_NAME,
163 							p_msg_name		=>	G_UNEXPECTED_ERROR,
164 							p_token1		=>	G_SQLCODE_TOKEN,
165 							p_token1_value	=>	sqlcode,
166 							p_token2		=>	G_SQLERRM_TOKEN,
167 							p_token2_value	=>	sqlerrm);
168 		-- notify UNEXPECTED error for calling API.
169 		x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
170 
171       IF (okl_dsfv_pk_csr%ISOPEN) THEN
172 	   	  CLOSE okl_dsfv_pk_csr;
173       END IF;
174 
175   END get_rec;
176 
177 -- Not required as new version will not be creatd while updating the function
178 /*
179   ---------------------------------------------------------------------------
180   -- PROCEDURE check_overlaps for: OKL_DATA_SRC_FNCTNS_V
181   -- To avoid overlapping of dates with other versions of the same function
182   ---------------------------------------------------------------------------
183   PROCEDURE check_overlaps (
184     p_dsfv_rec                     IN dsfv_rec_type,
185 	x_return_status				   OUT NOCOPY VARCHAR2,
186     x_valid                		   OUT NOCOPY BOOLEAN
187   ) IS
188   	CURSOR okl_dsf_overlaps_csr (p_id  		  IN Okl_Data_Src_Fnctns_V.ID%TYPE,
189 		   						 p_name   	  IN Okl_Data_Src_Fnctns_V.NAME%TYPE,
190 		   					     p_start_date IN Okl_Data_Src_Fnctns_V.START_DATE%TYPE,
191 								 p_end_date   IN Okl_Data_Src_Fnctns_V.END_DATE%TYPE
192 	) IS
193 	SELECT '1'
194 	FROM Okl_Data_Src_Fnctns_V
195 	WHERE NAME = p_name
196 	AND   ID <> p_id
197 	AND	  (p_start_date BETWEEN START_DATE AND NVL(END_DATE, OKL_API.G_MISS_DATE) OR
198 		   p_end_date BETWEEN START_DATE AND NVL(END_DATE, OKL_API.G_MISS_DATE))
199     UNION ALL
200 	SELECT '2'
201 	FROM Okl_Data_Src_Fnctns_V
202 	WHERE NAME = p_name
203 	AND   ID <> p_id
204 	AND	  p_start_date <= START_DATE
205 	AND   p_end_date >= NVL(END_DATE, OKL_API.G_MISS_DATE);
206 
207 	l_check            VARCHAR2(1) := '?';
208 	l_row_not_found	   BOOLEAN := FALSE;
209   BEGIN
210     x_valid := TRUE;
211     x_return_status := OKL_API.G_RET_STS_SUCCESS;
212 
213     -- Check for functions overlaps
214     OPEN okl_dsf_overlaps_csr (p_dsfv_rec.id,
215 		 					   p_dsfv_rec.name,
216 		 					   p_dsfv_rec.start_date,
217 							   p_dsfv_rec.end_date);
218     FETCH okl_dsf_overlaps_csr INTO l_check;
219     l_row_not_found := okl_dsf_overlaps_csr%NOTFOUND;
220     CLOSE okl_dsf_overlaps_csr;
221 
222     IF l_row_not_found = FALSE then
223 	   OKL_API.SET_MESSAGE(p_app_name	=>	G_APP_NAME,
224 							p_msg_name	=>	G_DSF_VERSION_OVERLAPS);
225 	   x_valid := FALSE;
226        x_return_status := OKL_API.G_RET_STS_ERROR;
227     END IF;
228 
229   EXCEPTION
230 	WHEN OTHERS THEN
231 		-- store SQL error message on message stack
232 		OKL_API.SET_MESSAGE(p_app_name	    =>	G_APP_NAME,
233 							p_msg_name		=>	G_UNEXPECTED_ERROR,
234 							p_token1		=>	G_SQLCODE_TOKEN,
235 							p_token1_value	=>	sqlcode,
236 							p_token2		=>	G_SQLERRM_TOKEN,
237 							p_token2_value	=>	sqlerrm);
238 	   x_valid := FALSE;
239 	   x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
240 
241        IF (okl_dsf_overlaps_csr%ISOPEN) THEN
242 	   	  CLOSE okl_dsf_overlaps_csr;
243        END IF;
244 
245 
246   END check_overlaps;
247 
248 */
249 
250   ---------------------------------------------------------------------------
251   -- PROCEDURE reorganize_inputs
252   -- This procedure is to reset the attributes in the input structure based
253   -- on the data from database
254   ---------------------------------------------------------------------------
255   PROCEDURE reorganize_inputs (
256     p_upd_dsfv_rec                 IN OUT NOCOPY dsfv_rec_type,
257 	p_db_dsfv_rec				   IN dsfv_rec_type
258   ) IS
259   l_upd_dsfv_rec	dsfv_rec_type;
260   l_db_dsfv_rec     dsfv_rec_type;
261   BEGIN
262 	   /* create a temporary record with all relevant details from db and upd records */
263 	   l_upd_dsfv_rec := p_upd_dsfv_rec;
264        l_db_dsfv_rec := p_db_dsfv_rec;
265 
266 	   IF l_upd_dsfv_rec.description = l_db_dsfv_rec.description THEN
267 	  	  l_upd_dsfv_rec.description := OKL_API.G_MISS_CHAR;
268 	   END IF;
269 
270 	   IF to_date(to_char(l_upd_dsfv_rec.start_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') = to_date(to_char(l_db_dsfv_rec.start_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') THEN
271 	  	  l_upd_dsfv_rec.start_date := OKL_API.G_MISS_DATE;
272 	   END IF;
273 
274 	   IF to_date(to_char(l_upd_dsfv_rec.end_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') = to_date(to_char(l_db_dsfv_rec.end_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') THEN
275 	  	  l_upd_dsfv_rec.end_date := OKL_API.G_MISS_DATE;
276 	   END IF;
277 
278 	   IF l_upd_dsfv_rec.fnctn_code = l_db_dsfv_rec.fnctn_code THEN
279 	   	  l_upd_dsfv_rec.fnctn_code := OKL_API.G_MISS_CHAR;
280 	   END IF;
281 
282 	   IF l_upd_dsfv_rec.source = l_db_dsfv_rec.source THEN
283 	   	  l_upd_dsfv_rec.source := OKL_API.G_MISS_CHAR;
284 	   END IF;
285 
286 	   IF l_upd_dsfv_rec.attribute_category = l_db_dsfv_rec.attribute_category THEN
287 	   	  l_upd_dsfv_rec.attribute_category := OKL_API.G_MISS_CHAR;
288 	   END IF;
289 
290 	   IF l_upd_dsfv_rec.attribute1 = l_db_dsfv_rec.attribute1 THEN
291 	   	  l_upd_dsfv_rec.attribute1 := OKL_API.G_MISS_CHAR;
292 	   END IF;
293 
294 	   IF l_upd_dsfv_rec.attribute2 = l_db_dsfv_rec.attribute2 THEN
295 	   	  l_upd_dsfv_rec.attribute2 := OKL_API.G_MISS_CHAR;
296 	   END IF;
297 
298 	   IF l_upd_dsfv_rec.attribute3 = l_db_dsfv_rec.attribute3 THEN
299 	   	  l_upd_dsfv_rec.attribute3 := OKL_API.G_MISS_CHAR;
300 	   END IF;
301 
302 	   IF l_upd_dsfv_rec.attribute4 = l_db_dsfv_rec.attribute4 THEN
303 	   	  l_upd_dsfv_rec.attribute4 := OKL_API.G_MISS_CHAR;
304 	   END IF;
305 
306 	   IF l_upd_dsfv_rec.attribute5 = l_db_dsfv_rec.attribute5 THEN
307 	   	  l_upd_dsfv_rec.attribute5 := OKL_API.G_MISS_CHAR;
308 	   END IF;
309 
310 	   IF l_upd_dsfv_rec.attribute6 = l_db_dsfv_rec.attribute6 THEN
311 	   	  l_upd_dsfv_rec.attribute6 := OKL_API.G_MISS_CHAR;
312 	   END IF;
313 
314 	   IF l_upd_dsfv_rec.attribute7 = l_db_dsfv_rec.attribute7 THEN
315 	   	  l_upd_dsfv_rec.attribute7 := OKL_API.G_MISS_CHAR;
316 	   END IF;
317 
318 	   IF l_upd_dsfv_rec.attribute8 = l_db_dsfv_rec.attribute8 THEN
319 	   	  l_upd_dsfv_rec.attribute8 := OKL_API.G_MISS_CHAR;
320 	   END IF;
321 
322 	   IF l_upd_dsfv_rec.attribute9 = l_db_dsfv_rec.attribute9 THEN
323 	   	  l_upd_dsfv_rec.attribute9 := OKL_API.G_MISS_CHAR;
324 	   END IF;
325 
326 	   IF l_upd_dsfv_rec.attribute10 = l_db_dsfv_rec.attribute10 THEN
327 	   	  l_upd_dsfv_rec.attribute10 := OKL_API.G_MISS_CHAR;
328 	   END IF;
329 
330 	   IF l_upd_dsfv_rec.attribute11 = l_db_dsfv_rec.attribute11 THEN
331 	   	  l_upd_dsfv_rec.attribute11 := OKL_API.G_MISS_CHAR;
332 	   END IF;
333 
334 	   IF l_upd_dsfv_rec.attribute12 = l_db_dsfv_rec.attribute12 THEN
335 	   	  l_upd_dsfv_rec.attribute12 := OKL_API.G_MISS_CHAR;
336 	   END IF;
337 
338 	   IF l_upd_dsfv_rec.attribute13 = l_db_dsfv_rec.attribute13 THEN
339 	   	  l_upd_dsfv_rec.attribute13 := OKL_API.G_MISS_CHAR;
340 	   END IF;
341 
342 	   IF l_upd_dsfv_rec.attribute14 = l_db_dsfv_rec.attribute14 THEN
343 	   	  l_upd_dsfv_rec.attribute14 := OKL_API.G_MISS_CHAR;
344 	   END IF;
345 
346 	   IF l_upd_dsfv_rec.attribute15 = l_db_dsfv_rec.attribute15 THEN
347 	   	  l_upd_dsfv_rec.attribute15 := OKL_API.G_MISS_CHAR;
348 	   END IF;
349 
350 	   IF l_upd_dsfv_rec.org_id = l_db_dsfv_rec.org_id THEN
351 	   	  l_upd_dsfv_rec.org_id := OKL_API.G_MISS_NUM;
352 	   END IF;
353 
354        p_upd_dsfv_rec := l_upd_dsfv_rec;
355 
356   END reorganize_inputs;
357 
358   ---------------------------------------------------------------------------
359   -- FUNCTION defaults_to_actuals
360   -- This function creates an output record with changed information from the
361   -- input structure and unchanged details from the database
362   ---------------------------------------------------------------------------
363   FUNCTION defaults_to_actuals (
364     p_upd_dsfv_rec                 IN dsfv_rec_type,
365 	p_db_dsfv_rec				   IN dsfv_rec_type
366   ) RETURN dsfv_rec_type IS
367   l_dsfv_rec	dsfv_rec_type;
368   BEGIN
369 	   /* create a temporary record with all relevant details from db and upd records */
370 	   l_dsfv_rec := p_db_dsfv_rec;
371 
372 	   IF p_upd_dsfv_rec.description <> OKL_API.G_MISS_CHAR THEN
373 	  	  l_dsfv_rec.description := p_upd_dsfv_rec.description;
374 	   END IF;
375 
376 	   IF p_upd_dsfv_rec.start_date <> OKL_API.G_MISS_DATE THEN
377 	  	  l_dsfv_rec.start_date := p_upd_dsfv_rec.start_date;
378 	   END IF;
379 
380 	   IF p_upd_dsfv_rec.end_date <> OKL_API.G_MISS_DATE THEN
381 	   	  l_dsfv_rec.end_date := p_upd_dsfv_rec.end_date;
382 	   END IF;
383 
384 	   IF p_upd_dsfv_rec.fnctn_code <> OKL_API.G_MISS_CHAR THEN
385 	   	  l_dsfv_rec.fnctn_code := p_upd_dsfv_rec.fnctn_code;
386 	   END IF;
387 
388 	   IF p_upd_dsfv_rec.source <> OKL_API.G_MISS_CHAR THEN
389 	   	  l_dsfv_rec.source := p_upd_dsfv_rec.source;
390 	   END IF;
391 
392 	   IF p_upd_dsfv_rec.attribute_category <> OKL_API.G_MISS_CHAR THEN
393 	   	  l_dsfv_rec.attribute_category := p_upd_dsfv_rec.attribute_category;
394 	   END IF;
395 
396 	   IF p_upd_dsfv_rec.attribute1 <> OKL_API.G_MISS_CHAR THEN
397 	   	  l_dsfv_rec.attribute1 := p_upd_dsfv_rec.attribute1;
398 	   END IF;
399 
400 	   IF p_upd_dsfv_rec.attribute2 <> OKL_API.G_MISS_CHAR THEN
401 	   	  l_dsfv_rec.attribute2 := p_upd_dsfv_rec.attribute2;
402 	   END IF;
403 
404 	   IF p_upd_dsfv_rec.attribute3 <> OKL_API.G_MISS_CHAR THEN
405 	   	  l_dsfv_rec.attribute3 := p_upd_dsfv_rec.attribute3;
406 	   END IF;
407 
408 	   IF p_upd_dsfv_rec.attribute4 <> OKL_API.G_MISS_CHAR THEN
409 	   	  l_dsfv_rec.attribute4 := p_upd_dsfv_rec.attribute4;
410 	   END IF;
411 
412 	   IF p_upd_dsfv_rec.attribute5 <> OKL_API.G_MISS_CHAR THEN
413 	   	  l_dsfv_rec.attribute5 := p_upd_dsfv_rec.attribute5;
414 	   END IF;
415 
416 	   IF p_upd_dsfv_rec.attribute6 <> OKL_API.G_MISS_CHAR THEN
417 	   	  l_dsfv_rec.attribute6 := p_upd_dsfv_rec.attribute6;
418 	   END IF;
419 
420 	   IF p_upd_dsfv_rec.attribute7 <> OKL_API.G_MISS_CHAR THEN
421 	   	  l_dsfv_rec.attribute7 := p_upd_dsfv_rec.attribute7;
422 	   END IF;
423 
424 	   IF p_upd_dsfv_rec.attribute8 <> OKL_API.G_MISS_CHAR THEN
425 	   	  l_dsfv_rec.attribute8 := p_upd_dsfv_rec.attribute8;
426 	   END IF;
427 
428 	   IF p_upd_dsfv_rec.attribute9 <> OKL_API.G_MISS_CHAR THEN
429 	   	  l_dsfv_rec.attribute9 := p_upd_dsfv_rec.attribute9;
430 	   END IF;
431 
432 	   IF p_upd_dsfv_rec.attribute10 <> OKL_API.G_MISS_CHAR THEN
433 	   	  l_dsfv_rec.attribute10 := p_upd_dsfv_rec.attribute10;
434 	   END IF;
435 
436 	   IF p_upd_dsfv_rec.attribute11 <> OKL_API.G_MISS_CHAR THEN
437 	   	  l_dsfv_rec.attribute11 := p_upd_dsfv_rec.attribute11;
438 	   END IF;
439 
440 	   IF p_upd_dsfv_rec.attribute12 <> OKL_API.G_MISS_CHAR THEN
441 	   	  l_dsfv_rec.attribute12 := p_upd_dsfv_rec.attribute12;
442 	   END IF;
443 
444 	   IF p_upd_dsfv_rec.attribute13 <> OKL_API.G_MISS_CHAR THEN
445 	   	  l_dsfv_rec.attribute13 := p_upd_dsfv_rec.attribute13;
446 	   END IF;
447 
448 	   IF p_upd_dsfv_rec.attribute14 <> OKL_API.G_MISS_CHAR THEN
449 	   	  l_dsfv_rec.attribute14 := p_upd_dsfv_rec.attribute14;
450 	   END IF;
451 
452 	   IF p_upd_dsfv_rec.attribute15 <> OKL_API.G_MISS_CHAR THEN
453 	   	  l_dsfv_rec.attribute15 := p_upd_dsfv_rec.attribute15;
454 	   END IF;
455 
456 	   IF p_upd_dsfv_rec.org_id <> OKL_API.G_MISS_NUM THEN
457 	   	  l_dsfv_rec.org_id := p_upd_dsfv_rec.org_id;
458 	   END IF;
459 
460 	   RETURN l_dsfv_rec;
461   END defaults_to_actuals;
462 
463   ---------------------------------------------------------------------------
464   -- PROCEDURE check_dsf_opd_dates for: OKL_DATA_SRC_FNCTNS_V
465   -- To fetch the operands that are attached to the existing version of the
466   -- function and verify the dates for the both
467   ---------------------------------------------------------------------------
468   PROCEDURE check_dsf_opd_dates (p_upd_dsfv_rec      IN  dsfv_rec_type,
469                                  p_dsfv_rec      	 IN dsfv_rec_type,
470 							   	 x_return_status     OUT NOCOPY VARCHAR2
471   ) IS
472 
473     CURSOR okl_dsf_linkedopds_csr (p_dsf_id IN Okl_Operands_V.dsf_id%TYPE,
474 		   						   p_start_date DATE, p_end_date DATE) IS
475    SELECT '1'
476    FROM Okl_Operands_B opd
477    WHERE opd.DSF_ID 	=  p_dsf_id
478    AND ((opd.start_date < p_start_date) OR
479   	  (NVL(opd.end_date, TO_DATE('31/12/9999', 'DD/MM/YYYY')) > p_end_date )) ;
480 
481 
482   	l_return_status 	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
483 	l_min_start_date 	DATE := NULL;
484 	l_max_end_date	 	DATE := OKL_API.G_MISS_DATE;
485 	l_check 			VARCHAR2(1);
486 	l_not_found 		BOOLEAN;
487 
488   BEGIN
489     x_return_status := OKL_API.G_RET_STS_SUCCESS;
490 
491    OPEN okl_dsf_linkedopds_csr (p_upd_dsfv_rec.id, p_upd_dsfv_rec.start_date, p_upd_dsfv_rec.end_date);
492    FETCH okl_dsf_linkedopds_csr INTO l_check;
493    l_not_found := okl_dsf_linkedopds_csr%NOTFOUND;
494    CLOSE okl_dsf_linkedopds_csr;
495 
496    IF NOT l_not_found THEN
497 		OKL_API.SET_MESSAGE(p_app_name	  => G_APP_NAME,
498 						   p_msg_name	  => G_DATES_MISMATCH,
499 						   p_token1		  => G_PARENT_TABLE_TOKEN,
500 						   p_token1_value  => 'Okl_Data_Src_Fnctns_V',
501 						   p_token2		  => G_CHILD_TABLE_TOKEN,
502 						   p_token2_value  => 'Okl_Operands_V');
503 		RAISE G_EXCEPTION_HALT_PROCESSING;
504     END IF;
505 
506 EXCEPTION
507     WHEN G_EXCEPTION_HALT_PROCESSING THEN
508     -- no processing necessary; validation can continue
509     -- with the next column
510 		x_return_status := OKL_API.G_RET_STS_ERROR;
511 
512       IF (okl_dsf_linkedopds_csr%ISOPEN) THEN
513 	   	  CLOSE okl_dsf_linkedopds_csr;
514       END IF;
515 
516 	WHEN OTHERS THEN
517 		-- store SQL error message on message stack
518 		OKL_API.SET_MESSAGE(p_app_name	    =>	G_APP_NAME,
519 							p_msg_name		=>	G_UNEXPECTED_ERROR,
520 							p_token1		=>	G_SQLCODE_TOKEN,
521 							p_token1_value	=>	sqlcode,
522 							p_token2		=>	G_SQLERRM_TOKEN,
523 							p_token2_value	=>	sqlerrm);
524 		-- notify UNEXPECTED error for calling API.
525 		x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
526 
527       IF (okl_dsf_linkedopds_csr%ISOPEN) THEN
528 	   	  CLOSE okl_dsf_linkedopds_csr;
529       END IF;
530 
531   END check_dsf_opd_dates;
532 
533 
534 -- Not required as new version will not be creatd while updating the function
535 /*
536   ---------------------------------------------------------------------------
537   -- PROCEDURE check_updates
538   -- To verify whether the requested changes from the screen are valid or not
539   ---------------------------------------------------------------------------
540   PROCEDURE check_updates (
541     p_upd_dsfv_rec                 IN dsfv_rec_type,
542 	p_db_dsfv_rec				   IN dsfv_rec_type,
543 	p_dsfv_rec					   IN dsfv_rec_type,
544 	x_return_status				   OUT NOCOPY VARCHAR2,
545 	x_msg_data					   OUT NOCOPY VARCHAR2
546   ) IS
547   l_dsfv_rec	  		dsfv_rec_type;
548   l_return_status 		VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
549   l_valid		  		BOOLEAN;
550   l_attrib_tbl	okl_accounting_util.overlap_attrib_tbl_type;
551   BEGIN
552 	   x_return_status := OKL_API.G_RET_STS_SUCCESS;
553 	   l_dsfv_rec := p_dsfv_rec;
554 
555 	   IF p_upd_dsfv_rec.start_date <> OKL_API.G_MISS_DATE OR
556 	   	  p_upd_dsfv_rec.end_date <> OKL_API.G_MISS_DATE THEN
557 
558 
559 	   	-- call check_overlaps
560 		  l_attrib_tbl(1).attribute := 'NAME';
561 		  l_attrib_tbl(1).attrib_type	:= okl_accounting_util.G_VARCHAR2;
562 		  l_attrib_tbl(1).value	:= l_dsfv_rec.name;
563 
564                   okl_accounting_util.check_overlaps (p_id                         => l_dsfv_rec.id,
565                                                       p_attrib_tbl                 => l_attrib_tbl,
566                                                       p_start_date_attribute_name  => 'START_DATE',
567                                                       p_start_date                 => l_dsfv_rec.start_date,
568                                                       p_end_date_attribute_name    => 'END_DATE',
569                                                       p_end_date                   => l_dsfv_rec.end_date,
570                                                       p_view                       => 'Okl_Data_Src_Fnctns_V',
571                                                       x_return_status              => l_return_status,
572                                                       x_valid                      => l_valid);
573 
574 
575        	  IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
576        		 x_return_status    := OKL_API.G_RET_STS_UNEXP_ERROR;
577       	  	 RAISE G_EXCEPTION_HALT_PROCESSING;
578        	  ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) OR
579 		  	    (l_return_status = OKL_API.G_RET_STS_SUCCESS AND
580 		   	     l_valid <> TRUE) THEN
581        		 x_return_status    := OKL_API.G_RET_STS_ERROR;
582       	  	 RAISE G_EXCEPTION_HALT_PROCESSING;
583        	  END IF;
584 
585 	   END IF;
586 
587 	   -- call check_dsf_fma_dates
588   	   check_dsf_opd_dates (p_upd_dsfv_rec  => p_upd_dsfv_rec,
589                             p_dsfv_rec      => l_dsfv_rec,
590   						    x_return_status => l_return_status);
591        IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
592        	  x_return_status    := OKL_API.G_RET_STS_UNEXP_ERROR;
593       	  RAISE G_EXCEPTION_HALT_PROCESSING;
594 	   ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
595        	  x_return_status    := OKL_API.G_RET_STS_ERROR;
596       	  RAISE G_EXCEPTION_HALT_PROCESSING;
597        END IF;
598 
599   EXCEPTION
600     WHEN G_EXCEPTION_HALT_PROCESSING THEN
601     -- no processing necessary; validation can continue
602     -- with the next column
603     NULL;
604 
605     WHEN OTHERS THEN
606       -- store SQL error message on message stack for caller
607       OKL_API.SET_MESSAGE( p_app_name    => G_APP_NAME,
608                           p_msg_name     => G_UNEXPECTED_ERROR,
609                           p_token1       => G_SQLCODE_TOKEN,
610                           p_token1_value => sqlcode,
611                           p_token2       => G_SQLERRM_TOKEN,
612                           p_token2_value => sqlerrm );
613       -- notify caller of an UNEXPECTED error
614       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
615 
616   END check_updates;
617 */
618 
619 -- Not required as new version will not be creatd while updating the function
620 /*
621 
622   ---------------------------------------------------------------------------
623   -- PROCEDURE determine_action for: OKL_DATA_SRC_FNCTNS_V
624   -- This function helps in determining the various checks to be performed
625   -- for the new/updated record and also helps in determining whether a new
626   -- version is required or not
627   ---------------------------------------------------------------------------
628   FUNCTION determine_action (
629     p_upd_dsfv_rec                 IN dsfv_rec_type,
630 	p_db_dsfv_rec				   IN dsfv_rec_type,
631 	p_date						   IN DATE
632   ) RETURN VARCHAR2 IS
633   l_action VARCHAR2(1);
634   l_sysdate DATE := trunc(SYSDATE);
635 BEGIN
636    -- Scenario 1: Only description and/or descriptive flexfield
637   --    changes
638   IF p_upd_dsfv_rec.start_date = OKL_API.G_MISS_DATE AND
639 	 p_upd_dsfv_rec.end_date = OKL_API.G_MISS_DATE AND
640 	 p_upd_dsfv_rec.fnctn_code = OKL_API.G_MISS_CHAR AND
641 	 p_upd_dsfv_rec.source = OKL_API.G_MISS_CHAR THEN
642 	 l_action := '1';
643 -- Scenario 2: only changing description/descriptive flexfield changes
644 --	   and end date for all records or changing anything for a future record other
645 --	   than start date or modified start date is less than existing start date
646 
647   ELSIF (p_upd_dsfv_rec.start_date = OKL_API.G_MISS_DATE AND
648 	     (p_upd_dsfv_rec.end_date <> OKL_API.G_MISS_DATE OR
649           p_upd_dsfv_rec.end_date IS NULL) AND
650 	     p_upd_dsfv_rec.fnctn_code = OKL_API.G_MISS_CHAR AND
651 	     p_upd_dsfv_rec.source = OKL_API.G_MISS_CHAR) OR
652 	    (p_upd_dsfv_rec.start_date = OKL_API.G_MISS_DATE AND
653 	     p_db_dsfv_rec.start_date >= p_date AND
654 	     (p_upd_dsfv_rec.fnctn_code <> OKL_API.G_MISS_CHAR OR
655 	      p_upd_dsfv_rec.source <> OKL_API.G_MISS_CHAR)) OR
656 	    (p_upd_dsfv_rec.start_date <> OKL_API.G_MISS_DATE AND
657 	     p_db_dsfv_rec.start_date > p_date AND
658 		 p_upd_dsfv_rec.start_date < p_db_dsfv_rec.start_date) THEN
659 	 l_action := '2';
660   ELSE
661      l_action := '3';
662   END IF;
663   RETURN(l_action);
664   END determine_action;
665 */
666 
667   ---------------------------------------------------------------------------
668   -- PROCEDURE insert_operands for: OKL_DATA_SRC_FNCTNS_V
669   ---------------------------------------------------------------------------
670   PROCEDURE insert_functions(p_api_version      IN  NUMBER,
671                              p_init_msg_list    IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
672                         	 x_return_status    OUT NOCOPY VARCHAR2,
673                         	 x_msg_count        OUT NOCOPY NUMBER,
674                         	 x_msg_data         OUT NOCOPY VARCHAR2,
675                         	 p_dsfv_rec         IN  dsfv_rec_type,
676                         	 x_dsfv_rec         OUT NOCOPY dsfv_rec_type
677                         ) IS
678     l_api_version     CONSTANT NUMBER := 1;
679     l_api_name        CONSTANT VARCHAR2(30)  := 'insert_functions';
680 	l_valid			  BOOLEAN := TRUE;
681     l_return_status   VARCHAR2(1)    := OKL_API.G_RET_STS_SUCCESS;
682 	l_dsfv_rec		  dsfv_rec_type;
683 	l_sysdate		  DATE := to_date(to_char(SYSDATE, 'DD/MM/YYYY'), 'DD/MM/YYYY');
684   BEGIN
685     x_return_status := OKL_API.G_RET_STS_SUCCESS;
686 	l_dsfv_rec := p_dsfv_rec;
687 
688     l_return_status := OKL_API.START_ACTIVITY(p_api_name       => l_api_name,
689                                               p_pkg_name	   => G_PKG_NAME,
690                                               p_init_msg_list  => p_init_msg_list,
691                                               l_api_version	   => l_api_version,
692                                               p_api_version	   => p_api_version,
693                                               p_api_type	   => '_PVT',
694                                               x_return_status  => l_return_status);
695     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
696       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
697     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
698       RAISE OKL_API.G_EXCEPTION_ERROR;
699     END IF;
700 
701 	/* check for the records with start and end dates less than sysdate */
702 
703  /*   IF to_date(l_dsfv_rec.start_date, 'DD/MM/YYYY') < l_sysdate OR
704 	   to_date(l_dsfv_rec.end_date, 'DD/MM/YYYY') < l_sysdate THEN
705 	   OKL_API.SET_MESSAGE(p_app_name		=> G_APP_NAME,
706 						   p_msg_name		=> G_PAST_RECORDS);
707 	   RAISE OKL_API.G_EXCEPTION_ERROR;
708 	END IF;
709 */
710      IF to_date(to_char(l_dsfv_rec.end_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
711 	   OKL_API.SET_MESSAGE(p_app_name		=> G_APP_NAME,
712 						   p_msg_name		=> G_PAST_RECORDS);
713 	   RAISE OKL_API.G_EXCEPTION_ERROR;
714 	END IF;
715 
716 	/* public api to insert functions */
717 -- Start of wraper code generated automatically by Debug code generator for okl_data_src_fnctns_pub.insert_data_src_fnctns
718   IF(L_DEBUG_ENABLED='Y') THEN
719     L_LEVEL_PROCEDURE :=FND_LOG.LEVEL_PROCEDURE;
720     IS_DEBUG_PROCEDURE_ON := OKL_DEBUG_PUB.Check_Log_On(L_MODULE, L_LEVEL_PROCEDURE);
721   END IF;
722   IF(IS_DEBUG_PROCEDURE_ON) THEN
723     BEGIN
724         OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRSDFB.pls call okl_data_src_fnctns_pub.insert_data_src_fnctns ');
725     END;
726   END IF;
727     okl_data_src_fnctns_pub.insert_data_src_fnctns(p_api_version   => p_api_version,
728                               		               p_init_msg_list => p_init_msg_list,
729                               		 			   x_return_status => l_return_status,
730                               		 			   x_msg_count     => x_msg_count,
731                               		 			   x_msg_data      => x_msg_data,
732                               		 			   p_dsfv_rec      => l_dsfv_rec,
733                               		 			   x_dsfv_rec      => x_dsfv_rec);
734   IF(IS_DEBUG_PROCEDURE_ON) THEN
735     BEGIN
736         OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRSDFB.pls call okl_data_src_fnctns_pub.insert_data_src_fnctns ');
737     END;
738   END IF;
739 -- End of wraper code generated automatically by Debug code generator for okl_data_src_fnctns_pub.insert_data_src_fnctns
740 
741      IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
742         RAISE OKL_API.G_EXCEPTION_ERROR;
743      ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
744         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
745      END IF;
746 
747     OKL_API.END_ACTIVITY(x_msg_count  => x_msg_count,
748 						 x_msg_data	  => x_msg_data);
749   EXCEPTION
750     WHEN OKL_API.G_EXCEPTION_ERROR THEN
751       x_return_status := OKL_API.HANDLE_EXCEPTIONS(p_api_name	=> l_api_name,
752 	  				  	 						   p_pkg_name	=> G_PKG_NAME,
753 												   p_exc_name   => 'OKL_API.G_RET_STS_ERROR',
754 												   x_msg_count	=> x_msg_count,
755 												   x_msg_data	=> x_msg_data,
756 												   p_api_type	=> '_PVT');
757     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
758       x_return_status := OKL_API.HANDLE_EXCEPTIONS(p_api_name	=> l_api_name,
759 	  				  	 						   p_pkg_name	=> G_PKG_NAME,
760 												   p_exc_name   => 'OKL_API.G_RET_STS_UNEXP_ERROR',
761 												   x_msg_count	=> x_msg_count,
762 												   x_msg_data	=> x_msg_data,
763 												   p_api_type	=> '_PVT');
764     WHEN OTHERS THEN
765       x_return_status := OKL_API.HANDLE_EXCEPTIONS(p_api_name	=> l_api_name,
766 	  				  	 						   p_pkg_name	=> G_PKG_NAME,
767 												   p_exc_name   => 'OTHERS',
768 												   x_msg_count	=> x_msg_count,
769 												   x_msg_data	=> x_msg_data,
770 												   p_api_type	=> '_PVT');
771 
772   END insert_functions;
773 
774   ---------------------------------------------------------------------------
775   -- PROCEDURE update_functions for: OKL_DATA_SRC_FNCTNS_V
776   ---------------------------------------------------------------------------
777   PROCEDURE update_functions(p_api_version                  IN  NUMBER,
778                             p_init_msg_list                IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
779                         	x_return_status                OUT NOCOPY VARCHAR2,
780                         	x_msg_count                    OUT NOCOPY NUMBER,
781                         	x_msg_data                     OUT NOCOPY VARCHAR2,
782                         	p_dsfv_rec                     IN  dsfv_rec_type,
783                         	x_dsfv_rec                     OUT NOCOPY dsfv_rec_type
784                         ) IS
785     l_api_version     	  	CONSTANT NUMBER := 1;
786     l_api_name        	  	CONSTANT VARCHAR2(30)  := 'update_functions';
787     l_no_data_found   	  	BOOLEAN := TRUE;
788 	l_valid			  	  	BOOLEAN := TRUE;
789 	l_oldversion_enddate  	DATE := to_date(to_char(SYSDATE, 'DD/MM/YYYY'), 'DD/MM/YYYY');
790 	l_sysdate			  	DATE := to_date(to_char(SYSDATE, 'DD/MM/YYYY'), 'DD/MM/YYYY');
791     l_db_dsfv_rec    	  	dsfv_rec_type; /* database copy */
792 	l_upd_dsfv_rec	 	  	dsfv_rec_type; /* input copy */
793 	l_dsfv_rec	  	 	  	dsfv_rec_type; /* latest with the retained changes */
794 	l_tmp_dsfv_rec			dsfv_rec_type; /* for any other purposes */
795     l_return_status   	  	VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
796 	l_action				VARCHAR2(1);
797 	l_new_version			VARCHAR2(100);
798 	l_attrib_tbl			okl_accounting_util.overlap_attrib_tbl_type;
799   BEGIN
800     x_return_status := OKL_API.G_RET_STS_SUCCESS;
801 	l_upd_dsfv_rec := p_dsfv_rec;
802 
803     l_return_status := OKL_API.START_ACTIVITY(p_api_name       => l_api_name,
804                                               p_pkg_name	   => G_PKG_NAME,
805                                               p_init_msg_list  => p_init_msg_list,
806                                               l_api_version	   => l_api_version,
807                                               p_api_version	   => p_api_version,
808                                               p_api_type	   => '_PVT',
809                                               x_return_status  => l_return_status);
810     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
811       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
812     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
813       RAISE OKL_API.G_EXCEPTION_ERROR;
814     END IF;
815 
816 	/* fetch old details from the database */
817     get_rec(p_dsfv_rec 	 	=> l_upd_dsfv_rec,
818 		    x_return_status => l_return_status,
819 			x_no_data_found => l_no_data_found,
820     		x_dsfv_rec		=> l_db_dsfv_rec);
821 	IF l_return_status <> OKL_API.G_RET_STS_SUCCESS OR
822 	   l_no_data_found = TRUE THEN
823 	   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
824 	END IF;
825 
826     /* to reorganize the input accordingly */
827     reorganize_inputs(p_upd_dsfv_rec     => l_upd_dsfv_rec,
828                       p_db_dsfv_rec      => l_db_dsfv_rec);
829 
830 	/* check for start date greater than sysdate */
831 /*	IF to_date(l_upd_dsfv_rec.start_date, 'DD/MM/YYYY') <> to_date(OKL_API.G_MISS_DATE,'DD/MM/YYYY') AND
832 	   to_date(l_upd_dsfv_rec.start_date, 'DD/MM/YYYY') < l_sysdate THEN
833 	   OKL_API.SET_MESSAGE(p_app_name	  => G_APP_NAME,
834 						   p_msg_name	  => G_START_DATE);
835 	   RAISE OKL_API.G_EXCEPTION_ERROR;
836     END IF;
837 */
838 
839 	/* check for start date greater than sysdate */
840 	IF to_date(to_char(l_upd_dsfv_rec.end_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') <> to_date(to_char(OKL_API.G_MISS_DATE, 'DD/MM/YYYY'),'DD/MM/YYYY') AND
841 	   to_date(to_char(l_upd_dsfv_rec.end_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
842 	   OKL_API.SET_MESSAGE(p_app_name	  => G_APP_NAME,
843 						   p_msg_name	  => 'OKL_END_DATE');
844 	   RAISE OKL_API.G_EXCEPTION_ERROR;
845     END IF;
846 
847 /*
848 
849   -- check for start date greater than sysdate
850 	IF to_date(to_char(l_upd_dsfv_rec.start_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') <> to_date(to_char(OKL_API.G_MISS_DATE, 'DD/MM/YYYY'),'DD/MM/YYYY') AND
851 	   to_date(to_char(l_db_dsfv_rec.start_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') <> to_date(to_char(l_upd_dsfv_rec.start_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') AND
852 	   to_date(to_char(l_db_dsfv_rec.start_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
853 	   OKL_API.SET_MESSAGE(p_app_name	  => G_APP_NAME,
854 						   p_msg_name	  => G_PAST_RECORDS);
855 	   RAISE OKL_API.G_EXCEPTION_ERROR;
856     END IF;
857 
858 
859 	-- check for the records with start and end dates less than sysdate
860     IF to_date(to_char(l_db_dsfv_rec.start_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate AND
861 	   to_date(to_char(l_db_dsfv_rec.end_date, 'DD/MM/YYYY'), 'DD/MM/YYYY') < l_sysdate THEN
862 	   OKL_API.SET_MESSAGE(p_app_name		=> G_APP_NAME,
863 						   p_msg_name		=> G_PAST_RECORDS);
864 	   RAISE OKL_API.G_EXCEPTION_ERROR;
865 	END IF;
866 
867 */
868 
869   -- Check if the linked operands are within the date range of function
870 
871  	check_dsf_opd_dates (p_upd_dsfv_rec      => l_upd_dsfv_rec,
872                         p_dsfv_rec      	=> l_db_dsfv_rec,
873 						x_return_status     => l_return_status );
874 
875 	IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
876 	   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
877 	END IF;
878 
879 	   /* public api to update functions */
880 -- Start of wraper code generated automatically by Debug code generator for okl_data_src_fnctns_pub.update_data_src_fnctns
881   IF(L_DEBUG_ENABLED='Y') THEN
882     L_LEVEL_PROCEDURE :=FND_LOG.LEVEL_PROCEDURE;
883     IS_DEBUG_PROCEDURE_ON := OKL_DEBUG_PUB.Check_Log_On(L_MODULE, L_LEVEL_PROCEDURE);
884   END IF;
885   IF(IS_DEBUG_PROCEDURE_ON) THEN
886     BEGIN
887         OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'Begin Debug OKLRSDFB.pls call okl_data_src_fnctns_pub.update_data_src_fnctns ');
888     END;
889   END IF;
890        okl_data_src_fnctns_pub.update_data_src_fnctns(p_api_version   => p_api_version,
891                             		 	              p_init_msg_list => p_init_msg_list,
892                               		 				  x_return_status => l_return_status,
893                               		 				  x_msg_count     => x_msg_count,
894                               		 				  x_msg_data      => x_msg_data,
895                               		 				  p_dsfv_rec      => l_upd_dsfv_rec,
896                               		 				  x_dsfv_rec      => x_dsfv_rec);
897   IF(IS_DEBUG_PROCEDURE_ON) THEN
898     BEGIN
899         OKL_DEBUG_PUB.LOG_DEBUG(L_LEVEL_PROCEDURE,L_MODULE,'End Debug OKLRSDFB.pls call okl_data_src_fnctns_pub.update_data_src_fnctns ');
900     END;
901   END IF;
902 -- End of wraper code generated automatically by Debug code generator for okl_data_src_fnctns_pub.update_data_src_fnctns
903        IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
904           RAISE OKL_API.G_EXCEPTION_ERROR;
905        ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
906        	  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
907        END IF;
908 
909 
910 
911 -- Not required as new version will not be creatd while updating the function
912 /*
913 	--  determine how the processing to be done
914 	l_action := determine_action(p_upd_dsfv_rec	 => l_upd_dsfv_rec,
915 			 					 p_db_dsfv_rec	 => l_db_dsfv_rec,
916 								 p_date			 => l_sysdate);
917 
918 	-- Scenario 1: only changing description and/or source and/or descriptive flexfields
919 	IF l_action = '1' THEN
920 	   -- public api to update functions
921        okl_data_src_fnctns_pub.update_data_src_fnctns(p_api_version   => p_api_version,
922                             		 	              p_init_msg_list => p_init_msg_list,
923                               		 				  x_return_status => l_return_status,
924                               		 				  x_msg_count     => x_msg_count,
925                               		 				  x_msg_data      => x_msg_data,
926                               		 				  p_dsfv_rec      => l_upd_dsfv_rec,
927                               		 				  x_dsfv_rec      => x_dsfv_rec);
928        IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
929           RAISE OKL_API.G_EXCEPTION_ERROR;
930        ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
931        	  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
932        END IF;
933 
934 	-- Scenario 2: only changing description/source/descriptive flexfield changes
935 	   and end date for all records or changing anything for a future record other
936 	   than start date or modified start date is less than existing start date
937 	ELSIF l_action = '2' THEN
938 	    create a temporary record with all relevant details from db and upd records
939 	   l_dsfv_rec := defaults_to_actuals(p_upd_dsfv_rec => l_upd_dsfv_rec,
940 	   					  				 p_db_dsfv_rec  => l_db_dsfv_rec);
941 
942 	   check_updates(p_upd_dsfv_rec	 => l_upd_dsfv_rec,
943 	   			     p_db_dsfv_rec	 => l_db_dsfv_rec,
944 					 p_dsfv_rec		 => l_dsfv_rec,
945 					 x_return_status => l_return_status,
946 					 x_msg_data		 => x_msg_data);
947        IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
948        	  RAISE OKL_API.G_EXCEPTION_ERROR;
949        ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
950        	  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
951        END IF;
952 
953 	   -- public api to update functions
954        okl_data_src_fnctns_pub.update_data_src_fnctns(p_api_version   => p_api_version,
955                             		 				  p_init_msg_list => p_init_msg_list,
956                               		 				  x_return_status => l_return_status,
957                               		 				  x_msg_count     => x_msg_count,
958                               		 				  x_msg_data      => x_msg_data,
959                               		 				  p_dsfv_rec      => l_upd_dsfv_rec,
960                               		 				  x_dsfv_rec      => x_dsfv_rec);
961        IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
962           RAISE OKL_API.G_EXCEPTION_ERROR;
963        ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
964        	  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
965        END IF;
966 
967 	-- Scenario 3: changing anything else i.e., anything including start date + start date
968 	   always greater than system date for current records or anything + start date always
969 	   greater than existing start date for future records
970 	ELSIF l_action = '3' THEN
971 
972 	   -- for old version
973 	   IF l_upd_dsfv_rec.start_date <> OKL_API.G_MISS_DATE THEN
974 	   	  l_oldversion_enddate := l_upd_dsfv_rec.start_date - 1;
975 	   ELSE
976 	   	  l_oldversion_enddate := l_sysdate - 1;
977 	   END IF;
978 
979 	   l_dsfv_rec := l_db_dsfv_rec;
980 	   l_dsfv_rec.end_date := l_oldversion_enddate;
981 
982 	    call verify changes to update the database
983 	   IF l_oldversion_enddate > l_db_dsfv_rec.end_date THEN
984 	   	  check_updates(p_upd_dsfv_rec	=> l_upd_dsfv_rec,
985 	   			     	p_db_dsfv_rec	=> l_db_dsfv_rec,
986 					 	p_dsfv_rec		=> l_dsfv_rec,
987 					 	x_return_status => l_return_status,
988 					 	x_msg_data		=> x_msg_data);
989        	  IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
990        	  	 RAISE OKL_API.G_EXCEPTION_ERROR;
991        	  ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
992        	  	 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
993           END IF;
994 	   END IF;
995 
996 	   -- public api to update functions
997        okl_data_src_fnctns_pub.update_data_src_fnctns(p_api_version   => p_api_version,
998                             		 	              p_init_msg_list => p_init_msg_list,
999                               		 				  x_return_status => l_return_status,
1000                               		 				  x_msg_count     => x_msg_count,
1001                               		 				  x_msg_data      => x_msg_data,
1002                               		 				  p_dsfv_rec      => l_dsfv_rec,
1003                               		 				  x_dsfv_rec      => x_dsfv_rec);
1004        IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
1005           RAISE OKL_API.G_EXCEPTION_ERROR;
1006        ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1007        	  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1008        END IF;
1009 
1010 	   -- for new version
1011 	    -- create a temporary record with all relevant details from db and upd records
1012 	   l_dsfv_rec := defaults_to_actuals(p_upd_dsfv_rec => l_upd_dsfv_rec,
1013 	   					  				 p_db_dsfv_rec  => l_db_dsfv_rec);
1014 
1015 	   IF l_upd_dsfv_rec.start_date = OKL_API.G_MISS_DATE THEN
1016 	   	  l_dsfv_rec.start_date := l_sysdate;
1017 	   END IF;
1018 
1019 
1020           l_attrib_tbl(1).attribute       := 'NAME';
1021     	  l_attrib_tbl(1).attrib_type	:= okl_accounting_util.G_VARCHAR2;
1022     	  l_attrib_tbl(1).value	        := l_dsfv_rec.name;
1023 
1024   	  okl_accounting_util.get_version(p_attrib_tbl	  	     => l_attrib_tbl,
1025   				           p_cur_version	     => l_dsfv_rec.version,
1026 				           p_end_date_attribute_name => 'END_DATE',
1027 				           p_end_date		     => l_dsfv_rec.end_date,
1028 				           p_view		     => 'Okl_Data_Src_Fnctns_V',
1029   				           x_return_status	     => l_return_status,
1030 				           x_new_version	     => l_new_version);
1031 
1032        IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1033        	  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1034        ELSE
1035 	   	  l_dsfv_rec.version := l_new_version;
1036        END IF;
1037 
1038 	   -- call verify changes to update the database
1039 	   l_dsfv_rec.id := OKL_API.G_MISS_NUM;
1040 
1041 	   IF l_dsfv_rec.end_date > l_db_dsfv_rec.end_date THEN
1042 	   	  check_updates(p_upd_dsfv_rec	=> l_upd_dsfv_rec,
1043 	   				    p_db_dsfv_rec	=> l_db_dsfv_rec,
1044 					  	p_dsfv_rec		=> l_dsfv_rec,
1045 					  	x_return_status => l_return_status,
1046 					  	x_msg_data		=> x_msg_data);
1047        	  IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
1048           	 RAISE OKL_API.G_EXCEPTION_ERROR;
1049        	  ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1050        	  	 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1051           END IF;
1052 	   END IF;
1053 
1054 	   -- public api to insert functions
1055        okl_data_src_fnctns_pub.insert_data_src_fnctns(p_api_version   => p_api_version,
1056                             		 	              p_init_msg_list => p_init_msg_list,
1057                               		 				  x_return_status => l_return_status,
1058                               		 				  x_msg_count     => x_msg_count,
1059                               		 				  x_msg_data      => x_msg_data,
1060                               		 				  p_dsfv_rec      => l_dsfv_rec,
1061                               		 				  x_dsfv_rec      => x_dsfv_rec);
1062        IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
1063           RAISE OKL_API.G_EXCEPTION_ERROR;
1064        ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1065        	  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1066        END IF;
1067 
1068 	END IF;
1069 
1070 */
1071 
1072 
1073     OKL_API.END_ACTIVITY(x_msg_count  => x_msg_count,
1074 						 x_msg_data	  => x_msg_data);
1075   EXCEPTION
1076     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1077       x_return_status := OKL_API.HANDLE_EXCEPTIONS(p_api_name	=> l_api_name,
1078 	  				  	 						   p_pkg_name	=> G_PKG_NAME,
1079 												   p_exc_name   => 'OKL_API.G_RET_STS_ERROR',
1080 												   x_msg_count	=> x_msg_count,
1081 												   x_msg_data	=> x_msg_data,
1082 												   p_api_type	=> '_PVT');
1083     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1084       x_return_status := OKL_API.HANDLE_EXCEPTIONS(p_api_name	=> l_api_name,
1085 	  				  	 						   p_pkg_name	=> G_PKG_NAME,
1086 												   p_exc_name   => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1087 												   x_msg_count	=> x_msg_count,
1088 												   x_msg_data	=> x_msg_data,
1089 												   p_api_type	=> '_PVT');
1090     WHEN OTHERS THEN
1091       x_return_status := OKL_API.HANDLE_EXCEPTIONS(p_api_name	=> l_api_name,
1092 	  				  	 						   p_pkg_name	=> G_PKG_NAME,
1093 												   p_exc_name   => 'OTHERS',
1094 												   x_msg_count	=> x_msg_count,
1095 												   x_msg_data	=> x_msg_data,
1096 												   p_api_type	=> '_PVT');
1097 
1098   END update_functions;
1099 
1100 END OKL_SETUPFUNCTIONS_PVT;