[Home] [Help]
PACKAGE BODY: APPS.OKL_SIMPLE_PRICING_PVT
Source
1 PACKAGE BODY OKL_SIMPLE_PRICING_PVT AS
2 /* $Header: OKLRSPRB.pls 115.27 2003/02/24 21:26:13 rgalipo noship $ */
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)
57 *
58 ( l_rate * POWER(1+l_rate,l_periods-l_Arrears)
59 /
60 (POWER(1+ l_Rate,l_periods)-1)
61 + l_residual_percent
62 * l_Rate
63 * (1- l_Rate)
64 );
65
66 l_Repayment := p_principal * l_Factor;
67
68 x_return_status := l_return_status;
69
70 RETURN l_Repayment;
71
72 EXCEPTION
73 WHEN OTHERS THEN
74 -- store SQL error message on message stack
75 Okl_Api.SET_MESSAGE(p_app_name => G_APP_NAME,
76 p_msg_name => G_UNEXPECTED_ERROR,
77 p_token1 => G_SQLCODE_TOKEN,
78 p_token1_value => SQLCODE,
79 p_token2 => G_SQLERRM_TOKEN,
80 p_token2_value => SQLERRM);
81 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
82
83 END compute_periodic_payment;
84
85 END OKL_SIMPLE_PRICING_PVT;