1: PACKAGE BODY pa_multi_currency_txn AS
2: --$Header: PAXMCTXB.pls 120.4.12010000.9 2009/02/18 17:42:09 prabsing ship $
3:
4: /** This is a global Record structure used as a cache for FI calls **/
5:
133: -- end r12 nocopy changes
134:
135: --Initialize the error stack
136: --Note : pa_debug calls are commented out as it voilates get_currency_attrib pragma excpetions
137: --PA_DEBUG.init_err_stack('PA_MULTI_CURRENCY_TXN.derive_currency_attributes_fi');
138: print_message('Inside derive_fi_curr_attributes api');
139:
140: IF (G_REC_FI_ATTRB.prev_project_id is NULL OR
141: G_REC_FI_ATTRB.prev_project_id <> P_project_id ) OR
759: -- print_message('p_projfunc_cost_rate_date ['||p_projfunc_cost_rate_date||']');
760: -- print_message('p_projfunc_cost_rate_type ['||p_projfunc_cost_rate_type||']');
761: -- print_message('p_projfunc_cost_exch_rate ['||p_projfunc_cost_exch_rate||']');
762:
763: print_message(' Calling pa_multi_currency_txn.get_currency_attributes ');
764:
765: pa_multi_currency_txn.get_currency_attributes
766: ( P_project_id => P_project_id
767: ,P_exp_org_id => P_exp_org_id
761: -- print_message('p_projfunc_cost_exch_rate ['||p_projfunc_cost_exch_rate||']');
762:
763: print_message(' Calling pa_multi_currency_txn.get_currency_attributes ');
764:
765: pa_multi_currency_txn.get_currency_attributes
766: ( P_project_id => P_project_id
767: ,P_exp_org_id => P_exp_org_id
768: ,P_calling_module => l_calling_module
769: ,P_task_id => P_task_id
840: BEGIN
841: --
842: --
843: print_message('Calling convert_amount for projfunc raw cost');
844: pa_multi_currency.convert_amount( P_from_currency =>P_denom_curr_code,
845: P_to_currency =>P_projfunc_curr_code,
846: P_conversion_date =>P_projfunc_cost_rate_date,
847: P_conversion_type =>P_projfunc_cost_rate_type,
848: P_amount =>P_denom_raw_cost,
859: RETURN;
860: END IF;
861:
862: EXCEPTION
863: WHEN pa_multi_currency.no_rate THEN
864: P_status := 'PA_NO_PROJFUNC_CURR_RATE';
865: RETURN;
866: WHEN pa_Multi_currency.invalid_currency THEN
867: P_status := 'PA_INVALID_PROJFUNC_CURR';
862: EXCEPTION
863: WHEN pa_multi_currency.no_rate THEN
864: P_status := 'PA_NO_PROJFUNC_CURR_RATE';
865: RETURN;
866: WHEN pa_Multi_currency.invalid_currency THEN
867: P_status := 'PA_INVALID_PROJFUNC_CURR';
868: RETURN;
869: WHEN others THEN
870: raise;
887: <
888: BEGIN
889: --
890: --
891: pa_multi_currency.convert_amount( P_from_currency =>P_denom_curr_code,
892: P_to_currency =>P_project_curr_code,
893: P_conversion_date =>P_project_rate_date,
894: P_conversion_type =>P_project_rate_type,
895: P_amount =>P_denom_raw_cost,
906: RETURN;
907: END IF;
908:
909: EXCEPTION
910: WHEN pa_multi_currency.no_rate THEN
911: P_status := 'PA_NO_PROJECT_CURR_RATE';
912: RETURN;
913: WHEN pa_Multi_currency.invalid_currency THEN
914: P_status := 'PA_INVALID_PROJ_CURR';
909: EXCEPTION
910: WHEN pa_multi_currency.no_rate THEN
911: P_status := 'PA_NO_PROJECT_CURR_RATE';
912: RETURN;
913: WHEN pa_Multi_currency.invalid_currency THEN
914: P_status := 'PA_INVALID_PROJ_CURR';
915: RETURN;
916: WHEN others THEN
917: raise;
932: <
933: BEGIN
934:
935: print_message('Calculate_acct_raw_cost');
936: pa_multi_currency.convert_amount( P_from_currency =>P_denom_curr_code,
937: P_to_currency =>P_acct_curr_code,
938: P_conversion_date =>P_acct_rate_date,
939: P_conversion_type =>P_acct_rate_type,
940: P_amount =>P_denom_raw_cost,
951: RETURN;
952: END IF;
953:
954: EXCEPTION
955: WHEN pa_multi_currency.no_rate THEN
956: P_status := 'PA_NO_ACCT_CURR_RATE';
957: RETURN;
958: WHEN pa_multi_currency.invalid_currency THEN
959: P_status := 'PA_INVALID_ACCT_CURR';
954: EXCEPTION
955: WHEN pa_multi_currency.no_rate THEN
956: P_status := 'PA_NO_ACCT_CURR_RATE';
957: RETURN;
958: WHEN pa_multi_currency.invalid_currency THEN
959: P_status := 'PA_INVALID_ACCT_CURR';
960: RETURN;
961: WHEN others THEN
962: raise;
977: BEGIN
978: --
979: --
980: print_message('Calculate_projfunc_raw_cost');
981: pa_multi_currency.convert_amount( P_from_currency =>P_denom_curr_code,
982: P_to_currency =>P_projfunc_curr_code,
983: P_conversion_date =>P_projfunc_cost_rate_date,
984: P_conversion_type =>P_projfunc_cost_rate_type,
985: P_amount =>P_denom_raw_cost,
996: RETURN;
997: END IF;
998:
999: EXCEPTION
1000: WHEN pa_multi_currency.no_rate THEN
1001: P_status := 'PA_NO_PROJFUNC_CURR_RATE';
1002: RETURN;
1003: WHEN pa_Multi_currency.invalid_currency THEN
1004: P_status := 'PA_INVALID_PROJFUNC_CURR';
999: EXCEPTION
1000: WHEN pa_multi_currency.no_rate THEN
1001: P_status := 'PA_NO_PROJFUNC_CURR_RATE';
1002: RETURN;
1003: WHEN pa_Multi_currency.invalid_currency THEN
1004: P_status := 'PA_INVALID_PROJFUNC_CURR';
1005: RETURN;
1006: WHEN others THEN
1007: raise;
1027: BEGIN
1028: --
1029: --
1030: print_message('Calculate_project_raw_cost');
1031: pa_multi_currency.convert_amount( P_from_currency =>P_denom_curr_code,
1032: P_to_currency =>P_project_curr_code,
1033: P_conversion_date =>P_project_rate_date,
1034: P_conversion_type =>P_project_rate_type,
1035: P_amount =>P_denom_raw_cost,
1046: RETURN;
1047: END IF;
1048:
1049: EXCEPTION
1050: WHEN pa_multi_currency.no_rate THEN
1051: P_status := 'PA_NO_PROJECT_CURR_RATE';
1052: RETURN;
1053: WHEN pa_Multi_currency.invalid_currency THEN
1054: P_status := 'PA_INVALID_PROJ_CURR';
1049: EXCEPTION
1050: WHEN pa_multi_currency.no_rate THEN
1051: P_status := 'PA_NO_PROJECT_CURR_RATE';
1052: RETURN;
1053: WHEN pa_Multi_currency.invalid_currency THEN
1054: P_status := 'PA_INVALID_PROJ_CURR';
1055: RETURN;
1056: WHEN others THEN
1057: raise;
1098: ELSE
1099:
1100: /* E.N. Bug 3535935 : Typical Case of CWK. Where all currency attributes are derived from PO */
1101:
1102: pa_multi_currency.convert_amount( P_from_currency =>P_denom_curr_code,
1103: P_to_currency =>P_projfunc_curr_code,
1104: P_conversion_date =>P_projfunc_cost_rate_date,
1105: P_conversion_type =>P_projfunc_cost_rate_type,
1106: P_amount =>P_denom_raw_cost,
1131: RETURN;
1132: END IF;
1133:
1134: EXCEPTION
1135: WHEN pa_multi_currency.no_rate THEN
1136: print_message('Exception Raised in GL currency api');
1137: --dbms_output.put_line('Exception Raised in GL currency api');
1138: P_status := 'PA_NO_PROJFUNC_CURR_RATE';
1139: RETURN;
1136: print_message('Exception Raised in GL currency api');
1137: --dbms_output.put_line('Exception Raised in GL currency api');
1138: P_status := 'PA_NO_PROJFUNC_CURR_RATE';
1139: RETURN;
1140: WHEN pa_Multi_currency.invalid_currency THEN
1141: --dbms_output.put_line('PA_INVALID_PROJFUNC_CURR');
1142: P_status := 'PA_INVALID_PROJFUNC_CURR';
1143: RETURN;
1144: WHEN others THEN
1160: /* Bug 3889122 Calculate FC from GL rates if it is non-cwk transaction */
1161: <
1162: BEGIN
1163: print_message('Calculate_acct_raw_cost for <> ER');
1164: pa_multi_currency.convert_amount( P_from_currency =>P_denom_curr_code,
1165: P_to_currency =>P_acct_curr_code,
1166: P_conversion_date =>P_acct_rate_date,
1167: P_conversion_type =>P_acct_rate_type,
1168: P_amount =>P_denom_raw_cost,
1179: RETURN;
1180: END IF;
1181:
1182: EXCEPTION
1183: WHEN pa_multi_currency.no_rate THEN
1184: P_status := 'PA_NO_ACCT_CURR_RATE';
1185: RETURN;
1186: WHEN pa_multi_currency.invalid_currency THEN
1187: P_status := 'PA_INVALID_ACCT_CURR';
1182: EXCEPTION
1183: WHEN pa_multi_currency.no_rate THEN
1184: P_status := 'PA_NO_ACCT_CURR_RATE';
1185: RETURN;
1186: WHEN pa_multi_currency.invalid_currency THEN
1187: P_status := 'PA_INVALID_ACCT_CURR';
1188: RETURN;
1189: WHEN others THEN
1190: raise;
1220: --
1221: --
1222: --dbms_output.put_line('Calculate_project_raw_cost for <> ER');
1223: print_message('Calculate_project_raw_cost for <> ER');
1224: pa_multi_currency.convert_amount( P_from_currency =>P_denom_curr_code,
1225: P_to_currency =>P_project_curr_code,
1226: P_conversion_date =>P_project_rate_date,
1227: P_conversion_type =>P_project_rate_type,
1228: P_amount =>P_denom_raw_cost,
1241: RETURN;
1242: END IF;
1243:
1244: EXCEPTION
1245: WHEN pa_multi_currency.no_rate THEN
1246: --dbms_output.put_line('PA_NO_PROJECT_CURR_RATE');
1247: P_status := 'PA_NO_PROJECT_CURR_RATE';
1248: RETURN;
1249: WHEN pa_Multi_currency.invalid_currency THEN
1245: WHEN pa_multi_currency.no_rate THEN
1246: --dbms_output.put_line('PA_NO_PROJECT_CURR_RATE');
1247: P_status := 'PA_NO_PROJECT_CURR_RATE';
1248: RETURN;
1249: WHEN pa_Multi_currency.invalid_currency THEN
1250: --dbms_output.put_line('PA_INVALID_PROJ_CURR');
1251: P_status := 'PA_INVALID_PROJ_CURR';
1252: RETURN;
1253: WHEN others THEN
1470: * The init procedure is called to set the global variables
1471: * to be used by the MC API
1472: */
1473: IF P_DEBUG_MODE THEN
1474: pa_cc_utils.log_message('Perform_MC_and_IC_processing: ' || 'Before Call to PA_MULTI_CURRENCY.INIT');
1475: END IF;
1476: PA_MULTI_CURRENCY.INIT;
1477: IF P_DEBUG_MODE THEN
1478: pa_cc_utils.log_message('Perform_MC_and_IC_processing: ' || 'After Call to PA_MULTI_CURRENCY.INIT');
1472: */
1473: IF P_DEBUG_MODE THEN
1474: pa_cc_utils.log_message('Perform_MC_and_IC_processing: ' || 'Before Call to PA_MULTI_CURRENCY.INIT');
1475: END IF;
1476: PA_MULTI_CURRENCY.INIT;
1477: IF P_DEBUG_MODE THEN
1478: pa_cc_utils.log_message('Perform_MC_and_IC_processing: ' || 'After Call to PA_MULTI_CURRENCY.INIT');
1479: END IF;
1480: /*
1474: pa_cc_utils.log_message('Perform_MC_and_IC_processing: ' || 'Before Call to PA_MULTI_CURRENCY.INIT');
1475: END IF;
1476: PA_MULTI_CURRENCY.INIT;
1477: IF P_DEBUG_MODE THEN
1478: pa_cc_utils.log_message('Perform_MC_and_IC_processing: ' || 'After Call to PA_MULTI_CURRENCY.INIT');
1479: END IF;
1480: /*
1481: * Loop through all expenditure items and set the required
1482: * Parameter tables with the appropriate values.
1582: * only when the status <> 0
1583: */
1584: P_Source := 'MC Error';
1585: IF P_DEBUG_MODE THEN
1586: pa_cc_utils.log_message('Perform_MC_and_IC_processing: ' || 'Before Call to PA_MULTI_CURRENCY_TXN.GET_CURRENCY_AMOUNTS');
1587: END IF;
1588: If nvl(expenditure_item_rec.GL_Accounted_Flag,'N') = 'Y' THEN
1589:
1590: V_acct_raw_cost := expenditure_item_rec.acct_raw_cost ;
1619:
1620:
1621: END IF ; --3535935 hkulkarn
1622:
1623: PA_MULTI_CURRENCY_TXN.GET_CURRENCY_AMOUNTS(
1624: p_project_id => null,
1625: p_exp_org_id => null,
1626: p_calling_module => null,
1627: P_task_id => expenditure_item_rec.task_id,
1648: P_status => V_status,
1649: P_stage => V_stage,
1650: P_Po_Line_ID => expenditure_item_rec.Po_Line_Id);
1651: IF P_DEBUG_MODE THEN
1652: pa_cc_utils.log_message('Perform_MC_and_IC_processing: ' || 'After Call to PA_MULTI_CURRENCY_TXN.GET_CURRENCY_AMOUNTS');
1653:
1654: END IF;
1655: /*
1656: * 2048868
2370: * Project_rate_type.
2371: */
2372: IF ( x_project_rate_type IS NULL )
2373: THEN --{
2374: pa_multi_currency_txn.get_proj_rate_type( P_task_id => P_task_id
2375: ,p_project_id => p_project_id
2376: ,p_structure_version_id => p_structure_version_id
2377: ,p_calling_module => p_calling_module
2378: ,P_project_currency_code => l_char_dummy
2384: * Project_rate_date.
2385: */
2386: IF ( x_project_rate_date IS NULL )
2387: THEN --{
2388: pa_multi_currency_txn.get_proj_rate_date( P_task_id => P_task_id
2389: ,P_project_id => P_project_id
2390: ,P_ei_date => P_ei_date
2391: ,P_structure_version_id => p_structure_version_id
2392: ,P_calling_module => p_calling_module
2413: begin
2414:
2415: IF ( P_attribute = 'TYPE' OR P_attribute = 'BOTH' )
2416: THEN
2417: x_acct_rate_type := NVL(x_acct_rate_type, pa_multi_currency.G_rate_type);
2418: END IF; -- P_attribute = 'TYPE'
2419:
2420: IF ( P_attribute = 'DATE' OR P_attribute = 'BOTH' )
2421: THEN
2421: THEN
2422: IF ( P_calling_module = 'TRANSFER' )
2423: THEN --{
2424:
2425: pa_multi_currency_txn.get_default_acct_rate_date( P_ei_date => P_ei_date
2426: ,P_acct_rate_date => X_acct_rate_date
2427: );
2428:
2429: ELSE --}{
2427: );
2428:
2429: ELSE --}{
2430:
2431: pa_multi_currency_txn.get_acct_rate_date( P_ei_date => P_ei_date
2432: ,P_acct_rate_date => X_acct_rate_date
2433: ) ;
2434:
2435: END IF; --} End P_calling_module = 'TRANSFER'
2455:
2456: --dbms_output.put_line('deriving projfunc attributes');
2457: IF ( P_attribute = 'TYPE' OR P_attribute = 'BOTH')
2458: THEN --{
2459: pa_multi_currency_txn.get_projfunc_cost_rate_type
2460: ( P_task_id =>P_task_id ,
2461: P_project_id => p_project_id ,
2462: P_structure_version_id => p_structure_version_id ,
2463: P_calling_module => p_calling_module ,
2469: IF ( P_attribute = 'DATE' OR P_attribute = 'BOTH' )
2470: THEN --{
2471: IF ( P_calling_module = 'TRANSFER' ) THEN
2472:
2473: pa_multi_currency_txn.get_def_projfunc_cst_rate_date
2474: ( P_task_id =>P_task_id ,
2475: P_project_id => p_project_id ,
2476: P_structure_version_id => p_structure_version_id ,
2477: P_calling_module => p_calling_module ,
2481: ELSE --}{
2482:
2483: --dbms_output.put_line('calling get_projfunc_cost_rate_date');
2484:
2485: pa_multi_currency_txn.get_projfunc_cost_rate_date
2486: ( P_task_id =>P_task_id ,
2487: P_project_id =>P_project_id ,
2488: P_ei_date =>P_ei_date ,
2489: P_structure_version_id =>p_structure_version_id ,
2615: X_projfunc_cost_rate_date := X_acct_rate_date ;
2616:
2617: IF ( X_acct_rate_type = 'User' )
2618: THEN --{
2619: IF ( pa_multi_currency.is_user_rate_type_allowed(
2620: P_from_currency => P_denom_curr_code,
2621: P_to_currency => P_acct_curr_code,
2622: P_conversion_date => X_acct_rate_date)='Y'
2623: )
2761: * In both the cases (1)(2) projfunc takes precedence.
2762: */
2763: IF (X_projfunc_cost_rate_type = 'User')
2764: THEN --{
2765: IF ( pa_multi_currency.is_user_rate_type_allowed(
2766: P_from_currency => P_denom_curr_code,
2767: P_to_currency => P_projfunc_curr_code,
2768: P_conversion_date => X_projfunc_cost_rate_date) = 'Y'
2769: )
2783: ELSIF (usersupplied.acct_rate_type ='Y')
2784: THEN -- }{
2785: IF ( X_acct_rate_type = 'User')
2786: THEN --{
2787: IF (pa_multi_currency.is_user_rate_type_allowed(
2788: P_from_currency => P_denom_curr_code,
2789: P_to_currency => P_acct_curr_code,
2790: P_conversion_date => X_acct_rate_date) ='Y')
2791: THEN --{
2853: X_project_exch_rate := X_projfunc_cost_exch_rate ;
2854: ELSE --}{
2855: IF ( X_project_rate_type = 'User')
2856: THEN --{
2857: IF ( pa_multi_currency.is_user_rate_type_allowed(
2858: P_from_currency => P_denom_curr_code,
2859: P_to_currency => P_project_curr_code,
2860: P_conversion_date => X_project_rate_date) = 'Y' )
2861: THEN --}{
2982: END IF; --} X_projfunc_cost_rate_date IS NULL
2983:
2984: IF (X_projfunc_cost_rate_type = 'User')
2985: THEN --{
2986: IF (pa_multi_currency.is_user_rate_type_allowed(
2987: P_from_currency => P_denom_curr_code,
2988: P_to_currency => P_projfunc_curr_code,
2989: P_conversion_date => X_projfunc_cost_rate_date) = 'Y')
2990: THEN --{
3065: END IF; --} X_acct_rate_date IS NULL
3066:
3067: IF (X_acct_rate_type = 'User')
3068: THEN --{
3069: IF (pa_multi_currency.is_user_rate_type_allowed(
3070: P_from_currency => P_denom_curr_code,
3071: P_to_currency => P_acct_curr_code,
3072: P_conversion_date => X_acct_rate_date) = 'Y')
3073: THEN --{
3140: X_project_exch_rate := X_projfunc_cost_exch_rate ;
3141: ELSE --}{
3142: IF ( X_project_rate_type = 'User')
3143: THEN --{
3144: IF ( pa_multi_currency.is_user_rate_type_allowed(
3145: P_from_currency => P_denom_curr_code,
3146: P_to_currency => P_project_curr_code,
3147: P_conversion_date => X_project_rate_date) ='Y' )
3148: THEN --}{
3205: X_project_exch_rate := X_acct_exch_rate ;
3206: ELSE --}{
3207: IF ( X_project_rate_type = 'User')
3208: THEN --{
3209: IF ( pa_multi_currency.is_user_rate_type_allowed(
3210: P_from_currency => P_denom_curr_code,
3211: P_to_currency => P_project_curr_code,
3212: P_conversion_date => X_project_rate_date) ='Y' )
3213: THEN --}{
3272: RAISE;
3273: END get_currency_attributes;
3274: /*---------------------------------------------------------------------*/
3275:
3276: END pa_multi_currency_txn ;