DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PERIOD_MASKS_PUB

Source


1 PACKAGE BODY PA_PERIOD_MASKS_PUB as
2 /* $Header: PAFPPMMB.pls 120.0.12000000.2 2007/09/10 12:12:56 admarath ship $ */
3 P_PA_DEBUG_MODE varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
4 
5 PROCEDURE maintain_period_masks(
6                     	p_period_mask_id	    IN NUMBER,
7                     	p_name			    IN VARCHAR2,
8                         p_description		    IN VARCHAR2,
9                         p_time_phase_code	    IN VARCHAR2,
10                         p_effective_start_date	    IN pa_period_masks_b.effective_start_date%type,
11                         p_effective_end_date	    IN pa_period_masks_b.effective_end_date%type,
12 			p_record_version_number	    IN NUMBER,
13 			p_num_of_periods	    IN PA_NUM_1000_NUM,
14 			p_anchor_period_flag 	    IN PA_VC_1000_150,
15 		        p_from_anchor_position	    IN PA_NUM_1000_NUM,
16 			p_error_flag_tab            IN OUT NOCOPY PA_VC_1000_150,
17 			p_init_msg_flag             IN VARCHAR2,
18      			p_commit_flag               IN VARCHAR2,
19                         x_return_status       	    OUT NOCOPY VARCHAR2,
20                         x_msg_count           	    OUT NOCOPY NUMBER,
21                         x_msg_data            	    OUT NOCOPY VARCHAR2 )
22 
23 IS
24     l_module_name VARCHAR2(100) := 'pa.plsql.PA_PERIOD_MASKS_PUB.maintain_period_masks';
25     l_project_id_tab  	           SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
26     l_period_masks_s 		number := 0;
27 
28     l_language 			varchar2(100) := null;
29 
30     l_rec_count        		number := 0;
31     --Initialize plsql tables
32     --l_num_of_periods.delete;
33     --l_anchor_period_flag.delete;
34     --l_from_anchor_position.delete;
35     l_return_status varchar2(30);
36 BEGIN
37    IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
38       PA_DEBUG.init_err_stack('PAFPPMMB.PA_PERIOD_MASKS_PUB.MAINTAIN_PERIOD_MASK');
39    ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
40             pa_debug.set_curr_function( p_function     => 'maintain_period_masks'
41                                        ,p_debug_mode   =>  p_pa_debug_mode);
42    END IF;
43 
44     x_return_status := FND_API.G_RET_STS_SUCCESS;
45     x_msg_count := 0;
46 
47     IF p_init_msg_flag = 'Y' THEN
48         FND_MSG_PUB.Initialize;
49     END IF;
50 
51     /*********Name Validation***********/
52     IF P_PA_DEBUG_MODE = 'Y' THEN
53             pa_fp_gen_amount_utils.fp_debug
54              (p_msg         => 'Before calling  pa_fp_period_masks_utils.name_validation',
55               p_module_name => l_module_name,
56               p_log_level   => 5);
57     END IF;
58     pa_fp_period_masks_utils.name_validation(
59                         p_name => p_name,
60 			p_period_mask_id => p_period_mask_id,
61 			p_init_msg_flag => 'N',
62 			x_return_status => x_return_status,
63 			x_msg_count => x_msg_count,
64 			x_msg_data => x_msg_data );
65     IF P_PA_DEBUG_MODE = 'Y' THEN
66             pa_fp_gen_amount_utils.fp_debug
67              (p_msg         => 'Status after calling
68                               pa_fp_period_masks_utils.name_validation: '
69                               ||x_return_status,
70               p_module_name => l_module_name,
71               p_log_level   => 5);
72     END IF;
73 
74     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
75         IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
76             PA_DEBUG.reset_err_stack;
77         ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
78             PA_DEBUG.Reset_Curr_Function;
79         END IF;
80         RETURN;
81     END IF;
82     l_return_status := x_return_status;
83 
84     /*********Effective Date Validation***********/
85     /**Doosan changes. Moved this api from pa_fin_plan_type_utils
86       *to pa_fin_plan_utils
87       *pa_fin_plan_types_utils.end_date_active_val(*/
88     IF P_PA_DEBUG_MODE = 'Y' THEN
89             pa_fp_gen_amount_utils.fp_debug
90              (p_msg         => 'Before calling
91                                pa_fp_period_masks_utils.end_date_active_val',
92               p_module_name => l_module_name,
93               p_log_level   => 5);
94     END IF;
95     pa_fin_plan_utils.end_date_active_val(
96                     p_start_date_active => p_effective_start_date,
97 	            p_end_date_active => p_effective_end_date,
98 		    x_return_status => x_return_status,
99                     x_msg_count => x_msg_count,
100 		    x_msg_data => x_msg_data);
101 
102     IF P_PA_DEBUG_MODE = 'Y' THEN
103             pa_fp_gen_amount_utils.fp_debug
104              (p_msg         => 'Status after calling
105                               pa_fp_period_masks_utils.end_date_active_val: '
106                               ||x_return_status,
107               p_module_name => l_module_name,
108               p_log_level   => 5);
109 
110     END IF;
111     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
112         IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
113             PA_DEBUG.reset_err_stack;
114         ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
115             PA_DEBUG.Reset_Curr_Function;
116         END IF;
117         RETURN;
118     END IF;
119 
120     IF x_return_status = FND_API.G_RET_STS_ERROR THEN
121         l_return_status := x_return_status;
122     END IF;
123 
124     /*********Number of Period Validation***********/
125     IF P_PA_DEBUG_MODE = 'Y' THEN
126             pa_fp_gen_amount_utils.fp_debug
127              (p_msg         => 'Before calling
128                                pa_fp_period_masks_utils.nop_validation',
129               p_module_name => l_module_name,
130               p_log_level   => 5);
131    END IF;
132     pa_fp_period_masks_utils.nop_validation(
133                 p_num_of_periods => p_num_of_periods,
134 		p_init_msg_flag => 'N',
135 		p_error_flag_tab => p_error_flag_tab,
136 		x_return_status => x_return_status,
137 		x_msg_count => x_msg_count,
138 		x_msg_data => x_msg_data);
139     IF P_PA_DEBUG_MODE = 'Y' THEN
140             pa_fp_gen_amount_utils.fp_debug
141              (p_msg         => 'Status after calling
142                               pa_fp_period_masks_utils.nop_validation: '
143                               ||x_return_status,
144               p_module_name => l_module_name,
145               p_log_level   => 5);
146     END IF;
147     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
148         IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
149             PA_DEBUG.reset_err_stack;
150         ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
151             PA_DEBUG.Reset_Curr_Function;
152         END IF;
153         RETURN;
154     END IF;
155     IF x_return_status = FND_API.G_RET_STS_ERROR THEN
156         l_return_status := x_return_status;
157     END IF;
158     x_return_status := l_return_status;
159 
160     IF x_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
161         IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
162             PA_DEBUG.reset_err_stack;
163         ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
164             PA_DEBUG.Reset_Curr_Function;
165         END IF;
166         return;
167     END IF;
168 
169     /**if period_mask_id is null, then we need to INSERT
170       *Populate both the master record in pa_period_masks_s + pa_period_masks_tl
171       *and detail record in pa_period_mask_details*/
172     IF p_period_mask_id = 0  THEN
173         SELECT pa_period_masks_s.nextval INTO l_period_masks_s FROM DUAL;
174 	SELECT userenv('LANG') INTO l_language FROM dual;
175 	/*populating table pa_period_masks_b*/
176         INSERT INTO pa_period_masks_b (
177      			PERIOD_MASK_ID,
178 			EFFECTIVE_START_DATE,
179 			EFFECTIVE_END_DATE,
180 		        TIME_PHASE_CODE,
181 			CREATION_DATE,
182 			CREATED_BY,
183 			LAST_UPDATE_LOGIN,
184 			LAST_UPDATED_BY,
185 		        LAST_UPDATE_DATE,
186 			RECORD_VERSION_NUMBER,
187 			PRE_DEFINED_FLAG)
188 		VALUES(
189 			l_period_masks_s,
190 			p_effective_start_date,
191 			p_effective_end_date,
192                         p_time_phase_code,
193                         sysdate,
194                         FND_GLOBAL.USER_ID,
195                         FND_GLOBAL.LOGIN_ID,
196                         FND_GLOBAL.LOGIN_ID,
197                         sysdate,
198 			1,
199 			'N');
200         /*populating table pa_period_masks_tl*/
201 	INSERT INTO pa_period_masks_tl (
202 			PERIOD_MASK_ID,
203 			NAME,
204 			DESCRIPTION,
205 			LANGUAGE,
206 			SOURCE_LANG,
207 			LAST_UPDATE_DATE,
208 			LAST_UPDATED_BY,
209 			CREATION_DATE,
210 			CREATED_BY,
211 			LAST_UPDATE_LOGIN )
212 		select  l_period_masks_s,
213 			p_name,
214 			p_description,
215 			L.LANGUAGE_CODE, /* Bug 6275098*/
216 			l_language,
217                         sysdate,
218                         FND_GLOBAL.LOGIN_ID,
219                         sysdate,
220                         FND_GLOBAL.USER_ID,
221                         FND_GLOBAL.LOGIN_ID /*Changes for Bug 6275098 */
222 			from FND_LANGUAGES L where L.INSTALLED_FLAG in ('I', 'B')
223 			and not exists
224 			(select null from PA_PERIOD_MASKS_TL T
225 			where T.PERIOD_MASK_ID = l_period_masks_s
226 			and T.LANGUAGE = L.LANGUAGE_CODE);
227 
228         IF P_PA_DEBUG_MODE = 'Y' THEN
229             pa_fp_gen_amount_utils.fp_debug
230              (p_msg         => 'Before calling
231                                PA_PERIOD_MASKS_PUB.MAINTAIN_PERIOD_MASK_DTLS',
232               p_module_name => l_module_name,
233               p_log_level   => 5);
234         END IF;
235         /*populating table pa_period_mask_details*/
236 	PA_PERIOD_MASKS_PUB.MAINTAIN_PERIOD_MASK_DTLS(
237 		        p_period_mask_id => l_period_masks_s,
238 		        p_num_of_periods => p_num_of_periods,
239 			p_anchor_period_flag => p_anchor_period_flag,
240 			p_from_anchor_position => p_from_anchor_position,
241 			p_init_msg_flag => 'N',
242 			p_commit_flag => 'N',
243 			x_return_status => x_return_status,
244 			x_msg_count => x_msg_count,
245 			x_msg_data => x_msg_data);
246         IF P_PA_DEBUG_MODE = 'Y' THEN
247             pa_fp_gen_amount_utils.fp_debug
248              (p_msg         => 'Status after calling
249                               PA_PERIOD_MASKS_PUB.MAINTAIN_PERIOD_MASK_DTL: '
250                               ||x_return_status,
251               p_module_name => l_module_name,
252               p_log_level   => 5);
253         END IF;
254 
255 	IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
256             IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
257                 PA_DEBUG.reset_err_stack;
258             ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
259                 PA_DEBUG.Reset_Curr_Function;
260             END IF;
261 	    RETURN;
262 	END IF;
263 
264     /**if period_mask_id is not null, then we need to UPDATE
265       *Update both the master record in pa_period_masks_s + pa_period_masks_tl
266       *and detail record in pa_period_mask_details*/
267     ELSE
268         UPDATE pa_period_masks_b
269         SET effective_start_date = p_effective_start_date,
270        	    effective_end_date = p_effective_end_date,
271  	    time_phase_code = p_time_phase_code,
272 	    last_update_login = FND_GLOBAL.LOGIN_ID,
273 	    last_updated_by = FND_GLOBAL.LOGIN_ID,
274 	    last_update_date = sysdate,
275             record_version_number = record_version_number + 1
276         WHERE period_mask_id = p_period_mask_id
277               and record_version_number = p_record_version_number;
278         IF (sql%notfound) THEN
279             x_return_status := FND_API.G_RET_STS_ERROR;
280             PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
281                                  p_msg_name            => 'PA_FP_PM_INVALID');
282             IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
283                 PA_DEBUG.reset_err_stack;
284             ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
285                 PA_DEBUG.Reset_Curr_Function;
286             END IF;
287             RETURN;
288         END IF;
289 
290         UPDATE pa_period_masks_tl
291         SET name = p_name,
292    	    description = p_description,
293 	    last_update_login = FND_GLOBAL.LOGIN_ID,
294 	    last_updated_by = FND_GLOBAL.LOGIN_ID,
295 	    last_update_date = sysdate
296         WHERE period_mask_id = p_period_mask_id;
297 
298 
299         DELETE FROM pa_period_mask_details
300         WHERE period_mask_id = p_period_mask_id;
301 	      l_rec_count := p_num_of_periods.count();
302 
303         IF P_PA_DEBUG_MODE = 'Y' THEN
304             pa_fp_gen_amount_utils.fp_debug
305              (p_msg         => 'Before calling
306                                PA_PERIOD_MASKS_PUB.MAINTAIN_PERIOD_MASK_DTLS',
307               p_module_name => l_module_name,
308               p_log_level   => 5);
309         END IF;
310         PA_PERIOD_MASKS_PUB.MAINTAIN_PERIOD_MASK_DTLS(
311                 p_period_mask_id => p_period_mask_id,
312 	        p_num_of_periods => p_num_of_periods,
313 		p_anchor_period_flag => p_anchor_period_flag,
314 		p_from_anchor_position => p_from_anchor_position,
315 		p_init_msg_flag => 'N',
316 		p_commit_flag => 'N',
317 		x_return_status => x_return_status,
318 		x_msg_count => x_msg_count,
319 		x_msg_data => x_msg_data);
320 	IF P_PA_DEBUG_MODE = 'Y' THEN
321             pa_fp_gen_amount_utils.fp_debug
322              (p_msg         => 'Status after calling
323                               PA_PERIOD_MASKS_PUB.MAINTAIN_PERIOD_MASK_DTL: '
324                               ||x_return_status,
325               p_module_name => l_module_name,
326               p_log_level   => 5);
327         END IF;
328         IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
329             IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
330                 PA_DEBUG.reset_err_stack;
331             ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
332                 PA_DEBUG.Reset_Curr_Function;
333             END IF;
334             RETURN;
335         END IF;
336 
337     END IF;
338 
339     IF (p_commit_flag = 'Y') THEN
340         COMMIT;
341     END IF;
342     IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
343         PA_DEBUG.reset_err_stack;
344     ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
345         PA_DEBUG.Reset_Curr_Function;
346     END IF;
347 
348 EXCEPTION
349     WHEN OTHERS THEN
350         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
351         x_msg_count     := 1;
352         x_msg_data      := substr(SQLERRM,1,240);
353 
354         FND_MSG_PUB.add_exc_msg( p_pkg_name         => 'PA_PERIOD_MASKS_PUB',
355                                  p_procedure_name   => 'maintain_period_masks');
356 
357         IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
358             PA_DEBUG.reset_err_stack;
359         ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
360             PA_DEBUG.Reset_Curr_Function;
361         END IF;
362 
363         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
364 
365 END maintain_period_masks;
366 
367 
368 --*********************
369 PROCEDURE MAINTAIN_PERIOD_MASK_DTLS
370     (p_period_mask_id                IN     PA_PERIOD_MASKS_B.PERIOD_MASK_ID%TYPE,
371      p_num_of_periods                IN     PA_NUM_1000_NUM,
372      p_anchor_period_flag            IN     PA_VC_1000_150,
373      p_from_anchor_position          IN     PA_NUM_1000_NUM,
374      p_init_msg_flag                 IN     VARCHAR2,
375      p_commit_flag                   IN     VARCHAR2,
376      x_return_status                 OUT    NOCOPY VARCHAR2,
377      x_msg_count                     OUT    NOCOPY NUMBER,
378      x_msg_data                      OUT    NOCOPY VARCHAR2)
379 IS
380     l_module_name VARCHAR2(100) := 'pa.plsql.PA_PERIOD_MASKS_PUB.MAINTAIN_PERIOD_MASK_DTLS';
381 
382     CURSOR succ_pd IS
383     SELECT from_anchor_position,num_of_periods FROM
384     pa_fp_period_mask_tmp WHERE from_anchor_position > 0 ORDER BY from_anchor_position;
385 
386     CURSOR prec_pd IS
387     SELECT from_anchor_position,num_of_periods FROM
388     pa_fp_period_mask_tmp WHERE from_anchor_position < 0 ORDER BY from_anchor_position desc;
389 
390 
391     l_from_anchor_position           NUMBER;
392     l_first_no_of_pds                NUMBER;
393     l_start_temp                     NUMBER;
394     l_tmp                            NUMBER;
395     l_tmp_end                        NUMBER;
396     l_initial_flag                   VARCHAR2(1);
397     l_anchor_period_flag             PA_VC_1000_150;
398     l_flag_exists                    BOOLEAN := FALSE;
399 
400     l_count number;
401 BEGIN
402     IF P_PA_DEBUG_MODE = 'Y' THEN
403   	pa_debug.set_curr_function( p_function   => 'MAINTAIN_PERIOD_MASK_DTLS',
404                                     p_debug_mode => p_pa_debug_mode );
405     END IF;
406 
407     x_return_status := FND_API.G_RET_STS_SUCCESS;
408 
409     IF p_init_msg_flag = 'Y' THEN
410         FND_MSG_PUB.Initialize;
411     END IF;
412 
413     x_msg_count := 0;
414 
415 
416     DELETE FROM pa_fp_period_mask_tmp;
417 
418     IF P_PA_DEBUG_MODE = 'Y' THEN
419             pa_fp_gen_amount_utils.fp_debug
420              (p_msg         => 'Before inserting into temporary table',
421               p_module_name => l_module_name,
422               p_log_level   => 5);
423     END IF;
424 
425     FORALL i in p_num_of_periods.FIRST..p_num_of_periods.LAST
426         INSERT INTO pa_fp_period_mask_tmp(NUM_OF_PERIODS,ANCHOR_PERIOD_FLAG,FROM_ANCHOR_POSITION)
427         VALUES ( p_num_of_periods(i),p_anchor_period_flag(i),p_from_anchor_position(i));
428 
429     IF P_PA_DEBUG_MODE = 'Y' THEN
430          pa_fp_gen_amount_utils.fp_debug
431          (p_msg         => 'After inserting into temporary table',
432           p_module_name => l_module_name,
433           p_log_level   => 5);
434     END IF;
435     select count(*) into l_count
436     from pa_fp_period_mask_tmp
437     where  anchor_period_flag = 'Y';
438 
439     if l_count = 0 then
440         update pa_fp_period_mask_tmp set
441         anchor_period_flag = 'Y' where
442         from_anchor_position = 1;
443     end if;
444     SELECT    from_anchor_position,num_of_periods
445     INTO      l_from_anchor_position,l_first_no_of_pds
446     FROM      pa_fp_period_mask_tmp
447     WHERE     anchor_period_flag = 'Y';
448 
449     UPDATE  pa_fp_period_mask_tmp
450     SET from_anchor_position = from_anchor_position - l_from_anchor_position;
451 
452     UPDATE   pa_fp_period_mask_tmp
453     SET      from_anchor_start  = 0, from_anchor_end  = num_of_periods  - 1
454     WHERE    anchor_period_flag = 'Y';
455 
456     l_initial_flag := 'Y';
457     l_tmp := l_first_no_of_pds;
458     l_tmp_end := l_first_no_of_pds - 1;
459 
460     IF P_PA_DEBUG_MODE = 'Y' THEN
461          pa_fp_gen_amount_utils.fp_debug
462          (p_msg         => 'Before succeeding period',
463           p_module_name => l_module_name,
464           p_log_level   => 5);
465     END IF;
466 
467     FOR succ_pd_rec IN succ_pd LOOP
468         l_tmp_end := l_tmp_end + succ_pd_rec.num_of_periods;
469 
470         UPDATE pa_fp_period_mask_tmp
471         SET from_anchor_start  = l_tmp, from_anchor_end  = l_tmp_end
472         WHERE from_anchor_position = succ_pd_rec.from_anchor_position;
473 
474         l_tmp := l_tmp + succ_pd_rec.num_of_periods;
475     END LOOP;
476 
477     IF P_PA_DEBUG_MODE = 'Y' THEN
478          pa_fp_gen_amount_utils.fp_debug
479          (p_msg         => 'After succeeding period',
480           p_module_name => l_module_name,
481           p_log_level   => 5);
482     END IF;
483 
484     l_tmp := 0;
485     l_tmp_end := -1;
486 
487     IF P_PA_DEBUG_MODE = 'Y' THEN
488          pa_fp_gen_amount_utils.fp_debug
489          (p_msg         => 'Before preceeding period',
490           p_module_name => l_module_name,
491           p_log_level   => 5);
492     END IF;
493 
494     FOR prec_pd_rec IN prec_pd LOOP
495         l_tmp := l_tmp - prec_pd_rec.num_of_periods;
496 
497         UPDATE pa_fp_period_mask_tmp
498         SET from_anchor_start = l_tmp, from_anchor_end = l_tmp_end
499         WHERE from_anchor_position = prec_pd_rec.from_anchor_position;
500 
501         l_tmp_end := l_tmp_end -  prec_pd_rec.num_of_periods;
502 
503     END LOOP;
504 
505     IF P_PA_DEBUG_MODE = 'Y' THEN
506          pa_fp_gen_amount_utils.fp_debug
507          (p_msg         => 'After preceeding period',
508           p_module_name => l_module_name,
509           p_log_level   => 5);
510     END IF;
511 
512     BEGIN
513 
514       IF P_PA_DEBUG_MODE = 'Y' THEN
515          pa_fp_gen_amount_utils.fp_debug
516          (p_msg         => 'Before inserting additional records in the temporary table',
517           p_module_name => l_module_name,
518           p_log_level   => 5);
519       END IF;
520 
521 	 --Inserting additional records in the temp table to allow additional periods before/after the project periods
522 
523         INSERT INTO pa_fp_period_mask_tmp(num_of_periods, anchor_period_flag,
524                     from_anchor_start,from_anchor_end,from_anchor_position
525          )
526 	VALUES (0,'N',-99999,-99999,-99999);
527 
528 	INSERT INTO pa_fp_period_mask_tmp(num_of_periods,
529                     anchor_period_flag,from_anchor_start,from_anchor_end,from_anchor_position)
530 	VALUES (0,'N',99999,99999,99999 );
531 
532 
533 	IF P_PA_DEBUG_MODE = 'Y' THEN
534              pa_fp_gen_amount_utils.fp_debug
535                (p_msg         => 'After inserting additional records in the temporary table',
536                 p_module_name => l_module_name,
537                 p_log_level   => 5);
538         END IF;
539 
540 
541 
542         INSERT INTO pa_period_mask_details(PERIOD_MASK_ID,
543                                            num_of_periods,
544                                            anchor_period_flag,
545                                            from_anchor_start,
546                                            from_anchor_end,
547                                            from_anchor_position,
548                                            CREATION_DATE,
549 				           CREATED_BY,
550 	                                   LAST_UPDATE_LOGIN,
551                                            LAST_UPDATED_BY,
552                                            LAST_UPDATE_DATE )
553        (SELECT p_period_mask_id,
554                trunc(num_of_periods),
555                anchor_period_flag,
556                from_anchor_start,
557                from_anchor_end,
558                from_anchor_position,
559                sysdate,
560                FND_GLOBAL.USER_ID,
561                FND_GLOBAL.LOGIN_ID,
562                FND_GLOBAL.LOGIN_ID,
563                sysdate FROM pa_fp_period_mask_tmp );
564 
565 
566         IF (SQL%NOTFOUND) THEN
567             IF P_PA_DEBUG_MODE = 'Y' THEN
568       		PA_DEBUG.RESET_CURR_FUNCTION;
569     	    END IF;
570             RAISE no_data_found;
571         END IF;
572 
573     END;
574 
575     if p_commit_flag = 'Y' then
576 	COMMIT;
577     END IF;
578     IF P_PA_DEBUG_MODE = 'Y' THEN
579       	PA_DEBUG.RESET_CURR_FUNCTION;
580     END IF;
581 EXCEPTION
582     WHEN OTHERS THEN
583         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
584         x_msg_count     := 1;
585         x_msg_data      := SQLERRM;
586         FND_MSG_PUB.add_exc_msg( p_pkg_name         => 'PA_FP_PERIOD_MASKS_UTILS',
587                                  p_procedure_name   => 'MAINTAIN_PERIOD_MASK_DTLS');
588         IF P_PA_DEBUG_MODE = 'Y' THEN
589       	    PA_DEBUG.RESET_CURR_FUNCTION;
590     	END IF;
591         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
592 
593 END MAINTAIN_PERIOD_MASK_DTLS;
594 
595 --*************************
596 
597 PROCEDURE delete_period_mask( 	p_period_mask_id 		IN NUMBER,
598 			        p_record_version_number		IN NUMBER,
599 				p_init_msg_flag                 IN VARCHAR2,
600      				p_commit_flag                   IN VARCHAR2,
601 				x_return_status     		OUT NOCOPY VARCHAR2,
602                        		x_msg_count    			OUT NOCOPY NUMBER,
603                        		x_msg_data     			OUT NOCOPY VARCHAR2 )
604 IS
605     l_module_name VARCHAR2(100) := 'pa.plsql.PA_PERIOD_MASKS_PUB.delete_period_mask';
606 BEGIN
607     IF P_PA_DEBUG_MODE = 'Y' THEN
608    	pa_debug.set_curr_function( p_function   => 'delete_period_mask',
609                                     p_debug_mode => p_pa_debug_mode );
610     END IF;
611     x_return_status := FND_API.G_RET_STS_SUCCESS;
612     x_msg_count := 0;
613 
614     IF p_init_msg_flag = 'Y' THEN
615         FND_MSG_PUB.Initialize;
616     END IF;
617 
618     DELETE FROM pa_period_masks_b
619     WHERE period_mask_id = p_period_mask_id
620 	  and record_version_number = p_record_version_number;
621     IF (sql%notfound) THEN
622         x_return_status := FND_API.G_RET_STS_ERROR;
623     	PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
624                              p_msg_name            => 'PA_FP_PM_INVALID2');
625     	IF P_PA_DEBUG_MODE = 'Y' THEN
626       	    PA_DEBUG.RESET_CURR_FUNCTION;
627     	END IF;
628     	RETURN;
629     END IF;
630 
631     DELETE FROM pa_period_masks_tl
632     WHERE period_mask_id = p_period_mask_id;
633 
634     DELETE FROM pa_period_mask_details
635     WHERE period_mask_id = p_period_mask_id;
636 
637     IF (p_commit_flag = 'Y') THEN
638         COMMIT;
639     END IF;
640     IF P_PA_DEBUG_MODE = 'Y' THEN
641       	PA_DEBUG.RESET_CURR_FUNCTION;
642     END IF;
643 EXCEPTION
644     WHEN OTHERS THEN
645        	x_return_status := FND_API.G_RET_STS_ERROR;
646     	x_msg_count := 1;
647     	x_msg_data := to_char(sqlcode);
648         FND_MSG_PUB.add_exc_msg( p_pkg_name  => 'PA_FP_PERIOD_MASKS_PUB',
649                                  p_procedure_name   => 'delete_period_mask');
650         IF P_PA_DEBUG_MODE = 'Y' THEN
651       	    PA_DEBUG.RESET_CURR_FUNCTION;
652     	END IF;
653         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
654 END delete_period_mask;
655 
656 
657 END PA_PERIOD_MASKS_PUB;