DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_PROCESS_PPD_PVT

Source


1 PACKAGE BODY OKL_PROCESS_PPD_PVT AS
2 /* $Header: OKLRPPNB.pls 120.2 2006/08/11 10:47:13 gboomina noship $*/
3 
4     G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5     G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6     G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7 
8 --Global Variables
9   G_INIT_NUMBER NUMBER := -9999;
10   G_PKG_NAME    CONSTANT VARCHAR2(200) := 'OKL_PPD_PVT';
11   G_APP_NAME    CONSTANT VARCHAR2(3)   :=  OKL_API.G_APP_NAME;
12   G_API_TYPE    CONSTANT VARCHAR2(4)   := '_PVT';
13 
14 PROCEDURE validate_parameters(
15     p_chr_id             IN  OKC_K_HEADERS_V.ID%TYPE,
16     p_kle_tbl            IN  OKL_MASS_REBOOK_PVT.kle_tbl_type,
17     p_transaction_date   IN  OKL_TRX_CONTRACTS.DATE_TRANSACTION_OCCURRED%TYPE,
18     p_ppd_amount         IN  NUMBER,
19     p_ppd_reason_code    IN  FND_LOOKUPS.LOOKUP_CODE%TYPE,
20     p_payment_struc      IN  okl_mass_rebook_pvt.strm_lalevl_tbl_type,
21     x_msg_count          OUT NOCOPY NUMBER,
22     x_msg_data           OUT NOCOPY VARCHAR2
23 )
24 IS
25 type asset_rec_type is record (
26   cle_id okc_rule_groups_v.cle_id%type,
27   rent_ppd_type VARCHAR2(30),
28   laslh_count number,
29   lasll_count number,
30   other_count number
31 );
32 
33 type validate_rec_type is RECORD (
34   chr_id  OKC_K_HEADERS_V.ID%TYPE,
35   asset_rec asset_rec_type
36 );
37 type val_rec_tbl is table of validate_rec_type index by binary_integer;
38 
39 l_api_name varchar2(100) := 'OKL_PROCESS_PPD_PVT.VALIDATE_PARAMETERS';
40 missing_parameters exception;
41 invalid_payment_structure exception;
42 l_missing_parameters BOOLEAN := FALSE;
43 l_object1_id1 number;
44 l_lalsh_id number;
45 l_prev_chr_id number;
46 l_curr_chr_id number;
47 l_curr_cle_id number;
48 l_prev_cle_id number;
49 l_prev_category okc_rules_v.rule_information_category%type;
50 l_curr_category okc_rules_v.rule_information_category%type;
51 BEGIN
52   -- Check if all parameters are not null
53   -- Validate if
54   -- 1. SLH is there but no SLL
55   -- 2. starts with SLL and SLH follows
56   null;
57   x_msg_count := 0;
58   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
59       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In validate_parameters ...x_msg_count='||x_msg_count);
60   END IF;
61   IF (p_chr_id is null) THEN
62     fnd_message.set_name('OKL', 'OKL_API_ALL_MISSING_PARAM');
63     fnd_message.set_token('API_NAME', l_api_name);
64     fnd_message.set_token('MISSING_PARAM', 'p_chr_id');
65     x_msg_count:= x_msg_count + 1;
66     l_missing_parameters := TRUE;
67     fnd_msg_pub.add;
68   END IF;
69 
70   IF ((p_kle_tbl is null) or (p_kle_tbl.COUNT=0)) THEN
71     fnd_message.set_name('OKL', 'OKL_API_ALL_MISSING_PARAM');
72     fnd_message.set_token('API_NAME', l_api_name);
73     fnd_message.set_token('MISSING_PARAM', 'p_kle_tbl');
74     x_msg_count:= x_msg_count + 1;
75     l_missing_parameters := TRUE;
76     fnd_msg_pub.add;
77   END IF;
78 
79   IF (p_transaction_date is null) THEN
80     fnd_message.set_name('OKL', 'OKL_API_ALL_MISSING_PARAM');
81     fnd_message.set_token('API_NAME', l_api_name);
82     fnd_message.set_token('MISSING_PARAM', 'p_transaction_date');
83     x_msg_count:= x_msg_count + 1;
84     l_missing_parameters := TRUE;
85     fnd_msg_pub.add;
86   END IF;
87 
88   IF (p_ppd_amount is null) THEN
89     fnd_message.set_name('OKL', 'OKL_API_ALL_MISSING_PARAM');
90     fnd_message.set_token('API_NAME', l_api_name);
91     fnd_message.set_token('MISSING_PARAM', 'p_ppd_amount');
92     x_msg_count:= x_msg_count + 1;
93     l_missing_parameters := TRUE;
94     fnd_msg_pub.add;
95   END IF;
96 
97   IF (p_ppd_reason_code is null) THEN
98     fnd_message.set_name('OKL', 'OKL_API_ALL_MISSING_PARAM');
99     fnd_message.set_token('API_NAME', l_api_name);
100     fnd_message.set_token('MISSING_PARAM', 'p_ppd_reason_code');
101     x_msg_count:= x_msg_count + 1;
102     l_missing_parameters := TRUE;
103     fnd_msg_pub.add;
104   END IF;
105 
106   IF (p_payment_struc is null) or (p_payment_struc.COUNT=0) THEN
107     fnd_message.set_name('OKL', 'OKL_API_ALL_MISSING_PARAM');
108     fnd_message.set_token('API_NAME', l_api_name);
109     fnd_message.set_token('MISSING_PARAM', 'p_payment_struc');
110     x_msg_count:= x_msg_count + 1;
111     l_missing_parameters := TRUE;
112     fnd_msg_pub.add;
113   END IF;
114 
115   for i in p_payment_struc.first .. p_payment_struc.last loop
116     if (p_payment_struc(i).chr_id is null or p_payment_struc(i).cle_id is null)
117     then
118       l_missing_parameters := true;
119       exit;
120     end if;
121   end loop;
122 
123   IF l_missing_parameters then
124     raise missing_parameters;
125     RETURN;
126   END IF;
127 
128   x_msg_count := 0;
129   x_msg_data := '';
130   l_prev_category := '';
131   l_prev_chr_id := -1;
132   l_prev_cle_id := -1;
133   /*FOR i IN 1..p_kle_tbl.COUNT
134   LOOP
135     l_slh_count   := 0;
136     l_sll_count   := 0;
137     l_oth_count   := 0; */
138     FOR j IN 1..p_payment_struc.COUNT
139     LOOP
140       -- Whenever you get an SLH record, create an asset record
141       -- Whenever you get an SLL record, create an asset record if current
142       -- asset id does not match or if object1_id1 does not match prev SLH ID
143       -- Whenever you get an OTH record, create an asset record if current
144       -- asset id does not match
145 
146       --IF (p_kle_tbl(i).id = p_payment_struc(j).cle_id) THEN
147 
148          l_curr_chr_id := p_payment_struc(j).chr_id ;
149          l_curr_cle_id := p_payment_struc(j).cle_id;
150          l_curr_category := p_payment_struc(j).rule_information_category;
151 
152          /*if (l_curr_category = 'LASLL') then
153            -- hardcode values without which update fails : DEBUG
154            p_payment_struc(j).jtot_object2_code := 'OKL_STRMHDR';
155          end if;*/
156 
157          if ((l_curr_category = 'LASLH') and (l_prev_category = 'LASLH'))
158          THEN
159            null;
160            x_msg_count := x_msg_count + 1;
161            x_msg_data := 'Contract: ' || l_prev_chr_id || ' Asset: ' ||
162                        l_prev_cle_id || ' contains no LASLL records';
163            --okl_debug_pub.logmessage('x_msg_data=' || x_msg_data);
164            raise invalid_payment_structure;
165            -- raise no SLL record found for SLH
166          END IF;
167          --IF ( ((l_curr_chr_id <> l_prev_chr_id) and (l_prev_chr_id <> -1)) or
168              --((l_curr_cle_id <> l_prev_cle_id) and (l_prev_cle_id <> -1)) )
169          IF ( (l_curr_chr_id <> l_prev_chr_id) or
170               (l_curr_cle_id <> l_prev_cle_id) )
171          THEN
172            null;
173            --Change of asset or contract or both
174            IF (p_payment_struc(j).rule_information_category <> 'LASLH') THEN
175              null;
176              x_msg_count := x_msg_count + 1;
177              x_msg_data := 'Contract ' || l_curr_chr_id || ' Asset ' ||
178                        l_curr_cle_id || ' begins with non LASLH category';
179              raise invalid_payment_structure;
180              -- Begins with invalid category (<> LASLH)
181              -- Raise exception
182            END IF;
183          END IF;
184          /*
185          IF (p_payment_struc(j).rule_information_category = 'LASLH') THEN
186            null;
187            l_slh_count := l_slh_count + 1;
188            begin
189              l_object1_id1 := p_payment_struc(j).object1_id1;
190              l_laslh_id := p_payment_struc(j).id;
191              select name into l_ppd_rent from okl_strm_type_v
192              where  id = l_object1_id1;
193              exception when others then
194                l_ppd_rent := 'OTHER';
195            end;
196          ELSIF (p_payment_struc(j).rule_information_category = 'LASLL') THEN
197            null;
198          ELSE
199            null;
200          END IF;
201          */
202        --END IF;
203        l_prev_chr_id := l_curr_chr_id;
204        l_prev_cle_id := l_curr_cle_id;
205        l_prev_category := l_curr_category;
206     END LOOP;
207 END;
208 
209 PROCEDURE apply_ppd
210    (
211     p_api_version        IN  NUMBER,
212     p_init_msg_list      IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
213     x_return_status      OUT NOCOPY VARCHAR2,
214     x_msg_count          OUT NOCOPY NUMBER,
215     x_msg_data           OUT NOCOPY VARCHAR2,
216     p_chr_id             IN  OKC_K_HEADERS_V.ID%TYPE,
217     p_kle_tbl            IN  OKL_MASS_REBOOK_PVT.kle_tbl_type,
218     p_transaction_date   IN  OKL_TRX_CONTRACTS.DATE_TRANSACTION_OCCURRED%TYPE,
219     p_ppd_amount         IN  NUMBER,
220     p_ppd_reason_code    IN  FND_LOOKUPS.LOOKUP_CODE%TYPE,
221     p_payment_struc      IN  okl_mass_rebook_pvt.strm_lalevl_tbl_type,
222     p_ppd_txn_id         IN  NUMBER
223    )
224 IS
225 missing_parameters exception;
226 l_api_version CONSTANT NUMBER := 1;
227 l_api_name                   VARCHAR2(35) := 'apply_ppd';
228 l_proc_name                  VARCHAR2(35) := 'APPLY_PPD';
229 l_ppd_txn_id                 NUMBER;
230 l_return_status              VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
231 l_mass_rebook_trx_id         NUMBER;
232 l_tcnv_rec                   OKL_TRX_CONTRACTS_PVT.tcnv_rec_type;
233 l_msg_index_out number;
234 BEGIN
235 
236      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
237             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In apply_ppd');
238      END IF;
239      -- DEBUG
240      -- call START_ACTIVITY to create savepoint, check compatibility
241      -- and initialize message list
242      x_return_status := OKL_API.START_ACTIVITY(
243                                         p_api_name      => l_api_name,
244                                         p_pkg_name      => G_PKG_NAME,
245                                         p_init_msg_list => p_init_msg_list,
246                                         l_api_version   => l_api_version,
247                                         p_api_version   => p_api_version,
248                                         p_api_type      => G_API_TYPE,
249                                         x_return_status => x_return_status);
250 
251      -- check if activity started successfully
252      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
253        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
254      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
255        raise OKL_API.G_EXCEPTION_ERROR;
256      END IF;
257 
258   begin
259   x_msg_count := 0;
260   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
261       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'apply_ppd:x_msg_count=' || x_msg_count);
262   END IF;
263   validate_parameters(
264     p_chr_id,
265     p_kle_tbl,
266     p_transaction_date,
267     p_ppd_amount,
268     p_ppd_reason_code,
269     p_payment_struc,
270     x_msg_count,
271     x_msg_data
272   );
273     exception when others then
274       raise missing_parameters;
275   end;
276 
277   /* PPD Transaction creation is handled by forms
278   okl_debug_pub.logmessage('Before call to okl_transaction_pvt.create_ppd_transaction');
279   -- DEBUG: Replace this API by actual API to create ppd transaction
280    okl_transaction_pvt.create_ppd_transaction(
281          p_api_version        => p_api_version,
282          p_init_msg_list      => p_init_msg_list,
283          x_return_status      => x_return_status,
284          x_msg_count          => x_msg_count,
285          x_msg_data           => x_msg_data,
286          p_chr_id             => p_chr_id,
287          p_trx_date           => p_transaction_date,
288          p_trx_type           => 'PDN',
289          p_reason_code        => p_ppd_reason_code,
290          x_tcnv_rec           => l_tcnv_rec
291    );
292 
293    if (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
294      okl_debug_pub.logmessage('Error occurred from okl_transaction_pvt.create_ppd_transaction');
295      okl_debug_pub.logmessage('x_msg_data=' || x_msg_data);
296    end if;
297    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
298        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
299    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
300        raise OKL_API.G_EXCEPTION_ERROR;
301    END IF;
302    */
303 
304    --x_ppd_txn_id := l_tcnv_rec.id;
305    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
306         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_ppd_txn_id=' || p_ppd_txn_id);
307      OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_chr_id=' || p_chr_id);
308    END IF;
309 
310 
311    OKL_MASS_REBOOK_PVT.apply_mass_rebook(
312                               p_api_version        => p_api_version,
313                               p_init_msg_list      => OKC_API.G_FALSE,
314                               x_return_status      => x_return_status,
315                               x_msg_count          => x_msg_count,
316                               x_msg_data           => x_msg_data,
317                               p_chr_id             => p_chr_id,
318                               p_kle_tbl            => p_kle_tbl,
319                               p_source_trx_id      => p_ppd_txn_id,
320                               p_source_trx_type    => 'PPD',
321                               p_transaction_date   => p_transaction_date,
322                               x_mass_rebook_trx_id => l_mass_rebook_trx_id,
323                               p_ppd_amount         => p_ppd_amount,
324                               p_ppd_reason_code    => p_ppd_reason_code,
325                               p_payment_struc      => p_payment_struc
326                               --p_ppd_payment_struc  => p_ppd_payment_struc
327                             );
328 
329      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
330             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'OKLRPPNB:After apply_mass_rebook: x_return_status=' || x_return_status);
331      END IF;
332      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
333        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
334      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
335        raise OKL_API.G_EXCEPTION_ERROR;
336      END IF;
337 
338   EXCEPTION
339       when OKL_API.G_EXCEPTION_ERROR then
340          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
341                         p_api_name  => l_api_name,
342                         p_pkg_name  => G_PKG_NAME,
343                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
344                         x_msg_count => x_msg_count,
345                         x_msg_data  => x_msg_data,
346                         p_api_type  => G_API_TYPE);
347 
348       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
349          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
350                         p_api_name  => l_api_name,
351                         p_pkg_name  => G_PKG_NAME,
352                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
353                         x_msg_count => x_msg_count,
354                         x_msg_data  => x_msg_data,
355                         p_api_type  => G_API_TYPE);
356 
357       when missing_parameters then
358         x_return_status := OKL_API.G_RET_STS_ERROR;
359 
360         /* okl_debug_pub.logmessage('apply_ppd:x_msg_count=' || x_msg_count);
361         IF (x_msg_count > 0 ) THEN
362          FOR i in 1..x_msg_count
363          LOOP
364            FND_MSG_PUB.GET(
365                            p_msg_index     => i,
366                            p_encoded       => FND_API.G_FALSE,
367                            p_data          => x_msg_data,
368                            p_msg_index_out => l_msg_index_out
369                           );
370 
371            okl_debug_pub.logmessage('l_msg_index_out='||l_msg_index_out);
372            okl_debug_pub.logmessage('Error '||to_char(i)||': '||x_msg_data);
373          END LOOP;
374          END IF; */
375 
376         --fnd_msg_pub.Reset;
377         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
378                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Missing Parameters...');
379         END IF;
380         raise;
381 
382       when OTHERS then
383          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
384                         p_api_name  => l_api_name,
385                         p_pkg_name  => G_PKG_NAME,
386                         p_exc_name  => 'OTHERS',
387                         x_msg_count => x_msg_count,
388                         x_msg_data  => x_msg_data,
389                         p_api_type  => G_API_TYPE);
390 END;
391 
392 END OKL_PROCESS_PPD_PVT;