281: EXCEPTION
282:
283: WHEN OTHERS THEN
284: print_msg('Unexpected error in Process_Rounding_Diff ['||sqlcode||sqlerrm||']');
285: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
286: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
287: p_procedure_name => 'Process_Rounding_Diff'||l_stage);
288: If p_pa_debug_mode = 'Y' Then
289: pa_debug.reset_err_stack;
287: p_procedure_name => 'Process_Rounding_Diff'||l_stage);
288: If p_pa_debug_mode = 'Y' Then
289: pa_debug.reset_err_stack;
290: End If;
291: raise FND_API.G_EXC_UNEXPECTED_ERROR;
292:
293: END Process_Rounding_Diff;
294:
295: PROCEDURE Initialize_spread_plsqlTabs IS
423: EXCEPTION
424:
425: WHEN OTHERS THEN
426: print_msg('Unexpected error in blkInsertBudgetLines['||sqlcode||sqlerrm||']');
427: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
428: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
429: p_procedure_name => 'blkInsertBudgetLines'||l_stage);
430: If p_pa_debug_mode = 'Y' Then
431: pa_debug.reset_err_stack;
429: p_procedure_name => 'blkInsertBudgetLines'||l_stage);
430: If p_pa_debug_mode = 'Y' Then
431: pa_debug.reset_err_stack;
432: End If;
433: raise FND_API.G_EXC_UNEXPECTED_ERROR;
434: END blkInsertBudgetLines;
435:
436: /* This API bulk inserts the lines into pa_fp_rollup_tmp from plsql tables */
437: PROCEDURE blkInsertFpLines(x_return_status OUT NOCOPY Varchar2) IS
502: EXCEPTION
503:
504: WHEN OTHERS THEN
505: print_msg('Unexpected error in blkInsertFpLines['||sqlcode||sqlerrm||']');
506: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
507: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
508: p_procedure_name => 'blkInsertFpLines'||l_stage);
509: If p_pa_debug_mode = 'Y' Then
510: pa_debug.reset_err_stack;
508: p_procedure_name => 'blkInsertFpLines'||l_stage);
509: If p_pa_debug_mode = 'Y' Then
510: pa_debug.reset_err_stack;
511: End If;
512: raise FND_API.G_EXC_UNEXPECTED_ERROR;
513:
514: END blkInsertFpLines;
515:
516: /* This API bulk inserts lines into pa_fp_rollup_tmp from pa_budget_lines */
801: EXCEPTION
802:
803: WHEN OTHERS THEN
804: print_msg('Unexpected error in blkInsertBlFpLines['||sqlcode||sqlerrm||']');
805: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
806: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
807: p_procedure_name => 'blkInsertBlFpLines'||l_stage);
808: If p_pa_debug_mode = 'Y' Then
809: pa_debug.reset_err_stack;
807: p_procedure_name => 'blkInsertBlFpLines'||l_stage);
808: If p_pa_debug_mode = 'Y' Then
809: pa_debug.reset_err_stack;
810: End If;
811: raise FND_API.G_EXC_UNEXPECTED_ERROR;
812:
813: END blkInsertBlFpLines;
814:
815: /* This API populates the plsql tables with budget lines for bulk insert */
859:
860: EXCEPTION
861: WHEN OTHERS THEN
862: print_msg(l_stage||sqlcode||sqlerrm);
863: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
864: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
865: p_procedure_name => 'insert_budget_line'||l_stage);
866: If p_pa_debug_mode = 'Y' Then
867: pa_debug.reset_err_stack;
865: p_procedure_name => 'insert_budget_line'||l_stage);
866: If p_pa_debug_mode = 'Y' Then
867: pa_debug.reset_err_stack;
868: End If;
869: raise FND_API.G_EXC_UNEXPECTED_ERROR;
870:
871: END insert_budget_line;
872:
873: /* This API populates the plsql tables with rollup tmp lines for bulk insert */
917:
918: EXCEPTION
919: WHEN OTHERS THEN
920:
921: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
922: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
923: p_procedure_name => 'insert_rollup_tmp()'||l_stage);
924: If p_pa_debug_mode = 'Y' Then
925: pa_debug.reset_err_stack;
923: p_procedure_name => 'insert_rollup_tmp()'||l_stage);
924: If p_pa_debug_mode = 'Y' Then
925: pa_debug.reset_err_stack;
926: End If;
927: raise FND_API.G_EXC_UNEXPECTED_ERROR;
928:
929: END insert_rollup_tmp;
930:
931: /* This API populates the plsql tables with rollup tmp lines for bulk insert */
976:
977:
978: EXCEPTION
979: WHEN OTHERS THEN
980: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
981: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
982: p_procedure_name => 'insert_rollup_tmp_with_bl()'||l_stage);
983: If p_pa_debug_mode = 'Y' Then
984: pa_debug.reset_err_stack;
982: p_procedure_name => 'insert_rollup_tmp_with_bl()'||l_stage);
983: If p_pa_debug_mode = 'Y' Then
984: pa_debug.reset_err_stack;
985: End If;
986: raise FND_API.G_EXC_UNEXPECTED_ERROR;
987:
988: END insert_rollup_tmp_with_bl;
989:
990: /* This API rounds the given amount/quantity to following precision level
1017: WHEN OTHERS THEN
1018: print_msg('Unexpected error in Round_Qty_Amts['||sqlcode||sqlerrm||']');
1019: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
1020: p_procedure_name => 'spread');
1021: raise FND_API.G_EXC_UNEXPECTED_ERROR;
1022: END Round_Qty_Amts;
1023:
1024: PROCEDURE spread ( p_number_of_amounts IN INTEGER,
1025: p_amount1 IN NUMBER,
1073:
1074: BEGIN
1075: l_stage := 10;
1076: print_msg(' '||l_stage||' enter spread()');
1077: x_return_status := FND_API.G_RET_STS_SUCCESS;
1078: If p_pa_debug_mode = 'Y' Then
1079: pa_debug.init_err_stack('PA_FP_SPREAD_AMTS_PKG.spread');
1080: End If;
1081:
1130: print_msg(' '||l_stage||' before validate p_number_of_amounts');
1131: -- p_number_of_amounts cannot overflow
1132: IF NOT p_number_of_amounts BETWEEN 1 AND 10 THEN
1133:
1134: x_return_status := FND_API.G_RET_STS_ERROR;
1135: x_msg_data := 'PA_FP_NUM_OF_AMTS_OVERFLOW';
1136: If p_pa_debug_mode = 'Y' Then
1137: pa_debug.reset_err_stack;
1138: End If;
1144: -- p_start_end_date cannot be null and
1145: -- each start_date must earlier than end_date in p_start_end_date,
1146: -- and they cannot overlap each other.
1147: IF p_start_end_date IS NULL THEN
1148: x_return_status := FND_API.G_RET_STS_ERROR;
1149: x_msg_data := 'PA_FP_PLAN_START_END_DATE_NULL';
1150: If p_pa_debug_mode = 'Y' Then
1151: pa_debug.reset_err_stack;
1152: End If;
1162: k < p_start_end_date.COUNT() AND
1163: p_start_end_date(k + 1).start_date <=
1164: p_start_end_date(k).end_date THEN
1165:
1166: x_return_status := FND_API.G_RET_STS_ERROR;
1167: x_msg_data := 'PA_FP_START_END_DATE_OVERLAP';
1168: If p_pa_debug_mode = 'Y' Then
1169: pa_debug.reset_err_stack;
1170: End If;
1186: print_msg(' '||l_stage||' before validate x_spread_amounts');
1187: -- x_spread_amounts cannot be NULL and
1188: -- x_spread_amounts' start end date must match with p_start_end_date.
1189: IF (x_spread_amounts IS NULL OR x_spread_amounts.COUNT() = 0 ) THEN
1190: x_return_status := FND_API.G_RET_STS_ERROR;
1191: x_msg_data := 'PA_FP_PERIODS_IS_NULL';
1192: print_msg('x_msg_data['||x_msg_data||']');
1193: If p_pa_debug_mode = 'Y' Then
1194: pa_debug.reset_err_stack;
1206: k < x_spread_amounts.COUNT() AND
1207: x_spread_amounts(k + 1).start_date <=
1208: x_spread_amounts(k).end_date THEN
1209:
1210: x_return_status := FND_API.G_RET_STS_ERROR;
1211: x_msg_data := 'PA_FP_START_END_DATE_NOT_MATCH';
1212: If p_pa_debug_mode = 'Y' Then
1213: pa_debug.reset_err_stack;
1214: End If;
1220: x_spread_amounts(1).end_date OR
1221: p_start_end_date(p_start_end_date.COUNT()).end_date <
1222: x_spread_amounts(x_spread_amounts.COUNT()).start_date THEN
1223:
1224: x_return_status := FND_API.G_RET_STS_ERROR;
1225: x_msg_data := 'PA_FP_START_END_DATE_NOT_MATCH';
1226: --print_msg('x_msg_data['||x_msg_data||']');
1227: If p_pa_debug_mode = 'Y' Then
1228: pa_debug.reset_err_stack;
1244: -- p_start_period = 0 AND
1245: -- p_end_period BETWEEN 1 AND x_spread_amounts.COUNT() OR
1246: -- p_start_period = 0 AND p_end_period = 0) THEN
1247:
1248: x_return_status := FND_API.G_RET_STS_ERROR;
1249: x_msg_data := 'PA_FP_PERIOD_NO_MATCH';
1250: print_msg('x_msg_data['||x_msg_data||']');
1251: If p_pa_debug_mode = 'Y' Then
1252: pa_debug.reset_err_stack;
1900: EXCEPTION
1901:
1902: WHEN OTHERS THEN
1903: print_msg('Unexpected error in Spread['||sqlcode||sqlerrm||']');
1904: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1905: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
1906: p_procedure_name => 'spread');
1907: If p_pa_debug_mode = 'Y' Then
1908: pa_debug.reset_err_stack;
1906: p_procedure_name => 'spread');
1907: If p_pa_debug_mode = 'Y' Then
1908: pa_debug.reset_err_stack;
1909: End If;
1910: raise FND_API.G_EXC_UNEXPECTED_ERROR;
1911: END spread;
1912:
1913:
1914: PROCEDURE spread_day_level( p_number_of_amounts IN INTEGER,
1958:
1959: BEGIN
1960: l_stage := 10.1;
1961: print_msg(' '||l_stage||' enter spread_daily_level()');
1962: x_return_status := FND_API.G_RET_STS_SUCCESS;
1963: If p_pa_debug_mode = 'Y' Then
1964: pa_debug.init_err_stack('PA_FP_SPREAD_AMTS_PKG.spread_daily_level');
1965: End If;
1966:
1994: print_msg(' '||l_stage||' before validate p_number_of_amounts');
1995: -- p_number_of_amounts cannot overflow
1996: IF NOT p_number_of_amounts BETWEEN 1 AND 10 THEN
1997:
1998: x_return_status := FND_API.G_RET_STS_ERROR;
1999: x_msg_data := 'PA_FP_NUM_OF_AMTS_OVERFLOW';
2000: If p_pa_debug_mode = 'Y' Then
2001: pa_debug.reset_err_stack;
2002: End If;
2008: -- p_start_end_date cannot be null and
2009: -- each start_date must earlier than end_date in p_start_end_date,
2010: -- and they cannot overlap each other.
2011: IF p_start_end_date IS NULL THEN
2012: x_return_status := FND_API.G_RET_STS_ERROR;
2013: x_msg_data := 'PA_FP_PLAN_START_END_DATE_NULL';
2014: If p_pa_debug_mode = 'Y' Then
2015: pa_debug.reset_err_stack;
2016: End If;
2026: k < p_start_end_date.COUNT() AND
2027: p_start_end_date(k + 1).start_date <=
2028: p_start_end_date(k).end_date THEN
2029:
2030: x_return_status := FND_API.G_RET_STS_ERROR;
2031: x_msg_data := 'PA_FP_START_END_DATE_OVERLAP';
2032: If p_pa_debug_mode = 'Y' Then
2033: pa_debug.reset_err_stack;
2034: End If;
2040: print_msg(' '||l_stage||' before validate x_spread_amounts');
2041: -- x_spread_amounts cannot be NULL and
2042: -- x_spread_amounts' start end date must match with p_start_end_date.
2043: IF (x_spread_amounts IS NULL OR x_spread_amounts.COUNT() = 0 ) THEN
2044: x_return_status := FND_API.G_RET_STS_ERROR;
2045: x_msg_data := 'PA_FP_PERIODS_IS_NULL';
2046: print_msg('x_msg_data['||x_msg_data||']');
2047: If p_pa_debug_mode = 'Y' Then
2048: pa_debug.reset_err_stack;
2060: k < x_spread_amounts.COUNT() AND
2061: x_spread_amounts(k + 1).start_date <=
2062: x_spread_amounts(k).end_date THEN
2063:
2064: x_return_status := FND_API.G_RET_STS_ERROR;
2065: x_msg_data := 'PA_FP_START_END_DATE_NOT_MATCH';
2066: If p_pa_debug_mode = 'Y' Then
2067: pa_debug.reset_err_stack;
2068: End If;
2074: x_spread_amounts(1).end_date OR
2075: p_start_end_date(p_start_end_date.COUNT()).end_date <
2076: x_spread_amounts(x_spread_amounts.COUNT()).start_date THEN
2077:
2078: x_return_status := FND_API.G_RET_STS_ERROR;
2079: x_msg_data := 'PA_FP_START_END_DATE_NOT_MATCH';
2080: --print_msg('x_msg_data['||x_msg_data||']');
2081: If p_pa_debug_mode = 'Y' Then
2082: pa_debug.reset_err_stack;
2091: IF NOT (p_start_period BETWEEN 1 AND x_spread_amounts.COUNT() AND
2092: p_end_period BETWEEN 1 AND x_spread_amounts.COUNT() AND
2093: p_start_period <= p_end_period) THEN
2094:
2095: x_return_status := FND_API.G_RET_STS_ERROR;
2096: x_msg_data := 'PA_FP_PERIOD_NO_MATCH';
2097: print_msg('x_msg_data['||x_msg_data||']');
2098: If p_pa_debug_mode = 'Y' Then
2099: pa_debug.reset_err_stack;
2697: BEGIN
2698: l_stage := 200;
2699: print_msg(' '||l_stage||' enter get_options()');
2700:
2701: x_return_status := FND_API.G_RET_STS_SUCCESS;
2702: If p_pa_debug_mode = 'Y' Then
2703: pa_debug.init_err_stack( 'PA_FP_SPREAD_AMTS_PKG.get_options');
2704: pa_debug.set_process('PLSQL', 'LOG', p_pa_debug_mode);
2705: End If;
2716: IF get_name_and_type_csr%NOTFOUND THEN
2717:
2718: CLOSE get_name_and_type_csr;
2719:
2720: x_return_status := FND_API.G_RET_STS_ERROR;
2721: x_msg_data := 'PA_FP_CANNOT_GET_TIME_PHASE';
2722: If p_pa_debug_mode = 'Y' Then
2723: pa_debug.reset_err_stack;
2724: End If;
2756: EXCEPTION
2757:
2758: WHEN OTHERS THEN
2759:
2760: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2761: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
2762: p_procedure_name => 'get_options');
2763: If p_pa_debug_mode = 'Y' Then
2764: pa_debug.reset_err_stack;
2762: p_procedure_name => 'get_options');
2763: If p_pa_debug_mode = 'Y' Then
2764: pa_debug.reset_err_stack;
2765: End If;
2766: raise FND_API.G_EXC_UNEXPECTED_ERROR;
2767:
2768: END get_options;
2769:
2770: PROCEDURE get_periods (
2867: BEGIN
2868: l_stage := 250;
2869: print_msg(' '||l_stage||' enter get_periods()');
2870:
2871: x_return_status := FND_API.G_RET_STS_SUCCESS;
2872: If p_pa_debug_mode = 'Y' Then
2873: pa_debug.init_err_stack('PA_FP_SPREAD_AMTS_PKG.get_periods');
2874: pa_debug.set_process('PLSQL', 'LOG', p_pa_debug_mode);
2875: End If;
2884: print_msg(' '||l_stage||' before validate p_start/end_date');
2885: -- p_start_date must less than p_end_date
2886: IF p_start_date > p_end_date THEN
2887:
2888: x_return_status := FND_API.G_RET_STS_ERROR;
2889: x_msg_data := 'PA_FP_START_END_DATE_OVERLAP';
2890: If p_pa_debug_mode = 'Y' Then
2891: pa_debug.reset_err_stack;
2892: End If;
2928: x_spread_amounts(n) := tmp_rec;
2929: END LOOP;
2930:
2931: IF n = 0 AND (l_time_phase_code = 'G' OR l_time_phase_code = 'P') THEN
2932: x_return_status := FND_API.G_RET_STS_ERROR;
2933: x_msg_data := 'PA_FP_PERIODS_IS_NULL';
2934: If p_pa_debug_mode = 'Y' Then
2935: pa_debug.reset_err_stack;
2936: End If;
2945: EXCEPTION
2946:
2947: WHEN OTHERS THEN
2948:
2949: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2950: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
2951: p_procedure_name => 'get_periods');
2952: If p_pa_debug_mode = 'Y' Then
2953: pa_debug.reset_err_stack;
2951: p_procedure_name => 'get_periods');
2952: If p_pa_debug_mode = 'Y' Then
2953: pa_debug.reset_err_stack;
2954: End If;
2955: raise FND_API.G_EXC_UNEXPECTED_ERROR;
2956:
2957: END get_periods;
2958:
2959:
3298: v_msg_data);
3299:
3300: l_stage := 805;
3301: print_msg(l_stage||'after get_options');
3302: IF v_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3303: l_stage := 806;
3304: print_msg(l_stage||' get_options() err MsgData['||v_msg_data||']');
3305: l_err_msg := v_msg_data;
3306: RAISE SPREAD_AMOUNTS_EXCEPTION;
3467: v_return_status,
3468: v_msg_count,
3469: v_msg_data);
3470: print_msg(l_stage||' after get periods retSts['||v_return_status||']v_spread_amounts.coount['||v_spread_amounts.COUNT||']');
3471: IF v_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3472: l_err_msg := v_msg_data;
3473: RAISE SPREAD_AMOUNTS_EXCEPTION;
3474: END IF;
3475:
4097: v_msg_count,
4098: v_msg_data);
4099:
4100: IF v_return_status <>
4101: FND_API.G_RET_STS_SUCCESS THEN
4102: l_err_msg := v_msg_data;
4103: RAISE SPREAD_AMOUNTS_EXCEPTION;
4104:
4105: END IF;
4124: v_msg_count,
4125: v_msg_data);
4126:
4127: IF v_return_status <>
4128: FND_API.G_RET_STS_SUCCESS THEN
4129: l_err_msg := v_msg_data;
4130: RAISE SPREAD_AMOUNTS_EXCEPTION;
4131:
4132: END IF;
4182: v_msg_count,
4183: v_msg_data);
4184:
4185: IF v_return_status <>
4186: FND_API.G_RET_STS_SUCCESS THEN
4187:
4188: l_err_msg := v_msg_data;
4189: RAISE SPREAD_AMOUNTS_EXCEPTION;
4190:
4420: v_msg_count,
4421: v_msg_data);
4422:
4423: IF v_return_status <>
4424: FND_API.G_RET_STS_SUCCESS THEN
4425: l_err_msg := v_msg_data;
4426: RAISE SPREAD_AMOUNTS_EXCEPTION;
4427:
4428: END IF;
4446: v_return_status,
4447: v_msg_count,
4448: v_msg_data);
4449:
4450: IF v_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4451: l_err_msg := v_msg_data;
4452: RAISE SPREAD_AMOUNTS_EXCEPTION;
4453:
4454: END IF;
4479: v_return_status,
4480: v_msg_count,
4481: v_msg_data);
4482:
4483: IF v_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4484: l_err_msg := v_msg_data;
4485: RAISE SPREAD_AMOUNTS_EXCEPTION;
4486:
4487: END IF;
4537: v_msg_count,
4538: v_msg_data);
4539:
4540: IF v_return_status <>
4541: FND_API.G_RET_STS_SUCCESS THEN
4542: l_err_msg := v_msg_data;
4543: RAISE SPREAD_AMOUNTS_EXCEPTION;
4544:
4545: END IF;
4562: v_msg_count,
4563: v_msg_data);
4564:
4565: IF v_return_status <>
4566: FND_API.G_RET_STS_SUCCESS THEN
4567: l_err_msg := v_msg_data;
4568: RAISE SPREAD_AMOUNTS_EXCEPTION;
4569:
4570: END IF;
4672: EXCEPTION
4673:
4674: WHEN SPREAD_AMOUNTS_EXCEPTION THEN
4675:
4676: x_return_status := FND_API.G_RET_STS_ERROR;
4677: L_FINAL_RETURN_STATUS := 'E';
4678: /* bug fix:4194475 open the cursor only when error msg needs to populated */
4679: print_msg(l_stage||' get project_name, task_name and resource_name');
4680: OPEN get_line_info(v_resource_assignment_id);
4707: /* BUG FIX 3632873 Retrive the msg from stack */
4708: print_msg('Retrive the msg from stack MsgCt['||x_msg_count||']');
4709: If x_msg_count = 1 then
4710: pa_interface_utils_pub.get_messages
4711: ( p_encoded => FND_API.G_TRUE
4712: ,p_msg_index => 1
4713: ,p_data => x_msg_data
4714: ,p_msg_index_out => l_msg_index_out
4715: );
4729:
4730: WHEN OTHERS THEN
4731:
4732: print_msg('Encountered Unexpected error from Spread API['||SQLCODE||SQLERRM);
4733: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4734: L_FINAL_RETURN_STATUS := 'U';
4735: FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FP_SPREAD_AMTS_PKG',
4736: p_procedure_name => 'spread_amounts');
4737: If p_pa_debug_mode = 'Y' Then
4736: p_procedure_name => 'spread_amounts');
4737: If p_pa_debug_mode = 'Y' Then
4738: pa_debug.reset_err_stack;
4739: End If;
4740: raise FND_API.G_EXC_UNEXPECTED_ERROR;
4741:
4742: END spread_amounts;
4743:
4744: