DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_REP_STATUS_UPDATE_PVT

Source


1 PACKAGE BODY OKC_REP_STATUS_UPDATE_PVT AS
2 /* $Header: OKCVREPSTATCHB.pls 120.1.12020000.3 2013/02/26 06:02:42 kkolukul ship $ */
3 
4   ---------------------------------------------------------------------------
5   -- GLOBAL CONSTANTS
6   ---------------------------------------------------------------------------
7   G_PARTY_TYPE_INTERNAL     CONSTANT VARCHAR2(12) := 'INTERNAL_ORG';
8   G_PKG_NAME                CONSTANT VARCHAR2(200) := 'OKC_REP_CONTRACT_SEARCH_PVT';
9   G_APP_NAME                CONSTANT VARCHAR2(3)   := 'OKC';
10   G_MODULE                  CONSTANT VARCHAR2(250) := 'okc.plsql.'||G_PKG_NAME||'.';
11 
12   G_UNEXPECTED_ERROR        CONSTANT VARCHAR2(200) := 'OKC_UNEXPECTED_ERROR';
13   G_SQLERRM_TOKEN           CONSTANT VARCHAR2(200) := 'ERROR_MESSAGE';
14   G_SQLCODE_TOKEN           CONSTANT VARCHAR2(200) := 'ERROR_CODE';
15 
16   G_RETURN_CODE_SUCCESS     CONSTANT VARCHAR2(1) :='0';
17   G_RETURN_CODE_WARNING     CONSTANT VARCHAR2(1) := '1';
18   G_RETURN_CODE_ERROR       CONSTANT VARCHAR2(1) := '2';
19 
20   -- Contract status codes
21   G_REP_CON_STATUS_SIGNED CONSTANT VARCHAR2(200) := 'SIGNED';
22   G_REP_CON_STATUS_TERMINATED CONSTANT VARCHAR2(200) := 'TERMINATED';
23 
24   ---------------------------------------------------------------------------
25   -- START: Procedures and Functions
26   ---------------------------------------------------------------------------
27 
28 -- Start of comments
29 --API name      : contract_status_updater
30 --Type          : Private.
31 --Function      : Updates status for contracts
32 --                reaching their termination date
33 --Pre-reqs      : None.
34 --Parameters    :
35 --IN            : p_api_version         IN NUMBER       Required
36 --              : p_init_msg_list       IN VARCHAR2     Required
37 --              : p_status              IN VARCHAR2     Required
38 --OUT           : x_return_status       OUT  VARCHAR2(1)
39 --              : x_msg_count           OUT  NUMBER
40 --              : x_msg_data            OUT  VARCHAR2(2000)
41 --Note          :
42 -- End of comments
43 PROCEDURE contract_status_updater(
44   p_api_version   IN          NUMBER,
45   p_init_msg_list IN          VARCHAR2,
46   p_status        IN          VARCHAR2,
47   x_msg_data      OUT NOCOPY  VARCHAR2,
48   x_msg_count     OUT NOCOPY  NUMBER,
49   x_return_status OUT NOCOPY  VARCHAR2)
50 
51   IS
52 
53     l_api_version NUMBER;
54     l_api_name    VARCHAR2(32);
55 
56     CURSOR contracts_cur IS
57     SELECT
58       contract_id, contract_version_num,
59       contract_number,
60       contract_name
61     FROM  okc_rep_contracts_all
62     WHERE termination_date is not null
63     AND   contract_status_code = G_REP_CON_STATUS_SIGNED
64     AND   trunc(termination_date) <= TRUNC(SYSDATE);
65 
66     CURSOR contract_vers_cur IS
67     SELECT
68       contract_id, contract_version_num,
69       contract_number,
70       contract_name
71     FROM  okc_rep_contract_vers v
72     WHERE termination_date IS NOT NULL
73     AND   contract_status_code = G_REP_CON_STATUS_SIGNED
74     AND   trunc(termination_date) <= trunc(SYSDATE);
75 
76     TYPE selected_contracts_tbl IS TABLE OF contracts_cur%ROWTYPE;
77     TYPE selected_vers_contracts_tbl IS TABLE OF contract_vers_cur%ROWTYPE;
78     TYPE NumList IS TABLE OF okc_rep_contracts_all.contract_id%TYPE NOT NULL
79           INDEX BY PLS_INTEGER;
80     TYPE VersionNumList IS TABLE OF okc_rep_contracts_all.contract_version_num%TYPE NOT NULL
81           INDEX BY PLS_INTEGER;
82 
83     selected_contracts selected_contracts_tbl;
84     selected_vers_contracts selected_vers_contracts_tbl;
85     selected_contract_ids NumList;
86     selected_vers_contract_ids NumList;
87     selected_vers_contract_ver VersionNumList;
88 
89     l_batch_size number(4) := 1000;
90     l_first_iteration VARCHAR2(1);
91     l_count number;
92 
93     l_doc_type varchar2(30);
94     l_resolved_msg_name VARCHAR2(30);
95     l_resolved_token VARCHAR2(100);
96 
97     l_contract_id number;
98 
99 
100 
101   BEGIN
102     FND_FILE.PUT_LINE(FND_FILE.LOG, '***** BEGIN contract_status_updater *****');
103 
104     FND_FILE.PUT_LINE(FND_FILE.LOG, 'p_status = ' || p_status);
105 
106     l_api_name    := 'contract_status_updater';
107     l_api_version := 1.0;
108     l_first_iteration := 'Y';
109     l_count := 0;
110 
111     -- Standard call to check for call compatibility.
112     IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
113       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
114     END IF;
115 
116     -- Initialize message list if p_init_msg_list is set to TRUE.
117     IF FND_API.to_Boolean( p_init_msg_list ) THEN
118       FND_MSG_PUB.initialize;
119     END IF;
120 
121     -- Update the status of the terminated contracts in the active contracts table
122     OPEN contracts_cur;
123     LOOP -- the following statement fetches 1000 rows or less in each iteration
124 
125       FETCH contracts_cur BULK COLLECT INTO selected_contracts
126       LIMIT l_batch_size;
127 
128       EXIT WHEN selected_contracts.COUNT = 0;
129 
130       -- Show the text Contract Details only once
131       IF (l_first_iteration = 'Y') THEN
132 
133         l_first_iteration := 'N';
134 
135         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
136         FND_FILE.PUT_LINE(FND_FILE.LOG, '');
137         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_CONTRACT_DETAILS'));
138         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '================');
139         FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_CONTRACT_DETAILS'));
140         FND_FILE.PUT_LINE(FND_FILE.LOG, '================');
141 
142       END IF;
143 
144 
145       FOR i IN 1..NVL(selected_contracts.LAST, -1) LOOP
146         l_count := l_count + 1;
147         l_contract_id := selected_contracts(i).contract_id;
148 
149         -- Populate the current contract details into concurrent output and log files
150 
151         -- Add Contract Name
152        l_doc_type := OKC_API.get_contract_type(selected_contracts(i).contract_id);
153        l_resolved_msg_name := OKC_API.resolve_message('OKC_REP_ATTR_CON_NAME',l_doc_type);
154        l_resolved_token := OKC_API.resolve_hdr_token(l_doc_type);
155 
156         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, l_resolved_msg_name,'HDR_TOKEN',l_resolved_token) || '               : '|| selected_contracts(i).contract_name);
157         FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, l_resolved_msg_name) || '               : '|| selected_contracts(i).contract_name);
158 
159         -- Add Contract Number
160         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_ATTR_CON_NUMBER') || '             : '|| selected_contracts(i).contract_number);
161         FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_ATTR_CON_NUMBER') || '             : '|| selected_contracts(i).contract_number);
162 
163         -- Add Contract Version Number
164 	FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_ATTR_CON_VER_NUM') || '            : '|| selected_contracts(i).contract_version_num);
165         FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_ATTR_CON_VER_NUM') || '            : '|| selected_contracts(i).contract_version_num);
166 
167         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
168         FND_FILE.PUT_LINE(FND_FILE.LOG, '');
169 
170         -- Prepare a number array of contract ids, this is required by the UPDATE
171         -- statement under FORALL as it will not take selected_contracts(i).contract_id in the WHERE clause
172         -- Getting the following compilation error
173         -- PLS-00436: implementation restriction: cannot reference fields of BULK In-BIND table of records
174         selected_contract_ids(i) := selected_contracts(i).contract_id;
175 
176       END LOOP;
177 
178       FORALL j IN NVL(selected_contract_ids.FIRST,0)..NVL(selected_contract_ids.LAST,-1)
179         UPDATE okc_rep_contracts_all
180         SET    contract_status_code = p_status,
181                last_update_date = sysdate,
182                last_updated_by = Fnd_Global.User_Id,
183                last_update_login = Fnd_Global.Login_Id
184         WHERE  contract_id = selected_contract_ids(j);
185 
186     END LOOP;
187 
188     IF contracts_cur%ISOPEN THEN
189       CLOSE contracts_cur ;
190     END IF;
191 
192     -- Update the status of the terminated contracts in the archived contracts table
193     OPEN contract_vers_cur;
194     LOOP -- the following statement fetches 1000 rows or less in each iteration
195 
196       FETCH contract_vers_cur BULK COLLECT INTO selected_vers_contracts
197       LIMIT l_batch_size;
198 
199       EXIT WHEN selected_vers_contracts.COUNT = 0;
200 
201       -- Show the text Contract Details only once
202       IF (l_first_iteration = 'Y') THEN
203 
204         l_first_iteration := 'N';
205 
206         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
207         FND_FILE.PUT_LINE(FND_FILE.LOG, '');
208         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_CONTRACT_DETAILS'));
209         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '================');
210         FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_CONTRACT_DETAILS'));
211         FND_FILE.PUT_LINE(FND_FILE.LOG, '================');
212 
213       END IF;
214 
215       FOR i IN 1..NVL(selected_vers_contracts.LAST, -1) LOOP
216 
217         l_count := l_count + 1;
218         l_contract_id := selected_vers_contracts(i).contract_id;
219 
220         -- Populate the current contract details into concurrent output and log files
221        l_doc_type := OKC_API.get_contract_type(selected_vers_contracts(i).contract_id);
222        l_resolved_msg_name := OKC_API.resolve_message('OKC_REP_ATTR_CON_NAME',l_doc_type);
223        l_resolved_token := OKC_API.resolve_hdr_token(l_doc_type);
224         -- Add Contract Name
225 
226         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, l_resolved_msg_name,'HDR_TOKEN',l_resolved_token) || '               : '|| selected_vers_contracts(i).contract_name);
227         FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, l_resolved_msg_name,'HDR_TOKEN',l_resolved_token) || '               : '|| selected_vers_contracts(i).contract_name);
228 
229         -- Add Contract Number
230         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_ATTR_CON_NUMBER') || '             : '|| selected_vers_contracts(i).contract_number);
231         FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_ATTR_CON_NUMBER') || '             : '|| selected_vers_contracts(i).contract_number);
232 
233         -- Add Contract Version Number
234 	FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_ATTR_CON_VER_NUM') || '            : '|| selected_vers_contracts(i).contract_version_num);
235         FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_SW_ATTR_CON_VER_NUM') || '            : '|| selected_vers_contracts(i).contract_version_num);
236 
237         FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '');
238         FND_FILE.PUT_LINE(FND_FILE.LOG, '');
239 
240         -- Prepare a number array of contract ids and version numbers, this is required by the UPDATE
241         -- statement under FORALL as it will not take selected_vers_contracts(i).contract_id in the WHERE clause
242         -- Getting the following compilation error
243         -- PLS-00436: implementation restriction: cannot reference fields of BULK In-BIND table of records
244         selected_vers_contract_ids(i) := selected_vers_contracts(i).contract_id;
245         selected_vers_contract_ver(i) := selected_vers_contracts(i).contract_version_num;
246 
247       END LOOP;
248 
249       FORALL j IN NVL(selected_vers_contract_ids.FIRST,0)..NVL(selected_vers_contract_ids.LAST,-1)
250         UPDATE okc_rep_contract_vers
251         SET    contract_status_code = p_status,
252                last_update_date = sysdate,
253                last_updated_by = Fnd_Global.User_Id,
254                last_update_login = Fnd_Global.Login_Id
255         WHERE  contract_id = selected_vers_contract_ids(j)
256         AND    contract_version_num = selected_vers_contract_ver(j);
257 
258     END LOOP;
259 
260     IF contract_vers_cur%ISOPEN THEN
261       CLOSE contract_vers_cur ;
262     END IF;
263 
264        l_doc_type := OKC_API.get_contract_type(l_contract_id);
265        l_resolved_msg_name := OKC_API.resolve_message('OKC_REP_UPD_STS_SUMMARY',l_doc_type);
266        l_resolved_token := OKC_API.resolve_hdr_token(l_doc_type);
267 
268     FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, l_resolved_msg_name,'HDR_TOKEN',l_resolved_token) || ' : ' || l_count);
269     FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, l_resolved_msg_name,'HDR_TOKEN',l_resolved_token) || ' : ' || l_count);
270 
271     COMMIT;
272 
273   EXCEPTION
274     WHEN OTHERS THEN
275 
276        l_doc_type := OKC_API.get_contract_type(l_contract_id);
277        l_resolved_msg_name := OKC_API.resolve_message('OKC_REP_UPD_STS_ERROR',l_doc_type);
278        l_resolved_token := OKC_API.resolve_hdr_token(l_doc_type);
279 
280 
281       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, l_resolved_msg_name,'HDR_TOKEN',l_resolved_token));
282       FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, l_resolved_msg_name,'HDR_TOKEN',l_resolved_token));
283 
284       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_UPD_STS_SYS_ERR') || ' ' || sqlerrm);
285       FND_FILE.PUT_LINE(FND_FILE.LOG, OKC_TERMS_UTIL_PVT.get_message(G_APP_NAME, 'OKC_REP_UPD_STS_SYS_ERR') || ' ' || sqlerrm);
286 
287       ROLLBACK;
288 
289       --close cursors
290       IF contracts_cur%ISOPEN THEN
291         CLOSE contracts_cur ;
292       END IF;
293       IF contract_vers_cur%ISOPEN THEN
294         CLOSE contract_vers_cur ;
295       END IF;
296 
297       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
298 
299       x_msg_count := 1;
300       x_msg_data := substr(SQLERRM, 1, 200);
301 
302       Okc_Api.Set_Message(
303         p_app_name     => G_APP_NAME,
304         p_msg_name     => G_UNEXPECTED_ERROR,
305         p_token1       => G_SQLCODE_TOKEN,
306         p_token1_value => SQLCODE,
307         p_token2       => G_SQLERRM_TOKEN,
308         p_token2_value => SQLERRM);
309 
310       FND_MSG_PUB.Count_And_Get(
311         p_count =>  x_msg_count,
312         p_data  =>  x_msg_data
313       );
314 
315   END contract_status_updater;
316 
317 -- Start of comments
318 --API name      : contract_status_update_manager
319 --Type          : Private.
320 --Function      : Called from Concurrent Manager to update
321 --                status for contract reaching their
322 --                termination date
323 --Pre-reqs      : None.
324 --Parameters    :
325 --IN            : p_status IN VARCHAR2 Required
326 --OUT           : errbuf  OUT NOCOPY VARCHAR2
327 --              : retcode OUT NOCOPY VARCHAR2
328 --Note          :
329 -- End of comments
330 
331   PROCEDURE contract_status_update_manager(
332     p_status IN VARCHAR2,
333     errbuf  OUT NOCOPY VARCHAR2,
334     retcode OUT NOCOPY VARCHAR2)
335   IS
336     l_api_version   NUMBER;
337     l_api_name      VARCHAR2(32);
338     l_init_msg_list VARCHAR2(2000);
339     l_msg_data      VARCHAR2(2000);
340     l_msg_count     NUMBER;
341     l_return_status VARCHAR2(2000);
342     l_status        VARCHAR2(32);
343 
344   BEGIN
345 
346     FND_FILE.PUT_LINE(FND_FILE.LOG, '***** BEGIN contract_status_update_manager *****');
347 
348     l_api_name    := 'contract_status_update_manager';
349     l_api_version   := 1.0;
350     l_init_msg_list := FND_API.G_FALSE;
351     l_status := 'NONE';
352 
353     FND_FILE.PUT_LINE(FND_FILE.LOG, 'p_status = (' || p_status || ')');
354     FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_status = (' || l_status || ')');
355 
356     IF p_status IS NULL OR LENGTH(TRIM(p_status)) = 0 THEN
357       l_status := G_REP_CON_STATUS_TERMINATED;
358     END IF;
359 
360     FND_FILE.PUT_LINE(FND_FILE.LOG, 'l_status = (' || l_status || ')');
361 
362     contract_status_updater(
363       p_api_version   => l_api_version,
364       p_init_msg_list => l_init_msg_list,
365       p_status        => l_status,
366       x_msg_data      => l_msg_data,
367       x_msg_count     => l_msg_count,
368       x_return_status => l_return_status
369     );
370 
371     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
372       retcode := G_RETURN_CODE_ERROR;
373       errbuf := substr(FND_MSG_PUB.Get(), 1, 200);
374     END IF;
375 
376     FND_FILE.PUT_LINE(FND_FILE.LOG, '***** END contract_status_update_manager() *****');
377 
378   EXCEPTION
379     WHEN OTHERS THEN
380       FND_FILE.PUT_LINE(FND_FILE.LOG, '***** EXCEPTION OTHERS*****');
381       FND_FILE.PUT_LINE(FND_FILE.LOG, SQLERRM);
382 
383       retcode := G_RETURN_CODE_ERROR;
384       errbuf := substr(SQLERRM, 1, 200);
385 
386   END contract_status_update_manager;
387 
388 END OKC_REP_STATUS_UPDATE_PVT;