1 PACKAGE BODY AMS_TCOP_SUMMARIZATION_PKG AS
2 /* $Header: amsvtcmb.pls 115.2 2004/05/18 11:20:36 mayjain noship $ */
3
4 -- Global Constants that will be used through out the package
5 LOG_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
6 LOG_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
7 LOG_LEVEL_EVENT CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
8 LOG_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
9 LOG_LEVEL_ERROR CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
10 LOG_LEVEL_UNEXPECTED CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
11
12 TYPE NUMBER_ARRAY IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
13 -- ===============================================================
14 -- Start of Comments
15 -- Package name
16 -- AMS_TCOP_SUMMARIZATION_PKG
17 -- Purpose
18 --
19 -- This package contains all the program units for summarizing
20 -- contacts made through fatigue schedules
21 --
22 -- History
23 --
24 -- NOTE
25 --
26 -- End of Comments
27 -- Private procedure to write debug message to FND_LOG table
28 --
29 PROCEDURE write_debug_message(p_log_level NUMBER,
30 p_procedure_name VARCHAR2,
31 p_label VARCHAR2,
32 p_text VARCHAR2
33 )
34 IS
35 l_module_name VARCHAR2(400);
36 DELIMETER CONSTANT VARCHAR2(1) := '.';
37 LABEL_PREFIX CONSTANT VARCHAR2(30) := 'TCOPContactSummarization';
38
39 BEGIN
40
41 IF (p_log_level >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
42 -- Set the Module Name
43 l_module_name := 'ams'||DELIMETER||'plsql'||DELIMETER||G_PACKAGE_NAME||DELIMETER||p_procedure_name||DELIMETER||LABEL_PREFIX||'-'||p_label;
44
45
46 -- Log the Message
47 AMS_UTILITY_PVT.debug_message(p_log_level,
48 l_module_name,
49 p_text
50 );
51
52 END IF;
53
54 AMS_UTILITY_PVT.write_conc_log('['||G_PACKAGE_NAME||DELIMETER||p_procedure_name||DELIMETER||LABEL_PREFIX||'-'||p_label||']'||p_text);
55 --dbms_output.put_line(p_label||': '||p_text);
56
57
58 END write_debug_message;
59 -- ===============================================================
60 -- Start of Comments
61 -- Name
62 -- DELETE_CONTACT_SUMMARIZATION
63 --
64 -- Purpose
65 -- This procedure deletes contact summarization information for all the
66 -- parties present in the given a list
67 --
68 PROCEDURE DELETE_CONTACT_SUMMARIZATION(p_list_header_id NUMBER,
69 p_activity_id NUMBER
70 )
71 IS
72 BEGIN
73
74 delete from ams_tcop_contact_sum_dtl
75 where contact_summary_id in
76 (select summary.contact_summary_id
77 from ams_tcop_contact_summary summary,
78 ams_list_entries list_entry
79 where list_entry.enabled_flag = 'Y'
80 and list_entry.list_header_id = p_list_header_id
81 and list_entry.party_id = summary.party_id );
82
83 delete from ams_tcop_contact_summary
84 where party_id in
85 (select party_id
86 from ams_list_entries
87 where enabled_flag = 'Y'
88 and list_header_id = p_list_header_id);
89
90 -- Delete the records for (party_id,media_id) combination
91 delete from ams_tcop_channel_sum_dtl
92 where channel_summary_id in
93 (select summary.channel_summary_id
94 from ams_tcop_channel_summary summary,
95 ams_list_entries list_entry
96 where list_entry.party_id = summary.party_id
97 and list_entry.list_header_id = p_list_header_id
98 and summary.media_id = p_activity_id
99 and list_entry.enabled_flag = 'Y');
100
101 delete from ams_tcop_channel_summary
102 where party_id in
103 (select summary.PARTY_ID
104 from ams_tcop_channel_summary summary,
105 ams_list_entries list_entry
106 where list_entry.party_id = summary.party_id
107 and list_entry.list_header_id = p_list_header_id
108 and summary.media_id = p_activity_id
109 and list_entry.enabled_flag = 'Y');
110
111
112 END DELETE_CONTACT_SUMMARIZATION;
113
114 -- ===============================================================
115 -- Start of Comments
116 -- Name
117 -- SUMMARIZE_LIST_CONTACTS
118 --
119 -- Purpose
120 -- This procedure considers the set of parties available in the given Target Group.
121 -- For these parties, it summarizes the number of contacts made by fatiguing schedules in the periods
122 -- specified in the Fatigue Rule Setup
123 --
124 PROCEDURE SUMMARIZE_LIST_CONTACTS( p_list_header_id NUMBER,
125 p_activity_id NUMBER
126 )
127 IS
128
129 -- Check if there are any global rules
130 CURSOR C_GET_GLOBAL_RULE
131 IS
132 SELECT RULE.RULE_ID
133 ,PERIOD.NO_OF_DAYS
134 FROM AMS_TCOP_FR_RULES_SETUP RULE
135 ,AMS_TCOP_FR_PERIODS_B period
136 WHERE RULE.RULE_TYPE='GLOBAL'
137 AND RULE.ENABLED_FLAG = 'Y'
138 AND RULE.PERIOD_ID = PERIOD.PERIOD_ID;
139
140 -- Check if there are any Channel Rules for activity_id of the schedule
141 CURSOR C_GET_CHANNEL_RULE
142 IS
143 SELECT rule.RULE_ID,period.no_of_days
144 FROM AMS_TCOP_FR_RULES_SETUP rule
145 ,AMS_TCOP_FR_PERIODS_B period
146 WHERE rule.RULE_TYPE = 'CHANNEL_BASED'
147 AND rule.CHANNEL_ID = p_activity_id
148 AND rule.ENABLED_FLAG = 'Y'
149 AND rule.period_id = period.period_id;
150
151 -- Get the list of fatiguing schedules along with channel information
152 -- which contacted parties in the timeframe specified in the Channel Rule
153 CURSOR C_GET_CHANNEL_SUMMARY(p_list_header_id NUMBER,
154 p_activity_id NUMBER,
155 p_no_of_days NUMBER)
156 IS
157 SELECT contact.party_id,
158 contact.schedule_id
159 FROM AMS_TCOP_CONTACTS contact, AMS_LIST_ENTRIES list_entry
160 WHERE contact.MEDIA_ID = p_activity_id
161 AND (contact_date between (sysdate - p_no_of_days) and sysdate)
162 AND contact.PARTY_ID = list_entry.PARTY_ID
163 AND list_entry.list_header_id = p_list_header_id
164 AND list_entry.enabled_flag = 'Y'
165 order by contact.party_id;
166
167 -- Cursor to select the list of fatiguing schedules which contacted parties
168 -- during the time frame set in the Global Rule
169 CURSOR C_GET_GLOBAL_SUMMARY (p_list_header_id NUMBER, p_no_of_days NUMBER)
170 IS
171 SELECT contact.party_id,
172 contact.schedule_id
173 FROM AMS_TCOP_CONTACTS contact, AMS_LIST_ENTRIES list_entry
174 WHERE (contact_date between (sysdate - p_no_of_days) and sysdate)
175 AND contact.PARTY_ID = list_entry.PARTY_ID
176 AND list_entry.list_header_id = p_list_header_id
177 AND list_entry.enabled_flag = 'Y'
178 order by contact.party_id;
179
180
181 CURSOR C_GET_CONTACT_SUM_NEXT_SEQ
182 IS
183 SELECT AMS_TCOP_CONTACT_SUM_S.nextval
184 FROM DUAL;
185
186 --CURSOR C_GET_CONTACT_SUM_DTL_NEXT_SEQ
187 --IS
188 --SELECT AMS_TCOP_CONTACT_SUM_DTL_S.nextval
189 --FROM DUAL;
190
191 CURSOR C_GET_CHNL_SUM_NEXT_SEQ
192 IS
193 SELECT AMS_TCOP_CHNL_SUM_S.nextval
194 FROM DUAL;
195
196 CURSOR C_GET_CHNL_SUM_DTL_NEXT_SEQ
197 IS
198 SELECT AMS_TCOP_CHNL_SUM_DTL_S.nextval
199 FROM DUAL;
200
201 TYPE NUMBER_ARRAY IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
202
203 -- Get the list of schedules which fatigued the parties
204
205 -- Local Variables
206 l_rule_id NUMBER;
207 l_last_party_id NUMBER;
208 l_media_id NUMBER;
209 j NUMBER;
210 k NUMBER;
211 l_sequence_id NUMBER;
212 l_total_contact_count NUMBER;
213 l_chnl_sum_id NUMBER;
214 l_contact_sum_id NUMBER;
215 l_total_fatigue_contact NUMBER;
216 l_num_days_global_rule NUMBER;
217 l_last_media_id NUMBER;
218 l_num_days_channel_rule NUMBER;
219
220 -- Local Arrays
221 l_temp_party_id_list NUMBER_ARRAY;
222 l_schedule_id_list NUMBER_ARRAY;
223 l_contact_count_list NUMBER_ARRAY;
224 l_temp_media_id_list NUMBER_ARRAY;
225 l_temp_rule_id_list NUMBER_ARRAY;
226 l_chnl_sum_id_list NUMBER_ARRAY;
227 L_CHNL_SUM_DTL_ID_LIST NUMBER_ARRAY;
228 L_CHNL_SUM_ID_LIST_FOR_DTL NUMBER_ARRAY;
229 l_contact_sum_id_list NUMBER_ARRAY;
230 --l_contact_sum_id_dtl_list NUMBER_ARRAY;
231 l_contact_sum_id_list_for_dtl NUMBER_ARRAY;
232 l_total_count_list NUMBER_ARRAY;
233 l_final_party_id_list NUMBER_ARRAY;
234 l_final_media_id_list NUMBER_ARRAY;
235 l_final_rule_id_list NUMBER_ARRAY;
236 l_final_schedule_id_list NUMBER_ARRAY;
237
238
239 PROCEDURE_NAME CONSTANT VARCHAR2(30) := 'SUMMARIZE_LIST_CONTACTS';
240
241 BEGIN
242
243 write_debug_message(LOG_LEVEL_PROCEDURE,
244 PROCEDURE_NAME,
245 'BEGIN',
246 'Beginning Procedure'
247 );
248
249 write_debug_message(LOG_LEVEL_PROCEDURE,
250 PROCEDURE_NAME,
251 'WRITE_INPUT_PARAMETERS',
252 'Summarize Contacts for Target Group. List Header Id = '||to_char(p_list_header_id)
253 );
254
255 write_debug_message(LOG_LEVEL_PROCEDURE,
256 PROCEDURE_NAME,
257 'Before Calling Delete_Contact_Summarization',
258 'Before Calling Delete_Contact_Summarization'
259 );
260 -- Delete from Summarization Tables all the previous entries
261 DELETE_CONTACT_SUMMARIZATION(p_list_header_id,p_activity_id);
262
263 write_debug_message(LOG_LEVEL_EVENT,
264 PROCEDURE_NAME,
265 'After calling DELETE_CONTACT_SUMMARIZATION ',
266 'All the entries deleted from summarization tables'
267 );
268
269 -- Check if there are any Global Rules
270 OPEN C_GET_GLOBAL_RULE;
271 FETCH C_GET_GLOBAL_RULE
272 INTO l_rule_id,l_num_days_global_rule;
273 CLOSE C_GET_GLOBAL_RULE;
274
275 IF (l_rule_id IS NOT NULL) THEN
276
277 write_debug_message(LOG_LEVEL_EVENT,
278 PROCEDURE_NAME,
279 'Global Rule Id is not null',
280 'Global Rule Id = '||to_char(l_rule_id)
281 );
282
283 write_debug_message(LOG_LEVEL_EVENT,
284 PROCEDURE_NAME,
285 'Global Rule Id is not null',
286 ' No of days specified in Global Rule = '||to_char(l_num_days_global_rule)
287 );
288 -- A Global Fatigue Rule is setup in the system
289 -- Get the Total Number of Fatiguing Contacts made in the time frame
290 -- specified in the Global Fatigue Rule
291 OPEN C_GET_GLOBAL_SUMMARY(p_list_header_id,l_num_days_global_rule);
292 FETCH C_GET_GLOBAL_SUMMARY
293 BULK COLLECT INTO l_temp_party_id_list,l_schedule_id_list;
294 CLOSE C_GET_GLOBAL_SUMMARY;
295
296 l_total_fatigue_contact := l_temp_party_id_list.COUNT;
297
298 write_debug_message(LOG_LEVEL_EVENT,
299 PROCEDURE_NAME,
300 'AFTER BULK FETCH FROM C_GET_GLOBAL_SUMMARY CURSOR ',
301 'Total Number of Fatiguing entries = '||to_char(l_total_fatigue_contact)
302 );
303
304 -- Get the List of Schedules which contacted them in the time period
305 -- specified in the Global Fatigue Rule
306 IF (l_total_fatigue_contact > 0) THEN
307 -- Populate arrays to do a Bulk insert for AMS_TCOP_CONTACT_SUMMARY
308
309 -- Initialize Loop Variables
310 l_last_party_id := 0;
311 l_total_contact_count := 0;
312 FOR i IN l_temp_party_id_list.FIRST .. l_temp_party_id_list.LAST
313 LOOP
314 IF (l_temp_party_id_list(i) <> l_last_party_id) THEN
315
316 -- Set the Party Id
317 j := l_final_party_id_list.COUNT + 1;
318 l_final_party_id_list(j) := l_temp_party_id_list(i);
319
320 -- Set the contact_summary_id
321 OPEN C_GET_CONTACT_SUM_NEXT_SEQ;
322 FETCH C_GET_CONTACT_SUM_NEXT_SEQ
323 INTO l_contact_sum_id;
324 CLOSE C_GET_CONTACT_SUM_NEXT_SEQ;
325 l_contact_sum_id_list(j) := l_contact_sum_id;
326
327 -- Assign the total contact count
328 l_contact_count_list(j) := 1;
329
330 ELSE
331
332 -- Increment the total contact count
333 l_contact_count_list(j) := l_contact_count_list(j) + 1;
334
335 END IF;
336
337 -- Set the value for AMS_TCOP_CONTACT_SUM_DTL.contact_summary_id
338 l_contact_sum_id_list_for_dtl(i) := l_contact_sum_id;
339
340 --OPEN C_GET_CONTACT_SUM_DTL_NEXT_SEQ;
344
341 --FETCH C_GET_CONTACT_SUM_DTL_NEXT_SEQ
342 --INTO l_sequence_id;
343 --CLOSE C_GET_CONTACT_SUM_DTL_NEXT_SEQ;
345 -- AMS_TCOP_CONTACT_SUM_DTL.summary_dtl_id
346 --l_contact_sum_id_dtl_list (i) := l_sequence_id;
347
348
349 -- set Loop variables
350 l_last_party_id := l_temp_party_id_list(i);
351
352 END LOOP;
353
354 write_debug_message(LOG_LEVEL_EVENT,
355 PROCEDURE_NAME,
356 'BEFORE BULK UPLOADING AMS_TCOP_CONTACT_SUMMARY',
357 'Total Number of records to be loaded = '||to_char(l_final_party_id_list.COUNT));
358
359 -- Do Bulk Insert into AMS_TCOP_CONTACT_SUMMARY
360 FORALL i in l_final_party_id_list.FIRST .. l_final_party_id_list.LAST
361 INSERT INTO
362 AMS_TCOP_CONTACT_SUMMARY
363 (
364 CONTACT_SUMMARY_ID,
365 RULE_ID,
366 PARTY_ID,
367 TOTAL_CONTACTS,
368 CREATION_DATE,
369 CREATED_BY,
370 LAST_UPDATE_DATE,
371 LAST_UPDATED_BY,
372 LAST_UPDATE_LOGIN
373 )
374 VALUES
375 (
376 l_contact_sum_id_list(i),
377 l_rule_id,
378 l_final_party_id_list(i),
379 l_contact_count_list(i),
380 sysdate,
381 FND_GLOBAL.USER_ID,
382 sysdate,
383 FND_GLOBAL.USER_ID,
384 FND_GLOBAL.USER_ID
385 );
386
387 write_debug_message(LOG_LEVEL_EVENT,
388 PROCEDURE_NAME,
389 'AFTER BULK UPLOADING AMS_TCOP_CONTACT_SUMMARY',
390 'BULK UPLOAD COMPLETED SUCCESSFULLY');
391
392 write_debug_message(LOG_LEVEL_EVENT,
393 PROCEDURE_NAME,
394 'BEFORE BULK UPLOADING AMS_TCOP_CONTACT_SUM_DTL',
395 'Total Number of records to be loaded = '||to_char(l_schedule_id_list.COUNT));
396
397 -- Do Bulk Insert into AMS_TCOP_CONTACT_SUM_DTL
398 FORALL i in l_schedule_id_list.FIRST .. l_schedule_id_list.LAST
399 INSERT INTO
400 AMS_TCOP_CONTACT_SUM_DTL
401 (
402 SUMMARY_DTL_ID,
403 CONTACT_SUMMARY_ID,
404 SCHEDULE_ID,
405 CREATION_DATE,
406 CREATED_BY,
407 LAST_UPDATE_DATE,
408 LAST_UPDATED_BY,
409 LAST_UPDATE_LOGIN
410 )
411 VALUES
412 (
413 --l_contact_sum_id_dtl_list(i),
414 AMS_TCOP_CONTACT_SUM_DTL_S.nextval,
415 l_contact_sum_id_list_for_dtl(i),
416 l_schedule_id_list(i),
417 sysdate,
418 FND_GLOBAL.USER_ID,
419 sysdate,
420 FND_GLOBAL.USER_ID,
421 FND_GLOBAL.USER_ID
422 );
423
424 write_debug_message(LOG_LEVEL_EVENT,
425 PROCEDURE_NAME,
426 'AFTER BULK UPLOADING AMS_TCOP_CONTACT_SUM_DTL',
427 'BULK UPLOAD COMPLETED SUCCESSFULLY');
428
429 END IF; /* (l_party_id_list.COUNT = 0) */
430
431
432 END IF; /* Global Rule Check */
433
434 -- Some of ther collection variables will be re-used, so reset them
435 l_temp_party_id_list.DELETE;
436 l_contact_count_list.DELETE;
437 l_final_party_id_list.DELETE;
438 l_schedule_id_list.DELETE;
439
440
441
442 OPEN C_GET_CHANNEL_RULE;
443 FETCH C_GET_CHANNEL_RULE
444 INTO l_rule_id,l_num_days_channel_rule;
445 CLOSE C_GET_CHANNEL_RULE;
446
447 IF (l_rule_id IS NOT NULL) THEN
448 -- Get the list of parties and contacted channel information
449 -- within the timeperiod specified in the channel rule
450 write_debug_message(LOG_LEVEL_EVENT,
451 PROCEDURE_NAME,
452 'CHANNEL RULE NOT NULL',
453 'Channel Rule Id = '||to_char(l_rule_id)
454 );
455
456 OPEN C_GET_CHANNEL_SUMMARY(p_list_header_id,p_activity_id,
457 l_num_days_channel_rule);
458 FETCH C_GET_CHANNEL_SUMMARY
459 BULK COLLECT INTO
460 l_temp_party_id_list,
461 l_schedule_id_list;
462 CLOSE C_GET_CHANNEL_SUMMARY;
463
464 write_debug_message(LOG_LEVEL_EVENT,
465 PROCEDURE_NAME,
466 'AFTER BULK FETCH FROM C_GET_CHANNEL_SUMMARY CURSOR',
467 'Total Number of contacts by channel = '||to_char(l_temp_party_id_list.COUNT));
468
469 IF (l_temp_party_id_list.COUNT > 0) THEN
470 -- There are some parties contacted by schedules
471 write_debug_message(LOG_LEVEL_EVENT,
472 PROCEDURE_NAME,
473 'CHANNEL CONTACT COUNT GREATER THAN ZERO',
474 'Total number of contacts made by channel greater than zero and the count = '||to_char(l_temp_party_id_list.COUNT)
475 );
476
477 -- Initialize some of the Loop variables
478 l_last_party_id := -1;
479 l_last_media_id := -1;
480
481 FOR i IN l_temp_party_id_list.FIRST .. l_temp_party_id_list.LAST
482 LOOP
483 IF ( (l_temp_party_id_list(i) = l_last_party_id) ) THEN
484
485 -- Increment the count
489 ELSE
486 l_contact_count_list(j) := l_contact_count_list(j) +1;
487
488
490 -- Initialize the Arrays to do a bulk upload for AMS_TCOP_CHANNEL_SUMMARY
491 j := l_final_party_id_list.count + 1;
492 l_final_party_id_list (j) := l_temp_party_id_list(i);
493 l_contact_count_list(j) := 1; -- the count starts
494
495 -- Set the sequence value for channel_summary_id
496 OPEN C_GET_CHNL_SUM_NEXT_SEQ;
497 FETCH C_GET_CHNL_SUM_NEXT_SEQ INTO l_chnl_sum_id;
498 CLOSE C_GET_CHNL_SUM_NEXT_SEQ;
499
500 l_chnl_sum_id_list(j) := l_chnl_sum_id;
501
502 END IF;
503
504 -- Set Values for AMS_TCOP_CHANNEL_SUM_DTL
505 k := l_chnl_sum_dtl_id_list.count + 1;
506
507 -- Set the sequence value for channel_sum_dtl_id
508 OPEN C_GET_CHNL_SUM_DTL_NEXT_SEQ;
509 FETCH C_GET_CHNL_SUM_DTL_NEXT_SEQ INTO l_sequence_id;
510 CLOSE C_GET_CHNL_SUM_DTL_NEXT_SEQ;
511
512 -- Set values for bulk loading of AMS_TCOP_CHANNEL_SUM_DTL
513 l_chnl_sum_dtl_id_list(k) := l_sequence_id;
514 l_chnl_sum_id_list_for_dtl(k) := l_chnl_sum_id;
515
516 -- Set the last party id and media id
517 l_last_party_id := l_temp_party_id_list(i);
518
519
520 END LOOP;
521
522 write_debug_message(LOG_LEVEL_EVENT,
523 PROCEDURE_NAME,
524 'BEFORE_BULK_UPLOADING_AMS_TCOP_CHANNEL_SUMMARY',
525 'Total number of record uploaded = '||to_char(l_final_party_id_list.count)
526 );
527
528 /* Bulk Upload AMS_TCOP_CHANNEL_SUMMARY */
529 FORALL i in l_final_party_id_list.FIRST .. l_final_party_id_list.LAST
530 INSERT INTO
531 AMS_TCOP_CHANNEL_SUMMARY
532 (
533 CHANNEL_SUMMARY_ID,
534 RULE_ID,
535 PARTY_ID,
536 MEDIA_ID,
537 TOTAL_CONTACTS,
538 CREATION_DATE,
539 CREATED_BY,
540 LAST_UPDATE_DATE,
541 LAST_UPDATED_BY,
542 LAST_UPDATE_LOGIN
543 )
544 VALUES
545 (
546 l_chnl_sum_id_list(i),
547 l_rule_id,
548 l_final_party_id_list(i),
549 p_activity_id,
550 l_contact_count_list(i),
551 sysdate,
552 FND_GLOBAL.USER_ID,
553 sysdate,
554 FND_GLOBAL.USER_ID,
555 FND_GLOBAL.USER_ID
556 );
557
558 /* Bulk Upload AMS_TCOP_CHANNEL_SUM_DTL */
559 FORALL i in l_chnl_sum_dtl_id_list.FIRST .. l_chnl_sum_dtl_id_list.LAST
560 INSERT INTO
561 AMS_TCOP_CHANNEL_SUM_DTL
562 (
563 CHANNEL_SUM_DTL_ID,
564 CHANNEL_SUMMARY_ID,
565 SCHEDULE_ID,
566 CREATION_DATE,
567 CREATED_BY,
568 LAST_UPDATE_DATE,
569 LAST_UPDATED_BY,
570 LAST_UPDATE_LOGIN
571 )
572 VALUES
573 (
574 l_chnl_sum_dtl_id_list(i),
575 l_chnl_sum_id_list_for_dtl(i),
576 l_schedule_id_list(i),
577 sysdate,
578 FND_GLOBAL.USER_ID,
579 sysdate,
580 FND_GLOBAL.USER_ID,
581 FND_GLOBAL.USER_ID
582 );
583
584 END IF;
585
586 ELSE
587
588 write_debug_message(LOG_LEVEL_EVENT,
589 PROCEDURE_NAME,
590 'NO CHANNEL RULE EXISTS',
591 'NO Summarization needed for channel rules'
592 );
593
594
595 END IF;/* l_rule_id IS null */
596
597
598 END SUMMARIZE_LIST_CONTACTS;
599
600
601 -- ===============================================================
602 -- Start of Comments
603 -- Name
604 -- UPDATE_CONTACT_COUNT
605 --
606 -- Purpose
607 -- This procedure updates contact count for all the contacted parties
608 --
609 PROCEDURE UPDATE_CONTACT_COUNT(p_party_id_list JTF_NUMBER_TABLE
610 ,p_schedule_id NUMBER
611 ,p_activity_id NUMBER
612 ,p_global_rule_id NUMBER
613 ,p_channel_rule_id NUMBER
614 )
615
616 IS
617 -- Verify if new entries need to be created in AMS_TCOP_CONTACT_SUMMARY
618 -- and in AMS_TCOP_CONTACT_SUM_DTL
619 CURSOR C_GET_EXISTING_PARTY (p_party_id_list JTF_NUMBER_TABLE)
620 IS
621 SELECT summary.PARTY_ID,summary.contact_summary_id
622 FROM AMS_TCOP_CONTACT_SUMMARY summary,
623 (SELECT column_value party_id
624 FROM TABLE(CAST(p_party_id_List as JTF_NUMBER_TABLE))
625 ) party_list
626 WHERE summary.party_id=party_list.party_id;
627
628 CURSOR C_GET_NEW_PARTY (p_original_party_id_list JTF_NUMBER_TABLE
629 ,p_existing_party_id_list JTF_NUMBER_TABLE
630 )
631 IS
632 SELECT orig_party_list.PARTY_ID
633 FROM (SELECT column_value party_id
634 FROM TABLE(CAST(p_original_party_id_list as JTF_NUMBER_TABLE))
638 FROM TABLE(CAST(p_existing_party_id_list as JTF_NUMBER_TABLE))
635 ) orig_party_list
636 WHERE orig_party_list.PARTY_ID NOT IN
637 (SELECT column_value
639 );
640
641 CURSOR C_GET_SUM_DTL_SEQ
642 IS
643 SELECT AMS_TCOP_CONTACT_SUM_DTL_S.NEXTVAL
644 FROM DUAL;
645
646 CURSOR C_GET_CONTACT_SUM_SEQ
647 IS
648 SELECT AMS_TCOP_CONTACT_SUM_S.NEXTVAL
649 FROM DUAL;
650
651 CURSOR C_GET_CHNL_SUM_DTL_SEQ
652 IS
653 SELECT AMS_TCOP_CHNL_SUM_DTL_S.NEXTVAL
654 FROM DUAL;
655
656 CURSOR C_GET_CHNL_SUM_SEQ
657 IS
658 SELECT AMS_TCOP_CHNL_SUM_S.NEXTVAL
659 FROM DUAL;
660
661 -- Get existing entries from AMS_TCOP_CHANNEL_SUMMARY
662 CURSOR C_GET_EXISTING_PARTY_CHNL (p_party_id_list JTF_NUMBER_TABLE
663 ,p_activity_id NUMBER
664 )
665 IS
666 SELECT summary.PARTY_ID,summary.channel_summary_id
667 FROM AMS_TCOP_CHANNEL_SUMMARY summary,
668 (SELECT column_value party_id
669 FROM TABLE(CAST(p_party_id_List as JTF_NUMBER_TABLE))
670 ) party_list
671 WHERE summary.party_id=party_list.party_id
672 AND summary.media_id=p_activity_id;
673
674 -- Get the list of parties which already have a row in
675 -- AMS_TCOP_CONTACT_SUMMARY and in AMS_TCOP_CONTACT_SUM_DTL
676
677 l_existing_party_id_list JTF_NUMBER_TABLE := JTF_NUMBER_TABLE();
678 l_new_party_id_list JTF_NUMBER_TABLE := JTF_NUMBER_TABLE();
679
680 l_contact_summary_id_list NUMBER_ARRAY;
681 l_sum_detail_seq_id_list NUMBER_ARRAY;
682 l_contact_sum_seq_id_list NUMBER_ARRAY;
683 l_chnl_sum_seq_id_list NUMBER_ARRAY;
684 l_channel_summary_id_list NUMBER_ARRAY;
685 l_chnl_sum_detail_seq_id_list NUMBER_ARRAY;
686
687 l_sequence_id NUMBER;
688 l_list_count NUMBER;
689 l_no_existing_party_global BOOLEAN := FALSE;
690 l_no_existing_party_channel BOOLEAN := FALSE;
691
692 --List of Constants
693 PROCEDURE_NAME CONSTANT VARCHAR2(30) := 'UPDATE_CONTACT_COUNT';
694
695
696 BEGIN
697
698 write_debug_message(LOG_LEVEL_PROCEDURE,
699 PROCEDURE_NAME,
700 'BEGIN',
701 'Beginning Procedure'
702 );
703
704 write_debug_message(LOG_LEVEL_EVENT,
705 PROCEDURE_NAME,
706 'DISPLAY_INPUT_PARAMETER',
707 'Schedule Id = '||to_char(p_schedule_id)||', Activity Id = '||to_char(p_activity_id)
708 );
709
710 write_debug_message(LOG_LEVEL_EVENT,
711 PROCEDURE_NAME,
712 'DISPLAY_INPUT_PARAMETER',
713 'Global Rule Id = '||to_char(p_global_rule_id)||', Channel Rule Id = '||to_char(p_channel_rule_id)
714 );
715
716 IF (p_global_rule_id is not null) THEN
717
718 l_list_count := p_party_id_list.COUNT;
719
720 IF (l_list_count > 0) THEN
721
722 write_debug_message(LOG_LEVEL_EVENT,
723 PROCEDURE_NAME,
724 'INPUT_PARTY_ID_COLLECTION_HAS_ENTRIES',
725 'Input parameter Party Id List Count = '||to_char(l_list_count)
726 );
727
728 write_debug_message(LOG_LEVEL_EVENT,
729 PROCEDURE_NAME,
730 'BEFORE CURSOR C_GET_EXISTING_PARTY',
731 'Executing Cursor C_GET_EXISTING_PARTY'
732 );
733
734 -- If there is no global contact rule setup then there is no need
735 -- update the AMS_TCOP_CONTACT_SUMMARY
736
737
738
739 -- Get the existing party list from the Global Summarization Tables
740 OPEN C_GET_EXISTING_PARTY(p_party_id_list);
741 FETCH C_GET_EXISTING_PARTY
742 BULK COLLECT INTO l_existing_party_id_list,l_contact_summary_id_list;
743 CLOSE C_GET_EXISTING_PARTY;
744
745 write_debug_message(LOG_LEVEL_EVENT,
746 PROCEDURE_NAME,
747 'AFTER CURSOR C_GET_EXISTING_PARTY',
748 'Cursor C_GET_EXISTING_PARTY executed successfully'
749 );
750
751 l_list_count := l_existing_party_id_list.COUNT;
752
753 IF (l_list_count > 0) THEN
754 -- There are some existing parties in the summarization tables
755 -- Create an array of sequence ids to populate SUMMARY_DTL_ID column
756 -- of table AMS_TCOP_CONTACT_SUM_DTL
757
758 write_debug_message(LOG_LEVEL_EVENT,
759 PROCEDURE_NAME,
760 'EXISTING_PARTIES_IN_GLOBAL_SUMMARY',
761 'Number of Parties exist in Global Contact Summary = '||to_char(l_list_count)
762 );
763
764 write_debug_message(LOG_LEVEL_EVENT,
765 PROCEDURE_NAME,
766 'START_LOOP_TO_GET_SUM_DTL_SEQ_ARRAY',
767 'Run the cursor C_GET_SUM_DTL_SEQ in a loop to build an array of sequence ids'
768 );
769 FOR i in l_existing_party_id_list.FIRST .. l_existing_party_id_list.LAST
770 LOOP
771 OPEN C_GET_SUM_DTL_SEQ;
772 FETCH C_GET_SUM_DTL_SEQ
773 INTO l_sequence_id;
774 CLOSE C_GET_SUM_DTL_SEQ;
778 END LOOP;
775
776 l_sum_detail_seq_id_list(i) := l_sequence_id;
777
779
780 write_debug_message(LOG_LEVEL_EVENT,
781 PROCEDURE_NAME,
782 'BEFORE_BULK_UPDATE_CONTACT_SUMMARY',
783 'Bulk update AMS_TCOP_CONTACT_SUMMARY to increment the contact count'
784 );
785
786 -- Bulk Update AMS_TCOP_CONTACT_SUMMARY table
787 FORALL i in l_contact_summary_id_list.FIRST .. l_contact_summary_id_list.LAST
788 UPDATE AMS_TCOP_CONTACT_SUMMARY
789 SET TOTAL_CONTACTS = TOTAL_CONTACTS + 1
790 WHERE CONTACT_SUMMARY_ID = l_contact_summary_id_list(i);
791
792 write_debug_message(LOG_LEVEL_EVENT,
793 PROCEDURE_NAME,
794 'AFTER_BULK_UPDATE_CONTACT_SUMMARY',
795 'Bulk update AMS_TCOP_CONTACT_SUMMARY to increment the contact count completed successfully!'
796 );
797
798 write_debug_message(LOG_LEVEL_EVENT,
799 PROCEDURE_NAME,
800 'BEFORE_BULK_INSERT_CONTACT_SUM_DTL_LABEL1',
801 'Bulk Insert AMS_TCOP_CONTACT_SUM_DTL to have the schedule information '
802 );
803
804 -- Bulk Insert into AMS_TCOP_CONTACT_SUM_DTL
805 FORALL i in l_contact_summary_id_list.FIRST .. l_contact_summary_id_list.LAST
806 INSERT INTO
807 AMS_TCOP_CONTACT_SUM_DTL
808 (
809 SUMMARY_DTL_ID,
810 CONTACT_SUMMARY_ID,
811 SCHEDULE_ID,
812 CREATION_DATE,
813 CREATED_BY,
814 LAST_UPDATE_DATE,
815 LAST_UPDATED_BY,
816 LAST_UPDATE_LOGIN
817 )
818 VALUES
819 (
820 l_sum_detail_seq_id_list(i),
821 l_contact_summary_id_list(i),
822 p_schedule_id,
823 sysdate,
824 FND_GLOBAL.USER_ID,
825 sysdate,
826 FND_GLOBAL.USER_ID,
827 FND_GLOBAL.USER_ID
828 );
829
830 write_debug_message(LOG_LEVEL_EVENT,
831 PROCEDURE_NAME,
832 'AFTER_BULK_INSERT_CONTACT_SUM_DTL_LABEL1',
833 'Bulk Insert into AMS_TCOP_CONTACT_SUM_DTL completed successfully'
834 );
835 -- Reset some of the collection variables that will be reused
836 l_sum_detail_seq_id_list.delete;
837
838 write_debug_message(LOG_LEVEL_EVENT,
839 PROCEDURE_NAME,
840 'RESET_COLLECTION_VARIABLES_LABEL1',
841 'Reset collection variable l_sum_detail_seq_id_list'
842 );
843 ELSE
844
845 write_debug_message(LOG_LEVEL_EVENT,
846 PROCEDURE_NAME,
847 'NO_PARTY_EXISTS_IN_GLOBAL_CONTACT_SUMMARY_L1',
848 'No party exists in global contact summary among the parties contacted'
849 );
850
851 l_no_existing_party_global := TRUE;
852
853
854 END IF;
855
856
857 IF (not(l_no_existing_party_global)) THEN
858
859 write_debug_message(LOG_LEVEL_EVENT,
860 PROCEDURE_NAME,
861 'PARTY_EXISTS_IN_GLOBAL_SUMMARY',
862 'Parties already exist in global contact summary'
863 );
864
865 write_debug_message(LOG_LEVEL_EVENT,
866 PROCEDURE_NAME,
867 'BEFORE CURSOR C_GET_NEW_PARTY_LABEL1',
868 'Executing Cursor C_GET_NEW_PARTY to get the list of parties not present in the global contact summary tables'
869 );
870 -- Get the party list not present in the Global Summarization Tables
871 OPEN C_GET_NEW_PARTY(p_party_id_list,l_existing_party_id_list);
872 FETCH C_GET_NEW_PARTY
873 BULK COLLECT INTO l_new_party_id_list;
874 CLOSE C_GET_NEW_PARTY;
875
876 write_debug_message(LOG_LEVEL_EVENT,
877 PROCEDURE_NAME,
878 'AFTER_CURSOR_C_GET_NEW_PARTY_LABEL1',
879 'Cursor C_GET_NEW_PARTY Executed successfully'
880 );
881 ELSE
882 write_debug_message(LOG_LEVEL_EVENT,
883 PROCEDURE_NAME,
884 'NO_PARTY_EXISTS_IN_GLOBAL_CONTACT_SUMMARY_L2',
885 'Copy the input list to the new_party_list'
886 );
887
888 l_new_party_id_list := p_party_id_list;
889
890 write_debug_message(LOG_LEVEL_EVENT,
891 PROCEDURE_NAME,
892 'NO_PARTY_EXISTS_IN_GLOBAL_CONTACT_SUMMARY_L3',
893 'After Copying the input list to the new_party_list'
894 );
895 END IF;
896
897 l_list_count := l_new_party_id_list.COUNT;
898
899 IF (l_list_count > 0) THEN
900
901 write_debug_message(LOG_LEVEL_EVENT,
902 PROCEDURE_NAME,
906
903 'NEW_PARTIES_WHICH_DO_NOT_EXIST_IN_GLOBAL_SUMMARY',
904 'Number of new Parties which do not exist in Global Contact Summary = '||to_char(l_list_count)
905 );
907 write_debug_message(LOG_LEVEL_EVENT,
908 PROCEDURE_NAME,
909 'START_LOOP_AND_CREATE_SEQ_ARRAY_LABEL1',
910 'Start a loop and get next sequence id for contact_sum_s and contact_sum_dtl_s'
911 );
912
913 FOR i in l_new_party_id_list.FIRST .. l_new_party_id_list.LAST
914 LOOP
915
916 OPEN C_GET_CONTACT_SUM_SEQ;
917 FETCH C_GET_CONTACT_SUM_SEQ
918 INTO l_sequence_id;
919 CLOSE C_GET_CONTACT_SUM_SEQ;
920
921 l_contact_sum_seq_id_list(i) := l_sequence_id;
922
923 OPEN C_GET_SUM_DTL_SEQ;
924 FETCH C_GET_SUM_DTL_SEQ
925 INTO l_sequence_id;
926 CLOSE C_GET_SUM_DTL_SEQ;
927
928 l_sum_detail_seq_id_list(i) := l_sequence_id;
929
930 END LOOP;
931
932 write_debug_message(LOG_LEVEL_EVENT,
933 PROCEDURE_NAME,
934 'END_LOOP_AND_CREATE_SEQ_ARRAY_LABEL2',
935 'Successfully completed the loop to get an array of next sequence id for contact_sum_s and contact_sum_dtl_s'
936 );
937
938 write_debug_message(LOG_LEVEL_EVENT,
939 PROCEDURE_NAME,
940 'BEFORE_BULK_INSERT_INTO_CONTACT_SUMMARY',
941 'Bulk Insert the new party ids into the AMS_TCOP_CONTACT_SUMMARY'
942 );
943
944 -- BULK INSERT INTO AMS_TCOP_CONTACT_SUMMARY
945 FORALL i in l_new_party_id_list.FIRST .. l_new_party_id_list.LAST
946 INSERT INTO
947 AMS_TCOP_CONTACT_SUMMARY
948 (
949 CONTACT_SUMMARY_ID,
950 RULE_ID,
951 PARTY_ID,
952 TOTAL_CONTACTS,
953 CREATION_DATE,
954 CREATED_BY,
955 LAST_UPDATE_DATE,
956 LAST_UPDATED_BY,
957 LAST_UPDATE_LOGIN
958 )
959 VALUES
960 (
961 l_contact_sum_seq_id_list(i),
962 p_global_rule_id,
963 l_new_party_id_list(i),
964 1,
965 sysdate,
966 FND_GLOBAL.USER_ID,
967 sysdate,
968 FND_GLOBAL.USER_ID,
969 FND_GLOBAL.USER_ID
970 );
971
972 write_debug_message(LOG_LEVEL_EVENT,
973 PROCEDURE_NAME,
974 'AFTER_BULK_INSERT_INTO_CONTACT_SUMMARY',
975 'Bulk Insertion of the new party ids into the AMS_TCOP_CONTACT_SUMMARY completed successfully'
976 );
977
978 write_debug_message(LOG_LEVEL_EVENT,
979 PROCEDURE_NAME,
980 'AFTER_BULK_INSERT_INTO_CONTACT_SUMMARY',
981 'Bulk Insertion of the new party ids into the AMS_TCOP_CONTACT_SUMMARY completed successfully'
982 );
983
984 write_debug_message(LOG_LEVEL_EVENT,
985 PROCEDURE_NAME,
986 'BEFORE_BULK_INSERT_CONTACT_SUM_DTL_LABEL2',
987 'Bulk Insert AMS_TCOP_CONTACT_SUM_DTL to have the schedule information '
988 );
989
990 -- BULK INSERT INTO AMS_TCOP_CONTACT_SUM_DTL
991 FORALL i in l_sum_detail_seq_id_list.FIRST .. l_sum_detail_seq_id_list.LAST
992 INSERT INTO
993 AMS_TCOP_CONTACT_SUM_DTL
994 (
995 SUMMARY_DTL_ID,
996 CONTACT_SUMMARY_ID,
997 SCHEDULE_ID,
998 CREATION_DATE,
999 CREATED_BY,
1000 LAST_UPDATE_DATE,
1001 LAST_UPDATED_BY,
1002 LAST_UPDATE_LOGIN
1003 )
1004 VALUES
1005 (
1006 l_sum_detail_seq_id_list(i),
1007 l_contact_sum_seq_id_list(i),
1008 p_schedule_id,
1009 sysdate,
1010 FND_GLOBAL.USER_ID,
1011 sysdate,
1012 FND_GLOBAL.USER_ID,
1013 FND_GLOBAL.USER_ID
1014 );
1015
1016 write_debug_message(LOG_LEVEL_EVENT,
1017 PROCEDURE_NAME,
1018 'AFTER_BULK_INSERT_CONTACT_SUM_DTL_LABEL2',
1019 'After Bulk Insert AMS_TCOP_CONTACT_SUM_DTL to have the schedule information '
1020 );
1021
1022 write_debug_message(LOG_LEVEL_EVENT,
1023 PROCEDURE_NAME,
1024 'RESET_COLLECTION_VARIABLES_LABEL2',
1025 'Reset collection variable l_existing_party_id_list,l_new_party_id_list'
1026 );
1027 --Reset some of the collections that will be reused later
1028 l_existing_party_id_list.delete;
1029 l_new_party_id_list.delete;
1030
1031 write_debug_message(LOG_LEVEL_EVENT,
1032 PROCEDURE_NAME,
1036
1033 'AFTER_RESET_COLLECTION_VARIABLES_LABEL2',
1034 'Successful completion of Reset collection variable l_existing_party_id_list,l_new_party_id_list'
1035 );
1037 ELSE
1038
1039 write_debug_message(LOG_LEVEL_EVENT,
1040 PROCEDURE_NAME,
1041 'NO_NEW_PARTIES_NEED_TO_BE_CREATED_IN_GLOBAL_SUMMARY',
1042 'new_party_id_list is zero. No parties need to be created in Contact Summary'
1043 );
1044 END IF;
1045
1046 write_debug_message(LOG_LEVEL_EVENT,
1047 PROCEDURE_NAME,
1048 'BEFORE CURSOR C_GET_EXISTING_PARTY_CHNL',
1049 'Executing Cursor C_GET_EXISTING_PARTY_CHNL to get the list of parties not present in the channel contact summary tables'
1050 );
1051 END IF;
1052
1053 IF (p_channel_rule_id is not null) THEN
1054
1055 IF (NOT (l_no_existing_party_global)) THEN
1056 -- There are some existing parties in global contact summary
1057 -- This step will be skipped if threre are no existing parties
1058 -- global summary, that means there won't be any entries in channel
1059 -- summary
1060
1061 -- Get the existing party list from the Channel Summarization Tables
1062 OPEN C_GET_EXISTING_PARTY_CHNL(p_party_id_list,p_activity_id);
1063 FETCH C_GET_EXISTING_PARTY_CHNL
1064 BULK COLLECT INTO l_existing_party_id_list,l_channel_summary_id_list;
1065 CLOSE C_GET_EXISTING_PARTY_CHNL;
1066
1067 write_debug_message(LOG_LEVEL_EVENT,
1068 PROCEDURE_NAME,
1069 'AFTER CURSOR C_GET_EXISTING_PARTY_CHNL',
1070 'Cursor C_GET_EXISTING_PARTY_CHNL executed successfully to get the list of parties not present in the channel contact summary tables'
1071 );
1072
1073 l_list_count := l_existing_party_id_list.count;
1074 IF (l_list_count > 0) THEN
1075 -- There are some existing parties in the channel summarization tables
1076 -- Create an array of sequence ids to populate CHANNEL_SUM_DTL_ID column
1077 -- of table AMS_TCOP_CHANNEL_SUM_DTL
1078
1079 write_debug_message(LOG_LEVEL_EVENT,
1080 PROCEDURE_NAME,
1081 'PARTIES_EXIST_IN_CHANNEL_SUMMARY',
1082 'Number of new Parties which exist in Channel Contact Summary = '||to_char(l_list_count)
1083 );
1084
1085 write_debug_message(LOG_LEVEL_EVENT,
1086 PROCEDURE_NAME,
1087 'START_LOOP_AND_CREATE_SEQ_ARRAY_LABEL2',
1088 'Start a loop and get next sequence id for channel_sum_dtl_s and create an array'
1089 );
1090
1091 FOR i in l_existing_party_id_list.FIRST .. l_existing_party_id_list.LAST
1092 LOOP
1093 OPEN C_GET_CHNL_SUM_DTL_SEQ;
1094 FETCH C_GET_CHNL_SUM_DTL_SEQ
1095 INTO l_sequence_id;
1096 CLOSE C_GET_CHNL_SUM_DTL_SEQ;
1097
1098 l_chnl_sum_detail_seq_id_list(i) := l_sequence_id;
1099
1100 END LOOP;
1101
1102 write_debug_message(LOG_LEVEL_EVENT,
1103 PROCEDURE_NAME,
1104 'END_LOOP_AND_CREATE_SEQ_ARRAY_LABEL2',
1105 'End loop and get next sequence id for channel_sum_dtl_s with the array populated'
1106 );
1107
1108 write_debug_message(LOG_LEVEL_EVENT,
1109 PROCEDURE_NAME,
1110 'BEFORE_BULK_UPDATE_CHANNEL_SUMMARY',
1111 'Bulk update AMS_TCOP_CHANNEL_SUMMARY to increment the contact count'
1112 );
1113
1114 -- Bulk Update AMS_TCOP_CHANNEL_SUMMARY table
1115 FORALL i in l_channel_summary_id_list.FIRST .. l_channel_summary_id_list.LAST
1116 UPDATE AMS_TCOP_CHANNEL_SUMMARY
1117 SET TOTAL_CONTACTS = TOTAL_CONTACTS + 1
1118 WHERE CHANNEL_SUMMARY_ID = l_channel_summary_id_list(i)
1119 AND MEDIA_ID = p_activity_id;
1120
1121 write_debug_message(LOG_LEVEL_EVENT,
1122 PROCEDURE_NAME,
1123 'AFTER_BULK_UPDATE_CHANNEL_SUMMARY',
1124 'After Bulk update AMS_TCOP_CHANNEL_SUMMARY to increment the contact count'
1125 );
1126
1127 write_debug_message(LOG_LEVEL_EVENT,
1128 PROCEDURE_NAME,
1129 'BEFORE_BULK_INSERT_CHANNEL_SUM_DTL_L1',
1130 'Before Bulk Insert of AMS_TCOP_CHANNEL_SUM_DTL to populate the schedule information'
1131 );
1132
1133 -- Bulk Insert into AMS_TCOP_CHANNEL_SUM_DTL
1134 FORALL i in l_chnl_sum_detail_seq_id_list.FIRST .. l_chnl_sum_detail_seq_id_list.LAST
1135 INSERT INTO
1136 AMS_TCOP_CHANNEL_SUM_DTL
1137 (
1138 CHANNEL_SUM_DTL_ID,
1139 CHANNEL_SUMMARY_ID,
1140 SCHEDULE_ID,
1141 CREATION_DATE,
1142 CREATED_BY,
1143 LAST_UPDATE_DATE,
1144 LAST_UPDATED_BY,
1145 LAST_UPDATE_LOGIN
1149 l_chnl_sum_detail_seq_id_list(i),
1146 )
1147 VALUES
1148 (
1150 l_channel_summary_id_list(i),
1151 p_schedule_id,
1152 sysdate,
1153 FND_GLOBAL.USER_ID,
1154 sysdate,
1155 FND_GLOBAL.USER_ID,
1156 FND_GLOBAL.USER_ID
1157 );
1158
1159 write_debug_message(LOG_LEVEL_EVENT,
1160 PROCEDURE_NAME,
1161 'AFTER_BULK_INSERT_CHANNEL_SUM_DTL_L2',
1162 'After Bulk Insert of AMS_TCOP_CHANNEL_SUM_DTL to populate the schedule information'
1163 );
1164
1165 write_debug_message(LOG_LEVEL_EVENT,
1166 PROCEDURE_NAME,
1167 'RESET_COLLECTION_VARIABLES_LABEL3',
1168 'Reset collection variable l_sum_detail_seq_id_list'
1169 );
1170
1171 --Reset some collection variables
1172 l_sum_detail_seq_id_list.delete;
1173
1174 write_debug_message(LOG_LEVEL_EVENT,
1175 PROCEDURE_NAME,
1176 'AFTER_RESET_COLLECTION_VARIABLES_LABEL3',
1177 'Reset collection variable l_sum_detail_seq_id_list'
1178 );
1179 ELSE
1180
1181 write_debug_message(LOG_LEVEL_EVENT,
1182 PROCEDURE_NAME,
1183 'NO_EXISTING_PARTIES_IN_CHANNEL_SUMMARY',
1184 'No parties exist in the channel summary tables among the parties contacted'
1185 );
1186 l_no_existing_party_channel := TRUE;
1187
1188
1189 END IF;
1190
1191 ELSE
1192 write_debug_message(LOG_LEVEL_EVENT,
1193 PROCEDURE_NAME,
1194 'SKIPPING_EXISTING_PARTIES_IN_CHANNEL_SUMMARY',
1195 'Since no parties exist in the global summary, there will not be any in the channel summary'
1196 );
1197
1198 END IF;
1199
1200 IF (NOT (l_no_existing_party_channel)) THEN
1201
1202 write_debug_message(LOG_LEVEL_EVENT,
1203 PROCEDURE_NAME,
1204 'BEFORE CURSOR C_GET_NEW_PARTY_LABEL2',
1205 'Executing Cursor C_GET_NEW_PARTY to get the list of parties not present in the channel contact summary tables'
1206 );
1207
1208 -- Get the party list not present in the Channel Summarization Tables
1209 OPEN C_GET_NEW_PARTY(p_party_id_list,l_existing_party_id_list);
1210 FETCH C_GET_NEW_PARTY
1211 BULK COLLECT INTO l_new_party_id_list;
1212 CLOSE C_GET_NEW_PARTY;
1213
1214 ELSE
1215 write_debug_message(LOG_LEVEL_EVENT,
1216 PROCEDURE_NAME,
1217 'NO_PARTY_EXISTS_IN_CHANNEL_CONTACT_SUMMARY',
1218 'Copy the input list to the new_party_list'
1219 );
1220
1221 l_new_party_id_list := p_party_id_list;
1222
1223 write_debug_message(LOG_LEVEL_EVENT,
1224 PROCEDURE_NAME,
1225 'NO_PARTY_EXISTS_IN_CHANNEL_CONTACT_SUMMARY',
1226 'After Copying the input list to the new_party_list'
1227 );
1228
1229 END IF;
1230
1231 l_list_count := l_new_party_id_list.COUNT;
1232
1233 IF (l_list_count > 0) THEN
1234
1235 write_debug_message(LOG_LEVEL_EVENT,
1236 PROCEDURE_NAME,
1237 'CREATE_NEW_PARTIES_IN_CHANNEL_SUMMARY',
1238 'Number of new Parties need to be created in Channel Contact Summary = '||to_char(l_list_count)
1239 );
1240
1241 write_debug_message(LOG_LEVEL_EVENT,
1242 PROCEDURE_NAME,
1243 'START_LOOP_AND_CREATE_SEQ_ARRAY_LABEL3',
1244 'Start a loop and get next sequence id for channel_sum_s,channel_sum_dtl_s and create an array'
1245 );
1246
1247 FOR i in l_new_party_id_list.FIRST .. l_new_party_id_list.LAST
1248 LOOP
1249
1250 OPEN C_GET_CHNL_SUM_SEQ;
1251 FETCH C_GET_CHNL_SUM_SEQ
1252 INTO l_sequence_id;
1253 CLOSE C_GET_CHNL_SUM_SEQ;
1254
1255 l_chnl_sum_seq_id_list(i) := l_sequence_id;
1256
1257 OPEN C_GET_CHNL_SUM_DTL_SEQ;
1258 FETCH C_GET_CHNL_SUM_DTL_SEQ
1259 INTO l_sequence_id;
1260 CLOSE C_GET_CHNL_SUM_DTL_SEQ;
1261
1262 l_sum_detail_seq_id_list(i) := l_sequence_id;
1263
1264 END LOOP;
1265
1266 write_debug_message(LOG_LEVEL_EVENT,
1267 PROCEDURE_NAME,
1268 'END_LOOP_AND_CREATE_SEQ_ARRAY_LABEL3',
1269 'End a loop and get next sequence id for channel_sum_s,channel_sum_dtl_s and create an array'
1270 );
1271
1272 write_debug_message(LOG_LEVEL_EVENT,
1273 PROCEDURE_NAME,
1277
1274 'BEFORE_BULK_INSERT_CHANNEL_SUM',
1275 'Before Bulk Insert of AMS_TCOP_CHANNEL_SUMMMARY'
1276 );
1278 -- BULK INSERT INTO AMS_TCOP_CHANNEL_SUMMARY
1279 FORALL i in l_new_party_id_list.FIRST .. l_new_party_id_list.LAST
1280 INSERT INTO
1281 AMS_TCOP_CHANNEL_SUMMARY
1282 (
1283 CHANNEL_SUMMARY_ID,
1284 RULE_ID,
1285 PARTY_ID,
1286 MEDIA_ID,
1287 TOTAL_CONTACTS,
1288 CREATION_DATE,
1289 CREATED_BY,
1290 LAST_UPDATE_DATE,
1291 LAST_UPDATED_BY,
1292 LAST_UPDATE_LOGIN
1293 )
1294 VALUES
1295 (
1296 l_chnl_sum_seq_id_list(i),
1297 p_channel_rule_id,
1298 l_new_party_id_list(i),
1299 p_activity_id,
1300 1,
1301 sysdate,
1302 FND_GLOBAL.USER_ID,
1303 sysdate,
1304 FND_GLOBAL.USER_ID,
1305 FND_GLOBAL.USER_ID
1306 );
1307
1308 write_debug_message(LOG_LEVEL_EVENT,
1309 PROCEDURE_NAME,
1310 'AFTER_BULK_INSERT_CHANNEL_SUM',
1311 'After Bulk Insert of AMS_TCOP_CHANNEL_SUMMMARY'
1312 );
1313
1314 write_debug_message(LOG_LEVEL_EVENT,
1315 PROCEDURE_NAME,
1316 'BEFORE_BULK_INSERT_CHANNEL_SUM_DTL_L2',
1317 'Before Bulk Insert of AMS_TCOP_CHANNEL_SUM_DTL to populate the schedule information'
1318 );
1319
1320 -- BULK INSERT INTO AMS_TCOP_CHANNEL_SUM_DTL
1321 FORALL i in l_sum_detail_seq_id_list.FIRST .. l_sum_detail_seq_id_list.LAST
1322 INSERT INTO
1323 AMS_TCOP_CHANNEL_SUM_DTL
1324 (
1325 CHANNEL_SUM_DTL_ID,
1326 CHANNEL_SUMMARY_ID,
1327 SCHEDULE_ID,
1328 CREATION_DATE,
1329 CREATED_BY,
1330 LAST_UPDATE_DATE,
1331 LAST_UPDATED_BY,
1332 LAST_UPDATE_LOGIN
1333 )
1334 VALUES
1335 (
1336 l_sum_detail_seq_id_list(i),
1337 l_chnl_sum_seq_id_list(i),
1338 p_schedule_id,
1339 sysdate,
1340 FND_GLOBAL.USER_ID,
1341 sysdate,
1342 FND_GLOBAL.USER_ID,
1343 FND_GLOBAL.USER_ID
1344 );
1345
1346 write_debug_message(LOG_LEVEL_EVENT,
1347 PROCEDURE_NAME,
1348 'BEFORE_BULK_INSERT_CHANNEL_SUM_DTL_L2',
1349 'Before Bulk Insert of AMS_TCOP_CHANNEL_SUM_DTL to populate the schedule information'
1350 );
1351
1352
1353 END IF;
1354
1355 END IF;
1356 END IF;
1357
1358
1359
1360
1361
1362 END UPDATE_CONTACT_COUNT;
1363 -- ===============================================================
1364 -- Start of Comments
1365 -- Name
1366 -- SUMMARIZE_ALL_FATIGUE_CONTACTS
1367 --
1368 -- Purpose
1369 -- This procedure summarizes all fatiguing contacts for the periods
1370 -- specified in Fatigue Rule Setup
1371 --
1372 PROCEDURE SUMMARIZE_ALL_FATIGUE_CONTACTS
1373 IS
1374 BEGIN
1375 null;
1376 END SUMMARIZE_ALL_FATIGUE_CONTACTS;
1377
1378
1379 END AMS_TCOP_SUMMARIZATION_PKG;