[Home] [Help]
PACKAGE BODY: APPS.OKL_SIMPLE_PRICING_PVT
Source
1 PACKAGE BODY OKL_SIMPLE_PRICING_PVT AS
2 /* $Header: OKLRSPRB.pls 120.2 2010/12/07 22:54:50 gkadarka ship $ */
3
4 FUNCTION compute_periodic_payment
5 (p_term IN NUMBER
6 ,p_frequency IN NUMBER
7 ,p_rate IN NUMBER
8 ,p_principal IN NUMBER
9 ,p_residual_percent IN NUMBER
10 ,p_arrears IN VARCHAR2
11 ,x_return_status OUT NOCOPY VARCHAR2
12 ) RETURN NUMBER IS
13
14 /* Variables */
15 l_residual_percent NUMBER;
16 l_rate NUMBER;
17 l_Repayment NUMBER;
18 l_Factor NUMBER;
19 l_Arrears NUMBER := 0; -- 0:Arrears=Yes;
20 -- 1:Arrears=No i.e. Advance payment
21 l_periods NUMBER;
22 l_payments_per_annum NUMBER := p_frequency;
23 /* Variables */
24
25
26
27
28 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
29
30 BEGIN
31
32 IF p_arrears = 'N' THEN
33 l_Arrears := 1; -- payment in Advance.
34 END IF;
35
36 IF p_frequency=12 THEN
37 l_periods:=1;
38 ELSIF p_frequency=3 THEN
39 l_periods:=3;
40 ELSIF p_frequency=2 THEN
41 l_periods:=6;
42 ELSIF p_frequency=1 THEN
43 l_periods:=12;
44 ELSE
45 NULL;
46 END IF;
47
48 IF p_frequency = 3 THEN -- correction for quartly payments
49 l_payments_per_annum := 4;
50 END IF;
51
52 l_residual_percent := nvl(p_residual_percent,0) / 100;
53 l_periods := p_term / l_periods;
54 l_rate := p_rate/(100*l_payments_per_annum);
55
56 l_factor := (1-l_residual_percent) * ( l_rate * POWER(1+l_rate,l_periods-l_Arrears) / (POWER(1+ l_Rate,l_periods)-1) + l_residual_percent * l_Rate * (1- l_Rate)); -- bug 10148774 - moved the logic to single line
57
58 l_Repayment := p_principal * l_Factor;
59
60 x_return_status := l_return_status;
61
62 RETURN l_Repayment;
63
64 EXCEPTION
65 WHEN OTHERS THEN
66 -- store SQL error message on message stack
67 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
68 p_msg_name => G_UNEXPECTED_ERROR,
69 p_token1 => G_SQLCODE_TOKEN,
70 p_token1_value => SQLCODE,
71 p_token2 => G_SQLERRM_TOKEN,
72 p_token2_value => SQLERRM);
73 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
74
75 END compute_periodic_payment;
76
77 END OKL_SIMPLE_PRICING_PVT;