372: l_user_id NUMBER := 0;
373: l_module_name VARCHAR2(80);
374:
375: --
376: -- Added the variable l_editable_flag for call to procedure pa_fin_plan_utils.Check_if_plan_type_editable
377:
378: l_editable_flag VARCHAR2(1);
379:
380: l_copy_conv_attr boolean;
1238: IF (p_budget_type_code = PA_FP_CONSTANTS_PKG.G_BUDGET_TYPE_CODE_AC) THEN
1239:
1240: -- Call the utility function that gives the id of the approved cost plan type, if exists,
1241: -- that is added to the project
1242: pa_fin_plan_utils.Get_Appr_Cost_Plan_Type_Info(
1243: p_project_id => px_pa_project_id
1244: ,x_plan_type_id => l_approved_fin_plan_type_id
1245: ,x_return_status => x_return_status
1246: ,x_msg_count => x_msg_count
1280: IF (p_budget_type_code = PA_FP_CONSTANTS_PKG.G_BUDGET_TYPE_CODE_AR) THEN
1281:
1282: -- Call the utility function that gives the id of the approved revenue plan type, if exists,
1283: -- that is added to the project
1284: pa_fin_plan_utils.Get_Appr_Rev_Plan_Type_Info(
1285: p_project_id => px_pa_project_id
1286: ,x_plan_type_id => l_approved_fin_plan_type_id
1287: ,x_return_status => x_return_status
1288: ,x_msg_count => x_msg_count
1456: --dbms_output.put_line('About to get ver type');
1457:
1458: -- Derive the version type. An error will be thrown by this api if preference code is
1459: -- COST_AND_REV_SEP and version type is not passed
1460: pa_fin_plan_utils.get_version_type
1461: ( p_project_id => px_pa_project_id
1462: ,p_fin_plan_type_id => px_fin_plan_type_id
1463: ,px_version_type => px_version_type
1464: ,x_return_status => x_return_status
1479:
1480: IF l_autobaseline_flag = 'N' THEN
1481:
1482: --
1483: --If validate_header_info is called for create_budget_context call pa_fin_plan_utils.allow_edit_after_baseline_flag.
1484:
1485: pa_fin_plan_utils.Check_if_plan_type_editable (
1486: P_project_id => px_pa_project_id
1487: ,P_fin_plan_type_id => px_fin_plan_type_id
1481:
1482: --
1483: --If validate_header_info is called for create_budget_context call pa_fin_plan_utils.allow_edit_after_baseline_flag.
1484:
1485: pa_fin_plan_utils.Check_if_plan_type_editable (
1486: P_project_id => px_pa_project_id
1487: ,P_fin_plan_type_id => px_fin_plan_type_id
1488: ,P_version_type => px_version_type
1489: ,X_editable_flag => l_editable_flag
1667:
1668: --
1669: -- Added a check to filter out budgets where fin_plan_level_code = 'M'
1670:
1671: IF ((pa_fin_plan_utils.get_lookup_value(l_planning_level_lookup ,px_fin_plan_level_code) IS NULL)
1672: OR (px_fin_plan_level_code = 'M'))
1673: THEN
1674: IF l_debug_mode = 'Y' THEN
1675: pa_debug.g_err_stage := 'Planning level passed is '|| px_fin_plan_level_code ;
1835:
1836: --
1837: --Added the extra condition to check for time phasing as 'R'(Date Range) as date range time phasing is not supported in FP M.
1838:
1839: IF ((pa_fin_plan_utils.get_lookup_value( l_time_phasing_lookup,px_time_phased_code) IS NULL) OR (px_time_phased_code = 'R'))
1840: THEN
1841:
1842: IF l_debug_mode = 'Y' THEN
1843: pa_debug.g_err_stage := 'Time Phased Code passed is '|| px_time_phased_code ;
1936: p_msg_name => 'PA_FP_NO_PERIOD_MASK');
1937:
1938: x_return_status := FND_API.G_RET_STS_ERROR;
1939: END;
1940: END IF; -- IF pa_fin_plan_utils.get_lookup_value
1941:
1942: END IF; -- IF(px_time_phased_code IS NULL) THEN
1943: --dbms_output.put_line('About to start mc');
1944:
1952: END IF;
1953:
1954:
1955: -- Get the project and project functional currencies.
1956: pa_fin_plan_utils.Get_Project_Curr_Attributes
1957: ( p_project_id => px_pa_project_id
1958: ,x_multi_currency_billing_flag => l_multi_currency_billing_flag
1959: ,x_project_currency_code => l_project_currency_code
1960: ,x_projfunc_currency_code => l_projfunc_currency_code
1968:
1969: IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1970:
1971: IF l_debug_mode = 'Y' THEN
1972: pa_debug.g_err_stage:= 'pa_fin_plan_utils.Get_Project_Curr_Attributes errored out for project' ||px_pa_project_id;
1973: pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1974:
1975: END IF;
1976: RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2230:
2231: ELSE
2232: --dbms_output.put_line('The value of l_conv_attrs_to_be_validated is ' ||l_conv_attrs_to_be_validated);
2233:
2234: pa_fin_plan_utils.validate_currency_attributes
2235: (px_project_cost_rate_type =>px_project_cost_rate_type
2236: ,px_project_cost_rate_date_typ =>px_project_cost_rate_date_typ
2237: ,px_project_cost_rate_date =>px_project_cost_rate_date
2238: ,px_project_cost_exchange_rate =>l_project_cost_exchange_rate
2485: l_any_error_occurred_flag := 'Y';
2486:
2487: IF l_finplan_CW_ver_rec.plan_processing_code IN ('XLUE','XLUP') THEN
2488:
2489: pa_fin_plan_utils.return_and_vldt_plan_prc_code
2490: (p_plan_processing_code => l_finplan_CW_ver_rec.plan_processing_code
2491: ,x_final_plan_prc_code => l_finplan_CW_ver_rec.plan_processing_code
2492: ,x_targ_request_id => l_targ_request_id
2493: ,x_return_status => x_return_status
2497: IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2498: x_return_status:=FND_API.G_RET_STS_ERROR;
2499:
2500: IF l_debug_mode = 'Y' THEN
2501: pa_debug.g_err_stage:= 'pa_fin_plan_utils.return_and_vldt_plan_prc_code returned error';
2502: pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2503: END IF;
2504: l_any_error_occurred_flag := 'Y';
2505: END IF;
3394:
3395:
3396: -- Derive the version type. An error will be thrown by this api if preference code is
3397: -- COST_AND_REV_SEP and version type is not passed
3398: pa_fin_plan_utils.get_version_type
3399: ( p_project_id => px_pa_project_id
3400: ,p_fin_plan_type_id => px_fin_plan_type_id
3401: ,px_version_type => px_version_type
3402: ,x_return_status => x_return_status
3459:
3460: ELSE --p_budget_version_number IS NULL
3461:
3462: -- Fetch the current working version for the project, finplan type and verion type
3463: PA_FIN_PLAN_UTILS.Get_Curr_Working_Version_Info(
3464: p_project_id => px_pa_project_id
3465: ,p_fin_plan_type_id => px_fin_plan_type_id
3466: ,p_version_type => px_version_type
3467: ,x_fp_options_id => l_dummy
3503: RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3504:
3505: END IF;--x_budget_version_id IS NULL
3506:
3507: --Calling PA_FIN_PLAN_UTILS.validate_editable_bv API to check
3508: --if the budget version is locked by another user/process
3509: --or Edit after initial baseline setup is true and baseline
3510: --versions exist.
3511:
3508: --if the budget version is locked by another user/process
3509: --or Edit after initial baseline setup is true and baseline
3510: --versions exist.
3511:
3512: pa_fin_plan_utils.validate_editable_bv
3513: (p_budget_version_id => x_budget_version_id,
3514: p_user_id => FND_GLOBAL.user_id,
3515: p_context => PA_FP_CONSTANTS_PKG.G_AMG_API,
3516: x_locked_by_person_id => l_locked_by_persion_id,
3538: ,x_resource_list_id
3539: ,x_time_phased_code;
3540:
3541: --Control will never really enter this IF block since this check is
3542: --already made inside pa_fin_plan_utils.get_version_type before
3543: --control reaches here
3544: IF (l_proj_fp_options_csr%NOTFOUND) THEN
3545: IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3546: PA_UTILS.ADD_MESSAGE
3607: END IF;--p_change_reason_code IS NOT NULL
3608:
3609:
3610: -- Call the api that performs the autobaseline checks
3611: PA_FIN_PLAN_UTILS.PERFORM_AUTOBASLINE_CHECKS (
3612: p_budget_version_id => x_budget_version_id
3613: ,x_result => l_result
3614: ,x_return_status => x_return_status
3615: ,x_msg_count => x_msg_count
3640: RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3641: END IF;
3642:
3643: --Check if the Budget version has any processing errors.
3644: PA_FIN_PLAN_UTILS.return_and_vldt_plan_prc_code
3645: (p_add_msg_to_stack => 'Y'
3646: ,p_calling_context => 'BUDGET'
3647: ,p_budget_version_id => x_budget_version_id
3648: ,x_final_plan_prc_code => l_plan_processing_code
3683: ( px_cost_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3684: ( px_burden_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) ) THEN
3685:
3686: /*Get the existing plan amount entry flags for the plan version*/
3687: l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(x_budget_version_id);
3688:
3689: PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
3690: P_AMOUNT_SET_ID => l_amount_set_id
3691: ,X_RAW_COST_FLAG => lx_raw_cost_flag
3685:
3686: /*Get the existing plan amount entry flags for the plan version*/
3687: l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(x_budget_version_id);
3688:
3689: PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
3690: P_AMOUNT_SET_ID => l_amount_set_id
3691: ,X_RAW_COST_FLAG => lx_raw_cost_flag
3692: ,X_BURDENED_FLAG => lx_burdened_cost_flag
3693: ,X_REVENUE_FLAG => lx_revenue_flag
6320: CLOSE l_plan_type_txn_curr_csr;
6321: END IF;
6322:
6323: --Get the project and project functional currencies so that they can be used later
6324: pa_fin_plan_utils.Get_Project_Curr_Attributes
6325: ( p_project_id => p_pa_project_id
6326: ,x_multi_currency_billing_flag => l_multi_currency_billing_flag
6327: ,x_project_currency_code => l_project_currency_code
6328: ,x_projfunc_currency_code => l_projfunc_currency_code
6336:
6337: IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6338:
6339: IF l_debug_mode = 'Y' THEN
6340: pa_debug.g_err_stage:= 'pa_fin_plan_utils.Get_Project_Curr_Attributes errored out for project' ||p_pa_project_id;
6341: pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
6342:
6343: END IF;
6344: RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6369: l_period_time_phased_code := p_time_phased_code; --Use the i/p parameter to get this value.
6370: --if p_time_phased_code was passed as null we try to derive the time phase code.
6371: IF(l_period_time_phased_code is null)
6372: THEN
6373: l_period_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(p_version_info_rec.x_budget_version_id);
6374: END IF;
6375:
6376:
6377: IF px_budget_lines_in.exists(px_budget_lines_in.first) THEN
6792: IF ( NOT(l_period_plan_start_date_tbl.exists(to_char(p_planning_start_date_tbl(i)))
6793: AND l_period_plan_end_date_tbl.exists(to_char(p_planning_end_date_tbl(i)))))
6794: THEN
6795: --For periodic case get the start and end dates.
6796: l_period_plan_start_date := PA_FIN_PLAN_UTILS.get_period_start_date(p_planning_start_date_tbl(i),l_period_time_phased_code);
6797: l_period_plan_end_date := PA_FIN_PLAN_UTILS.get_period_end_date (p_planning_end_date_tbl(i) , l_period_time_phased_code);
6798: l_period_plan_start_date_tbl(to_char(p_planning_start_date_tbl(i))) := l_period_plan_start_date;
6799: l_period_plan_end_date_tbl(to_char(p_planning_end_date_tbl(i))) := l_period_plan_end_date;
6800: ELSE
6793: AND l_period_plan_end_date_tbl.exists(to_char(p_planning_end_date_tbl(i)))))
6794: THEN
6795: --For periodic case get the start and end dates.
6796: l_period_plan_start_date := PA_FIN_PLAN_UTILS.get_period_start_date(p_planning_start_date_tbl(i),l_period_time_phased_code);
6797: l_period_plan_end_date := PA_FIN_PLAN_UTILS.get_period_end_date (p_planning_end_date_tbl(i) , l_period_time_phased_code);
6798: l_period_plan_start_date_tbl(to_char(p_planning_start_date_tbl(i))) := l_period_plan_start_date;
6799: l_period_plan_end_date_tbl(to_char(p_planning_end_date_tbl(i))) := l_period_plan_end_date;
6800: ELSE
6801: l_period_plan_start_date := l_period_plan_start_date_tbl(to_char(p_planning_start_date_tbl(i)));
7851: IF ( NOT(l_period_start_date_tbl.exists(to_char(l_plan_start_date))
7852: AND l_period_end_date_tbl.exists(to_char(l_plan_end_date))))
7853: THEN
7854: --For periodic case get the start and end dates.
7855: l_period_start_date := PA_FIN_PLAN_UTILS.get_period_start_date(l_plan_start_date,l_period_time_phased_code);
7856: l_period_end_date := PA_FIN_PLAN_UTILS.get_period_end_date (l_plan_end_date , l_period_time_phased_code);
7857: l_period_start_date_tbl(to_char(l_plan_start_date)) := l_period_start_date;
7858: l_period_end_date_tbl(to_char(l_plan_end_date)) := l_period_end_date;
7859: ELSE
7852: AND l_period_end_date_tbl.exists(to_char(l_plan_end_date))))
7853: THEN
7854: --For periodic case get the start and end dates.
7855: l_period_start_date := PA_FIN_PLAN_UTILS.get_period_start_date(l_plan_start_date,l_period_time_phased_code);
7856: l_period_end_date := PA_FIN_PLAN_UTILS.get_period_end_date (l_plan_end_date , l_period_time_phased_code);
7857: l_period_start_date_tbl(to_char(l_plan_start_date)) := l_period_start_date;
7858: l_period_end_date_tbl(to_char(l_plan_end_date)) := l_period_end_date;
7859: ELSE
7860: l_period_start_date := l_period_start_date_tbl(to_char(l_plan_start_date));
8250:
8251: --Validate the conversion attributes passed
8252: IF p_calling_context = 'WEBADI' AND
8253: l_wa_val_conv_attr_flag='Y' THEN
8254: pa_fin_plan_utils.validate_currency_attributes
8255: ( px_project_cost_rate_type => l_wa_project_cost_rate_typ
8256: ,px_project_cost_rate_date_typ => l_wa_project_cost_rate_dt_typ
8257: ,px_project_cost_rate_date => l_wa_project_cost_rate_date
8258: ,px_project_cost_exchange_rate => l_wa_project_cost_exc_rate
8275: ,x_return_status => x_return_status
8276: ,x_msg_count => x_msg_count
8277: ,x_msg_data => x_msg_data);
8278: ELSE
8279: pa_fin_plan_utils.validate_currency_attributes
8280: ( px_project_cost_rate_type =>px_budget_lines_in(i).project_cost_rate_type
8281: ,px_project_cost_rate_date_typ =>px_budget_lines_in(i).project_cost_rate_date_type
8282: ,px_project_cost_rate_date =>px_budget_lines_in(i).project_cost_rate_date
8283: ,px_project_cost_exchange_rate =>px_budget_lines_in(i).project_cost_exchange_rate
8307: x_budget_lines_out(i).return_status := x_return_status;
8308:
8309: ELSIF l_wa_val_conv_attr_flag='Y' THEN
8310: l_webadi_err_code_tbl.extend(1);
8311: l_webadi_err_code_tbl(l_webadi_err_code_tbl.COUNT) := l_wa_error_code_lookup(PA_FIN_PLAN_UTILS.g_first_error_code);
8312: l_webadi_err_task_id_tbl.extend(1);
8313: l_webadi_err_task_id_tbl(l_webadi_err_task_id_tbl.COUNT) := px_budget_lines_in(i).pa_task_id;
8314: l_webadi_err_rlm_id_tbl.extend(1);
8315: l_webadi_err_rlm_id_tbl(l_webadi_err_rlm_id_tbl.COUNT) := px_budget_lines_in(i).resource_list_member_id;
8577: p_debug_mode => l_debug_mode );
8578: END IF;
8579:
8580:
8581: PA_FIN_PLAN_UTILS2.Get_AMG_BdgtLineRejctions
8582: (p_budget_version_id => p_fin_plan_version_id
8583: ,x_budget_line_id_tab => l_fin_plan_line_id_tab
8584: ,x_cost_rejection_data_tab => l_cost_rejection_data_tab
8585: ,x_burden_rejection_data_tab => l_burden_rejection_data_tab