[Home] [Help]
PACKAGE BODY: APPS.BIX_POP_AO_SUM_PKG
Source
1 PACKAGE BODY BIX_POP_AO_SUM_PKG AS
2 /* $Header: bixxaosb.plb 115.4 2003/01/09 20:20:20 achanda noship $ */
3
4 g_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID();
5 g_program_appl_id NUMBER := FND_GLOBAL.PROG_APPL_ID();
6 g_program_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID();
7 g_user_id NUMBER := FND_GLOBAL.USER_ID();
8 g_program_start_date DATE := SYSDATE;
9 g_collect_start_date DATE ;
10 g_collect_end_date DATE ;
11 g_error_mesg VARCHAR2(4000) := NULL;
12 g_status VARCHAR2(50) := 'FAILURE';
13 g_commit_chunk_size NUMBER := 100;
14 g_ao_installed CHAR;
15 g_delete_count NUMBER := 0;
16 g_insert_count NUMBER := 0;
17
18 /*===================================================================================================+
19 | INSERT_LOG procedure inserts collection concurrent program status into BIX_DM_COLLECT_LOG table |
20 | It inserts a row with the following details : |
21 | |
22 | COLLECT_STATUS column equals to FAILURE if the program failed otherwise SUCCESS |
23 | COLLECT_EXCEP_MESG as error message if the program failed otherwise NULL |
24 | RUN_START_DATE equals to start date time when the collection program started runnning |
25 | RUN_END_DATE equals end date time of the collection program finished |
26 | COLLECT_START_DATE Collection start date specified by the user in the cuncurrent program parameter |
27 | COLLECT_END_DATE Collection end date specified by the user in the cuncurrent program parameter |
28 ====================================================================================================+*/
29
30 PROCEDURE INSERT_LOG
31 AS
32 BEGIN
33 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
34 ' BIX_POP_AO_SUM_PKG.INSERT_LOG:' ||
35 'Start inserting collection status into BIX_DM_COLLECT_LOG table');
36
37 /* Insert status into log table */
38
39 INSERT INTO BIX_DM_COLLECT_LOG
40 (
41 COLLECT_ID,
42 COLLECT_CONCUR_ID,
43 OBJECT_NAME,
44 OBJECT_TYPE,
45 RUN_START_DATE,
46 RUN_END_DATE,
47 COLLECT_START_DATE,
48 COLLECT_END_DATE,
49 COLLECT_STATUS,
50 COLLECT_EXCEP_MESG,
51 LAST_UPDATE_DATE,
52 LAST_UPDATED_BY,
53 CREATION_DATE,
54 CREATED_BY,
55 LAST_UPDATE_LOGIN,
56 ROWS_INSERTED,
57 ROWS_DELETED,
58 REQUEST_ID,
59 PROGRAM_APPLICATION_ID,
60 PROGRAM_ID,
61 PROGRAM_UPDATE_DATE
62 )
63 VALUES
64 (
65 BIX_DM_COLLECT_LOG_S.NEXTVAL,
66 NULL,
67 'BIX_DM_ADVANCED_OUTBOUND_SUM',
68 'TABLE',
69 g_program_start_date,
70 SYSDATE,
71 g_collect_start_date,
72 g_collect_end_date,
73 g_status,
74 g_error_mesg,
75 SYSDATE,
76 g_user_id,
77 SYSDATE,
78 g_user_id,
79 g_user_id,
80 g_insert_count,
81 g_delete_count,
82 g_request_id,
83 g_program_appl_id,
84 g_program_id,
85 SYSDATE
86 );
87 COMMIT;
88
89 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
90 ' BIX_POP_AO_SUM_PKG.INSERT_LOG:'||
91 'Finished inserting collection status into BIX_DM_COLLECT_LOG table');
92 EXCEPTION
93 WHEN OTHERS THEN
94 fnd_file.put_line(fnd_file.log, TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
95 'BIX_POP_AO_SUM_PKG.INSERT_LOG: ' ||
96 ' Failed to insert rows into BIX_DM_COLLECT_LOG table: '|| sqlerrm);
97 RAISE;
98 END INSERT_LOG;
99
100 /*===================================================================================================+
101 | CLEAN_UP procedure writes error message into FND log file,Rollback the data written into AO |
102 | summary tables and also calls INSERT_LOG procedure to log error messge in BIX_DM_COLLECT_LOG table |
103 +===================================================================================================*/
104
105 PROCEDURE clean_up IS
106 BEGIN
107 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||g_error_mesg);
108 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
109 'Start rolling back from BIX_DM_ADVANCED_OUTBOUND_SUMtable ');
110
111 /* Delete from AO summary table */
112
113 LOOP
114 DELETE bix_dm_advanced_outbound_sum
115 WHERE last_update_date > g_program_start_date
116 AND rownum <= g_commit_chunk_size ;
117
118 IF(SQL%ROWCOUNT < g_commit_chunk_size) THEN
119 COMMIT;
120 EXIT;
121 ELSE
122 COMMIT;
123 END IF;
124
125 END LOOP;
126
127 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
128 ' BIX_POP_AO_SUM_PKG.CLEAN_UP: '||
129 ' Finished rollback from BIM_DM_AO_SUM table: ' );
130
131 INSERT_LOG;
132
133 EXCEPTION
134 WHEN OTHERS THEN
135 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
136 'CLEAN_UP: ERROR: '|| SQLERRM);
137 RAISE;
138 END CLEAN_UP;
139
140
141 PROCEDURE populate(p_start_date_time in date, p_end_date_time in date) AS
142
143 CURSOR ao_sum IS
144 SELECT
145 campaign_schedule_id,
146 source_list_id ,
147 sublist_id,
148 period_start_date,
149 period_start_time,
150 period_start_date_time,
151 COUNT(DISTINCT resource_id) agent_work_on,
152 SUM(DECODE(row_type,'C',1,0)) DIALED,
153 SUM(DECODE(outcome_id,7,1,0)) connected,
154 SUM(DECODE(outcome_id,11,1,0)) abandoned,
155 SUM(DECODE(outcome_id,2,1,0)) busy,
156 SUM(DECODE(outcome_id,1,1,0)) ring_no_ansewr,
157 SUM(DECODE(outcome_id,6,1,0)) answering_machine,
158 SUM(DECODE(outcome_id,22,1,23,1,24,1,25,1,0)) sit,
159 SUM(out_talk_time) talk_time,
160 SUM(out_wrap_time) wrap_time,
161 SUM(leads_created) leads_created,
162 SUM(LEADS_AMOUNT) leads_amount,
163 SUM(LEADS_AMOUNT_TXN) leads_amount_txn,
164 SUM(OPPORTUNITIES_WON + OPPORTUNITIES_CROSS_SOLD + OPPORTUNITIES_UP_SOLD) OPPORTUNITIES_WON,
165 SUM(OPPORTUNITIES_WON_AMOUNT) OPPORTUNITIES_WON_AMOUNT,
166 SUM(OPPORTUNITIES_WON_AMOUNT_TXN) OPPORTUNITIES_WON_AMOUNT_TXN
167 FROM BIX_DM_INTERFACE
168 WHERE direction = 1 --OUTBOUND
169 AND period_start_date_time BETWEEN p_start_date_time AND p_end_date_time
170 GROUP BY
171 campaign_schedule_id,
172 source_list_id ,
173 sublist_id,
174 period_start_date,
175 period_start_time,
176 period_start_date_time;
177
178 TYPE campaign_schedule_id IS TABLE OF bix_dm_advanced_outbound_sum.campaign_schedule_id%TYPE;
179 TYPE source_list_id IS TABLE OF bix_dm_advanced_outbound_sum.source_list_id%TYPE;
180 TYPE sublist_id IS TABLE OF bix_dm_advanced_outbound_sum.sublist_id%TYPE;
181 TYPE period_start_date IS TABLE OF bix_dm_advanced_outbound_sum.period_start_date%TYPE;
182 TYPE period_start_time IS TABLE OF bix_dm_advanced_outbound_sum.period_start_time%TYPE;
183 TYPE period_start_date_time IS TABLE OF bix_dm_advanced_outbound_sum.period_start_date_time%TYPE;
184 TYPE agent_work_on IS TABLE OF bix_dm_advanced_outbound_sum.agent_work_on%TYPE;
185 TYPE talk_time IS TABLE OF bix_dm_advanced_outbound_sum.talk_time%TYPE;
186 TYPE wrap_time IS TABLE OF bix_dm_advanced_outbound_sum.wrap_time%TYPE;
187 TYPE leads_created IS TABLE OF bix_dm_advanced_outbound_sum.leads_created%TYPE;
188 TYPE leads_amount IS TABLE OF bix_dm_advanced_outbound_sum.leads_amount%TYPE;
189 TYPE leads_amount_txn IS TABLE OF bix_dm_advanced_outbound_sum.leads_amount_txn%TYPE;
190 TYPE opportunities_won IS TABLE OF bix_dm_advanced_outbound_sum.opportunities_won%TYPE;
191 TYPE opportunities_won_amount IS TABLE OF bix_dm_advanced_outbound_sum.opportunities_won_amount%TYPE;
192 TYPE opportunities_won_amount_txn IS TABLE OF bix_dm_advanced_outbound_sum.opportunities_won_amount_txn%TYPE;
193 TYPE dialed IS TABLE OF bix_dm_advanced_outbound_sum.dialed_count%TYPE;
194 TYPE connected IS TABLE OF bix_dm_advanced_outbound_sum.connected_count%TYPE;
195 TYPE abandoned IS TABLE OF bix_dm_advanced_outbound_sum.abandoned_count%TYPE;
196 TYPE busy IS TABLE OF bix_dm_advanced_outbound_sum.busy_count%TYPE;
197 TYPE ring_no_answer IS TABLE OF bix_dm_advanced_outbound_sum.ring_no_answer_count%TYPE;
198 TYPE answering_machine IS TABLE OF bix_dm_advanced_outbound_sum.answering_machine_count%TYPE;
199 TYPE sit IS TABLE OF bix_dm_advanced_outbound_sum.sit_count%TYPE;
200
201
202 l_campaign_schedule_id campaign_schedule_id;
203 l_source_list_id source_list_id;
204 l_sublist_id sublist_id;
205 l_period_start_date period_start_date;
206 l_period_start_time period_start_time;
207 l_period_start_date_time period_start_date_time;
208 l_agent_work_on agent_work_on;
209 l_talk_time talk_time;
210 l_wrap_time wrap_time;
211 l_leads_created leads_created;
212 l_leads_amount leads_amount;
213 l_leads_amount_txn leads_amount_txn;
214 l_opportunities_won opportunities_won;
215 l_opportunities_won_amount opportunities_won_amount;
216 l_opportunities_won_amount_txn opportunities_won_amount_txn;
217 l_dialed dialed;
218 l_connected connected;
219 l_abandoned abandoned;
220 l_busy busy;
221 l_ring_no_answer ring_no_answer;
222 l_answering_machine answering_machine;
223 l_sit sit;
224
225 BEGIN
226
227 /* get the commit chunk size */
228
229 IF (FND_PROFILE.DEFINED('BIX_DM_DELETE_SIZE')) THEN
230 g_commit_chunk_size := TO_NUMBER(FND_PROFILE.VALUE('BIX_DM_DELETE_SIZE'));
231 ELSE
232 g_commit_chunk_size := 100;
233 END IF;
234
235 g_collect_start_date := p_start_date_time;
236 g_collect_end_date := p_end_date_time;
237
238 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
239 ' BIX_POP_AO_SUM_PKG.POPULATE: '||
240 ' Start Deleting rows in BIM_DM_AO_SUM table: ' );
241 LOOP
242 --dbms_output.put_line('Start deleting................');
243 DELETE bix_dm_advanced_outbound_sum
244 WHERE PERIOD_START_DATE_TIME >= p_start_date_time
245 AND PERIOD_START_DATE_TIME <= p_end_date_time
246 AND rownum <= g_commit_chunk_size ;
247
248 IF(SQL%ROWCOUNT < g_commit_chunk_size) THEN
249 g_delete_count := g_delete_count + SQL%ROWCOUNT;
250 COMMIT;
251 EXIT;
252 ELSE
253 g_delete_count := g_delete_count + SQL%ROWCOUNT;
254 COMMIT;
255 END IF;
256 END LOOP;
257
258 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
259 ' BIX_POP_AO_SUM_PKG.POPULATE: '||
260 ' Finished Deleting rows in BIM_DM_AO_SUM table: '||
261 'Row count: ' || g_delete_count );
262 OPEN ao_sum;
263
264 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
265 ' BIX_POP_AO_SUM_PKG.POPULATE: '||
266 ' Start inserting rows in BIM_DM_AO_SUM table: ' );
267
268 LOOP
269
270 FETCH ao_sum BULK COLLECT INTO
271 l_campaign_schedule_id,
272 l_source_list_id,
273 l_sublist_id,
274 l_period_start_date,
275 l_period_start_time,
276 l_period_start_date_time,
277 l_agent_work_on,
278 l_dialed,
279 l_connected,
280 l_abandoned,
281 l_busy,
282 l_ring_no_answer,
283 l_answering_machine,
284 l_sit,
285 l_talk_time,
286 l_wrap_time,
287 l_leads_created,
288 l_leads_amount,
289 l_leads_amount_txn,
290 l_opportunities_won,
291 l_opportunities_won_amount,
292 l_opportunities_won_amount_txn
293 LIMIT g_commit_chunk_size;
294
295 --dbms_output.put_line('number of rows: ' || l_campaign_schedule_id.COUNT);
296
297 IF( l_campaign_schedule_id.COUNT > 0) THEN
298 FORALL i IN l_campaign_schedule_id.FIRST .. l_campaign_schedule_id.LAST
299
300 INSERT INTO BIX_DM_ADVANCED_OUTBOUND_SUM
301 (
302 ADVANCED_OUTBOUND_ID,
303 CAMPAIGN_SCHEDULE_ID,
304 SOURCE_LIST_ID,
305 SUBLIST_ID,
306 PERIOD_START_DATE,
307 PERIOD_START_TIME,
308 PERIOD_START_DATE_TIME,
309 LAST_UPDATE_DATE,
310 LAST_UPDATED_BY,
311 CREATION_DATE,
312 CREATED_BY,
313 AGENT_WORK_ON,
314 DIALED_COUNT,
315 CONNECTED_COUNT,
316 ABANDONED_COUNT,
317 BUSY_COUNT,
318 RING_NO_ANSWER_COUNT,
319 ANSWERING_MACHINE_COUNT,
320 SIT_COUNT,
321 TALK_TIME,
322 WRAP_TIME,
323 LEADS_CREATED,
324 LEADS_AMOUNT,
325 LEADS_AMOUNT_TXN,
326 OPPORTUNITIES_WON,
327 OPPORTUNITIES_WON_AMOUNT,
328 OPPORTUNITIES_WON_AMOUNT_TXN,
329 REQUEST_ID,
330 PROGRAM_APPLICATION_ID,
331 PROGRAM_ID,
332 PROGRAM_UPDATE_DATE
333 )
334 VALUES (
335 bix_dm_advanced_outbound_sum_s.NEXTVAL,
336 l_campaign_schedule_id(i),
337 l_source_list_id(i),
338 l_sublist_id(i),
339 l_period_start_date(i),
340 l_period_start_time(i),
341 l_period_start_date_time(i),
342 SYSDATE,
343 g_user_id ,
344 SYSDATE,
345 g_user_id,
346 l_agent_work_on(i),
347 l_dialed(i),
348 l_connected(i),
349 l_abandoned(i),
350 l_busy(i),
351 l_ring_no_answer(i),
352 l_answering_machine(i),
353 l_sit(i),
354 l_talk_time(i),
355 l_wrap_time(i),
356 l_leads_created(i),
357 l_leads_amount(i),
358 l_leads_amount_txn(i),
359 l_opportunities_won(i),
360 l_opportunities_won_amount(i),
361 l_opportunities_won_amount_txn(i),
362 g_request_id,
363 g_program_appl_id,
364 g_program_id,
365 SYSDATE
366 );
367
368 g_insert_count := g_insert_count + l_campaign_schedule_id.COUNT;
369 END IF;
370
371 EXIT WHEN ao_sum%NOTFOUND;
372
373 END LOOP;
374 fnd_file.put_line(fnd_file.log,TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||
375 ' BIX_POP_AO_SUM_PKG.POPULATE: '||
376 ' finished inserting rows in BIM_DM_AO_SUM table: ' );
377 g_status := 'SUCCESS';
378 insert_log;
379
380 EXCEPTION
381 WHEN OTHERS THEN
382 g_error_mesg := 'BIX_POP_AO_SUM_PKG.POPULATE: ERROR: '|| sqlerrm;
383 g_status := 'FAILURE';
384 clean_up;
385 END populate;
386
387 END BIX_POP_AO_SUM_PKG;