1: PACKAGE BODY Pa_Proj_Accum_Main AS
2: /* $Header: PARESMNB.pls 120.7.12010000.4 2008/10/17 12:48:22 rballamu ship $ */
3:
4: x_run_id NUMBER;
5: x_status NUMBER;
171: -- IN-parm to the accum_cdls procedure:
172: -- x_cdl_line_type VARCHAR2
173: -- Also, added FND_PROFILE.value call to Initialization
174: -- procedure for conditional processing:
175: -- Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening
176: --
177: -- 01-JUL-04 sacgupta Added call to new procedure get_pa_period_info1
178: -- This procedure initilaize global variables whose
179: -- values are same for all the projects
186:
187: BEGIN
188:
189: x_old_stack := x_err_stack;
190: x_err_stack := x_err_stack ||'->pa_proj_accum_main.initialize';
191: x_err_code := 0;
192: x_err_stage := 'Summary Accumulation Initialization Procedure';
193:
194: -- This procedure initialize the variables for all projects
201: END IF;
202:
203: --- Getting the commit size--------------
204: IF Fnd_Profile.value('PA_NUM_EXP_ITEMS_PER_SET') IS NOT NULL THEN
205: Pa_Proj_Accum_Main.x_commit_size := Fnd_Profile.value('PA_NUM_EXP_ITEMS_PER_SET');
206: ELSE
207: Pa_Proj_Accum_Main.x_commit_size := 500;
208: END IF;
209:
203: --- Getting the commit size--------------
204: IF Fnd_Profile.value('PA_NUM_EXP_ITEMS_PER_SET') IS NOT NULL THEN
205: Pa_Proj_Accum_Main.x_commit_size := Fnd_Profile.value('PA_NUM_EXP_ITEMS_PER_SET');
206: ELSE
207: Pa_Proj_Accum_Main.x_commit_size := 500;
208: END IF;
209:
210: Pa_Accum_Utils.get_impl_option
211: (x_impl_option,
300: -- This profile is used to conditionally execute the accum_clds procedure
301: -- for incremental burden rows.
302:
303:
304: --Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening := NVL(FND_PROFILE.value('PA_ENHANCED_BURDENING'), 'N');
305: Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening := pa_utils2.IsEnhancedBurdeningEnabled; /*4278940 */
306:
307: IF ( P_DEBUG_MODE = 'Y' )
308: THEN
301: -- for incremental burden rows.
302:
303:
304: --Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening := NVL(FND_PROFILE.value('PA_ENHANCED_BURDENING'), 'N');
305: Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening := pa_utils2.IsEnhancedBurdeningEnabled; /*4278940 */
306:
307: IF ( P_DEBUG_MODE = 'Y' )
308: THEN
309: Pa_Debug.debug('proj_accum, Initialize: G_PA_Enhanced_Burdening - '|| Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening );
305: Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening := pa_utils2.IsEnhancedBurdeningEnabled; /*4278940 */
306:
307: IF ( P_DEBUG_MODE = 'Y' )
308: THEN
309: Pa_Debug.debug('proj_accum, Initialize: G_PA_Enhanced_Burdening - '|| Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening );
310: END IF;
311:
312:
313: -- --------------------------------------------------------------------------
336:
337: BEGIN
338:
339: x_old_stack := x_err_stack;
340: x_err_stack := x_err_stack ||'->pa_proj_accum_main.initialize_project';
341: x_err_code := 0;
342: x_err_stage :=
343: 'Summary Accumulation Initialization Procedure for Project_id= ' || x_project_id;
344:
450: -- If the project had been previously accumulated, then get the details
451: -- pertaining to the previously accumulated period
452:
453: If x_prev_accum_period is not Null Then
454: If PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 is null or
455: PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 <> x_prev_accum_period Then
456:
457: PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 := x_prev_accum_period;
458:
451: -- pertaining to the previously accumulated period
452:
453: If x_prev_accum_period is not Null Then
454: If PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 is null or
455: PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 <> x_prev_accum_period Then
456:
457: PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 := x_prev_accum_period;
458:
459: -- Initialize the global variables before use for each project
453: If x_prev_accum_period is not Null Then
454: If PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 is null or
455: PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 <> x_prev_accum_period Then
456:
457: PA_PROJ_ACCUM_MAIN.x_prev_accum_period1 := x_prev_accum_period;
458:
459: -- Initialize the global variables before use for each project
460: x_prev_accum_year := 0;
461:
499:
500: BEGIN
501:
502: x_old_stack := x_err_stack;
503: x_err_stack := x_err_stack ||'->pa_proj_accum_main.check_reporting_period';
504: x_err_code := 0;
505: x_err_stage := 'Checking If Reporting Period Moved Backwards in Time';
506:
507: -- This procedure checks if the reporting period was moved
719: IF x_action_flag = 'CL' THEN
720: -- Check for Closed Projects (CL)
721:
722: IF (x_closed_date IS NOT NULL)
723: AND ( Pa_Proj_Accum_Main.x_period_yr_start_date IS NOT NULL)
724: AND ( TRUNC(x_closed_date) <
725: TRUNC(Pa_Proj_Accum_Main.x_period_yr_start_date)) THEN
726: x_ret_flag := 'Y' ;
727:
721:
722: IF (x_closed_date IS NOT NULL)
723: AND ( Pa_Proj_Accum_Main.x_period_yr_start_date IS NOT NULL)
724: AND ( TRUNC(x_closed_date) <
725: TRUNC(Pa_Proj_Accum_Main.x_period_yr_start_date)) THEN
726: x_ret_flag := 'Y' ;
727:
728: END IF ;
729:
945:
946: BEGIN
947:
948: x_old_stack := x_err_stack;
949: x_err_stack := x_err_stack ||'->pa_proj_accum_main.Proj_Accum';
950: x_err_code := 0;
951:
952: x_summ_process := 'UP';
953: x_err_stage := 'Project Accumulation Process';
1005: -- all the parameters are validated now
1006:
1007: -- Call the Initialization procedure
1008:
1009: Pa_Proj_Accum_Main.initialize;
1010:
1011: IF x_impl_option = 'PA' THEN
1012: l_current_start_date := x_current_pa_start_date ;
1013: l_current_end_date := x_current_pa_end_date ;
1046: AND EXISTS (SELECT 'x'
1047: FROM pa_cost_distribution_lines_all cdl
1048: WHERE cdl.project_id = proj.project_id
1049: AND (cdl.line_type = 'R' OR
1050: ( cdl.line_type = 'I' and Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening = 'Y')
1051: ) /*4278940 */
1052: AND cdl.resource_accumulated_flag='N')
1053: UNION ALL
1054: SELECT proj.project_id, x_request_id request_id,
1114: FROM pa_projects_for_accum_v proj
1115: WHERE proj.segment1
1116: BETWEEN l_project_num_from AND l_project_num_to
1117: AND proj.project_type = NVL(x_project_type, project_type) --for bug 2543021
1118: AND Pa_Proj_Accum_Main.check_period_flags
1119: (proj.project_id, x_impl_option, l_current_end_date, 'PR',
1120: proj.closed_date, l_current_start_date) = 'Y'
1121: UNION ALL
1122: SELECT proj.project_id, x_request_id request_id,
1124: FROM pa_projects_for_accum_v proj
1125: WHERE proj.segment1
1126: BETWEEN l_project_num_from AND l_project_num_to
1127: AND proj.project_type = NVL(x_project_type, project_type) --for bug 2543021
1128: AND Pa_Proj_Accum_Main.check_period_flags
1129: (proj.project_id, x_impl_option, l_current_end_date, 'BK',
1130: proj.closed_date, l_current_start_date) = 'Y'
1131: UNION ALL
1132: SELECT proj.project_id, x_request_id request_id,
1134: FROM pa_projects_for_accum_v proj
1135: WHERE proj.segment1
1136: BETWEEN l_project_num_from AND l_project_num_to
1137: AND proj.project_type = NVL(x_project_type, project_type) --for bug 2543021
1138: AND Pa_Proj_Accum_Main.check_period_flags
1139: (proj.project_id, x_impl_option, l_current_end_date, 'CL',
1140: proj.closed_date, l_current_start_date) = 'Y'
1141: UNION ALL
1142: SELECT proj.project_id, x_request_id request_id,
1144: FROM pa_projects_for_accum_v proj
1145: WHERE proj.segment1
1146: BETWEEN l_project_num_from AND l_project_num_to
1147: AND proj.project_type = NVL(x_project_type, project_type) --for bug 2543021
1148: AND Pa_Proj_Accum_Main.check_period_flags
1149: (proj.project_id, x_impl_option, l_current_end_date, 'PT',
1150: proj.closed_date, l_current_start_date) = 'Y'
1151: UNION ALL
1152: SELECT proj.project_id, x_request_id request_id, 'TX' action_flag,
1222: BEGIN
1223:
1224: FOR filter_proj IN not_valid_proj LOOP
1225:
1226: Pa_Proj_Accum_Main.lock_proj_level_header_record
1227: (filter_proj.project_id);
1228:
1229: IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
1230: Pa_Debug.debug('proj_accum: ' || '**** PLEASE REFRESH THE PROJECT '
1377: Pa_Debug.debug('proj_accum: ' || 'Refreshing new resource lists assigned '||
1378: 'to the project, If any');
1379: END IF;
1380:
1381: IF Pa_Proj_Accum_Main.action_exists
1382: (x_action_flag => 'RL',
1383: x_actions_in => x_actions_in,
1384: x_actions_cnt => x_actions_cnt) = 'Y' THEN
1385:
1464: x_err_stage,
1465: x_err_code) ;
1466:
1467: IF (x_actual_cost_flag = 'Y' AND
1468: (Pa_Proj_Accum_Main.action_exists
1469: (x_action_flag => 'CS',
1470: x_actions_in => x_actions_in,
1471: x_actions_cnt => x_actions_cnt) = 'Y')) THEN
1472:
1486: x_err_stage,
1487: x_err_code) ;
1488:
1489: -- 05-AUG-2003, jwhite: For patchset 'L' Reburdening Enhancement
1490: IF (Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening = 'Y')
1491: THEN
1492:
1493: IF ( P_DEBUG_MODE = 'Y' )
1494: THEN
1515:
1516: END IF ;
1517:
1518: IF (x_revenue_flag = 'Y' AND
1519: (Pa_Proj_Accum_Main.action_exists
1520: (x_action_flag => 'RV',
1521: x_actions_in => x_actions_in,
1522: x_actions_cnt => x_actions_cnt) = 'Y')) THEN
1523:
1538:
1539: END IF ;
1540:
1541: IF (x_commitments_flag = 'Y' AND
1542: (Pa_Proj_Accum_Main.action_exists
1543: (x_action_flag => 'CM',
1544: x_actions_in => x_actions_in,
1545: x_actions_cnt => x_actions_cnt) = 'Y')) THEN
1546:
1600: END IF;
1601:
1602: END IF;
1603:
1604: IF Pa_Proj_Accum_Main.action_exists
1605: (x_action_flag => 'PR',
1606: x_actions_in => x_actions_in,
1607: x_actions_cnt => x_actions_cnt) = 'Y' THEN
1608:
1646: -- no new commitments to be processed
1647:
1648: -- IF (x_commitments_flag <> 'Y')
1649: -- OR (x_commitments_flag = 'Y' AND
1650: -- (pa_proj_accum_main.action_exists
1651: -- (x_action_flag => 'CM',
1652: -- x_actions_in => x_actions_in,
1653: -- x_actions_cnt => x_actions_cnt) <> 'Y' AND
1654: -- pa_proj_accum_main.action_exists
1650: -- (pa_proj_accum_main.action_exists
1651: -- (x_action_flag => 'CM',
1652: -- x_actions_in => x_actions_in,
1653: -- x_actions_cnt => x_actions_cnt) <> 'Y' AND
1654: -- pa_proj_accum_main.action_exists
1655: -- (x_action_flag => 'TM',
1656: -- x_actions_in => x_actions_in,
1657: -- x_actions_cnt => x_actions_cnt) <> 'Y')) THEN
1658:
1688: tmp_bud_type_code := NULL ;
1689:
1690: END IF ;
1691:
1692: IF Pa_Proj_Accum_Main.action_exists
1693: (x_action_flag => 'PR',
1694: x_actions_in => x_actions_in,
1695: x_actions_cnt => x_actions_cnt) = 'Y'
1696: OR (x_budgets_flag = 'Y' AND
1693: (x_action_flag => 'PR',
1694: x_actions_in => x_actions_in,
1695: x_actions_cnt => x_actions_cnt) = 'Y'
1696: OR (x_budgets_flag = 'Y' AND
1697: Pa_Proj_Accum_Main.action_exists
1698: (x_action_flag => 'BD',
1699: x_actions_in => x_actions_in,
1700: x_actions_cnt => x_actions_cnt) = 'Y') THEN
1701:
1751: x_err_stack,
1752: x_err_stage,
1753: x_err_code);
1754:
1755: IF Pa_Proj_Accum_Main.action_exists
1756: (x_action_flag => 'CS',
1757: x_actions_in => x_actions_in,
1758: x_actions_cnt => x_actions_cnt) = 'Y'
1759: OR Pa_Proj_Accum_Main.action_exists
1755: IF Pa_Proj_Accum_Main.action_exists
1756: (x_action_flag => 'CS',
1757: x_actions_in => x_actions_in,
1758: x_actions_cnt => x_actions_cnt) = 'Y'
1759: OR Pa_Proj_Accum_Main.action_exists
1760: (x_action_flag => 'RV',
1761: x_actions_in => x_actions_in,
1762: x_actions_cnt => x_actions_cnt) = 'Y'
1763: OR Pa_Proj_Accum_Main.action_exists
1759: OR Pa_Proj_Accum_Main.action_exists
1760: (x_action_flag => 'RV',
1761: x_actions_in => x_actions_in,
1762: x_actions_cnt => x_actions_cnt) = 'Y'
1763: OR Pa_Proj_Accum_Main.action_exists
1764: (x_action_flag => 'CM',
1765: x_actions_in => x_actions_in,
1766: x_actions_cnt => x_actions_cnt) = 'Y'
1767: OR Pa_Proj_Accum_Main.action_exists
1763: OR Pa_Proj_Accum_Main.action_exists
1764: (x_action_flag => 'CM',
1765: x_actions_in => x_actions_in,
1766: x_actions_cnt => x_actions_cnt) = 'Y'
1767: OR Pa_Proj_Accum_Main.action_exists
1768: (x_action_flag => 'TM',
1769: x_actions_in => x_actions_in,
1770: x_actions_cnt => x_actions_cnt) = 'Y'
1771: OR Pa_Proj_Accum_Main.action_exists
1767: OR Pa_Proj_Accum_Main.action_exists
1768: (x_action_flag => 'TM',
1769: x_actions_in => x_actions_in,
1770: x_actions_cnt => x_actions_cnt) = 'Y'
1771: OR Pa_Proj_Accum_Main.action_exists
1772: (x_action_flag => 'TX',
1773: x_actions_in => x_actions_in,
1774: x_actions_cnt => x_actions_cnt) = 'Y' THEN
1775:
1785: IF x_log_summ_mode = 'Y' THEN
1786: x_MapTxnEnd := SYSDATE; --End time for Map Txns
1787: END IF;
1788:
1789: -- IF (pa_proj_accum_main.action_exists
1790: -- (x_action_flag => 'CM',
1791: -- x_actions_in => x_actions_in,
1792: -- x_actions_cnt => x_actions_cnt) = 'Y'
1793: -- AND x_commitments_flag = 'Y')
1790: -- (x_action_flag => 'CM',
1791: -- x_actions_in => x_actions_in,
1792: -- x_actions_cnt => x_actions_cnt) = 'Y'
1793: -- AND x_commitments_flag = 'Y')
1794: -- OR pa_proj_accum_main.action_exists
1795: -- (x_action_flag => 'PR',
1796: -- x_actions_in => x_actions_in,
1797: -- x_actions_cnt => x_actions_cnt) = 'Y'
1798: -- OR (pa_proj_accum_main.action_exists
1794: -- OR pa_proj_accum_main.action_exists
1795: -- (x_action_flag => 'PR',
1796: -- x_actions_in => x_actions_in,
1797: -- x_actions_cnt => x_actions_cnt) = 'Y'
1798: -- OR (pa_proj_accum_main.action_exists
1799: -- (x_action_flag => 'TM',
1800: -- x_actions_in => x_actions_in,
1801: -- x_actions_cnt => x_actions_cnt) = 'Y'
1802: -- AND x_commitments_flag = 'Y')
1827: -- END IF;
1828: --
1829: -- END IF ;
1830:
1831: IF (Pa_Proj_Accum_Main.action_exists
1832: (x_action_flag => 'CS',
1833: x_actions_in => x_actions_in,
1834: x_actions_cnt => x_actions_cnt) = 'Y'
1835: AND x_actual_cost_flag = 'Y')
1832: (x_action_flag => 'CS',
1833: x_actions_in => x_actions_in,
1834: x_actions_cnt => x_actions_cnt) = 'Y'
1835: AND x_actual_cost_flag = 'Y')
1836: OR (Pa_Proj_Accum_Main.action_exists
1837: (x_action_flag => 'RV',
1838: x_actions_in => x_actions_in,
1839: x_actions_cnt => x_actions_cnt) = 'Y'
1840: AND x_revenue_flag = 'Y')
1837: (x_action_flag => 'RV',
1838: x_actions_in => x_actions_in,
1839: x_actions_cnt => x_actions_cnt) = 'Y'
1840: AND x_revenue_flag = 'Y')
1841: OR Pa_Proj_Accum_Main.action_exists
1842: (x_action_flag => 'TX',
1843: x_actions_in => x_actions_in,
1844: x_actions_cnt => x_actions_cnt) = 'Y'
1845: OR (Pa_Proj_Accum_Main.action_exists
1841: OR Pa_Proj_Accum_Main.action_exists
1842: (x_action_flag => 'TX',
1843: x_actions_in => x_actions_in,
1844: x_actions_cnt => x_actions_cnt) = 'Y'
1845: OR (Pa_Proj_Accum_Main.action_exists
1846: (x_action_flag => 'CM',
1847: x_actions_in => x_actions_in,
1848: x_actions_cnt => x_actions_cnt) = 'Y'
1849: AND x_commitments_flag = 'Y')
1846: (x_action_flag => 'CM',
1847: x_actions_in => x_actions_in,
1848: x_actions_cnt => x_actions_cnt) = 'Y'
1849: AND x_commitments_flag = 'Y')
1850: OR (Pa_Proj_Accum_Main.action_exists
1851: (x_action_flag => 'TM',
1852: x_actions_in => x_actions_in,
1853: x_actions_cnt => x_actions_cnt) = 'Y'
1854: AND x_commitments_flag = 'Y') THEN
2130:
2131: BEGIN
2132:
2133: x_old_stack := x_err_stack;
2134: x_err_stack := x_err_stack ||'->pa_proj_accum_main.proj_refresh';
2135: x_err_code := 0;
2136:
2137: x_summ_process := 'RF';
2138: x_err_stage := 'Project refresh Process';
2175: retcode :=0;
2176:
2177: -- Call the Initialization procedure
2178:
2179: Pa_Proj_Accum_Main.initialize;
2180: -- Added below for Bug# 7175975
2181: populate_cmt_tmp_table(p_project_num_from => x_project_num_from,
2182: p_project_num_to => x_project_num_to,
2183: p_system_linkage_function => NULL,
2199:
2200: -- Initialize the Global variable in the loop for each project
2201: -- No need to check if the accumulation period type has been changed
2202: -- because the project is being refreshed
2203: Pa_Proj_Accum_Main.initialize_project(projrec.project_id,
2204: l_accum_period_type_changed);
2205:
2206: -- Try to Lock the project level record
2207: IF Pa_Debug.acquire_user_lock('PA_SUMM:'||TO_CHAR(projrec.project_id)) <> 0 THEN
2322: x_err_stage,
2323: x_err_code);
2324:
2325: -- 05-AUG-2003, jwhite: For patchset 'L' Reburdening Enhancement
2326: IF (Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening = 'Y')
2327: THEN
2328:
2329: IF ( P_DEBUG_MODE = 'Y' )
2330: THEN
2790: x_err_code := 0;
2791: x_old_stack := x_err_stack;
2792:
2793: x_summ_process := 'RL';
2794: x_err_stack := x_err_stack || '->pa_proj_accum_main.ref_rl_accum';
2795: x_err_stage := 'Refresh Resource List accumulation Process';
2796:
2797: IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
2798: Pa_Debug.debug('ref_rl_accum: ' || x_err_stack);
2809: retcode :=0;
2810:
2811: -- Call the Initialization procedure
2812:
2813: Pa_Proj_Accum_Main.initialize;
2814:
2815: FOR projrec IN selprjs LOOP
2816:
2817: BEGIN
2838: || TO_CHAR(projrec.project_id));
2839: END IF;
2840:
2841: -- Initialize the Global variable in the loop for each project
2842: Pa_Proj_Accum_Main.initialize_project(projrec.project_id,
2843: l_accum_period_type_changed);
2844: IF x_impl_option = 'PA' THEN
2845: l_current_start_date := x_current_pa_start_date;
2846: l_current_end_date := x_current_pa_end_date;
2852: --
2853: -- Check to see if the accumulation period type has changed. If so, the
2854: -- project must be refreshed. Bug #572031
2855: --
2856: IF (Pa_Proj_Accum_Main.check_period_flags(projrec.project_id,x_impl_option,l_current_end_date,
2857: 'PT',projrec.closed_date,l_current_start_date)='Y') THEN
2858: IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
2859: Pa_Debug.debug('ref_rl_accum: ' || '*********************************************************************************',Pa_Debug.DEBUG_LEVEL_EXCEPTION);
2860: Pa_Debug.debug('ref_rl_accum: ' || '*****THE ACCUMULATION PERIOD TYPE HAS CHANGED SINCE THE LAST TIME PROJECT ' || projrec.segment1 || ' WAS ACCUMULATED '|| '******',
3147: x_err_stage := 'Build Transaction accumulation Process';
3148:
3149: x_summ_process := 'RT';
3150: x_old_stack := x_err_stack;
3151: x_err_stack := x_err_stack || '->pa_proj_accum_main.build_txn_accum';
3152:
3153: x_mode := 'F';
3154:
3155: IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
3176: -- all the parameters are validated now
3177:
3178: -- Call the Initialization procedure
3179:
3180: Pa_Proj_Accum_Main.initialize;
3181:
3182: -- Get the start pa_date and end pa_date for processing
3183:
3184: IF ( x_start_pa_period IS NOT NULL ) THEN
3236:
3237: -- Initialize the Global variable in the loop for each project
3238: -- No need to check if the accumulation period type has changed because
3239: -- the project is being refreshed
3240: Pa_Proj_Accum_Main.initialize_project(projrec.project_id, l_accum_period_type_changed);
3241:
3242: -- Get the accum configuration
3243:
3244: Pa_Txn_Accums.get_accum_configurations
3324: x_err_code);
3325:
3326:
3327: -- 05-AUG-2003, jwhite: For patchset 'L' Reburdening Enhancement
3328: IF (Pa_Proj_Accum_Main.G_PA_Enhanced_Burdening = 'Y')
3329: THEN
3330:
3331:
3332: IF ( P_DEBUG_MODE = 'Y' )
3503: dummy_project_id NUMBER;
3504: BEGIN
3505: x_old_stack := x_err_stack;
3506: x_err_stack :=
3507: x_err_stack ||'->pa_proj_accum_main.lock_proj_level_header_record';
3508: x_err_code := 0;
3509: x_err_stage :=
3510: 'locking the project level header record for project_id= '||x_project_id;
3511:
3560: FUNCTION Get_curr_end_date
3561: RETURN DATE
3562: IS
3563: BEGIN
3564: RETURN Pa_Proj_Accum_Main.x_current_end_date;
3565: EXCEPTION
3566: WHEN OTHERS THEN
3567: RAISE;
3568: END Get_curr_end_date;
4208: END populate_cmt_tmp_table;
4209:
4210: /* Procedure added for bug#6408874 */
4211:
4212: END Pa_Proj_Accum_Main;