[Home] [Help]
PACKAGE BODY: APPS.CSM_CUSTOMER_ACCOUNT_EVENT_PKG
Source
1 PACKAGE BODY CSM_CUSTOMER_ACCOUNT_EVENT_PKG AS
2 /* $Header: csmecatb.pls 120.2.12020000.2 2013/04/09 06:23:47 saradhak ship $ */
3 g_cst_accnt_acc_table_name CONSTANT VARCHAR2(30) := 'CSM_HZ_CUST_ACCOUNTS_ACC';
4 g_cst_accnt_table_name CONSTANT VARCHAR2(30) := 'HZ_CUST_ACCOUNTS';
5 g_cst_accnt_seq_name CONSTANT VARCHAR2(30) := 'CSM_HZ_CUST_ACCOUNTS_ACC_S' ;
6 g_cst_accnt_pk1_name CONSTANT VARCHAR2(30) := 'CUST_ACCOUNT_ID';
7 g_pub_item CONSTANT VARCHAR2(30) := 'CSM_HZ_CUST_ACCOUNTS';
8 g_accnt_pubi_name CONSTANT CSM_ACC_PKG.t_publication_item_list :=
9 CSM_ACC_PKG.t_publication_item_list('CSM_HZ_CUST_ACCOUNTS');
10
11
12 TYPE l_num_tab_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
13
14 --download New account sites added
15 PROCEDURE CUST_ACCT_SITES_UPD(p_lrd IN DATE) --CONC PROGRAM
16 IS
17
18 CURSOR c_del_cur IS
19 select ACCESS_ID, USER_ID
20 FROM CSM_HZ_CUST_ACCT_SITES_ALL_ACC acc
21 WHERE NOT EXISTS(SELECT 1 from hz_cust_acct_sites_all hcas
22 WHERE acc.cust_acct_site_id=hcas.cust_acct_site_id
23 AND hcas.status='A'
24 AND EXISTS(SELECT 1 FROM hz_cust_site_uses_all hcsu
25 WHERE hcsu.cust_acct_site_id = hcas.cust_acct_site_id
26 AND hcsu.site_use_code='SHIP_TO'
27 AND hcsu.status='A')
28 AND EXISTS(SELECT 1 FROM CSM_PARTY_SITES_ACC ps
29 WHERE ps.PARTY_SITE_ID=hcas.party_site_id
30 AND ps.user_id=acc.user_id));
31
32 CURSOR c_ins_cur
33 IS
34 select CSM_HZ_CUST_ACCOUNTS_ACC_S.nextval as ACCESS_ID, hcas.cust_acct_site_id,ps.user_id
35 from hz_cust_acct_sites_all hcas,CSM_PARTY_SITES_ACC ps
36 WHERE ps.PARTY_SITE_ID=hcas.party_site_id
37 AND hcas.status='A'
38 AND EXISTS(SELECT 1 FROM hz_cust_site_uses_all hcsu
39 WHERE hcsu.cust_acct_site_id = hcas.cust_acct_site_id
40 AND hcsu.site_use_code='SHIP_TO'
41 AND hcsu.status='A')
42 AND NOT EXISTS(SELECT 1 FROM CSM_HZ_CUST_ACCT_SITES_ALL_ACC acc
43 WHERE acc.cust_acct_site_id=hcas.cust_acct_site_id
44 AND acc.user_id=ps.user_id);
45
46 l_tab_access_id ASG_DOWNLOAD.ACCESS_LIST;
47 l_tab_user_id ASG_DOWNLOAD.USER_LIST;
48 l_tab_cas_id l_num_tab_type;
49 l_markdirty BOOLEAN;
50 l_e VARCHAR2(4000);
51 l_r varchar2(10);
52 BEGIN
53
54
55 CSM_UTIL_PKG.LOG('Processing deletes', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_UPD', FND_LOG.LEVEL_PROCEDURE);
56
57 OPEN c_del_cur;
58 LOOP
59 l_tab_access_id.DELETE;
60 l_tab_user_id.DELETE;
61
62 FETCH c_del_cur BULK COLLECT INTO l_tab_access_id,l_tab_user_id LIMIT 1000;
63 EXIT WHEN l_tab_access_id.COUNT = 0;
64
65 CSM_UTIL_PKG.LOG('Bulk deleted ' || l_tab_access_id.count || ' records from CSM_HZ_CUST_ACCT_SITES_ALL_ACC' ,
66 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_UPD', FND_LOG.LEVEL_PROCEDURE);
67
68 l_markdirty := asg_download.mark_dirty(
69 P_PUB_ITEM => 'CSM_HZ_CUST_ACCT_SITES_ALL'
70 , p_accessList => l_tab_access_id
71 , p_userid_list => l_tab_user_id
72 , p_dml_type => 'D'
73 , P_TIMESTAMP => sysdate
74 );
75
76 FORALL i IN 1..l_tab_access_id.COUNT
77 DELETE FROM CSM_HZ_CUST_ACCT_SITES_ALL_ACC WHERE access_id = l_tab_access_id(i);
78
79 COMMIT;
80 END LOOP;
81 CLOSE c_del_cur;
82
83 CSM_UTIL_PKG.LOG('Processing Inserts', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_UPD', FND_LOG.LEVEL_PROCEDURE);
84
85 OPEN c_ins_cur;
86 LOOP
87 l_tab_access_id.DELETE;
88 l_tab_user_id.DELETE;
89 l_tab_cas_id.DELETE;
90
91 FETCH c_ins_cur BULK COLLECT INTO l_tab_access_id,l_tab_cas_id,l_tab_user_id LIMIT 1000;
92 EXIT WHEN l_tab_access_id.COUNT=0;
93
94 FORALL I IN 1..l_tab_access_id.COUNT
95 INSERT INTO CSM_HZ_CUST_ACCT_SITES_ALL_ACC(ACCESS_ID,USER_ID,CUST_ACCT_SITE_ID,
96 COUNTER,created_by, creation_date, last_updated_by, last_update_date )
97 VALUES (l_tab_access_id(I),l_tab_user_id(I),l_tab_cas_id(I),
98 1,fnd_global.user_id, sysdate, fnd_global.user_id, sysdate);
99
100 l_markdirty := asg_download.mark_dirty(
101 P_PUB_ITEM => 'CSM_HZ_CUST_ACCT_SITES_ALL'
102 , p_accessList => l_tab_access_id
103 , p_userid_list => l_tab_user_id
104 , p_dml_type => 'I'
105 , P_TIMESTAMP => sysdate
106 );
107
108 CSM_UTIL_PKG.LOG('Bulk Inserted ' || l_tab_access_id.count || ' records into CSM_HZ_CUST_ACCT_SITES_ALL_ACC' ,
109 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_UPD',FND_LOG.LEVEL_PROCEDURE);
110 COMMIT;
111 END LOOP;
112 CLOSE c_ins_cur;
113
114 CSM_UTIL_PKG.LOG('Leaving CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_UPD Package ', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_UPD',FND_LOG.LEVEL_PROCEDURE);
115
116 END CUST_ACCT_SITES_UPD;
117
118 --insert cust acct sites of passed CUST_ACCOUNT_ID
119 PROCEDURE CUST_ACCT_SITES_INS(p_party_site_id IN NUMBER,p_org_id IN NUMBER,p_user_id IN NUMBER)
120 IS
121 l_markdirty BOOLEAN;
122
123 type r_cursor is REF CURSOR;
124 c_ins_cur r_cursor;
125
126 l_tab_access_id ASG_DOWNLOAD.ACCESS_LIST;
127 l_tab_user_id ASG_DOWNLOAD.USER_LIST;
128 l_tab_cas_id l_num_tab_type;
129 l_e VARCHAR2(4000);
130 l_r varchar2(10);
131 BEGIN
132
133 CSM_UTIL_PKG.LOG('Entering CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_INS Package ', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_INS',FND_LOG.LEVEL_PROCEDURE);
134
135 OPEN c_ins_cur FOR select CSM_HZ_CUST_ACCOUNTS_ACC_S.nextval as ACCESS_ID, p_user_id,hcas.cust_acct_site_id
136 from hz_cust_acct_sites_all hcas
137 where hcas.party_site_id = p_party_site_id
138 AND hcas.status='A' --download only active ones
139 And ORG_ID=p_org_id
140 AND EXISTS(SELECT 1 FROM hz_cust_site_uses_all hcsu
141 WHERE hcsu.cust_acct_site_id = hcas.cust_acct_site_id
142 AND hcsu.site_use_code='SHIP_TO'
143 AND hcsu.status='A')
144 AND NOT EXISTS(SELECT 1 FROM CSM_HZ_CUST_ACCT_SITES_ALL_ACC acc
145 WHERE acc.cust_acct_site_id=hcas.cust_acct_site_id
146 AND acc.user_id=p_user_id);
147
148
149 FETCH c_ins_cur BULK COLLECT INTO l_tab_access_id,l_tab_user_id,l_tab_cas_id;
150
151 FORALL I IN 1..l_tab_access_id.COUNT
152 INSERT INTO CSM_HZ_CUST_ACCT_SITES_ALL_ACC(ACCESS_ID,USER_ID,CUST_ACCT_SITE_ID,
153 COUNTER,created_by, creation_date, last_updated_by, last_update_date )
154 VALUES (l_tab_access_id(I),l_tab_user_id(I),l_tab_cas_id(I),
155 1,fnd_global.user_id, sysdate, fnd_global.user_id, sysdate);
156
157 IF l_tab_access_id.COUNT > 0 THEN
158 l_markdirty := asg_download.mark_dirty(
159 P_PUB_ITEM => 'CSM_HZ_CUST_ACCT_SITES_ALL'
160 , p_accessList => l_tab_access_id
161 , p_userid_list => l_tab_user_id
162 , p_dml_type => 'I'
163 , P_TIMESTAMP => sysdate
164 );
165 END IF;
166
167 CLOSE c_ins_cur;
168
169 CSM_UTIL_PKG.LOG('Leaving after insert of '||l_tab_access_id.COUNT||' records', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCT_SITES_INS',FND_LOG.LEVEL_PROCEDURE);
170
171 END CUST_ACCT_SITES_INS;
172
173 --PROCEDURE IMPLEMENTATION DETAILS
174 --This procedure will insert account id into the access table only for the party
175 --which is passed to this procedure and which is not already present in the CUST ACcount Access table
176 --Here the counter value for the ucstomer accoutns wont get increased even thought multiple instance of
177 --the party is present in the party Access table
178 PROCEDURE CUST_ACCOUNTS_INS (p_party_id NUMBER , p_user_id NUMBER)
179 IS
180 --CURSOR declarations
181 CURSOR c_cust_accnt_ins(c_party_id NUMBER , c_user_id NUMBER)
182 IS
183 SELECT hzc.CUST_ACCOUNT_ID
184 FROM HZ_CUST_ACCOUNTS hzc
185 WHERE hzc.PARTY_ID = c_party_id
186 AND NOT EXISTS
187 (
188 SELECT 1
189 FROM CSM_HZ_CUST_ACCOUNTS_ACC acc
190 WHERE acc.USER_ID = c_user_id
191 AND acc.CUST_ACCOUNT_ID = hzc.CUST_ACCOUNT_ID
192 );
193
194 --variable declarations
195 l_sqlerrno VARCHAR2(20);
196 l_sqlerrmsg VARCHAR2(2000);
197 p_message VARCHAR2(3000);
198
199 BEGIN
200
201 CSM_UTIL_PKG.LOG('Entering CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_INS Package ', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_INS',FND_LOG.LEVEL_EXCEPTION);
202
203
204 FOR l_cust_accnt_rec IN c_cust_accnt_ins(p_party_id,p_user_id)
205 LOOP
206 CSM_ACC_PKG.Insert_Acc
207 (P_PUBLICATION_ITEM_NAMES => g_accnt_pubi_name
208 ,P_ACC_TABLE_NAME => g_cst_accnt_acc_table_name
209 ,P_SEQ_NAME => g_cst_accnt_seq_name
210 ,P_PK1_NAME => g_cst_accnt_pk1_name
211 ,P_PK1_NUM_VALUE => l_cust_accnt_rec.CUST_ACCOUNT_ID
212 ,P_USER_ID => p_user_id
213 );
214 END LOOP;
215
216 CSM_UTIL_PKG.LOG('Leaving CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_INS Package ', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_INS',FND_LOG.LEVEL_EXCEPTION);
217
218 EXCEPTION
219 WHEN others THEN
220 l_sqlerrno := to_char(SQLCODE);
221 l_sqlerrmsg := substr(SQLERRM, 1,2000);
222 p_message := 'Exception in CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_INS Procedure :' || l_sqlerrno || ':' || l_sqlerrmsg;
223 CSM_UTIL_PKG.LOG(p_message, 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_INS',FND_LOG.LEVEL_EXCEPTION);
224 RAISE;
225
226 END CUST_ACCOUNTS_INS;
227 --update cannot be logically called from anywhere...
228 --but right now its planned to call from JTM LOOKUP PROGRAM
229
230 PROCEDURE CUST_ACCOUNTS_UPD (p_status OUT NOCOPY VARCHAR2,
231 p_message OUT NOCOPY VARCHAR2)
232 IS
233 PRAGMA AUTONOMOUS_TRANSACTION;
234 --CURSOR declarations
235 CURSOR c_cust_accnt_upd(c_last_run_date DATE)
236 IS
237 SELECT acc.access_id,acc.user_id
238 FROM HZ_CUST_ACCOUNTS hzc , CSM_HZ_CUST_ACCOUNTS_ACC acc
239 WHERE hzc.cust_account_id = acc.cust_account_id
240 AND hzc.LAST_UPDATE_DATE > c_last_run_date;
241
242 --cursor to get last run date from jtm_con_request_data
243 CURSOR csr_last_run_date
244 IS
245 SELECT nvl(last_run_date, (sysdate - 365*50) )
246 FROM jtm_con_request_data
247 WHERE package_name = 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG'
248 AND procedure_name = 'CUST_ACCOUNTS_UPD';
249
250 --variable declarations
251 l_cst_account_id HZ_CUST_ACCOUNTS.CUST_ACCOUNT_ID%TYPE;
252 l_sqlerrno varchar2(20);
253 l_sqlerrmsg varchar2(2000);
254 l_markdirty BOOLEAN;
255 l_accessid_lst asg_download.access_list;
256 l_userid_lst asg_download.user_list;
257 l_last_run_date JTM_CON_REQUEST_DATA.LAST_RUN_DATE%TYPE;
258
259 BEGIN
260 CSM_UTIL_PKG.LOG('Entering CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_UPD Package ', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_UPD',FND_LOG.LEVEL_EXCEPTION);
261
262 OPEN csr_last_run_date;
263 FETCH csr_last_run_date INTO l_last_run_date;
264 CLOSE csr_last_run_date;
265
266 OPEN c_cust_accnt_upd(l_last_run_date);
267 LOOP
268 l_userid_lst.DELETE;
269 l_accessid_lst.DELETE;
270
271 FETCH c_cust_accnt_upd BULK COLLECT INTO l_accessid_lst,l_userid_lst LIMIT 1000;
272 EXIT WHEN l_accessid_lst.COUNT=0;
273
274 l_markdirty := asg_download.mark_dirty( g_pub_item,l_accessid_lst ,l_userid_lst, 'U', sysdate );
275
276 COMMIT;
277 END LOOP;
278
279 FOR rec in (SELECT DISTINCT PARTY_ID,USER_ID --any new accounts added ?
280 FROM HZ_CUST_ACCOUNTS hzc , CSM_HZ_CUST_ACCOUNTS_ACC acc
281 WHERE hzc.cust_account_id = acc.cust_account_id
282 AND EXISTS (SELECT 1 FROM HZ_CUST_ACCOUNTS hzc2
283 WHERE hzc2.PARTY_ID = hzc.PARTY_ID
284 AND NOT EXISTS (SELECT 1 FROM CSM_HZ_CUST_ACCOUNTS_ACC acc2
285 WHERE acc2.USER_ID = acc.USER_ID
286 AND acc2.CUST_ACCOUNT_ID = hzc2.CUST_ACCOUNT_ID )))
287 LOOP
288 CUST_ACCOUNTS_INS(rec.PARTY_ID,rec.USER_ID);
289 END LOOP;
290
291 CUST_ACCT_SITES_UPD(l_last_run_date);
292
293
294 UPDATE jtm_con_request_data
295 SET last_run_date = sysdate
296 WHERE package_name = 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG'
297 AND procedure_name = 'CUST_ACCOUNTS_UPD';
298
299 COMMIT;
300 CLOSE c_cust_accnt_upd;
301 p_status := 'FINE';
302 p_message := 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_UPD Executed successfully';
303 CSM_UTIL_PKG.LOG('Leaving CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_UPD Package ', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_UPD',FND_LOG.LEVEL_EXCEPTION);
304
305 EXCEPTION
306 WHEN others THEN
307 l_sqlerrno := to_char(SQLCODE);
308 l_sqlerrmsg := substr(SQLERRM, 1,2000);
309 p_status := 'ERROR';
310 p_message := 'Exception in CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_UPD Procedure :' || l_sqlerrno || ':' || l_sqlerrmsg;
311 CSM_UTIL_PKG.LOG(p_message, 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_UPD',FND_LOG.LEVEL_EXCEPTION);
312 ROLLBACK;
313
314 END CUST_ACCOUNTS_UPD;
315
316 --PROCEDURE IMPLEMENTATION DETAILS
317 --While deleting the records from access table we are not considering the counter value
318 --in the access table this is because we do delete only for the accounts which
319 --doesnot have the corresponding party_id in the CSM_PARTIES_ACC Table.
320 --ie.The Delete depends only the pary acccess table.This delete procedure is called
321 --whenever the pary delete is called
322 PROCEDURE CUST_ACCOUNTS_DEL (p_party_id NUMBER , p_user_id NUMBER)
323 IS
324 --CURSOR declarations
325 CURSOR c_cust_accnt_del(c_party_id NUMBER , c_user_id NUMBER)
326 IS
327 SELECT acc.CUST_ACCOUNT_ID,acc.access_id
328 FROM CSM_HZ_CUST_ACCOUNTS_ACC acc
329 WHERE acc.USER_ID = c_user_id
330 AND NOT EXISTS
331 (
332 SELECT 1
333 FROM CSM_PARTIES_ACC acc
334 WHERE acc.USER_ID = c_user_id
335 AND acc.party_ID = c_party_id
336 );
337
338 --variable declarations
339 l_cst_account_id HZ_CUST_ACCOUNTS.CUST_ACCOUNT_ID%TYPE;
340 l_sqlerrno varchar2(20);
341 l_sqlerrmsg varchar2(2000);
342 p_message VARCHAR(3000);
343 l_access_id CSM_HZ_CUST_ACCOUNTS_ACC.ACCESS_ID%TYPE;
344 l_markdirty BOOLEAN;
345 BEGIN
346
347 CSM_UTIL_PKG.LOG('Entering CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_DEL Package ', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_DEL',FND_LOG.LEVEL_EXCEPTION);
348
349 --take all teh cust_account_id for the party which doesnot exists for the user_id
350 FOR l_cust_accnt_rec IN c_cust_accnt_del(p_party_id,p_user_id)
351 LOOP
352 l_access_id := l_cust_accnt_rec.access_id;
353 CSM_ACC_PKG.Delete_Acc
354 (P_PUBLICATION_ITEM_NAMES => g_accnt_pubi_name
355 ,P_ACC_TABLE_NAME => g_cst_accnt_acc_table_name
356 ,P_PK1_NAME => g_cst_accnt_pk1_name
357 ,P_PK1_NUM_VALUE => l_cust_accnt_rec.CUST_ACCOUNT_ID
358 ,P_USER_ID => p_user_id
359 );
360
361 END LOOP;
362
363 CSM_UTIL_PKG.LOG('Leaving CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_DEL Package ', 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_DEL',FND_LOG.LEVEL_EXCEPTION);
364
365 EXCEPTION
366 WHEN others THEN
367 l_sqlerrno := to_char(SQLCODE);
368 l_sqlerrmsg := substr(SQLERRM, 1,2000);
369 p_message := 'Exception in CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_DEL Procedure : for accessid ' || l_access_id ||': with error' || l_sqlerrno || ':' || l_sqlerrmsg;
370 CSM_UTIL_PKG.LOG(p_message, 'CSM_CUSTOMER_ACCOUNT_EVENT_PKG.CUST_ACCOUNTS_DEL',FND_LOG.LEVEL_EXCEPTION);
371 RAISE;
372
373 END CUST_ACCOUNTS_DEL;
374
375 END CSM_CUSTOMER_ACCOUNT_EVENT_PKG;