DBA Data[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;