[Home] [Help]
PACKAGE BODY: APPS.IEC_VALIDATE_PVT
Source
1 PACKAGE BODY IEC_VALIDATE_PVT AS
2 /* $Header: IECVALB.pls 120.11.12020000.2 2012/11/28 11:40:35 rgandhi ship $ */
3
4
5
6 g_pkg_name CONSTANT VARCHAR2(30) := 'IEC_VALIDATE_PVT';
7
8
9
10 TYPE varchar_idx_tbl_type IS TABLE OF VARCHAR2(500)
11
12 INDEX BY BINARY_INTEGER;
13
14 TYPE number_idx_tbl_type IS TABLE OF NUMBER(15)
15
16 INDEX BY BINARY_INTEGER;
17
18
19
20 g_cc_cc_lookup_tbl varchar_idx_tbl_type;
21
22 g_cc_tc_lookup_tbl varchar_idx_tbl_type;
23
24 g_cc_ac_tc_lookup_tbl varchar_idx_tbl_type;
25
26 g_ac_length_tbl varchar_idx_tbl_type;
27
28 g_pn_length_tbl varchar_idx_tbl_type;
29
30 g_tz_lookup_tbl varchar_idx_tbl_type;
31
32
33
34 -- Bulk Collect Batch Size
35
36 g_row_increment CONSTANT NUMBER(9) := 10000;
37
38
39
40 -- Logging variables
41
42 g_fnd_log_enabled BOOLEAN := TRUE;
43
44 g_status VARCHAR2(32) := NULl;
45
46 g_method VARCHAR2(4000) := NULL;
47
48 g_sub_method VARCHAR2(4000) := NULL;
49
50 g_encoded_message VARCHAR2(4000) := NULL;
51
52 g_module VARCHAR2(4000) := NULL;
53
54 g_message VARCHAR2(4000) := NULL;
55
56 g_message_prefix VARCHAR2(4000) := NULL;
57
58 g_start_time DATE := NULL;
59
60 g_end_time DATE := NULL;
61
62 g_ignore VARCHAR2(4000);
63
64
65
66 -- Validation rule configuration variables, set in Init_Rules
67
68 g_enable_zc_lookups BOOLEAN;
69
70 g_enable_tz_map_ovrd BOOLEAN;
71
72 g_enable_cell_phone_val BOOLEAN;
73
74 g_phone_country_code VARCHAR2(60);
75
76 g_territory_code VARCHAR2(2);
77
78 g_enable_ac_incr_parse BOOLEAN;
79
80 g_enable_cc_incr_parse BOOLEAN;
81
82 g_timezone_id NUMBER(15);
83
84 g_region_id NUMBER(15);
85
86 g_require_regions BOOLEAN;
87
88 g_enable_pn_length_val BOOLEAN;
89
90 g_enable_ac_length_val BOOLEAN;
91
92
93
94 PROCEDURE Set_LoggingGlobals
95
96 ( p_status IN VARCHAR2
97
98 , p_method IN VARCHAR2
99
100 , p_sub_method IN VARCHAR2
101
102 )
103
104 IS
105
106 BEGIN
107
108
109
110 g_status := p_status; -- used to create validation history report, not general logging
111
112 g_method := p_method;
113
114 g_sub_method := p_sub_method;
115
116
117
118 IEC_OCS_LOG_PVT.Get_EncodedMessage(g_message, g_encoded_message);
119
120
121
122 IF g_message_prefix IS NOT NULL THEN
123
124 g_module := 'iec.plsql.' || UPPER('IEC_VALIDATE_PVT') || '.' || UPPER(g_method) || '.' || LOWER(g_sub_method) || '.' || LOWER(g_message_prefix);
125
126 ELSE
127
128 g_module := 'iec.plsql.' || UPPER('IEC_VALIDATE_PVT') || '.' || UPPER(g_method) || '.' || LOWER(g_sub_method);
129
130 END IF;
131
132
133
134 END Set_LoggingGlobals;
135
136
137
138 FUNCTION Get_TranslatedErrorMessage
139
140 RETURN VARCHAR2
141
142 IS
143
144 BEGIN
145
146 RETURN g_module || ': ' || g_message;
147
148 END Get_TranslatedErrorMessage;
149
150
151
152 PROCEDURE Set_MessagePrefix
153
154 ( p_action IN VARCHAR2 )
155
156 IS
157
158 BEGIN
159
160 g_message_prefix := p_action;
161
162 END Set_MessagePrefix;
163
164
165
166 PROCEDURE Disable_FndLogging
167
168 IS
169
170 BEGIN
171
172 g_fnd_log_enabled := FALSE;
173
174 END Disable_FndLogging;
175
176
177
178 PROCEDURE Enable_FndLogging
179
180 IS
181
182 BEGIN
183
184 g_fnd_log_enabled := TRUE;
185
186 END Enable_FndLogging;
187
188
189
190 FUNCTION Is_FndLoggingEnabled
191
192 RETURN BOOLEAN
193
194 IS
195
196 BEGIN
197
198 RETURN g_fnd_log_enabled;
199
200 END Is_FndLoggingEnabled;
201
202
203
204 -- Creates generic translatable error message using the
205
206 -- SQLERRM parameter. You should not pass non-translatable
207
208 -- strings (other than SQLERRM) into this procedure b/c
209
210 -- all logs and validation history records must be translatable.
211
212 -- The translatable error message is logged if Immediate Logging
213
214 -- Enabled (Main validation procedure defers logging until
215
216 -- validation history record is created)
217
218 PROCEDURE Log ( p_method IN VARCHAR2
219
220 , p_sub_method IN VARCHAR2
221
222 , p_sqlerrm IN VARCHAR2)
223
224 IS
225
226 BEGIN
227
228
229
230 IEC_OCS_LOG_PVT.Init_ValidationSqlErrmMsg
231
232 ( p_sqlerrm
233
234 , p_method || '.' || p_sub_method
235
236 , g_message
237
238 , g_encoded_message
239
240 );
241
242
243
244 Set_LoggingGlobals
245
246 ( 'FAILED_VALIDATION'
247
248 , p_method
249
250 , p_sub_method
251
252 );
253
254
255
256 IF g_fnd_log_enabled THEN
257
258 IEC_OCS_LOG_PVT.Log_Message(g_module);
259
260 END IF;
261
262
263
264 END Log;
265
266
267 PROCEDURE Log_msg
268 (
269 p_method_name IN VARCHAR2,
270 p_sql_errmsg IN VARCHAR2
271 )
272 IS
273 l_error_msg VARCHAR2(2048);
274 BEGIN
275
276 IEC_OCS_LOG_PVT.LOG_INTERNAL_PLSQL_ERROR
277 (
278 'IEC_VALIDATE_PVT',
279 p_method_name,
280 '',
281 p_sql_errmsg,
282 l_error_msg
283 );
284
285 END Log_msg;
286
287 -- Logs a previously initialized translatable error message
288
289 -- in FND_MESSAGE.
290
291 -- The translatable error message is logged if Immediate Logging
292
293 -- Enabled (Main validation procedure defers logging until
294
295 -- validation history record is created)
296
297 PROCEDURE Log ( p_method IN VARCHAR2
298
299 , p_sub_method IN VARCHAR2)
300
301 IS
302
303 BEGIN
304
305
306
307 -- The message object should already be initialized
308
309 -- prior to calling this Log procedure
310
311 Set_LoggingGlobals
312
313 ( 'FAILED_VALIDATION'
314
315 , p_method
316
317 , p_sub_method
318
319 );
320
321
322
323 IF g_fnd_log_enabled THEN
324
325 IEC_OCS_LOG_PVT.Log_Message(g_module);
326
327 END IF;
328
329
330
331 END Log;
332
333
334
335 PROCEDURE Log_SchemaNameNotFound
336
337 ( p_method IN VARCHAR2
338
339 , p_sub_method IN VARCHAR2
340
341 , p_appl_short_name IN VARCHAR2
342
343 )
344
345 IS
346
347 BEGIN
348
349
350
351 IEC_OCS_LOG_PVT.Init_SqlErrmMsg
352
353 ( p_appl_short_name
354
355 , g_message
356
357 , g_encoded_message
358
359 );
360
361
362
363 -- References FND_MESSAGE object initialized above
364
365 Log(p_method, p_sub_method);
366
367
368
369 END Log_SchemaNameNotFound;
370
371
372
373 FUNCTION Get_AppsSchemaName
374
375 RETURN VARCHAR2
376
377 IS
378
379 l_schema_name VARCHAR2(30);
380
381 BEGIN
382
383
384
385 SELECT ORACLE_USERNAME
386
387 INTO l_schema_name
388
389 FROM FND_ORACLE_USERID
390
391 WHERE READ_ONLY_FLAG = 'U';
392
393
394
395 RETURN l_schema_name;
396
397
398
399 EXCEPTION
400
401 WHEN OTHERS THEN
402
403 Log( 'Get_AppsSchemaName'
404
405 , 'MAIN'
406
407 , SQLERRM);
408
409 RAISE fnd_api.g_exc_unexpected_error;
410
411
412
413 END Get_AppsSchemaName;
414
415
416
417 FUNCTION Get_IecSchemaName
418
419 RETURN VARCHAR2
420
421 IS
422
423 l_return BOOLEAN;
424
425 l_status VARCHAR2(1);
426
427 l_industry VARCHAR2(1);
428
429 l_schema_name VARCHAR2(30);
430
431 BEGIN
432
433 l_return := FND_INSTALLATION.GET_APP_INFO
434
435 ( 'IEC'
436
437 , l_status
438
439 , l_industry
440
441 , l_schema_name
442
443 );
444
445
446
447 IF NOT l_return THEN
448
449 Log_SchemaNameNotFound
450
451 ( 'Get_IecSchemaName'
452
453 , 'CALL_FND_INSTALLATION.GET_APP_INFO'
454
455 , 'IEC');
456
457 RAISE fnd_api.g_exc_unexpected_error;
458
459 END IF;
460
461
462
463 RETURN l_schema_name;
464
465
466
467 END Get_IecSchemaName;
468
469
470
471 PROCEDURE Log_TerritoryNotFound
472
473 ( p_method IN VARCHAR2
474
475 , p_sub_method IN VARCHAR2
476
477 , p_territory_code IN VARCHAR2)
478
479 IS
480
481 BEGIN
482
483
484
485 IEC_OCS_LOG_PVT.Init_TerritoryNotFoundMsg
486
487 ( p_territory_code
488
489 , 'HZ_PHONE_COUNTRY_CODES'
490
491 , g_message
492
493 , g_encoded_message
494
495 );
496
497
498
499 -- References FND_MESSAGE object initialized above
500
501 Log(p_method, p_sub_method);
502
503
504
505 END Log_TerritoryNotFound;
506
507
508
509 PROCEDURE Log_TerritoryNotUnique
510
511 ( p_method IN VARCHAR2
512
513 , p_sub_method IN VARCHAR2
514
515 , p_territory_code IN VARCHAR2)
516
517 IS
518
519 BEGIN
520
521
522
523 IEC_OCS_LOG_PVT.Init_TerritoryNotUniqueMsg
524
525 ( p_territory_code
526
527 , 'HZ_PHONE_COUNTRY_CODES'
528
529 , g_message
530
531 , g_encoded_message
532
533 );
534
535
536
537 -- References FND_MESSAGE object initialized above
538
539 Log(p_method, p_sub_method);
540
541
542
543 END Log_TerritoryNotUnique;
544
545
546
547 PROCEDURE Log_GetSubsetViewError
548
549 ( p_method IN VARCHAR2
550
551 , p_sub_method IN VARCHAR2
552
553 , p_subset_name IN VARCHAR2
554
555 , p_list_name IN VARCHAR2)
556
557 IS
558
559 BEGIN
560
561
562
563 IEC_OCS_LOG_PVT.Init_GetSubsetViewErrorMsg
564
565 ( p_subset_name
566
567 , p_list_name
568
569 , 'IEC_SUBSET_PVT.GET_SUBSET_VIEW'
570
571 , g_message
572
573 , g_encoded_message
574
575 );
576
577
578
579 -- References FND_MESSAGE object initialized above
580
581 Log(p_method, p_sub_method);
582
583
584
585 END Log_GetSubsetViewError;
586
587
588
589 PROCEDURE Log_SubsetViewDoesNotExist
590
591 ( p_method IN VARCHAR2
592
593 , p_sub_method IN VARCHAR2
594
595 , p_subset_name IN VARCHAR2
596
597 , p_list_name IN VARCHAR2)
598
599 IS
600
601 BEGIN
602
603
604
605 IEC_OCS_LOG_PVT.Init_SubsetViewDoesNotExistMsg
606
607 ( p_subset_name
608
609 , p_list_name
610
611 , g_message
612
613 , g_encoded_message
614
615 );
616
617
618
619 -- References FND_MESSAGE object initialized above
620
621 Log(p_method, p_sub_method);
622
623
624
625 END Log_SubsetViewDoesNotExist;
626
627
628
629 PROCEDURE Log_SourceTypeMismatchAll
630
631 ( p_method IN VARCHAR2
632
633 , p_sub_method IN VARCHAR2
634
635 , p_source_type IN VARCHAR2
636
637 , p_source_type_dist IN VARCHAR2)
638
639 IS
640
641 BEGIN
642
643
644
645 IEC_OCS_LOG_PVT.Init_SourceTypeMismatchAllMsg
646
647 ( p_source_type
648
649 , p_source_type_dist
650
651 , g_message
652
653 , g_encoded_message
654
655 );
656
657
658
659 -- References FND_MESSAGE object initialized above
660
661 Log(p_method, p_sub_method);
662
663
664
665 END Log_SourceTypeMismatchAll;
666
667
668
669 PROCEDURE Log_SourceTypeMismatchSome
670
671 ( p_method IN VARCHAR2
672
673 , p_sub_method IN VARCHAR2
674
675 , p_source_type IN VARCHAR2
676
677 , p_source_type_dist IN VARCHAR2)
678
679 IS
680
681 BEGIN
682
683
684
685 IEC_OCS_LOG_PVT.Init_SourceTypeMismatchSomeMsg
686
687 ( p_source_type
688
689 , p_source_type_dist
690
691 , g_message
692
693 , g_encoded_message
694
695 );
696
697
698
699 -- References FND_MESSAGE object initialized above
700
701 Log(p_method, p_sub_method);
702
703
704
705 END Log_SourceTypeMismatchSome;
706
707
708
709 PROCEDURE Log_NoEntriesFound
710
711 ( p_method IN VARCHAR2
712
713 , p_sub_method IN VARCHAR2)
714
715 IS
716
717 BEGIN
718
719
720
721 IEC_OCS_LOG_PVT.Init_NoEntriesFoundMsg
722
723 ( g_message
724
725 , g_encoded_message
726
727 );
728
729
730
731 -- References FND_MESSAGE object initialized above
732
733 Log(p_method, p_sub_method);
734
735
736
737 END Log_NoEntriesFound;
738
739
740
741 PROCEDURE Log_ValidationSuccess
742
743 ( p_method IN VARCHAR2
744
745 , p_sub_method IN VARCHAR2
746
747 , p_total_count IN VARCHAR2
748
749 , p_valid_count IN VARCHAR2)
750
751 IS
752
753 BEGIN
754
755
756
757 IEC_OCS_LOG_PVT.Init_ValidationSuccessMsg
758
759 ( p_total_count
760
761 , p_valid_count
762
763 , g_message
764
765 , g_encoded_message
766
767 );
768
769
770
771 -- References FND_MESSAGE object initialized above
772
773 Set_LoggingGlobals('VALIDATED', p_method, p_sub_method);
774
775
776
777 END Log_ValidationSuccess;
778
779
780
781 PROCEDURE Log_StatusUpdateError
782
783 ( p_method IN VARCHAR2
784
785 , p_sub_method IN VARCHAR2
786
787 , p_list_name IN VARCHAR2)
788
789 IS
790
791 BEGIN
792
793
794
795 IEC_OCS_LOG_PVT.Init_StatusUpdateErrorMsg
796
797 ( p_list_name
798
799 , 'IEC_STATUS_PVT.UPDATE_LIST_STATUS'
800
801 , g_message
802
803 , g_encoded_message
804
805 );
806
807
808
809 -- References FND_MESSAGE object initialized above
810
811 Log(p_method, p_sub_method);
812
813
814
815 END Log_StatusUpdateError;
816
817
818
819 FUNCTION Contains
820
821 ( p_list IN SYSTEM.varchar_tbl_type
822
823 , p_value IN VARCHAR2
824
825 )
826
827 RETURN BOOLEAN
828
829 IS
830
831 BEGIN
832
833
834
835 IF p_list IS NOT NULL AND p_list.COUNT > 0 THEN
836
837 FOR i IN p_list.FIRST..p_list.LAST LOOP
838
839 IF p_list(i) = p_value THEN
840
841 RETURN TRUE;
842
843 END IF;
844
845 END LOOP;
846
847 END IF;
848
849 RETURN FALSE;
850
851
852
853 END Contains;
854
855
856
857 PROCEDURE Log_MissingSourceTypeColumns
858
859 ( p_list_id IN NUMBER
860
861 , p_source_type_view IN VARCHAR2
862
863 , p_source_type_code IN VARCHAR2
864
865 , p_method IN VARCHAR2
866
867 , p_sub_method IN VARCHAR2
868
869 )
870
871 IS
872
873 l_curr VARCHAR2(32);
874
875 l_columns SYSTEM.varchar_tbl_type;
876
877 l_missing_cols VARCHAR2(4000);
878
879 l_ignore VARCHAR2(4000);
880
881 l_table_owner VARCHAR2(30);
882
883 l_check_view_table VARCHAR(30); /* Added for bug 15889040 */
884 BEGIN
885
886
887
888 l_table_owner := Get_AppsSchemaName;
889
890
891
892 -- Change to ALL_TAB_COLS for performance reasons when 9i db becomes prereq
893
894 /* Added for bug 15889040. check against user_objects*/
895
896 BEGIN
897 SELECT object_type into l_check_view_table
898 FROM USER_OBJECTS
899 where OBJECT_NAME = p_source_type_view
900 and object_type = 'VIEW';
901
902 /* p_source_type_view is a view then execute the below statement
903 * otherwise it goes to exception */
904 SELECT COLUMN_NAME
905 BULK COLLECT INTO l_columns
906 FROM ALL_TAB_COLUMNS
907 WHERE TABLE_NAME = p_source_type_view
908 AND OWNER = l_table_owner;
909
910 EXCEPTION
911 WHEN NO_DATA_FOUND Then
912
913 SELECT col.column_name
914 BULK COLLECT INTO l_columns
915 FROM ALL_TAB_COLUMNS col,
916 USER_SYNONYMS SYN
917 WHERE syn.synonym_name = p_source_type_view
918 AND col.owner = syn.table_owner
919 AND col.table_name = syn.table_name;
920 END;
921
922
923 l_curr := 'LIST_ENTRY_ID';
924
925 IF NOT Contains(l_columns, l_curr) THEN
926
927 l_missing_cols := l_missing_cols || ' ' || l_curr;
928
929 END IF;
930
931 l_curr := 'POSTAL_CODE';
932
933 IF NOT Contains(l_columns, l_curr) THEN
934
935 l_missing_cols := l_missing_cols || ' ' || l_curr;
936
937 END IF;
938
939 l_curr := 'DO_NOT_USE_FLAG';
940
941 IF NOT Contains(l_columns, l_curr) THEN
942
943 l_missing_cols := l_missing_cols || ' ' || l_curr;
944
945 END IF;
946
947 l_curr := 'DO_NOT_USE_REASON';
948
949 IF NOT Contains(l_columns, l_curr) THEN
950
951 l_missing_cols := l_missing_cols || ' ' || l_curr;
952
953 END IF;
954
955 l_curr := 'NEWLY_UPDATED_FLAG';
956
957 IF NOT Contains(l_columns, l_curr) THEN
958
959 l_missing_cols := l_missing_cols || ' ' || l_curr;
960
961 END IF;
962
963 l_curr := 'CONTACT_POINT_ID_S1';
964
965 IF NOT Contains(l_columns, l_curr) THEN
966
967 l_missing_cols := l_missing_cols || ' ' || l_curr;
968
969 END IF;
970
971 l_curr := 'TIME_ZONE_S1';
972
973 IF NOT Contains(l_columns, l_curr) THEN
974
975 l_missing_cols := l_missing_cols || ' ' || l_curr;
976
977 END IF;
978
979 l_curr := 'PHONE_COUNTRY_CODE_S1';
980
981 IF NOT Contains(l_columns, l_curr) THEN
982
983 l_missing_cols := l_missing_cols || ' ' || l_curr;
984
985 END IF;
986
987 l_curr := 'PHONE_AREA_CODE_S1';
988
989 IF NOT Contains(l_columns, l_curr) THEN
990
991 l_missing_cols := l_missing_cols || ' ' || l_curr;
992
993 END IF;
994
995 l_curr := 'PHONE_NUMBER_S1';
996
997 IF NOT Contains(l_columns, l_curr) THEN
998
999 l_missing_cols := l_missing_cols || ' ' || l_curr;
1000
1001 END IF;
1002
1003 l_curr := 'RAW_PHONE_NUMBER_S1';
1004
1005 IF NOT Contains(l_columns, l_curr) THEN
1006
1007 l_missing_cols := l_missing_cols || ' ' || l_curr;
1008
1009 END IF;
1010
1011 l_curr := 'REASON_CODE_S1';
1012
1013 IF NOT Contains(l_columns, l_curr) THEN
1014
1015 l_missing_cols := l_missing_cols || ' ' || l_curr;
1016
1017 END IF;
1018
1019 l_curr := 'PHONE_LINE_TYPE_S1';
1020
1021 IF NOT Contains(l_columns, l_curr) THEN
1022
1023 l_missing_cols := l_missing_cols || ' ' || l_curr;
1024
1025 END IF;
1026
1027 l_curr := 'CONTACT_POINT_ID_S2';
1028
1029 IF NOT Contains(l_columns, l_curr) THEN
1030
1031 l_missing_cols := l_missing_cols || ' ' || l_curr;
1032
1033 END IF;
1034
1035 l_curr := 'TIME_ZONE_S2';
1036
1037 IF NOT Contains(l_columns, l_curr) THEN
1038
1039 l_missing_cols := l_missing_cols || ' ' || l_curr;
1040
1041 END IF;
1042
1043 l_curr := 'PHONE_COUNTRY_CODE_S2';
1044
1045 IF NOT Contains(l_columns, l_curr) THEN
1046
1047 l_missing_cols := l_missing_cols || ' ' || l_curr;
1048
1049 END IF;
1050
1051 l_curr := 'PHONE_AREA_CODE_S2';
1052
1053 IF NOT Contains(l_columns, l_curr) THEN
1054
1055 l_missing_cols := l_missing_cols || ' ' || l_curr;
1056
1057 END IF;
1058
1059 l_curr := 'PHONE_NUMBER_S2';
1060
1061 IF NOT Contains(l_columns, l_curr) THEN
1062
1063 l_missing_cols := l_missing_cols || ' ' || l_curr;
1064
1065 END IF;
1066
1067 l_curr := 'RAW_PHONE_NUMBER_S2';
1068
1069 IF NOT Contains(l_columns, l_curr) THEN
1070
1071 l_missing_cols := l_missing_cols || ' ' || l_curr;
1072
1073 END IF;
1074
1075 l_curr := 'REASON_CODE_S2';
1076
1077 IF NOT Contains(l_columns, l_curr) THEN
1078
1079 l_missing_cols := l_missing_cols || ' ' || l_curr;
1080
1081 END IF;
1082
1083 l_curr := 'PHONE_LINE_TYPE_S2';
1084
1085 IF NOT Contains(l_columns, l_curr) THEN
1086
1087 l_missing_cols := l_missing_cols || ' ' || l_curr;
1088
1089 END IF;
1090
1091 l_curr := 'CONTACT_POINT_ID_S3';
1092
1093 IF NOT Contains(l_columns, l_curr) THEN
1094
1095 l_missing_cols := l_missing_cols || ' ' || l_curr;
1096
1097 END IF;
1098
1099 l_curr := 'TIME_ZONE_S3';
1100
1101 IF NOT Contains(l_columns, l_curr) THEN
1102
1103 l_missing_cols := l_missing_cols || ' ' || l_curr;
1104
1105 END IF;
1106
1107 l_curr := 'PHONE_COUNTRY_CODE_S3';
1108
1109 IF NOT Contains(l_columns, l_curr) THEN
1110
1111 l_missing_cols := l_missing_cols || ' ' || l_curr;
1112
1113 END IF;
1114
1115 l_curr := 'PHONE_AREA_CODE_S3';
1116
1117 IF NOT Contains(l_columns, l_curr) THEN
1118
1119 l_missing_cols := l_missing_cols || ' ' || l_curr;
1120
1121 END IF;
1122
1123 l_curr := 'PHONE_NUMBER_S3';
1124
1125 IF NOT Contains(l_columns, l_curr) THEN
1126
1127 l_missing_cols := l_missing_cols || ' ' || l_curr;
1128
1129 END IF;
1130
1131 l_curr := 'RAW_PHONE_NUMBER_S3';
1132
1133 IF NOT Contains(l_columns, l_curr) THEN
1134
1135 l_missing_cols := l_missing_cols || ' ' || l_curr;
1136
1137 END IF;
1138
1139 l_curr := 'REASON_CODE_S3';
1140
1141 IF NOT Contains(l_columns, l_curr) THEN
1142
1143 l_missing_cols := l_missing_cols || ' ' || l_curr;
1144
1145 END IF;
1146
1147 l_curr := 'PHONE_LINE_TYPE_S3';
1148
1149 IF NOT Contains(l_columns, l_curr) THEN
1150
1151 l_missing_cols := l_missing_cols || ' ' || l_curr;
1152
1153 END IF;
1154
1155 l_curr := 'CONTACT_POINT_ID_S4';
1156
1157 IF NOT Contains(l_columns, l_curr) THEN
1158
1159 l_missing_cols := l_missing_cols || ' ' || l_curr;
1160
1161 END IF;
1162
1163 l_curr := 'TIME_ZONE_S4';
1164
1165 IF NOT Contains(l_columns, l_curr) THEN
1166
1167 l_missing_cols := l_missing_cols || ' ' || l_curr;
1168
1169 END IF;
1170
1171 l_curr := 'PHONE_COUNTRY_CODE_S4';
1172
1173 IF NOT Contains(l_columns, l_curr) THEN
1174
1175 l_missing_cols := l_missing_cols || ' ' || l_curr;
1176
1177 END IF;
1178
1179 l_curr := 'PHONE_AREA_CODE_S4';
1180
1181 IF NOT Contains(l_columns, l_curr) THEN
1182
1183 l_missing_cols := l_missing_cols || ' ' || l_curr;
1184
1185 END IF;
1186
1187 l_curr := 'PHONE_NUMBER_S4';
1188
1189 IF NOT Contains(l_columns, l_curr) THEN
1190
1191 l_missing_cols := l_missing_cols || ' ' || l_curr;
1192
1193 END IF;
1194
1195 l_curr := 'RAW_PHONE_NUMBER_S4';
1196
1197 IF NOT Contains(l_columns, l_curr) THEN
1198
1199 l_missing_cols := l_missing_cols || ' ' || l_curr;
1200
1201 END IF;
1202
1203 l_curr := 'REASON_CODE_S4';
1204
1205 IF NOT Contains(l_columns, l_curr) THEN
1206
1207 l_missing_cols := l_missing_cols || ' ' || l_curr;
1208
1209 END IF;
1210
1211 l_curr := 'PHONE_LINE_TYPE_S4';
1212
1213 IF NOT Contains(l_columns, l_curr) THEN
1214
1215 l_missing_cols := l_missing_cols || ' ' || l_curr;
1216
1217 END IF;
1218
1219 l_curr := 'CONTACT_POINT_ID_S5';
1220
1221 IF NOT Contains(l_columns, l_curr) THEN
1222
1223 l_missing_cols := l_missing_cols || ' ' || l_curr;
1224
1225 END IF;
1226
1227 l_curr := 'TIME_ZONE_S5';
1228
1229 IF NOT Contains(l_columns, l_curr) THEN
1230
1231 l_missing_cols := l_missing_cols || ' ' || l_curr;
1232
1233 END IF;
1234
1235 l_curr := 'PHONE_COUNTRY_CODE_S5';
1236
1237 IF NOT Contains(l_columns, l_curr) THEN
1238
1239 l_missing_cols := l_missing_cols || ' ' || l_curr;
1240
1241 END IF;
1242
1243 l_curr := 'PHONE_AREA_CODE_S5';
1244
1245 IF NOT Contains(l_columns, l_curr) THEN
1246
1247 l_missing_cols := l_missing_cols || ' ' || l_curr;
1248
1249 END IF;
1250
1251 l_curr := 'PHONE_NUMBER_S5';
1252
1253 IF NOT Contains(l_columns, l_curr) THEN
1254
1255 l_missing_cols := l_missing_cols || ' ' || l_curr;
1256
1257 END IF;
1258
1259 l_curr := 'RAW_PHONE_NUMBER_S5';
1260
1261 IF NOT Contains(l_columns, l_curr) THEN
1262
1263 l_missing_cols := l_missing_cols || ' ' || l_curr;
1264
1265 END IF;
1266
1267 l_curr := 'REASON_CODE_S5';
1268
1269 IF NOT Contains(l_columns, l_curr) THEN
1270
1271 l_missing_cols := l_missing_cols || ' ' || l_curr;
1272
1273 END IF;
1274
1275 l_curr := 'PHONE_LINE_TYPE_S5';
1276
1277 IF NOT Contains(l_columns, l_curr) THEN
1278
1279 l_missing_cols := l_missing_cols || ' ' || l_curr;
1280
1281 END IF;
1282
1283 l_curr := 'CONTACT_POINT_ID_S6';
1284
1285 IF NOT Contains(l_columns, l_curr) THEN
1286
1287 l_missing_cols := l_missing_cols || ' ' || l_curr;
1288
1289 END IF;
1290
1291 l_curr := 'TIME_ZONE_S6';
1292
1293 IF NOT Contains(l_columns, l_curr) THEN
1294
1295 l_missing_cols := l_missing_cols || ' ' || l_curr;
1296
1297 END IF;
1298
1299 l_curr := 'PHONE_COUNTRY_CODE_S6';
1300
1301 IF NOT Contains(l_columns, l_curr) THEN
1302
1303 l_missing_cols := l_missing_cols || ' ' || l_curr;
1304
1305 END IF;
1306
1307 l_curr := 'PHONE_AREA_CODE_S6';
1308
1309 IF NOT Contains(l_columns, l_curr) THEN
1310
1311 l_missing_cols := l_missing_cols || ' ' || l_curr;
1312
1313 END IF;
1314
1315 l_curr := 'PHONE_NUMBER_S6';
1316
1317 IF NOT Contains(l_columns, l_curr) THEN
1318
1319 l_missing_cols := l_missing_cols || ' ' || l_curr;
1320
1321 END IF;
1322
1323 l_curr := 'RAW_PHONE_NUMBER_S6';
1324
1325 IF NOT Contains(l_columns, l_curr) THEN
1326
1327 l_missing_cols := l_missing_cols || ' ' || l_curr;
1328
1329 END IF;
1330
1331 l_curr := 'REASON_CODE_S6';
1332
1333 IF NOT Contains(l_columns, l_curr) THEN
1334
1335 l_missing_cols := l_missing_cols || ' ' || l_curr;
1336
1337 END IF;
1338
1339 l_curr := 'PHONE_LINE_TYPE_S6';
1340
1341 IF NOT Contains(l_columns, l_curr) THEN
1342
1343 l_missing_cols := l_missing_cols || ' ' || l_curr;
1344
1345 END IF;
1346
1347
1348
1349 IF l_missing_cols IS NOT NULL THEN
1350
1351
1352
1353 IEC_OCS_LOG_PVT.Init_SourceTypeMissingColsMsg
1354
1355 ( p_source_type_code
1356
1357 , l_missing_cols
1358
1359 , g_message
1360
1361 , g_encoded_message
1362
1363 );
1364
1365
1366
1367 -- References FND_MESSAGE object initialized above
1368
1369 Log(p_method, p_sub_method);
1370
1371
1372
1373 END IF;
1374
1375
1376
1377 END Log_MissingSourceTypeColumns;
1378
1379
1380
1381 PROCEDURE Log_CopyDestListInvalidStaMsg
1382
1383 ( p_method IN VARCHAR2
1384
1385 , p_sub_method IN VARCHAR2
1386
1387 , p_src_schedule_name IN VARCHAR2
1388
1389 , p_dest_schedule_name IN VARCHAR2
1390
1391 )
1392
1393 IS
1394
1395 BEGIN
1396
1397
1398
1399 IEC_OCS_LOG_PVT.Init_CopyDestListInvalidStaMsg
1400
1401 ( p_src_schedule_name
1402
1403 , p_dest_schedule_name
1404
1405 , g_message
1406
1407 , g_encoded_message
1408
1409 );
1410
1411
1412
1413 -- References FND_MESSAGE object initialized above
1414
1415 Log(p_method, p_sub_method);
1416
1417
1418
1419 END Log_CopyDestListInvalidStaMsg;
1420
1421
1422
1423 PROCEDURE Log_CopyDestListNotCCRMsg
1424
1425 ( p_method IN VARCHAR2
1426
1427 , p_sub_method IN VARCHAR2
1428
1429 , p_src_schedule_name IN VARCHAR2
1430
1431 , p_dest_schedule_name IN VARCHAR2
1432
1433 )
1434
1435 IS
1436
1437 BEGIN
1438
1439
1440
1441 IEC_OCS_LOG_PVT.Init_CopyDestListNotCCRMsg
1442
1443 ( p_src_schedule_name
1444
1445 , p_dest_schedule_name
1446
1447 , g_message
1448
1449 , g_encoded_message
1450
1451 );
1452
1453
1454
1455 -- References FND_MESSAGE object initialized above
1456
1457 Log(p_method, p_sub_method);
1458
1459
1460
1461 END Log_CopyDestListNotCCRMsg;
1462
1463
1464
1465 PROCEDURE Log_CopyDestListNotValMsg
1466
1467 ( p_method IN VARCHAR2
1468
1469 , p_sub_method IN VARCHAR2
1470
1471 , p_src_schedule_name IN VARCHAR2
1472
1473 , p_dest_schedule_name IN VARCHAR2
1474
1475 )
1476
1477 IS
1478
1479 BEGIN
1480
1481
1482
1483 IEC_OCS_LOG_PVT.Init_CopyDestListNotValMsg
1484
1485 ( p_src_schedule_name
1486
1487 , p_dest_schedule_name
1488
1489 , g_message
1490
1491 , g_encoded_message
1492
1493 );
1494
1495
1496
1497 -- References FND_MESSAGE object initialized above
1498
1499 Log(p_method, p_sub_method);
1500
1501
1502
1503 END Log_CopyDestListNotValMsg;
1504
1505
1506
1507 PROCEDURE Log_CopyDestListNullMsg
1508
1509 ( p_method IN VARCHAR2
1510
1511 , p_sub_method IN VARCHAR2
1512
1513 , p_src_schedule_name IN VARCHAR2
1514
1515 , p_dest_schedule_name IN VARCHAR2
1516
1517 )
1518
1519 IS
1520
1521 BEGIN
1522
1523
1524
1525 IEC_OCS_LOG_PVT.Init_CopyDestListNullMsg
1526
1527 ( p_src_schedule_name
1528
1529 , p_dest_schedule_name
1530
1531 , g_message
1532
1533 , g_encoded_message
1534
1535 );
1536
1537
1538
1539 -- References FND_MESSAGE object initialized above
1540
1541 Log(p_method, p_sub_method);
1542
1543
1544
1545 END Log_CopyDestListNullMsg;
1546
1547
1548
1549 PROCEDURE Log_CopySrcListInvalidStatMsg
1550
1551 ( p_method IN VARCHAR2
1552
1553 , p_sub_method IN VARCHAR2
1554
1555 , p_src_schedule_name IN VARCHAR2
1556
1557 , p_dest_schedule_name IN VARCHAR2
1558
1559 )
1560
1561 IS
1562
1563 BEGIN
1564
1565
1566
1567 IEC_OCS_LOG_PVT.Init_CopySrcListInvalidStatMsg
1568
1569 ( p_src_schedule_name
1570
1571 , p_dest_schedule_name
1572
1573 , g_message
1574
1575 , g_encoded_message
1576
1577 );
1578
1579
1580
1581 -- References FND_MESSAGE object initialized above
1582
1583 Log(p_method, p_sub_method);
1584
1585
1586
1587 END Log_CopySrcListInvalidStatMsg;
1588
1589
1590
1591 PROCEDURE Log_CopySrcListNotCCRMsg
1592
1593 ( p_method IN VARCHAR2
1594
1595 , p_sub_method IN VARCHAR2
1596
1597 , p_src_schedule_name IN VARCHAR2
1598
1599 , p_dest_schedule_name IN VARCHAR2
1600
1601 )
1602
1603 IS
1604
1605 BEGIN
1606
1607
1608
1609 IEC_OCS_LOG_PVT.Init_CopySrcListNotCCRMsg
1610
1611 ( p_src_schedule_name
1612
1613 , p_dest_schedule_name
1614
1615 , g_message
1616
1617 , g_encoded_message
1618
1619 );
1620
1621
1622
1623 -- References FND_MESSAGE object initialized above
1624
1625 Log(p_method, p_sub_method);
1626
1627
1628
1629 END Log_CopySrcListNotCCRMsg;
1630
1631
1632
1633 PROCEDURE Log_CopySrcListNotValMsg
1634
1635 ( p_method IN VARCHAR2
1636
1637 , p_sub_method IN VARCHAR2
1638
1639 , p_src_schedule_name IN VARCHAR2
1640
1641 , p_dest_schedule_name IN VARCHAR2
1642
1643 )
1644
1645 IS
1646
1647 BEGIN
1648
1649
1650
1651 IEC_OCS_LOG_PVT.Init_CopySrcListNotValMsg
1652
1653 ( p_src_schedule_name
1654
1655 , p_dest_schedule_name
1656
1657 , g_message
1658
1659 , g_encoded_message
1660
1661 );
1662
1663
1664
1665 -- References FND_MESSAGE object initialized above
1666
1667 Log(p_method, p_sub_method);
1668
1669
1670
1671 END Log_CopySrcListNotValMsg;
1672
1673
1674
1675 PROCEDURE Log_CopySrcListNullMsg
1676
1677 ( p_method IN VARCHAR2
1678
1679 , p_sub_method IN VARCHAR2
1680
1681 , p_src_schedule_name IN VARCHAR2
1682
1683 , p_dest_schedule_name IN VARCHAR2
1684
1685 )
1686
1687 IS
1688
1689 BEGIN
1690
1691
1692
1693 IEC_OCS_LOG_PVT.Init_CopySrcListNullMsg
1694
1695 ( p_src_schedule_name
1696
1697 , p_dest_schedule_name
1698
1699 , g_message
1700
1701 , g_encoded_message
1702
1703 );
1704
1705
1706
1707 -- References FND_MESSAGE object initialized above
1708
1709 Log(p_method, p_sub_method);
1710
1711
1712
1713 END Log_CopySrcListNullMsg;
1714
1715
1716
1717 PROCEDURE Log_ListRtInfoDNE
1718
1719 ( p_method IN VARCHAR2
1720
1721 , p_sub_method IN VARCHAR2
1722
1723 , p_schedule_name IN VARCHAR2
1724
1725 )
1726
1727 IS
1728
1729 BEGIN
1730
1731
1732
1733 IEC_OCS_LOG_PVT.Init_ListRtInfoDNEMsg
1734
1735 ( p_schedule_name
1736
1737 , g_message
1738
1739 , g_encoded_message
1740
1741 );
1742
1743
1744
1745 -- References FND_MESSAGE object initialized above
1746
1747 Log(p_method, p_sub_method);
1748
1749
1750
1751 END Log_ListRtInfoDNE;
1752
1753
1754
1755 PROCEDURE Log_PurgeListStatusInvMsg
1756
1757 ( p_method IN VARCHAR2
1758
1759 , p_sub_method IN VARCHAR2
1760
1761 , p_schedule_name IN VARCHAR2
1762
1763 )
1764
1765 IS
1766
1767 BEGIN
1768
1769
1770
1771 IEC_OCS_LOG_PVT.Init_PurgeListStatusInvMsg
1772
1773 ( p_schedule_name
1774
1775 , g_message
1776
1777 , g_encoded_message
1778
1779 );
1780
1781
1782
1783 -- References FND_MESSAGE object initialized above
1784
1785 Log(p_method, p_sub_method);
1786
1787
1788
1789 END Log_PurgeListStatusInvMsg;
1790
1791
1792
1793 FUNCTION Get_ListName
1794
1795 (p_list_id IN NUMBER)
1796
1797 RETURN VARCHAR2
1798
1799 IS
1800
1801 l_name VARCHAR2(240);
1802
1803 BEGIN
1804
1805
1806
1807 IEC_COMMON_UTIL_PVT.Get_ListName(p_list_id, l_name);
1808
1809
1810
1811 RETURN l_name;
1812
1813 EXCEPTION
1814
1815 WHEN OTHERS THEN
1816
1817 Log('Get_ListName', 'MAIN');
1818
1819 RAISE fnd_api.g_exc_unexpected_error;
1820
1821 END Get_ListName;
1822
1823
1824
1825 FUNCTION Get_ScheduleName
1826
1827 (p_schedule_id IN NUMBER)
1828
1829 RETURN VARCHAR2
1830
1831 IS
1832
1833 l_name VARCHAR2(240);
1834
1835 BEGIN
1836
1837
1838
1839 IEC_COMMON_UTIL_PVT.Get_ScheduleName(p_schedule_id, l_name);
1840
1841
1842
1843 RETURN l_name;
1844
1845 EXCEPTION
1846
1847 WHEN OTHERS THEN
1848
1849 Log('Get_ScheduleName', 'MAIN');
1850
1851 RAISE fnd_api.g_exc_unexpected_error;
1852
1853 END Get_ScheduleName;
1854
1855
1856
1857 FUNCTION Get_SubsetName
1858
1859 (p_subset_id IN NUMBER)
1860
1861 RETURN VARCHAR2
1862
1863 IS
1864
1865 l_name VARCHAR2(240);
1866
1867 BEGIN
1868
1869
1870
1871 IEC_COMMON_UTIL_PVT.Get_SubsetName(p_subset_id, l_name);
1872
1873
1874
1875 RETURN l_name;
1876
1877 EXCEPTION
1878
1879 WHEN OTHERS THEN
1880
1881 Log('Get_ListName', 'MAIN');
1882
1883 RAISE fnd_api.g_exc_unexpected_error;
1884
1885 END Get_SubsetName;
1886
1887
1888
1889 FUNCTION Get_SourceType
1890
1891 (p_list_id IN NUMBER)
1892
1893 RETURN VARCHAR2
1894
1895 IS
1896
1897 l_source_type VARCHAR2(500);
1898
1899 BEGIN
1900
1901
1902
1903 BEGIN
1904
1905 EXECUTE IMMEDIATE
1906
1907 'SELECT LIST_SOURCE_TYPE
1908
1909 FROM AMS_LIST_HEADERS_ALL
1910
1911 WHERE LIST_HEADER_ID = :list_id'
1912
1913 INTO l_source_type
1914
1915 USING IN p_list_id;
1916
1917
1918
1919 EXCEPTION
1920
1921 WHEN OTHERS THEN
1922
1923 Log( 'Get_SourceType'
1924
1925 , 'MAIN'
1926
1927 , SQLERRM
1928
1929 );
1930
1931 RAISE fnd_api.g_exc_unexpected_error;
1932
1933 END;
1934
1935
1936
1937 RETURN l_source_type;
1938
1939
1940
1941 END Get_SourceType;
1942
1943
1944
1945 FUNCTION Get_SourceTypeView
1946
1947 (p_list_id IN NUMBER)
1948
1949 RETURN VARCHAR2
1950
1951 IS
1952
1953 l_source_type_view VARCHAR2(500);
1954
1955 BEGIN
1956
1957
1958
1959 -- Get Source Type of List
1960
1961 BEGIN
1962
1963 IEC_COMMON_UTIL_PVT.Get_SourceTypeView(p_list_id, l_source_type_view);
1964
1965 EXCEPTION
1966
1967 WHEN OTHERS THEN
1968
1969 -- FND_MESSAGE is initialized but not logged in Get_SourceTypeView
1970
1971 -- if an exception is thrown, so we log it here with current
1972
1973 -- module
1974
1975 Log('Get_SourceTypeView', 'MAIN');
1976
1977 RAISE fnd_api.g_exc_unexpected_error;
1978
1979 END;
1980
1981
1982
1983 RETURN l_source_type_view;
1984
1985
1986
1987 END Get_SourceTypeView;
1988
1989
1990
1991 PROCEDURE Truncate_IecValEntryCache
1992
1993 IS
1994
1995 /* Start of fix for bug7622572 */
1996
1997 /* CURSOR l_trunc_temp_tbles_csr(table_owner VARCHAR2) IS
1998
1999 SELECT 'TRUNCATE TABLE ' || OWNER || '.' || TABLE_NAME SQLSTMT
2000
2001 FROM ALL_TABLES
2002
2003 WHERE TABLE_NAME = 'IEC_VAL_ENTRY_CACHE'
2004
2005 AND OWNER = table_owner;
2006
2007
2008
2009 l_ddl_csr INTEGER; */
2010
2011
2012
2013 -- PRAGMA AUTONOMOUS_TRANSACTION;
2014 -- commented the above line as part of re-fix for the same bug7622572 FP - 8319163
2015
2016 /* End of fix for bug7622572 */
2017
2018
2019
2020 BEGIN
2021
2022 /* Start of fix for bug7622572 */
2023
2024 /* l_ddl_csr := DBMS_SQL.OPEN_CURSOR;
2025
2026
2027
2028 FOR l_rec IN l_trunc_temp_tbles_csr(Get_AppsSchemaName) LOOP
2029
2030 DBMS_SQL.PARSE(l_ddl_csr, l_rec.SQLSTMT, DBMS_SQL.NATIVE);
2031
2032 END LOOP;
2033
2034
2035
2036 DBMS_SQL.CLOSE_CURSOR(l_ddl_csr);
2037
2038
2039
2040 COMMIT; */
2041
2042 delete from IEC_VAL_ENTRY_CACHE;
2043
2044 -- COMMIT;
2045 -- commented the above line as part of re-fix for the same bug7622572 FP - 8319163
2046
2047 /* End of fix for bug7622572 */
2048
2049 EXCEPTION
2050
2051 WHEN OTHERS THEN
2052
2053 ROLLBACK;
2054
2055 RAISE;
2056
2057
2058
2059 END Truncate_IecValEntryCache;
2060
2061
2062
2063 PROCEDURE Truncate_Temporary_Tables
2064
2065 IS
2066
2067 /* Start of fix for bug7622572 */
2068
2069 /* CURSOR l_trunc_temp_tbles_csr(table_owner VARCHAR2) IS
2070
2071 SELECT 'TRUNCATE TABLE ' || OWNER || '.' || TABLE_NAME SQLSTMT
2072
2073 FROM ALL_TABLES
2074
2075 WHERE TABLE_NAME IN ('IEC_TC_TZ_PAIRS_CACHE', 'IEC_TZ_MAPPING_CACHE', 'IEC_TZ_OFFSET_MAP_CACHE', 'IEC_VAL_ENTRY_CACHE')
2076
2077 AND OWNER = table_owner;
2078
2079
2080
2081 l_ddl_csr INTEGER; */
2082
2083 /* End of fix for bug7622572 */
2084
2085 -- PRAGMA AUTONOMOUS_TRANSACTION;
2086
2087 -- commented the above line as part of re-fix for the same bug7622572 FP - 8319163
2088
2089
2090 BEGIN
2091
2092 /* Start of fix for bug7622572 */
2093
2094 /* l_ddl_csr := DBMS_SQL.OPEN_CURSOR;
2095
2096
2097
2098 FOR l_rec IN l_trunc_temp_tbles_csr(Get_AppsSchemaName) LOOP
2099
2100 DBMS_SQL.PARSE(l_ddl_csr, l_rec.SQLSTMT, DBMS_SQL.NATIVE);
2101
2102 END LOOP;
2103
2104
2105
2106 DBMS_SQL.CLOSE_CURSOR(l_ddl_csr); */
2107
2108 delete from IEC_TC_TZ_PAIRS_CACHE;
2109
2110 delete from IEC_TZ_MAPPING_CACHE;
2111
2112 delete from IEC_TZ_OFFSET_MAP_CACHE;
2113
2114 delete from IEC_VAL_ENTRY_CACHE;
2115
2116 -- COMMIT;
2117 -- commented the above line as part of re-fix for the same bug7622572 FP - 8319163
2118
2119 EXCEPTION
2120
2121 WHEN OTHERS THEN
2122
2123 ROLLBACK;
2124
2125 RAISE;
2126
2127
2128
2129 END Truncate_Temporary_Tables;
2130
2131
2132
2133 PROCEDURE Refresh_MViews
2134
2135 IS
2136
2137 PRAGMA AUTONOMOUS_TRANSACTION;
2138
2139 CURSOR Get_MaterializedViews(mview_owner VARCHAR2) IS
2140
2141 SELECT OWNER || '.' || MVIEW_NAME MVIEW_LNAME
2142
2143 FROM ALL_MVIEWS
2144
2145 WHERE MVIEW_NAME IN ('IEC_O_VAL_DNU_S1_COUNTS_MV', 'IEC_O_VAL_DNU_S2_COUNTS_MV', 'IEC_O_VAL_DNU_S3_COUNTS_MV', 'IEC_O_VAL_DNU_S4_COUNTS_MV', 'IEC_O_VAL_DNU_S5_COUNTS_MV', 'IEC_O_VAL_DNU_S6_COUNTS_MV')
2146
2147 AND OWNER = mview_owner;
2148
2149
2150
2151 BEGIN
2152
2153
2154
2155 FOR rec IN Get_MaterializedViews(Get_IecSchemaName) LOOP
2156
2157 DBMS_MVIEW.REFRESH(rec.MVIEW_LNAME, 'C');
2158
2159 END LOOP;
2160
2161
2162
2163 COMMIT;
2164
2165 EXCEPTION
2166
2167 WHEN OTHERS THEN
2168
2169 ROLLBACK;
2170
2171 RAISE;
2172
2173 END Refresh_MViews;
2174
2175
2176
2177 PROCEDURE Init_GlobalVariables
2178
2179 IS
2180
2181 BEGIN
2182
2183
2184
2185 g_enable_zc_lookups := FALSE;
2186
2187 g_enable_tz_map_ovrd := FALSE;
2188
2189 g_enable_cell_phone_val := TRUE;
2190
2191 g_phone_country_code := NULL;
2192
2193 g_territory_code := NULL;
2194
2195 g_enable_ac_incr_parse := FALSE;
2196
2197 g_enable_cc_incr_parse := FALSE;
2198
2199 g_timezone_id := NULL;
2200
2201 g_region_id := NULL;
2202
2203 g_enable_ac_length_val := TRUE;
2204
2205 g_enable_pn_length_val := TRUE;
2206
2207
2208
2209 END Init_GlobalVariables;
2210
2211
2212
2213 PROCEDURE Init_LoggingVariables
2214
2215 IS
2216
2217 BEGIN
2218
2219
2220
2221 g_fnd_log_enabled := TRUE;
2222
2223 g_status := NULl;
2224
2225 g_method := NULL;
2226
2227 g_sub_method := NULL;
2228
2229 g_message := NULL;
2230
2231 g_encoded_message := NULL;
2232
2233 g_module := NULL;
2234
2235 g_start_time := NULL;
2236
2237 g_end_time := NULL;
2238
2239
2240
2241 END Init_LoggingVariables;
2242
2243
2244
2245 PROCEDURE Init_LookupTables
2246
2247 IS
2248
2249 BEGIN
2250
2251
2252
2253 FOR cc_rec IN (SELECT DISTINCT B.PHONE_COUNTRY_CODE, B.AREA_CODE_LENGTH
2254
2255 FROM HZ_PHONE_COUNTRY_CODES B
2256
2257 WHERE B.AREA_CODE_LENGTH IS NOT NULL
2258
2259 AND (1, B.PHONE_COUNTRY_CODE) = (SELECT COUNT(*) COUNT, PHONE_COUNTRY_CODE
2260
2261 FROM (SELECT DISTINCT PHONE_COUNTRY_CODE, AREA_CODE_LENGTH
2262
2263 FROM HZ_PHONE_COUNTRY_CODES
2264
2265 WHERE AREA_CODE_LENGTH IS NOT NULL)
2266
2267 WHERE PHONE_COUNTRY_CODE = B.PHONE_COUNTRY_CODE GROUP BY PHONE_COUNTRY_CODE))
2268
2269 LOOP
2270
2271 g_ac_length_tbl(cc_rec.PHONE_COUNTRY_CODE) := cc_rec.AREA_CODE_LENGTH;
2272
2273 END LOOP;
2274
2275
2276
2277 FOR cc_rec IN (SELECT DISTINCT B.PHONE_COUNTRY_CODE, (B.PHONE_LENGTH - B.AREA_CODE_LENGTH) PN_LENGTH
2278
2279 FROM HZ_PHONE_COUNTRY_CODES B
2280
2281 WHERE B.PHONE_LENGTH IS NOT NULL
2282
2283 AND (1, B.PHONE_COUNTRY_CODE) = (SELECT COUNT(*) COUNT, PHONE_COUNTRY_CODE
2284
2285 FROM (SELECT DISTINCT PHONE_COUNTRY_CODE, PHONE_LENGTH
2286
2287 FROM HZ_PHONE_COUNTRY_CODES
2288
2289 WHERE PHONE_LENGTH IS NOT NULL)
2290
2291 WHERE PHONE_COUNTRY_CODE = B.PHONE_COUNTRY_CODE GROUP BY PHONE_COUNTRY_CODE))
2292
2293 LOOP
2294
2295 g_pn_length_tbl(cc_rec.PHONE_COUNTRY_CODE) := cc_rec.PN_LENGTH;
2296
2297 END LOOP;
2298
2299
2300
2301 FOR cc_rec IN (SELECT DISTINCT PHONE_COUNTRY_CODE, TERRITORY_CODE
2302
2303 FROM HZ_PHONE_COUNTRY_CODES A WHERE 1 = (SELECT COUNT(*)
2304
2305 FROM HZ_PHONE_COUNTRY_CODES
2306
2307 WHERE PHONE_COUNTRY_CODE = A.PHONE_COUNTRY_CODE))
2308
2309 LOOP
2310
2311 g_cc_tc_lookup_tbl(cc_rec.PHONE_COUNTRY_CODE) := cc_rec.TERRITORY_CODE;
2312
2313 END LOOP;
2314
2315
2316
2317 FOR cc_rec IN (SELECT DISTINCT PHONE_COUNTRY_CODE
2318
2319 FROM HZ_PHONE_COUNTRY_CODES)
2320
2321 LOOP
2322
2323 g_cc_cc_lookup_tbl(cc_rec.PHONE_COUNTRY_CODE) := cc_rec.PHONE_COUNTRY_CODE;
2324
2325 END LOOP;
2326
2327
2328
2329 FOR cc_rec IN (SELECT DISTINCT PHONE_COUNTRY_CODE, AREA_CODE, TERRITORY_CODE
2330
2331 FROM HZ_PHONE_AREA_CODES)
2332
2333 LOOP
2334
2335 g_cc_ac_tc_lookup_tbl(cc_rec.PHONE_COUNTRY_CODE || cc_rec.AREA_CODE) := cc_rec.TERRITORY_CODE;
2336
2337 END LOOP;
2338
2339
2340
2341 -- FOR cc_rec IN (SELECT TIMEZONE_ID FROM HZ_TIMEZONES_VL) //bug6449880
2342 FOR cc_rec IN (SELECT UPGRADE_TZ_ID FROM FND_TIMEZONES_VL) -- bug6449880
2343 LOOP
2344
2345 -- g_tz_lookup_tbl(cc_rec.TIMEZONE_ID) := cc_rec.TIMEZONE_ID; //bug6449880
2346 g_tz_lookup_tbl(cc_rec.UPGRADE_TZ_ID) := cc_rec.UPGRADE_TZ_ID; --bug6449880
2347
2348 END LOOP;
2349
2350
2351
2352 END Init_LookupTables;
2353
2354
2355
2356 PROCEDURE Init_Rules
2357
2358 (p_list_id IN NUMBER)
2359
2360 IS
2361
2362 l_rule_block_id NUMBER(15);
2363
2364 l_action_id NUMBER(15);
2365
2366 l_action_code VARCHAR2(500);
2367
2368 l_data_code VARCHAR2(500);
2369
2370 l_data_code_col SYSTEM.varchar_tbl_type := SYSTEM.varchar_tbl_type();
2371
2372 l_data_value_col SYSTEM.varchar_tbl_type := SYSTEM.varchar_tbl_type();
2373
2374
2375
2376 l_count PLS_INTEGER;
2377
2378 BEGIN
2379
2380
2381
2382 BEGIN
2383
2384 EXECUTE IMMEDIATE
2385
2386 'SELECT VALIDATION_ACTION_BLOCK_ID
2387
2388 FROM IEC_G_LIST_RT_INFO
2389
2390 WHERE LIST_HEADER_ID = :list_id'
2391
2392 INTO l_rule_block_id
2393
2394 USING p_list_id;
2395
2396 EXCEPTION
2397
2398 WHEN NO_DATA_FOUND THEN
2399
2400 l_rule_block_id := NULL;
2401
2402 WHEN OTHERS THEN
2403
2404 Log( 'INIT_RULES'
2405
2406 , 'GET_RULE_BLOCK_ID'
2407
2408 , SQLERRM
2409
2410 );
2411
2412 RAISE fnd_api.g_exc_unexpected_error;
2413
2414 END;
2415
2416
2417
2418 IF l_rule_block_id IS NOT NULL THEN
2419
2420
2421
2422 -- ENABLE TIME ZONE MAPPING WITH ZIPCODE?
2423
2424 l_action_id := NULL;
2425
2426 l_action_code := 'TIMEZONE_MAPPING_WITH_ZIP';
2427
2428 BEGIN
2429
2430 EXECUTE IMMEDIATE
2431
2432 'SELECT ACTION_ID
2433
2434 FROM IEC_O_ALG_ACTIONS
2435
2436 WHERE PARENT_BLOCK_ID = :rule_block_id
2437
2438 AND ACTION_CODE = :action_code'
2439
2440 INTO l_action_id
2441
2442 USING l_rule_block_id, l_action_code;
2443
2444 EXCEPTION
2445
2446 WHEN NO_DATA_FOUND THEN
2447
2448 g_enable_zc_lookups := FALSE;
2449
2450 WHEN TOO_MANY_ROWS THEN
2451
2452 g_enable_zc_lookups := TRUE;
2453
2454 END;
2455
2456
2457
2458 IF l_action_id IS NOT NULL THEN
2459
2460 g_enable_zc_lookups := TRUE;
2461
2462 END IF;
2463
2464
2465
2466 -- ENABLE TIME ZONE MAPPINGS TO OVER RIDE PROVIDED DATA
2467
2468 l_action_id := NULL;
2469
2470 l_action_code := 'TZ_MAP_OVR_RIDE';
2471
2472 BEGIN
2473
2474 EXECUTE IMMEDIATE
2475
2476 'SELECT ACTION_ID
2477
2478 FROM IEC_O_ALG_ACTIONS
2479
2480 WHERE PARENT_BLOCK_ID = :rule_block_id
2481
2482 AND ACTION_CODE = :action_code'
2483
2484 INTO l_action_id
2485
2486 USING l_rule_block_id, l_action_code;
2487
2488 EXCEPTION
2489
2490 WHEN NO_DATA_FOUND THEN
2491
2492 g_enable_tz_map_ovrd := FALSE;
2493
2494 WHEN TOO_MANY_ROWS THEN
2495
2496 g_enable_tz_map_ovrd := TRUE;
2497
2498 END;
2499
2500
2501
2502 IF l_action_id IS NOT NULL THEN
2503
2504 g_enable_tz_map_ovrd := TRUE;
2505
2506 END IF;
2507
2508
2509
2510 -- ENABLE INCREMENTAL PARSING OF AREA CODE FROM PHONE NUMBER FIELD
2511
2512 l_action_id := NULL;
2513
2514 l_action_code := 'INCR_PARSE_AC';
2515
2516 BEGIN
2517
2518 EXECUTE IMMEDIATE
2519
2520 'SELECT ACTION_ID
2521
2522 FROM IEC_O_ALG_ACTIONS
2523
2524 WHERE PARENT_BLOCK_ID = :rule_block_id
2525
2526 AND ACTION_CODE = :action_code'
2527
2528 INTO l_action_id
2529
2530 USING l_rule_block_id, l_action_code;
2531
2532 EXCEPTION
2533
2534 WHEN NO_DATA_FOUND THEN
2535
2536 g_enable_ac_incr_parse := FALSE;
2537
2538 WHEN TOO_MANY_ROWS THEN
2539
2540 g_enable_ac_incr_parse := TRUE;
2541
2542 END;
2543
2544
2545
2546 IF l_action_id IS NOT NULL THEN
2547
2548 g_enable_ac_incr_parse := TRUE;
2549
2550 END IF;
2551
2552
2553
2554 -- ENABLE INCREMENTAL PARSING OF COUNTRY CODE FROM PHONE NUMBER FIELD
2555
2556 l_action_id := NULL;
2557
2558 l_action_code := 'INCR_PARSE_CC';
2559
2560 BEGIN
2561
2562 EXECUTE IMMEDIATE
2563
2564 'SELECT ACTION_ID
2565
2566 FROM IEC_O_ALG_ACTIONS
2567
2568 WHERE PARENT_BLOCK_ID = :rule_block_id
2569
2570 AND ACTION_CODE = :action_code'
2571
2572 INTO l_action_id
2573
2574 USING l_rule_block_id, l_action_code;
2575
2576 EXCEPTION
2577
2578 WHEN NO_DATA_FOUND THEN
2579
2580 g_enable_cc_incr_parse := FALSE;
2581
2582 WHEN TOO_MANY_ROWS THEN
2583
2584 g_enable_cc_incr_parse := TRUE;
2585
2586 END;
2587
2588
2589
2590 IF l_action_id IS NOT NULL THEN
2591
2592 g_enable_cc_incr_parse := TRUE;
2593
2594 END IF;
2595
2596
2597
2598 -- DISABLE VALIDATION OF CELL PHONE NUMBERS
2599
2600 l_action_id := NULL;
2601
2602 l_action_code := 'CELL_PHONE_DISABLE';
2603
2604 BEGIN
2605
2606 EXECUTE IMMEDIATE
2607
2608 'SELECT ACTION_ID
2609
2610 FROM IEC_O_ALG_ACTIONS
2611
2612 WHERE PARENT_BLOCK_ID = :rule_block_id
2613
2614 AND ACTION_CODE = :action_code'
2615
2616 INTO l_action_id
2617
2618 USING l_rule_block_id, l_action_code;
2619
2620 EXCEPTION
2621
2622 WHEN NO_DATA_FOUND THEN
2623
2624 g_enable_cell_phone_val := TRUE;
2625
2626 WHEN TOO_MANY_ROWS THEN
2627
2628 g_enable_cell_phone_val := FALSE;
2629
2630 END;
2631
2632
2633
2634 IF l_action_id IS NOT NULL THEN
2635
2636 g_enable_cell_phone_val := FALSE;
2637
2638 END IF;
2639
2640
2641
2642 -- Fail entries when the region cannot be determined
2643
2644 l_action_id := NULL;
2645
2646 l_action_code := 'REQUIRE_REGION';
2647
2648 BEGIN
2649
2650 EXECUTE IMMEDIATE
2651
2652 'SELECT ACTION_ID
2653
2654 FROM IEC_O_ALG_ACTIONS
2655
2656 WHERE PARENT_BLOCK_ID = :rule_block_id
2657
2658 AND ACTION_CODE = :action_code'
2659
2660 INTO l_action_id
2661
2662 USING l_rule_block_id, l_action_code;
2663
2664 EXCEPTION
2665
2666 WHEN NO_DATA_FOUND THEN
2667
2668 g_require_regions := FALSE;
2669
2670 WHEN TOO_MANY_ROWS THEN
2671
2672 g_require_regions := TRUE;
2673
2674 END;
2675
2676
2677
2678 IF l_action_id IS NOT NULL THEN
2679
2680 g_require_regions := TRUE;
2681
2682 END IF;
2683
2684
2685
2686 -- GET RULE SPECIFIED TIMEZONE ID
2687
2688 l_action_code := 'TIMEZONE';
2689
2690 l_data_code := 'TIMEZONE';
2691
2692
2693
2694 EXECUTE IMMEDIATE
2695
2696 'BEGIN
2697
2698 SELECT B.DATA_VALUE BULK COLLECT INTO :data_value_col
2699
2700 FROM IEC_O_ALG_ACTIONS A, IEC_O_ALG_DATA B
2701
2702 WHERE A.ACTION_ID = B.OWNER_ID
2703
2704 AND PARENT_BLOCK_ID = :rule_block_id
2705
2706 AND ACTION_CODE = :action_code AND DATA_CODE = :data_code
2707
2708 AND ROWNUM = 1;
2709
2710 END;'
2711
2712 USING OUT l_data_value_col, IN l_rule_block_id, IN l_action_code, IN l_data_code;
2713
2714
2715
2716 IF l_data_value_col IS NOT NULL AND l_data_value_col.COUNT > 0 THEN
2717
2718 g_timezone_id := l_data_value_col(1);
2719
2720 END IF;
2721
2722
2723
2724 -- GET RULE SPECIFIED TERRITORY CODE
2725
2726 l_action_code := 'TERRITORY_CODE';
2727
2728 l_data_code := 'TERRITORY_CODE';
2729
2730
2731
2732 EXECUTE IMMEDIATE
2733
2734 'BEGIN
2735
2736 SELECT B.DATA_VALUE BULK COLLECT INTO :data_value_col
2737
2738 FROM IEC_O_ALG_ACTIONS A, IEC_O_ALG_DATA B
2739
2740 WHERE A.ACTION_ID = B.OWNER_ID
2741
2742 AND PARENT_BLOCK_ID = :rule_block_id
2743
2744 AND ACTION_CODE = :action_code AND DATA_CODE = :data_code
2745
2746 AND ROWNUM = 1;
2747
2748 END;'
2749
2750 USING OUT l_data_value_col, IN l_rule_block_id, IN l_action_code, IN l_data_code;
2751
2752
2753
2754 IF l_data_value_col IS NOT NULL AND l_data_value_col.COUNT > 0 THEN
2755
2756 g_territory_code := l_data_value_col(1);
2757
2758
2759
2760 BEGIN
2761
2762 EXECUTE IMMEDIATE
2763
2764 'SELECT PHONE_COUNTRY_CODE
2765
2766 FROM HZ_PHONE_COUNTRY_CODES
2767
2768 WHERE TERRITORY_CODE = :territory_code'
2769
2770 INTO g_phone_country_code
2771
2772 USING g_territory_code;
2773
2774 EXCEPTION
2775
2776 WHEN NO_DATA_FOUND THEN
2777
2778 Log_TerritoryNotFound('Init_Rules', 'MAP_TERRITORY_CODE_TO_PHONE_COUNTRY_CODE', g_territory_code);
2779
2780 RAISE fnd_api.g_exc_unexpected_error;
2781
2782 WHEN TOO_MANY_ROWS THEN
2783
2784 Log_TerritoryNotUnique('Init_Rules', 'MAP_TERRITORY_CODE_TO_PHONE_COUNTRY_CODE', g_territory_code);
2785
2786 RAISE fnd_api.g_exc_unexpected_error;
2787
2788 END;
2789
2790 END IF;
2791
2792
2793
2794 -- GET RULE SPECIFIED PHONE COUNTRY CODE IF TERRITORY_CODE WAS NOT ALREADY SPECIFIED
2795
2796 IF g_phone_country_code IS NULL THEN
2797
2798
2799
2800 l_action_code := 'PHONE_COUNTRY_CODE';
2801
2802 l_data_code := 'PHONE_COUNTRY_CODE';
2803
2804
2805
2806 EXECUTE IMMEDIATE
2807
2808 'BEGIN
2809
2810 SELECT B.DATA_VALUE BULK COLLECT INTO :data_value_col
2811
2812 FROM IEC_O_ALG_ACTIONS A, IEC_O_ALG_DATA B
2813
2814 WHERE A.ACTION_ID = B.OWNER_ID
2815
2816 AND PARENT_BLOCK_ID = :rule_block_id
2817
2818 AND ACTION_CODE = :action_code AND DATA_CODE = :data_code
2819
2820 AND ROWNUM = 1;
2821
2822 END;'
2823
2824 USING OUT l_data_value_col, IN l_rule_block_id, IN l_action_code, IN l_data_code;
2825
2826
2827
2828 IF l_data_value_col IS NOT NULL AND l_data_value_col.COUNT > 0 THEN
2829
2830 g_phone_country_code := l_data_value_col(1);
2831
2832 END IF;
2833
2834 END IF;
2835
2836
2837
2838 -- GET RULE SPECIFIED REGION ID
2839
2840 l_action_code := 'REGION';
2841
2842 l_data_code := 'REGION';
2843
2844
2845
2846 EXECUTE IMMEDIATE
2847
2848 'BEGIN
2849
2850 SELECT B.DATA_VALUE BULK COLLECT INTO :data_value_col
2851
2852 FROM IEC_O_ALG_ACTIONS A, IEC_O_ALG_DATA B
2853
2854 WHERE A.ACTION_ID = B.OWNER_ID
2855
2856 AND PARENT_BLOCK_ID = :rule_block_id
2857
2858 AND ACTION_CODE = :action_code AND DATA_CODE = :data_code
2859
2860 AND ROWNUM = 1;
2861
2862 END;'
2863
2864 USING OUT l_data_value_col, IN l_rule_block_id, IN l_action_code, IN l_data_code;
2865
2866
2867
2868 IF l_data_value_col IS NOT NULL AND l_data_value_col.COUNT > 0 THEN
2869
2870 g_region_id := l_data_value_col(1);
2871
2872 END IF;
2873
2874
2875
2876 -- Disable validation of phone number length
2877
2878 l_action_id := NULL;
2879
2880 l_action_code := 'PN_LENGTH_VAL_DISABLE';
2881
2882 BEGIN
2883
2884 EXECUTE IMMEDIATE
2885
2886 'SELECT ACTION_ID
2887
2888 FROM IEC_O_ALG_ACTIONS
2889
2890 WHERE PARENT_BLOCK_ID = :rule_block_id
2891
2892 AND ACTION_CODE = :action_code'
2893
2894 INTO l_action_id
2895
2896 USING l_rule_block_id, l_action_code;
2897
2898 EXCEPTION
2899
2900 WHEN NO_DATA_FOUND THEN
2901
2902 g_enable_pn_length_val := TRUE;
2903
2904 WHEN TOO_MANY_ROWS THEN
2905
2906 g_enable_pn_length_val := FALSE;
2907
2908 END;
2909
2910
2911
2912 IF l_action_id IS NOT NULL THEN
2913
2914 g_enable_pn_length_val := FALSE;
2915
2916 END IF;
2917
2918
2919
2920 -- Disable validation of area code length
2921
2922 l_action_id := NULL;
2923
2924 l_action_code := 'AC_LENGTH_VAL_DISABLE';
2925
2926 BEGIN
2927
2928 EXECUTE IMMEDIATE
2929
2930 'SELECT ACTION_ID
2931
2932 FROM IEC_O_ALG_ACTIONS
2933
2934 WHERE PARENT_BLOCK_ID = :rule_block_id
2935
2936 AND ACTION_CODE = :action_code'
2937
2938 INTO l_action_id
2939
2940 USING l_rule_block_id, l_action_code;
2941
2942 EXCEPTION
2943
2944 WHEN NO_DATA_FOUND THEN
2945
2946 g_enable_ac_length_val := TRUE;
2947
2948 WHEN TOO_MANY_ROWS THEN
2949
2950 g_enable_ac_length_val := FALSE;
2951
2952 END;
2953
2954
2955
2956 IF l_action_id IS NOT NULL THEN
2957
2958 g_enable_ac_length_val := FALSE;
2959
2960 END IF;
2961
2962
2963
2964 -- LOAD TZ OFFSET OR NAME MAPPINGS AS DEFINED IN RULES
2965
2966 l_action_code := 'TIMEZONE_MAPPING';
2967
2968 l_data_code := 'TIMEZONE_CODE';
2969
2970
2971
2972 EXECUTE IMMEDIATE
2973
2974 'BEGIN
2975
2976 SELECT B.DATA_CODE, B.DATA_VALUE BULK COLLECT INTO :data_code_col, :data_value_col
2977
2978 FROM IEC_O_ALG_ACTIONS A, IEC_O_ALG_DATA B
2979
2980 WHERE A.ACTION_ID = B.OWNER_ID
2981
2982 AND PARENT_BLOCK_ID = :rule_block_id
2983
2984 AND ACTION_CODE = :action_code
2985
2986 AND DATA_CODE IN (:data_code, ''TIMEZONE_VALUE'')
2987
2988 ORDER BY A.ACTION_ID, B.DATA_CODE;
2989
2990 END;'
2991
2992 USING OUT l_data_code_col, OUT l_data_value_col, IN l_rule_block_id, IN l_action_code, IN l_data_code;
2993
2994
2995
2996 IF l_data_code_col IS NOT NULL AND l_data_code_col.COUNT > 0 THEN
2997
2998
2999
3000 l_count := 1;
3001
3002 WHILE l_count < l_data_code_col.COUNT LOOP
3003
3004
3005
3006 BEGIN
3007
3008 EXECUTE IMMEDIATE
3009
3010 'INSERT INTO IEC_TZ_OFFSET_MAP_CACHE (OFFSET, TIMEZONE_ID) VALUES (:timezone_offset, :timezone)'
3011
3012 USING l_data_value_col(l_count), l_data_value_col(l_count + 1);
3013
3014 EXCEPTION
3015
3016 WHEN DUP_VAL_ON_INDEX THEN
3017
3018 NULL;
3019
3020 END;
3021
3022
3023
3024 l_count := l_count + 2;
3025
3026 END LOOP;
3027
3028 END IF;
3029
3030
3031
3032 END IF;
3033
3034
3035
3036 -- LOAD TZ MAPPING CACHE
3037
3038
3039
3040 IF g_enable_zc_lookups THEN
3041
3042 INSERT INTO IEC_TZ_MAPPING_CACHE
3043
3044 (TERRITORY_CODE, AREA_CODE, POSTAL_CODE, TIMEZONE_ID)
3045
3046 SELECT DISTINCT TERRITORY_CODE, PHONE_AREA_CODE, POSTAL_CODE, TIMEZONE_ID
3047
3048 FROM IEC_G_TIMEZONE_MAPPINGS;
3049
3050 ELSE
3051
3052 INSERT INTO IEC_TZ_MAPPING_CACHE
3053
3054 (TERRITORY_CODE, AREA_CODE, POSTAL_CODE, TIMEZONE_ID)
3055
3056 SELECT DISTINCT TERRITORY_CODE, PHONE_AREA_CODE, NULL, TIMEZONE_ID
3057
3058 FROM IEC_G_TIMEZONE_MAPPINGS;
3059
3060 END IF;
3061
3062
3063
3064 EXCEPTION
3065
3066 WHEN fnd_api.g_exc_error THEN
3067
3068 RAISE;
3069
3070 WHEN fnd_api.g_exc_unexpected_error THEN
3071
3072 RAISE;
3073
3074 WHEN OTHERS THEN
3075
3076 Log( 'INIT_RULES'
3077
3078 , 'MAIN'
3079
3080 , SQLERRM
3081
3082 );
3083
3084 RAISE fnd_api.g_exc_unexpected_error;
3085
3086
3087
3088 END Init_Rules;
3089
3090
3091
3092 PROCEDURE Update_ReportCounts
3093
3094 ( p_campaign_id IN NUMBER
3095
3096 , p_schedule_id IN NUMBER
3097
3098 , p_list_id IN NUMBER
3099
3100 , p_subset_id_col IN SYSTEM.number_tbl_type
3101
3102 , p_sub_rec_loaded_incr_col IN SYSTEM.number_tbl_type)
3103
3104 IS
3105
3106 l_rec_count NUMBER;
3107
3108 BEGIN
3109
3110
3111
3112 -- Create/Update subset records in IEC_G_REP_SUBSET_COUNTS
3113
3114 IF p_subset_id_col IS NOT NULL AND p_subset_id_col.COUNT > 0 THEN
3115
3116
3117
3118 FOR i IN 1..p_subset_id_col.LAST LOOP
3119
3120
3121
3122 -- Check for existence of record for the current subset
3123
3124 EXECUTE IMMEDIATE
3125
3126 'SELECT COUNT(*)
3127
3128 FROM IEC_G_REP_SUBSET_COUNTS
3129
3130 WHERE SUBSET_ID = :subset_id'
3131
3132 INTO l_rec_count
3133
3134 USING p_subset_id_col(i);
3135
3136
3137
3138 -- If record does not exist, create record and initialize counts
3139
3140 IF l_rec_count = 0 THEN
3141
3142
3143
3144 EXECUTE IMMEDIATE
3145
3146 'INSERT INTO IEC_G_REP_SUBSET_COUNTS
3147
3148 ( SUBSET_COUNT_ID
3149
3150 , CAMPAIGN_ID
3151
3152 , SCHEDULE_ID
3153
3154 , LIST_HEADER_ID
3155
3156 , SUBSET_ID
3157
3158 , RECORD_LOADED
3159
3160 , RECORD_CALLED_ONCE
3161
3162 , RECORD_CALLED_AND_REMOVED
3163
3164 , RECORD_CALLED_AND_REMOVED_COPY
3165
3166 , LAST_COPY_TIME
3167
3168 , CREATED_BY
3169
3170 , CREATION_DATE
3171
3172 , LAST_UPDATE_LOGIN
3173
3174 , LAST_UPDATE_DATE
3175
3176 , LAST_UPDATED_BY
3177
3178 , OBJECT_VERSION_NUMBER
3179
3180 )
3181
3182 VALUES
3183
3184 (IEC_G_REP_SUBSET_COUNTS_S.NEXTVAL
3185
3186 , :campaign_id
3187
3188 , :schedule_id
3189
3190 , :list_id
3191
3192 , :subset_id
3193
3194 , :records_loaded
3195
3196 , 0
3197
3198 , 0
3199
3200 , 0
3201
3202 , SYSDATE
3203
3204 , 1
3205
3206 , SYSDATE
3207
3208 , 1
3209
3210 , SYSDATE
3211
3212 , 0
3213
3214 , 0)'
3215
3216 USING p_campaign_id
3217
3218 , p_schedule_id
3219
3220 , p_list_id
3221
3222 , p_subset_id_col(i)
3223
3224 , p_sub_rec_loaded_incr_col(i);
3225
3226
3227
3228 ELSE
3229
3230
3231
3232 -- If record exists, simply update counts by appropriate increment
3233
3234 EXECUTE IMMEDIATE
3235
3236 'UPDATE IEC_G_REP_SUBSET_COUNTS
3237
3238 SET RECORD_LOADED = RECORD_LOADED + :records_loaded
3239
3240 , LAST_UPDATE_DATE = SYSDATE
3241
3242 WHERE SUBSET_ID = :subset_id'
3243
3244 USING p_sub_rec_loaded_incr_col(i)
3245
3246 , p_subset_id_col(i);
3247
3248
3249
3250 END IF;
3251
3252
3253
3254 END LOOP;
3255
3256
3257
3258 END IF;
3259
3260
3261
3262 EXCEPTION
3263
3264 WHEN fnd_api.g_exc_error THEN
3265
3266 RAISE;
3267
3268 WHEN fnd_api.g_exc_unexpected_error THEN
3269
3270 RAISE;
3271
3272 WHEN OTHERS THEN
3273
3274 Log( 'Update_ReportCounts'
3275
3276 , 'MAIN'
3277
3278 , SQLERRM
3279
3280 );
3281
3282 RAISE fnd_api.g_exc_unexpected_error;
3283
3284
3285
3286 END Update_ReportCounts;
3287
3288
3289
3290 PROCEDURE Update_Status
3291
3292 ( p_list_id IN NUMBER
3293
3294 , p_status IN VARCHAR2)
3295
3296 IS
3297
3298 PRAGMA AUTONOMOUS_TRANSACTION;
3299
3300 BEGIN
3301
3302
3303
3304 IF p_status = 'VALIDATED' THEN
3305
3306
3307
3308 BEGIN
3309
3310 g_end_time := SYSDATE;
3311
3312
3313
3314 EXECUTE IMMEDIATE
3315
3316 'UPDATE IEC_O_VALIDATION_STATUS
3317
3318 SET VALIDATED_ONCE_FLAG = ''Y''
3319
3320 , VALIDATION_END_TIME = :end_time
3321
3322 , LAST_UPDATE_DATE = SYSDATE
3323
3324 WHERE LIST_HEADER_ID = :list_id'
3325
3326 USING g_end_time, p_list_id;
3327
3328 EXCEPTION
3329
3330 WHEN OTHERS THEN
3331
3332 Log('UPDATE_STATUS', 'DO_IEC_STAT_UPD_VALIDATED', SQLERRM);
3333
3334 RAISE fnd_api.g_exc_unexpected_error;
3335
3336 END;
3337
3338
3339
3340 ELSIF p_status = 'VALIDATING' THEN
3341
3342
3343
3344 BEGIN
3345
3346 g_start_time := SYSDATE;
3347
3348
3349
3350 EXECUTE IMMEDIATE
3351
3352 'UPDATE IEC_O_VALIDATION_STATUS
3353
3354 SET SCHEDULED_EXECUTION_TIME = NULL
3355
3356 , USER_SCHEDULED_EXECUTION_TIME = NULL
3357
3358 , USER_TIMEZONE_ID = NULL
3359
3360 , VALIDATION_START_TIME = :start_time
3361
3362 , VALIDATION_END_TIME = NULL
3363
3364 , LAST_UPDATE_DATE = SYSDATE
3365
3366 WHERE LIST_HEADER_ID = :list_id'
3367
3368 USING g_start_time, p_list_id;
3369
3370 EXCEPTION
3371
3372 WHEN OTHERS THEN
3373
3374 Log('UPDATE_STATUS', 'DO_IEC_STAT_UPD_VALIDATING', SQLERRM);
3375
3376 RAISE fnd_api.g_exc_unexpected_error;
3377
3378 END;
3379
3380
3381
3382 ELSIF p_status = 'FAILED_VALIDATION' THEN
3383
3384
3385
3386 BEGIN
3387
3388 g_end_time := SYSDATE;
3389
3390
3391
3392 EXECUTE IMMEDIATE
3393
3394 'UPDATE IEC_O_VALIDATION_STATUS
3395
3396 SET VALIDATION_END_TIME = SYSDATE
3397
3398 , LAST_UPDATE_DATE = SYSDATE
3399
3400 WHERE LIST_HEADER_ID = :list_id'
3401
3402 USING p_list_id;
3403
3404 EXCEPTION
3405
3406 WHEN OTHERS THEN
3407
3408 Log('UPDATE_STATUS', 'DO_IEC_STAT_UPD_FAILED_VALIDATION', SQLERRM);
3409
3410 RAISE fnd_api.g_exc_unexpected_error;
3411
3412 END;
3413
3414 ELSE
3415
3416 -- must log start/end time if status code is invalid
3417
3418 -- for validation history logging purposes
3419
3420 IF g_start_time IS NULL THEN
3421
3422 g_start_time := SYSDATE;
3423
3424 END IF;
3425
3426 IF g_end_time IS NULL THEN
3427
3428 g_end_time := SYSDATE;
3429
3430 END IF;
3431
3432 END IF;
3433
3434
3435
3436 -- Update the Marketing list status
3437
3438 BEGIN
3439
3440 Iec_Status_Pvt.Update_List_Status(p_list_id, p_status);
3441
3442 EXCEPTION
3443
3444 WHEN OTHERS THEN
3445
3446 Log_StatusUpdateError('Update_Status', 'DO_MKT_STATUS_UPDATE', Get_ListName(p_list_id));
3447
3448 RAISE fnd_api.g_exc_unexpected_error;
3449
3450 END;
3451
3452
3453
3454 COMMIT;
3455
3456 EXCEPTION
3457
3458 WHEN fnd_api.g_exc_error THEN
3459
3460 ROLLBACK;
3461
3462 IF p_status <> 'FAILED_VALIDATION' THEN
3463
3464 RAISE;
3465
3466 END IF;
3467
3468 WHEN fnd_api.g_exc_unexpected_error THEN
3469
3470 ROLLBACK;
3471
3472 IF p_status <> 'FAILED_VALIDATION' THEN
3473
3474 RAISE;
3475
3476 END IF;
3477
3478 WHEN OTHERS THEN
3479
3480 ROLLBACK;
3481
3482 Log('UPDATE_STATUS', 'MAIN', SQLERRM);
3483
3484 IF p_status <> 'FAILED_VALIDATION' THEN
3485
3486 RAISE fnd_api.g_exc_unexpected_error;
3487
3488 END IF;
3489
3490
3491
3492 END Update_Status;
3493
3494
3495
3496 PROCEDURE Update_AmsListHeaderCounts
3497
3498 ( p_list_id IN NUMBER
3499
3500 , p_rows_in_list_incr IN NUMBER
3501
3502 , p_rows_active_incr IN NUMBER
3503
3504 )
3505
3506 IS
3507 l_api_version CONSTANT NUMBER := 1.0;
3508 l_init_msg_list VARCHAR2(1);
3509 l_return_status VARCHAR2(1);
3510 l_msg_count NUMBER;
3511 l_msg_data VARCHAR2(2000);
3512
3513 l_no_of_rows_in_list NUMBER;
3514 l_no_of_rows_active NUMBER;
3515
3516 BEGIN
3517 l_init_msg_list :=FND_API.G_TRUE;
3518
3519 IF(G_LISTHEADER_REC_INITIAL = 0 ) THEN
3520
3521 l_listheader_rec.last_update_date := FND_API.g_miss_date;
3522 l_listheader_rec.last_updated_by := FND_API.g_miss_num;
3523 l_listheader_rec.creation_date := FND_API.g_miss_date;
3524 l_listheader_rec.created_by := FND_API.g_miss_num;
3525 l_listheader_rec.last_update_login := FND_API.g_miss_num;
3526 l_listheader_rec.object_version_number := FND_API.g_miss_num;
3527 l_listheader_rec.request_id := FND_API.g_miss_num;
3528 l_listheader_rec.program_id := FND_API.g_miss_num;
3529 l_listheader_rec.program_application_id := FND_API.g_miss_num;
3530 l_listheader_rec.program_update_date := FND_API.g_miss_date;
3531 l_listheader_rec.view_application_id := FND_API.g_miss_num;
3532 l_listheader_rec.list_name := FND_API.g_miss_char;
3533 l_listheader_rec.list_used_by_id := FND_API.g_miss_num;
3534 l_listheader_rec.arc_list_used_by := FND_API.g_miss_char;
3535 l_listheader_rec.list_type := FND_API.g_miss_char;
3536 l_listheader_rec.status_code := FND_API.g_miss_char;
3537 l_listheader_rec.status_date := FND_API.g_miss_date;
3538 l_listheader_rec.generation_type := FND_API.g_miss_char;
3539 l_listheader_rec.repeat_exclude_type := FND_API.g_miss_char;
3540 l_listheader_rec.row_selection_type := FND_API.g_miss_char;
3541 l_listheader_rec.owner_user_id := FND_API.g_miss_num;
3542 l_listheader_rec.access_level := FND_API.g_miss_char;
3543 l_listheader_rec.enable_log_flag :=FND_API.g_miss_char;
3544 l_listheader_rec.enable_word_replacement_flag := FND_API.g_miss_char;
3545 l_listheader_rec.enable_parallel_dml_flag := FND_API.g_miss_char;
3546 l_listheader_rec.dedupe_during_generation_flag := FND_API.g_miss_char;
3547 l_listheader_rec.generate_control_group_flag := FND_API.g_miss_char;
3548 l_listheader_rec.last_generation_success_flag := FND_API.g_miss_char;
3549 l_listheader_rec.forecasted_start_date := FND_API.g_miss_date;
3550 l_listheader_rec.forecasted_end_date := FND_API.g_miss_date;
3551 l_listheader_rec.actual_end_date := FND_API.g_miss_date;
3552 l_listheader_rec.sent_out_date := FND_API.g_miss_date;
3553 l_listheader_rec.dedupe_start_date := FND_API.g_miss_date;
3554 l_listheader_rec.last_dedupe_date := FND_API.g_miss_date;
3555 l_listheader_rec.last_deduped_by_user_id := FND_API.g_miss_num;
3556 l_listheader_rec.workflow_item_key := FND_API.g_miss_num;
3557 l_listheader_rec.no_of_rows_duplicates := FND_API.g_miss_num;
3558 l_listheader_rec.no_of_rows_min_requested := FND_API.g_miss_num;
3559 l_listheader_rec.no_of_rows_max_requested := FND_API.g_miss_num;
3560 l_listheader_rec.no_of_rows_in_list := FND_API.g_miss_num;
3561 l_listheader_rec.no_of_rows_in_ctrl_group := FND_API.g_miss_num;
3562 l_listheader_rec.no_of_rows_active := FND_API.g_miss_num;
3563 l_listheader_rec.no_of_rows_inactive := FND_API.g_miss_num;
3564 l_listheader_rec.no_of_rows_manually_entered := FND_API.g_miss_num;
3565 l_listheader_rec.no_of_rows_do_not_call := FND_API.g_miss_num;
3566 l_listheader_rec.no_of_rows_do_not_mail :=FND_API.g_miss_num;
3567 l_listheader_rec.no_of_rows_random := FND_API.g_miss_num;
3568 l_listheader_rec.org_id := FND_API.g_miss_num;
3569 l_listheader_rec.main_gen_start_time := FND_API.g_miss_date;
3570 l_listheader_rec.main_gen_end_time := FND_API.g_miss_date;
3571 l_listheader_rec.main_random_nth_row_selection := FND_API.g_miss_num;
3572 l_listheader_rec.main_random_pct_row_selection := FND_API.g_miss_num;
3573 l_listheader_rec.ctrl_random_nth_row_selection := FND_API.g_miss_num;
3574 l_listheader_rec.ctrl_random_pct_row_selection := FND_API.g_miss_num;
3575 l_listheader_rec.repeat_source_list_header_id := FND_API.g_miss_char;
3576 l_listheader_rec.result_text := FND_API.g_miss_char;
3577 l_listheader_rec.keywords := FND_API.g_miss_char;
3578 l_listheader_rec.description := FND_API.g_miss_char;
3579 l_listheader_rec.list_priority := FND_API.g_miss_num;
3580 l_listheader_rec.assign_person_id := FND_API.g_miss_num;
3581 l_listheader_rec.list_source := FND_API.g_miss_char;
3582 l_listheader_rec.list_source_type := FND_API.g_miss_char;
3583 l_listheader_rec.list_online_flag := FND_API.g_miss_char;
3584 l_listheader_rec.random_list_id := FND_API.g_miss_num;
3585 l_listheader_rec.enabled_flag := FND_API.g_miss_char;
3586 l_listheader_rec.assigned_to := FND_API.g_miss_num;
3587 l_listheader_rec.query_id := FND_API.g_miss_num;
3588 l_listheader_rec.owner_person_id := FND_API.g_miss_num;
3589 l_listheader_rec.archived_by := FND_API.g_miss_num;
3590 l_listheader_rec.archived_date := FND_API.g_miss_date;
3591 l_listheader_rec.attribute_category := FND_API.g_miss_char;
3592 l_listheader_rec.attribute1 := FND_API.g_miss_char;
3593 l_listheader_rec.attribute2 := FND_API.g_miss_char;
3594 l_listheader_rec.attribute3 := FND_API.g_miss_char;
3595 l_listheader_rec.attribute4 := FND_API.g_miss_char;
3596 l_listheader_rec.attribute5 := FND_API.g_miss_char;
3597 l_listheader_rec.attribute6 := FND_API.g_miss_char;
3598 l_listheader_rec.attribute7 := FND_API.g_miss_char;
3599 l_listheader_rec.attribute8 := FND_API.g_miss_char;
3600 l_listheader_rec.attribute9 := FND_API.g_miss_char;
3601 l_listheader_rec.attribute10 := FND_API.g_miss_char;
3602 l_listheader_rec.attribute11 := FND_API.g_miss_char;
3603 l_listheader_rec.attribute12 := FND_API.g_miss_char;
3604 l_listheader_rec.attribute13 := FND_API.g_miss_char;
3605 l_listheader_rec.attribute14 := FND_API.g_miss_char;
3606 l_listheader_rec.attribute15 := FND_API.g_miss_char;
3607 l_listheader_rec.timezone_id := FND_API.g_miss_num;
3608 l_listheader_rec.user_entered_start_time := FND_API.g_miss_date;
3609 l_listheader_rec.user_status_id := FND_API.g_miss_num;
3610 l_listheader_rec.quantum := FND_API.g_miss_num;
3611 l_listheader_rec.release_control_alg_id := FND_API.g_miss_num;
3612 l_listheader_rec.dialing_method := FND_API.g_miss_char;
3613 l_listheader_rec.calling_calendar_id := FND_API.g_miss_num;
3614 l_listheader_rec.release_strategy := FND_API.g_miss_char;
3615 l_listheader_rec.custom_setup_id := FND_API.g_miss_num;
3616 l_listheader_rec.country := FND_API.g_miss_num;
3617 l_listheader_rec.callback_priority_flag := FND_API.g_miss_char;
3618 l_listheader_rec.call_center_ready_flag := FND_API.g_miss_char;
3619 l_listheader_rec.language := FND_API.g_miss_char;
3620 l_listheader_rec.purge_flag := FND_API.g_miss_char;
3621 l_listheader_rec.public_flag := FND_API.g_miss_char;
3622 l_listheader_rec.list_category := FND_API.g_miss_char;
3623 l_listheader_rec.quota := FND_API.g_miss_num;
3624 l_listheader_rec.quota_reset := FND_API.g_miss_num;
3625 l_listheader_rec.recycling_alg_id := FND_API.g_miss_num;
3626 l_listheader_rec.source_lang := FND_API.g_miss_char;
3627
3628 G_LISTHEADER_REC_INITIAL := 1;
3629 END IF;
3630
3631 select nvl(no_of_rows_in_list,0), nvl(no_of_rows_active,0) into l_no_of_rows_in_list, l_no_of_rows_active from
3632 AMS_LIST_HEADERS_ALL where list_header_id = p_list_id;
3633 l_listheader_rec.list_header_id := p_list_id;
3634 l_listheader_rec.no_of_rows_in_list := l_no_of_rows_in_list + p_rows_in_list_incr;
3635 l_listheader_rec.no_of_rows_active := l_no_of_rows_active + p_rows_active_incr;
3636
3637 AMS_LISTHEADER_PUB.Update_ListHeader
3638 ( p_api_version => l_api_version,
3639 p_init_msg_list => l_init_msg_list,
3640 x_return_status => l_return_status,
3641 x_msg_count => l_msg_count,
3642 x_msg_data => l_msg_data,
3643 p_listheader_rec => l_listheader_rec);
3644
3645 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3646 Log_msg('AMS_LISTHEADER_PUB.Update_ListHeader', l_msg_data);
3647 END IF;
3648
3649 /*
3650 EXECUTE IMMEDIATE
3651
3652 'UPDATE AMS_LIST_HEADERS_ALL
3653
3654 SET NO_OF_ROWS_IN_LIST = NVL(NO_OF_ROWS_IN_LIST, 0) + :rows_incr
3655
3656 , NO_OF_ROWS_ACTIVE = NVL(NO_OF_ROWS_ACTIVE, 0) + :active_incr
3657
3658 WHERE LIST_HEADER_ID = :list_id'
3659
3660 USING IN p_rows_in_list_incr
3661
3662 , IN p_rows_active_incr
3663
3664 , IN p_list_id;
3665
3666 */
3667
3668 EXCEPTION
3669
3670 WHEN OTHERS THEN
3671
3672 Log( 'Update_AmsListHeaderCounts'
3673
3674 , 'MAIN'
3675
3676 , SQLERRM
3677
3678 );
3679
3680 RAISE fnd_api.g_exc_unexpected_error;
3681
3682
3683
3684 END Update_AmsListHeaderCounts;
3685
3686
3687
3688 PROCEDURE Update_MoveEntriesStatusCounts
3689
3690 ( p_from_list_id IN NUMBER
3691
3692 , p_records_moved IN NUMBER
3693
3694 , p_records_updated IN NUMBER
3695
3696 )
3697
3698 IS
3699
3700 PRAGMA AUTONOMOUS_TRANSACTION;
3701
3702 BEGIN
3703
3704
3705
3706 -- Update counts relative to current values
3707
3708 EXECUTE IMMEDIATE
3709
3710 'UPDATE IEC_O_MOVE_RECORDS_STATUS
3711
3712 SET RECORDS_MOVED = NVL(RECORDS_MOVED, 0) + :records_moved
3713
3714 , RECORDS_UPDATED = NVL(RECORDS_UPDATED, 0) + :records_updated
3715
3716 , LAST_UPDATE_DATE = SYSDATE
3717
3718 WHERE FROM_LIST_HEADER_ID = :from_list_id'
3719
3720 USING p_records_moved, p_records_updated, p_from_list_id;
3721
3722
3723
3724 COMMIT;
3725
3726 EXCEPTION
3727
3728 WHEN OTHERS THEN
3729
3730 Log( 'Update_MoveEntriesStatusCounts'
3731
3732 , 'MAIN'
3733
3734 , SQLERRM
3735
3736 );
3737
3738 ROLLBACK;
3739
3740 RAISE fnd_api.g_exc_unexpected_error;
3741
3742
3743
3744 END Update_MoveEntriesStatusCounts;
3745
3746
3747
3748 PROCEDURE Update_MoveEntriesStatus
3749
3750 ( p_from_list_id IN NUMBER
3751
3752 , p_to_list_id IN NUMBER
3753
3754 , p_status IN VARCHAR2
3755
3756 , p_api_initiated IN BOOLEAN)
3757
3758 IS
3759
3760 PRAGMA AUTONOMOUS_TRANSACTION;
3761
3762 l_count NUMBER;
3763
3764 l_user_id NUMBER;
3765
3766 l_login_id NUMBER;
3767
3768 l_api_init_flag VARCHAR2(1);
3769
3770
3771
3772 l_sequence NUMBER(15);
3773
3774 BEGIN
3775
3776
3777
3778 l_user_id := nvl(FND_GLOBAL.user_id, -1);
3779
3780 l_login_id := nvl(FND_GLOBAL.conc_login_id, -1);
3781
3782
3783
3784 IF p_status = 'MOVING' AND p_api_initiated THEN
3785
3786 l_api_init_flag := 'Y';
3787
3788 ELSE
3789
3790 l_api_init_flag := NULL;
3791
3792 END IF;
3793
3794
3795
3796 -- Verify that record exists in IEC_O_MOVE_RECORDS_STATUS
3797
3798 -- We need to do this now that we are providing an api
3799
3800 -- and we can't rely on the admin screens to create this record
3801
3802 EXECUTE IMMEDIATE
3803
3804 'SELECT COUNT(*)
3805
3806 FROM IEC_O_MOVE_RECORDS_STATUS
3807
3808 WHERE FROM_LIST_HEADER_ID = :from_list_id'
3809
3810 INTO l_count
3811
3812 USING p_from_list_id;
3813
3814
3815
3816 IF l_count = 0 THEN
3817
3818 EXECUTE IMMEDIATE
3819
3820 'SELECT IEC_O_MOVE_RECORDS_STATUS_S.NEXTVAL FROM DUAL'
3821
3822 INTO l_sequence;
3823
3824 EXECUTE IMMEDIATE
3825
3826 'INSERT INTO IEC_O_MOVE_RECORDS_STATUS
3827
3828 ( MOVE_RECORDS_STATUS_ID
3829
3830 , FROM_LIST_HEADER_ID
3831
3832 , TO_LIST_HEADER_ID
3833
3834 , MOVE_RECORDS_STATUS_CODE
3835
3836 , API_INITIATED_FLAG
3837
3838 , RECORDS_MOVED
3839
3840 , RECORDS_UPDATED
3841
3842 , CREATED_BY
3843
3844 , CREATION_DATE
3845
3846 , LAST_UPDATED_BY
3847
3848 , LAST_UPDATE_DATE
3849
3850 , LAST_UPDATE_LOGIN
3851
3852 , OBJECT_VERSION_NUMBER
3853
3854 )
3855
3856 VALUES
3857
3858 ( :move_records_status_id
3859
3860 , :from_list_header_id
3861
3862 , :to_list_header_id
3863
3864 , ''PENDING_MOVE''
3865
3866 , :api_init_flag
3867
3868 , 0
3869
3870 , 0
3871
3872 , :user_id
3873
3874 , SYSDATE
3875
3876 , :user_id
3877
3878 , SYSDATE
3879
3880 , :login_id
3881
3882 , 0
3883
3884 )'
3885
3886 USING l_sequence
3887
3888 , p_from_list_id
3889
3890 , p_to_list_id
3891
3892 , l_api_init_flag
3893
3894 , l_user_id
3895
3896 , l_user_id
3897
3898 , l_login_id;
3899
3900 END IF;
3901
3902
3903
3904 IF p_status = 'MOVED' THEN
3905
3906 EXECUTE IMMEDIATE
3907
3908 'UPDATE IEC_O_MOVE_RECORDS_STATUS
3909
3910 SET MOVE_RECORDS_STATUS_CODE = :status
3911
3912 , API_INITIATED_FLAG = NULL
3913
3914 , SCHEDULED_EXECUTION_TIME = NULL
3915
3916 , USER_SCHEDULED_EXECUTION_TIME = NULL
3917
3918 , USER_TIMEZONE_ID = NULL
3919
3920 , MOVE_RECORDS_END_TIME = SYSDATE
3921
3922 , LAST_UPDATE_DATE = SYSDATE
3923
3924 WHERE FROM_LIST_HEADER_ID = :from_list_id'
3925
3926 USING p_status, p_from_list_id;
3927
3928 ELSIF p_status = 'MOVING' THEN
3929
3930 EXECUTE IMMEDIATE
3931
3932 'UPDATE IEC_O_MOVE_RECORDS_STATUS
3933
3934 SET MOVE_RECORDS_STATUS_CODE = :status
3935
3936 , TO_LIST_HEADER_ID = :to_list_id
3937
3938 , API_INITIATED_FLAG = :api_init_flag
3939
3940 , RECORDS_MOVED = 0
3941
3942 , RECORDS_UPDATED = 0
3943
3944 , SCHEDULED_EXECUTION_TIME = NULL
3945
3946 , USER_SCHEDULED_EXECUTION_TIME = NULL
3947
3948 , USER_TIMEZONE_ID = NULL
3949
3950 , MOVE_RECORDS_START_TIME = SYSDATE
3951
3952 , MOVE_RECORDS_END_TIME = NULL
3953
3954 , LAST_UPDATE_DATE = SYSDATE
3955
3956 WHERE FROM_LIST_HEADER_ID = :from_list_id'
3957
3958 USING p_status, p_to_list_id, l_api_init_flag, p_from_list_id;
3959
3960 ELSE
3961
3962 EXECUTE IMMEDIATE
3963
3964 'UPDATE IEC_O_MOVE_RECORDS_STATUS
3965
3966 SET MOVE_RECORDS_STATUS_CODE = :status
3967
3968 , API_INITIATED_FLAG = NULL
3969
3970 , SCHEDULED_EXECUTION_TIME = NULL
3971
3972 , USER_SCHEDULED_EXECUTION_TIME = NULL
3973
3974 , USER_TIMEZONE_ID = NULL
3975
3976 , MOVE_RECORDS_END_TIME = SYSDATE
3977
3978 , LAST_UPDATE_DATE = SYSDATE
3979
3980 WHERE FROM_LIST_HEADER_ID = :from_list_id'
3981
3982 USING p_status, p_from_list_id;
3983
3984 END IF;
3985
3986
3987
3988 COMMIT;
3989
3990 EXCEPTION
3991
3992 WHEN OTHERS THEN
3993
3994 Log( 'Update_MoveEntriesStatus'
3995
3996 , 'MAIN'
3997
3998 , SQLERRM
3999
4000 );
4001
4002 ROLLBACK;
4003
4004 RAISE fnd_api.g_exc_unexpected_error;
4005
4006
4007
4008 END Update_MoveEntriesStatus;
4009
4010
4011
4012 PROCEDURE Update_PurgeStatus
4013
4014 ( p_list_id IN NUMBER
4015
4016 , p_schedule_id IN NUMBER
4017
4018 , p_status IN VARCHAR2
4019
4020 , p_api_initiated IN BOOLEAN)
4021
4022 IS
4023
4024 PRAGMA AUTONOMOUS_TRANSACTION;
4025
4026 l_count NUMBER;
4027
4028 l_api_init_flag VARCHAR2(1);
4029
4030 BEGIN
4031
4032
4033
4034 -- We will assume that the rt info record exists
4035
4036 -- If not, we will simply throw an exception
4037
4038 -- b/c I don't think we should be in the business of creating
4039
4040 -- that here
4041
4042 EXECUTE IMMEDIATE
4043
4044 'SELECT COUNT(*)
4045
4046 FROM IEC_G_LIST_RT_INFO
4047
4048 WHERE LIST_HEADER_ID = :list_id'
4049
4050 INTO l_count
4051
4052 USING p_list_id;
4053
4054
4055
4056 IF l_count = 0 THEN
4057
4058 Log_ListRtInfoDNE('Update_PurgeStatus', 'CHECK_LIST_RT_INFO', Get_ScheduleName(p_schedule_id));
4059
4060 RAISE fnd_api.g_exc_error;
4061
4062 END IF;
4063
4064
4065
4066 IF p_status = 'PURGING' AND p_api_initiated THEN
4067
4068 l_api_init_flag := 'Y';
4069
4070 ELSE
4071
4072 l_api_init_flag := NULL;
4073
4074 END IF;
4075
4076
4077
4078 -- Update the Marketing list status
4079
4080 BEGIN
4081
4082 Iec_Status_Pvt.Update_List_Status(p_list_id, p_status, l_api_init_flag);
4083
4084 EXCEPTION
4085
4086 WHEN OTHERS THEN
4087
4088 Log_StatusUpdateError('Update_PurgeStatus', 'DO_MKT_STATUS_UPDATE', Get_ListName(p_list_id));
4089
4090 RAISE fnd_api.g_exc_unexpected_error;
4091
4092 END;
4093
4094
4095
4096 COMMIT;
4097
4098 EXCEPTION
4099
4100 WHEN fnd_api.g_exc_error THEN
4101
4102 ROLLBACK;
4103
4104 IF p_status <> 'FAILED_VALIDATION' THEN
4105
4106 RAISE;
4107
4108 END IF;
4109
4110 WHEN fnd_api.g_exc_unexpected_error THEN
4111
4112 ROLLBACK;
4113
4114 IF p_status <> 'FAILED_VALIDATION' THEN
4115
4116 RAISE;
4117
4118 END IF;
4119
4120 WHEN OTHERS THEN
4121
4122 ROLLBACK;
4123
4124 Log('UPDATE_STATUS', 'MAIN', SQLERRM);
4125
4126 IF p_status <> 'FAILED_VALIDATION' THEN
4127
4128 RAISE fnd_api.g_exc_unexpected_error;
4129
4130 END IF;
4131
4132
4133
4134 END Update_PurgeStatus;
4135
4136
4137
4138 PROCEDURE Update_AmsListEntries
4139
4140 ( p_list_id IN NUMBER
4141
4142 , p_source_type_view IN VARCHAR2)
4143
4144 IS
4145
4146 -- UPDATE ALE
4147
4148 BEGIN
4149
4150 EXECUTE IMMEDIATE
4151
4152 'BEGIN
4153
4154 UPDATE ' || p_source_type_view || ' A' ||
4155
4156 ' SET
4157
4158 ( DO_NOT_USE_FLAG,
4159
4160 DO_NOT_USE_REASON,
4161
4162 NEWLY_UPDATED_FLAG,
4163
4164 CONTACT_POINT_ID_S1, TIME_ZONE_S1, PHONE_COUNTRY_CODE_S1, PHONE_AREA_CODE_S1, PHONE_NUMBER_S1, RAW_PHONE_NUMBER_S1, REASON_CODE_S1,
4165
4166 CONTACT_POINT_ID_S2, TIME_ZONE_S2, PHONE_COUNTRY_CODE_S2, PHONE_AREA_CODE_S2, PHONE_NUMBER_S2, RAW_PHONE_NUMBER_S2, REASON_CODE_S2,
4167
4168 CONTACT_POINT_ID_S3, TIME_ZONE_S3, PHONE_COUNTRY_CODE_S3, PHONE_AREA_CODE_S3, PHONE_NUMBER_S3, RAW_PHONE_NUMBER_S3, REASON_CODE_S3,
4169
4170 CONTACT_POINT_ID_S4, TIME_ZONE_S4, PHONE_COUNTRY_CODE_S4, PHONE_AREA_CODE_S4, PHONE_NUMBER_S4, RAW_PHONE_NUMBER_S4, REASON_CODE_S4,
4171
4172 CONTACT_POINT_ID_S5, TIME_ZONE_S5, PHONE_COUNTRY_CODE_S5, PHONE_AREA_CODE_S5, PHONE_NUMBER_S5, RAW_PHONE_NUMBER_S5, REASON_CODE_S5,
4173
4174 CONTACT_POINT_ID_S6, TIME_ZONE_S6, PHONE_COUNTRY_CODE_S6, PHONE_AREA_CODE_S6, PHONE_NUMBER_S6, RAW_PHONE_NUMBER_S6, REASON_CODE_S6
4175
4176 ) =
4177
4178 ( SELECT DO_NOT_USE_FLAG,
4179
4180 DO_NOT_USE_REASON,
4181
4182 ''N'',
4183
4184 CONTACT_POINT_ID_S1, TIME_ZONE_S1, PHONE_COUNTRY_CODE_S1, PHONE_AREA_CODE_S1, PHONE_NUMBER_S1, RAW_PHONE_NUMBER_S1, MKTG_ITEM_CC_TZS_ID_S1,
4185
4186 CONTACT_POINT_ID_S2, TIME_ZONE_S2, PHONE_COUNTRY_CODE_S2, PHONE_AREA_CODE_S2, PHONE_NUMBER_S2, RAW_PHONE_NUMBER_S2, MKTG_ITEM_CC_TZS_ID_S2,
4187
4188 CONTACT_POINT_ID_S3, TIME_ZONE_S3, PHONE_COUNTRY_CODE_S3, PHONE_AREA_CODE_S3, PHONE_NUMBER_S3, RAW_PHONE_NUMBER_S3, MKTG_ITEM_CC_TZS_ID_S3,
4189
4190 CONTACT_POINT_ID_S4, TIME_ZONE_S4, PHONE_COUNTRY_CODE_S4, PHONE_AREA_CODE_S4, PHONE_NUMBER_S4, RAW_PHONE_NUMBER_S4, MKTG_ITEM_CC_TZS_ID_S4,
4191
4192 CONTACT_POINT_ID_S5, TIME_ZONE_S5, PHONE_COUNTRY_CODE_S5, PHONE_AREA_CODE_S5, PHONE_NUMBER_S5, RAW_PHONE_NUMBER_S5, MKTG_ITEM_CC_TZS_ID_S5,
4193
4194 CONTACT_POINT_ID_S6, TIME_ZONE_S6, PHONE_COUNTRY_CODE_S6, PHONE_AREA_CODE_S6, PHONE_NUMBER_S6, RAW_PHONE_NUMBER_S6, MKTG_ITEM_CC_TZS_ID_S6
4195
4196 FROM IEC_VAL_ENTRY_CACHE B WHERE A.LIST_ENTRY_ID = B.LIST_ENTRY_ID
4197
4198 )
4199
4200 WHERE LIST_HEADER_ID = :list_id AND LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID FROM IEC_VAL_ENTRY_CACHE);
4201
4202 END;'
4203
4204 USING p_list_id;
4205
4206
4207
4208 EXCEPTION
4209
4210 WHEN OTHERS THEN
4211
4212 IF SQLCODE = -904 THEN
4213
4214 Log_MissingSourceTypeColumns(p_list_id, p_source_type_view, Get_SourceType(p_list_id), 'UPDATE_AMS_LIST_ENTRIES', 'UPDATE_LIST_ENTRIES');
4215
4216 RAISE fnd_api.g_exc_unexpected_error;
4217
4218 ELSE
4219
4220 Log( 'Update_AmsListEntries'
4221
4222 , 'MAIN'
4223
4224 , SQLERRM
4225
4226 );
4227
4228 RAISE fnd_api.g_exc_unexpected_error;
4229
4230 END IF;
4231
4232 END Update_AmsListEntries;
4233
4234
4235
4236 PROCEDURE Update_ValidationReportDetails
4237
4238 (p_list_id IN NUMBER)
4239
4240 IS
4241
4242
4243
4244 l_user_id NUMBER;
4245
4246 l_login_id NUMBER;
4247
4248
4249
4250 L_TEMP VARCHAR2(4000);
4251
4252 BEGIN
4253
4254 l_user_id := nvl(FND_GLOBAL.user_id, -1);
4255
4256 l_login_id := nvl(FND_GLOBAL.conc_login_id, -1);
4257
4258
4259
4260 BEGIN
4261
4262 EXECUTE IMMEDIATE
4263
4264 'UPDATE IEC_O_VALIDATION_REPORT_DETS A
4265
4266 SET
4267
4268 ( DO_NOT_USE_REASON_S1
4269
4270 , DO_NOT_USE_REASON_S2
4271
4272 , DO_NOT_USE_REASON_S3
4273
4274 , DO_NOT_USE_REASON_S4
4275
4276 , DO_NOT_USE_REASON_S5
4277
4278 , DO_NOT_USE_REASON_S6
4279
4280 ) =
4281
4282 ( SELECT
4283
4284 DO_NOT_USE_REASON_S1
4285
4286 , DO_NOT_USE_REASON_S2
4287
4288 , DO_NOT_USE_REASON_S3
4289
4290 , DO_NOT_USE_REASON_S4
4291
4292 , DO_NOT_USE_REASON_S5
4293
4294 , DO_NOT_USE_REASON_S6
4295
4296 FROM IEC_VAL_ENTRY_CACHE B WHERE A.LIST_ENTRY_ID = B.LIST_ENTRY_ID
4297
4298 )
4299
4300 , LAST_UPDATED_BY = :login_id
4301
4302 , LAST_UPDATE_DATE = SYSDATE
4303
4304 , LAST_UPDATE_LOGIN = :login_id
4305
4306 WHERE A.LIST_HEADER_ID = :list_id
4307
4308 AND A.LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID FROM IEC_VAL_ENTRY_CACHE)'
4309
4310 USING l_login_id, l_login_id, p_list_id;
4311
4312 EXCEPTION
4313
4314 WHEN OTHERS THEN
4315
4316 Log( 'Update_ValidationReportDetails'
4317
4318 , 'UPDATE_EXISTING_ENTRIES'
4319
4320 , SQLERRM
4321
4322 );
4323
4324 RAISE fnd_api.g_exc_unexpected_error;
4325
4326 END;
4327
4328
4329
4330 BEGIN
4331
4332 EXECUTE IMMEDIATE
4333
4334 'DELETE IEC_O_VALIDATION_REPORT_DETS
4335
4336 WHERE LIST_HEADER_ID = :list_id
4337
4338 AND LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID FROM IEC_VAL_ENTRY_CACHE)
4339
4340 AND DO_NOT_USE_REASON_S1 IS NULL
4341
4342 AND DO_NOT_USE_REASON_S2 IS NULL
4343
4344 AND DO_NOT_USE_REASON_S3 IS NULL
4345
4346 AND DO_NOT_USE_REASON_S4 IS NULL
4347
4348 AND DO_NOT_USE_REASON_S5 IS NULL
4349
4350 AND DO_NOT_USE_REASON_S6 IS NULL'
4351
4352 USING p_list_id;
4353
4354 EXCEPTION
4355
4356 WHEN OTHERS THEN
4357
4358 Log( 'Update_ValidationReportDetails'
4359
4360 , 'DELETE_UNNECESSARY_ENTRIES'
4361
4362 , SQLERRM
4363
4364 );
4365
4366 RAISE fnd_api.g_exc_unexpected_error;
4367
4368 END;
4369
4370
4371
4372 BEGIN
4373
4374 EXECUTE IMMEDIATE
4375
4376 'INSERT INTO IEC_O_VALIDATION_REPORT_DETS
4377
4378 ( LIST_HEADER_ID
4379
4380 , LIST_ENTRY_ID
4381
4382 , DO_NOT_USE_REASON_S1
4383
4384 , DO_NOT_USE_REASON_S2
4385
4386 , DO_NOT_USE_REASON_S3
4387
4388 , DO_NOT_USE_REASON_S4
4389
4390 , DO_NOT_USE_REASON_S5
4391
4392 , DO_NOT_USE_REASON_S6
4393
4394 , CREATED_BY
4395
4396 , CREATION_DATE
4397
4398 , LAST_UPDATED_BY
4399
4400 , LAST_UPDATE_DATE
4401
4402 , LAST_UPDATE_LOGIN )
4403
4404 SELECT :list_id
4405
4406 , LIST_ENTRY_ID
4407
4408 , DO_NOT_USE_REASON_S1
4409
4410 , DO_NOT_USE_REASON_S2
4411
4412 , DO_NOT_USE_REASON_S3
4413
4414 , DO_NOT_USE_REASON_S4
4415
4416 , DO_NOT_USE_REASON_S5
4417
4418 , DO_NOT_USE_REASON_S6
4419
4420 , :user_id
4421
4422 , sysdate
4423
4424 , :login_id
4425
4426 , sysdate
4427
4428 , :login_id
4429
4430 FROM IEC_VAL_ENTRY_CACHE
4431
4432 WHERE LIST_ENTRY_ID NOT IN (SELECT LIST_ENTRY_ID FROM IEC_O_VALIDATION_REPORT_DETS WHERE LIST_HEADER_ID = :list_id)
4433
4434 AND ( DO_NOT_USE_REASON_S1 IS NOT NULL
4435
4436 OR DO_NOT_USE_REASON_S2 IS NOT NULL
4437
4438 OR DO_NOT_USE_REASON_S3 IS NOT NULL
4439
4440 OR DO_NOT_USE_REASON_S4 IS NOT NULL
4441
4442 OR DO_NOT_USE_REASON_S5 IS NOT NULL
4443
4444 OR DO_NOT_USE_REASON_S6 IS NOT NULL
4445
4446 )'
4447
4448 USING p_list_id, l_user_id, l_login_id, l_login_id, p_list_id;
4449
4450
4451
4452 EXCEPTION
4453
4454 WHEN OTHERS THEN
4455
4456 Log( 'Update_ValidationReportDetails'
4457
4458 , 'INSERTING_NEW_ENTRIES'
4459
4460 , SQLERRM
4461
4462 );
4463
4464 RAISE fnd_api.g_exc_unexpected_error;
4465
4466 END;
4467
4468
4469
4470 EXCEPTION
4471
4472 WHEN fnd_api.g_exc_error THEN
4473
4474 ROLLBACK;
4475
4476 RAISE;
4477
4478 WHEN fnd_api.g_exc_unexpected_error THEN
4479
4480 ROLLBACK;
4481
4482 RAISE;
4483
4484 WHEN OTHERS THEN
4485
4486 ROLLBACK;
4487
4488 Log( 'Update_ValidationReportDetails'
4489
4490 , 'MAIN'
4491
4492 , SQLERRM
4493
4494 );
4495
4496 RAISE fnd_api.g_exc_unexpected_error;
4497
4498
4499
4500 END Update_ValidationReportDetails;
4501
4502
4503
4504 PROCEDURE Update_CallableZones
4505
4506 (p_list_id IN NUMBER)
4507
4508 IS
4509
4510 l_cp_postfix SYSTEM.varchar_tbl_type := SYSTEM.varchar_tbl_type();
4511
4512
4513
4514 TYPE ref_csr_type IS REF CURSOR;
4515
4516 l_callable_zone_csr ref_csr_type;
4517
4518
4519
4520 l_tc_tz_pair_id NUMBER(15);
4521
4522 l_subset_id NUMBER(15);
4523
4524 l_territory_code VARCHAR2(2);
4525
4526 l_region_id NUMBER(15);
4527
4528 l_timezone_id NUMBER(15);
4529
4530
4531
4532 BEGIN
4533
4534
4535
4536 -- Update IEC_TC_TZ_PAIRS_CACHE for current contact point (increment record counts)
4537
4538
4539
4540 FOR subset_rec IN (SELECT SUBSET_ID SUBSET_ID
4541
4542 , CURR_CP_TERRITORY_CODE TERRITORY_CODE
4543
4544 , CURR_CP_REGION_ID REGION_ID
4545
4546 , CURR_CP_TIME_ZONE TIME_ZONE
4547
4548 , COUNT(*) RECORD_COUNT
4549
4550 FROM IEC_VAL_ENTRY_CACHE
4551
4552 WHERE DO_NOT_USE_FLAG = 'N'
4553
4554 GROUP BY SUBSET_ID
4555
4556 , CURR_CP_TERRITORY_CODE
4557
4558 , CURR_CP_REGION_ID
4559
4560 , CURR_CP_TIME_ZONE)
4561
4562 LOOP
4563
4564
4565
4566 l_tc_tz_pair_id := NULL;
4567
4568
4569
4570 IF subset_rec.REGION_ID IS NULL THEN
4571
4572
4573
4574 EXECUTE IMMEDIATE
4575
4576 'UPDATE IEC_TC_TZ_PAIRS_CACHE
4577
4578 SET RECORD_COUNT = NVL(RECORD_COUNT, 0) + :record_count_incr
4579
4580 WHERE SUBSET_ID = :subset_id
4581
4582 AND TERRITORY_CODE = :territory_code
4583
4584 AND TIMEZONE_ID = :timezone_id
4585
4586 AND REGION_ID IS NULL
4587
4588 AND CACHE_ONLY_FLAG <> ''O''
4589
4590 RETURNING TC_TZ_PAIR_ID INTO :tc_tz_pair_id'
4591
4592 USING subset_rec.RECORD_COUNT
4593
4594 , subset_rec.SUBSET_ID
4595
4596 , subset_rec.TERRITORY_CODE
4597
4598 , subset_rec.TIME_ZONE
4599
4600 , OUT l_tc_tz_pair_id;
4601
4602
4603
4604 ELSE
4605
4606 EXECUTE IMMEDIATE
4607
4608 'UPDATE IEC_TC_TZ_PAIRS_CACHE
4609
4610 SET RECORD_COUNT = NVL(RECORD_COUNT, 0) + :record_count_incr
4611
4612 WHERE SUBSET_ID = :subset_id
4613
4614 AND TERRITORY_CODE = :territory_code
4615
4616 AND TIMEZONE_ID = :timezone_id
4617
4618 AND REGION_ID = :region_id
4619
4620 AND CACHE_ONLY_FLAG <> ''O''
4621
4622 RETURNING TC_TZ_PAIR_ID INTO :tc_tz_pair_id'
4623
4624 USING subset_rec.RECORD_COUNT
4625
4626 , subset_rec.SUBSET_ID
4627
4628 , subset_rec.TERRITORY_CODE
4629
4630 , subset_rec.TIME_ZONE
4631
4632 , subset_rec.REGION_ID
4633
4634 , OUT l_tc_tz_pair_id;
4635
4636
4637
4638 END IF;
4639
4640
4641
4642 IF SQL%ROWCOUNT = 0 THEN
4643
4644
4645
4646 -- Create record and initialize RECORD_COUNT
4647
4648 EXECUTE IMMEDIATE
4649
4650 'SELECT IEC_G_MKTG_ITEM_CC_TZS_S.NEXTVAL FROM DUAL'
4651
4652 INTO l_tc_tz_pair_id;
4653
4654
4655
4656 EXECUTE IMMEDIATE
4657
4658 'INSERT INTO IEC_TC_TZ_PAIRS_CACHE
4659
4660 ( SUBSET_ID
4661
4662 , TERRITORY_CODE
4663
4664 , REGION_ID
4665
4666 , TIMEZONE_ID
4667
4668 , TC_TZ_PAIR_ID
4669
4670 , RECORD_COUNT
4671
4672 , CACHE_ONLY_FLAG)
4673
4674 VALUES ( :subset_id
4675
4676 , :territory_code
4677
4678 , :region_id
4679
4680 , :timezone_id
4681
4682 , :tc_tz_pair_id
4683
4684 , :init_record_count
4685
4686 , ''Y'')'
4687
4688 USING subset_rec.SUBSET_ID
4689
4690 , subset_rec.TERRITORY_CODE
4691
4692 , subset_rec.REGION_ID
4693
4694 , subset_rec.TIME_ZONE
4695
4696 , l_tc_tz_pair_id
4697
4698 , subset_rec.RECORD_COUNT;
4699
4700
4701
4702 END IF;
4703
4704
4705
4706 END LOOP;
4707
4708
4709
4710 -- Update IEC_TC_TZ_PAIRS_CACHE for contact points 1 through 6 (do not increment record counts)
4711
4712 l_cp_postfix.EXTEND(6);
4713
4714 l_cp_postfix(1) := '_S1';
4715
4716 l_cp_postfix(2) := '_S2';
4717
4718 l_cp_postfix(3) := '_S3';
4719
4720 l_cp_postfix(4) := '_S4';
4721
4722 l_cp_postfix(5) := '_S5';
4723
4724 l_cp_postfix(6) := '_S6';
4725
4726
4727
4728 FOR i IN 1..l_cp_postfix.COUNT LOOP
4729
4730
4731
4732 OPEN l_callable_zone_csr FOR
4733
4734 'SELECT DISTINCT SUBSET_ID SUBSET_ID
4735
4736 , TERRITORY_CODE' || l_cp_postfix(i) || ' TERRITORY_CODE
4737
4738 , REGION_ID' || l_cp_postfix(i) || ' REGION_ID
4739
4740 , TIME_ZONE' || l_cp_postfix(i) || ' TIME_ZONE
4741
4742 FROM IEC_VAL_ENTRY_CACHE
4743
4744 WHERE DO_NOT_USE_FLAG = ''N''
4745
4746 AND VALID_FLAG' || l_cp_postfix(i) || ' = ''Y''';
4747
4748
4749
4750 LOOP
4751
4752
4753
4754 l_tc_tz_pair_id := NULL;
4755
4756
4757
4758 FETCH l_callable_zone_csr INTO l_subset_id, l_territory_code, l_region_id, l_timezone_id;
4759
4760
4761
4762 EXIT WHEN l_callable_zone_csr%NOTFOUND;
4763
4764
4765
4766 BEGIN
4767
4768 IF l_region_id IS NULL THEN
4769
4770
4771
4772 EXECUTE IMMEDIATE
4773
4774 'SELECT TC_TZ_PAIR_ID
4775
4776 FROM IEC_TC_TZ_PAIRS_CACHE
4777
4778 WHERE SUBSET_ID = :subset_id
4779
4780 AND TERRITORY_CODE = :territory_code
4781
4782 AND TIMEZONE_ID = :timezone_id
4783
4784 AND REGION_ID IS NULL
4785
4786 AND CACHE_ONLY_FLAG <> ''O'''
4787
4788 INTO l_tc_tz_pair_id
4789
4790 USING l_subset_id
4791
4792 , l_territory_code
4793
4794 , l_timezone_id;
4795
4796 ELSE
4797
4798
4799
4800 EXECUTE IMMEDIATE
4801
4802 'SELECT TC_TZ_PAIR_ID
4803
4804 FROM IEC_TC_TZ_PAIRS_CACHE
4805
4806 WHERE SUBSET_ID = :subset_id
4807
4808 AND TERRITORY_CODE = :territory_code
4809
4810 AND TIMEZONE_ID = :timezone_id
4811
4812 AND REGION_ID = :region_id
4813
4814 AND CACHE_ONLY_FLAG <> ''O'''
4815
4816 INTO l_tc_tz_pair_id
4817
4818 USING l_subset_id
4819
4820 , l_territory_code
4821
4822 , l_timezone_id
4823
4824 , l_region_id;
4825
4826
4827
4828 END IF;
4829
4830
4831
4832 EXCEPTION
4833
4834 WHEN NO_DATA_FOUND THEN
4835
4836
4837
4838 -- Create record and initialize RECORD_COUNT to 0
4839
4840 EXECUTE IMMEDIATE
4841
4842 'SELECT IEC_G_MKTG_ITEM_CC_TZS_S.NEXTVAL FROM DUAL'
4843
4844 INTO l_tc_tz_pair_id;
4845
4846
4847
4848 EXECUTE IMMEDIATE
4849
4850 'INSERT INTO IEC_TC_TZ_PAIRS_CACHE
4851
4852 ( SUBSET_ID
4853
4854 , TERRITORY_CODE
4855
4856 , REGION_ID
4857
4858 , TIMEZONE_ID
4859
4860 , TC_TZ_PAIR_ID
4861
4862 , RECORD_COUNT
4863
4864 , CACHE_ONLY_FLAG)
4865
4866 VALUES ( :subset_id
4867
4868 , :territory_code
4869
4870 , :region_id
4871
4872 , :timezone_id
4873
4874 , :tc_tz_pair_id
4875
4876 , :init_record_count
4877
4878 , ''Y'')'
4879
4880 USING l_subset_id
4881
4882 , l_territory_code
4883
4884 , l_region_id
4885
4886 , l_timezone_id
4887
4888 , l_tc_tz_pair_id
4889
4890 , 0;
4891
4892
4893
4894 WHEN OTHERS THEN
4895
4896 RAISE;
4897
4898 END;
4899
4900
4901
4902 END LOOP;
4903
4904
4905
4906 CLOSE l_callable_zone_csr;
4907
4908
4909
4910 END LOOP;
4911
4912
4913
4914 -- Update IEC_VAL_ENTRY_CACHE with the MKTG_ITEM_CC_TZ_ID
4915
4916 EXECUTE IMMEDIATE
4917
4918 'UPDATE IEC_VAL_ENTRY_CACHE A
4919
4920 SET A.MKTG_ITEM_CC_TZS_ID_S1 = (SELECT TC_TZ_PAIR_ID
4921
4922 FROM IEC_TC_TZ_PAIRS_CACHE
4923
4924 WHERE SUBSET_ID = A.SUBSET_ID
4925
4926 AND TERRITORY_CODE = A.TERRITORY_CODE_S1
4927
4928 AND TIMEZONE_ID = A.TIME_ZONE_S1
4929
4930 AND NVL(REGION_ID, -1) = NVL(A.REGION_ID_S1, -1)
4931
4932 AND A.VALID_FLAG_S1 = ''Y''
4933
4934 AND CACHE_ONLY_FLAG <> ''O'')
4935
4936 , A.MKTG_ITEM_CC_TZS_ID_S2 = (SELECT TC_TZ_PAIR_ID
4937
4938 FROM IEC_TC_TZ_PAIRS_CACHE
4939
4940 WHERE SUBSET_ID = A.SUBSET_ID
4941
4942 AND TERRITORY_CODE = A.TERRITORY_CODE_S2
4943
4944 AND TIMEZONE_ID = A.TIME_ZONE_S2
4945
4946 AND NVL(REGION_ID, -1) = NVL(A.REGION_ID_S2, -1)
4947
4948 AND A.VALID_FLAG_S2 = ''Y''
4949
4950 AND CACHE_ONLY_FLAG <> ''O'')
4951
4952 , A.MKTG_ITEM_CC_TZS_ID_S3 = (SELECT TC_TZ_PAIR_ID
4953
4954 FROM IEC_TC_TZ_PAIRS_CACHE
4955
4956 WHERE SUBSET_ID = A.SUBSET_ID
4957
4958 AND TERRITORY_CODE = A.TERRITORY_CODE_S3
4959
4960 AND TIMEZONE_ID = A.TIME_ZONE_S3
4961
4962 AND NVL(REGION_ID, -1) = NVL(A.REGION_ID_S3, -1)
4963
4964 AND A.VALID_FLAG_S3 = ''Y''
4965
4966 AND CACHE_ONLY_FLAG <> ''O'')
4967
4968 , A.MKTG_ITEM_CC_TZS_ID_S4 = (SELECT TC_TZ_PAIR_ID
4969
4970 FROM IEC_TC_TZ_PAIRS_CACHE
4971
4972 WHERE SUBSET_ID = A.SUBSET_ID
4973
4974 AND TERRITORY_CODE = A.TERRITORY_CODE_S4
4975
4976 AND TIMEZONE_ID = A.TIME_ZONE_S4
4977
4978 AND NVL(REGION_ID, -1) = NVL(A.REGION_ID_S4, -1)
4979
4980 AND A.VALID_FLAG_S4 = ''Y''
4981
4982 AND CACHE_ONLY_FLAG <> ''O'')
4983
4984 , A.MKTG_ITEM_CC_TZS_ID_S5 = (SELECT TC_TZ_PAIR_ID
4985
4986 FROM IEC_TC_TZ_PAIRS_CACHE
4987
4988 WHERE SUBSET_ID = A.SUBSET_ID
4989
4990 AND TERRITORY_CODE = A.TERRITORY_CODE_S5
4991
4992 AND TIMEZONE_ID = A.TIME_ZONE_S5
4993
4994 AND NVL(REGION_ID, -1) = NVL(A.REGION_ID_S5, -1)
4995
4996 AND A.VALID_FLAG_S5 = ''Y''
4997
4998 AND CACHE_ONLY_FLAG <> ''O'')
4999
5000 , A.MKTG_ITEM_CC_TZS_ID_S6 = (SELECT TC_TZ_PAIR_ID
5001
5002 FROM IEC_TC_TZ_PAIRS_CACHE
5003
5004 WHERE SUBSET_ID = A.SUBSET_ID
5005
5006 AND TERRITORY_CODE = A.TERRITORY_CODE_S6
5007
5008 AND TIMEZONE_ID = A.TIME_ZONE_S6
5009
5010 AND NVL(REGION_ID, -1) = NVL(A.REGION_ID_S6, -1)
5011
5012 AND A.VALID_FLAG_S6 = ''Y''
5013
5014 AND CACHE_ONLY_FLAG <> ''O'')
5015
5016 , A.CURR_CP_MKTG_ITEM_CC_TZS_ID = (SELECT TC_TZ_PAIR_ID
5017
5018 FROM IEC_TC_TZ_PAIRS_CACHE
5019
5020 WHERE SUBSET_ID = A.SUBSET_ID
5021
5022 AND TERRITORY_CODE = A.CURR_CP_TERRITORY_CODE
5023
5024 AND TIMEZONE_ID = A.CURR_CP_TIME_ZONE
5025
5026 AND NVL(REGION_ID, -1) = NVL(A.CURR_CP_REGION_ID, -1)
5027
5028 AND CACHE_ONLY_FLAG <> ''O'')
5029
5030 WHERE A.DO_NOT_USE_FLAG = ''N''';
5031
5032
5033
5034 EXCEPTION
5035
5036 WHEN OTHERS THEN
5037
5038 Log( 'Update_CallableZones'
5039
5040 , 'MAIN'
5041
5042 , SQLERRM
5043
5044 );
5045
5046 RAISE fnd_api.g_exc_unexpected_error;
5047
5048
5049
5050 END Update_CallableZones;
5051
5052
5053
5054 PROCEDURE Incr_RecordsLoadedCounts
5055
5056 ( p_schedule_id IN NUMBER
5057
5058 , p_list_id IN NUMBER
5059
5060 , p_subset_id_col IN SYSTEM.number_tbl_type
5061
5062 , p_incr_amount_col IN SYSTEM.number_tbl_type
5063
5064 )
5065
5066 IS
5067
5068 BEGIN
5069
5070
5071
5072 IF p_subset_id_col.COUNT > 0 THEN
5073
5074 FORALL i IN p_subset_id_col.FIRST..p_subset_id_col.LAST
5075
5076 UPDATE IEC_G_REP_SUBSET_COUNTS
5077
5078 SET RECORD_LOADED = NVL(RECORD_LOADED, 0) + p_incr_amount_col(i)
5079
5080 WHERE SCHEDULE_ID = p_schedule_id
5081
5082 AND LIST_HEADER_ID = p_list_id
5083
5084 AND SUBSET_ID = p_subset_id_col(i);
5085
5086 END IF;
5087
5088
5089
5090 EXCEPTION
5091
5092 WHEN OTHERS THEN
5093
5094 Log( 'Incr_RecordsLoadedCounts'
5095
5096 , 'MAIN'
5097
5098 , SQLERRM
5099
5100 );
5101
5102 RAISE fnd_api.g_exc_unexpected_error;
5103
5104
5105
5106 END Incr_RecordsLoadedCounts;
5107
5108
5109
5110 PROCEDURE Incr_CallableZoneCounts
5111
5112 ( p_callable_zone_id_col IN SYSTEM.number_tbl_type
5113
5114 , p_incr_amount_col IN SYSTEM.number_tbl_type
5115
5116 )
5117
5118 IS
5119
5120 BEGIN
5121
5122
5123
5124 IF p_callable_zone_id_col.COUNT > 0 THEN
5125
5126 FORALL i IN p_callable_zone_id_col.FIRST..p_callable_zone_id_col.LAST
5127
5128 UPDATE IEC_G_MKTG_ITEM_CC_TZS
5129
5130 SET RECORD_COUNT = NVL(RECORD_COUNT, 0) + p_incr_amount_col(i)
5131
5132 WHERE ITM_CC_TZ_ID = p_callable_zone_id_col(i);
5133
5134 END IF;
5135
5136
5137
5138 EXCEPTION
5139
5140 WHEN OTHERS THEN
5141
5142 Log( 'Incr_CallableZoneCounts'
5143
5144 , 'MAIN'
5145
5146 , SQLERRM
5147
5148 );
5149
5150 RAISE fnd_api.g_exc_unexpected_error;
5151
5152
5153
5154 END Incr_CallableZoneCounts;
5155
5156
5157
5158 PROCEDURE Incr_CallableZoneCounts_Cache
5159
5160 ( p_callable_zone_id_col IN SYSTEM.number_tbl_type
5161
5162 , p_incr_amount_col IN SYSTEM.number_tbl_type
5163
5164 )
5165
5166 IS
5167
5168 BEGIN
5169
5170
5171
5172 IF p_callable_zone_id_col.COUNT > 0 THEN
5173
5174 FORALL i IN p_callable_zone_id_col.FIRST..p_callable_zone_id_col.LAST
5175
5176 UPDATE IEC_TC_TZ_PAIRS_CACHE
5177
5178 SET RECORD_COUNT = NVL(RECORD_COUNT, 0) + p_incr_amount_col(i)
5179
5180 WHERE TC_TZ_PAIR_ID = p_callable_zone_id_col(i);
5181
5182 END IF;
5183
5184
5185
5186 EXCEPTION
5187
5188 WHEN OTHERS THEN
5189
5190 Log( 'Incr_CallableZoneCounts_Cache'
5191
5192 , 'MAIN'
5193
5194 , SQLERRM
5195
5196 );
5197
5198 RAISE fnd_api.g_exc_unexpected_error;
5199
5200
5201
5202 END Incr_CallableZoneCounts_Cache;
5203
5204
5205
5206 PROCEDURE Load_CallableZones
5207
5208 (p_list_id IN NUMBER)
5209
5210 IS
5211
5212 BEGIN
5213
5214
5215
5216 -- LOAD IEC_G_MKTG_ITEM_CC_TZS RECORDS FOR CURRENT LIST INTO CACHE
5217
5218 EXECUTE IMMEDIATE
5219
5220 'INSERT INTO IEC_TC_TZ_PAIRS_CACHE (SUBSET_ID, TERRITORY_CODE, REGION_ID, TIMEZONE_ID, TC_TZ_PAIR_ID, RECORD_COUNT, CACHE_ONLY_FLAG)
5221
5222 SELECT SUBSET_ID, TERRITORY_CODE, REGION_ID, TIMEZONE_ID, ITM_CC_TZ_ID, 0, ''N''
5223
5224 FROM IEC_G_MKTG_ITEM_CC_TZS
5225
5226 WHERE LIST_HEADER_ID = :list_id'
5227
5228 USING p_list_id;
5229
5230
5231
5232 END Load_CallableZones;
5233
5234
5235
5236 PROCEDURE Get_CallableZoneDetail
5237
5238 ( p_cc_tz_id IN NUMBER
5239
5240 , x_territory_code OUT NOCOPY VARCHAR2 -- OUT
5241
5242 , x_region_id OUT NOCOPY NUMBER -- OUT
5243
5244 , x_time_zone_id OUT NOCOPY NUMBER -- OUT
5245
5246 , x_valid_flag OUT NOCOPY VARCHAR2) -- OUT
5247
5248 IS
5249
5250 l_territory_code VARCHAR2(2);
5251
5252 l_region_id NUMBER;
5253
5254 l_time_zone_id NUMBER;
5255
5256 l_valid_flag VARCHAR2(1);
5257
5258 BEGIN
5259
5260
5261
5262 IF p_cc_tz_id IS NOT NULL THEN
5263
5264 EXECUTE IMMEDIATE
5265
5266 'SELECT TERRITORY_CODE, REGION_ID, TIMEZONE_ID
5267
5268 FROM IEC_G_MKTG_ITEM_CC_TZS
5269
5270 WHERE ITM_CC_TZ_ID = :cc_tz_id'
5271
5272 INTO l_territory_code, l_region_id, l_time_zone_id
5273
5274 USING p_cc_tz_id;
5275
5276 l_valid_flag := 'Y';
5277
5278 ELSE
5279
5280 l_territory_code := NULL;
5281
5282 l_region_id := NULL;
5283
5284 l_time_zone_id := NULL;
5285
5286 l_valid_flag := 'N';
5287
5288 END IF;
5289
5290
5291
5292 x_territory_code := l_territory_code;
5293
5294 x_region_id := l_region_id;
5295
5296 x_time_zone_id := l_time_zone_id;
5297
5298 x_valid_flag := l_valid_flag;
5299
5300
5301
5302 EXCEPTION
5303
5304 WHEN NO_DATA_FOUND THEN
5305
5306 x_territory_code := NULL;
5307
5308 x_region_id := NULL;
5309
5310 x_time_zone_id := NULL;
5311
5312 x_valid_flag := 'N';
5313
5314 WHEN OTHERS THEN
5315
5316 Log( 'Get_CallableZoneDetail'
5317
5318 , 'MAIN'
5319
5320 , SQLERRM
5321
5322 );
5323
5324 RAISE fnd_api.g_exc_unexpected_error;
5325
5326
5327
5328 END Get_CallableZoneDetail;
5329
5330
5331
5332 PROCEDURE Get_CallableZoneDetail_Cache
5333
5334 ( p_cc_tz_id IN NUMBER
5335
5336 , x_territory_code OUT NOCOPY VARCHAR2 -- OUT
5337
5338 , x_region_id OUT NOCOPY NUMBER -- OUT
5339
5340 , x_time_zone_id OUT NOCOPY NUMBER -- OUT
5341
5342 , x_valid_flag OUT NOCOPY VARCHAR2) -- OUT
5343
5344 IS
5345
5346 l_territory_code VARCHAR2(2);
5347
5348 l_region_id NUMBER;
5349
5350 l_time_zone_id NUMBER;
5351
5352 l_valid_flag VARCHAR2(1);
5353
5354 BEGIN
5355
5356
5357
5358 IF p_cc_tz_id IS NOT NULL THEN
5359
5360
5361
5362 EXECUTE IMMEDIATE
5363
5364 'SELECT TERRITORY_CODE, REGION_ID, TIMEZONE_ID
5365
5366 FROM IEC_TC_TZ_PAIRS_CACHE
5367
5368 WHERE TC_TZ_PAIR_ID = :cc_tz_id'
5369
5370 INTO l_territory_code, l_region_id, l_time_zone_id
5371
5372 USING p_cc_tz_id;
5373
5374 l_valid_flag := 'Y';
5375
5376 ELSE
5377
5378 l_territory_code := NULL;
5379
5380 l_region_id := NULL;
5381
5382 l_time_zone_id := NULL;
5383
5384 l_valid_flag := 'N';
5385
5386 END IF;
5387
5388
5389
5390 x_territory_code := l_territory_code;
5391
5392 x_region_id := l_region_id;
5393
5394 x_time_zone_id := l_time_zone_id;
5395
5396 x_valid_flag := l_valid_flag;
5397
5398
5399
5400 EXCEPTION
5401
5402 WHEN NO_DATA_FOUND THEN
5403
5404 x_territory_code := NULL;
5405
5406 x_region_id := NULL;
5407
5408 x_time_zone_id := NULL;
5409
5410 x_valid_flag := 'N';
5411
5412 WHEN OTHERS THEN
5413
5414 Log( 'Get_CallableZoneDetail_Cache'
5415
5416 , 'MAIN'
5417
5418 , SQLERRM
5419
5420 );
5421
5422 RAISE fnd_api.g_exc_unexpected_error;
5423
5424
5425
5426 END Get_CallableZoneDetail_Cache;
5427
5428
5429
5430 PROCEDURE Delete_CallableZones
5431
5432 (p_list_id IN NUMBER)
5433
5434 IS
5435
5436 BEGIN
5437
5438
5439
5440 EXECUTE IMMEDIATE
5441
5442 'DELETE IEC_G_MKTG_ITEM_CC_TZS
5443
5444 WHERE LIST_HEADER_ID = :list_id'
5445
5446 USING p_list_id;
5447
5448
5449
5450 END Delete_CallableZones;
5451
5452
5453
5454 PROCEDURE Purge_CallableZones
5455
5456 ( p_list_id IN NUMBER
5457
5458 , p_campaign_schedule_id IN NUMBER)
5459
5460 IS
5461
5462 l_subset_id_col SYSTEM.number_tbl_type;
5463
5464 l_territory_code_col SYSTEM.varchar_tbl_type;
5465
5466 l_region_col SYSTEM.varchar_tbl_type;
5467
5468 l_timezone_col SYSTEM.number_tbl_type;
5469
5470 l_tc_tz_pair_id_col SYSTEM.number_tbl_type;
5471
5472 l_record_count_col SYSTEM.number_tbl_type;
5473
5474
5475
5476 BEGIN
5477
5478
5479
5480 -- Create new tc/tz pairs in IEC_G_MKTG_ITEM_CC_TZS for those tc/tz pairs only existing in cache
5481
5482 SELECT SUBSET_ID, TERRITORY_CODE, REGION_ID, TIMEZONE_ID, TC_TZ_PAIR_ID, RECORD_COUNT
5483
5484 BULK COLLECT INTO l_subset_id_col, l_territory_code_col, l_region_col, l_timezone_col, l_tc_tz_pair_id_col, l_record_count_col
5485
5486 FROM IEC_TC_TZ_PAIRS_CACHE
5487
5488 WHERE CACHE_ONLY_FLAG = 'Y';
5489
5490
5491
5492 IF l_territory_code_col IS NOT NULL AND l_territory_code_col.COUNT > 0 THEN
5493
5494
5495
5496 FORALL I IN l_territory_code_col.FIRST..l_territory_code_col.LAST
5497
5498 INSERT INTO IEC_G_MKTG_ITEM_CC_TZS ( ITM_CC_TZ_ID
5499
5500 , SUBSET_ID
5501
5502 , LIST_HEADER_ID
5503
5504 , CAMPAIGN_SCHEDULE_ID
5505
5506 , TERRITORY_CODE
5507
5508 , REGION_ID
5509
5510 , TIMEZONE_ID
5511
5512 , LAST_CALLABLE_TIME
5513
5514 , CALLABLE_FLAG
5515
5516 , RECORD_COUNT
5517
5518 , OBJECT_VERSION_NUMBER
5519
5520 , LAST_UPDATE_DATE)
5521
5522 VALUES ( l_tc_tz_pair_id_col(I)
5523
5524 , l_subset_id_col(I)
5525
5526 , p_list_id
5527
5528 , p_campaign_schedule_id
5529
5530 , l_territory_code_col(I)
5531
5532 , l_region_col(I)
5533
5534 , l_timezone_col(I)
5535
5536 , NULL
5537
5538 , NULL
5539
5540 , l_record_count_col(I)
5541
5542 , 1
5543
5544 , SYSDATE);
5545
5546 END IF;
5547
5548
5549
5550 -- Only update the RECORD_COUNT column for those tc/tz pairs that already exist in the db (outside of cache)
5551
5552 SELECT TC_TZ_PAIR_ID, RECORD_COUNT
5553
5554 BULK COLLECT INTO l_tc_tz_pair_id_col, l_record_count_col
5555
5556 FROM IEC_TC_TZ_PAIRS_CACHE
5557
5558 WHERE CACHE_ONLY_FLAG = 'N';
5559
5560
5561
5562 IF l_tc_tz_pair_id_col IS NOT NULL AND l_tc_tz_pair_id_col.COUNT > 0 THEN
5563
5564
5565
5566 FORALL I IN l_tc_tz_pair_id_col.FIRST..l_tc_tz_pair_id_col.LAST
5567
5568 UPDATE IEC_G_MKTG_ITEM_CC_TZS
5569
5570 SET RECORD_COUNT = RECORD_COUNT + l_record_count_col(I)
5571
5572 , LAST_UPDATE_DATE = SYSDATE
5573
5574 WHERE ITM_CC_TZ_ID = l_tc_tz_pair_id_col(I);
5575
5576 END IF;
5577
5578
5579
5580 -- Update these records to reflect the fact that they now exist outside of the cache
5581
5582 UPDATE IEC_TC_TZ_PAIRS_CACHE
5583
5584 SET CACHE_ONLY_FLAG = 'N'
5585
5586 WHERE CACHE_ONLY_FLAG = 'Y';
5587
5588
5589
5590 -- Clear record counts in cache to start fresh for next batch
5591
5592 UPDATE IEC_TC_TZ_PAIRS_CACHE
5593
5594 SET RECORD_COUNT = 0;
5595
5596
5597
5598 EXCEPTION
5599
5600 WHEN OTHERS THEN
5601
5602 Log( 'Purge_CallableZones'
5603
5604 , 'MAIN'
5605
5606 , SQLERRM
5607
5608 );
5609
5610 RAISE fnd_api.g_exc_unexpected_error;
5611
5612
5613
5614 END Purge_CallableZones;
5615
5616
5617
5618 PROCEDURE Update_IecReturnEntries
5619
5620 ( p_list_id IN NUMBER
5621
5622 , p_campaign_schedule_id IN NUMBER
5623
5624 , p_campaign_id IN NUMBER
5625
5626 , p_source_type_view IN VARCHAR2)
5627
5628 IS
5629
5630 l_user_id NUMBER;
5631
5632 l_login_id NUMBER;
5633
5634 BEGIN
5635
5636 l_user_id := nvl(FND_GLOBAL.user_id, -1);
5637
5638 l_login_id := nvl(FND_GLOBAL.conc_login_id, -1);
5639
5640
5641
5642 BEGIN
5643
5644 EXECUTE IMMEDIATE
5645
5646 'UPDATE IEC_G_RETURN_ENTRIES A
5647
5648 SET ( A.SUBSET_ID
5649
5650 , A.DO_NOT_USE_FLAG
5651
5652 , A.DO_NOT_USE_REASON
5653
5654 , A.CONTACT_POINT_ID
5655
5656 , A.CONTACT_POINT_INDEX
5657
5658 , A.COUNTRY_CODE
5659
5660 , A.AREA_CODE
5661
5662 , A.PHONE_NUMBER
5663
5664 , A.RAW_PHONE_NUMBER
5665
5666 , A.TIME_ZONE
5667
5668 , A.ITM_CC_TZ_ID
5669
5670 , A.PHONE_LINE_TYPE
5671
5672 , A.CONTACT_POINT_PURPOSE )
5673
5674 =
5675
5676 ( SELECT B.SUBSET_ID
5677
5678 , B.DO_NOT_USE_FLAG
5679
5680 , B.DO_NOT_USE_REASON
5681
5682 , B.CURR_CP_ID
5683
5684 , B.CURR_CP_INDEX
5685
5686 , B.CURR_CP_COUNTRY_CODE
5687
5688 , B.CURR_CP_AREA_CODE
5689
5690 , B.CURR_CP_PHONE_NUMBER
5691
5692 , B.CURR_CP_RAW_PHONE_NUMBER
5693
5694 , B.CURR_CP_TIME_ZONE
5695
5696 , B.CURR_CP_MKTG_ITEM_CC_TZS_ID
5697
5698 , B.CURR_CP_PHONE_LINE_TYPE
5699
5700 , B.CURR_CP_CONTACT_POINT_PURPOSE
5701
5702 FROM IEC_VAL_ENTRY_CACHE B
5703
5704 WHERE A.LIST_ENTRY_ID = B.LIST_ENTRY_ID)
5705
5706 , LAST_UPDATED_BY = :login_id
5707
5708 , LAST_UPDATE_DATE = SYSDATE
5709
5710 , LAST_UPDATE_LOGIN = :login_id
5711
5712 WHERE A.LIST_HEADER_ID = :list_id
5713
5714 AND A.LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID FROM IEC_VAL_ENTRY_CACHE)'
5715
5716 USING l_login_id, l_login_id, p_list_id;
5717
5718
5719
5720 EXCEPTION
5721
5722 WHEN OTHERS THEN
5723
5724 Log( 'Update_IecReturnEntries'
5725
5726 , 'UPDATE_EXISTING_ENTRIES'
5727
5728 , SQLERRM
5729
5730 );
5731
5732 RAISE fnd_api.g_exc_unexpected_error;
5733
5734 END;
5735
5736
5737
5738 BEGIN
5739
5740 EXECUTE IMMEDIATE
5741
5742 'DELETE IEC_G_RETURN_ENTRIES A
5743
5744 WHERE A.LIST_HEADER_ID = :list_id
5745
5746 AND A.LIST_ENTRY_ID IN
5747
5748 ( SELECT LIST_ENTRY_ID
5749
5750 FROM IEC_VAL_ENTRY_CACHE
5751
5752 WHERE DO_NOT_USE_FLAG = ''Y''
5753
5754 AND DO_NOT_USE_REASON = ''4'')'
5755
5756 USING p_list_id;
5757
5758
5759
5760 EXCEPTION
5761
5762 WHEN OTHERS THEN
5763
5764 Log( 'Update_IecReturnEntries'
5765
5766 , 'DELETE_INVALIDATED_ENTRIES'
5767
5768 , SQLERRM
5769
5770 );
5771
5772 RAISE fnd_api.g_exc_unexpected_error;
5773
5774 END;
5775
5776
5777
5778 BEGIN
5779
5780 EXECUTE IMMEDIATE
5781
5782 'INSERT INTO IEC_G_RETURN_ENTRIES
5783
5784 ( RETURNS_ID
5785
5786 , CAMPAIGN_ID
5787
5788 , CAMPAIGN_SCHEDULE_ID
5789
5790 , LIST_VIEW_NAME
5791
5792 , LIST_HEADER_ID
5793
5794 , LIST_ENTRY_ID
5795
5796 , SUBSET_ID
5797
5798 , OUTCOME_ID
5799
5800 , RESULT_ID
5801
5802 , REASON_ID
5803
5804 , DELIVER_IH_FLAG
5805
5806 , RECYCLE_FLAG
5807
5808 , DO_NOT_USE_FLAG
5809
5810 , CALLBACK_FLAG
5811
5812 , RECORD_OUT_FLAG
5813
5814 , RECORD_RELEASE_TIME
5815
5816 , CONTACT_POINT_ID
5817
5818 , CONTACT_POINT_INDEX
5819
5820 , COUNTRY_CODE
5821
5822 , AREA_CODE
5823
5824 , PHONE_NUMBER
5825
5826 , RAW_PHONE_NUMBER
5827
5828 , TIME_ZONE
5829
5830 , PHONE_LINE_TYPE
5831
5832 , CONTACT_POINT_PURPOSE
5833
5834 , ITM_CC_TZ_ID
5835
5836 , CREATED_BY
5837
5838 , CREATION_DATE
5839
5840 , LAST_UPDATED_BY
5841
5842 , LAST_UPDATE_DATE
5843
5844 , LAST_UPDATE_LOGIN )
5845
5846 SELECT IEC_G_RETURN_ENTRIES_S.NEXTVAL
5847
5848 , :campaign_id
5849
5850 , :campaign_schedule_id
5851
5852 , :source_type_view
5853
5854 , :list_id
5855
5856 , LIST_ENTRY_ID
5857
5858 , SUBSET_ID
5859
5860 , -1
5861
5862 , -1
5863
5864 , -1
5865
5866 , ''N''
5867
5868 , ''N''
5869
5870 , ''N''
5871
5872 , ''N''
5873
5874 , ''N''
5875
5876 , SYSDATE
5877
5878 , CURR_CP_ID
5879
5880 , CURR_CP_INDEX
5881
5882 , CURR_CP_COUNTRY_CODE
5883
5884 , CURR_CP_AREA_CODE
5885
5886 , CURR_CP_PHONE_NUMBER
5887
5888 , CURR_CP_RAW_PHONE_NUMBER
5889
5890 , CURR_CP_TIME_ZONE
5891
5892 , CURR_CP_PHONE_LINE_TYPE
5893
5894 , CURR_CP_CONTACT_POINT_PURPOSE
5895
5896 , CURR_CP_MKTG_ITEM_CC_TZS_ID
5897
5898 , :user_id
5899
5900 , sysdate
5901
5902 , :login_id
5903
5904 , sysdate
5905
5906 , :login_id
5907
5908 FROM IEC_VAL_ENTRY_CACHE
5909
5910 WHERE DO_NOT_USE_FLAG = ''N''
5911
5912 AND LIST_ENTRY_ID NOT IN (SELECT LIST_ENTRY_ID FROM IEC_G_RETURN_ENTRIES WHERE LIST_HEADER_ID = :list_id)'
5913
5914 USING p_campaign_id, p_campaign_schedule_id, p_source_type_view, p_list_id, l_user_id, l_login_id, l_login_id, p_list_id;
5915
5916
5917
5918 EXCEPTION
5919
5920 WHEN OTHERS THEN
5921
5922 Log( 'Update_IecReturnEntries'
5923
5924 , 'INSERTING_NEW_ENTRIES'
5925
5926 , SQLERRM
5927
5928 );
5929
5930 RAISE fnd_api.g_exc_unexpected_error;
5931
5932 END;
5933
5934
5935
5936 EXCEPTION
5937
5938 WHEN fnd_api.g_exc_error THEN
5939
5940 RAISE;
5941
5942 WHEN fnd_api.g_exc_unexpected_error THEN
5943
5944 RAISE;
5945
5946 WHEN OTHERS THEN
5947
5948 Log( 'Update_IecReturnEntries'
5949
5950 , 'MAIN'
5951
5952 , SQLERRM
5953
5954 );
5955
5956 RAISE fnd_api.g_exc_unexpected_error;
5957
5958
5959
5960 END Update_IecReturnEntries;
5961
5962
5963
5964 PROCEDURE Init_SubsetRtInfo
5965
5966 ( p_list_id IN NUMBER
5967
5968 , p_source_type_view IN VARCHAR2
5969
5970 , x_subset_id_col OUT NOCOPY SYSTEM.number_tbl_type -- OUT
5971
5972 , x_subset_view_col OUT NOCOPY SYSTEM.varchar_tbl_type) -- OUT
5973
5974 IS
5975
5976 l_subset_id NUMBER(15);
5977
5978 l_return_code VARCHAR2(1);
5979
5980 l_validated_once VARCHAR2(1);
5981
5982 BEGIN
5983
5984
5985
5986 x_subset_id_col := SYSTEM.number_tbl_type();
5987
5988 x_subset_view_col := SYSTEM.varchar_tbl_type();
5989
5990
5991
5992 BEGIN
5993
5994 EXECUTE IMMEDIATE
5995
5996 'SELECT VALIDATED_ONCE_FLAG
5997
5998 FROM IEC_O_VALIDATION_STATUS
5999
6000 WHERE LIST_HEADER_ID = :list_id'
6001
6002 INTO l_validated_once
6003
6004 USING p_list_id;
6005
6006 EXCEPTION
6007
6008 WHEN NO_DATA_FOUND THEN
6009
6010 l_validated_once := 'N';
6011
6012 WHEN OTHERS THEN
6013
6014 RAISE;
6015
6016 END;
6017
6018
6019
6020 IF l_validated_once = 'Y' THEN
6021
6022
6023
6024 -- Loop through each subset (in order of priority, default subset assumed to have lowest load priority)
6025
6026 FOR subset_rec IN (SELECT A.LIST_SUBSET_ID
6027
6028 , A.LOAD_PRIORITY
6029
6030 , NVL(B.DEFAULT_SUBSET_FLAG, 'N') SUBSET_FLAG
6031
6032 FROM IEC_G_SUBSET_RT_INFO A, IEC_G_LIST_SUBSETS B
6033
6034 WHERE A.LIST_SUBSET_ID = B.LIST_SUBSET_ID
6035
6036 AND B.LIST_HEADER_ID = p_list_id
6037
6038 AND A.STATUS_CODE <> 'DELETED'
6039
6040 ORDER BY NVL(B.DEFAULT_SUBSET_FLAG, 'N') ASC, A.LOAD_PRIORITY)
6041
6042 LOOP
6043
6044 l_subset_id := subset_rec.LIST_SUBSET_ID;
6045
6046
6047
6048 x_subset_id_col.EXTEND(1);
6049
6050 x_subset_view_col.EXTEND(1);
6051
6052
6053
6054 x_subset_id_col(x_subset_id_col.LAST) := l_subset_id;
6055
6056
6057
6058 -- Retrieve Subset View (Created if necessary, but should already exist)
6059
6060 x_subset_view_col(x_subset_view_col.LAST) := IEC_SUBSET_PVT.GET_SUBSET_VIEW
6061
6062 ( 0
6063
6064 , p_list_id
6065
6066 , subset_rec.LIST_SUBSET_ID
6067
6068 , subset_rec.SUBSET_FLAG
6069
6070 , p_source_type_view
6071
6072 , l_return_code);
6073
6074
6075
6076 IF l_return_code <> FND_API.G_RET_STS_SUCCESS THEN
6077
6078 Log_GetSubsetViewError('Init_SubsetRtInfo', 'GET_SUBSET_VIEW', Get_SubsetName(l_subset_id), Get_ListName(p_list_id));
6079
6080 RAISE fnd_api.g_exc_unexpected_error;
6081
6082 END IF;
6083
6084
6085
6086 END LOOP;
6087
6088
6089
6090 ELSE
6091
6092
6093
6094 -- Loop through each subset (in order of priority, default subset assumed to have lowest load priority)
6095
6096 FOR subset_rec IN (SELECT LIST_SUBSET_ID
6097
6098 , LOAD_PRIORITY
6099
6100 , NVL(DEFAULT_SUBSET_FLAG, 'N') SUBSET_FLAG
6101
6102 FROM IEC_G_LIST_SUBSETS
6103
6104 WHERE LIST_HEADER_ID = p_list_id
6105
6106 AND STATUS_CODE <> 'DELETED'
6107
6108 ORDER BY NVL(DEFAULT_SUBSET_FLAG, 'N') ASC, LOAD_PRIORITY)
6109
6110 LOOP
6111
6112 l_subset_id := subset_rec.LIST_SUBSET_ID;
6113
6114
6115
6116 x_subset_id_col.EXTEND(1);
6117
6118 x_subset_view_col.EXTEND(1);
6119
6120
6121
6122 x_subset_id_col(x_subset_id_col.LAST) := l_subset_id;
6123
6124
6125
6126 -- Retrieve Subset View (Created if necessary)
6127
6128 x_subset_view_col(x_subset_view_col.LAST) := IEC_SUBSET_PVT.GET_SUBSET_VIEW
6129
6130 ( 0
6131
6132 , p_list_id
6133
6134 , subset_rec.LIST_SUBSET_ID
6135
6136 , subset_rec.SUBSET_FLAG
6137
6138 , p_source_type_view
6139
6140 , l_return_code);
6141
6142
6143
6144 IF l_return_code <> FND_API.G_RET_STS_SUCCESS THEN
6145
6146 Log_GetSubsetViewError('Init_SubsetRtInfo', 'GET_SUBSET_VIEW', Get_SubsetName(l_subset_id), Get_ListName(p_list_id));
6147
6148 Log('Init_SubsetRtInfo', 'GET_SUBSET_VIEW');
6149
6150 RAISE fnd_api.g_exc_unexpected_error;
6151
6152 END IF;
6153
6154
6155
6156 IEC_SUBSET_PVT.CREATE_SUBSET_RT_INFO(l_subset_id);
6157
6158
6159
6160 END LOOP;
6161
6162 END IF;
6163
6164
6165
6166 EXCEPTION
6167
6168 WHEN fnd_api.g_exc_error THEN
6169
6170 RAISE;
6171
6172 WHEN fnd_api.g_exc_unexpected_error THEN
6173
6174 RAISE;
6175
6176 WHEN OTHERS THEN
6177
6178 Log( 'Init_SubsetRtInfo'
6179
6180 , 'MAIN'
6181
6182 , SQLERRM
6183
6184 );
6185
6186 RAISE fnd_api.g_exc_unexpected_error;
6187
6188
6189
6190 END Init_SubsetRtInfo;
6191
6192
6193
6194 PROCEDURE Partition_SubsetEntries
6195
6196 ( p_list_id IN NUMBER
6197
6198 , p_subset_id_col IN SYSTEM.number_tbl_type
6199
6200 , p_subset_view_col IN SYSTEM.varchar_tbl_type
6201
6202 , x_subset_rec_loaded_col OUT NOCOPY SYSTEM.number_tbl_type) -- OUT
6203
6204 IS
6205
6206 BEGIN
6207
6208
6209
6210 x_subset_rec_loaded_col := SYSTEM.number_tbl_type();
6211
6212
6213
6214 IF p_subset_id_col IS NOT NULL AND p_subset_id_col.COUNT > 1 THEN
6215
6216
6217
6218 -- Loop through each subset (in order of priority, excluding default subset)
6219
6220 FOR i IN 1..(p_subset_id_col.COUNT - 1) LOOP
6221
6222
6223
6224 IF p_subset_view_col(i) IS NOT NULL THEN
6225
6226 EXECUTE IMMEDIATE
6227
6228 'UPDATE IEC_VAL_ENTRY_CACHE
6229
6230 SET SUBSET_ID = :subset_id
6231
6232 WHERE SUBSET_ID IS NULL
6233
6234 AND DO_NOT_USE_FLAG = ''N''
6235
6236 AND LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID FROM ' || p_subset_view_col(i) || ')'
6237
6238 USING p_subset_id_col(i);
6239
6240
6241
6242 x_subset_rec_loaded_col.EXTEND(1);
6243
6244 x_subset_rec_loaded_col(i) := SQL%ROWCOUNT;
6245
6246
6247
6248 ELSE
6249
6250 Log_SubsetViewDoesNotExist('Partition_SubsetEntries', 'ASSIGN_ENTRIES_TO_SUBSET', Get_SubsetName(p_subset_id_col(i)), Get_ListName(p_list_id));
6251
6252 RAISE fnd_api.g_exc_unexpected_error;
6253
6254 END IF;
6255
6256
6257
6258 END LOOP;
6259
6260
6261
6262 -- Assign all remaining entries to default subset
6263
6264 EXECUTE IMMEDIATE
6265
6266 'UPDATE IEC_VAL_ENTRY_CACHE
6267
6268 SET SUBSET_ID = :subset_id
6269
6270 WHERE SUBSET_ID IS NULL
6271
6272 AND DO_NOT_USE_FLAG = ''N'''
6273
6274 USING p_subset_id_col(p_subset_id_col.LAST);
6275
6276
6277
6278 x_subset_rec_loaded_col.EXTEND(1);
6279
6280 x_subset_rec_loaded_col(x_subset_rec_loaded_col.LAST) := SQL%ROWCOUNT;
6281
6282
6283
6284 ELSIF p_subset_id_col IS NOT NULL AND p_subset_id_col.COUNT = 1 THEN
6285
6286
6287
6288 -- No user-defined subsets exist, assign all entries to default subset
6289
6290 EXECUTE IMMEDIATE
6291
6292 'UPDATE IEC_VAL_ENTRY_CACHE
6293
6294 SET SUBSET_ID = :subset_id
6295
6296 WHERE SUBSET_ID IS NULL
6297
6298 AND DO_NOT_USE_FLAG = ''N'''
6299
6300 USING p_subset_id_col(p_subset_id_col.LAST);
6301
6302
6303
6304 x_subset_rec_loaded_col.EXTEND(1);
6305
6306 x_subset_rec_loaded_col(x_subset_rec_loaded_col.LAST) := SQL%ROWCOUNT;
6307
6308
6309
6310 END IF;
6311
6312
6313
6314 EXCEPTION
6315
6316 WHEN fnd_api.g_exc_error THEN
6317
6318 RAISE;
6319
6320 WHEN fnd_api.g_exc_unexpected_error THEN
6321
6322 RAISE;
6323
6324 WHEN OTHERS THEN
6325
6326 Log( 'Partition_SubsetEntries'
6327
6328 , 'MAIN'
6329
6330 , SQLERRM
6331
6332 );
6333
6334 RAISE fnd_api.g_exc_unexpected_error;
6335
6336
6337
6338 END Partition_SubsetEntries;
6339
6340
6341
6342 FUNCTION Parse_Country_Code
6343
6344 (x_phone_number IN OUT NOCOPY VARCHAR2) -- IN OUT
6345
6346 RETURN VARCHAR2
6347
6348 IS
6349
6350 l_country_code VARCHAR2(9);
6351
6352 l_country_code_col SYSTEM.varchar_tbl_type := SYSTEM.varchar_tbl_type();
6353
6354 l_cc_substr VARCHAR2(500);
6355
6356
6357
6358 BEGIN
6359
6360
6361
6362 x_phone_number := TRANSLATE( UPPER(x_phone_number)
6363
6364 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
6365
6366 , '0123456789');
6367
6368
6369
6370 IF x_phone_number IS NOT NULL AND g_enable_cc_incr_parse THEN
6371
6372
6373
6374 IF g_cc_cc_lookup_tbl IS NOT NULL THEN
6375
6376 FOR I IN 1..LENGTH(x_phone_number) LOOP
6377
6378 l_cc_substr := SUBSTR(x_phone_number, 1, I);
6379
6380 FOR J IN g_cc_cc_lookup_tbl.FIRST..g_cc_cc_lookup_tbl.LAST LOOP
6381
6382 IF g_cc_cc_lookup_tbl.EXISTS(J) AND l_cc_substr = g_cc_cc_lookup_tbl(J) THEN
6383
6384 l_country_code := g_cc_cc_lookup_tbl(J);
6385
6386 GOTO Done;
6387
6388 END IF;
6389
6390 END LOOP;
6391
6392 END LOOP;
6393
6394 END IF;
6395
6396 END IF;
6397
6398
6399
6400 <<Done>>
6401
6402 IF l_country_code IS NOT NULL THEN
6403
6404 x_phone_number := SUBSTR(x_phone_number, LENGTH(l_country_code) + 1);
6405
6406 END IF;
6407
6408 RETURN l_country_code;
6409
6410
6411
6412 EXCEPTION
6413
6414 WHEN fnd_api.g_exc_error THEN
6415
6416 RAISE;
6417
6418 WHEN fnd_api.g_exc_unexpected_error THEN
6419
6420 RAISE;
6421
6422 WHEN OTHERS THEN
6423
6424 Log( 'Parse_Country_Code'
6425
6426 , 'MAIN'
6427
6428 , SQLERRM
6429
6430 );
6431
6432 RAISE fnd_api.g_exc_unexpected_error;
6433
6434
6435
6436 END Parse_Country_Code;
6437
6438
6439
6440 PROCEDURE Parse_Area_Code
6441
6442 ( x_phone_number IN OUT NOCOPY VARCHAR2 -- IN OUT
6443
6444 , x_country_code IN OUT NOCOPY VARCHAR2 -- IN OUT
6445
6446 , x_territory_code IN OUT NOCOPY VARCHAR2 -- IN OUT
6447
6448 , x_area_code OUT NOCOPY VARCHAR2 -- OUT
6449
6450 , x_area_code_req_flag OUT NOCOPY BOOLEAN) -- OUT
6451
6452 IS
6453
6454 l_area_code VARCHAR2(9);
6455
6456 l_area_code_size NUMBER(9);
6457
6458 l_area_code_col SYSTEM.varchar_tbl_type := SYSTEM.varchar_tbl_type();
6459
6460 l_ac_substr VARCHAR2(500);
6461
6462 BEGIN
6463
6464
6465
6466 -- Assume that a 0 length area code is invalid, until we find a phone format
6467
6468 -- specifying an area code length of 0
6469
6470 x_area_code_req_flag := TRUE;
6471
6472
6473
6474 x_phone_number := TRANSLATE( x_phone_number
6475
6476 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
6477
6478 , '0123456789');
6479
6480
6481
6482 -- Attempt to parse area code
6483
6484 -- Use phone format defined for country code
6485
6486 -- Look for fixed length area code size
6487
6488 IF x_country_code IS NOT NULL AND g_ac_length_tbl.EXISTS(x_country_code)
6489
6490 THEN
6491
6492 l_area_code_size := g_ac_length_tbl(x_country_code);
6493
6494 IF l_area_code_size IS NOT NULL THEN
6495
6496 GOTO Done; -- Found area code size, finish up
6497
6498 END IF;
6499
6500 END IF;
6501
6502
6503
6504 -- Attempt to parse area code
6505
6506 -- Using phone format defined for territory code
6507
6508 -- Look for matching variable length area code size
6509
6510 IF l_area_code IS NULL AND x_territory_code IS NOT NULL THEN
6511
6512
6513
6514 BEGIN
6515
6516 EXECUTE IMMEDIATE
6517
6518 'SELECT DISTINCT AREA_CODE_SIZE
6519
6520 FROM HZ_PHONE_FORMATS
6521
6522 WHERE TERRITORY_CODE = :territory_code
6523
6524 AND LENGTH(TRIM(TRANSLATE( UPPER(PHONE_FORMAT_STYLE)
6525
6526 , ''9012345678ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., ''
6527
6528 , ''9''
6529
6530 ))) = LENGTH(:phone_number)
6531
6532 AND ROWNUM = 1'
6533
6534 INTO l_area_code_size
6535
6536 USING x_territory_code, x_phone_number;
6537
6538 EXCEPTION
6539
6540 WHEN NO_DATA_FOUND THEN
6541
6542 NULL;
6543
6544 WHEN OTHERS THEN
6545
6546 Log( 'Parse_Area_Code'
6547
6548 , 'GET_VARIABLE_AREA_CODE_LENGTH_TC'
6549
6550 , SQLERRM
6551
6552 );
6553
6554 RAISE fnd_api.g_exc_unexpected_error;
6555
6556 END;
6557
6558
6559
6560 IF l_area_code_size IS NOT NULL THEN
6561
6562 GOTO Done; -- Found area code size, finish up
6563
6564 END IF;
6565
6566
6567
6568 END IF;
6569
6570
6571
6572 -- Attempt to parse area code
6573
6574 -- Use phone format defined for country code
6575
6576 -- Look for matching variable length area code size
6577
6578 IF l_area_code IS NULL AND x_country_code IS NOT NULL
6579
6580 THEN
6581
6582 -- Get area code size for phone country code (area code not fixed length)
6583
6584 BEGIN
6585
6586 EXECUTE IMMEDIATE
6587
6588 'SELECT DISTINCT A.AREA_CODE_SIZE
6589
6590 FROM HZ_PHONE_FORMATS A, HZ_PHONE_COUNTRY_CODES B
6591
6592 WHERE A.TERRITORY_CODE = B.TERRITORY_CODE AND B.PHONE_COUNTRY_CODE = :country_code
6593
6594 AND LENGTH(TRIM(TRANSLATE( UPPER(PHONE_FORMAT_STYLE)
6595
6596 , ''9012345678ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., ''
6597
6598 , ''9''))) = LENGTH(:phone_number)
6599
6600 AND ROWNUM = 1'
6601
6602 INTO l_area_code_size
6603
6604 USING x_country_code, x_phone_number;
6605
6606 EXCEPTION
6607
6608 WHEN NO_DATA_FOUND THEN
6609
6610 NULL;
6611
6612 WHEN OTHERS THEN
6613
6614 Log( 'Parse_Area_Code'
6615
6616 , 'GET_VARIABLE_AREA_CODE_LENGTH_CC'
6617
6618 , SQLERRM
6619
6620 );
6621
6622 RAISE fnd_api.g_exc_unexpected_error;
6623
6624 END;
6625
6626
6627
6628 IF l_area_code_size IS NOT NULL THEN
6629
6630 GOTO Done; -- Found area code size, finish up
6631
6632 END IF;
6633
6634
6635
6636 END IF;
6637
6638
6639
6640 -- Attempt incremental parsing of area code
6641
6642 IF l_area_code IS NULL
6643
6644 AND x_country_code IS NOT NULL
6645
6646 AND g_enable_ac_incr_parse
6647
6648 THEN
6649
6650 l_area_code_size := NULL; -- Size not relevant to incremental parsing
6651
6652
6653
6654 BEGIN
6655
6656 EXECUTE IMMEDIATE
6657
6658 'BEGIN
6659
6660 SELECT DISTINCT AREA_CODE BULK COLLECT INTO :area_code_col
6661
6662 FROM HZ_PHONE_AREA_CODES
6663
6664 WHERE PHONE_COUNTRY_CODE = :country_code
6665
6666 AND AREA_CODE LIKE CONCAT(SUBSTR(:phone_number, 1, 1), ''%'')
6667
6668 ORDER BY AREA_CODE;
6669
6670 END;'
6671
6672 USING OUT l_area_code_col, IN x_country_code, IN x_phone_number;
6673
6674
6675
6676 IF l_area_code_col IS NOT NULL AND l_area_code_col.COUNT > 0 THEN
6677
6678 FOR I IN 1..LENGTH(x_phone_number) LOOP
6679
6680 l_ac_substr := SUBSTR(x_phone_number, 1, I);
6681
6682 FOR J IN 1..l_area_code_col.LAST LOOP
6683
6684 IF l_ac_substr = l_area_code_col(J) THEN
6685
6686 l_area_code := l_area_code_col(J);
6687
6688 GOTO DONE;
6689
6690 END IF;
6691
6692 END LOOP;
6693
6694 END LOOP;
6695
6696 END IF;
6697
6698 EXCEPTION
6699
6700 WHEN OTHERS THEN
6701
6702 Log( 'Parse_Area_Code'
6703
6704 , 'PARSE_AREA_CODE_INCR'
6705
6706 , SQLERRM
6707
6708 );
6709
6710 RAISE fnd_api.g_exc_unexpected_error;
6711
6712 END;
6713
6714 END IF;
6715
6716
6717
6718 <<Done>>
6719
6720
6721
6722 -- Only use size to parse area code if not already parsed incrementally
6723
6724 IF l_area_code_size IS NOT NULL THEN
6725
6726
6727
6728 IF l_area_code_size = 0 THEN
6729
6730 x_area_code_req_flag := FALSE;
6731
6732 END IF;
6733
6734
6735
6736 l_area_code := SUBSTR(x_phone_number, 1, l_area_code_size);
6737
6738 END IF;
6739
6740
6741
6742 IF l_area_code IS NOT NULL THEN
6743
6744 x_phone_number := SUBSTR(x_phone_number, LENGTH(l_area_code) + 1);
6745
6746 END IF;
6747
6748
6749
6750 x_area_code := l_area_code;
6751
6752
6753
6754 EXCEPTION
6755
6756 WHEN fnd_api.g_exc_error THEN
6757
6758 RAISE;
6759
6760 WHEN fnd_api.g_exc_unexpected_error THEN
6761
6762 RAISE;
6763
6764 WHEN OTHERS THEN
6765
6766 Log( 'Parse_Area_Code'
6767
6768 , 'MAIN'
6769
6770 , SQLERRM
6771
6772 );
6773
6774 RAISE fnd_api.g_exc_unexpected_error;
6775
6776
6777
6778 END Parse_Area_Code;
6779
6780
6781
6782 FUNCTION Create_Canonical_Number ( p_country_code IN VARCHAR2
6783
6784 , p_area_code IN VARCHAR2
6785
6786 , p_phone_number IN VARCHAR2)
6787
6788 RETURN VARCHAR2
6789
6790 IS
6791
6792 BEGIN
6793
6794
6795
6796 RETURN '+' || p_country_code || ' (' || p_area_code || ') ' || p_phone_number;
6797
6798
6799
6800 EXCEPTION
6801
6802 WHEN OTHERS THEN
6803
6804 Log( 'Create_Canonical_Number'
6805
6806 , 'MAIN'
6807
6808 , SQLERRM
6809
6810 );
6811
6812 RAISE fnd_api.g_exc_unexpected_error;
6813
6814
6815
6816 END Create_Canonical_Number;
6817
6818
6819
6820 PROCEDURE Get_Territory_Code ( p_country_code IN VARCHAR2
6821
6822 , p_area_code IN VARCHAR2
6823
6824 , x_territory_code OUT NOCOPY VARCHAR2 -- OUT
6825
6826 , x_region OUT NOCOPY VARCHAR2) -- OUT
6827
6828 IS
6829
6830 BEGIN
6831
6832
6833
6834 IF x_territory_code IS NULL AND g_territory_code IS NOT NULL THEN
6835
6836 x_territory_code := g_territory_code;
6837
6838 ELSIF x_territory_code IS NULL AND p_country_code IS NOT NULL THEN
6839
6840
6841
6842 -- Look for territory with dedicated phone country code
6843
6844 IF g_cc_tc_lookup_tbl.EXISTS(p_country_code) THEN
6845
6846 x_territory_code := g_cc_tc_lookup_tbl(p_country_code);
6847
6848 END IF;
6849
6850
6851
6852 -- Look for territory using both the phone country code and area code
6853
6854 -- Applies to territories that do not have a dedicated phone country code
6855
6856 IF x_territory_code IS NULL AND p_country_code IS NOT NULL AND p_area_code IS NOT NULL THEN
6857
6858 IF g_cc_ac_tc_lookup_tbl.EXISTS(p_country_code || p_area_code) THEN
6859
6860 x_territory_code := g_cc_ac_tc_lookup_tbl(p_country_code || p_area_code);
6861
6862 END IF;
6863
6864 END IF;
6865
6866
6867
6868 END IF;
6869
6870
6871
6872 -- Derive region
6873
6874 IF g_region_id IS NOT NULL THEN
6875
6876 x_region := g_region_id;
6877
6878 ELSIF x_territory_code IS NOT NULL AND p_area_code IS NOT NULL THEN
6879
6880 -- determine corresponding region code
6881
6882 BEGIN
6883
6884 EXECUTE IMMEDIATE
6885
6886 'SELECT REGION_ID
6887
6888 FROM IEC_G_REGION_MAPPINGS
6889
6890 WHERE TERRITORY_CODE = :territory_code AND PHONE_AREA_CODE = :area_code'
6891
6892 INTO x_region
6893
6894 USING x_territory_code, p_area_code;
6895
6896 EXCEPTION
6897
6898 WHEN NO_DATA_FOUND THEN
6899
6900 NULL;
6901
6902 WHEN OTHERS THEN
6903
6904 Log( 'GET_TERRITORY_CODE'
6905
6906 , 'GET_REGION_MAPPING'
6907
6908 , SQLERRM
6909
6910 );
6911
6912 RAISE fnd_api.g_exc_unexpected_error;
6913
6914 END;
6915
6916 END IF;
6917
6918
6919
6920 EXCEPTION
6921
6922 WHEN fnd_api.g_exc_error THEN
6923
6924 RAISE;
6925
6926 WHEN fnd_api.g_exc_unexpected_error THEN
6927
6928 RAISE;
6929
6930 WHEN OTHERS THEN
6931
6932 Log( 'Get_Territory_Code'
6933
6934 , 'MAIN'
6935
6936 , SQLERRM
6937
6938 );
6939
6940 RAISE fnd_api.g_exc_unexpected_error;
6941
6942
6943
6944 END Get_Territory_Code;
6945
6946
6947
6948 FUNCTION Get_Timezone_Id ( p_territory_code IN VARCHAR2
6949
6950 , p_area_code IN VARCHAR2
6951
6952 , p_postal_code IN VARCHAR2
6953
6954 , p_timezone IN VARCHAR2
6955
6956 , x_dnu_reason OUT NOCOPY NUMBER) -- OUT
6957
6958
6959
6960 RETURN NUMBER
6961
6962 IS
6963
6964 l_timezone_id NUMBER(15);
6965
6966 l_timezone VARCHAR2(500);
6967
6968 l_timezone_clean VARCHAR2(500);
6969
6970 l_alt_timezone VARCHAR2(500);
6971
6972 l_count NUMBER(9);
6973
6974 l_index PLS_INTEGER;
6975
6976 BEGIN
6977
6978
6979
6980 IF g_timezone_id IS NOT NULL THEN
6981
6982 l_timezone_id := g_timezone_ID;
6983
6984 END IF;
6985
6986
6987
6988 IF l_timezone_id IS NULL AND (p_timezone IS NULL OR g_enable_tz_map_ovrd) THEN
6989
6990 BEGIN
6991
6992 EXECUTE IMMEDIATE
6993
6994 'SELECT DISTINCT TIMEZONE_ID
6995
6996 FROM IEC_TZ_MAPPING_CACHE
6997
6998 WHERE TERRITORY_CODE = :territory_code
6999
7000 AND (AREA_CODE = :area_code OR AREA_CODE IS NULL)'
7001
7002 INTO l_timezone_id
7003
7004 USING p_territory_code, p_area_code;
7005
7006 EXCEPTION
7007
7008 WHEN TOO_MANY_ROWS THEN
7009
7010 NULL;
7011
7012 WHEN NO_DATA_FOUND THEN
7013
7014 NULL;
7015
7016 WHEN OTHERS THEN
7017
7018 Log( 'Get_Timezone_Id'
7019
7020 , 'MAP_TC_AC_WITH_TIMEZONE'
7021
7022 , SQLERRM
7023
7024 );
7025
7026 RAISE fnd_api.g_exc_unexpected_error;
7027
7028 END;
7029
7030
7031
7032 IF l_timezone_id IS NULL AND g_enable_zc_lookups THEN
7033
7034 BEGIN
7035
7036 EXECUTE IMMEDIATE
7037
7038 'SELECT DISTINCT TIMEZONE_ID
7039
7040 FROM IEC_TZ_MAPPING_CACHE
7041
7042 WHERE TERRITORY_CODE = :territory_code
7043
7044 AND AREA_CODE = :area_code
7045
7046 AND POSTAL_CODE = :postal_code'
7047
7048 INTO l_timezone_id
7049
7050 USING p_territory_code, p_area_code, p_postal_code;
7051
7052 EXCEPTION
7053
7054 WHEN TOO_MANY_ROWS THEN
7055
7056 NULL;
7057
7058 WHEN NO_DATA_FOUND THEN
7059
7060 NULL;
7061
7062 WHEN OTHERS THEN
7063
7064 Log( 'Get_Timezone_Id'
7065
7066 , 'MAP_TC_AC_PC_WITH_TIMEZONE'
7067
7068 , SQLERRM
7069
7070 );
7071
7072 RAISE fnd_api.g_exc_unexpected_error;
7073
7074 END;
7075
7076 END IF;
7077
7078 END IF;
7079
7080
7081
7082 -- Try to interpret time zone data provided as id, gmt offset, or descriptive name
7083
7084 IF l_timezone_id IS NULL AND p_timezone IS NOT NULL THEN
7085
7086
7087
7088 l_timezone := UPPER(TRIM(p_timezone));
7089
7090
7091
7092 l_timezone_clean := TRANSLATE( l_timezone
7093
7094 , '0123456789+-ABCDEFGHIJKLMNOPQRSTUVWXYZ/=()*&^%$#@!~`[]{}|\:;?><., '
7095
7096 , '0123456789+-');
7097
7098
7099
7100 -- Time zone is provided in numeric format (gmt offset, id)
7101
7102 IF l_timezone_clean = l_timezone THEN
7103
7104
7105
7106 -- Time zone is specified as an offset
7107
7108 IF SUBSTR(l_timezone, 1, 1) = '+' OR SUBSTR(l_timezone, 1, 1) = '-' THEN
7109
7110
7111
7112 BEGIN
7113
7114 EXECUTE IMMEDIATE
7115
7116 'SELECT TIMEZONE_ID
7117
7118 FROM IEC_TZ_OFFSET_MAP_CACHE
7119
7120 WHERE OFFSET = :timezone
7121
7122 AND ROWNUM = 1'
7123
7124 INTO l_timezone_id
7125
7126 USING l_timezone;
7127
7128 EXCEPTION
7129
7130 WHEN NO_DATA_FOUND THEN
7131
7132 x_dnu_reason := 409;
7133
7134 WHEN OTHERS THEN
7135
7136 Log( 'Get_Timezone_Id'
7137
7138 , 'MAP_GMT_OFFSET_WITH_TIMEZONE'
7139
7140 , SQLERRM
7141
7142 );
7143
7144 RAISE fnd_api.g_exc_unexpected_error;
7145
7146 END;
7147
7148
7149
7150 -- Time zone is specified as an id
7151
7152 ELSE
7153
7154 IF g_tz_lookup_tbl.EXISTS(l_timezone) THEN
7155
7156 l_timezone_id := l_timezone;
7157
7158 END IF;
7159
7160 END IF;
7161
7162
7163
7164 -- Time zone contains non-numeric characters, indicating descriptive name
7165
7166 ELSE
7167
7168
7169
7170 l_timezone := p_timezone;
7171
7172 BEGIN
7173
7174 BEGIN
7175
7176 EXECUTE IMMEDIATE
7177
7178 'SELECT TIMEZONE_ID
7179
7180 FROM IEC_TZ_OFFSET_MAP_CACHE
7181
7182 WHERE UPPER(OFFSET) = :timezone
7183
7184 AND ROWNUM = 1'
7185
7186 INTO l_timezone_id
7187
7188 USING l_timezone;
7189
7190 EXCEPTION
7191
7192 WHEN NO_DATA_FOUND THEN
7193
7194 NULL;
7195
7196 WHEN OTHERS THEN
7197
7198 RAISE;
7199
7200 END;
7201
7202
7203
7204 IF l_timezone_id IS NULL THEN
7205
7206
7207
7208 -- Assume time zone name is specified in long format ('America/New_York')
7209
7210 l_timezone := REPLACE(l_timezone, ' ', '_');
7211
7212 BEGIN
7213
7214 EXECUTE IMMEDIATE ---- bug6449880
7215
7216 'SELECT UPGRADE_TZ_ID
7217
7218 FROM FND_TIMEZONES_VL
7219
7220 WHERE UPPER(NAME) = :timezone_name
7221
7222 AND ROWNUM = 1'
7223
7224 INTO l_timezone_id
7225
7226 USING l_timezone;
7227
7228 EXCEPTION
7229
7230 WHEN NO_DATA_FOUND THEN
7231
7232 x_dnu_reason := 430;
7233
7234 WHEN OTHERS THEN
7235
7236 RAISE;
7237
7238 END;
7239
7240 END IF;
7241
7242
7243
7244 EXCEPTION
7245
7246 WHEN OTHERS THEN
7247
7248 Log( 'Get_Timezone_Id'
7249
7250 , 'MAP_NAME_WITH_TIMEZONE'
7251
7252 , SQLERRM
7253
7254 );
7255
7256 RAISE fnd_api.g_exc_unexpected_error;
7257
7258 END;
7259
7260 END IF;
7261
7262
7263
7264 END IF;
7265
7266
7267
7268 IF l_timezone_id IS NOT NULL THEN
7269
7270 x_dnu_reason := NULL;
7271
7272 ELSIF x_dnu_reason IS NULL THEN
7273
7274 x_dnu_reason := 404;
7275
7276 END IF;
7277
7278
7279
7280 RETURN l_timezone_id;
7281
7282
7283
7284 EXCEPTION
7285
7286 WHEN fnd_api.g_exc_error THEN
7287
7288 RAISE;
7289
7290 WHEN fnd_api.g_exc_unexpected_error THEN
7291
7292 RAISE;
7293
7294 WHEN OTHERS THEN
7295
7296 Log( 'Get_Timezone_Id'
7297
7298 , 'MAIN'
7299
7300 , SQLERRM
7301
7302 );
7303
7304 RAISE fnd_api.g_exc_unexpected_error;
7305
7306
7307
7308 END Get_Timezone_Id;
7309
7310
7311
7312 FUNCTION Validate_Canonical_Number
7313
7314 ( p_raw_phone_number IN VARCHAR2
7315
7316 , x_country_code IN OUT NOCOPY VARCHAR2 -- IN OUT
7317
7318 , x_area_code IN OUT NOCOPY VARCHAR2 -- IN OUT
7319
7320 , x_phone_number IN OUT NOCOPY VARCHAR2 -- IN OUT
7321
7322 , x_dnu_reason OUT NOCOPY NUMBER) -- OUT
7323
7324 RETURN BOOLEAN
7325
7326 IS
7327
7328 l_cc_index PLS_INTEGER;
7329
7330 l_ac_index PLS_INTEGER;
7331
7332 l_pn_index PLS_INTEGER;
7333
7334 l_validated BOOLEAN := FALSE;
7335
7336
7337
7338 l_area_code_clean VARCHAR2(500);
7339
7340 l_country_code_clean VARCHAR2(500);
7341
7342 BEGIN
7343
7344
7345
7346 l_cc_index := INSTR(p_raw_phone_number, '+');
7347
7348 l_ac_index := INSTR(p_raw_phone_number, ' (');
7349
7350 l_pn_index := INSTR(p_raw_phone_number, ') ');
7351
7352
7353
7354 IF l_cc_index = 1 AND l_ac_index <> 0 AND l_pn_index <> 0 THEN
7355
7356
7357
7358 x_country_code := SUBSTR(p_raw_phone_number, l_cc_index + 1, (l_ac_index - l_cc_index - 1));
7359
7360
7361
7362 l_country_code_clean := TRANSLATE( UPPER(x_country_code)
7363
7364 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
7365
7366 , '0123456789');
7367
7368
7369
7370 -- Invalidate record if country code contains non-numeric characters
7371
7372 IF l_country_code_clean <> x_country_code THEN
7373
7374 x_country_code := NULL;
7375
7376 x_dnu_reason := 423;
7377
7378 RETURN l_validated;
7379
7380 END IF;
7381
7382
7383
7384 x_area_code := SUBSTR(p_raw_phone_number, l_ac_index + 2, (l_pn_index - l_ac_index - 2));
7385
7386
7387
7388 l_area_code_clean := TRANSLATE( UPPER(x_area_code)
7389
7390 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
7391
7392 , '0123456789');
7393
7394
7395
7396 -- Invalidate record if area code contains non-numeric characters
7397
7398 IF l_area_code_clean <> x_area_code THEN
7399
7400 x_area_code := NULL;
7401
7402 x_dnu_reason := 424;
7403
7404 RETURN l_validated;
7405
7406 END IF;
7407
7408
7409
7410 x_phone_number := SUBSTR(p_raw_phone_number, l_pn_index + 2
7411
7412 , (LENGTH(p_raw_phone_number) - l_pn_index - 1));
7413
7414
7415
7416 x_phone_number := TRANSLATE( UPPER(x_phone_number)
7417
7418 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
7419
7420 , '0123456789');
7421
7422
7423
7424 IF x_country_code IS NOT NULL AND x_area_code IS NOT NULL AND x_phone_number IS NOT NULL THEN
7425
7426 l_validated := TRUE;
7427
7428 END IF;
7429
7430
7431
7432 END IF;
7433
7434
7435
7436 RETURN l_validated;
7437
7438
7439
7440 EXCEPTION
7441
7442 WHEN fnd_api.g_exc_error THEN
7443
7444 RAISE;
7445
7446 WHEN fnd_api.g_exc_unexpected_error THEN
7447
7448 RAISE;
7449
7450 WHEN OTHERS THEN
7451
7452 Log( 'Validate_Canonical_Number'
7453
7454 , 'MAIN'
7455
7456 , SQLERRM
7457
7458 );
7459
7460 RAISE fnd_api.g_exc_unexpected_error;
7461
7462
7463
7464 END Validate_Canonical_Number;
7465
7466
7467
7468 FUNCTION Validate_Non_Canonical_Number
7469
7470 ( x_raw_phone_number IN OUT NOCOPY VARCHAR2 -- IN OUT
7471
7472 , x_country_code IN OUT NOCOPY VARCHAR2 -- IN OUT
7473
7474 , x_area_code IN OUT NOCOPY VARCHAR2 -- IN OUT
7475
7476 , x_phone_number IN OUT NOCOPY VARCHAR2 -- IN OUT
7477
7478 , x_territory_code IN OUT NOCOPY VARCHAR2 -- IN OUT
7479
7480 , x_dnu_reason OUT NOCOPY NUMBER) -- OUT
7481
7482 RETURN BOOLEAN
7483
7484 IS
7485
7486 l_validated BOOLEAN := FALSE;
7487
7488 l_area_code_req_flag BOOLEAN;
7489
7490 BEGIN
7491
7492
7493
7494 x_raw_phone_number := TRANSLATE( x_raw_phone_number
7495
7496 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
7497
7498 , '0123456789');
7499
7500
7501
7502 IF g_territory_code IS NOT NULL THEN
7503
7504 x_territory_code := g_territory_code;
7505
7506 x_country_code := g_phone_country_code;
7507
7508 IF INSTR(x_raw_phone_number, x_country_code) = 1 THEN
7509
7510 x_raw_phone_number := SUBSTR(x_raw_phone_number, LENGTH(x_country_code) + 1);
7511
7512 END IF;
7513
7514 ELSIF g_phone_country_code IS NOT NULL THEN
7515
7516 x_country_code := g_phone_country_code;
7517
7518 IF INSTR(x_raw_phone_number, x_country_code) = 1 THEN
7519
7520 x_raw_phone_number := SUBSTR(x_raw_phone_number, LENGTH(x_country_code) + 1);
7521
7522 END IF;
7523
7524 ELSIF x_country_code IS NULL THEN
7525
7526 x_country_code := Parse_Country_Code(x_raw_phone_number);
7527
7528 END IF;
7529
7530
7531
7532 IF x_country_code IS NULL THEN
7533
7534 x_dnu_reason := 420;
7535
7536 GOTO Done;
7537
7538 END IF;
7539
7540
7541
7542 Parse_Area_Code(x_raw_phone_number, x_country_code, x_territory_code, x_area_code, l_area_code_req_flag);
7543
7544 IF x_area_code IS NULL AND l_area_code_req_flag THEN
7545
7546 x_dnu_reason := 421;
7547
7548 GOTO DONE;
7549
7550 END IF;
7551
7552
7553
7554 x_phone_number := x_raw_phone_number;
7555
7556 IF x_phone_number IS NULL THEN
7557
7558 x_dnu_reason := 422;
7559
7560 GOTO Done;
7561
7562 END IF;
7563
7564
7565
7566 l_validated := TRUE;
7567
7568
7569
7570 <<Done>>
7571
7572 RETURN l_validated;
7573
7574
7575
7576 EXCEPTION
7577
7578 WHEN fnd_api.g_exc_error THEN
7579
7580 RAISE;
7581
7582 WHEN fnd_api.g_exc_unexpected_error THEN
7583
7584 RAISE;
7585
7586 WHEN OTHERS THEN
7587
7588 Log( 'Validate_Non_Canonical_Number'
7589
7590 , 'MAIN'
7591
7592 , SQLERRM
7593
7594 );
7595
7596 RAISE fnd_api.g_exc_unexpected_error;
7597
7598
7599
7600 END Validate_Non_Canonical_Number;
7601
7602
7603
7604 FUNCTION Validate_Composite_Number
7605
7606 ( x_country_code IN OUT NOCOPY VARCHAR2 -- IN OUT
7607
7608 , x_area_code IN OUT NOCOPY VARCHAR2 -- IN OUT
7609
7610 , x_phone_number IN OUT NOCOPY VARCHAR2 -- IN OUT
7611
7612 , x_territory_code IN OUT NOCOPY VARCHAR2 -- IN OUT
7613
7614 , x_cp_dnu_reason OUT NOCOPY NUMBER) -- OUT
7615
7616 RETURN BOOLEAN
7617
7618 IS
7619
7620 l_validated BOOLEAN := FALSE;
7621
7622
7623
7624 l_country_code_clean VARCHAR2(500);
7625
7626 l_area_code_clean VARCHAR2(500);
7627
7628 l_area_code_req_flag BOOLEAN;
7629
7630
7631
7632 BEGIN
7633
7634
7635
7636 IF g_territory_code IS NOT NULL THEN
7637
7638 x_territory_code := g_territory_code;
7639
7640 x_country_code := g_phone_country_code;
7641
7642 ELSIF g_phone_country_code IS NOT NULL THEN
7643
7644 x_country_code := g_phone_country_code;
7645
7646 ELSIF x_country_code IS NULL THEN
7647
7648 x_cp_dnu_reason := 410;
7649
7650 GOTO Done;
7651
7652 END IF;
7653
7654
7655
7656 x_country_code := TRANSLATE( UPPER(x_country_code)
7657
7658 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
7659
7660 , '0123456789');
7661
7662
7663
7664 l_country_code_clean := TRANSLATE( UPPER(x_country_code)
7665
7666 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
7667
7668 , '0123456789');
7669
7670
7671
7672 -- Invalidate record if country code contains non-numeric characters
7673
7674 IF l_country_code_clean <> x_country_code THEN
7675
7676 x_country_code := NULL;
7677
7678 x_cp_dnu_reason := 413;
7679
7680 GOTO Done;
7681
7682 END IF;
7683
7684
7685
7686 IF x_area_code IS NULL THEN
7687
7688 Parse_Area_Code(x_phone_number, x_country_code, x_territory_code, x_area_code, l_area_code_req_flag);
7689
7690 IF x_area_code IS NULL AND l_area_code_req_flag THEN
7691
7692 x_cp_dnu_reason := 411;
7693
7694 GOTO Done;
7695
7696 END IF;
7697
7698 END IF;
7699
7700
7701
7702 l_area_code_clean := TRANSLATE( UPPER(x_area_code)
7703
7704 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
7705
7706 , '0123456789');
7707
7708
7709
7710 -- Invalidate record if area code contains non-numeric characters
7711
7712 IF l_area_code_clean <> x_area_code THEN
7713
7714 x_area_code := NULL;
7715
7716 x_cp_dnu_reason := 414;
7717
7718 GOTO Done;
7719
7720 END IF;
7721
7722
7723
7724 IF x_phone_number IS NULL THEN
7725
7726 x_cp_dnu_reason := 412;
7727
7728 GOTO Done;
7729
7730 END IF;
7731
7732
7733
7734 x_phone_number := TRANSLATE( UPPER(x_phone_number)
7735
7736 , '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-+/=()*&^%$#@!~`[]{}|\:;?><., '
7737
7738 , '0123456789');
7739
7740
7741
7742 l_validated := TRUE;
7743
7744
7745
7746 <<Done>>
7747
7748 RETURN l_validated;
7749
7750
7751
7752 EXCEPTION
7753
7754 WHEN fnd_api.g_exc_error THEN
7755
7756 RAISE;
7757
7758 WHEN fnd_api.g_exc_unexpected_error THEN
7759
7760 RAISE;
7761
7762 WHEN OTHERS THEN
7763
7764 Log( 'Validate_Composite_Number'
7765
7766 , 'MAIN'
7767
7768 , SQLERRM
7769
7770 );
7771
7772 RAISE fnd_api.g_exc_unexpected_error;
7773
7774
7775
7776 END Validate_Composite_Number;
7777
7778
7779
7780 PROCEDURE Init_ContactPointRecord
7781
7782 ( x_contact_point IN OUT NOCOPY ContactPoint) -- IN OUT
7783
7784 IS
7785
7786 BEGIN
7787
7788
7789
7790 x_contact_point.id := NULL;
7791
7792 x_contact_point.phone_country_code := NULL;
7793
7794 x_contact_point.phone_area_code := NULL;
7795
7796 x_contact_point.phone_number := NULL;
7797
7798 x_contact_point.raw_phone_number := NULL;
7799
7800 x_contact_point.time_zone := NULL;
7801
7802 x_contact_point.territory_code := NULL;
7803
7804 x_contact_point.region_id := NULL;
7805
7806 x_contact_point.cc_tz_id := NULL;
7807
7808 x_contact_point.valid_flag := NULL;
7809
7810 x_contact_point.dnu_reason := NULL;
7811
7812
7813
7814 END Init_ContactPointRecord;
7815
7816
7817
7818 PROCEDURE Validate_ContactPointRecord
7819
7820 ( p_postal_code IN VARCHAR2
7821
7822 , x_contact_point IN OUT NOCOPY ContactPoint) -- IN OUT
7823
7824 IS
7825
7826 l_contact_point ContactPoint;
7827
7828
7829
7830 l_already_validated BOOLEAN := FALSE;
7831
7832 l_rpn_exists BOOLEAN := FALSE;
7833
7834 l_pn_exists BOOLEAN := FALSE;
7835
7836 l_tz_dnu_reason NUMBER;
7837
7838
7839
7840 -- Variables for mobile phone check (TCA procedure call)
7841
7842 l_mobile_flag VARCHAR2(1);
7843
7844 l_return_status VARCHAR2(1);
7845
7846 l_msg_count NUMBER;
7847
7848 l_msg_data VARCHAR2(4000);
7849
7850 BEGIN
7851
7852
7853
7854 -- Copy In Out Parameters into local variables
7855
7856 -- Contact Point Paramater will not be updated unless contact point is valid
7857
7858 -- Prevents overwriting data in AMS_LIST_ENTRIES for invalid contact points
7859
7860 l_contact_point := x_contact_point;
7861
7862
7863
7864 -- Assume that contact point is invalid
7865
7866 x_contact_point.valid_flag := 'N';
7867
7868
7869
7870 IF l_contact_point.phone_number IS NULL AND l_contact_point.raw_phone_number IS NULL THEN
7871
7872 x_contact_point.dnu_reason := 400;
7873
7874 GOTO Done;
7875
7876 END IF;
7877
7878
7879
7880 IF l_contact_point.raw_phone_number IS NOT NULL THEN
7881
7882 l_rpn_exists := TRUE;
7883
7884 END IF;
7885
7886
7887
7888 IF l_contact_point.phone_number IS NOT NULL THEN
7889
7890 l_pn_exists := TRUE;
7891
7892 END IF;
7893
7894
7895
7896 IF l_rpn_exists THEN
7897
7898
7899
7900 -- ATTEMPT TO VALIDATE RAW_PHONE_NUMBER FIELD (IN CANONICAL FORM)
7901
7902 l_already_validated := Validate_Canonical_Number( l_contact_point.raw_phone_number
7903
7904 , l_contact_point.phone_country_code
7905
7906 , l_contact_point.phone_area_code
7907
7908 , l_contact_point.phone_number
7909
7910 , x_contact_point.dnu_reason);
7911
7912 END IF;
7913
7914
7915
7916 IF l_pn_exists AND NOT l_already_validated THEN
7917
7918
7919
7920 -- ATTEMPT TO VALIDATE SEPERATE PHONE_NUMBER, AREA_CODE, COUNTRY_CODE FIELDS
7921
7922 l_already_validated := Validate_Composite_Number( l_contact_point.phone_country_code
7923
7924 , l_contact_point.phone_area_code
7925
7926 , l_contact_point.phone_number
7927
7928 , l_contact_point.territory_code
7929
7930 , x_contact_point.dnu_reason);
7931
7932
7933
7934 END IF;
7935
7936
7937
7938 IF l_rpn_exists
7939
7940 AND NOT l_already_validated
7941
7942 AND (x_contact_point.dnu_reason IS NULL
7943
7944 OR (x_contact_point.dnu_reason <> 423 -- Ensure that record did not already fail as a result of having
7945
7946 AND x_contact_point.dnu_reason <> 424)) -- non-numeric characters in country or area code in canonical form
7947
7948 THEN
7949
7950
7951
7952 -- ATTEMPT TO VALIDATE RAW_PHONE_NUMBER FIELD (NOT IN CANONICAL FORM)
7953
7954 l_already_validated := Validate_Non_Canonical_Number( l_contact_point.raw_phone_number
7955
7956 , l_contact_point.phone_country_code
7957
7958 , l_contact_point.phone_area_code
7959
7960 , l_contact_point.phone_number
7961
7962 , l_contact_point.territory_code
7963
7964 , x_contact_point.dnu_reason);
7965
7966 END IF;
7967
7968
7969
7970 -- COULD NOT VALIDATE NUMBER USING ANY METHOD
7971
7972 IF NOT l_already_validated THEN
7973
7974 GOTO Done;
7975
7976 END IF;
7977
7978
7979
7980 -- If this phone country code has a fixed area code length
7981
7982 -- Verify that area code is of correct length
7983
7984 -- Only enforce this if rule is set!
7985
7986 IF g_enable_ac_length_val
7987
7988 AND g_ac_length_tbl.EXISTS(l_contact_point.phone_country_code)
7989
7990 AND LENGTH(l_contact_point.phone_area_code) <> g_ac_length_tbl(l_contact_point.phone_country_code)
7991
7992 THEN
7993
7994 x_contact_point.dnu_reason := 407;
7995
7996 Goto Done;
7997
7998 END IF;
7999
8000
8001
8002 -- If this phone country code has a fixed phone number length
8003
8004 -- Verify that phone number is of correct length
8005
8006 -- Only enforce this if rule is set!
8007
8008 IF g_enable_pn_length_val
8009
8010 AND g_pn_length_tbl.EXISTS(l_contact_point.phone_country_code)
8011
8012 AND LENGTH(l_contact_point.phone_number) <> g_pn_length_tbl(l_contact_point.phone_country_code)
8013
8014 THEN
8015
8016 x_contact_point.dnu_reason := 406;
8017
8018 Goto Done;
8019
8020 END IF;
8021
8022
8023
8024 l_contact_point.raw_phone_number := Create_Canonical_Number(l_contact_point.phone_country_code, l_contact_point.phone_area_code, l_contact_point.phone_number);
8025
8026 IF l_contact_point.raw_phone_number IS NULL OR LENGTH(l_contact_point.raw_phone_number) > 240 THEN
8027
8028 x_contact_point.dnu_reason := 402;
8029
8030 GOTO Done;
8031
8032 END IF;
8033
8034
8035
8036 -- If not validating cell phones, check if number if mobile number
8037
8038 IF g_enable_cell_phone_val = FALSE THEN
8039
8040
8041
8042 HZ_FORMAT_PHONE_V2PUB.check_mobile_phone
8043
8044 ( 'T'
8045
8046 , l_contact_point.phone_country_code
8047
8048 , l_contact_point.phone_area_code
8049
8050 , l_contact_point.phone_number
8051
8052 , l_mobile_flag
8053
8054 , l_return_status
8055
8056 , l_msg_count
8057
8058 , l_msg_data);
8059
8060
8061
8062 IF l_return_status <> 'S' THEN
8063
8064 Log( 'Validate_Contact_Point'
8065
8066 , 'CHECK_MOBILE_PHONE'
8067
8068 , l_msg_data
8069
8070 );
8071
8072 RAISE fnd_api.g_exc_unexpected_error;
8073
8074 END IF;
8075
8076
8077
8078 IF l_mobile_flag = 'Y' THEN
8079
8080 x_contact_point.dnu_reason := 408;
8081
8082 GOTO Done;
8083
8084 END IF;
8085
8086 END IF;
8087
8088
8089
8090 Get_Territory_Code(l_contact_point.phone_country_code, l_contact_point.phone_area_code, l_contact_point.territory_code, l_contact_point.region_id);
8091
8092 IF l_contact_point.territory_code IS NULL OR LENGTH(l_contact_point.territory_code) > 30 THEN
8093
8094 x_contact_point.dnu_reason := 403;
8095
8096 GOTO Done;
8097
8098 END IF;
8099
8100
8101
8102 IF l_contact_point.region_id IS NULL AND g_require_regions THEN
8103
8104 x_contact_point.dnu_reason := 405;
8105
8106 GOTO Done;
8107
8108 END IF;
8109
8110
8111
8112 l_contact_point.time_zone := Get_Timezone_Id(l_contact_point.territory_code, l_contact_point.phone_area_code, p_postal_code, l_contact_point.time_zone, l_tz_dnu_reason);
8113
8114 IF l_contact_point.time_zone IS NULL THEN
8115
8116 x_contact_point.dnu_reason := l_tz_dnu_reason;
8117
8118 GOTO Done;
8119
8120 END IF;
8121
8122
8123
8124 -- Contact Point is Valid
8125
8126 -- Overwrite Contact Point with validated Contact Point
8127
8128 x_contact_point := l_contact_point;
8129
8130 x_contact_point.valid_flag := 'Y';
8131
8132 x_contact_point.dnu_reason := NULL;
8133
8134
8135
8136 <<Done>>
8137
8138 NULL;
8139
8140
8141
8142 EXCEPTION
8143
8144 WHEN fnd_api.g_exc_error THEN
8145
8146 RAISE;
8147
8148 WHEN fnd_api.g_exc_unexpected_error THEN
8149
8150 RAISE;
8151
8152 WHEN OTHERS THEN
8153
8154 Log( 'Validate_ContactPointRecord'
8155
8156 , 'MAIN'
8157
8158 , SQLERRM
8159
8160 );
8161
8162 RAISE fnd_api.g_exc_unexpected_error;
8163
8164
8165
8166 END Validate_ContactPointRecord;
8167
8168
8169
8170 PROCEDURE Validate_List_Entry
8171
8172 ( p_list_entry_id IN NUMBER
8173
8174 , p_postal_code IN VARCHAR2
8175
8176 , x_contact_points IN OUT NOCOPY ContactPointList -- IN OUT
8177
8178 , x_current_contact_point OUT NOCOPY ContactPoint -- OUT
8179
8180 , x_current_contact_point_idx IN OUT NOCOPY NUMBER) -- IN OUT
8181
8182 IS
8183
8184 l_found_current_cp BOOLEAN := FALSE;
8185
8186 l_save_contact_point_idx NUMBER;
8187
8188 BEGIN
8189
8190
8191
8192 Init_ContactPointRecord(x_current_contact_point);
8193
8194 l_save_contact_point_idx := x_current_contact_point_idx;
8195
8196 x_current_contact_point_idx := NULL;
8197
8198
8199
8200 FOR i IN 1..G_NUM_CONTACT_POINTS LOOP
8201
8202
8203
8204 -- Validate contact points that are invalid
8205
8206 -- invalid if no cc_tz_id has been assigned
8207
8208 IF x_contact_points(i).cc_tz_id IS NULL THEN
8209
8210 Validate_ContactPointRecord( p_postal_code
8211
8212 , x_contact_points(i));
8213
8214 ELSE
8215
8216 x_contact_points(i).valid_flag := 'Y';
8217
8218 END IF;
8219
8220
8221
8222 IF (NOT l_found_current_cp) AND (x_contact_points(i).valid_flag = 'Y') THEN
8223
8224 x_current_contact_point := x_contact_points(i);
8225
8226 x_current_contact_point_idx := i;
8227
8228 l_found_current_cp := TRUE;
8229
8230 END IF;
8231
8232
8233
8234 END LOOP;
8235
8236
8237
8238 -- We want to preserve the current contact point for records that
8239
8240 -- already have some valid contact points since recycling algs
8241
8242 -- may have changed the current contact point during execution.
8243
8244 -- must make sure that this contact point is still valid
8245
8246 IF l_save_contact_point_idx IS NOT NULL
8247
8248 AND l_save_contact_point_idx <> x_current_contact_point_idx
8249
8250 AND x_contact_points(l_save_contact_point_idx).valid_flag = 'Y'
8251
8252 THEN
8253
8254 x_current_contact_point := x_contact_points(l_save_contact_point_idx);
8255
8256 x_current_contact_point_idx := l_save_contact_point_idx;
8257
8258 END IF;
8259
8260
8261
8262 EXCEPTION
8263
8264 WHEN fnd_api.g_exc_error OR fnd_api.g_exc_unexpected_error THEN
8265
8266 RAISE;
8267
8268 WHEN OTHERS THEN
8269
8270 Log( 'Validate_List_Entry'
8271
8272 , 'MAIN'
8273
8274 , SQLERRM
8275
8276 );
8277
8278 RAISE fnd_api.g_exc_unexpected_error;
8279
8280
8281
8282 END Validate_List_Entry;
8283
8284
8285
8286 PROCEDURE Remove_Entries_Pvt
8287
8288 ( p_list_id IN NUMBER
8289
8290 , p_schedule_id IN NUMBER
8291
8292 , p_returns_id_col IN SYSTEM.number_tbl_type
8293
8294 )
8295
8296 IS
8297
8298 l_returns_id_col SYSTEM.number_tbl_type;
8299
8300 l_subset_id_col SYSTEM.number_tbl_type;
8301
8302 l_list_entry_id_col SYSTEM.number_tbl_type;
8303
8304 l_callable_zone_id_col SYSTEM.number_tbl_type;
8305
8306 l_do_not_use_col SYSTEM.varchar_tbl_type;
8307
8308 l_rl_incr_amount_col SYSTEM.number_tbl_type;
8309
8310 l_cz_incr_amount_col SYSTEM.number_tbl_type;
8311
8312 BEGIN
8313
8314
8315
8316 -- Delete specified records in IEC_G_RETURN_ENTRIES
8317
8318 -- Retrieving information to clean up other tables
8319
8320 DELETE IEC_G_RETURN_ENTRIES A
8321
8322 WHERE A.LIST_HEADER_ID = p_list_id
8323
8324 AND A.RETURNS_ID IN (SELECT * FROM TABLE(CAST(p_returns_id_col AS SYSTEM.NUMBER_TBL_TYPE)))
8325 RETURNING A.RETURNS_ID, A.SUBSET_ID, A.LIST_ENTRY_ID, A.ITM_CC_TZ_ID, A.DO_NOT_USE_FLAG
8326 BULK COLLECT INTO l_returns_id_col, l_subset_id_col, l_list_entry_id_col, l_callable_zone_id_col, l_do_not_use_col;
8327
8328
8329
8330 IF l_returns_id_col IS NOT NULL AND l_returns_id_col.COUNT > 0 THEN
8331
8332
8333
8334 -- Delete call history
8335
8336 EXECUTE IMMEDIATE
8337
8338 'BEGIN
8339
8340 FORALL i IN :first .. :last
8341
8342 DELETE IEC_O_RCY_CALL_HISTORIES
8343
8344 WHERE RETURNS_ID = :returns_id(i);
8345
8346 END;'
8347
8348 USING IN l_returns_id_col.FIRST
8349
8350 , IN l_returns_id_col.LAST
8351
8352 , IN l_returns_id_col;
8353
8354
8355
8356 -- Delete IEC_O_VALIDATION_REPORT_DETS
8357
8358 EXECUTE IMMEDIATE
8359
8360 'BEGIN
8361
8362 FORALL i IN :first .. :last
8363
8364 DELETE IEC_O_VALIDATION_REPORT_DETS
8365
8366 WHERE LIST_HEADER_ID = :list_id
8367
8368 AND LIST_ENTRY_ID = :list_entry_id(i);
8369
8370 END;'
8371
8372 USING IN l_list_entry_id_col.FIRST
8373
8374 , IN l_list_entry_id_col.LAST
8375
8376 , IN p_list_id
8377
8378 , IN l_list_entry_id_col;
8379
8380
8381
8382 l_cz_incr_amount_col := SYSTEM.number_tbl_type();
8383
8384 l_rl_incr_amount_col := SYSTEM.number_tbl_type();
8385
8386 FOR i IN 1..l_do_not_use_col.LAST LOOP
8387
8388 l_cz_incr_amount_col.EXTEND;
8389
8390 l_rl_incr_amount_col.EXTEND;
8391
8392 l_rl_incr_amount_col(i) := -1;
8393
8394 IF l_do_not_use_col(i) = 'N' THEN
8395
8396 l_cz_incr_amount_col(i) := -1;
8397
8398 ELSE
8399
8400 l_cz_incr_amount_col(i) := 0;
8401
8402 END IF;
8403
8404 END LOOP;
8405
8406
8407
8408 -- Decrement callable zone count to indicate that these records have been removed
8409
8410 Incr_CallableZoneCounts( l_callable_zone_id_col
8411
8412 , l_cz_incr_amount_col);
8413
8414
8415
8416 Purge_CallableZones(p_list_id, p_schedule_id);
8417
8418
8419
8420 -- Decrement records loaded count to indicate that these records have been removed
8421
8422 Incr_RecordsLoadedCounts( p_schedule_id
8423
8424 , p_list_id
8425
8426 , l_subset_id_col
8427
8428 , l_rl_incr_amount_col);
8429
8430 END IF;
8431
8432 EXCEPTION
8433
8434 WHEN OTHERS THEN
8435
8436 Log( 'Remove_Entries_Pvt'
8437
8438 , 'MAIN'
8439
8440 , SQLERRM
8441
8442 );
8443
8444 RAISE fnd_api.g_exc_unexpected_error;
8445
8446
8447
8448 END Remove_Entries_Pvt;
8449
8450
8451
8452 PROCEDURE Remove_DeletedRecords
8453
8454 ( p_list_id IN NUMBER
8455
8456 , p_schedule_id IN NUMBER
8457
8458 )
8459
8460 IS
8461
8462 l_returns_id_col SYSTEM.number_tbl_type;
8463
8464 BEGIN
8465
8466
8467
8468 -- Look for records that have been deleted from
8469
8470 -- AMS_LIST_ENTRIES
8471
8472 EXECUTE IMMEDIATE
8473
8474 'BEGIN
8475
8476 SELECT A.RETURNS_ID
8477
8478 BULK COLLECT INTO :returns_id_col
8479
8480 FROM IEC_G_RETURN_ENTRIES A
8481
8482 WHERE A.LIST_HEADER_ID = :list_id
8483
8484 AND NOT EXISTS (SELECT LIST_ENTRY_ID
8485
8486 FROM AMS_LIST_ENTRIES
8487
8488 WHERE A.LIST_HEADER_ID = LIST_HEADER_ID
8489
8490 AND A.LIST_ENTRY_ID = LIST_ENTRY_ID
8491
8492 AND ENABLED_FLAG = ''Y'');
8493
8494 END;'
8495
8496 USING OUT l_returns_id_col
8497
8498 , IN p_list_id;
8499
8500
8501
8502 IF l_returns_id_col IS NOT NULL AND l_returns_id_col.COUNT > 0 THEN
8503
8504
8505
8506 Remove_Entries_Pvt
8507
8508 ( p_list_id
8509
8510 , p_schedule_id
8511
8512 , l_returns_id_col
8513
8514 );
8515
8516
8517
8518 END IF;
8519
8520
8521
8522 -- Also need to delete records from IEC_O_VALIDATION_REPORT_DETS
8523
8524 -- when all contact points were invalid and there is no corresponding
8525
8526 -- entry in return entries
8527
8528 EXECUTE IMMEDIATE
8529
8530 'DELETE IEC_O_VALIDATION_REPORT_DETS
8531
8532 WHERE LIST_HEADER_ID = :list_id
8533
8534 AND DO_NOT_USE_REASON_S1 IS NOT NULL
8535
8536 AND DO_NOT_USE_REASON_S2 IS NOT NULL
8537
8538 AND DO_NOT_USE_REASON_S3 IS NOT NULL
8539
8540 AND DO_NOT_USE_REASON_S4 IS NOT NULL
8541
8542 AND DO_NOT_USE_REASON_S5 IS NOT NULL
8543
8544 AND DO_NOT_USE_REASON_S6 IS NOT NULL
8545
8546 AND LIST_ENTRY_ID NOT IN
8547
8548 (SELECT LIST_ENTRY_ID
8549
8550 FROM AMS_LIST_ENTRIES
8551
8552 WHERE LIST_HEADER_ID = :list_id
8553
8554 AND ENABLED_FLAG = ''Y'')'
8555
8556 USING IN p_list_id
8557
8558 , IN p_list_id;
8559
8560
8561
8562 EXCEPTION
8563
8564 WHEN OTHERS THEN
8565
8566 Log( 'Remove_DeletedRecords'
8567
8568 , 'MAIN'
8569
8570 , SQLERRM
8571
8572 );
8573
8574 RAISE fnd_api.g_exc_unexpected_error;
8575
8576
8577
8578 END Remove_DeletedRecords;
8579
8580
8581
8582 PROCEDURE Purge_ScheduleEntries_Pvt
8583
8584 ( p_schedule_id IN NUMBER
8585
8586 , p_api_initiated IN BOOLEAN
8587
8588 , p_commit_flag IN BOOLEAN)
8589
8590 IS
8591
8592 l_api_initiated BOOLEAN;
8593
8594 l_list_id NUMBER(15);
8595
8596 l_returns_id_col SYSTEM.number_tbl_type;
8597
8598 l_list_entry_id_col SYSTEM.number_tbl_type;
8599
8600 l_status_code VARCHAR2(30);
8601
8602 BEGIN
8603
8604
8605
8606 SAVEPOINT purge_schedule_entries;
8607
8608
8609
8610 -- Logging initialization
8611
8612 Init_LoggingVariables;
8613
8614 Set_MessagePrefix('purge_schedule_' || p_schedule_id);
8615
8616
8617
8618 l_api_initiated := FALSE; -- Default value
8619
8620 IF p_api_initiated IS NOT NULL THEN
8621
8622 l_api_initiated := p_api_initiated;
8623
8624 END IF;
8625
8626
8627
8628 -- get list header id corresponding to schedule id
8629
8630 BEGIN
8631
8632 IEC_COMMON_UTIL_PVT.Get_ListId(p_schedule_id, l_list_id);
8633
8634 EXCEPTION
8635
8636 WHEN OTHERS THEN
8637
8638 Log( 'Purge_ScheduleEntries_Pub'
8639
8640 , 'GET_LIST_HEADER_ID'
8641
8642 );
8643
8644 END;
8645
8646
8647
8648 -- check list status - needs to be Inactive, Validated, Purged, Failed Purge
8649
8650 EXECUTE IMMEDIATE
8651
8652 'SELECT A.STATUS_CODE
8653
8654 FROM IEC_G_AO_LISTS_V A
8655
8656 WHERE A.LIST_HEADER_ID = :list_id
8657
8658 AND LANGUAGE = USERENV(''LANG'')'
8659
8660 INTO l_status_code
8661
8662 USING l_list_id;
8663
8664
8665
8666 IF l_status_code <> 'INACTIVE' AND
8667
8668 l_status_code <> 'VALIDATED' AND
8669
8670 l_status_code <> 'PURGING' AND
8671
8672 l_status_code <> 'PURGED' AND
8673
8674 l_status_code <> 'FAILED_PURGE'
8675
8676 THEN
8677
8678 Log_PurgeListStatusInvMsg('Purge_ScheduleEntries_Pvt','CHECK_SCHEDULE_STATUS', Get_ScheduleName(p_schedule_id));
8679
8680 RAISE fnd_api.g_exc_error;
8681
8682 END IF;
8683
8684
8685
8686 Update_PurgeStatus(l_list_id, p_schedule_id, 'PURGING', l_api_initiated);
8687
8688
8689
8690 -- Look for records that have been marked as do not use
8691
8692 EXECUTE IMMEDIATE
8693
8694 'BEGIN
8695
8696 SELECT A.RETURNS_ID, A.LIST_ENTRY_ID
8697
8698 BULK COLLECT INTO :returns_id_col, :list_entry_id_col
8699
8700 FROM IEC_G_RETURN_ENTRIES A
8701
8702 WHERE A.LIST_HEADER_ID = :list_id
8703
8704 AND A.DO_NOT_USE_FLAG = ''Y'';
8705
8706 END;'
8707
8708 USING OUT l_returns_id_col
8709
8710 , OUT l_list_entry_id_col
8711
8712 , IN l_list_id;
8713
8714
8715
8716 IF l_returns_id_col IS NOT NULL AND l_returns_id_col.COUNT > 0 THEN
8717
8718
8719
8720 -- Remove_Entries_Pvt expects certain temporary tables
8721
8722 -- to be initialized
8723
8724 Truncate_Temporary_Tables;
8725
8726 Load_CallableZones(l_list_id);
8727
8728
8729
8730 Remove_Entries_Pvt
8731
8732 ( l_list_id
8733
8734 , p_schedule_id
8735
8736 , l_returns_id_col
8737
8738 );
8739
8740
8741
8742 EXECUTE IMMEDIATE
8743
8744 'BEGIN
8745
8746 UPDATE ' || Get_SourceTypeView(l_list_id) || '
8747
8748 SET REASON_CODE_S1 = NULL
8749
8750 , REASON_CODE_S2 = NULL
8751
8752 , REASON_CODE_S3 = NULL
8753
8754 , REASON_CODE_S4 = NULL
8755
8756 , REASON_CODE_S5 = NULL
8757
8758 , REASON_CODE_S6 = NULL
8759
8760 WHERE LIST_HEADER_ID = :list_id
8761
8762 AND LIST_ENTRY_ID IN (SELECT * FROM TABLE(CAST(:list_entry_id_col AS SYSTEM.NUMBER_TBL_TYPE)));
8763 END;'
8764 USING IN l_list_id
8765
8766 , IN l_list_entry_id_col;
8767
8768
8769
8770 Refresh_MViews;
8771
8772 Truncate_Temporary_Tables;
8773
8774
8775
8776 END IF;
8777
8778
8779
8780 -- Update_PurgeStatus(l_list_id, p_schedule_id, 'PURGED', l_api_initiated);
8781
8782 Update_PurgeStatus(l_list_id, p_schedule_id, l_status_code, l_api_initiated);
8783
8784
8785
8786 IF p_commit_flag THEN
8787
8788 COMMIT;
8789
8790 END IF;
8791
8792
8793
8794 EXCEPTION
8795
8796 WHEN fnd_api.g_exc_error THEN
8797
8798 ROLLBACK TO purge_schedule_entries;
8799
8800 -- Update_PurgeStatus(l_list_id, p_schedule_id, 'FAILED_PURGE', l_api_initiated);
8801
8802 Update_PurgeStatus(l_list_id, p_schedule_id, l_status_code, l_api_initiated);
8803
8804 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
8805
8806 WHEN fnd_api.g_exc_unexpected_error THEN
8807
8808 ROLLBACK TO purge_schedule_entries;
8809
8810 -- Update_PurgeStatus(l_list_id, p_schedule_id, 'FAILED_PURGE', l_api_initiated);
8811
8812 Update_PurgeStatus(l_list_id, p_schedule_id, l_status_code, l_api_initiated);
8813
8814 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
8815
8816 WHEN OTHERS THEN
8817
8818 ROLLBACK TO purge_schedule_entries;
8819
8820 Log( 'Purge_ScheduleEntries_Pvt'
8821
8822 , 'MAIN'
8823
8824 , SQLERRM
8825
8826 );
8827
8828 -- Update_PurgeStatus(l_list_id, p_schedule_id, 'FAILED_PURGE', l_api_initiated);
8829
8830 Update_PurgeStatus(l_list_id, p_schedule_id, l_status_code, l_api_initiated);
8831
8832 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
8833
8834
8835
8836 END Purge_ScheduleEntries_Pvt;
8837
8838
8839
8840 -- Procedure to be called by public api to purge schedule
8841
8842 -- entries
8843
8844 PROCEDURE Purge_ScheduleEntries_Pub
8845
8846 ( p_schedule_id IN NUMBER
8847
8848 , p_commit IN BOOLEAN
8849
8850 , x_return_status OUT NOCOPY VARCHAR2)
8851
8852 IS
8853
8854 BEGIN
8855
8856 x_return_status := FND_API.G_RET_STS_SUCCESS;
8857
8858
8859
8860 Purge_ScheduleEntries_Pvt
8861
8862 ( p_schedule_id
8863
8864 , TRUE
8865
8866 , p_commit
8867
8868 );
8869
8870
8871
8872 EXCEPTION
8873
8874 WHEN OTHERS THEN
8875
8876 FND_MSG_PUB.ADD;
8877
8878 x_return_status := FND_API.G_RET_STS_ERROR;
8879
8880 END Purge_ScheduleEntries_Pub;
8881
8882
8883
8884 PROCEDURE Validate_List_Pvt
8885
8886 ( p_list_id IN NUMBER
8887
8888 , p_campaign_schedule_id IN NUMBER
8889
8890 , p_campaign_id IN NUMBER
8891
8892 , p_source_type_view IN VARCHAR2
8893
8894 , p_list_entry_csr IN ListEntryCsrType
8895
8896 , p_commit_flag IN VARCHAR2
8897
8898 )
8899
8900 IS
8901
8902 l_list_entry_id NUMBER;
8903
8904 l_postal_code VARCHAR2(100);
8905
8906 l_do_not_use_flag VARCHAR2(1);
8907
8908 l_do_not_use_reason VARCHAR2(30);
8909
8910 l_newly_updated_flag VARCHAR2(1);
8911
8912 l_prev_callable_zone_id NUMBER(15);
8913
8914 l_prev_subset_id NUMBER(15);
8915
8916
8917
8918 l_contact_points ContactPointList := ContactPointList();
8919
8920
8921
8922 l_curr_contact_point ContactPoint;
8923
8924 l_curr_contact_point_idx NUMBER;
8925
8926
8927
8928 l_prev_record_status VARCHAR2(32);
8929
8930
8931
8932 l_entry_count NUMBER;
8933
8934
8935
8936 l_subset_id_col SYSTEM.number_tbl_type;
8937
8938 l_subset_view_col SYSTEM.varchar_tbl_type;
8939
8940 l_subset_rec_loaded_col SYSTEM.number_tbl_type;
8941
8942
8943
8944 l_callable_zone_id_col SYSTEM.number_tbl_type := SYSTEM.number_tbl_type();
8945
8946 l_callable_zone_incr_col SYSTEM.number_tbl_type := SYSTEM.number_tbl_type();
8947
8948 l_subset_rec_loaded_id_col SYSTEM.number_tbl_type := SYSTEM.number_tbl_type();
8949
8950 l_subset_rec_loaded_incr_col SYSTEM.number_tbl_type := SYSTEM.number_tbl_type();
8951
8952
8953
8954 BEGIN
8955
8956 Init_SubsetRtInfo(p_list_id, p_source_type_view, l_subset_id_col, l_subset_view_col);
8957
8958
8959
8960 l_contact_points.EXTEND(G_NUM_CONTACT_POINTS);
8961
8962 LOOP
8963
8964
8965
8966 l_callable_zone_id_col.DELETE;
8967
8968 l_callable_zone_incr_col.DELETE;
8969
8970 l_subset_rec_loaded_id_col.DELETE;
8971
8972 l_subset_rec_loaded_incr_col.DELETE;
8973
8974
8975
8976 FOR I IN 1..g_row_increment LOOP
8977
8978
8979
8980 -- Initialize Contact Point Record Attributes
8981
8982 Init_ContactPointRecord(l_curr_contact_point);
8983
8984 l_curr_contact_point_idx := NULL;
8985
8986
8987
8988 FOR i IN 1..G_NUM_CONTACT_POINTS LOOP
8989
8990 Init_ContactPointRecord(l_contact_points(i));
8991
8992 END LOOP;
8993
8994
8995
8996 FETCH p_list_entry_csr INTO l_list_entry_id, l_postal_code, l_do_not_use_flag, l_do_not_use_reason, l_newly_updated_flag, l_prev_subset_id, l_prev_callable_zone_id, l_curr_contact_point_idx,
8997
8998 l_contact_points(1).id, l_contact_points(1).time_zone, l_contact_points(1).phone_country_code, l_contact_points(1).phone_area_code, l_contact_points(1).phone_number,
8999
9000 l_contact_points(1).raw_phone_number, l_contact_points(1).cc_tz_id, l_contact_points(1).phone_line_type, l_contact_points(1).purpose,
9001
9002 l_contact_points(2).id, l_contact_points(2).time_zone, l_contact_points(2).phone_country_code, l_contact_points(2).phone_area_code, l_contact_points(2).phone_number,
9003
9004 l_contact_points(2).raw_phone_number, l_contact_points(2).cc_tz_id, l_contact_points(2).phone_line_type, l_contact_points(2).purpose,
9005
9006 l_contact_points(3).id, l_contact_points(3).time_zone, l_contact_points(3).phone_country_code, l_contact_points(3).phone_area_code, l_contact_points(3).phone_number,
9007
9008 l_contact_points(3).raw_phone_number, l_contact_points(3).cc_tz_id, l_contact_points(3).phone_line_type, l_contact_points(3).purpose,
9009
9010 l_contact_points(4).id, l_contact_points(4).time_zone, l_contact_points(4).phone_country_code, l_contact_points(4).phone_area_code, l_contact_points(4).phone_number,
9011
9012 l_contact_points(4).raw_phone_number, l_contact_points(4).cc_tz_id, l_contact_points(4).phone_line_type, l_contact_points(4).purpose,
9013
9014 l_contact_points(5).id, l_contact_points(5).time_zone, l_contact_points(5).phone_country_code, l_contact_points(5).phone_area_code, l_contact_points(5).phone_number,
9015
9016 l_contact_points(5).raw_phone_number, l_contact_points(5).cc_tz_id, l_contact_points(5).phone_line_type, l_contact_points(5).purpose,
9017
9018 l_contact_points(6).id, l_contact_points(6).time_zone, l_contact_points(6).phone_country_code, l_contact_points(6).phone_area_code, l_contact_points(6).phone_number,
9019
9020 l_contact_points(6).raw_phone_number, l_contact_points(6).cc_tz_id, l_contact_points(6).phone_line_type, l_contact_points(6).purpose;
9021
9022
9023
9024 EXIT WHEN p_list_entry_csr%NOTFOUND;
9025
9026
9027
9028 BEGIN
9029
9030
9031
9032 IF l_do_not_use_flag = 'Y' AND l_do_not_use_reason = 4 THEN
9033
9034 l_prev_record_status := 'INVALID'; -- invalid record
9035
9036 ELSIF l_do_not_use_flag = 'N' THEN
9037
9038 l_prev_record_status := 'VALID_ALL'; -- valid record - all contact points valid
9039
9040 FOR i IN 1..G_NUM_CONTACT_POINTS LOOP
9041
9042 IF l_contact_points(i).cc_tz_id IS NULL AND
9043
9044 (l_contact_points(i).phone_number IS NOT NULL OR
9045
9046 l_contact_points(i).raw_phone_number IS NOT NULL)
9047
9048 THEN
9049
9050 l_prev_record_status := 'VALID_SOME'; -- valid record - at least one invalid contact point
9051
9052 EXIT;
9053
9054 END IF;
9055
9056 END LOOP;
9057
9058 ELSE
9059
9060 l_prev_record_status := 'NEW'; -- new record (never been validated)
9061
9062 END IF;
9063
9064
9065
9066 -- If record was previously valid, we must decrement the
9067
9068 -- records loaded report count for the previous subset id
9069
9070 IF (l_prev_record_status = 'VALID_ALL'
9071
9072 OR l_prev_record_status = 'VALID_SOME')
9073
9074 AND l_prev_subset_id IS NOT NULL
9075
9076 THEN
9077
9078 l_subset_rec_loaded_id_col.EXTEND;
9079
9080 l_subset_rec_loaded_id_col(l_subset_rec_loaded_id_col.LAST) := l_prev_subset_id;
9081
9082 l_subset_rec_loaded_incr_col.EXTEND;
9083
9084 l_subset_rec_loaded_incr_col(l_subset_rec_loaded_incr_col.LAST) := -1;
9085
9086 END IF;
9087
9088
9089
9090 -- If record had a previous current contact point, we must
9091
9092 -- decrement callable zone count for previous current contact point
9093
9094 -- since current contact point may change if the record has been
9095
9096 -- updated, the current contact point changes, or the subset is changed
9097
9098 IF l_prev_callable_zone_id IS NOT NULL THEN
9099
9100 l_callable_zone_id_col.EXTEND;
9101
9102 l_callable_zone_id_col(l_callable_zone_id_col.LAST) := l_prev_callable_zone_id;
9103
9104 l_callable_zone_incr_col.EXTEND;
9105
9106 l_callable_zone_incr_col(l_callable_zone_incr_col.LAST) := -1;
9107
9108 END IF;
9109
9110
9111
9112 -- If record has been updated, nullify the current cc_tz_id to force
9113
9114 -- revalidation of the contact point
9115
9116 IF l_newly_updated_flag = 'Y' THEN
9117
9118 FOR i IN 1..G_NUM_CONTACT_POINTS LOOP
9119
9120 l_contact_points(i).cc_tz_id := NULL;
9121
9122 END LOOP;
9123
9124 ELSE
9125
9126 FOR i IN 1..G_NUM_CONTACT_POINTS LOOP
9127
9128 IF l_contact_points(i).cc_tz_id IS NOT NULL THEN
9129
9130
9131
9132 Get_CallableZoneDetail_Cache
9133
9134 ( l_contact_points(i).cc_tz_id
9135
9136 , l_contact_points(i).territory_code
9137
9138 , l_contact_points(i).region_id
9139
9140 , l_contact_points(i).time_zone
9141
9142 , l_contact_points(i).valid_flag
9143
9144 );
9145
9146
9147
9148 -- If the callable zone id is not associated with this list,
9149
9150 -- map the callable zone id to the territory_code, region_id,
9151
9152 -- and time_zone, then delete the callable zone id so
9153
9154 -- that record will be validated and assigned a new
9155
9156 -- callable zone id that is associated with this list
9157
9158 IF l_contact_points(i).valid_flag = 'N' THEN
9159
9160 Get_CallableZoneDetail
9161
9162 ( l_contact_points(i).cc_tz_id
9163
9164 , l_contact_points(i).territory_code
9165
9166 , l_contact_points(i).region_id
9167
9168 , l_contact_points(i).time_zone
9169
9170 , l_contact_points(i).valid_flag
9171
9172 );
9173
9174 l_contact_points(i).cc_tz_id := NULL;
9175
9176 END IF;
9177
9178 END IF;
9179
9180 END LOOP;
9181
9182 END IF;
9183
9184
9185
9186 Validate_List_Entry ( l_list_entry_id
9187
9188 , l_postal_code
9189
9190 , l_contact_points
9191
9192 , l_curr_contact_point
9193
9194 , l_curr_contact_point_idx);
9195
9196
9197
9198 IF l_curr_contact_point_idx IS NULL THEN
9199
9200 -- Indicates entry failed validation
9201
9202 l_do_not_use_flag := 'Y';
9203
9204 l_do_not_use_reason := 4;
9205
9206
9207
9208 ELSE
9209
9210 -- Indicates entry passed validation
9211
9212 l_do_not_use_flag := 'N';
9213
9214 l_do_not_use_reason := NULL;
9215
9216
9217
9218 END IF;
9219
9220 EXCEPTION
9221
9222 WHEN fnd_api.g_exc_error THEN
9223
9224 GOTO Next_List_Entry;
9225
9226 WHEN fnd_api.g_exc_unexpected_error THEN
9227
9228 GOTO Next_List_Entry;
9229
9230 WHEN OTHERS THEN
9231
9232 RAISE;
9233
9234 END;
9235
9236
9237
9238 INSERT INTO IEC_VAL_ENTRY_CACHE
9239
9240 ( LIST_ENTRY_ID
9241
9242 , POSTAL_CODE
9243
9244 , DO_NOT_USE_FLAG
9245
9246 , DO_NOT_USE_REASON
9247
9248 , PREV_STATUS_CODE
9249
9250 , CURR_CP_INDEX
9251
9252 , CURR_CP_ID
9253
9254 , CURR_CP_TIME_ZONE
9255
9256 , CURR_CP_COUNTRY_CODE
9257
9258 , CURR_CP_AREA_CODE
9259
9260 , CURR_CP_PHONE_NUMBER
9261
9262 , CURR_CP_RAW_PHONE_NUMBER
9263
9264 , CURR_CP_TERRITORY_CODE
9265
9266 , CURR_CP_REGION_ID
9267
9268 , CURR_CP_MKTG_ITEM_CC_TZS_ID
9269
9270 , CURR_CP_PHONE_LINE_TYPE
9271
9272 , CURR_CP_CONTACT_POINT_PURPOSE
9273
9274 , CONTACT_POINT_ID_S1
9275
9276 , TIME_ZONE_S1
9277
9278 , PHONE_COUNTRY_CODE_S1
9279
9280 , PHONE_AREA_CODE_S1
9281
9282 , PHONE_NUMBER_S1
9283
9284 , RAW_PHONE_NUMBER_S1
9285
9286 , TERRITORY_CODE_S1
9287
9288 , REGION_ID_S1
9289
9290 , MKTG_ITEM_CC_TZS_ID_S1
9291
9292 , VALID_FLAG_S1
9293
9294 , DO_NOT_USE_REASON_S1
9295
9296 , PHONE_LINE_TYPE_S1
9297
9298 , CONTACT_POINT_PURPOSE_S1
9299
9300 , CONTACT_POINT_ID_S2
9301
9302 , TIME_ZONE_S2
9303
9304 , PHONE_COUNTRY_CODE_S2
9305
9306 , PHONE_AREA_CODE_S2
9307
9308 , PHONE_NUMBER_S2
9309
9310 , RAW_PHONE_NUMBER_S2
9311
9312 , TERRITORY_CODE_S2
9313
9314 , REGION_ID_S2
9315
9316 , MKTG_ITEM_CC_TZS_ID_S2
9317
9318 , VALID_FLAG_S2
9319
9320 , DO_NOT_USE_REASON_S2
9321
9322 , PHONE_LINE_TYPE_S2
9323
9324 , CONTACT_POINT_PURPOSE_S2
9325
9326 , CONTACT_POINT_ID_S3
9327
9328 , TIME_ZONE_S3
9329
9330 , PHONE_COUNTRY_CODE_S3
9331
9332 , PHONE_AREA_CODE_S3
9333
9334 , PHONE_NUMBER_S3
9335
9336 , RAW_PHONE_NUMBER_S3
9337
9338 , TERRITORY_CODE_S3
9339
9340 , REGION_ID_S3
9341
9342 , MKTG_ITEM_CC_TZS_ID_S3
9343
9344 , VALID_FLAG_S3
9345
9346 , DO_NOT_USE_REASON_S3
9347
9348 , PHONE_LINE_TYPE_S3
9349
9350 , CONTACT_POINT_PURPOSE_S3
9351
9352 , CONTACT_POINT_ID_S4
9353
9354 , TIME_ZONE_S4
9355
9356 , PHONE_COUNTRY_CODE_S4
9357
9358 , PHONE_AREA_CODE_S4
9359
9360 , PHONE_NUMBER_S4
9361
9362 , RAW_PHONE_NUMBER_S4
9363
9364 , TERRITORY_CODE_S4
9365
9366 , REGION_ID_S4
9367
9368 , MKTG_ITEM_CC_TZS_ID_S4
9369
9370 , VALID_FLAG_S4
9371
9372 , DO_NOT_USE_REASON_S4
9373
9374 , PHONE_LINE_TYPE_S4
9375
9376 , CONTACT_POINT_PURPOSE_S4
9377
9378 , CONTACT_POINT_ID_S5
9379
9380 , TIME_ZONE_S5
9381
9382 , PHONE_COUNTRY_CODE_S5
9383
9384 , PHONE_AREA_CODE_S5
9385
9386 , PHONE_NUMBER_S5
9387
9388 , RAW_PHONE_NUMBER_S5
9389
9390 , TERRITORY_CODE_S5
9391
9392 , REGION_ID_S5
9393
9394 , MKTG_ITEM_CC_TZS_ID_S5
9395
9396 , VALID_FLAG_S5
9397
9398 , DO_NOT_USE_REASON_S5
9399
9400 , PHONE_LINE_TYPE_S5
9401
9402 , CONTACT_POINT_PURPOSE_S5
9403
9404 , CONTACT_POINT_ID_S6
9405
9406 , TIME_ZONE_S6
9407
9408 , PHONE_COUNTRY_CODE_S6
9409
9410 , PHONE_AREA_CODE_S6
9411
9412 , PHONE_NUMBER_S6
9413
9414 , RAW_PHONE_NUMBER_S6
9415
9416 , TERRITORY_CODE_S6
9417
9418 , REGION_ID_S6
9419
9420 , MKTG_ITEM_CC_TZS_ID_S6
9421
9422 , VALID_FLAG_S6
9423
9424 , DO_NOT_USE_REASON_S6
9425
9426 , PHONE_LINE_TYPE_S6
9427
9428 , CONTACT_POINT_PURPOSE_S6
9429
9430 )
9431
9432 VALUES
9433
9434 ( l_list_entry_id
9435
9436 , l_postal_code
9437
9438 , l_do_not_use_flag
9439
9440 , l_do_not_use_reason
9441
9442 , l_prev_record_status
9443
9444 , l_curr_contact_point_idx
9445
9446 , l_curr_contact_point.id
9447
9448 , l_curr_contact_point.time_zone
9449
9450 , l_curr_contact_point.phone_country_code
9451
9452 , l_curr_contact_point.phone_area_code
9453
9454 , l_curr_contact_point.phone_number
9455
9456 , l_curr_contact_point.raw_phone_number
9457
9458 , l_curr_contact_point.territory_code
9459
9460 , l_curr_contact_point.region_id
9461
9462 , l_curr_contact_point.cc_tz_id
9463
9464 , l_curr_contact_point.phone_line_type
9465
9466 , l_curr_contact_point.purpose
9467
9468 , l_contact_points(1).id
9469
9470 , l_contact_points(1).time_zone
9471
9472 , l_contact_points(1).phone_country_code
9473
9474 , l_contact_points(1).phone_area_code
9475
9476 , l_contact_points(1).phone_number
9477
9478 , l_contact_points(1).raw_phone_number
9479
9480 , l_contact_points(1).territory_code
9481
9482 , l_contact_points(1).region_id
9483
9484 , l_contact_points(1).cc_tz_id
9485
9486 , l_contact_points(1).valid_flag
9487
9488 , l_contact_points(1).dnu_reason
9489
9490 , l_contact_points(1).phone_line_type
9491
9492 , l_contact_points(1).purpose
9493
9494 , l_contact_points(2).id
9495
9496 , l_contact_points(2).time_zone
9497
9498 , l_contact_points(2).phone_country_code
9499
9500 , l_contact_points(2).phone_area_code
9501
9502 , l_contact_points(2).phone_number
9503
9504 , l_contact_points(2).raw_phone_number
9505
9506 , l_contact_points(2).territory_code
9507
9508 , l_contact_points(2).region_id
9509
9510 , l_contact_points(2).cc_tz_id
9511
9512 , l_contact_points(2).valid_flag
9513
9514 , l_contact_points(2).dnu_reason
9515
9516 , l_contact_points(2).phone_line_type
9517
9518 , l_contact_points(2).purpose
9519
9520 , l_contact_points(3).id
9521
9522 , l_contact_points(3).time_zone
9523
9524 , l_contact_points(3).phone_country_code
9525
9526 , l_contact_points(3).phone_area_code
9527
9528 , l_contact_points(3).phone_number
9529
9530 , l_contact_points(3).raw_phone_number
9531
9532 , l_contact_points(3).territory_code
9533
9534 , l_contact_points(3).region_id
9535
9536 , l_contact_points(3).cc_tz_id
9537
9538 , l_contact_points(3).valid_flag
9539
9540 , l_contact_points(3).dnu_reason
9541
9542 , l_contact_points(3).phone_line_type
9543
9544 , l_contact_points(3).purpose
9545
9546 , l_contact_points(4).id
9547
9548 , l_contact_points(4).time_zone
9549
9550 , l_contact_points(4).phone_country_code
9551
9552 , l_contact_points(4).phone_area_code
9553
9554 , l_contact_points(4).phone_number
9555
9556 , l_contact_points(4).raw_phone_number
9557
9558 , l_contact_points(4).territory_code
9559
9560 , l_contact_points(4).region_id
9561
9562 , l_contact_points(4).cc_tz_id
9563
9564 , l_contact_points(4).valid_flag
9565
9566 , l_contact_points(4).dnu_reason
9567
9568 , l_contact_points(4).phone_line_type
9569
9570 , l_contact_points(4).purpose
9571
9572 , l_contact_points(5).id
9573
9574 , l_contact_points(5).time_zone
9575
9576 , l_contact_points(5).phone_country_code
9577
9578 , l_contact_points(5).phone_area_code
9579
9580 , l_contact_points(5).phone_number
9581
9582 , l_contact_points(5).raw_phone_number
9583
9584 , l_contact_points(5).territory_code
9585
9586 , l_contact_points(5).region_id
9587
9588 , l_contact_points(5).cc_tz_id
9589
9590 , l_contact_points(5).valid_flag
9591
9592 , l_contact_points(5).dnu_reason
9593
9594 , l_contact_points(5).phone_line_type
9595
9596 , l_contact_points(5).purpose
9597
9598 , l_contact_points(6).id
9599
9600 , l_contact_points(6).time_zone
9601
9602 , l_contact_points(6).phone_country_code
9603
9604 , l_contact_points(6).phone_area_code
9605
9606 , l_contact_points(6).phone_number
9607
9608 , l_contact_points(6).raw_phone_number
9609
9610 , l_contact_points(6).territory_code
9611
9612 , l_contact_points(6).region_id
9613
9614 , l_contact_points(6).cc_tz_id
9615
9616 , l_contact_points(6).valid_flag
9617
9618 , l_contact_points(6).dnu_reason
9619
9620 , l_contact_points(6).phone_line_type
9621
9622 , l_contact_points(6).purpose
9623
9624 );
9625
9626
9627
9628 <<Next_List_Entry>>
9629
9630 NULL;
9631
9632
9633
9634 END LOOP;
9635
9636
9637
9638 EXECUTE IMMEDIATE
9639
9640 'SELECT COUNT(*)
9641
9642 FROM IEC_VAL_ENTRY_CACHE'
9643
9644 INTO l_entry_count;
9645
9646
9647
9648 EXIT WHEN l_entry_count = 0;
9649
9650
9651
9652 -- Decrement callable zone counts for all previous contact point callable zones
9653
9654 -- Required to maintain correct report counts when current contact point or subset
9655
9656 -- changes
9657
9658 Incr_CallableZoneCounts_Cache(l_callable_zone_id_col, l_callable_zone_incr_col);
9659
9660
9661
9662 -- Decrement record loaded counts for any entries that were previously assigned
9663
9664 -- to subsets
9665
9666 Incr_RecordsLoadedCounts(p_campaign_schedule_id, p_list_id, l_subset_rec_loaded_id_col, l_subset_rec_loaded_incr_col);
9667
9668
9669
9670 -- Assign entries to subsets before updating ALE and Return Entries
9671
9672 Partition_SubsetEntries(p_list_id, l_subset_id_col, l_subset_view_col, l_subset_rec_loaded_col);
9673
9674
9675
9676 -- Compile data on callable zones and initialize counts
9677
9678 Update_CallableZones(p_list_id);
9679
9680
9681
9682 Update_AmsListEntries(p_list_id, p_source_type_view);
9683
9684 Update_ValidationReportDetails(p_list_id);
9685
9686 Update_IecReturnEntries(p_list_id, p_campaign_schedule_id, p_campaign_id, p_source_type_view);
9687
9688
9689
9690 Update_ReportCounts( p_campaign_id
9691
9692 , p_campaign_schedule_id
9693
9694 , p_list_id
9695
9696 , l_subset_id_col
9697
9698 , l_subset_rec_loaded_col);
9699
9700
9701
9702 Purge_CallableZones(p_list_id, p_campaign_schedule_id);
9703
9704
9705
9706 Truncate_IecValEntryCache;
9707
9708
9709
9710 IF p_commit_flag = 'Y' THEN
9711
9712 COMMIT;
9713
9714 END IF;
9715
9716
9717
9718 END LOOP;
9719
9720
9721
9722 EXCEPTION
9723
9724 WHEN fnd_api.g_exc_error THEN
9725
9726 RAISE;
9727
9728 WHEN fnd_api.g_exc_unexpected_error THEN
9729
9730 RAISE;
9731
9732 WHEN OTHERS THEN
9733
9734 Log( 'Validate_List_Pvt'
9735
9736 , 'MAIN'
9737
9738 , SQLERRM
9739
9740 );
9741
9742 RAISE fnd_api.g_exc_unexpected_error;
9743
9744
9745
9746 END Validate_List_Pvt;
9747
9748
9749
9750 FUNCTION Get_CampaignId
9751
9752 (p_list_id IN NUMBER)
9753
9754 RETURN NUMBER
9755
9756 IS
9757
9758 l_campaign_id NUMBER(15);
9759
9760 BEGIN
9761
9762 -- Get Campaign Id
9763
9764 BEGIN
9765
9766 EXECUTE IMMEDIATE
9767
9768 'SELECT B.CAMPAIGN_ID
9769
9770 FROM AMS_ACT_LISTS A, AMS_CAMPAIGN_SCHEDULES_B B
9771
9772 WHERE A.LIST_HEADER_ID = :list_id
9773
9774 AND A.LIST_USED_BY = ''CSCH''
9775
9776 AND A.LIST_ACT_TYPE = ''TARGET''
9777
9778 AND A.LIST_USED_BY_ID = B.SCHEDULE_ID'
9779
9780 INTO l_campaign_id
9781
9782 USING p_list_id;
9783
9784 EXCEPTION
9785
9786 WHEN OTHERS THEN
9787
9788 Log( 'Get_CampaignScheduleId'
9789
9790 , 'MAIN'
9791
9792 , SQLERRM
9793
9794 );
9795
9796 RAISE fnd_api.g_exc_unexpected_error;
9797
9798 END;
9799
9800
9801
9802 RETURN l_campaign_id;
9803
9804
9805
9806 END Get_CampaignId;
9807
9808
9809
9810 FUNCTION Get_ScheduleId
9811
9812 (p_list_id IN NUMBER)
9813
9814 RETURN NUMBER
9815
9816 IS
9817
9818 l_campaign_schedule_id NUMBER(15);
9819
9820 BEGIN
9821
9822
9823
9824 IEC_COMMON_UTIL_PVT.Get_ScheduleId(p_list_id, l_campaign_schedule_id);
9825
9826 RETURN l_campaign_schedule_id;
9827
9828
9829
9830 EXCEPTION
9831
9832 WHEN OTHERS THEN
9833
9834 Log('Get_ScheduleId', 'MAIN');
9835
9836 RAISE fnd_api.g_exc_unexpected_error;
9837
9838
9839
9840 END Get_ScheduleId;
9841
9842
9843
9844 FUNCTION Get_ScheduleSourceCode
9845
9846 (p_list_id IN NUMBER)
9847
9848 RETURN VARCHAR2
9849
9850 IS
9851
9852 l_source_code VARCHAR2(30);
9853
9854 BEGIN
9855
9856
9857
9858 BEGIN
9859
9860 EXECUTE IMMEDIATE
9861
9862 'SELECT B.SOURCE_CODE
9863
9864 FROM AMS_ACT_LISTS A, AMS_CAMPAIGN_SCHEDULES_B B
9865
9866 WHERE A.LIST_USED_BY_ID = B.SCHEDULE_ID
9867
9868 AND A.LIST_HEADER_ID = :list_id'
9869
9870 INTO l_source_code
9871
9872 USING p_list_id;
9873
9874 EXCEPTION
9875
9876 WHEN OTHERS THEN
9877
9878 Log( 'Get_ScheduleSourceCode'
9879
9880 , 'MAIN'
9881
9882 , SQLERRM
9883
9884 );
9885
9886 RAISE fnd_api.g_exc_unexpected_error;
9887
9888 END;
9889
9890
9891
9892 RETURN l_source_code;
9893
9894
9895
9896 END Get_ScheduleSourceCode;
9897
9898
9899
9900 PROCEDURE Validate_List_Pre
9901
9902 ( p_list_id IN NUMBER
9903
9904 , p_use_rules_flag IN VARCHAR2
9905
9906 , x_campaign_id OUT NOCOPY NUMBER
9907
9908 , x_campaign_schedule_id OUT NOCOPY NUMBER
9909
9910 , x_source_type_view OUT NOCOPY VARCHAR2 )
9911
9912 IS
9913
9914 PRAGMA AUTONOMOUS_TRANSACTION;
9915
9916 BEGIN
9917
9918
9919
9920 x_campaign_id := Get_CampaignId(p_list_id);
9921
9922 x_campaign_schedule_id := Get_ScheduleId(p_list_id);
9923
9924 x_source_type_view := Get_SourceTypeView(p_list_id);
9925
9926
9927
9928 Truncate_Temporary_Tables;
9929
9930 Init_GlobalVariables;
9931
9932 Init_LookupTables;
9933
9934 Load_CallableZones(p_list_id);
9935
9936
9937
9938 IF p_use_rules_flag = 'Y' THEN
9939
9940 Init_Rules(p_list_id);
9941
9942 END IF;
9943
9944
9945
9946 COMMIT;
9947
9948
9949
9950 EXCEPTION
9951
9952 WHEN OTHERS THEN
9953
9954 Log( 'Validate_List_Pre'
9955
9956 , 'MAIN'
9957
9958 , SQLERRM
9959
9960 );
9961
9962 ROLLBACK;
9963
9964 RAISE fnd_api.g_exc_unexpected_error;
9965
9966 END Validate_List_Pre;
9967
9968
9969
9970 PROCEDURE Validate_List_Post
9971
9972 ( p_list_id IN NUMBER)
9973
9974 IS
9975
9976 -- PRAGMA AUTONOMOUS_TRANSACTION; //FP For bug 8853233
9977
9978 BEGIN
9979
9980
9981
9982 Truncate_Temporary_Tables;
9983
9984 Refresh_MViews;
9985
9986 -- COMMIT; //FP For bug 8853233
9987
9988
9989
9990 EXCEPTION
9991
9992 WHEN OTHERS THEN
9993
9994 Log( 'Validate_List_Post'
9995
9996 , 'MAIN'
9997
9998 , SQLERRM
9999
10000 );
10001
10002 ROLLBACK;
10003
10004 RAISE fnd_api.g_exc_unexpected_error;
10005
10006 END Validate_List_Post;
10007
10008
10009
10010 /* No longer checking for required columns preemptively
10011
10012 due to 8i/9i compatibility problems using ALL_TAB_COLS
10013
10014 Since we must use ALL_TAB_COLUMNS to check for columns
10015
10016 and we don't want to impact the performance of validation,
10017
10018 we will only find the missing columns if the error occurs
10019
10020 see the Log_MissingSourceTypeColumns for implementation.
10021
10022
10023
10024 FUNCTION Verify_SourceTypeColumns
10025
10026 ( p_list_id IN NUMBER
10027
10028 , p_source_type_view IN VARCHAR2
10029
10030 , p_source_type_code IN VARCHAR2
10031
10032 )
10033
10034 RETURN BOOLEAN
10035
10036 IS
10037
10038 l_curr VARCHAR2(32);
10039
10040 l_view_ok BOOLEAN := TRUE;
10041
10042 l_columns SYSTEM.varchar_tbl_type;
10043
10044 l_missing_cols VARCHAR2(4000);
10045
10046 l_table_owner VARCHAR2(30);
10047
10048 BEGIN
10049
10050
10051
10052 l_table_owner := Get_AppsSchemaName;
10053
10054
10055
10056 -- Change to ALL_TAB_COLS for performance reasons when 9i db becomes prereq
10057
10058 SELECT COLUMN_NAME
10059
10060 BULK COLLECT INTO l_columns
10061
10062 FROM ALL_TAB_COLUMNS
10063
10064 WHERE TABLE_NAME = p_source_type_view
10065
10066 AND OWNER = l_table_owner;
10067
10068
10069
10070 l_curr := 'LIST_ENTRY_ID';
10071
10072 IF NOT Contains(l_columns, l_curr) THEN
10073
10074 l_missing_cols := l_missing_cols || ' ' || l_curr;
10075
10076 END IF;
10077
10078 l_curr := 'POSTAL_CODE';
10079
10080 IF NOT Contains(l_columns, l_curr) THEN
10081
10082 l_missing_cols := l_missing_cols || ' ' || l_curr;
10083
10084 END IF;
10085
10086 l_curr := 'DO_NOT_USE_FLAG';
10087
10088 IF NOT Contains(l_columns, l_curr) THEN
10089
10090 l_missing_cols := l_missing_cols || ' ' || l_curr;
10091
10092 END IF;
10093
10094 l_curr := 'DO_NOT_USE_REASON';
10095
10096 IF NOT Contains(l_columns, l_curr) THEN
10097
10098 l_missing_cols := l_missing_cols || ' ' || l_curr;
10099
10100 END IF;
10101
10102 l_curr := 'NEWLY_UPDATED_FLAG';
10103
10104 IF NOT Contains(l_columns, l_curr) THEN
10105
10106 l_missing_cols := l_missing_cols || ' ' || l_curr;
10107
10108 END IF;
10109
10110 l_curr := 'CONTACT_POINT_ID_S1';
10111
10112 IF NOT Contains(l_columns, l_curr) THEN
10113
10114 l_missing_cols := l_missing_cols || ' ' || l_curr;
10115
10116 END IF;
10117
10118 l_curr := 'TIME_ZONE_S1';
10119
10120 IF NOT Contains(l_columns, l_curr) THEN
10121
10122 l_missing_cols := l_missing_cols || ' ' || l_curr;
10123
10124 END IF;
10125
10126 l_curr := 'PHONE_COUNTRY_CODE_S1';
10127
10128 IF NOT Contains(l_columns, l_curr) THEN
10129
10130 l_missing_cols := l_missing_cols || ' ' || l_curr;
10131
10132 END IF;
10133
10134 l_curr := 'PHONE_AREA_CODE_S1';
10135
10136 IF NOT Contains(l_columns, l_curr) THEN
10137
10138 l_missing_cols := l_missing_cols || ' ' || l_curr;
10139
10140 END IF;
10141
10142 l_curr := 'PHONE_NUMBER_S1';
10143
10144 IF NOT Contains(l_columns, l_curr) THEN
10145
10146 l_missing_cols := l_missing_cols || ' ' || l_curr;
10147
10148 END IF;
10149
10150 l_curr := 'RAW_PHONE_NUMBER_S1';
10151
10152 IF NOT Contains(l_columns, l_curr) THEN
10153
10154 l_missing_cols := l_missing_cols || ' ' || l_curr;
10155
10156 END IF;
10157
10158 l_curr := 'REASON_CODE_S1';
10159
10160 IF NOT Contains(l_columns, l_curr) THEN
10161
10162 l_missing_cols := l_missing_cols || ' ' || l_curr;
10163
10164 END IF;
10165
10166 l_curr := 'PHONE_LINE_TYPE_S1';
10167
10168 IF NOT Contains(l_columns, l_curr) THEN
10169
10170 l_missing_cols := l_missing_cols || ' ' || l_curr;
10171
10172 END IF;
10173
10174 l_curr := 'CONTACT_POINT_ID_S2';
10175
10176 IF NOT Contains(l_columns, l_curr) THEN
10177
10178 l_missing_cols := l_missing_cols || ' ' || l_curr;
10179
10180 END IF;
10181
10182 l_curr := 'TIME_ZONE_S2';
10183
10184 IF NOT Contains(l_columns, l_curr) THEN
10185
10186 l_missing_cols := l_missing_cols || ' ' || l_curr;
10187
10188 END IF;
10189
10190 l_curr := 'PHONE_COUNTRY_CODE_S2';
10191
10192 IF NOT Contains(l_columns, l_curr) THEN
10193
10194 l_missing_cols := l_missing_cols || ' ' || l_curr;
10195
10196 END IF;
10197
10198 l_curr := 'PHONE_AREA_CODE_S2';
10199
10200 IF NOT Contains(l_columns, l_curr) THEN
10201
10202 l_missing_cols := l_missing_cols || ' ' || l_curr;
10203
10204 END IF;
10205
10206 l_curr := 'PHONE_NUMBER_S2';
10207
10208 IF NOT Contains(l_columns, l_curr) THEN
10209
10210 l_missing_cols := l_missing_cols || ' ' || l_curr;
10211
10212 END IF;
10213
10214 l_curr := 'RAW_PHONE_NUMBER_S2';
10215
10216 IF NOT Contains(l_columns, l_curr) THEN
10217
10218 l_missing_cols := l_missing_cols || ' ' || l_curr;
10219
10220 END IF;
10221
10222 l_curr := 'REASON_CODE_S2';
10223
10224 IF NOT Contains(l_columns, l_curr) THEN
10225
10226 l_missing_cols := l_missing_cols || ' ' || l_curr;
10227
10228 END IF;
10229
10230 l_curr := 'PHONE_LINE_TYPE_S2';
10231
10232 IF NOT Contains(l_columns, l_curr) THEN
10233
10234 l_missing_cols := l_missing_cols || ' ' || l_curr;
10235
10236 END IF;
10237
10238 l_curr := 'CONTACT_POINT_ID_S3';
10239
10240 IF NOT Contains(l_columns, l_curr) THEN
10241
10242 l_missing_cols := l_missing_cols || ' ' || l_curr;
10243
10244 END IF;
10245
10246 l_curr := 'TIME_ZONE_S3';
10247
10248 IF NOT Contains(l_columns, l_curr) THEN
10249
10250 l_missing_cols := l_missing_cols || ' ' || l_curr;
10251
10252 END IF;
10253
10254 l_curr := 'PHONE_COUNTRY_CODE_S3';
10255
10256 IF NOT Contains(l_columns, l_curr) THEN
10257
10258 l_missing_cols := l_missing_cols || ' ' || l_curr;
10259
10260 END IF;
10261
10262 l_curr := 'PHONE_AREA_CODE_S3';
10263
10264 IF NOT Contains(l_columns, l_curr) THEN
10265
10266 l_missing_cols := l_missing_cols || ' ' || l_curr;
10267
10268 END IF;
10269
10270 l_curr := 'PHONE_NUMBER_S3';
10271
10272 IF NOT Contains(l_columns, l_curr) THEN
10273
10274 l_missing_cols := l_missing_cols || ' ' || l_curr;
10275
10276 END IF;
10277
10278 l_curr := 'RAW_PHONE_NUMBER_S3';
10279
10280 IF NOT Contains(l_columns, l_curr) THEN
10281
10282 l_missing_cols := l_missing_cols || ' ' || l_curr;
10283
10284 END IF;
10285
10286 l_curr := 'REASON_CODE_S3';
10287
10288 IF NOT Contains(l_columns, l_curr) THEN
10289
10290 l_missing_cols := l_missing_cols || ' ' || l_curr;
10291
10292 END IF;
10293
10294 l_curr := 'PHONE_LINE_TYPE_S3';
10295
10296 IF NOT Contains(l_columns, l_curr) THEN
10297
10298 l_missing_cols := l_missing_cols || ' ' || l_curr;
10299
10300 END IF;
10301
10302 l_curr := 'CONTACT_POINT_ID_S4';
10303
10304 IF NOT Contains(l_columns, l_curr) THEN
10305
10306 l_missing_cols := l_missing_cols || ' ' || l_curr;
10307
10308 END IF;
10309
10310 l_curr := 'TIME_ZONE_S4';
10311
10312 IF NOT Contains(l_columns, l_curr) THEN
10313
10314 l_missing_cols := l_missing_cols || ' ' || l_curr;
10315
10316 END IF;
10317
10318 l_curr := 'PHONE_COUNTRY_CODE_S4';
10319
10320 IF NOT Contains(l_columns, l_curr) THEN
10321
10322 l_missing_cols := l_missing_cols || ' ' || l_curr;
10323
10324 END IF;
10325
10326 l_curr := 'PHONE_AREA_CODE_S4';
10327
10328 IF NOT Contains(l_columns, l_curr) THEN
10329
10330 l_missing_cols := l_missing_cols || ' ' || l_curr;
10331
10332 END IF;
10333
10334 l_curr := 'PHONE_NUMBER_S4';
10335
10336 IF NOT Contains(l_columns, l_curr) THEN
10337
10338 l_missing_cols := l_missing_cols || ' ' || l_curr;
10339
10340 END IF;
10341
10342 l_curr := 'RAW_PHONE_NUMBER_S4';
10343
10344 IF NOT Contains(l_columns, l_curr) THEN
10345
10346 l_missing_cols := l_missing_cols || ' ' || l_curr;
10347
10348 END IF;
10349
10350 l_curr := 'REASON_CODE_S4';
10351
10352 IF NOT Contains(l_columns, l_curr) THEN
10353
10354 l_missing_cols := l_missing_cols || ' ' || l_curr;
10355
10356 END IF;
10357
10358 l_curr := 'PHONE_LINE_TYPE_S4';
10359
10360 IF NOT Contains(l_columns, l_curr) THEN
10361
10362 l_missing_cols := l_missing_cols || ' ' || l_curr;
10363
10364 END IF;
10365
10366 l_curr := 'CONTACT_POINT_ID_S5';
10367
10368 IF NOT Contains(l_columns, l_curr) THEN
10369
10370 l_missing_cols := l_missing_cols || ' ' || l_curr;
10371
10372 END IF;
10373
10374 l_curr := 'TIME_ZONE_S5';
10375
10376 IF NOT Contains(l_columns, l_curr) THEN
10377
10378 l_missing_cols := l_missing_cols || ' ' || l_curr;
10379
10380 END IF;
10381
10382 l_curr := 'PHONE_COUNTRY_CODE_S5';
10383
10384 IF NOT Contains(l_columns, l_curr) THEN
10385
10386 l_missing_cols := l_missing_cols || ' ' || l_curr;
10387
10388 END IF;
10389
10390 l_curr := 'PHONE_AREA_CODE_S5';
10391
10392 IF NOT Contains(l_columns, l_curr) THEN
10393
10394 l_missing_cols := l_missing_cols || ' ' || l_curr;
10395
10396 END IF;
10397
10398 l_curr := 'PHONE_NUMBER_S5';
10399
10400 IF NOT Contains(l_columns, l_curr) THEN
10401
10402 l_missing_cols := l_missing_cols || ' ' || l_curr;
10403
10404 END IF;
10405
10406 l_curr := 'RAW_PHONE_NUMBER_S5';
10407
10408 IF NOT Contains(l_columns, l_curr) THEN
10409
10410 l_missing_cols := l_missing_cols || ' ' || l_curr;
10411
10412 END IF;
10413
10414 l_curr := 'REASON_CODE_S5';
10415
10416 IF NOT Contains(l_columns, l_curr) THEN
10417
10418 l_missing_cols := l_missing_cols || ' ' || l_curr;
10419
10420 END IF;
10421
10422 l_curr := 'PHONE_LINE_TYPE_S5';
10423
10424 IF NOT Contains(l_columns, l_curr) THEN
10425
10426 l_missing_cols := l_missing_cols || ' ' || l_curr;
10427
10428 END IF;
10429
10430 l_curr := 'CONTACT_POINT_ID_S6';
10431
10432 IF NOT Contains(l_columns, l_curr) THEN
10433
10434 l_missing_cols := l_missing_cols || ' ' || l_curr;
10435
10436 END IF;
10437
10438 l_curr := 'TIME_ZONE_S6';
10439
10440 IF NOT Contains(l_columns, l_curr) THEN
10441
10442 l_missing_cols := l_missing_cols || ' ' || l_curr;
10443
10444 END IF;
10445
10446 l_curr := 'PHONE_COUNTRY_CODE_S6';
10447
10448 IF NOT Contains(l_columns, l_curr) THEN
10449
10450 l_missing_cols := l_missing_cols || ' ' || l_curr;
10451
10452 END IF;
10453
10454 l_curr := 'PHONE_AREA_CODE_S6';
10455
10456 IF NOT Contains(l_columns, l_curr) THEN
10457
10458 l_missing_cols := l_missing_cols || ' ' || l_curr;
10459
10460 END IF;
10461
10462 l_curr := 'PHONE_NUMBER_S6';
10463
10464 IF NOT Contains(l_columns, l_curr) THEN
10465
10466 l_missing_cols := l_missing_cols || ' ' || l_curr;
10467
10468 END IF;
10469
10470 l_curr := 'RAW_PHONE_NUMBER_S6';
10471
10472 IF NOT Contains(l_columns, l_curr) THEN
10473
10474 l_missing_cols := l_missing_cols || ' ' || l_curr;
10475
10476 END IF;
10477
10478 l_curr := 'REASON_CODE_S6';
10479
10480 IF NOT Contains(l_columns, l_curr) THEN
10481
10482 l_missing_cols := l_missing_cols || ' ' || l_curr;
10483
10484 END IF;
10485
10486 l_curr := 'PHONE_LINE_TYPE_S6';
10487
10488 IF NOT Contains(l_columns, l_curr) THEN
10489
10490 l_missing_cols := l_missing_cols || ' ' || l_curr;
10491
10492 END IF;
10493
10494
10495
10496 IF l_missing_cols IS NOT NULL THEN
10497
10498 l_view_ok := FALSE;
10499
10500
10501
10502 FND_MESSAGE.SET_NAME( 'IEC'
10503
10504 , 'IEC_VAL_STV_MISSING_COLUMNS');
10505
10506 FND_MESSAGE.SET_TOKEN( 'SOURCE_TYPE_CODE'
10507
10508 , NVL(p_source_type_code, 'UNKNOWN')
10509
10510 , TRUE);
10511
10512 FND_MESSAGE.SET_TOKEN( 'MISSING_COLUMNS'
10513
10514 , NVL(l_missing_cols, 'UNKNOWN')
10515
10516 , TRUE);
10517
10518
10519
10520 -- References FND_MESSAGE object initialized above
10521
10522 Set_ValidationHistoryDetails('FAILED_VALIDATION', 'VERIFY_SOURCETYPECOLUMNS', 'MAIN', NULL);
10523
10524
10525
10526 END IF;
10527
10528
10529
10530 RETURN l_view_ok;
10531
10532
10533
10534 END Verify_SourceTypeColumns;
10535
10536 */
10537
10538 FUNCTION Verify_EntrySourceTypes
10539
10540 ( p_list_id IN NUMBER
10541
10542 )
10543
10544 RETURN BOOLEAN
10545
10546 IS
10547
10548 l_entries_ok BOOLEAN := TRUE;
10549
10550 l_str VARCHAR2(4000);
10551
10552 l_found_list_source_type BOOLEAN := FALSE;
10553
10554 l_source_type_col SYSTEM.varchar_tbl_type;
10555
10556 l_source_type_count_col SYSTEM.number_tbl_type;
10557
10558 l_list_source_type VARCHAR2(32);
10559
10560 BEGIN
10561
10562
10563
10564 SELECT LIST_ENTRY_SOURCE_SYSTEM_TYPE, COUNT(*)
10565
10566 BULK COLLECT INTO l_source_type_col, l_source_type_count_col
10567
10568 FROM AMS_LIST_ENTRIES
10569
10570 WHERE LIST_HEADER_ID = p_list_id
10571
10572 GROUP BY LIST_ENTRY_SOURCE_SYSTEM_TYPE;
10573
10574
10575
10576 SELECT LIST_SOURCE_TYPE
10577
10578 INTO l_list_source_type
10579
10580 FROM AMS_LIST_HEADERS_ALL
10581
10582 WHERE LIST_HEADER_ID = p_list_id;
10583
10584
10585
10586 IF l_source_type_col IS NOT NULL AND l_source_type_col.COUNT > 0 THEN
10587
10588 FOR i IN l_source_type_col.FIRST..l_source_type_col.LAST LOOP
10589
10590 IF l_source_type_col(i) = l_list_source_type THEN
10591
10592 l_found_list_source_type := TRUE;
10593
10594 IF l_source_type_col.COUNT = 1 THEN
10595
10596 EXIT; -- all entries belong to list source type
10597
10598 ELSE
10599
10600 -- some entries belong to other source types, so document count for error message
10601
10602 l_str := l_str || ' (' || l_source_type_col(i) || '=' || l_source_type_count_col(i) || ')';
10603
10604 END IF;
10605
10606 ELSE
10607
10608 -- document counts for other source types for error message
10609
10610 l_str := l_str || ' (' || l_source_type_col(i) || '=' || l_source_type_count_col(i) || ')';
10611
10612 END IF;
10613
10614 END LOOP;
10615
10616
10617
10618 IF NOT l_found_list_source_type THEN
10619
10620 l_entries_ok := FALSE;
10621
10622 Log_SourceTypeMismatchAll('Verify_EntrySourceTypes', 'MAIN', l_list_source_type, l_str);
10623
10624 ELSIF l_str IS NOT NULL THEN
10625
10626 l_entries_ok := TRUE;
10627
10628 Log_SourceTypeMismatchSome('Verify_EntrySourceTypes', 'MAIN', l_list_source_type, l_str);
10629
10630 END IF;
10631
10632
10633
10634 ELSE
10635
10636 -- no entries exist in the list for any source types
10637
10638 l_entries_ok := FALSE;
10639
10640 Log_NoEntriesFound('Verify_EntrySourceTypes', 'MAIN');
10641
10642
10643
10644 END IF;
10645
10646
10647
10648 RETURN l_entries_ok;
10649
10650
10651
10652 END Verify_EntrySourceTypes;
10653
10654
10655
10656 PROCEDURE Insert_ValidationHistoryRec
10657
10658 ( p_list_id IN NUMBER
10659
10660 )
10661
10662 IS
10663
10664 PRAGMA AUTONOMOUS_TRANSACTION;
10665
10666
10667
10668 l_user_id NUMBER;
10669
10670 l_login_id NUMBER;
10671
10672 BEGIN
10673
10674 l_user_id := nvl(FND_GLOBAL.user_id, -1);
10675
10676 l_login_id := nvl(FND_GLOBAL.conc_login_id, -1);
10677
10678 INSERT INTO IEC_O_VALIDATION_HISTORY
10679
10680 ( VALIDATION_HISTORY_ID
10681
10682 , LIST_HEADER_ID
10683
10684 , STATUS
10685
10686 , START_TIME
10687
10688 , END_TIME
10689
10690 , DESCRIPTION
10691
10692 , CREATED_BY
10693
10694 , CREATION_DATE
10695
10696 , LAST_UPDATED_BY
10697
10698 , LAST_UPDATE_DATE
10699
10700 , LAST_UPDATE_LOGIN
10701
10702 , OBJECT_VERSION_NUMBER
10703
10704 )
10705
10706 VALUES
10707
10708 ( IEC_O_VALIDATION_HISTORY_S.NEXTVAL
10709
10710 , p_list_id
10711
10712 , g_status
10713
10714 , g_start_time
10715
10716 , g_end_time
10717
10718 , g_encoded_message
10719
10720 , l_user_id
10721
10722 , SYSDATE
10723
10724 , l_user_id
10725
10726 , SYSDATE
10727
10728 , l_login_id
10729
10730 , 1
10731
10732 );
10733
10734
10735
10736 -- We can assume that FND_MESSAGE has been initialized b/c
10737
10738 -- Set_ValidationHistoryDetails creates a message if message
10739
10740 -- hasn't already been created
10741
10742 IF g_status = 'FAILED_VALIDATION' THEN
10743
10744 IEC_OCS_LOG_PVT.Log_Message(g_module);
10745
10746 END IF;
10747
10748
10749
10750 COMMIT;
10751
10752 EXCEPTION
10753
10754 WHEN OTHERS THEN
10755
10756 Log( 'Insert_ValidationHistoryRec'
10757
10758 , 'MAIN'
10759
10760 , SQLERRM);
10761
10762 END Insert_ValidationHistoryRec;
10763
10764
10765
10766 PROCEDURE Validate_List
10767
10768 ( p_list_id IN NUMBER
10769
10770 , x_return_code OUT NOCOPY VARCHAR2) -- OUT
10771
10772 IS
10773
10774
10775
10776 l_campaign_id NUMBER(15);
10777
10778 l_campaign_schedule_id NUMBER(15);
10779
10780 l_source_type_view VARCHAR2(32);
10781
10782 l_list_entry_csr ListEntryCsrType;
10783
10784
10785 l_record_invalid NUMBER := 0;
10786
10787 l_valid_count NUMBER := 0;
10788
10789 l_total_count NUMBER := 0;
10790
10791
10792
10793 BEGIN
10794
10795
10796
10797 x_return_code := FND_API.G_RET_STS_SUCCESS;
10798
10799
10800
10801 -- Setup logging information
10802
10803 Init_LoggingVariables;
10804
10805 Disable_FndLogging;
10806
10807 Set_MessagePrefix('validate_list_' || p_list_id);
10808
10809
10810
10811 Update_Status(p_list_id, 'VALIDATING');
10812
10813
10814
10815 Validate_List_Pre( p_list_id
10816
10817 , 'Y' -- enable use of validation rules
10818
10819 , l_campaign_id
10820
10821 , l_campaign_schedule_id
10822
10823 , l_source_type_view
10824
10825 );
10826
10827
10828
10829 -- Check to see if all entries are assigned to the list's source type
10830
10831 IF NOT Verify_EntrySourceTypes(p_list_id) THEN
10832
10833 RAISE fnd_api.g_exc_error;
10834
10835 END IF;
10836
10837
10838
10839 -- Validate records that have at least one invalid contact point that have not been
10840
10841 -- marked as do not use for some reason other than failed validation
10842
10843 -- also look for updated records
10844
10845 -- FIX: NULL is placeholder for contact point purpose when it is added to the source type views
10846
10847 BEGIN
10848
10849 OPEN l_list_entry_csr FOR
10850
10851 'SELECT A.LIST_ENTRY_ID, A.POSTAL_CODE, A.DO_NOT_USE_FLAG, A.DO_NOT_USE_REASON, A.NEWLY_UPDATED_FLAG, B.SUBSET_ID, B.ITM_CC_TZ_ID, B.CONTACT_POINT_INDEX,
10852
10853 A.CONTACT_POINT_ID_S1, A.TIME_ZONE_S1, A.PHONE_COUNTRY_CODE_S1, A.PHONE_AREA_CODE_S1, A.PHONE_NUMBER_S1, A.RAW_PHONE_NUMBER_S1, A.REASON_CODE_S1, A.PHONE_LINE_TYPE_S1, NULL,
10854
10855 A.CONTACT_POINT_ID_S2, A.TIME_ZONE_S2, A.PHONE_COUNTRY_CODE_S2, A.PHONE_AREA_CODE_S2, A.PHONE_NUMBER_S2, A.RAW_PHONE_NUMBER_S2, A.REASON_CODE_S2, A.PHONE_LINE_TYPE_S2, NULL,
10856
10857 A.CONTACT_POINT_ID_S3, A.TIME_ZONE_S3, A.PHONE_COUNTRY_CODE_S3, A.PHONE_AREA_CODE_S3, A.PHONE_NUMBER_S3, A.RAW_PHONE_NUMBER_S3, A.REASON_CODE_S3, A.PHONE_LINE_TYPE_S3, NULL,
10858
10859 A.CONTACT_POINT_ID_S4, A.TIME_ZONE_S4, A.PHONE_COUNTRY_CODE_S4, A.PHONE_AREA_CODE_S4, A.PHONE_NUMBER_S4, A.RAW_PHONE_NUMBER_S4, A.REASON_CODE_S4, A.PHONE_LINE_TYPE_S4, NULL,
10860
10861 A.CONTACT_POINT_ID_S5, A.TIME_ZONE_S5, A.PHONE_COUNTRY_CODE_S5, A.PHONE_AREA_CODE_S5, A.PHONE_NUMBER_S5, A.RAW_PHONE_NUMBER_S5, A.REASON_CODE_S5, A.PHONE_LINE_TYPE_S5, NULL,
10862
10863 A.CONTACT_POINT_ID_S6, A.TIME_ZONE_S6, A.PHONE_COUNTRY_CODE_S6, A.PHONE_AREA_CODE_S6, A.PHONE_NUMBER_S6, A.RAW_PHONE_NUMBER_S6, A.REASON_CODE_S6, A.PHONE_LINE_TYPE_S6, NULL
10864
10865 FROM ' || l_source_type_view || ' A, IEC_G_RETURN_ENTRIES B
10866
10867 WHERE A.LIST_HEADER_ID = B.LIST_HEADER_ID(+)
10868
10869 AND A.LIST_ENTRY_ID = B.LIST_ENTRY_ID(+)
10870
10871 AND A.LIST_HEADER_ID = :list_id
10872
10873 AND A.ENABLED_FLAG = ''Y''
10874
10875 AND (((
10876
10877 ((A.PHONE_NUMBER_S1 IS NOT NULL OR A.RAW_PHONE_NUMBER_S1 IS NOT NULL) AND A.REASON_CODE_S1 IS NULL)
10878
10879 OR
10880
10881 ((A.PHONE_NUMBER_S2 IS NOT NULL OR A.RAW_PHONE_NUMBER_S2 IS NOT NULL) AND A.REASON_CODE_S2 IS NULL)
10882
10883 OR
10884
10885 ((A.PHONE_NUMBER_S3 IS NOT NULL OR A.RAW_PHONE_NUMBER_S3 IS NOT NULL) AND A.REASON_CODE_S3 IS NULL)
10886
10887 OR
10888
10889 ((A.PHONE_NUMBER_S4 IS NOT NULL OR A.RAW_PHONE_NUMBER_S4 IS NOT NULL) AND A.REASON_CODE_S4 IS NULL)
10890
10891 OR
10892
10893 ((A.PHONE_NUMBER_S5 IS NOT NULL OR A.RAW_PHONE_NUMBER_S5 IS NOT NULL) AND A.REASON_CODE_S5 IS NULL)
10894
10895 OR
10896
10897 ((A.PHONE_NUMBER_S6 IS NOT NULL OR A.RAW_PHONE_NUMBER_S6 IS NOT NULL) AND A.REASON_CODE_S6 IS NULL)
10898
10899 )
10900
10901 AND (A.DO_NOT_USE_FLAG = ''N'' OR A.DO_NOT_USE_FLAG IS NULL OR A.DO_NOT_USE_REASON = 4)
10902
10903 )
10904
10905 OR A.NEWLY_UPDATED_FLAG = ''Y''
10906
10907 )'
10908
10909 USING p_list_id;
10910
10911 EXCEPTION
10912
10913 WHEN OTHERS THEN
10914
10915 IF SQLCODE = -904 THEN
10916
10917 Log_MissingSourceTypeColumns(p_list_id, l_source_type_view, Get_SourceType(p_list_id), 'VALIDATE_LIST', 'SELECT_ENTRIES_FOR_VALIDATION');
10918
10919 RAISE fnd_api.g_exc_error;
10920
10921 ELSE
10922
10923 RAISE;
10924
10925 END IF;
10926
10927 END;
10928
10929
10930
10931 Validate_List_Pvt( p_list_id
10932
10933 , l_campaign_schedule_id
10934
10935 , l_campaign_id
10936
10937 , l_source_type_view
10938
10939 , l_list_entry_csr
10940
10941 , 'Y' -- commit each batch
10942
10943 );
10944
10945
10946
10947 CLOSE l_list_entry_csr;
10948
10949
10950
10951 Remove_DeletedRecords(p_list_id, l_campaign_schedule_id);
10952
10953 COMMIT;
10954
10955
10956
10957 Validate_List_Post(p_list_id);
10958
10959
10960
10961 Update_Status(p_list_id, 'VALIDATED');
10962
10963 -- fix bug 4260294 by Jean Zhu
10964
10965 /* SELECT (RECORD_VALID_ALL_CPS + RECORD_VALID_SOME_CPS)
10966
10967 , (RECORD_VALID_ALL_CPS + RECORD_VALID_SOME_CPS + RECORD_INVALID)
10968
10969 INTO l_valid_count
10970
10971 , l_total_count
10972
10973 FROM IEC_G_REP_LIST_DETAILS_V
10974
10975 WHERE LIST_HEADER_ID = p_list_id; */
10976
10977 SELECT COUNT(*) RECORDS_INVALID
10978 into l_record_invalid
10979 FROM IEC_O_VALIDATION_REPORT_DETS
10980 WHERE ( DO_NOT_USE_REASON_S1 IS NOT NULL AND
10981 DO_NOT_USE_REASON_S2 IS NOT NULL AND
10982 DO_NOT_USE_REASON_S3 IS NOT NULL AND
10983 DO_NOT_USE_REASON_S4 IS NOT NULL AND
10984 DO_NOT_USE_REASON_S5 IS NOT NULL AND
10985 DO_NOT_USE_REASON_S6 IS NOT NULL ) AND
10986 LIST_HEADER_ID = p_list_id;
10987
10988 SELECT SUM(NVL(A.RECORD_LOADED, 0))
10989 into l_valid_count
10990 FROM IEC_G_REP_SUBSET_COUNTS A,
10991 IEC_G_LIST_SUBSETS D
10992 where A.SUBSET_ID = D.LIST_SUBSET_ID AND
10993 D.LIST_HEADER_ID = p_list_id AND D.STATUS_CODE <> 'DELETED';
10994
10995
10996 l_total_count := l_valid_count + l_record_invalid;
10997
10998 Log_ValidationSuccess('VALIDATE_LIST', 'MAIN', l_total_count, l_valid_count);
10999
11000 Insert_ValidationHistoryRec(p_list_id);
11001
11002
11003
11004 EXCEPTION
11005
11006 WHEN fnd_api.g_exc_error THEN
11007
11008 x_return_code := FND_API.G_RET_STS_ERROR;
11009
11010 ROLLBACK;
11011
11012 Validate_List_Post(p_list_id);
11013
11014 Update_Status(p_list_id, 'FAILED_VALIDATION');
11015
11016 Insert_ValidationHistoryRec(p_list_id);
11017
11018 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
11019
11020 WHEN fnd_api.g_exc_unexpected_error THEN
11021
11022 x_return_code := FND_API.G_RET_STS_ERROR;
11023
11024 ROLLBACK;
11025
11026 Validate_List_Post(p_list_id);
11027
11028 Update_Status(p_list_id, 'FAILED_VALIDATION');
11029
11030 Insert_ValidationHistoryRec(p_list_id);
11031
11032 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
11033
11034 WHEN OTHERS THEN
11035
11036 Log( 'Validate_List'
11037
11038 , 'MAIN'
11039
11040 , SQLERRM
11041
11042 );
11043
11044 x_return_code := FND_API.G_RET_STS_ERROR;
11045
11046 ROLLBACK;
11047
11048 Validate_List_Post(p_list_id);
11049
11050 Update_Status(p_list_id, 'FAILED_VALIDATION');
11051
11052 Insert_ValidationHistoryRec(p_list_id);
11053
11054 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
11055
11056 END Validate_List;
11057
11058
11059
11060 PROCEDURE Copy_AmsListEntries
11061
11062 ( p_from_list_entry_id_col IN SYSTEM.number_tbl_type
11063
11064 , p_from_list_id_col IN SYSTEM.number_tbl_type
11065
11066 , x_to_list_entry_id_col OUT NOCOPY SYSTEM.number_tbl_type -- OUT
11067
11068 , p_to_list_id IN NUMBER)
11069 IS
11070 l_api_version CONSTANT NUMBER := 1.0;
11071 l_init_msg_list VARCHAR2(1);
11072 l_return_status VARCHAR2(1);
11073 l_msg_count NUMBER;
11074 l_msg_data VARCHAR2(2000);
11075 l_listentry_rec AMS_LISTENTRY_PVT.entry_rec_type;
11076 BEGIN
11077 l_init_msg_list :=FND_API.G_TRUE;
11078
11079 x_to_list_entry_id_col := SYSTEM.number_tbl_type();
11080
11081 x_to_list_entry_id_col.EXTEND(p_from_list_entry_id_col.COUNT);
11082
11083 FOR i IN 1..x_to_list_entry_id_col.COUNT
11084
11085 LOOP
11086 SELECT SYSDATE, LAST_UPDATED_BY, SYSDATE, CREATED_BY, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER
11087
11088 , LIST_SELECT_ACTION_ID, ARC_LIST_SELECT_ACTION_FROM, LIST_SELECT_ACTION_FROM_NAME, SOURCE_CODE, ARC_LIST_USED_BY_SOURCE, SOURCE_CODE_FOR_ID
11089
11090 , PIN_CODE, LIST_ENTRY_SOURCE_SYSTEM_ID, LIST_ENTRY_SOURCE_SYSTEM_TYPE, VIEW_APPLICATION_ID, MANUALLY_ENTERED_FLAG
11091
11092 , MARKED_AS_DUPLICATE_FLAG, MARKED_AS_RANDOM_FLAG, PART_OF_CONTROL_GROUP_FLAG, EXCLUDE_IN_TRIGGERED_LIST_FLAG, ENABLED_FLAG, CELL_CODE, DEDUPE_KEY
11093
11094 , RANDOMLY_GENERATED_NUMBER, CAMPAIGN_ID, MEDIA_ID, CHANNEL_ID, CHANNEL_SCHEDULE_ID, EVENT_OFFER_ID, CUSTOMER_ID, MARKET_SEGMENT_ID
11095
11096 , PARTY_ID, PARENT_PARTY_ID, VENDOR_ID, TRANSFER_FLAG, TRANSFER_STATUS, LIST_SOURCE, DUPLICATE_MASTER_ENTRY_ID, MARKED_FLAG, LEAD_ID, LETTER_ID
11097
11098 , PICKING_HEADER_ID, BATCH_ID, SUFFIX, FIRST_NAME, LAST_NAME, CUSTOMER_NAME, TITLE, ADDRESS_LINE1, ADDRESS_LINE2, CITY, STATE, ZIPCODE, COUNTRY, FAX, PHONE, EMAIL_ADDRESS
11099
11100 , COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10, COL11, COL12, COL13, COL14, COL15, COL16, COL17, COL18
11101
11102 , COL19, COL20, COL21, COL22, COL23, COL24, COL25, COL26, COL27, COL28, COL29, COL30, COL31, COL32, COL33, COL34, COL35
11103
11104 , COL36, COL37, COL38, COL39, COL40, COL41, COL42, COL43, COL44, COL45, COL46, COL47, COL48, COL49, COL50, COL51, COL52
11105
11106 , COL53, COL54, COL55, COL56, COL57, COL58, COL59, COL60, COL61, COL62, COL63, COL64, COL65, COL66, COL67, COL68, COL69
11107
11108 , COL70, COL71, COL72, COL73, COL74, COL75, COL76, COL77, COL78, COL79, COL80, COL81, COL82, COL83, COL84, COL85, COL86
11109
11110 , COL87, COL88, COL89, COL90, COL91, COL92, COL93, COL94, COL95, COL96, COL97, COL98, COL99, COL100, COL101, COL102, COL103
11111
11112 , COL104, COL105, COL106, COL107, COL108, COL109, COL110, COL111, COL112, COL113, COL114, COL115, COL116, COL117, COL118, COL119
11113
11114 , COL120, COL121, COL122, COL123, COL124, COL125, COL126, COL127, COL128, COL129, COL130, COL131, COL132, COL133, COL134, COL135
11115
11116 , COL136, COL137, COL138, COL139, COL140, COL141, COL142, COL143, COL144, COL145, COL146, COL147, COL148, COL149, COL150, COL151
11117
11118 , COL152, COL153, COL154, COL155, COL156, COL157, COL158, COL159, COL160, COL161, COL162, COL163, COL164, COL165, COL166, COL167
11119
11120 , COL168, COL169, COL170, COL171, COL172, COL173, COL174, COL175, COL176, COL177, COL178, COL179, COL180, COL181, COL182, COL183
11121
11122 , COL184, COL185, COL186, COL187, COL188, COL189, COL190, COL191, COL192, COL193, COL194, COL195, COL196, COL197, COL198, COL199
11123
11124 , COL200, COL201, COL202, COL203, COL204, COL205, COL206, COL207, COL208, COL209, COL210, COL211, COL212, COL213, COL214, COL215
11125
11126 , COL216, COL217, COL218, COL219, COL220, COL221, COL222, COL223, COL224, COL225, COL226, COL227, COL228, COL229, COL230, COL231
11127
11128 , COL232, COL233, COL234, COL235, COL236, COL237, COL238, COL239, COL240, COL241, COL242, COL243, COL244, COL245, COL246, COL247
11129
11130 , COL248, COL249, COL250, IMP_SOURCE_LINE_ID, USAGE_RESTRICTION, COL251, COL252, COL253, COL254, COL255, COL256, COL257, COL258
11131
11132 , COL259, COL260, COL261, COL262, COL263, COL264, COL265, COL266, COL267, COL268, COL269, COL270, COL271, COL272, COL273, COL274
11133
11134 , COL275, COL276, COL277, COL278, COL279, COL280, COL281, COL282, COL283, COL284, COL285, COL286, COL287, COL288, COL289, COL290
11135
11136 , COL291, COL292, COL293, COL294, COL295, COL296, COL297, COL298, COL299, COL300 INTO
11137
11138 l_listentry_rec.LAST_UPDATE_DATE, l_listentry_rec.LAST_UPDATED_BY, l_listentry_rec.CREATION_DATE, l_listentry_rec.CREATED_BY, l_listentry_rec.LAST_UPDATE_LOGIN
11139
11140 , l_listentry_rec.OBJECT_VERSION_NUMBER, l_listentry_rec.LIST_SELECT_ACTION_ID, l_listentry_rec.ARC_LIST_SELECT_ACTION_FROM, l_listentry_rec.LIST_SELECT_ACTION_FROM_NAME
11141
11142 , l_listentry_rec.SOURCE_CODE, l_listentry_rec.ARC_LIST_USED_BY_SOURCE, l_listentry_rec.SOURCE_CODE_FOR_ID, l_listentry_rec.PIN_CODE
11143
11144 , l_listentry_rec.LIST_ENTRY_SOURCE_SYSTEM_ID, l_listentry_rec.LIST_ENTRY_SOURCE_SYSTEM_TYPE, l_listentry_rec.VIEW_APPLICATION_ID, l_listentry_rec.MANUALLY_ENTERED_FLAG
11145
11146 , l_listentry_rec.MARKED_AS_DUPLICATE_FLAG, l_listentry_rec.MARKED_AS_RANDOM_FLAG, l_listentry_rec.PART_OF_CONTROL_GROUP_FLAG,l_listentry_rec.EXCLUDE_IN_TRIGGERED_LIST_FLAG
11147
11148 , l_listentry_rec.ENABLED_FLAG, l_listentry_rec.CELL_CODE, l_listentry_rec.DEDUPE_KEY, l_listentry_rec.RANDOMLY_GENERATED_NUMBER, l_listentry_rec.CAMPAIGN_ID
11149
11150 , l_listentry_rec.MEDIA_ID, l_listentry_rec.CHANNEL_ID, l_listentry_rec.CHANNEL_SCHEDULE_ID, l_listentry_rec.EVENT_OFFER_ID, l_listentry_rec.CUSTOMER_ID
11151
11152 , l_listentry_rec.MARKET_SEGMENT_ID, l_listentry_rec.PARTY_ID, l_listentry_rec.PARENT_PARTY_ID, l_listentry_rec.VENDOR_ID, l_listentry_rec.TRANSFER_FLAG
11153
11154 , l_listentry_rec.TRANSFER_STATUS, l_listentry_rec.LIST_SOURCE, l_listentry_rec.DUPLICATE_MASTER_ENTRY_ID, l_listentry_rec.MARKED_FLAG, l_listentry_rec.LEAD_ID
11155
11156 , l_listentry_rec.LETTER_ID, l_listentry_rec.PICKING_HEADER_ID, l_listentry_rec.BATCH_ID, l_listentry_rec.SUFFIX, l_listentry_rec.FIRST_NAME, l_listentry_rec.LAST_NAME
11157
11158 , l_listentry_rec.CUSTOMER_NAME, l_listentry_rec.TITLE, l_listentry_rec.ADDRESS_LINE1, l_listentry_rec.ADDRESS_LINE2, l_listentry_rec.CITY, l_listentry_rec.STATE
11159
11160 , l_listentry_rec.ZIPCODE, l_listentry_rec.COUNTRY, l_listentry_rec.FAX, l_listentry_rec.PHONE, l_listentry_rec.EMAIL_ADDRESS
11161
11162 , l_listentry_rec.COL1, l_listentry_rec.COL2, l_listentry_rec.COL3, l_listentry_rec.COL4, l_listentry_rec.COL5, l_listentry_rec.COL6, l_listentry_rec.COL7
11163
11164 , l_listentry_rec.COL8,l_listentry_rec.COL9, l_listentry_rec.COL10, l_listentry_rec.COL11, l_listentry_rec.COL12, l_listentry_rec.COL13, l_listentry_rec.COL14
11165
11166 , l_listentry_rec.COL15, l_listentry_rec.COL16, l_listentry_rec.COL17, l_listentry_rec.COL18, l_listentry_rec.COL19, l_listentry_rec.COL20, l_listentry_rec.COL21
11167
11168 , l_listentry_rec.COL22, l_listentry_rec.COL23, l_listentry_rec.COL24, l_listentry_rec.COL25, l_listentry_rec.COL26, l_listentry_rec.COL27, l_listentry_rec.COL28
11169
11170 , l_listentry_rec.COL29, l_listentry_rec.COL30, l_listentry_rec.COL31, l_listentry_rec.COL32, l_listentry_rec.COL33, l_listentry_rec.COL34, l_listentry_rec.COL35
11171
11172 , l_listentry_rec.COL36, l_listentry_rec.COL37, l_listentry_rec.COL38, l_listentry_rec.COL39, l_listentry_rec.COL40, l_listentry_rec.COL41, l_listentry_rec.COL42
11173
11174 , l_listentry_rec.COL43, l_listentry_rec.COL44, l_listentry_rec.COL45, l_listentry_rec.COL46, l_listentry_rec.COL47, l_listentry_rec.COL48, l_listentry_rec.COL49
11175
11176 , l_listentry_rec.COL50, l_listentry_rec.COL51, l_listentry_rec.COL52, l_listentry_rec.COL53, l_listentry_rec.COL54, l_listentry_rec.COL55, l_listentry_rec.COL56
11177
11178 , l_listentry_rec.COL57, l_listentry_rec.COL58, l_listentry_rec.COL59, l_listentry_rec.COL60, l_listentry_rec.COL61, l_listentry_rec.COL62, l_listentry_rec.COL63
11179
11180 , l_listentry_rec.COL64, l_listentry_rec.COL65, l_listentry_rec.COL66, l_listentry_rec.COL67, l_listentry_rec.COL68, l_listentry_rec.COL69, l_listentry_rec.COL70
11181
11182 , l_listentry_rec.COL71, l_listentry_rec.COL72, l_listentry_rec.COL73, l_listentry_rec.COL74, l_listentry_rec.COL75, l_listentry_rec.COL76, l_listentry_rec.COL77
11183
11184 , l_listentry_rec.COL78, l_listentry_rec.COL79, l_listentry_rec.COL80, l_listentry_rec.COL81, l_listentry_rec.COL82, l_listentry_rec.COL83, l_listentry_rec.COL84
11185
11186 , l_listentry_rec.COL85, l_listentry_rec.COL86, l_listentry_rec.COL87, l_listentry_rec.COL88, l_listentry_rec.COL89, l_listentry_rec.COL90, l_listentry_rec.COL91
11187
11188 , l_listentry_rec.COL92, l_listentry_rec.COL93, l_listentry_rec.COL94, l_listentry_rec.COL95, l_listentry_rec.COL96, l_listentry_rec.COL97, l_listentry_rec.COL98
11189
11190 , l_listentry_rec.COL99, l_listentry_rec.COL100, l_listentry_rec.COL101, l_listentry_rec.COL102, l_listentry_rec.COL103, l_listentry_rec.COL104, l_listentry_rec.COL105
11191
11192 , l_listentry_rec.COL106, l_listentry_rec.COL107, l_listentry_rec.COL108, l_listentry_rec.COL109, l_listentry_rec.COL110, l_listentry_rec.COL111, l_listentry_rec.COL112
11193
11194 , l_listentry_rec.COL113, l_listentry_rec.COL114, l_listentry_rec.COL115, l_listentry_rec.COL116, l_listentry_rec.COL117, l_listentry_rec.COL118, l_listentry_rec.COL119
11195
11196 , l_listentry_rec.COL120, l_listentry_rec.COL121, l_listentry_rec.COL122, l_listentry_rec.COL123, l_listentry_rec.COL124, l_listentry_rec.COL125, l_listentry_rec.COL126
11197
11198 , l_listentry_rec.COL127, l_listentry_rec.COL128, l_listentry_rec.COL129, l_listentry_rec.COL130, l_listentry_rec.COL131, l_listentry_rec.COL132, l_listentry_rec.COL133
11199
11200 , l_listentry_rec.COL134, l_listentry_rec.COL135, l_listentry_rec.COL136, l_listentry_rec.COL137, l_listentry_rec.COL138, l_listentry_rec.COL139, l_listentry_rec.COL140
11201
11202 , l_listentry_rec.COL141, l_listentry_rec.COL142, l_listentry_rec.COL143, l_listentry_rec.COL144, l_listentry_rec.COL145, l_listentry_rec.COL146, l_listentry_rec.COL147
11203
11204 , l_listentry_rec.COL148, l_listentry_rec.COL149, l_listentry_rec.COL150, l_listentry_rec.COL151, l_listentry_rec.COL152, l_listentry_rec.COL153, l_listentry_rec.COL154
11205
11206 , l_listentry_rec.COL155, l_listentry_rec.COL156, l_listentry_rec.COL157, l_listentry_rec.COL158, l_listentry_rec.COL159, l_listentry_rec.COL160, l_listentry_rec.COL161
11207
11208 , l_listentry_rec.COL162, l_listentry_rec.COL163, l_listentry_rec.COL164, l_listentry_rec.COL165, l_listentry_rec.COL166, l_listentry_rec.COL167, l_listentry_rec.COL168
11209
11210 , l_listentry_rec.COL169, l_listentry_rec.COL170, l_listentry_rec.COL171, l_listentry_rec.COL172, l_listentry_rec.COL173, l_listentry_rec.COL174, l_listentry_rec.COL175
11211
11212 , l_listentry_rec.COL176, l_listentry_rec.COL177, l_listentry_rec.COL178, l_listentry_rec.COL179, l_listentry_rec.COL180, l_listentry_rec.COL181, l_listentry_rec.COL182
11213
11214 , l_listentry_rec.COL183, l_listentry_rec.COL184, l_listentry_rec.COL185, l_listentry_rec.COL186, l_listentry_rec.COL187, l_listentry_rec.COL188, l_listentry_rec.COL189
11215
11216 , l_listentry_rec.COL190, l_listentry_rec.COL191, l_listentry_rec.COL192, l_listentry_rec.COL193, l_listentry_rec.COL194, l_listentry_rec.COL195, l_listentry_rec.COL196
11217
11218 , l_listentry_rec.COL197, l_listentry_rec.COL198, l_listentry_rec.COL199, l_listentry_rec.COL200, l_listentry_rec.COL201, l_listentry_rec.COL202, l_listentry_rec.COL203
11219
11220 , l_listentry_rec.COL204, l_listentry_rec.COL205, l_listentry_rec.COL206, l_listentry_rec.COL207, l_listentry_rec.COL208, l_listentry_rec.COL209, l_listentry_rec.COL210
11221
11222 , l_listentry_rec.COL211, l_listentry_rec.COL212, l_listentry_rec.COL213, l_listentry_rec.COL214, l_listentry_rec.COL215, l_listentry_rec.COL216, l_listentry_rec.COL217
11223
11224 , l_listentry_rec.COL218, l_listentry_rec.COL219, l_listentry_rec.COL220, l_listentry_rec.COL221, l_listentry_rec.COL222, l_listentry_rec.COL223, l_listentry_rec.COL224
11225
11226 , l_listentry_rec.COL225, l_listentry_rec.COL226, l_listentry_rec.COL227, l_listentry_rec.COL228, l_listentry_rec.COL229, l_listentry_rec.COL230, l_listentry_rec.COL231
11227
11228 , l_listentry_rec.COL232, l_listentry_rec.COL233, l_listentry_rec.COL234, l_listentry_rec.COL235, l_listentry_rec.COL236, l_listentry_rec.COL237, l_listentry_rec.COL238
11229
11230 , l_listentry_rec.COL239, l_listentry_rec.COL240, l_listentry_rec.COL241, l_listentry_rec.COL242, l_listentry_rec.COL243, l_listentry_rec.COL244, l_listentry_rec.COL245
11231
11232 , l_listentry_rec.COL246, l_listentry_rec.COL247, l_listentry_rec.COL248, l_listentry_rec.COL249, l_listentry_rec.COL250, l_listentry_rec.IMP_SOURCE_LINE_ID
11233
11234 , l_listentry_rec.USAGE_RESTRICTION, l_listentry_rec.COL251, l_listentry_rec.COL252, l_listentry_rec.COL253, l_listentry_rec.COL254, l_listentry_rec.COL255, l_listentry_rec.COL256
11235
11236 , l_listentry_rec.COL257, l_listentry_rec.COL258, l_listentry_rec.COL259, l_listentry_rec.COL260, l_listentry_rec.COL261, l_listentry_rec.COL262, l_listentry_rec.COL263
11237
11238 , l_listentry_rec.COL264, l_listentry_rec.COL265, l_listentry_rec.COL266, l_listentry_rec.COL267, l_listentry_rec.COL268, l_listentry_rec.COL269, l_listentry_rec.COL270
11239
11240 , l_listentry_rec.COL271, l_listentry_rec.COL272, l_listentry_rec.COL273, l_listentry_rec.COL274, l_listentry_rec.COL275, l_listentry_rec.COL276, l_listentry_rec.COL277
11241
11242 , l_listentry_rec.COL278, l_listentry_rec.COL279, l_listentry_rec.COL280, l_listentry_rec.COL281, l_listentry_rec.COL282, l_listentry_rec.COL283, l_listentry_rec.COL284
11243
11244 , l_listentry_rec.COL285, l_listentry_rec.COL286, l_listentry_rec.COL287, l_listentry_rec.COL288, l_listentry_rec.COL289, l_listentry_rec.COL290, l_listentry_rec.COL291
11245
11246 , l_listentry_rec.COL292, l_listentry_rec.COL293, l_listentry_rec.COL294, l_listentry_rec.COL295, l_listentry_rec.COL296, l_listentry_rec.COL297, l_listentry_rec.COL298
11247
11248 , l_listentry_rec.COL299, l_listentry_rec.COL300
11249
11250 FROM AMS_LIST_ENTRIES
11251
11252 WHERE LIST_HEADER_ID = p_from_list_id_col(i) AND LIST_ENTRY_ID = p_from_list_entry_id_col(i);
11253
11254 l_listentry_rec.list_header_id := p_to_list_id;
11255
11256 AMS_LISTENTRY_PUB.create_listentry(
11257 p_api_version => l_api_version,
11258 p_init_msg_list => l_init_msg_list,
11259 x_return_status => l_return_status,
11260 x_msg_count => l_msg_count,
11261 x_msg_data => l_msg_data,
11262 p_entry_rec => l_listentry_rec,
11263 x_entry_id => x_to_list_entry_id_col(i) );
11264
11265 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11266 Log_msg('AMS_LISTENTRY_PUB.create_listentry', l_msg_data);
11267 END IF;
11268 END LOOP;
11269 /*
11270 FOR i IN 1..x_to_list_entry_id_col.COUNT
11271
11272 LOOP
11273
11274 EXECUTE IMMEDIATE
11275
11276 'SELECT AMS_LIST_ENTRIES_S.NEXTVAL FROM DUAL'
11277
11278 INTO x_to_list_entry_id_col(i);
11279
11280 END LOOP;
11281
11282
11283
11284 EXECUTE IMMEDIATE
11285
11286 'BEGIN
11287
11288 FORALL i IN :first .. :last
11289
11290 INSERT INTO AMS_LIST_ENTRIES
11291
11292 ( LIST_ENTRY_ID, LIST_HEADER_ID, LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER
11293
11294 , LIST_SELECT_ACTION_ID, ARC_LIST_SELECT_ACTION_FROM, LIST_SELECT_ACTION_FROM_NAME, SOURCE_CODE, ARC_LIST_USED_BY_SOURCE, SOURCE_CODE_FOR_ID
11295
11296 , PIN_CODE, LIST_ENTRY_SOURCE_SYSTEM_ID, LIST_ENTRY_SOURCE_SYSTEM_TYPE, VIEW_APPLICATION_ID, MANUALLY_ENTERED_FLAG
11297
11298 , MARKED_AS_DUPLICATE_FLAG, MARKED_AS_RANDOM_FLAG, PART_OF_CONTROL_GROUP_FLAG, EXCLUDE_IN_TRIGGERED_LIST_FLAG, ENABLED_FLAG, CELL_CODE, DEDUPE_KEY
11299
11300 , RANDOMLY_GENERATED_NUMBER, CAMPAIGN_ID, MEDIA_ID, CHANNEL_ID, CHANNEL_SCHEDULE_ID, EVENT_OFFER_ID, CUSTOMER_ID, MARKET_SEGMENT_ID
11301
11302 , PARTY_ID, PARENT_PARTY_ID, VENDOR_ID, TRANSFER_FLAG, TRANSFER_STATUS, LIST_SOURCE, DUPLICATE_MASTER_ENTRY_ID, MARKED_FLAG, LEAD_ID, LETTER_ID
11303
11304 , PICKING_HEADER_ID, BATCH_ID, SUFFIX, FIRST_NAME, LAST_NAME, CUSTOMER_NAME, TITLE, ADDRESS_LINE1, ADDRESS_LINE2, CITY, STATE, ZIPCODE, COUNTRY, FAX, PHONE, EMAIL_ADDRESS
11305
11306 , COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10, COL11, COL12, COL13, COL14, COL15, COL16, COL17, COL18
11307
11308 , COL19, COL20, COL21, COL22, COL23, COL24, COL25, COL26, COL27, COL28, COL29, COL30, COL31, COL32, COL33, COL34, COL35
11309
11310 , COL36, COL37, COL38, COL39, COL40, COL41, COL42, COL43, COL44, COL45, COL46, COL47, COL48, COL49, COL50, COL51, COL52
11311
11312 , COL53, COL54, COL55, COL56, COL57, COL58, COL59, COL60, COL61, COL62, COL63, COL64, COL65, COL66, COL67, COL68, COL69
11313
11314 , COL70, COL71, COL72, COL73, COL74, COL75, COL76, COL77, COL78, COL79, COL80, COL81, COL82, COL83, COL84, COL85, COL86
11315
11316 , COL87, COL88, COL89, COL90, COL91, COL92, COL93, COL94, COL95, COL96, COL97, COL98, COL99, COL100, COL101, COL102, COL103
11317
11318 , COL104, COL105, COL106, COL107, COL108, COL109, COL110, COL111, COL112, COL113, COL114, COL115, COL116, COL117, COL118, COL119
11319
11320 , COL120, COL121, COL122, COL123, COL124, COL125, COL126, COL127, COL128, COL129, COL130, COL131, COL132, COL133, COL134, COL135
11321
11322 , COL136, COL137, COL138, COL139, COL140, COL141, COL142, COL143, COL144, COL145, COL146, COL147, COL148, COL149, COL150, COL151
11323
11324 , COL152, COL153, COL154, COL155, COL156, COL157, COL158, COL159, COL160, COL161, COL162, COL163, COL164, COL165, COL166, COL167
11325
11326 , COL168, COL169, COL170, COL171, COL172, COL173, COL174, COL175, COL176, COL177, COL178, COL179, COL180, COL181, COL182, COL183
11327
11328 , COL184, COL185, COL186, COL187, COL188, COL189, COL190, COL191, COL192, COL193, COL194, COL195, COL196, COL197, COL198, COL199
11329
11330 , COL200, COL201, COL202, COL203, COL204, COL205, COL206, COL207, COL208, COL209, COL210, COL211, COL212, COL213, COL214, COL215
11331
11332 , COL216, COL217, COL218, COL219, COL220, COL221, COL222, COL223, COL224, COL225, COL226, COL227, COL228, COL229, COL230, COL231
11333
11334 , COL232, COL233, COL234, COL235, COL236, COL237, COL238, COL239, COL240, COL241, COL242, COL243, COL244, COL245, COL246, COL247
11335
11336 , COL248, COL249, COL250, IMP_SOURCE_LINE_ID, USAGE_RESTRICTION, COL251, COL252, COL253, COL254, COL255, COL256, COL257, COL258
11337
11338 , COL259, COL260, COL261, COL262, COL263, COL264, COL265, COL266, COL267, COL268, COL269, COL270, COL271, COL272, COL273, COL274
11339
11340 , COL275, COL276, COL277, COL278, COL279, COL280, COL281, COL282, COL283, COL284, COL285, COL286, COL287, COL288, COL289, COL290
11341
11342 , COL291, COL292, COL293, COL294, COL295, COL296, COL297, COL298, COL299, COL300
11343
11344 )
11345
11346 (SELECT
11347
11348 :new_list_entry_id(i), :to_list_id, SYSDATE, LAST_UPDATED_BY, SYSDATE, CREATED_BY, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER
11349
11350 , LIST_SELECT_ACTION_ID, ARC_LIST_SELECT_ACTION_FROM, LIST_SELECT_ACTION_FROM_NAME, SOURCE_CODE, ARC_LIST_USED_BY_SOURCE, SOURCE_CODE_FOR_ID
11351
11352 , PIN_CODE, LIST_ENTRY_SOURCE_SYSTEM_ID, LIST_ENTRY_SOURCE_SYSTEM_TYPE, VIEW_APPLICATION_ID, MANUALLY_ENTERED_FLAG
11353
11354 , MARKED_AS_DUPLICATE_FLAG, MARKED_AS_RANDOM_FLAG, PART_OF_CONTROL_GROUP_FLAG, EXCLUDE_IN_TRIGGERED_LIST_FLAG, ENABLED_FLAG, CELL_CODE, DEDUPE_KEY
11355
11356 , RANDOMLY_GENERATED_NUMBER, CAMPAIGN_ID, MEDIA_ID, CHANNEL_ID, CHANNEL_SCHEDULE_ID, EVENT_OFFER_ID, CUSTOMER_ID, MARKET_SEGMENT_ID
11357
11358 , PARTY_ID, PARENT_PARTY_ID, VENDOR_ID, TRANSFER_FLAG, TRANSFER_STATUS, LIST_SOURCE, DUPLICATE_MASTER_ENTRY_ID, MARKED_FLAG, LEAD_ID, LETTER_ID
11359
11360 , PICKING_HEADER_ID, BATCH_ID, SUFFIX, FIRST_NAME, LAST_NAME, CUSTOMER_NAME, TITLE, ADDRESS_LINE1, ADDRESS_LINE2, CITY, STATE, ZIPCODE, COUNTRY, FAX, PHONE, EMAIL_ADDRESS
11361
11362 , COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10, COL11, COL12, COL13, COL14, COL15, COL16, COL17, COL18
11363
11364 , COL19, COL20, COL21, COL22, COL23, COL24, COL25, COL26, COL27, COL28, COL29, COL30, COL31, COL32, COL33, COL34, COL35
11365
11366 , COL36, COL37, COL38, COL39, COL40, COL41, COL42, COL43, COL44, COL45, COL46, COL47, COL48, COL49, COL50, COL51, COL52
11367
11368 , COL53, COL54, COL55, COL56, COL57, COL58, COL59, COL60, COL61, COL62, COL63, COL64, COL65, COL66, COL67, COL68, COL69
11369
11370 , COL70, COL71, COL72, COL73, COL74, COL75, COL76, COL77, COL78, COL79, COL80, COL81, COL82, COL83, COL84, COL85, COL86
11371
11372 , COL87, COL88, COL89, COL90, COL91, COL92, COL93, COL94, COL95, COL96, COL97, COL98, COL99, COL100, COL101, COL102, COL103
11373
11374 , COL104, COL105, COL106, COL107, COL108, COL109, COL110, COL111, COL112, COL113, COL114, COL115, COL116, COL117, COL118, COL119
11375
11376 , COL120, COL121, COL122, COL123, COL124, COL125, COL126, COL127, COL128, COL129, COL130, COL131, COL132, COL133, COL134, COL135
11377
11378 , COL136, COL137, COL138, COL139, COL140, COL141, COL142, COL143, COL144, COL145, COL146, COL147, COL148, COL149, COL150, COL151
11379
11380 , COL152, COL153, COL154, COL155, COL156, COL157, COL158, COL159, COL160, COL161, COL162, COL163, COL164, COL165, COL166, COL167
11381
11382 , COL168, COL169, COL170, COL171, COL172, COL173, COL174, COL175, COL176, COL177, COL178, COL179, COL180, COL181, COL182, COL183
11383
11384 , COL184, COL185, COL186, COL187, COL188, COL189, COL190, COL191, COL192, COL193, COL194, COL195, COL196, COL197, COL198, COL199
11385
11386 , COL200, COL201, COL202, COL203, COL204, COL205, COL206, COL207, COL208, COL209, COL210, COL211, COL212, COL213, COL214, COL215
11387
11388 , COL216, COL217, COL218, COL219, COL220, COL221, COL222, COL223, COL224, COL225, COL226, COL227, COL228, COL229, COL230, COL231
11389
11390 , COL232, COL233, COL234, COL235, COL236, COL237, COL238, COL239, COL240, COL241, COL242, COL243, COL244, COL245, COL246, COL247
11391
11392 , COL248, COL249, COL250, IMP_SOURCE_LINE_ID, USAGE_RESTRICTION, COL251, COL252, COL253, COL254, COL255, COL256, COL257, COL258
11393
11394 , COL259, COL260, COL261, COL262, COL263, COL264, COL265, COL266, COL267, COL268, COL269, COL270, COL271, COL272, COL273, COL274
11395
11396 , COL275, COL276, COL277, COL278, COL279, COL280, COL281, COL282, COL283, COL284, COL285, COL286, COL287, COL288, COL289, COL290
11397
11398 , COL291, COL292, COL293, COL294, COL295, COL296, COL297, COL298, COL299, COL300
11399
11400 FROM AMS_LIST_ENTRIES
11401
11402 WHERE LIST_HEADER_ID = :list_id_col(i) AND LIST_ENTRY_ID = :list_entry_id_col(i));
11403
11404 END;'
11405
11406 USING IN p_from_list_entry_id_col.FIRST
11407
11408 , IN p_from_list_entry_id_col.LAST
11409
11410 , IN x_to_list_entry_id_col
11411
11412 , IN p_to_list_id
11413
11414 , IN p_from_list_id_col
11415
11416 , IN p_from_list_entry_id_col;
11417
11418 */
11419
11420 Update_AmsListHeaderCounts( p_to_list_id
11421
11422 , x_to_list_entry_id_col.COUNT
11423
11424 , x_to_list_entry_id_col.COUNT
11425
11426 );
11427
11428 EXCEPTION
11429
11430 WHEN OTHERS THEN
11431
11432 x_to_list_entry_id_col := NULL;
11433
11434 Log( 'Copy_AmsListEntries'
11435
11436 , 'MAIN'
11437
11438 , SQLERRM
11439
11440 );
11441
11442 RAISE fnd_api.g_exc_unexpected_error;
11443
11444
11445
11446 END Copy_AmsListEntries;
11447
11448
11449
11450
11451
11452 PROCEDURE Mark_EntriesDoNotUse
11453
11454 ( p_returns_id_col IN SYSTEM.number_tbl_type
11455
11456 , x_returns_id_col OUT NOCOPY SYSTEM.number_tbl_type
11457
11458 , x_list_entry_id_col OUT NOCOPY SYSTEM.number_tbl_type
11459
11460 , x_list_id_col OUT NOCOPY SYSTEM.number_tbl_type
11461
11462 )
11463
11464 IS
11465
11466 l_callable_zone_id_col SYSTEM.number_tbl_type;
11467
11468 l_do_not_use_col SYSTEM.varchar_tbl_type;
11469
11470 l_decr_count_col SYSTEM.number_tbl_type;
11471
11472 BEGIN
11473
11474
11475
11476 x_returns_id_col := SYSTEM.number_tbl_type();
11477
11478 x_list_entry_id_col := SYSTEM.number_tbl_type();
11479
11480 x_list_id_col := SYSTEM.number_tbl_type();
11481
11482 l_callable_zone_id_col := SYSTEM.number_tbl_type();
11483
11484 l_do_not_use_col := SYSTEM.varchar_tbl_type();
11485
11486 l_decr_count_col := SYSTEM.number_tbl_type();
11487
11488
11489
11490 -- Get all records that need to be marked as dnu
11491
11492 -- Need to do this prior to updating them as dnu so that we
11493
11494 -- can retrieve the previous dnu status - don't want to decrement
11495
11496 -- callable zone counts if was already marked as dnu
11497
11498 EXECUTE IMMEDIATE
11499
11500 'BEGIN
11501
11502 SELECT RETURNS_ID, LIST_ENTRY_ID, LIST_HEADER_ID, ITM_CC_TZ_ID, DO_NOT_USE_FLAG
11503
11504 BULK COLLECT INTO :returns_id_col, :list_entry_id_col, :list_id_col, :callable_zone_id_col, :do_not_use_col
11505
11506 FROM IEC_G_RETURN_ENTRIES
11507
11508 WHERE RETURNS_ID IN (SELECT * FROM TABLE(CAST(:p_returns_id_col AS SYSTEM.NUMBER_TBL_TYPE)));
11509
11510 END;'
11511
11512 USING OUT x_returns_id_col
11513
11514 , OUT x_list_entry_id_col
11515
11516 , OUT x_list_id_col
11517
11518 , OUT l_callable_zone_id_col
11519
11520 , OUT l_do_not_use_col
11521
11522 , IN p_returns_id_col;
11523
11524
11525
11526 IF x_returns_id_col IS NOT NULL AND x_returns_id_col.COUNT > 0 THEN
11527
11528
11529
11530 EXECUTE IMMEDIATE
11531
11532 'BEGIN
11533
11534 FORALL i IN :first .. :last
11535
11536 UPDATE IEC_G_RETURN_ENTRIES A
11537
11538 SET A.DO_NOT_USE_FLAG = ''Y''
11539
11540 , A.DO_NOT_USE_REASON = 5
11541
11542 WHERE A.RETURNS_ID = :returns_id(i);
11543
11544 END;'
11545
11546 USING IN x_returns_id_col.FIRST
11547
11548 , IN x_returns_id_col.LAST
11549
11550 , IN x_returns_id_col;
11551
11552
11553
11554 FOR i IN 1..l_do_not_use_col.LAST LOOP
11555
11556 l_decr_count_col.EXTEND;
11557
11558 IF l_do_not_use_col(i) = 'N' THEN
11559
11560 l_decr_count_col(i) := -1;
11561
11562 ELSE
11563
11564 l_decr_count_col(i) := 0;
11565
11566 END IF;
11567
11568 END LOOP;
11569
11570
11571
11572 Incr_CallableZoneCounts( l_callable_zone_id_col
11573
11574 , l_decr_count_col);
11575
11576
11577
11578 END IF;
11579
11580
11581
11582 END Mark_EntriesDoNotUse;
11583
11584
11585
11586 PROCEDURE Mark_EntriesDoNotUse
11587
11588 ( p_returns_id_col IN SYSTEM.number_tbl_type
11589
11590 , p_to_list_id IN NUMBER
11591
11592 , x_returns_id_col OUT NOCOPY SYSTEM.number_tbl_type -- OUT
11593
11594 , x_list_entry_id_col OUT NOCOPY SYSTEM.number_tbl_type -- OUT
11595
11596 , x_list_id_col OUT NOCOPY SYSTEM.number_tbl_type) -- OUT
11597
11598 IS
11599
11600 l_temp_returns_id_col SYSTEM.number_tbl_type;
11601
11602 BEGIN
11603
11604
11605
11606 -- Get all records that need to be marked as dnu
11607
11608 -- Excludes for all duplicate party ids
11609
11610 EXECUTE IMMEDIATE
11611
11612 'BEGIN
11613
11614 SELECT A.RETURNS_ID
11615
11616 BULK COLLECT INTO :returns_id_col
11617
11618 FROM IEC_G_RETURN_ENTRIES A
11619
11620 WHERE A.RETURNS_ID IN (SELECT * FROM TABLE(CAST(:p_returns_id_col AS SYSTEM.NUMBER_TBL_TYPE)))
11621
11622 AND A.LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID
11623
11624 FROM AMS_LIST_ENTRIES
11625
11626 WHERE A.LIST_HEADER_ID = LIST_HEADER_ID
11627
11628 AND A.LIST_ENTRY_ID = LIST_ENTRY_ID
11629
11630 AND PARTY_ID NOT IN (SELECT PARTY_ID FROM AMS_LIST_ENTRIES WHERE LIST_HEADER_ID = :to_list_id));
11631
11632 END;'
11633
11634 USING OUT l_temp_returns_id_col
11635
11636 , IN p_returns_id_col
11637
11638 , IN p_to_list_id;
11639
11640
11641
11642 IF l_temp_returns_id_col IS NOT NULL AND l_temp_returns_id_col.COUNT > 0 THEN
11643
11644 Mark_EntriesDoNotUse
11645
11646 ( l_temp_returns_id_col
11647
11648 , x_returns_id_col
11649
11650 , x_list_entry_id_col
11651
11652 , x_list_id_col
11653
11654 );
11655
11656 END IF;
11657
11658
11659
11660 EXCEPTION
11661
11662 WHEN OTHERS THEN
11663
11664 Log( 'Mark_EntriesDoNotUse'
11665
11666 , 'MAIN'
11667
11668 , SQLERRM
11669
11670 );
11671
11672 RAISE fnd_api.g_exc_unexpected_error;
11673
11674
11675
11676 END Mark_EntriesDoNotUse;
11677
11678
11679
11680 PROCEDURE Move_CallHistory
11681
11682 ( p_from_returns_id_col IN SYSTEM.number_tbl_type
11683
11684 , p_to_list_entry_id_col IN SYSTEM.number_tbl_type
11685
11686 , p_to_list_id IN NUMBER)
11687
11688 IS
11689
11690
11691
11692 l_new_returns_id_col SYSTEM.number_tbl_type := SYSTEM.number_tbl_type();
11693
11694
11695
11696 l_cp_index_col SYSTEM.number_tbl_type := SYSTEM.number_tbl_type();
11697
11698 l_cp_postfix_col SYSTEM.varchar_tbl_type := SYSTEM.varchar_tbl_type();
11699
11700 l_callback_flag_col SYSTEM.varchar_tbl_type := SYSTEM.varchar_tbl_type();
11701
11702 l_next_call_time_col SYSTEM.date_tbl_type := SYSTEM.date_tbl_type();
11703
11704
11705
11706 BEGIN
11707
11708
11709
11710 l_cp_index_col.EXTEND(p_from_returns_id_col.COUNT);
11711
11712 l_cp_postfix_col.EXTEND(p_from_returns_id_col.COUNT);
11713
11714 l_callback_flag_col.EXTEND(p_from_returns_id_col.COUNT);
11715
11716 l_next_call_time_col.EXTEND(p_from_returns_id_col.COUNT);
11717
11718
11719
11720 IF p_from_returns_id_col IS NOT NULL AND p_from_returns_id_col.COUNT > 0 THEN
11721
11722
11723
11724 FOR i IN 1..p_from_returns_id_col.COUNT
11725
11726 LOOP
11727
11728 EXECUTE IMMEDIATE
11729
11730 'SELECT CALLBACK_FLAG
11731
11732 , NEXT_CALL_TIME
11733
11734 , CONTACT_POINT_INDEX
11735
11736 , DECODE(CONTACT_POINT_INDEX, 1, ''_S1''
11737
11738 , 2, ''_S2''
11739
11740 , 3, ''_S3''
11741
11742 , 4, ''_S4''
11743
11744 , 5, ''_S5''
11745
11746 , 6, ''_S6''
11747
11748 , ''_S1'')
11749
11750 FROM IEC_G_RETURN_ENTRIES
11751
11752 WHERE RETURNS_ID = :returns_id'
11753
11754 INTO l_callback_flag_col(i)
11755
11756 , l_next_call_time_col(i)
11757
11758 , l_cp_index_col(i)
11759
11760 , l_cp_postfix_col(i)
11761
11762 USING p_from_returns_id_col(i);
11763
11764 END LOOP;
11765
11766
11767
11768 l_new_returns_id_col.EXTEND(p_to_list_entry_id_col.COUNT);
11769
11770 FOR i IN 1..p_to_list_entry_id_col.COUNT
11771
11772 LOOP
11773
11774 EXECUTE IMMEDIATE
11775
11776 'UPDATE IEC_G_RETURN_ENTRIES
11777
11778 SET CALLBACK_FLAG = :callback_flag
11779
11780 , NEXT_CALL_TIME = :next_call_time
11781
11782 , ( CONTACT_POINT_ID
11783
11784 , ITM_CC_TZ_ID
11785
11786 , CONTACT_POINT_INDEX
11787
11788 , COUNTRY_CODE
11789
11790 , AREA_CODE
11791
11792 , PHONE_NUMBER
11793
11794 , RAW_PHONE_NUMBER
11795
11796 , TIME_ZONE ) =
11797
11798 (SELECT CONTACT_POINT_ID' || l_cp_postfix_col(i) || '
11799
11800 , MKTG_ITEM_CC_TZS_ID' || l_cp_postfix_col(i) || '
11801
11802 , :cp_index
11803
11804 , PHONE_COUNTRY_CODE' || l_cp_postfix_col(i) || '
11805
11806 , PHONE_AREA_CODE' || l_cp_postfix_col(i) || '
11807
11808 , PHONE_NUMBER' || l_cp_postfix_col(i) || '
11809
11810 , RAW_PHONE_NUMBER' || l_cp_postfix_col(i) || '
11811
11812 , TIME_ZONE' || l_cp_postfix_col(i) || '
11813
11814 FROM IEC_VAL_ENTRY_CACHE
11815
11816 WHERE LIST_ENTRY_ID = :list_entry_id)
11817
11818 WHERE LIST_HEADER_ID = :to_list_id AND LIST_ENTRY_ID = :list_entry_id
11819
11820 RETURNING RETURNS_ID INTO :returns_id'
11821
11822 USING IN l_callback_flag_col(i)
11823
11824 , IN l_next_call_time_col(i)
11825
11826 , IN l_cp_index_col(i)
11827
11828 , IN p_to_list_entry_id_col(i)
11829
11830 , IN p_to_list_id
11831
11832 , IN p_to_list_entry_id_col(i)
11833
11834 , OUT l_new_returns_id_col(i);
11835
11836 END LOOP;
11837
11838
11839
11840 -- Delete call history on destination list
11841
11842 -- so that it can be replaced by call history
11843
11844 -- from source list
11845
11846 EXECUTE IMMEDIATE
11847
11848 'BEGIN
11849
11850 FORALL i IN :first .. :last
11851
11852 DELETE IEC_O_RCY_CALL_HISTORIES
11853
11854 WHERE RETURNS_ID = :new_returns_id(i);
11855
11856 END;'
11857
11858 USING IN l_new_returns_id_col.FIRST
11859
11860 , IN l_new_returns_id_col.LAST
11861
11862 , IN l_new_returns_id_col;
11863
11864
11865
11866 -- Move call history from source list to destination list
11867
11868 EXECUTE IMMEDIATE
11869
11870 'BEGIN
11871
11872 FORALL i IN :first .. :last
11873
11874 UPDATE IEC_O_RCY_CALL_HISTORIES
11875
11876 SET RETURNS_ID = :new_returns_id(i)
11877
11878 WHERE RETURNS_ID = :old_returns_id(i);
11879
11880 END;'
11881
11882 USING IN l_new_returns_id_col.FIRST
11883
11884 , IN l_new_returns_id_col.LAST
11885
11886 , IN l_new_returns_id_col
11887
11888 , IN p_from_returns_id_col;
11889
11890
11891
11892 END IF;
11893
11894
11895
11896 EXCEPTION
11897
11898 WHEN OTHERS THEN
11899
11900 Log( 'Move_CallHistory'
11901
11902 , 'MAIN'
11903
11904 , SQLERRM
11905
11906 );
11907
11908 RAISE fnd_api.g_exc_unexpected_error;
11909
11910
11911
11912 END Move_CallHistory;
11913
11914
11915
11916 -- Loads a collection of new/recycled entries into AO system
11917
11918 PROCEDURE Load_Entries_Pvt
11919
11920 ( p_list_entry_id_col IN SYSTEM.number_tbl_type
11921
11922 , p_list_id IN NUMBER
11923
11924 , p_enable_val_rules_flag IN VARCHAR2
11925
11926 )
11927
11928 IS
11929
11930 l_list_entry_csr ListEntryCsrType;
11931
11932
11933
11934 l_campaign_id NUMBER(15);
11935
11936 l_campaign_schedule_id NUMBER(15);
11937
11938 l_source_type_view VARCHAR2(32);
11939
11940
11941
11942 BEGIN
11943
11944
11945
11946 Validate_List_Pre( p_list_id
11947
11948 , p_enable_val_rules_flag
11949
11950 , l_campaign_id
11951
11952 , l_campaign_schedule_id
11953
11954 , l_source_type_view
11955
11956 );
11957
11958
11959
11960 -- FIX: NULL is placeholder for contact point purpose when it is added to the source type views
11961
11962 BEGIN
11963
11964 OPEN l_list_entry_csr FOR
11965
11966 'SELECT A.LIST_ENTRY_ID, A.POSTAL_CODE, A.DO_NOT_USE_FLAG, A.DO_NOT_USE_REASON, A.NEWLY_UPDATED_FLAG, B.SUBSET_ID, B.ITM_CC_TZ_ID, B.CONTACT_POINT_INDEX,
11967
11968 A.CONTACT_POINT_ID_S1, A.TIME_ZONE_S1, A.PHONE_COUNTRY_CODE_S1, A.PHONE_AREA_CODE_S1, A.PHONE_NUMBER_S1, A.RAW_PHONE_NUMBER_S1, A.REASON_CODE_S1, A.PHONE_LINE_TYPE_S1, NULL,
11969
11970 A.CONTACT_POINT_ID_S2, A.TIME_ZONE_S2, A.PHONE_COUNTRY_CODE_S2, A.PHONE_AREA_CODE_S2, A.PHONE_NUMBER_S2, A.RAW_PHONE_NUMBER_S2, A.REASON_CODE_S2, A.PHONE_LINE_TYPE_S2, NULL,
11971
11972 A.CONTACT_POINT_ID_S3, A.TIME_ZONE_S3, A.PHONE_COUNTRY_CODE_S3, A.PHONE_AREA_CODE_S3, A.PHONE_NUMBER_S3, A.RAW_PHONE_NUMBER_S3, A.REASON_CODE_S3, A.PHONE_LINE_TYPE_S3, NULL,
11973
11974 A.CONTACT_POINT_ID_S4, A.TIME_ZONE_S4, A.PHONE_COUNTRY_CODE_S4, A.PHONE_AREA_CODE_S4, A.PHONE_NUMBER_S4, A.RAW_PHONE_NUMBER_S4, A.REASON_CODE_S4, A.PHONE_LINE_TYPE_S4, NULL,
11975
11976 A.CONTACT_POINT_ID_S5, A.TIME_ZONE_S5, A.PHONE_COUNTRY_CODE_S5, A.PHONE_AREA_CODE_S5, A.PHONE_NUMBER_S5, A.RAW_PHONE_NUMBER_S5, A.REASON_CODE_S5, A.PHONE_LINE_TYPE_S5, NULL,
11977
11978 A.CONTACT_POINT_ID_S6, A.TIME_ZONE_S6, A.PHONE_COUNTRY_CODE_S6, A.PHONE_AREA_CODE_S6, A.PHONE_NUMBER_S6, A.RAW_PHONE_NUMBER_S6, A.REASON_CODE_S6, A.PHONE_LINE_TYPE_S6, NULL
11979
11980 FROM ' || l_source_type_view || ' A, IEC_G_RETURN_ENTRIES B
11981
11982 WHERE A.LIST_HEADER_ID = B.LIST_HEADER_ID(+)
11983
11984 AND A.LIST_ENTRY_ID = B.LIST_ENTRY_ID(+)
11985
11986 AND A.LIST_HEADER_ID = :list_id
11987
11988 AND A.LIST_ENTRY_ID IN (SELECT * FROM TABLE(CAST(:list_entry_id_col AS SYSTEM.NUMBER_TBL_TYPE)))'
11989 USING p_list_id, p_list_entry_id_col;
11990 EXCEPTION
11991 WHEN OTHERS THEN
11992 IF SQLCODE = -904 THEN
11993 Log_MissingSourceTypeColumns(p_list_id, l_source_type_view, Get_SourceType(p_list_id), 'LOAD_ENTRIES_PVT', 'SELECT_ENTRIES_FOR_LOAD');
11994 RAISE fnd_api.g_exc_error;
11995 ELSE
11996 RAISE;
11997 END IF;
11998 END;
11999
12000
12001
12002 Validate_List_Pvt( p_list_id
12003
12004 , l_campaign_schedule_id
12005
12006 , l_campaign_id
12007
12008 , l_source_type_view
12009
12010 , l_list_entry_csr
12011
12012 , 'N' -- do not commit each batch (handled by calling program)
12013
12014 );
12015
12016
12017
12018 CLOSE l_list_entry_csr;
12019
12020
12021
12022 Validate_List_Post(p_list_id);
12023
12024
12025
12026 EXCEPTION
12027
12028 WHEN fnd_api.g_exc_error THEN
12029
12030 RAISE;
12031
12032 WHEN OTHERS THEN
12033
12034 Log( 'Load_Entries_Pvt'
12035
12036 , 'MAIN'
12037
12038 , SQLERRM
12039
12040 );
12041
12042 RAISE fnd_api.g_exc_unexpected_error;
12043
12044
12045
12046 END Load_Entries_Pvt;
12047
12048
12049
12050 PROCEDURE Update_DuplicateEntries
12051
12052 ( p_from_list_id IN NUMBER
12053
12054 , p_to_list_id IN NUMBER
12055
12056 , p_mark_do_not_use IN BOOLEAN
12057
12058 , x_records_updated OUT NOCOPY NUMBER
12059
12060 )
12061
12062 IS
12063 l_to_list_entry_id_col SYSTEM.number_tbl_type := SYSTEM.number_tbl_type(0);
12064 l_from_returns_id_col SYSTEM.number_tbl_type;
12065 l_ignore1 SYSTEM.number_tbl_type;
12066 l_ignore2 SYSTEM.number_tbl_type;
12067 l_ignore3 SYSTEM.number_tbl_type;
12068 l_num NUMBER := 1;
12069
12070 Cursor c_listentryrec IS
12071 SELECT B.list_entry_id, B.list_header_id, A.LAST_UPDATE_DATE, A.LAST_UPDATED_BY, A.CREATION_DATE, A.CREATED_BY, A.LAST_UPDATE_LOGIN, A.OBJECT_VERSION_NUMBER
12072
12073 , A.LIST_SELECT_ACTION_ID, A.ARC_LIST_SELECT_ACTION_FROM, A.LIST_SELECT_ACTION_FROM_NAME, A.SOURCE_CODE, A.ARC_LIST_USED_BY_SOURCE, A.SOURCE_CODE_FOR_ID
12074
12075 , A.PIN_CODE, A.LIST_ENTRY_SOURCE_SYSTEM_ID, A.LIST_ENTRY_SOURCE_SYSTEM_TYPE, A.VIEW_APPLICATION_ID, A.MANUALLY_ENTERED_FLAG
12076
12077 , A.MARKED_AS_DUPLICATE_FLAG, A.MARKED_AS_RANDOM_FLAG, A.PART_OF_CONTROL_GROUP_FLAG, A.EXCLUDE_IN_TRIGGERED_LIST_FLAG, A.ENABLED_FLAG, A.CELL_CODE, A.DEDUPE_KEY
12078
12079 , A.RANDOMLY_GENERATED_NUMBER, A.CAMPAIGN_ID, A.MEDIA_ID, A.CHANNEL_ID, A.CHANNEL_SCHEDULE_ID, A.EVENT_OFFER_ID, A.CUSTOMER_ID, A.MARKET_SEGMENT_ID
12080
12081 , A.PARTY_ID, A.PARENT_PARTY_ID, A.VENDOR_ID, A.TRANSFER_FLAG, A.TRANSFER_STATUS, A.LIST_SOURCE, A.DUPLICATE_MASTER_ENTRY_ID, A.MARKED_FLAG, A.LEAD_ID, A.LETTER_ID
12082
12083 , A.PICKING_HEADER_ID, A.BATCH_ID, A.SUFFIX, A.FIRST_NAME, A.LAST_NAME, A.CUSTOMER_NAME, A.TITLE, A.ADDRESS_LINE1, A.ADDRESS_LINE2, A.CITY, A.STATE, A.ZIPCODE
12084
12085 , A.COUNTRY, A.FAX, A.PHONE, A.EMAIL_ADDRESS
12086
12087 , A.COL1, A.COL2, A.COL3, A.COL4, A.COL5, A.COL6, A.COL7, A.COL8, A.COL9, A.COL10, A.COL11, A.COL12, A.COL13, A.COL14, A.COL15, A.COL16, A.COL17, A.COL18
12088
12089 , A.COL19, A.COL20, A.COL21, A.COL22, A.COL23, A.COL24, A.COL25, A.COL26, A.COL27, A.COL28, A.COL29, A.COL30, A.COL31, A.COL32, A.COL33, A.COL34, A.COL35
12090
12091 , A.COL36, A.COL37, A.COL38, A.COL39, A.COL40, A.COL41, A.COL42, A.COL43, A.COL44, A.COL45, A.COL46, A.COL47, A.COL48, A.COL49, A.COL50, A.COL51, A.COL52
12092
12093 , A.COL53, A.COL54, A.COL55, A.COL56, A.COL57, A.COL58, A.COL59, A.COL60, A.COL61, A.COL62, A.COL63, A.COL64, A.COL65, A.COL66, A.COL67, A.COL68, A.COL69
12094
12095 , A.COL70, A.COL71, A.COL72, A.COL73, A.COL74, A.COL75, A.COL76, A.COL77, A.COL78, A.COL79, A.COL80, A.COL81, A.COL82, A.COL83, A.COL84, A.COL85, A.COL86
12096
12097 , A.COL87, A.COL88, A.COL89, A.COL90, A.COL91, A.COL92, A.COL93, A.COL94, A.COL95, A.COL96, A.COL97, A.COL98, A.COL99, A.COL100, A.COL101, A.COL102, A.COL103
12098
12099 , A.COL104, A.COL105, A.COL106, A.COL107, A.COL108, A.COL109, A.COL110, A.COL111, A.COL112, A.COL113, A.COL114, A.COL115, A.COL116, A.COL117, A.COL118, A.COL119
12100
12101 , A.COL120, A.COL121, A.COL122, A.COL123, A.COL124, A.COL125, A.COL126, A.COL127, A.COL128, A.COL129, A.COL130, A.COL131, A.COL132, A.COL133, A.COL134, A.COL135
12102
12103 , A.COL136, A.COL137, A.COL138, A.COL139, A.COL140, A.COL141, A.COL142, A.COL143, A.COL144, A.COL145, A.COL146, A.COL147, A.COL148, A.COL149, A.COL150, A.COL151
12104
12105 , A.COL152, A.COL153, A.COL154, A.COL155, A.COL156, A.COL157, A.COL158, A.COL159, A.COL160, A.COL161, A.COL162, A.COL163, A.COL164, A.COL165, A.COL166, A.COL167
12106
12107 , A.COL168, A.COL169, A.COL170, A.COL171, A.COL172, A.COL173, A.COL174, A.COL175, A.COL176, A.COL177, A.COL178, A.COL179, A.COL180, A.COL181, A.COL182, A.COL183
12108
12109 , A.COL184, A.COL185, A.COL186, A.COL187, A.COL188, A.COL189, A.COL190, A.COL191, A.COL192, A.COL193, A.COL194, A.COL195, A.COL196, A.COL197, A.COL198, A.COL199
12110
12111 , A.COL200, A.COL201, A.COL202, A.COL203, A.COL204, A.COL205, A.COL206, A.COL207, A.COL208, A.COL209, A.COL210, A.COL211, A.COL212, A.COL213, A.COL214, A.COL215
12112
12113 , A.COL216, A.COL217, A.COL218, A.COL219, A.COL220, A.COL221, A.COL222, A.COL223, A.COL224, A.COL225, A.COL226, A.COL227, A.COL228, A.COL229, A.COL230, A.COL231
12114
12115 , A.COL232, A.COL233, A.COL234, A.COL235, A.COL236, A.COL237, A.COL238, A.COL239, A.COL240, A.COL241, A.COL242, A.COL243, A.COL244, A.COL245, A.COL246, A.COL247
12116
12117 , A.COL248, A.COL249, A.COL250, A.IMP_SOURCE_LINE_ID, A.USAGE_RESTRICTION, A.COL251, A.COL252, A.COL253, A.COL254, A.COL255, A.COL256, A.COL257, A.COL258
12118
12119 , A.COL259, A.COL260, A.COL261, A.COL262, A.COL263, A.COL264, A.COL265, A.COL266, A.COL267, A.COL268, A.COL269, A.COL270, A.COL271, A.COL272, A.COL273, A.COL274
12120
12121 , A.COL275, A.COL276, A.COL277, A.COL278, A.COL279, A.COL280, A.COL281, A.COL282, A.COL283, A.COL284, A.COL285, A.COL286, A.COL287, A.COL288, A.COL289, A.COL290
12122
12123 , A.COL291, A.COL292, A.COL293, A.COL294, A.COL295, A.COL296, A.COL297, A.COL298, A.COL299, A.COL300, A.NEWLY_UPDATED_FLAG
12124
12125 FROM AMS_LIST_ENTRIES A, AMS_LIST_ENTRIES B
12126
12127 WHERE A.LIST_HEADER_ID = p_from_list_id AND B.LIST_HEADER_ID = p_to_list_id AND A.PARTY_ID = B.PARTY_ID AND A.ENABLED_FLAG = 'Y' AND B.ENABLED_FLAG = 'Y';
12128
12129 l_api_version CONSTANT NUMBER := 1.0;
12130 l_init_msg_list VARCHAR2(1);
12131 l_return_status VARCHAR2(1);
12132 l_msg_count NUMBER;
12133 l_msg_data VARCHAR2(2000);
12134 l_listentry_rec AMS_LISTENTRY_PVT.entry_rec_type;
12135 BEGIN
12136 l_init_msg_list :=FND_API.G_TRUE;
12137
12138 -- Update duplicate records in ams list entries
12139
12140 -- From Source List to Destination List
12141 FOR v_listentryrec IN c_listentryrec LOOP
12142 l_to_list_entry_id_col(l_num) := v_listentryrec.list_entry_id;
12143
12144 l_listentry_rec.list_entry_id := v_listentryrec.list_entry_id;
12145 l_listentry_rec.list_header_id := v_listentryrec.list_header_id;
12146 l_listentry_rec.last_update_date := v_listentryrec.last_update_date;
12147 l_listentry_rec.last_updated_by := v_listentryrec.last_updated_by;
12148 l_listentry_rec.creation_date := v_listentryrec.creation_date;
12149 l_listentry_rec.created_by := v_listentryrec.created_by;
12150 l_listentry_rec.last_update_login := v_listentryrec.last_update_login;
12151 l_listentry_rec.object_version_number := v_listentryrec.object_version_number;
12152 l_listentry_rec.list_select_action_id := v_listentryrec.list_select_action_id;
12153 l_listentry_rec.arc_list_select_action_from := v_listentryrec.arc_list_select_action_from;
12154 l_listentry_rec.list_select_action_from_name := v_listentryrec.list_select_action_from_name;
12155 l_listentry_rec.source_code := v_listentryrec.source_code;
12156 l_listentry_rec.arc_list_used_by_source := v_listentryrec.arc_list_used_by_source;
12157 l_listentry_rec.source_code_for_id := v_listentryrec.source_code_for_id;
12158 l_listentry_rec.pin_code := v_listentryrec.pin_code;
12159 l_listentry_rec.list_entry_source_system_id := v_listentryrec.list_entry_source_system_id;
12160 l_listentry_rec.list_entry_source_system_type := v_listentryrec.list_entry_source_system_type;
12161 l_listentry_rec.view_application_id := v_listentryrec.view_application_id;
12162 l_listentry_rec.manually_entered_flag := v_listentryrec.manually_entered_flag;
12163 l_listentry_rec.marked_as_duplicate_flag := v_listentryrec.marked_as_duplicate_flag;
12164 l_listentry_rec.marked_as_random_flag := v_listentryrec.marked_as_random_flag;
12165 l_listentry_rec.part_of_control_group_flag := v_listentryrec.part_of_control_group_flag;
12166 l_listentry_rec.exclude_in_triggered_list_flag := v_listentryrec.exclude_in_triggered_list_flag;
12167 l_listentry_rec.enabled_flag := v_listentryrec.enabled_flag;
12168 l_listentry_rec.cell_code := v_listentryrec.cell_code;
12169 l_listentry_rec.dedupe_key := v_listentryrec.dedupe_key;
12170 l_listentry_rec.randomly_generated_number := v_listentryrec.randomly_generated_number;
12171 l_listentry_rec.campaign_id := v_listentryrec.campaign_id;
12172 l_listentry_rec.media_id := v_listentryrec.media_id;
12173 l_listentry_rec.channel_id := v_listentryrec.channel_id;
12174 l_listentry_rec.channel_schedule_id := v_listentryrec.channel_schedule_id;
12175 l_listentry_rec.event_offer_id := v_listentryrec.event_offer_id;
12176 l_listentry_rec.customer_id := v_listentryrec.customer_id;
12177 l_listentry_rec.market_segment_id := v_listentryrec.market_segment_id;
12178 l_listentry_rec.vendor_id := v_listentryrec.vendor_id;
12179 l_listentry_rec.transfer_flag := v_listentryrec.transfer_flag;
12180 l_listentry_rec.transfer_status := v_listentryrec.transfer_status;
12181 l_listentry_rec.list_source := v_listentryrec.list_source;
12182 l_listentry_rec.duplicate_master_entry_id := v_listentryrec.duplicate_master_entry_id;
12183 l_listentry_rec.marked_flag := v_listentryrec.marked_flag;
12184 l_listentry_rec.lead_id := v_listentryrec.lead_id;
12185 l_listentry_rec.letter_id := v_listentryrec.letter_id;
12186 l_listentry_rec.picking_header_id := v_listentryrec.picking_header_id;
12187 l_listentry_rec.batch_id := v_listentryrec.batch_id;
12188 l_listentry_rec.first_name := v_listentryrec.first_name;
12189 l_listentry_rec.last_name := v_listentryrec.last_name;
12190 l_listentry_rec.customer_name := v_listentryrec.customer_name;
12191 l_listentry_rec.col1 := v_listentryrec.col1;
12192 l_listentry_rec.col2 := v_listentryrec.col2;
12193 l_listentry_rec.col3 := v_listentryrec.col3;
12194 l_listentry_rec.col4 := v_listentryrec.col4;
12195 l_listentry_rec.col5 := v_listentryrec.col5;
12196 l_listentry_rec.col6 := v_listentryrec.col6;
12197 l_listentry_rec.col7 := v_listentryrec.col7;
12198 l_listentry_rec.col8 := v_listentryrec.col8;
12199 l_listentry_rec.col9 := v_listentryrec.col9;
12200 l_listentry_rec.col10 := v_listentryrec.col10;
12201 l_listentry_rec.col11 := v_listentryrec.col11;
12202 l_listentry_rec.col12 := v_listentryrec.col12;
12203 l_listentry_rec.col13 := v_listentryrec.col13;
12204 l_listentry_rec.col14 := v_listentryrec.col14;
12205 l_listentry_rec.col15 := v_listentryrec.col15;
12206 l_listentry_rec.col16 := v_listentryrec.col16;
12207 l_listentry_rec.col17 := v_listentryrec.col17;
12208 l_listentry_rec.col18 := v_listentryrec.col18;
12209 l_listentry_rec.col19 := v_listentryrec.col19;
12210 l_listentry_rec.col20 := v_listentryrec.col20;
12211 l_listentry_rec.col21 := v_listentryrec.col21;
12212 l_listentry_rec.col22 := v_listentryrec.col22;
12213 l_listentry_rec.col23 := v_listentryrec.col23;
12214 l_listentry_rec.col24 := v_listentryrec.col24;
12215 l_listentry_rec.col25 := v_listentryrec.col25;
12216 l_listentry_rec.col26 := v_listentryrec.col26;
12217 l_listentry_rec.col27 := v_listentryrec.col27;
12218 l_listentry_rec.col28 := v_listentryrec.col28;
12219 l_listentry_rec.col29 := v_listentryrec.col29;
12220 l_listentry_rec.col30 := v_listentryrec.col30;
12221 l_listentry_rec.col31 := v_listentryrec.col31;
12222 l_listentry_rec.col32 := v_listentryrec.col32;
12223 l_listentry_rec.col33 := v_listentryrec.col33;
12224 l_listentry_rec.col34 := v_listentryrec.col34;
12225 l_listentry_rec.col35 := v_listentryrec.col35;
12226 l_listentry_rec.col36 := v_listentryrec.col36;
12227 l_listentry_rec.col37 := v_listentryrec.col37;
12228 l_listentry_rec.col38 := v_listentryrec.col38;
12229 l_listentry_rec.col39 := v_listentryrec.col39;
12230 l_listentry_rec.col40 := v_listentryrec.col40;
12231 l_listentry_rec.col41 := v_listentryrec.col41;
12232 l_listentry_rec.col42 := v_listentryrec.col42;
12233 l_listentry_rec.col43 := v_listentryrec.col43;
12234 l_listentry_rec.col44 := v_listentryrec.col44;
12235 l_listentry_rec.col45 := v_listentryrec.col45;
12236 l_listentry_rec.col46 := v_listentryrec.col46;
12237 l_listentry_rec.col47 := v_listentryrec.col47;
12238 l_listentry_rec.col48 := v_listentryrec.col48;
12239 l_listentry_rec.col49 := v_listentryrec.col49;
12240 l_listentry_rec.col50 := v_listentryrec.col50;
12241 l_listentry_rec.col51 := v_listentryrec.col51;
12242 l_listentry_rec.col52 := v_listentryrec.col52;
12243 l_listentry_rec.col53 := v_listentryrec.col53;
12244 l_listentry_rec.col54 := v_listentryrec.col54;
12245 l_listentry_rec.col55 := v_listentryrec.col55;
12246 l_listentry_rec.col56 := v_listentryrec.col56;
12247 l_listentry_rec.col57 := v_listentryrec.col57;
12248 l_listentry_rec.col58 := v_listentryrec.col58;
12249 l_listentry_rec.col59 := v_listentryrec.col59;
12250 l_listentry_rec.col60 := v_listentryrec.col60;
12251 l_listentry_rec.col61 := v_listentryrec.col61;
12252 l_listentry_rec.col62 := v_listentryrec.col62;
12253 l_listentry_rec.col63 := v_listentryrec.col63;
12254 l_listentry_rec.col64 := v_listentryrec.col64;
12255 l_listentry_rec.col65 := v_listentryrec.col65;
12256 l_listentry_rec.col66 := v_listentryrec.col66;
12257 l_listentry_rec.col67 := v_listentryrec.col67;
12258 l_listentry_rec.col68 := v_listentryrec.col68;
12259 l_listentry_rec.col69 := v_listentryrec.col69;
12260 l_listentry_rec.col70 := v_listentryrec.col70;
12261 l_listentry_rec.col71 := v_listentryrec.col71;
12262 l_listentry_rec.col72 := v_listentryrec.col72;
12263 l_listentry_rec.col73 := v_listentryrec.col73;
12264 l_listentry_rec.col74 := v_listentryrec.col74;
12265 l_listentry_rec.col75 := v_listentryrec.col75;
12266 l_listentry_rec.col76 := v_listentryrec.col76;
12267 l_listentry_rec.col77 := v_listentryrec.col77;
12268 l_listentry_rec.col78 := v_listentryrec.col78;
12269 l_listentry_rec.col79 := v_listentryrec.col79;
12270 l_listentry_rec.col80 := v_listentryrec.col80;
12271 l_listentry_rec.col81 := v_listentryrec.col81;
12272 l_listentry_rec.col82 := v_listentryrec.col82;
12273 l_listentry_rec.col83 := v_listentryrec.col83;
12274 l_listentry_rec.col84 := v_listentryrec.col84;
12275 l_listentry_rec.col85 := v_listentryrec.col85;
12276 l_listentry_rec.col86 := v_listentryrec.col86;
12277 l_listentry_rec.col87 := v_listentryrec.col87;
12278 l_listentry_rec.col88 := v_listentryrec.col88;
12279 l_listentry_rec.col89 := v_listentryrec.col89;
12280 l_listentry_rec.col90 := v_listentryrec.col90;
12281 l_listentry_rec.col91 := v_listentryrec.col91;
12282 l_listentry_rec.col92 := v_listentryrec.col92;
12283 l_listentry_rec.col93 := v_listentryrec.col93;
12284 l_listentry_rec.col94 := v_listentryrec.col94;
12285 l_listentry_rec.col95 := v_listentryrec.col95;
12286 l_listentry_rec.col96 := v_listentryrec.col96;
12287 l_listentry_rec.col97 := v_listentryrec.col97;
12288 l_listentry_rec.col98 := v_listentryrec.col98;
12289 l_listentry_rec.col99 := v_listentryrec.col99;
12290 l_listentry_rec.col100 := v_listentryrec.col100;
12291 l_listentry_rec.col101 := v_listentryrec.col101;
12292 l_listentry_rec.col102 := v_listentryrec.col102;
12293 l_listentry_rec.col103 := v_listentryrec.col103;
12294 l_listentry_rec.col104 := v_listentryrec.col104;
12295 l_listentry_rec.col105 := v_listentryrec.col105;
12296 l_listentry_rec.col106 := v_listentryrec.col106;
12297 l_listentry_rec.col107 := v_listentryrec.col107;
12298 l_listentry_rec.col108 := v_listentryrec.col108;
12299 l_listentry_rec.col109 := v_listentryrec.col109;
12300 l_listentry_rec.col110 := v_listentryrec.col110;
12301 l_listentry_rec.col111 := v_listentryrec.col111;
12302 l_listentry_rec.col112 := v_listentryrec.col112;
12303 l_listentry_rec.col113 := v_listentryrec.col113;
12304 l_listentry_rec.col114 := v_listentryrec.col114;
12305 l_listentry_rec.col115 := v_listentryrec.col115;
12306 l_listentry_rec.col116 := v_listentryrec.col116;
12307 l_listentry_rec.col117 := v_listentryrec.col117;
12308 l_listentry_rec.col118 := v_listentryrec.col118;
12309 l_listentry_rec.col119 := v_listentryrec.col119;
12310 l_listentry_rec.col120 := v_listentryrec.col120;
12311 l_listentry_rec.col121 := v_listentryrec.col121;
12312 l_listentry_rec.col122 := v_listentryrec.col122;
12313 l_listentry_rec.col123 := v_listentryrec.col123;
12314 l_listentry_rec.col124 := v_listentryrec.col124;
12315 l_listentry_rec.col125 := v_listentryrec.col125;
12316 l_listentry_rec.col126 := v_listentryrec.col126;
12317 l_listentry_rec.col127 := v_listentryrec.col127;
12318 l_listentry_rec.col128 := v_listentryrec.col128;
12319 l_listentry_rec.col129 := v_listentryrec.col129;
12320 l_listentry_rec.col130 := v_listentryrec.col130;
12321 l_listentry_rec.col131 := v_listentryrec.col131;
12322 l_listentry_rec.col132 := v_listentryrec.col132;
12323 l_listentry_rec.col133 := v_listentryrec.col133;
12324 l_listentry_rec.col134 := v_listentryrec.col134;
12325 l_listentry_rec.col135 := v_listentryrec.col135;
12326 l_listentry_rec.col136 := v_listentryrec.col136;
12327 l_listentry_rec.col137 := v_listentryrec.col137;
12328 l_listentry_rec.col138 := v_listentryrec.col138;
12329 l_listentry_rec.col139 := v_listentryrec.col139;
12330 l_listentry_rec.col140 := v_listentryrec.col140;
12331 l_listentry_rec.col141 := v_listentryrec.col141;
12332 l_listentry_rec.col142 := v_listentryrec.col142;
12333 l_listentry_rec.col143 := v_listentryrec.col143;
12334 l_listentry_rec.col144 := v_listentryrec.col144;
12335 l_listentry_rec.col145 := v_listentryrec.col145;
12336 l_listentry_rec.col146 := v_listentryrec.col146;
12337 l_listentry_rec.col147 := v_listentryrec.col147;
12338 l_listentry_rec.col148 := v_listentryrec.col148;
12339 l_listentry_rec.col149 := v_listentryrec.col149;
12340 l_listentry_rec.col150 := v_listentryrec.col150;
12341 l_listentry_rec.col151 := v_listentryrec.col151;
12342 l_listentry_rec.col152 := v_listentryrec.col152;
12343 l_listentry_rec.col153 := v_listentryrec.col153;
12344 l_listentry_rec.col154 := v_listentryrec.col154;
12345 l_listentry_rec.col155 := v_listentryrec.col155;
12346 l_listentry_rec.col156 := v_listentryrec.col156;
12347 l_listentry_rec.col157 := v_listentryrec.col157;
12348 l_listentry_rec.col158 := v_listentryrec.col158;
12349 l_listentry_rec.col159 := v_listentryrec.col159;
12350 l_listentry_rec.col160 := v_listentryrec.col160;
12351 l_listentry_rec.col161 := v_listentryrec.col161;
12352 l_listentry_rec.col162 := v_listentryrec.col162;
12353 l_listentry_rec.col163 := v_listentryrec.col163;
12354 l_listentry_rec.col164 := v_listentryrec.col164;
12355 l_listentry_rec.col165 := v_listentryrec.col165;
12356 l_listentry_rec.col166 := v_listentryrec.col166;
12357 l_listentry_rec.col167 := v_listentryrec.col167;
12358 l_listentry_rec.col168 := v_listentryrec.col168;
12359 l_listentry_rec.col169 := v_listentryrec.col169;
12360 l_listentry_rec.col170 := v_listentryrec.col170;
12361 l_listentry_rec.col171 := v_listentryrec.col171;
12362 l_listentry_rec.col172 := v_listentryrec.col172;
12363 l_listentry_rec.col173 := v_listentryrec.col173;
12364 l_listentry_rec.col174 := v_listentryrec.col174;
12365 l_listentry_rec.col175 := v_listentryrec.col175;
12366 l_listentry_rec.col176 := v_listentryrec.col176;
12367 l_listentry_rec.col177 := v_listentryrec.col177;
12368 l_listentry_rec.col178 := v_listentryrec.col178;
12369 l_listentry_rec.col179 := v_listentryrec.col179;
12370 l_listentry_rec.col180 := v_listentryrec.col180;
12371 l_listentry_rec.col181 := v_listentryrec.col181;
12372 l_listentry_rec.col182 := v_listentryrec.col182;
12373 l_listentry_rec.col183 := v_listentryrec.col183;
12374 l_listentry_rec.col184 := v_listentryrec.col184;
12375 l_listentry_rec.col185 := v_listentryrec.col185;
12376 l_listentry_rec.col186 := v_listentryrec.col186;
12377 l_listentry_rec.col187 := v_listentryrec.col187;
12378 l_listentry_rec.col188 := v_listentryrec.col188;
12379 l_listentry_rec.col189 := v_listentryrec.col189;
12380 l_listentry_rec.col190 := v_listentryrec.col190;
12381 l_listentry_rec.col191 := v_listentryrec.col191;
12382 l_listentry_rec.col192 := v_listentryrec.col192;
12383 l_listentry_rec.col193 := v_listentryrec.col193;
12384 l_listentry_rec.col194 := v_listentryrec.col194;
12385 l_listentry_rec.col195 := v_listentryrec.col195;
12386 l_listentry_rec.col196 := v_listentryrec.col196;
12387 l_listentry_rec.col197 := v_listentryrec.col197;
12388 l_listentry_rec.col198 := v_listentryrec.col198;
12389 l_listentry_rec.col199 := v_listentryrec.col199;
12390 l_listentry_rec.col200 := v_listentryrec.col200;
12391 l_listentry_rec.col201 := v_listentryrec.col201;
12392 l_listentry_rec.col202 := v_listentryrec.col202;
12393 l_listentry_rec.col203 := v_listentryrec.col203;
12394 l_listentry_rec.col204 := v_listentryrec.col204;
12395 l_listentry_rec.col205 := v_listentryrec.col205;
12396 l_listentry_rec.col206 := v_listentryrec.col206;
12397 l_listentry_rec.col207 := v_listentryrec.col207;
12398 l_listentry_rec.col208 := v_listentryrec.col208;
12399 l_listentry_rec.col209 := v_listentryrec.col209;
12400 l_listentry_rec.col210 := v_listentryrec.col210;
12401 l_listentry_rec.col211 := v_listentryrec.col211;
12402 l_listentry_rec.col212 := v_listentryrec.col212;
12403 l_listentry_rec.col213 := v_listentryrec.col213;
12404 l_listentry_rec.col214 := v_listentryrec.col214;
12405 l_listentry_rec.col215 := v_listentryrec.col215;
12406 l_listentry_rec.col216 := v_listentryrec.col216;
12407 l_listentry_rec.col217 := v_listentryrec.col217;
12408 l_listentry_rec.col218 := v_listentryrec.col218;
12409 l_listentry_rec.col219 := v_listentryrec.col219;
12410 l_listentry_rec.col220 := v_listentryrec.col220;
12411 l_listentry_rec.col221 := v_listentryrec.col221;
12412 l_listentry_rec.col222 := v_listentryrec.col222;
12413 l_listentry_rec.col223 := v_listentryrec.col223;
12414 l_listentry_rec.col224 := v_listentryrec.col224;
12415 l_listentry_rec.col225 := v_listentryrec.col225;
12416 l_listentry_rec.col226 := v_listentryrec.col226;
12417 l_listentry_rec.col227 := v_listentryrec.col227;
12418 l_listentry_rec.col228 := v_listentryrec.col228;
12419 l_listentry_rec.col229 := v_listentryrec.col229;
12420 l_listentry_rec.col230 := v_listentryrec.col230;
12421 l_listentry_rec.col231 := v_listentryrec.col231;
12422 l_listentry_rec.col232 := v_listentryrec.col232;
12423 l_listentry_rec.col233 := v_listentryrec.col233;
12424 l_listentry_rec.col234 := v_listentryrec.col234;
12425 l_listentry_rec.col235 := v_listentryrec.col235;
12426 l_listentry_rec.col236 := v_listentryrec.col236;
12427 l_listentry_rec.col237 := v_listentryrec.col237;
12428 l_listentry_rec.col238 := v_listentryrec.col238;
12429 l_listentry_rec.col239 := v_listentryrec.col239;
12430 l_listentry_rec.col240 := v_listentryrec.col240;
12431 l_listentry_rec.col241 := v_listentryrec.col241;
12432 l_listentry_rec.col242 := v_listentryrec.col242;
12433 l_listentry_rec.col243 := v_listentryrec.col243;
12434 l_listentry_rec.col244 := v_listentryrec.col244;
12435 l_listentry_rec.col245 := v_listentryrec.col245;
12436 l_listentry_rec.col246 := v_listentryrec.col246;
12437 l_listentry_rec.col247 := v_listentryrec.col247;
12438 l_listentry_rec.col248 := v_listentryrec.col248;
12439 l_listentry_rec.col249 := v_listentryrec.col249;
12440 l_listentry_rec.col250 := v_listentryrec.col250;
12441 l_listentry_rec.col251 := v_listentryrec.col251;
12442 l_listentry_rec.col252 := v_listentryrec.col252;
12443 l_listentry_rec.col253 := v_listentryrec.col253;
12444 l_listentry_rec.col254 := v_listentryrec.col254;
12445 l_listentry_rec.col255 := v_listentryrec.col255;
12446 l_listentry_rec.col256 := v_listentryrec.col256;
12447 l_listentry_rec.col257 := v_listentryrec.col257;
12448 l_listentry_rec.col258 := v_listentryrec.col258;
12449 l_listentry_rec.col259 := v_listentryrec.col259;
12450 l_listentry_rec.col260 := v_listentryrec.col260;
12451 l_listentry_rec.col261 := v_listentryrec.col261;
12452 l_listentry_rec.col262 := v_listentryrec.col262;
12453 l_listentry_rec.col263 := v_listentryrec.col263;
12454 l_listentry_rec.col264 := v_listentryrec.col264;
12455 l_listentry_rec.col265 := v_listentryrec.col265;
12456 l_listentry_rec.col266 := v_listentryrec.col266;
12457 l_listentry_rec.col267 := v_listentryrec.col267;
12458 l_listentry_rec.col268 := v_listentryrec.col268;
12459 l_listentry_rec.col269 := v_listentryrec.col269;
12460 l_listentry_rec.col270 := v_listentryrec.col270;
12461 l_listentry_rec.col271 := v_listentryrec.col271;
12462 l_listentry_rec.col272 := v_listentryrec.col272;
12463 l_listentry_rec.col273 := v_listentryrec.col273;
12464 l_listentry_rec.col274 := v_listentryrec.col274;
12465 l_listentry_rec.col275 := v_listentryrec.col275;
12466 l_listentry_rec.col276 := v_listentryrec.col276;
12467 l_listentry_rec.col277 := v_listentryrec.col277;
12468 l_listentry_rec.col278 := v_listentryrec.col278;
12469 l_listentry_rec.col279 := v_listentryrec.col279;
12470 l_listentry_rec.col280 := v_listentryrec.col280;
12471 l_listentry_rec.col281 := v_listentryrec.col281;
12472 l_listentry_rec.col282 := v_listentryrec.col282;
12473 l_listentry_rec.col283 := v_listentryrec.col283;
12474 l_listentry_rec.col284 := v_listentryrec.col284;
12475 l_listentry_rec.col285 := v_listentryrec.col285;
12476 l_listentry_rec.col286 := v_listentryrec.col286;
12477 l_listentry_rec.col287 := v_listentryrec.col287;
12478 l_listentry_rec.col288 := v_listentryrec.col288;
12479 l_listentry_rec.col289 := v_listentryrec.col289;
12480 l_listentry_rec.col290 := v_listentryrec.col290;
12481 l_listentry_rec.col291 := v_listentryrec.col291;
12482 l_listentry_rec.col292 := v_listentryrec.col292;
12483 l_listentry_rec.col293 := v_listentryrec.col293;
12484 l_listentry_rec.col294 := v_listentryrec.col294;
12485 l_listentry_rec.col295 := v_listentryrec.col295;
12486 l_listentry_rec.col296 := v_listentryrec.col296;
12487 l_listentry_rec.col297 := v_listentryrec.col297;
12488 l_listentry_rec.col298 := v_listentryrec.col298;
12489 l_listentry_rec.col299 := v_listentryrec.col299;
12490 l_listentry_rec.col300 := v_listentryrec.col300;
12491 l_listentry_rec.address_line1 := v_listentryrec.address_line1;
12492 l_listentry_rec.address_line2 := v_listentryrec.address_line2;
12493 l_listentry_rec.callback_flag := FND_API.g_miss_char;
12494 l_listentry_rec.city := v_listentryrec.city;
12495 l_listentry_rec.country := v_listentryrec.country;
12496 l_listentry_rec.do_not_use_flag := FND_API.g_miss_char;
12497 l_listentry_rec.do_not_use_reason := FND_API.g_miss_char;
12498 l_listentry_rec.email_address := v_listentryrec.email_address;
12499 l_listentry_rec.fax := v_listentryrec.fax;
12500 l_listentry_rec.phone := v_listentryrec.phone;
12501 l_listentry_rec.record_out_flag := FND_API.g_miss_char;
12502 l_listentry_rec.state := v_listentryrec.state;
12503 l_listentry_rec.suffix := v_listentryrec.suffix;
12504 l_listentry_rec.title := v_listentryrec.title;
12505 l_listentry_rec.usage_restriction := FND_API.g_miss_char;
12506 l_listentry_rec.zipcode := v_listentryrec.zipcode;
12507 l_listentry_rec.curr_cp_country_code := FND_API.g_miss_char;
12508 l_listentry_rec.curr_cp_phone_number := FND_API.g_miss_char;
12509 l_listentry_rec.curr_cp_raw_phone_number := FND_API.g_miss_char;
12510 l_listentry_rec.curr_cp_area_code := FND_API.g_miss_num;
12511 l_listentry_rec.curr_cp_id := FND_API.g_miss_num;
12512 l_listentry_rec.curr_cp_index := FND_API.g_miss_num;
12513 l_listentry_rec.curr_cp_time_zone := FND_API.g_miss_num;
12514 l_listentry_rec.curr_cp_time_zone_aux := FND_API.g_miss_num;
12515 l_listentry_rec.imp_source_line_id := v_listentryrec.imp_source_line_id;
12516 l_listentry_rec.next_call_time := FND_API.g_miss_date;
12517 l_listentry_rec.record_release_time := FND_API.g_miss_date;
12518 l_listentry_rec.party_id := v_listentryrec.party_id;
12519 l_listentry_rec.parent_party_id := v_listentryrec.parent_party_id;
12520
12521 AMS_LISTENTRY_PUB.update_listentry(
12522 p_api_version => l_api_version,
12523 p_init_msg_list => l_init_msg_list,
12524 x_return_status => l_return_status,
12525 x_msg_count => l_msg_count,
12526 x_msg_data => l_msg_data,
12527 p_entry_rec => l_listentry_rec);
12528
12529 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12530 Log_msg('AMS_LISTENTRY_PUB.update_listentry', l_msg_data);
12531 END IF;
12532
12533 UPDATE AMS_LIST_ENTRIES
12534 SET NEWLY_UPDATED_FLAG = v_listentryrec.NEWLY_UPDATED_FLAG
12535 WHERE LIST_ENTRY_ID = v_listentryrec.list_entry_id
12536 AND LIST_HEADER_ID= v_listentryrec.list_header_id;
12537
12538 l_to_list_entry_id_col.extend(1,1);
12539 l_num := l_num + 1;
12540
12541 END LOOP;
12542
12543 /*
12544 UPDATE AMS_LIST_ENTRIES A
12545
12546 SET ( LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER
12547
12548 , LIST_SELECT_ACTION_ID, ARC_LIST_SELECT_ACTION_FROM, LIST_SELECT_ACTION_FROM_NAME, SOURCE_CODE, ARC_LIST_USED_BY_SOURCE, SOURCE_CODE_FOR_ID
12549
12550 , PIN_CODE, LIST_ENTRY_SOURCE_SYSTEM_ID, LIST_ENTRY_SOURCE_SYSTEM_TYPE, VIEW_APPLICATION_ID, MANUALLY_ENTERED_FLAG
12551
12552 , MARKED_AS_DUPLICATE_FLAG, MARKED_AS_RANDOM_FLAG, PART_OF_CONTROL_GROUP_FLAG, EXCLUDE_IN_TRIGGERED_LIST_FLAG, ENABLED_FLAG, CELL_CODE, DEDUPE_KEY
12553
12554 , RANDOMLY_GENERATED_NUMBER, CAMPAIGN_ID, MEDIA_ID, CHANNEL_ID, CHANNEL_SCHEDULE_ID, EVENT_OFFER_ID, CUSTOMER_ID, MARKET_SEGMENT_ID
12555
12556 , PARTY_ID, PARENT_PARTY_ID, VENDOR_ID, TRANSFER_FLAG, TRANSFER_STATUS, LIST_SOURCE, DUPLICATE_MASTER_ENTRY_ID, MARKED_FLAG, LEAD_ID, LETTER_ID
12557
12558 , PICKING_HEADER_ID, BATCH_ID, SUFFIX, FIRST_NAME, LAST_NAME, CUSTOMER_NAME, TITLE, ADDRESS_LINE1, ADDRESS_LINE2, CITY, STATE, ZIPCODE, COUNTRY, FAX, PHONE, EMAIL_ADDRESS
12559
12560 , COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10, COL11, COL12, COL13, COL14, COL15, COL16, COL17, COL18
12561
12562 , COL19, COL20, COL21, COL22, COL23, COL24, COL25, COL26, COL27, COL28, COL29, COL30, COL31, COL32, COL33, COL34, COL35
12563
12564 , COL36, COL37, COL38, COL39, COL40, COL41, COL42, COL43, COL44, COL45, COL46, COL47, COL48, COL49, COL50, COL51, COL52
12565
12566 , COL53, COL54, COL55, COL56, COL57, COL58, COL59, COL60, COL61, COL62, COL63, COL64, COL65, COL66, COL67, COL68, COL69
12567
12568 , COL70, COL71, COL72, COL73, COL74, COL75, COL76, COL77, COL78, COL79, COL80, COL81, COL82, COL83, COL84, COL85, COL86
12569
12570 , COL87, COL88, COL89, COL90, COL91, COL92, COL93, COL94, COL95, COL96, COL97, COL98, COL99, COL100, COL101, COL102, COL103
12571
12572 , COL104, COL105, COL106, COL107, COL108, COL109, COL110, COL111, COL112, COL113, COL114, COL115, COL116, COL117, COL118, COL119
12573
12574 , COL120, COL121, COL122, COL123, COL124, COL125, COL126, COL127, COL128, COL129, COL130, COL131, COL132, COL133, COL134, COL135
12575
12576 , COL136, COL137, COL138, COL139, COL140, COL141, COL142, COL143, COL144, COL145, COL146, COL147, COL148, COL149, COL150, COL151
12577
12578 , COL152, COL153, COL154, COL155, COL156, COL157, COL158, COL159, COL160, COL161, COL162, COL163, COL164, COL165, COL166, COL167
12579
12580 , COL168, COL169, COL170, COL171, COL172, COL173, COL174, COL175, COL176, COL177, COL178, COL179, COL180, COL181, COL182, COL183
12581
12582 , COL184, COL185, COL186, COL187, COL188, COL189, COL190, COL191, COL192, COL193, COL194, COL195, COL196, COL197, COL198, COL199
12583
12584 , COL200, COL201, COL202, COL203, COL204, COL205, COL206, COL207, COL208, COL209, COL210, COL211, COL212, COL213, COL214, COL215
12585
12586 , COL216, COL217, COL218, COL219, COL220, COL221, COL222, COL223, COL224, COL225, COL226, COL227, COL228, COL229, COL230, COL231
12587
12588 , COL232, COL233, COL234, COL235, COL236, COL237, COL238, COL239, COL240, COL241, COL242, COL243, COL244, COL245, COL246, COL247
12589
12590 , COL248, COL249, COL250, IMP_SOURCE_LINE_ID, USAGE_RESTRICTION, COL251, COL252, COL253, COL254, COL255, COL256, COL257, COL258
12591
12592 , COL259, COL260, COL261, COL262, COL263, COL264, COL265, COL266, COL267, COL268, COL269, COL270, COL271, COL272, COL273, COL274
12593
12594 , COL275, COL276, COL277, COL278, COL279, COL280, COL281, COL282, COL283, COL284, COL285, COL286, COL287, COL288, COL289, COL290
12595
12596 , COL291, COL292, COL293, COL294, COL295, COL296, COL297, COL298, COL299, COL300, NEWLY_UPDATED_FLAG
12597
12598 ) =
12599
12600 (SELECT
12601
12602 LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE, CREATED_BY, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER
12603
12604 , LIST_SELECT_ACTION_ID, ARC_LIST_SELECT_ACTION_FROM, LIST_SELECT_ACTION_FROM_NAME, SOURCE_CODE, ARC_LIST_USED_BY_SOURCE, SOURCE_CODE_FOR_ID
12605
12606 , PIN_CODE, LIST_ENTRY_SOURCE_SYSTEM_ID, LIST_ENTRY_SOURCE_SYSTEM_TYPE, VIEW_APPLICATION_ID, MANUALLY_ENTERED_FLAG
12607
12608 , MARKED_AS_DUPLICATE_FLAG, MARKED_AS_RANDOM_FLAG, PART_OF_CONTROL_GROUP_FLAG, EXCLUDE_IN_TRIGGERED_LIST_FLAG, ENABLED_FLAG, CELL_CODE, DEDUPE_KEY
12609
12610 , RANDOMLY_GENERATED_NUMBER, CAMPAIGN_ID, MEDIA_ID, CHANNEL_ID, CHANNEL_SCHEDULE_ID, EVENT_OFFER_ID, CUSTOMER_ID, MARKET_SEGMENT_ID
12611
12612 , PARTY_ID, PARENT_PARTY_ID, VENDOR_ID, TRANSFER_FLAG, TRANSFER_STATUS, LIST_SOURCE, DUPLICATE_MASTER_ENTRY_ID, MARKED_FLAG, LEAD_ID, LETTER_ID
12613
12614 , PICKING_HEADER_ID, BATCH_ID, SUFFIX, FIRST_NAME, LAST_NAME, CUSTOMER_NAME, TITLE, ADDRESS_LINE1, ADDRESS_LINE2, CITY, STATE, ZIPCODE, COUNTRY, FAX, PHONE, EMAIL_ADDRESS
12615
12616 , COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10, COL11, COL12, COL13, COL14, COL15, COL16, COL17, COL18
12617
12618 , COL19, COL20, COL21, COL22, COL23, COL24, COL25, COL26, COL27, COL28, COL29, COL30, COL31, COL32, COL33, COL34, COL35
12619
12620 , COL36, COL37, COL38, COL39, COL40, COL41, COL42, COL43, COL44, COL45, COL46, COL47, COL48, COL49, COL50, COL51, COL52
12621
12622 , COL53, COL54, COL55, COL56, COL57, COL58, COL59, COL60, COL61, COL62, COL63, COL64, COL65, COL66, COL67, COL68, COL69
12623
12624 , COL70, COL71, COL72, COL73, COL74, COL75, COL76, COL77, COL78, COL79, COL80, COL81, COL82, COL83, COL84, COL85, COL86
12625
12626 , COL87, COL88, COL89, COL90, COL91, COL92, COL93, COL94, COL95, COL96, COL97, COL98, COL99, COL100, COL101, COL102, COL103
12627
12628 , COL104, COL105, COL106, COL107, COL108, COL109, COL110, COL111, COL112, COL113, COL114, COL115, COL116, COL117, COL118, COL119
12629
12630 , COL120, COL121, COL122, COL123, COL124, COL125, COL126, COL127, COL128, COL129, COL130, COL131, COL132, COL133, COL134, COL135
12631
12632 , COL136, COL137, COL138, COL139, COL140, COL141, COL142, COL143, COL144, COL145, COL146, COL147, COL148, COL149, COL150, COL151
12633
12634 , COL152, COL153, COL154, COL155, COL156, COL157, COL158, COL159, COL160, COL161, COL162, COL163, COL164, COL165, COL166, COL167
12635
12636 , COL168, COL169, COL170, COL171, COL172, COL173, COL174, COL175, COL176, COL177, COL178, COL179, COL180, COL181, COL182, COL183
12637
12638 , COL184, COL185, COL186, COL187, COL188, COL189, COL190, COL191, COL192, COL193, COL194, COL195, COL196, COL197, COL198, COL199
12639
12640 , COL200, COL201, COL202, COL203, COL204, COL205, COL206, COL207, COL208, COL209, COL210, COL211, COL212, COL213, COL214, COL215
12641
12642 , COL216, COL217, COL218, COL219, COL220, COL221, COL222, COL223, COL224, COL225, COL226, COL227, COL228, COL229, COL230, COL231
12643
12644 , COL232, COL233, COL234, COL235, COL236, COL237, COL238, COL239, COL240, COL241, COL242, COL243, COL244, COL245, COL246, COL247
12645
12646 , COL248, COL249, COL250, IMP_SOURCE_LINE_ID, USAGE_RESTRICTION, COL251, COL252, COL253, COL254, COL255, COL256, COL257, COL258
12647
12648 , COL259, COL260, COL261, COL262, COL263, COL264, COL265, COL266, COL267, COL268, COL269, COL270, COL271, COL272, COL273, COL274
12649
12650 , COL275, COL276, COL277, COL278, COL279, COL280, COL281, COL282, COL283, COL284, COL285, COL286, COL287, COL288, COL289, COL290
12651
12652 , COL291, COL292, COL293, COL294, COL295, COL296, COL297, COL298, COL299, COL300, NEWLY_UPDATED_FLAG
12653
12654 FROM AMS_LIST_ENTRIES
12655
12656 WHERE LIST_HEADER_ID = p_from_list_id AND PARTY_ID = A.PARTY_ID AND ENABLED_FLAG = 'Y')
12657
12658 WHERE LIST_HEADER_ID = p_to_list_id
12659
12660 AND ENABLED_FLAG = 'Y'
12661
12662 AND PARTY_ID IN (SELECT PARTY_ID
12663
12664 FROM AMS_LIST_ENTRIES
12665
12666 WHERE LIST_HEADER_ID = p_from_list_id
12667
12668 AND ENABLED_FLAG = 'Y')
12669
12670 RETURNING LIST_ENTRY_ID BULK COLLECT INTO l_to_list_entry_id_col;
12671
12672 */
12673 l_to_list_entry_id_col.delete(l_num);
12674 x_records_updated := l_to_list_entry_id_col.COUNT;
12675
12676
12677 IF p_mark_do_not_use THEN
12678
12679
12680
12681 SELECT RETURNS_ID
12682
12683 BULK COLLECT INTO l_from_returns_id_col
12684
12685 FROM IEC_G_RETURN_ENTRIES
12686
12687 WHERE LIST_HEADER_ID = p_from_list_id
12688
12689 AND LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID
12690
12691 FROM AMS_LIST_ENTRIES
12692
12693 WHERE LIST_HEADER_ID = p_from_list_id
12694
12695 AND ENABLED_FLAG = 'Y'
12696
12697 AND PARTY_ID IN (SELECT PARTY_ID
12698
12699 FROM AMS_LIST_ENTRIES
12700
12701 WHERE LIST_HEADER_ID = p_to_list_id
12702
12703 AND ENABLED_FLAG = 'Y'));
12704
12705
12706 Mark_EntriesDoNotUse
12707
12708 ( l_from_returns_id_col
12709
12710 , l_ignore1
12711
12712 , l_ignore2
12713
12714 , l_ignore3
12715
12716 );
12717
12718
12719 END IF;
12720
12721
12722 Load_Entries_Pvt( l_to_list_entry_id_col
12723
12724 , p_to_list_id
12725
12726 , 'Y' -- enable validation rules
12727
12728 );
12729
12730 EXCEPTION
12731
12732 WHEN fnd_api.g_exc_error THEN
12733
12734 RAISE;
12735
12736 WHEN fnd_api.g_exc_unexpected_error THEN
12737
12738 RAISE;
12739
12740 WHEN OTHERS THEN
12741
12742 Log( 'Update_DuplicateEntries'
12743
12744 , 'MAIN'
12745
12746 , SQLERRM
12747
12748 );
12749
12750 RAISE fnd_api.g_exc_unexpected_error;
12751
12752
12753
12754 END Update_DuplicateEntries;
12755
12756
12757 PROCEDURE Log_DuplicateEntries
12758
12759 ( p_from_returns_id_col IN SYSTEM.number_tbl_type
12760
12761 , p_to_list_id IN NUMBER
12762
12763 , p_to_schedule_id IN NUMBER
12764
12765 , x_duplicate_incr_count OUT NOCOPY NUMBER
12766
12767 )
12768
12769 IS
12770
12771 l_from_returns_id_col SYSTEM.number_tbl_type; -- will only contain duplicates
12772
12773 l_from_list_id_col SYSTEM.number_tbl_type;
12774
12775 l_from_list_entry_id_col SYSTEM.number_tbl_type;
12776
12777 l_from_schedule_id_col SYSTEM.number_tbl_type;
12778
12779 l_party_id_col SYSTEM.number_tbl_type;
12780
12781
12782
12783 l_error_msg VARCHAR2(4000);
12784 l_duplicate_incr_count NUMBER :=0;
12785 BEGIN
12786
12787
12788
12789 -- Find duplicate record ids in order to log them
12790
12791 SELECT A.RETURNS_ID, A.LIST_HEADER_ID, A.LIST_ENTRY_ID, A.CAMPAIGN_SCHEDULE_ID, B.PARTY_ID
12792
12793 BULK COLLECT INTO l_from_returns_id_col, l_from_list_id_col, l_from_list_entry_id_col, l_from_schedule_id_col, l_party_id_col
12794
12795 FROM IEC_G_RETURN_ENTRIES A, AMS_LIST_ENTRIES B
12796
12797 WHERE A.LIST_HEADER_ID = B.LIST_HEADER_ID
12798
12799 AND A.LIST_ENTRY_ID = B.LIST_ENTRY_ID
12800
12801 AND A.RETURNS_ID IN (SELECT * FROM TABLE(CAST(p_from_returns_id_col AS SYSTEM.NUMBER_TBL_TYPE)))
12802
12803 AND B.PARTY_ID IN (SELECT PARTY_ID FROM AMS_LIST_ENTRIES WHERE LIST_HEADER_ID = p_to_list_id);
12804
12805
12806
12807 IF l_from_returns_id_col IS NOT NULL AND l_from_returns_id_col.COUNT > 0 THEN
12808
12809 l_duplicate_incr_count := l_from_returns_id_col.COUNT;
12810
12811 FOR i IN l_from_returns_id_col.FIRST..l_from_returns_id_col.LAST LOOP
12812
12813 IEC_OCS_LOG_PVT.LOG_RECYCLE_MV_DUP_REC_STMT
12814
12815 ( 'Iec_Validate_Pvt'
12816
12817 , 'Move_RecycledEntries'
12818
12819 , 'FOUND_DUPLICATE_RECORD'
12820
12821 , l_from_schedule_id_col(i)
12822
12823 , l_from_list_id_col(i)
12824
12825 , l_from_list_entry_id_col(i)
12826
12827 , l_from_returns_id_col(i)
12828
12829 , l_party_id_col(i)
12830
12831 , p_to_schedule_id
12832
12833 , l_error_msg
12834
12835 );
12836
12837 END LOOP;
12838
12839 END IF;
12840
12841 x_duplicate_incr_count := l_duplicate_incr_count;
12842
12843 EXCEPTION
12844
12845 WHEN OTHERS THEN
12846
12847 Log( 'Log_DuplicateEntries'
12848
12849 , 'MAIN'
12850
12851 , SQLERRM
12852
12853 );
12854
12855 RAISE fnd_api.g_exc_unexpected_error;
12856
12857
12858
12859 END Log_DuplicateEntries;
12860
12861
12862
12863
12864 -- Called by Recycling plugin to move recycled entry
12865
12866 PROCEDURE Move_RecycledEntry
12867
12868 ( p_returns_id IN NUMBER
12869
12870 , p_to_list_id IN NUMBER)
12871
12872 IS
12873
12874 l_returns_id_col SYSTEM.number_tbl_type := SYSTEM.number_tbl_type();
12875
12876 BEGIN
12877
12878 IF p_returns_id IS NULL OR p_to_list_id IS NULL THEN
12879
12880 RETURN;
12881
12882 END IF;
12883
12884
12885
12886 l_returns_id_col.EXTEND(1);
12887
12888 l_returns_id_col(1) := p_returns_id;
12889
12890
12891
12892 Move_RecycledEntries( l_returns_id_col
12893
12894 , p_to_list_id);
12895
12896
12897
12898 END Move_RecycledEntry;
12899
12900
12901
12902 -- Called by Recycling plugin to move recycled entries
12903
12904 PROCEDURE Move_RecycledEntries
12905
12906 ( p_returns_id_col IN SYSTEM.number_tbl_type
12907
12908 , p_to_list_id IN NUMBER)
12909
12910 IS
12911
12912 l_from_returns_id_col SYSTEM.number_tbl_type;
12913
12914 l_from_list_entry_id_col SYSTEM.number_tbl_type;
12915
12916 l_from_list_id_col SYSTEM.number_tbl_type;
12917
12918 l_to_list_entry_id_col SYSTEM.number_tbl_type;
12919
12920 l_schedule_id NUMBER(15) := 0;
12921
12922 l_list_duplicate_incr NUMBER := 0;
12923 BEGIN
12924
12925
12926
12927 IF p_returns_id_col IS NULL OR p_to_list_id IS NULL THEN
12928
12929 RETURN;
12930
12931 END IF;
12932
12933
12934
12935 -- Log duplicate records
12936
12937 -- Must do this before move non-duplicate records b/c they will become
12938
12939 -- duplicates after the move
12940
12941 SELECT LIST_USED_BY_ID into l_schedule_id FROM AMS_ACT_LISTS
12942 WHERE LIST_HEADER_ID = p_to_list_id AND LIST_ACT_TYPE = 'TARGET';
12943
12944 Log_DuplicateEntries
12945
12946 ( p_returns_id_col
12947
12948 , p_to_list_id
12949
12950 , l_schedule_id
12951
12952 ,l_list_duplicate_incr
12953
12954 );
12955
12956
12957 EXECUTE IMMEDIATE
12958
12959 'UPDATE AMS_LIST_HEADERS_ALL
12960
12961 SET NO_OF_ROWS_DUPLICATES = NVL(NO_OF_ROWS_DUPLICATES, 0) + :rows_incr
12962
12963 WHERE LIST_HEADER_ID = :list_id'
12964
12965 USING IN l_list_duplicate_incr, IN p_to_list_id;
12966
12967 -- Mark entries as do not use in source list
12968
12969 -- Retrieve the list_entry_id and list_header_id corresponding to the returns_id
12970
12971 Mark_EntriesDoNotUse( p_returns_id_col
12972
12973 , l_from_returns_id_col
12974
12975 , l_from_list_entry_id_col
12976
12977 , l_from_list_id_col
12978
12979 );
12980
12981
12982
12983 IF l_from_returns_id_col IS NOT NULL AND l_from_returns_id_col.COUNT > 0 THEN
12984
12985
12986 Copy_AmsListEntries( l_from_list_entry_id_col
12987
12988 , l_from_list_id_col
12989
12990 , l_to_list_entry_id_col
12991
12992 , p_to_list_id);
12993
12994
12995
12996 -- Load non-duplicate records into destination list
12997 /*
12998 Load_Entries_Pvt( l_to_list_entry_id_col
12999
13000 , p_to_list_id
13001
13002 , 'N' -- disable validation rules
13003
13004 );
13005
13006 */
13007
13008 -- Move call history for non-duplicate records
13009 /*
13010 Move_CallHistory( l_from_returns_id_col
13011
13012 , l_to_list_entry_id_col
13013
13014 , p_to_list_id);
13015
13016
13017
13018 Truncate_Temporary_Tables;
13019 */
13020 END IF;
13021
13022
13023
13024 EXCEPTION
13025
13026 WHEN fnd_api.g_exc_error THEN
13027
13028 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
13029
13030 WHEN fnd_api.g_exc_unexpected_error THEN
13031
13032 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
13033
13034
13035
13036 END Move_RecycledEntries;
13037
13038
13039 -- Procedure to be called by public api to move schedule
13040
13041 -- entries
13042
13043 PROCEDURE Move_ScheduleEntries_Pub
13044
13045 ( p_src_schedule_id IN NUMBER
13046
13047 , p_dest_schedule_id IN NUMBER
13048
13049 , p_commit IN BOOLEAN
13050
13051 , x_return_status OUT NOCOPY VARCHAR2)
13052
13053 IS
13054
13055 l_src_list_id NUMBER(15);
13056
13057 l_dest_list_id NUMBER(15);
13058
13059
13060
13061 l_call_center_ready_flag VARCHAR2(1);
13062
13063 l_status_code VARCHAR2(30);
13064
13065 l_validated_once_flag VARCHAR2(1);
13066
13067
13068
13069 l_records_updated NUMBER;
13070
13071
13072
13073 l_returns_id_col SYSTEM.number_tbl_type;
13074
13075
13076
13077 l_src_returns_id_col SYSTEM.number_tbl_type;
13078
13079 l_src_list_entry_id_col SYSTEM.number_tbl_type;
13080
13081 l_src_list_id_col SYSTEM.number_tbl_type;
13082
13083 l_dest_list_entry_id_col SYSTEM.number_tbl_type;
13084
13085
13086
13087 -- Cursor to retrieve non-duplicate records
13088
13089 CURSOR c1(src_list_id NUMBER, dest_list_id NUMBER) IS
13090
13091 SELECT B.RETURNS_ID
13092
13093 FROM IEC_G_RETURN_ENTRIES B
13094
13095 WHERE B.LIST_HEADER_ID = src_list_id
13096
13097 AND B.LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID
13098
13099 FROM AMS_LIST_ENTRIES
13100
13101 WHERE B.LIST_HEADER_ID = LIST_HEADER_ID
13102
13103 AND B.LIST_ENTRY_ID = LIST_ENTRY_ID
13104
13105 AND PARTY_ID NOT IN (SELECT PARTY_ID
13106
13107 FROM AMS_LIST_ENTRIES
13108
13109 WHERE LIST_HEADER_ID = dest_list_id));
13110
13111
13112
13113 BEGIN
13114
13115
13116
13117 x_return_status := FND_API.G_RET_STS_SUCCESS;
13118
13119
13120
13121 SAVEPOINT move_entry;
13122
13123
13124
13125 Init_LoggingVariables;
13126
13127 Set_MessagePrefix('move_schedule_' || p_src_schedule_id || '_to_' || p_dest_schedule_id);
13128
13129
13130
13131 IF p_src_schedule_id IS NULL THEN
13132
13133 Log_CopySrcListNullMsg('Move_ScheduleEntries_Pub','CHECK_SRC_SCHED_NULL', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13134
13135 RAISE fnd_api.g_exc_error;
13136
13137 END IF;
13138
13139
13140
13141 IF p_dest_schedule_id IS NULL THEN
13142
13143 Log_CopyDestListNullMsg('Move_ScheduleEntries_Pub','CHECK_DEST_SCHED_NULL', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13144
13145 RAISE fnd_api.g_exc_error;
13146
13147 END IF;
13148
13149
13150
13151 -- get list header ids corresponding to schedule ids
13152
13153 BEGIN
13154
13155 IEC_COMMON_UTIL_PVT.Get_ListId(p_src_schedule_id, l_src_list_id);
13156
13157 IEC_COMMON_UTIL_PVT.Get_ListId(p_dest_schedule_id, l_dest_list_id);
13158
13159 EXCEPTION
13160
13161 WHEN OTHERS THEN
13162
13163 Log( 'Move_ScheduleEntries_Pub'
13164
13165 , 'GET_LIST_HEADER_ID'
13166
13167 );
13168
13169 END;
13170
13171
13172
13173 -- There is no work to be done if source and destination
13174
13175 -- lists are the same
13176
13177 IF l_src_list_id = l_dest_list_id THEN
13178
13179 RETURN;
13180
13181 END IF;
13182
13183
13184
13185 -- Perform prerequisite status checks.
13186
13187 EXECUTE IMMEDIATE
13188
13189 'SELECT A.CALL_CENTER_READY_FLAG
13190
13191 , A.STATUS_CODE
13192
13193 , B.VALIDATED_ONCE_FLAG
13194
13195 FROM IEC_G_AO_LISTS_V A
13196
13197 , IEC_O_VALIDATION_STATUS B
13198
13199 WHERE A.LIST_HEADER_ID = B.LIST_HEADER_ID
13200
13201 AND A.LIST_HEADER_ID = :list_id
13202
13203 AND LANGUAGE = USERENV(''LANG'')'
13204
13205 INTO l_call_center_ready_flag
13206
13207 , l_status_code
13208
13209 , l_validated_once_flag
13210
13211 USING l_src_list_id;
13212
13213
13214
13215 IF l_call_center_ready_flag <> 'Y' THEN
13216
13217 Log_CopySrcListNotCCRMsg('Move_ScheduleEntries_Pub','CHECK_SRC_SCHED_CCR', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13218
13219 RAISE fnd_api.g_exc_error;
13220
13221 END IF;
13222
13223 IF l_validated_once_flag <> 'Y' THEN
13224
13225 Log_CopySrcListNotValMsg('Move_ScheduleEntries_Pub','CHECK_SRC_SCHED_VAL_ONCE', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13226
13227 RAISE fnd_api.g_exc_error;
13228
13229 END IF;
13230
13231 -- not sure if we can do a move unless the list is stopped
13232
13233 -- what if record is checked out and we mark it dnu?
13234
13235 IF l_status_code <> 'ACTIVE' AND
13236
13237 l_status_code <> 'INACTIVE' AND
13238
13239 l_status_code <> 'VALIDATED'
13240
13241 THEN
13242
13243 Log_CopySrcListInvalidStatMsg('Move_ScheduleEntries_Pub','CHECK_SRC_SCHED_STATUS', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13244
13245 RAISE fnd_api.g_exc_error;
13246
13247 END IF;
13248
13249
13250
13251 EXECUTE IMMEDIATE
13252
13253 'SELECT A.CALL_CENTER_READY_FLAG
13254
13255 , A.STATUS_CODE
13256
13257 , B.VALIDATED_ONCE_FLAG
13258
13259 FROM IEC_G_AO_LISTS_V A
13260
13261 , IEC_O_VALIDATION_STATUS B
13262
13263 WHERE A.LIST_HEADER_ID = B.LIST_HEADER_ID
13264
13265 AND A.LIST_HEADER_ID = :list_id
13266
13267 AND LANGUAGE = USERENV(''LANG'')'
13268
13269 INTO l_call_center_ready_flag
13270
13271 , l_status_code
13272
13273 , l_validated_once_flag
13274
13275 USING l_dest_list_id;
13276
13277
13278
13279 IF l_call_center_ready_flag <> 'Y' THEN
13280
13281 Log_CopyDestListNotCCRMsg('Move_ScheduleEntries_Pub','CHECK_DEST_SCHED_CCR', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13282
13283 RAISE fnd_api.g_exc_error;
13284
13285 END IF;
13286
13287 IF l_validated_once_flag <> 'Y' THEN
13288
13289 Log_CopyDestListNotValMsg('Move_ScheduleEntries_Pub','CHECK_DEST_SCHED_VAL_ONCE', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13290
13291 RAISE fnd_api.g_exc_error;
13292
13293 END IF;
13294
13295 -- maybe want to ensure that list is shut down
13296
13297 IF l_status_code <> 'ACTIVE' AND
13298
13299 l_status_code <> 'INACTIVE' AND
13300
13301 l_status_code <> 'VALIDATED'
13302
13303 THEN
13304
13305 Log_CopyDestListInvalidStaMsg('Move_ScheduleEntries_Pub','CHECK_DEST_SCHED_STATUS', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13306
13307 RAISE fnd_api.g_exc_error;
13308
13309 END IF;
13310
13311
13312
13313 -- Update duplicate records
13314
13315 -- Must do this before move non-duplicate records b/c they will become
13316
13317 -- duplicates after the move
13318
13319 Update_DuplicateEntries
13320
13321 ( l_src_list_id
13322
13323 , l_dest_list_id
13324
13325 , TRUE -- p_mark_do_not_use
13326
13327 , l_records_updated
13328
13329 );
13330
13331
13332
13333 -- Fetch non-duplicate records
13334
13335 OPEN c1(l_src_list_id, l_dest_list_id);
13336
13337 LOOP
13338
13339 FETCH c1
13340
13341 BULK COLLECT INTO l_returns_id_col
13342
13343 LIMIT g_row_increment;
13344
13345
13346
13347 EXIT WHEN l_returns_id_col.COUNT = 0;
13348
13349
13350
13351 IF l_returns_id_col IS NOT NULL AND l_returns_id_col.COUNT > 0 THEN
13352
13353
13354
13355 -- Mark entries as do not use in source list
13356
13357 -- Retrieve the list_entry_id and list_header_id corresponding to the returns_id
13358
13359 -- Excludes duplicate party ids
13360
13361 Mark_EntriesDoNotUse( l_returns_id_col
13362
13363 , l_dest_list_id
13364
13365 , l_src_returns_id_col
13366
13367 , l_src_list_entry_id_col
13368
13369 , l_src_list_id_col
13370
13371 );
13372
13373
13374
13375 IF l_src_returns_id_col IS NOT NULL AND l_src_returns_id_col.COUNT > 0 THEN
13376
13377
13378
13379 -- Copy non-duplicate records into destination list
13380
13381 Copy_AmsListEntries( l_src_list_entry_id_col
13382
13383 , l_src_list_id_col
13384
13385 , l_dest_list_entry_id_col
13386
13387 , l_dest_list_id);
13388
13389
13390
13391 -- Load non-duplicate records into destination list
13392
13393 Load_Entries_Pvt( l_dest_list_entry_id_col
13394
13395 , l_dest_list_id
13396
13397 , 'Y' -- enable validation rules
13398
13399 );
13400
13401
13402
13403 -- Move call history for non-duplicate records
13404
13405 Move_CallHistory( l_src_returns_id_col
13406
13407 , l_dest_list_entry_id_col
13408
13409 , l_dest_list_id);
13410
13411
13412
13413 Truncate_Temporary_Tables;
13414
13415 END IF;
13416
13417
13418
13419 END IF;
13420
13421
13422
13423 IF p_commit THEN
13424
13425 COMMIT;
13426
13427 END IF;
13428
13429
13430
13431 EXIT WHEN l_returns_id_col.COUNT < g_row_increment;
13432
13433
13434
13435 END LOOP;
13436
13437 CLOSE c1;
13438
13439
13440
13441 EXCEPTION
13442
13443 WHEN OTHERS THEN
13444
13445 FND_MSG_PUB.ADD;
13446
13447 x_return_status := FND_API.G_RET_STS_ERROR;
13448
13449
13450
13451 END Move_ScheduleEntries_Pub;
13452
13453
13454
13455 PROCEDURE Copy_ScheduleEntries_Pvt
13456
13457 ( p_from_list_id IN NUMBER
13458
13459 , p_from_schedule_id IN NUMBER
13460
13461 , p_to_list_id IN NUMBER
13462
13463 , p_to_schedule_id IN NUMBER
13464
13465 , p_api_initiated IN BOOLEAN
13466
13467 , p_commit_flag IN BOOLEAN)
13468
13469 IS
13470
13471 l_from_returns_id_col SYSTEM.number_tbl_type;
13472
13473 l_from_list_entry_id_col SYSTEM.number_tbl_type;
13474
13475 l_from_list_id_col SYSTEM.number_tbl_type;
13476
13477 l_to_list_entry_id_col SYSTEM.number_tbl_type;
13478
13479
13480
13481 l_api_initiated BOOLEAN;
13482
13483
13484
13485 l_call_center_ready_flag VARCHAR2(1);
13486
13487 l_status_code VARCHAR2(30);
13488
13489 l_validated_once_flag VARCHAR2(1);
13490
13491
13492
13493 l_records_moved NUMBER := 0;
13494
13495 l_records_updated NUMBER := 0;
13496
13497
13498
13499 -- Cursor to retrieve non-duplicate records
13500
13501 CURSOR c1(from_list_id NUMBER) IS
13502
13503 SELECT B.RETURNS_ID, B.LIST_ENTRY_ID, B.LIST_HEADER_ID
13504
13505 FROM IEC_G_RETURN_ENTRIES B
13506
13507 WHERE B.LIST_HEADER_ID = from_list_id
13508
13509 AND B.LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID
13510
13511 FROM AMS_LIST_ENTRIES
13512
13513 WHERE B.LIST_HEADER_ID = LIST_HEADER_ID
13514
13515 AND B.LIST_ENTRY_ID = LIST_ENTRY_ID
13516
13517 AND PARTY_ID NOT IN (SELECT PARTY_ID
13518
13519 FROM AMS_LIST_ENTRIES
13520
13521 WHERE LIST_HEADER_ID = p_to_list_id));
13522
13523
13524
13525 BEGIN
13526
13527
13528
13529 SAVEPOINT move_entry;
13530
13531
13532
13533 Init_LoggingVariables;
13534
13535 Set_MessagePrefix('copy_schedule_' || p_from_schedule_id || '_to_' || p_to_schedule_id);
13536
13537
13538
13539 -- There is no work to be done if source and destination
13540
13541 -- lists are the same
13542
13543 IF p_to_list_id = p_from_list_id THEN
13544
13545 RETURN;
13546
13547 END IF;
13548
13549
13550
13551 IF p_from_list_id IS NULL THEN
13552
13553 Log_CopySrcListNullMsg('Copy_ScheduleEntries_Pvt','CHECK_SRC_SCHED_NULL', Get_ScheduleName(p_from_schedule_id), Get_ScheduleName(p_to_schedule_id));
13554
13555 RAISE fnd_api.g_exc_error;
13556
13557 END IF;
13558
13559
13560
13561 IF p_to_list_id IS NULL THEN
13562
13563 Log_CopyDestListNullMsg('Copy_ScheduleEntries_Pvt','CHECK_DEST_SCHED_NULL', Get_ScheduleName(p_from_schedule_id), Get_ScheduleName(p_to_schedule_id));
13564
13565 RAISE fnd_api.g_exc_error;
13566
13567 END IF;
13568
13569
13570
13571 l_api_initiated := FALSE; -- Default value
13572
13573 IF p_api_initiated IS NOT NULL THEN
13574
13575 l_api_initiated := p_api_initiated;
13576
13577 END IF;
13578
13579
13580
13581 -- Perform prerequisite status checks. This is only
13582
13583 -- necessary when we initiate the copy via the public api
13584
13585 -- b/c this is handled via plugin and view IEC_O_LISTS_TO_COPY_V
13586
13587 -- when the copy is initiated via the admin screens.
13588
13589 IF l_api_initiated THEN
13590
13591 EXECUTE IMMEDIATE
13592
13593 'SELECT A.CALL_CENTER_READY_FLAG
13594
13595 , A.STATUS_CODE
13596
13597 , B.VALIDATED_ONCE_FLAG
13598
13599 FROM IEC_G_AO_LISTS_V A
13600
13601 , IEC_O_VALIDATION_STATUS B
13602
13603 WHERE A.LIST_HEADER_ID = B.LIST_HEADER_ID
13604
13605 AND A.LIST_HEADER_ID = :list_id
13606
13607 AND LANGUAGE = USERENV(''LANG'')'
13608
13609 INTO l_call_center_ready_flag
13610
13611 , l_status_code
13612
13613 , l_validated_once_flag
13614
13615 USING p_from_list_id;
13616
13617
13618
13619 IF l_call_center_ready_flag <> 'Y' THEN
13620
13621 Log_CopySrcListNotCCRMsg('Copy_ScheduleEntries_Pvt','CHECK_SRC_SCHED_CCR', Get_ScheduleName(p_from_schedule_id), Get_ScheduleName(p_to_schedule_id));
13622
13623 RAISE fnd_api.g_exc_error;
13624
13625 END IF;
13626
13627 IF l_validated_once_flag <> 'Y' THEN
13628
13629 Log_CopySrcListNotValMsg('Copy_ScheduleEntries_Pvt','CHECK_SRC_SCHED_VAL_ONCE', Get_ScheduleName(p_from_schedule_id), Get_ScheduleName(p_to_schedule_id));
13630
13631 RAISE fnd_api.g_exc_error;
13632
13633 END IF;
13634
13635 IF l_status_code <> 'ACTIVE' AND
13636
13637 l_status_code <> 'INACTIVE' AND
13638
13639 l_status_code <> 'VALIDATED'
13640
13641 THEN
13642
13643 Log_CopySrcListInvalidStatMsg('Copy_ScheduleEntries_Pvt','CHECK_SRC_SCHED_STATUS', Get_ScheduleName(p_from_schedule_id), Get_ScheduleName(p_to_schedule_id));
13644
13645 RAISE fnd_api.g_exc_error;
13646
13647 END IF;
13648
13649
13650
13651 EXECUTE IMMEDIATE
13652
13653 'SELECT A.CALL_CENTER_READY_FLAG
13654
13655 , A.STATUS_CODE
13656
13657 , B.VALIDATED_ONCE_FLAG
13658
13659 FROM IEC_G_AO_LISTS_V A
13660
13661 , IEC_O_VALIDATION_STATUS B
13662
13663 WHERE A.LIST_HEADER_ID = B.LIST_HEADER_ID
13664
13665 AND A.LIST_HEADER_ID = :list_id
13666
13667 AND LANGUAGE = USERENV(''LANG'')'
13668
13669 INTO l_call_center_ready_flag
13670
13671 , l_status_code
13672
13673 , l_validated_once_flag
13674
13675 USING p_to_list_id;
13676
13677
13678
13679 IF l_call_center_ready_flag <> 'Y' THEN
13680
13681 Log_CopyDestListNotCCRMsg('Copy_ScheduleEntries_Pvt','CHECK_DEST_SCHED_CCR', Get_ScheduleName(p_from_schedule_id), Get_ScheduleName(p_to_schedule_id));
13682
13683 RAISE fnd_api.g_exc_error;
13684
13685 END IF;
13686
13687 IF l_validated_once_flag <> 'Y' THEN
13688
13689 Log_CopyDestListNotValMsg('Copy_ScheduleEntries_Pvt','CHECK_DEST_SCHED_VAL_ONCE', Get_ScheduleName(p_from_schedule_id), Get_ScheduleName(p_to_schedule_id));
13690
13691 RAISE fnd_api.g_exc_error;
13692
13693 END IF;
13694
13695 IF l_status_code <> 'ACTIVE' AND
13696
13697 l_status_code <> 'INACTIVE' AND
13698
13699 l_status_code <> 'VALIDATED'
13700
13701 THEN
13702
13703 Log_CopyDestListInvalidStaMsg('Copy_ScheduleEntries_Pvt','CHECK_DEST_SCHED_STATUS', Get_ScheduleName(p_from_schedule_id), Get_ScheduleName(p_to_schedule_id));
13704
13705 RAISE fnd_api.g_exc_error;
13706
13707 END IF;
13708
13709
13710
13711 END IF;
13712
13713
13714
13715 Update_MoveEntriesStatus(p_from_list_id, p_to_list_id, 'MOVING', l_api_initiated);
13716
13717
13718
13719 -- Update party/contact point data for duplicate records in destination list
13720
13721 Update_DuplicateEntries( P_from_list_id
13722
13723 , p_to_list_id
13724
13725 , FALSE
13726
13727 , l_records_updated);
13728
13729
13730
13731 Update_MoveEntriesStatusCounts(p_from_list_id, 0, l_records_updated);
13732
13733
13734
13735 IF p_commit_flag THEN
13736
13737 COMMIT;
13738
13739 END IF;
13740
13741
13742
13743 -- Fetch non-duplicate records
13744
13745 OPEN c1(p_from_list_id);
13746
13747 LOOP
13748
13749 FETCH c1
13750
13751 BULK COLLECT INTO l_from_returns_id_col
13752
13753 , l_from_list_entry_id_col
13754
13755 , l_from_list_id_col
13756
13757 LIMIT g_row_increment;
13758
13759
13760
13761 EXIT WHEN l_from_returns_id_col.COUNT = 0;
13762
13763
13764
13765 l_records_moved := l_from_returns_id_col.COUNT;
13766
13767
13768
13769 IF l_from_returns_id_col IS NOT NULL AND l_from_returns_id_col.COUNT > 0 THEN
13770
13771
13772
13773 -- Copy non-duplicate records into destination list
13774
13775 Copy_AmsListEntries( l_from_list_entry_id_col
13776
13777 , l_from_list_id_col
13778
13779 , l_to_list_entry_id_col
13780
13781 , p_to_list_id);
13782
13783
13784
13785 -- Load non-duplicate records into destination list
13786
13787 Load_Entries_Pvt( l_to_list_entry_id_col
13788
13789 , p_to_list_id
13790
13791 , 'Y' -- enable validation rules
13792
13793 );
13794
13795
13796
13797 Update_MoveEntriesStatusCounts(p_from_list_id, l_records_moved, 0);
13798
13799 END IF;
13800
13801
13802
13803 IF p_commit_flag THEN
13804
13805 COMMIT;
13806
13807 END IF;
13808
13809
13810
13811 EXIT WHEN l_from_returns_id_col.COUNT < g_row_increment;
13812
13813
13814
13815 END LOOP;
13816
13817 CLOSE c1;
13818
13819
13820
13821 Update_MoveEntriesStatus(p_from_list_id, p_to_list_id, 'MOVED', l_api_initiated);
13822
13823
13824
13825 IF p_commit_flag THEN
13826
13827 COMMIT;
13828
13829 END IF;
13830
13831
13832
13833 EXCEPTION
13834
13835 WHEN fnd_api.g_exc_error THEN
13836
13837 ROLLBACK TO move_entry;
13838
13839 Update_MoveEntriesStatus(p_from_list_id, p_to_list_id, 'FAILED_MOVE', l_api_initiated);
13840
13841 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
13842
13843 WHEN fnd_api.g_exc_unexpected_error THEN
13844
13845 ROLLBACK TO move_entry;
13846
13847 Update_MoveEntriesStatus(p_from_list_id, p_to_list_id, 'FAILED_MOVE', l_api_initiated);
13848
13849 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
13850
13851 WHEN OTHERS THEN
13852
13853 ROLLBACK TO move_entry;
13854
13855 Log( 'Copy_ScheduleEntries'
13856
13857 , 'MAIN'
13858
13859 , SQLERRM
13860
13861 );
13862
13863 Update_MoveEntriesStatus(p_from_list_id, p_to_list_id, 'FAILED_MOVE', l_api_initiated);
13864
13865 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
13866
13867
13868
13869 END Copy_ScheduleEntries_Pvt;
13870
13871
13872
13873 -- Procedure to be called by public api to copy schedule
13874
13875 -- entries
13876
13877 PROCEDURE Copy_ScheduleEntries_Pub
13878
13879 ( p_src_schedule_id IN NUMBER
13880
13881 , p_dest_schedule_id IN NUMBER
13882
13883 , p_commit IN BOOLEAN
13884
13885 , x_return_status OUT NOCOPY VARCHAR2)
13886
13887 IS
13888
13889 l_src_list_id NUMBER(15);
13890
13891 l_dest_list_id NUMBER(15);
13892
13893 BEGIN
13894
13895
13896
13897 x_return_status := FND_API.G_RET_STS_SUCCESS;
13898
13899
13900
13901 IF p_src_schedule_id IS NULL THEN
13902
13903 Log_CopySrcListNullMsg('Copy_ScheduleEntries_Pub','CHECK_SRC_SCHED_NULL', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13904
13905 RAISE fnd_api.g_exc_error;
13906
13907 END IF;
13908
13909
13910
13911 IF p_dest_schedule_id IS NULL THEN
13912
13913 Log_CopyDestListNullMsg('Copy_ScheduleEntries_Pub','CHECK_DEST_SCHED_NULL', Get_ScheduleName(p_src_schedule_id), Get_ScheduleName(p_dest_schedule_id));
13914
13915 RAISE fnd_api.g_exc_error;
13916
13917 END IF;
13918
13919
13920
13921 -- get list header ids corresponding to schedule ids
13922
13923 BEGIN
13924
13925 IEC_COMMON_UTIL_PVT.Get_ListId(p_src_schedule_id, l_src_list_id);
13926
13927 IEC_COMMON_UTIL_PVT.Get_ListId(p_dest_schedule_id, l_dest_list_id);
13928
13929 EXCEPTION
13930
13931 WHEN OTHERS THEN
13932
13933 Log( 'Copy_ScheduleEntries_Pub'
13934
13935 , 'GET_LIST_HEADER_ID'
13936
13937 );
13938
13939 RAISE fnd_api.g_exc_error;
13940
13941 END;
13942
13943
13944
13945 Copy_ScheduleEntries_Pvt
13946
13947 ( l_src_list_id
13948
13949 , p_src_schedule_id
13950
13951 , l_dest_list_id
13952
13953 , p_dest_schedule_id
13954
13955 , TRUE -- p_api_initiated
13956
13957 , p_commit
13958
13959 );
13960
13961
13962
13963 EXCEPTION
13964
13965 WHEN OTHERS THEN
13966
13967 FND_MSG_PUB.ADD;
13968
13969 x_return_status := FND_API.G_RET_STS_ERROR;
13970
13971
13972
13973 END Copy_ScheduleEntries_Pub;
13974
13975
13976
13977 -- Procedure to be called by plugin to copy schedule
13978
13979 -- entries (leaving name as Copy_TargetGroupEntries so
13980
13981 -- that existing calls will still be valid)
13982
13983 PROCEDURE Copy_TargetGroupEntries
13984
13985 ( p_from_list_id IN NUMBER
13986
13987 , p_to_list_id IN NUMBER)
13988
13989 IS
13990
13991 BEGIN
13992
13993
13994
13995 Copy_ScheduleEntries_Pvt
13996
13997 ( p_from_list_id
13998
13999 , Get_ScheduleId(p_from_list_id)
14000
14001 , p_to_list_id
14002
14003 , Get_ScheduleId(p_to_list_id)
14004
14005 , FALSE -- p_api_initiated
14006
14007 , TRUE -- p_commit_flag
14008
14009 );
14010
14011
14012
14013 EXCEPTION
14014
14015 WHEN OTHERS THEN
14016
14017 RAISE;
14018
14019 END Copy_TargetGroupEntries;
14020
14021
14022
14023 PROCEDURE Load_NewEntry
14024
14025 ( p_list_entry_id IN NUMBER
14026
14027 , p_list_id IN NUMBER)
14028
14029 IS
14030
14031 l_list_entry_id_col SYSTEM.NUMBER_TBL_TYPE := SYSTEM.NUMBER_TBL_TYPE();
14032
14033 BEGIN
14034
14035
14036
14037 SAVEPOINT load_entry;
14038
14039
14040
14041 l_list_entry_id_col.EXTEND;
14042
14043 l_list_entry_id_col(1) := p_list_entry_id;
14044
14045
14046
14047 Load_Entries_Pvt( l_list_entry_id_col
14048
14049 , p_list_id
14050
14051 , 'N' -- disable validation rules
14052
14053 );
14054
14055
14056
14057 EXCEPTION
14058
14059 WHEN fnd_api.g_exc_error THEN
14060
14061 ROLLBACK TO load_entry;
14062
14063 Truncate_Temporary_Tables;
14064
14065 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
14066
14067 WHEN fnd_api.g_exc_unexpected_error THEN
14068
14069 ROLLBACK TO load_entry;
14070
14071 Truncate_Temporary_Tables;
14072
14073 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
14074
14075 WHEN OTHERS THEN
14076
14077 Log( 'Load_NewEntry'
14078
14079 , 'MAIN'
14080
14081 , SQLERRM
14082
14083 );
14084
14085 ROLLBACK TO load_entry;
14086
14087 Truncate_Temporary_Tables;
14088
14089 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
14090
14091
14092
14093 END Load_NewEntry;
14094
14095
14096
14097 PROCEDURE Load_NewEntries
14098
14099 ( p_list_entry_id_col IN SYSTEM.number_tbl_type
14100
14101 , p_list_id IN NUMBER)
14102
14103 IS
14104
14105 BEGIN
14106
14107
14108
14109 SAVEPOINT load_entry;
14110
14111
14112
14113 Load_Entries_Pvt( p_list_entry_id_col
14114
14115 , p_list_id
14116
14117 , 'N' -- disable validation rules
14118
14119 );
14120
14121
14122
14123 EXCEPTION
14124
14125 WHEN fnd_api.g_exc_error THEN
14126
14127 ROLLBACK TO load_entry;
14128
14129 Truncate_Temporary_Tables;
14130
14131 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
14132
14133 WHEN fnd_api.g_exc_unexpected_error THEN
14134
14135 ROLLBACK TO load_entry;
14136
14137 Truncate_Temporary_Tables;
14138
14139 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
14140
14141 WHEN OTHERS THEN
14142
14143 Log( 'Load_NewEntries'
14144
14145 , 'MAIN'
14146
14147 , SQLERRM
14148
14149 );
14150
14151 ROLLBACK TO load_entry;
14152
14153 Truncate_Temporary_Tables;
14154
14155 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
14156
14157
14158
14159 END Load_NewEntries;
14160
14161
14162
14163 PROCEDURE Insert_AmsListEntries
14164
14165 ( p_list_id IN NUMBER
14166
14167 , p_list_source_type IN VARCHAR2
14168
14169 , p_list_source_code IN VARCHAR2
14170
14171 , p_schedule_id IN NUMBER
14172
14173 , p_party_id IN NUMBER
14174
14175 , x_list_entry_id OUT NOCOPY NUMBER
14176
14177 )
14178 IS
14179 l_api_version CONSTANT NUMBER := 1.0;
14180 l_init_msg_list VARCHAR2(1);
14181 l_return_status VARCHAR2(1);
14182 l_msg_count NUMBER;
14183 l_msg_data VARCHAR2(2000);
14184 l_listentry_rec AMS_LISTENTRY_PVT.entry_rec_type;
14185 BEGIN
14186 l_init_msg_list :=FND_API.G_TRUE;
14187
14188 IF p_party_id IS NOT NULL THEN
14189
14190 l_listentry_rec.LIST_HEADER_ID := p_list_id;
14191
14192 l_listentry_rec.LAST_UPDATE_DATE := sysdate;
14193
14194 l_listentry_rec.LAST_UPDATED_BY := 1;
14195
14196 l_listentry_rec.CREATION_DATE := sysdate;
14197
14198 l_listentry_rec.CREATED_BY := 1;
14199
14200 l_listentry_rec.LIST_SELECT_ACTION_ID := 0;
14201
14202 l_listentry_rec.ARC_LIST_SELECT_ACTION_FROM :='NONE';
14203
14204 l_listentry_rec.SOURCE_CODE := p_list_source_code;
14205
14206 l_listentry_rec.ARC_LIST_USED_BY_SOURCE := 'CSCH';
14207
14208 l_listentry_rec.SOURCE_CODE_FOR_ID := p_schedule_id;
14209
14210 l_listentry_rec.LIST_ENTRY_SOURCE_SYSTEM_ID := p_party_id;
14211
14212 l_listentry_rec.LIST_ENTRY_SOURCE_SYSTEM_TYPE := p_list_source_type;
14213
14214 l_listentry_rec.VIEW_APPLICATION_ID := 545;
14215
14216 l_listentry_rec.MANUALLY_ENTERED_FLAG := 'N';
14217
14218 l_listentry_rec.MARKED_AS_DUPLICATE_FLAG := 'N';
14219
14220 l_listentry_rec.MARKED_AS_RANDOM_FLAG := 'N';
14221
14222 l_listentry_rec.PART_OF_CONTROL_GROUP_FLAG := 'N';
14223
14224 l_listentry_rec.EXCLUDE_IN_TRIGGERED_LIST_FLAG := 'N';
14225
14226 l_listentry_rec.ENABLED_FLAG := 'Y';
14227
14228 AMS_LISTENTRY_PUB.create_listentry(
14229 p_api_version => l_api_version,
14230 p_init_msg_list => l_init_msg_list,
14231 x_return_status => l_return_status,
14232 x_msg_count => l_msg_count,
14233 x_msg_data => l_msg_data,
14234 p_entry_rec => l_listentry_rec,
14235 x_entry_id => x_list_entry_id );
14236
14237 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14238 Log_msg('AMS_LISTENTRY_PUB.create_listentry', l_msg_data);
14239 END IF;
14240
14241 /*
14242 EXECUTE IMMEDIATE
14243
14244 'SELECT AMS_LIST_ENTRIES_S.NEXTVAL FROM DUAL'
14245
14246 INTO x_list_entry_id;
14247
14248
14249
14250 EXECUTE IMMEDIATE
14251
14252 'INSERT INTO AMS_LIST_ENTRIES
14253
14254 ( LIST_ENTRY_ID
14255
14256 , LIST_HEADER_ID
14257
14258 , LAST_UPDATE_DATE
14259
14260 , LAST_UPDATED_BY
14261
14262 , CREATION_DATE
14263
14264 , CREATED_BY
14265
14266 , LIST_SELECT_ACTION_ID
14267
14268 , ARC_LIST_SELECT_ACTION_FROM
14269
14270 , SOURCE_CODE
14271
14272 , ARC_LIST_USED_BY_SOURCE
14273
14274 , SOURCE_CODE_FOR_ID
14275
14276 , PIN_CODE
14277
14278 , LIST_ENTRY_SOURCE_SYSTEM_ID
14279
14280 , LIST_ENTRY_SOURCE_SYSTEM_TYPE
14281
14282 , VIEW_APPLICATION_ID
14283
14284 , MANUALLY_ENTERED_FLAG
14285
14286 , MARKED_AS_DUPLICATE_FLAG
14287
14288 , MARKED_AS_RANDOM_FLAG
14289
14290 , PART_OF_CONTROL_GROUP_FLAG
14291
14292 , EXCLUDE_IN_TRIGGERED_LIST_FLAG
14293
14294 , ENABLED_FLAG
14295
14296 )
14297
14298 VALUES
14299
14300 ( :list_entry_id
14301
14302 , :list_header_id
14303
14304 , SYSDATE
14305
14306 , 1
14307
14308 , SYSDATE
14309
14310 , 1
14311
14312 , 0
14313
14314 , ''NONE''
14315
14316 , :list_source_code
14317
14318 , ''CSCH''
14319
14320 , :schedule_id
14321
14322 , :list_entry_id
14323
14324 , :party_id
14325
14326 , :list_source_type
14327
14328 , 545
14329
14330 , ''N''
14331
14332 , ''N''
14333
14334 , ''N''
14335
14336 , ''N''
14337
14338 , ''N''
14339
14340 , ''Y''
14341
14342 )'
14343
14344 USING IN x_list_entry_id
14345
14346 , IN p_list_id
14347
14348 , IN p_list_source_code
14349
14350 , IN p_schedule_id
14351
14352 , IN x_list_entry_id
14353
14354 , IN p_party_id
14355
14356 , IN p_list_source_type;
14357 */
14358 END IF;
14359
14360 EXCEPTION
14361
14362 WHEN OTHERS THEN
14363
14364 Log( 'Insert_AmsListEntries'
14365
14366 , 'MAIN'
14367
14368 , SQLERRM
14369
14370 );
14371
14372 RAISE fnd_api.g_exc_unexpected_error;
14373
14374
14375
14376 END Insert_AmsListEntries;
14377
14378
14379
14380 PROCEDURE Update_AmsListEntries
14381
14382 ( p_list_id IN NUMBER
14383
14384 , p_list_entry_id IN NUMBER
14385
14386 , p_source_type_view IN VARCHAR2
14387
14388 , p_col_names IN SYSTEM.varchar_tbl_type
14389
14390 , p_col_values IN SYSTEM.varchar_tbl_type
14391
14392 )
14393
14394 IS
14395
14396 l_sql VARCHAR2(4000);
14397
14398 l_first_col_idx NUMBER;
14399
14400 BEGIN
14401
14402 l_first_col_idx := -1;
14403
14404
14405
14406 IF p_list_entry_id IS NOT NULL THEN
14407
14408
14409
14410 l_sql := 'UPDATE ' || p_source_type_view;
14411
14412
14413
14414 l_sql := l_sql || ' SET LIST_ENTRY_ID = ''' || p_list_entry_id || '''';
14415
14416
14417
14418 IF p_col_names.COUNT > 0 THEN
14419
14420 FOR i IN 1..p_col_names.LAST LOOP
14421
14422 IF p_col_names(i) IS NOT NULL THEN
14423
14424 l_sql := l_sql || ', ' || p_col_names(i) || ' = ''' || p_col_values(i) || '''';
14425
14426 END IF;
14427
14428 END LOOP;
14429
14430 END IF;
14431
14432
14433
14434 l_sql := l_sql || ' WHERE LIST_HEADER_ID = ' || p_list_id;
14435
14436 l_sql := l_sql || ' AND LIST_ENTRY_ID = ' || p_list_entry_id;
14437
14438
14439
14440 EXECUTE IMMEDIATE l_sql;
14441
14442
14443
14444 END IF;
14445
14446
14447
14448 EXCEPTION
14449
14450 WHEN OTHERS THEN
14451
14452 Log( 'Updating_AmsListEntries'
14453
14454 , 'MAIN'
14455
14456 , SQLERRM
14457
14458 );
14459
14460 RAISE fnd_api.g_exc_unexpected_error;
14461
14462
14463
14464 END Update_AmsListEntries;
14465
14466 /*
14467
14468 PROCEDURE Init_RequiredColumns
14469
14470 ( x_col_names OUT NOCOPY SYSTEM.varchar_tbl_type
14471
14472 , x_col_exists_flag OUT NOCOPY SYSTEM.varchar_tbl_type
14473
14474 )
14475
14476 IS
14477
14478 BEGIN
14479
14480 x_col_names := SYSTEM.varchar_tbl_type();
14481
14482 x_col_exists_flag := SYSTEM.varchar_tbl_type();
14483
14484
14485
14486 x_col_names.EXTEND(9);
14487
14488 x_col_names(1) := 'PARTY_ID';
14489
14490 x_col_names(2) := 'PERSON_FIRST_NAME';
14491
14492 x_col_names(3) := 'PERSON_LAST_NAME';
14493
14494 x_col_names(4) := 'CONTACT_POINT_ID_S1';
14495
14496 x_col_names(5) := 'PHONE_COUNTRY_CODE_S1';
14497
14498 x_col_names(6) := 'PHONE_AREA_CODE_S1';
14499
14500 x_col_names(7) := 'PHONE_NUMBER_S1';
14501
14502 x_col_names(8) := 'TIME_ZONE_S1';
14503
14504 x_col_names(9) := 'PHONE_LINE_TYPE_S1';
14505
14506
14507
14508 x_col_exists_flag.EXTEND(1);
14509
14510 x_col_exists_flag(1) := 'N';
14511
14512 x_col_exists_flag.EXTEND(8,1);
14513
14514
14515
14516 END Init_RequiredColumns;
14517
14518
14519
14520 PROCEDURE Verify_RequiredColumns
14521
14522 ( p_col_names IN SYSTEM.varchar_tbl_type
14523
14524 x_missing_col_names OUT NOCOPY SYSTEM.varchar_tbl_type
14525
14526 x_failure_code OUT NOCOPY VARCHAR2
14527
14528 )
14529
14530 IS
14531
14532 l_req_col_names SYSTEM.varchar_tbl_type;
14533
14534 l_req_col_exists_flag SYSTEM.varchar_tbl_type;
14535
14536 BEGIN
14537
14538
14539
14540 Init_RequiredColumns(l_req_col_names, l_req_col_exists_flag);
14541
14542
14543
14544 IF p_col_names IS NOT NULL AND p_col_names.COUNT > 0 THEN
14545
14546 FOR i IN p_col_names.FIRST .. p_col_names.LAST LOOP
14547
14548 FOR j IN l_req_col_names.FIRST .. l_req_col_names.LAST LOOP
14549
14550 IF p_col_names(i) = l_req_col_names(j) THEN
14551
14552 l_req_col_exists_flag(j) := 'Y';
14553
14554 BREAK;
14555
14556 END IF;
14557
14558 END LOOP;
14559
14560 END LOOP;
14561
14562 END IF;
14563
14564
14565
14566 FOR i IN l_req_col_exists_flag.FIRST..l_req_col_exists_flag.LAST LOOP
14567
14568 IF l_req_col_exists_flag(i) <> 'Y' THEN
14569
14570 IF x_missing_col_names IS NULL THEN
14571
14572 x_missing_col_names := SYSTEM.varchar_tbl_type();
14573
14574 END IF;
14575
14576 x_missing_col_names.EXTEND;
14577
14578 x_missing_col_names(x_missing_col_names.LAST) := l_req_col_names(i);
14579
14580 END IF;
14581
14582 END LOOP;
14583
14584
14585
14586 END Verify_RequiredColumns;
14587
14588 */
14589
14590
14591
14592 FUNCTION ToString_ColumnValuePairs
14593
14594 ( p_col_names IN SYSTEM.varchar_tbl_type
14595
14596 , p_col_values IN SYSTEM.varchar_tbl_type
14597
14598 )
14599
14600 RETURN VARCHAR2
14601
14602 IS
14603
14604 l_string VARCHAR2(4000);
14605
14606 BEGIN
14607
14608
14609
14610 IF p_col_names IS NOT NULL AND p_col_names.COUNT > 0 THEN
14611
14612 FOR i IN p_col_names.FIRST .. p_col_names.LAST LOOP
14613
14614 l_string := l_string || '(' || p_col_names(i) || '=' || p_col_values(i) || ')';
14615
14616 END LOOP;
14617
14618 END IF;
14619
14620 RETURN l_string;
14621
14622
14623
14624 END ToString_ColumnValuePairs;
14625
14626
14627
14628 -- Verify the parameters necessary to insert a record
14629
14630 -- into AMS_LIST_ENTRIES with one contact point, and to
14631
14632 -- validate the record
14633
14634 PROCEDURE Verify_AllRequiredColumns
14635
14636 ( p_col_names IN SYSTEM.varchar_tbl_type
14637
14638 , p_col_values IN SYSTEM.varchar_tbl_type
14639
14640 , x_party_id OUT NOCOPY NUMBER
14641
14642 , x_failure_code OUT NOCOPY VARCHAR2
14643
14644 )
14645
14646 IS
14647
14648 BEGIN
14649
14650
14651
14652 IF p_col_names IS NOT NULL AND p_col_names.COUNT > 0 THEN
14653
14654
14655
14656 -- assume that no party id is provided until found
14657
14658 x_failure_code := 490;
14659
14660
14661
14662 <<verify_party_id>>
14663
14664 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14665
14666 IF p_col_names(i) = 'PARTY_ID' AND p_col_values(i) IS NOT NULL THEN
14667
14668 x_party_id := p_col_values(i);
14669
14670 x_failure_code := 491;
14671
14672 GOTO verify_first_name;
14673
14674 END IF;
14675
14676 END LOOP;
14677
14678 RETURN;
14679
14680
14681
14682 <<verify_first_name>>
14683
14684 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14685
14686 IF p_col_names(i) = 'PERSON_FIRST_NAME' AND p_col_values(i) IS NOT NULL THEN
14687
14688 x_failure_code := 492;
14689
14690 GOTO verify_last_name;
14691
14692 END IF;
14693
14694 END LOOP;
14695
14696 RETURN;
14697
14698
14699
14700 <<verify_last_name>>
14701
14702 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14703
14704 IF p_col_names(i) = 'PERSON_LAST_NAME' AND p_col_values(i) IS NOT NULL THEN
14705
14706 x_failure_code := 493;
14707
14708 GOTO verify_contact_point_id;
14709
14710 END IF;
14711
14712 END LOOP;
14713
14714 RETURN;
14715
14716
14717
14718 <<verify_contact_point_id>>
14719
14720 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14721
14722 IF p_col_names(i) = 'CONTACT_POINT_ID_S1' AND p_col_values(i) IS NOT NULL THEN
14723
14724 x_failure_code := 494;
14725
14726 GOTO verify_country_code;
14727
14728 END IF;
14729
14730 END LOOP;
14731
14732 RETURN;
14733
14734
14735
14736 <<verify_country_code>>
14737
14738 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14739
14740 IF p_col_names(i) = 'PHONE_COUNTRY_CODE_S1' AND p_col_values(i) IS NOT NULL THEN
14741
14742 x_failure_code := 495;
14743
14744 GOTO verify_area_code;
14745
14746 END IF;
14747
14748 END LOOP;
14749
14750 RETURN;
14751
14752
14753
14754 <<verify_area_code>>
14755
14756 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14757
14758 IF p_col_names(i) = 'PHONE_AREA_CODE_S1' AND p_col_values(i) IS NOT NULL THEN
14759
14760 x_failure_code := 496;
14761
14762 GOTO verify_phone_number;
14763
14764 END IF;
14765
14766 END LOOP;
14767
14768 RETURN;
14769
14770
14771
14772 <<verify_phone_number>>
14773
14774 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14775
14776 IF p_col_names(i) = 'PHONE_NUMBER_S1' AND p_col_values(i) IS NOT NULL THEN
14777
14778 x_failure_code := 497;
14779
14780 GOTO verify_time_zone;
14781
14782 END IF;
14783
14784 END LOOP;
14785
14786 RETURN;
14787
14788
14789
14790 <<verify_time_zone>>
14791
14792 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14793
14794 IF p_col_names(i) = 'TIME_ZONE_S1' AND p_col_values(i) IS NOT NULL THEN
14795
14796 x_failure_code := NULL;
14797
14798 EXIT;
14799
14800 END IF;
14801
14802 END LOOP;
14803
14804 RETURN;
14805
14806
14807
14808 ELSE
14809
14810 -- if no columns provided, default to missing party id
14811
14812 x_party_id := NULL;
14813
14814 x_failure_code := 490;
14815
14816 END IF;
14817
14818
14819
14820 END Verify_AllRequiredColumns;
14821
14822
14823
14824 -- Verify only the parameters necessary to insert a record
14825
14826 -- into AMS_LIST_ENTRIES with one contact point
14827
14828 PROCEDURE Verify_MinRequiredColumns
14829
14830 ( p_col_names IN SYSTEM.varchar_tbl_type
14831
14832 , p_col_values IN SYSTEM.varchar_tbl_type
14833
14834 , x_party_id OUT NOCOPY NUMBER
14835
14836 , x_failure_code OUT NOCOPY VARCHAR2
14837
14838 )
14839
14840 IS
14841
14842 BEGIN
14843
14844
14845
14846 IF p_col_names IS NOT NULL AND p_col_names.COUNT > 0 THEN
14847
14848
14849
14850 x_failure_code := 490;
14851
14852
14853
14854 <<verify_party_id>>
14855
14856 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14857
14858 IF p_col_names(i) = 'PARTY_ID' AND p_col_values(i) IS NOT NULL THEN
14859
14860 x_party_id := p_col_values(i);
14861
14862 x_failure_code := 496;
14863
14864 GOTO verify_phone_number;
14865
14866 END IF;
14867
14868 END LOOP;
14869
14870 RETURN;
14871
14872
14873
14874 <<verify_phone_number>>
14875
14876 FOR i IN p_col_names.FIRST..p_col_names.LAST LOOP
14877
14878 IF p_col_names(i) = 'PHONE_NUMBER_S1' AND p_col_values(i) IS NOT NULL THEN
14879
14880 x_failure_code := NULL;
14881
14882 EXIT;
14883
14884 END IF;
14885
14886 END LOOP;
14887
14888 RETURN;
14889
14890
14891
14892 ELSE
14893
14894 -- if no columns provided, default to missing party id
14895
14896 x_party_id := NULL;
14897
14898 x_failure_code := 490;
14899
14900 END IF;
14901
14902
14903
14904 END Verify_MinRequiredColumns;
14905
14906
14907
14908 PROCEDURE Create_NewEntry
14909
14910 ( p_list_id IN NUMBER
14911
14912 , p_column_name IN SYSTEM.varchar_tbl_type
14913
14914 , p_column_value IN SYSTEM.varchar_tbl_type
14915
14916 , x_party_id OUT NOCOPY NUMBER
14917
14918 , x_list_entry_id OUT NOCOPY NUMBER
14919
14920 , x_failure_code OUT NOCOPY VARCHAR2
14921
14922 )
14923
14924 IS
14925
14926 l_count NUMBER;
14927
14928 BEGIN
14929
14930
14931
14932 x_failure_code := NULL;
14933
14934
14935
14936 -- Check for minimum columns required for insert into AMS_LIST_ENTRIES
14937
14938 Verify_MinRequiredColumns( p_column_name
14939
14940 , p_column_value
14941
14942 , x_party_id
14943
14944 , x_failure_code);
14945
14946
14947
14948 IF x_failure_code IS NOT NULL THEN
14949
14950 RETURN;
14951
14952 END IF;
14953
14954
14955
14956 -- Check for duplicate party id
14957
14958 BEGIN
14959
14960 EXECUTE IMMEDIATE
14961
14962 'SELECT COUNT(*)
14963
14964 FROM AMS_LIST_ENTRIES
14965
14966 WHERE LIST_HEADER_ID = :list_id
14967
14968 AND PARTY_ID = :party_id'
14969
14970 INTO l_count
14971
14972 USING IN p_list_id, IN x_party_id;
14973
14974 EXCEPTION
14975
14976 WHEN OTHERS THEN
14977
14978 Log( 'Add_Record_To_List'
14979
14980 , 'CHECK_DUPLICATE_PARTY_IN_LIST'
14981
14982 , SQLERRM
14983
14984 );
14985
14986 END;
14987
14988
14989
14990 -- If party already exists in list, then cannot add record
14991
14992 IF l_count > 0 THEN
14993
14994 x_failure_code := '499';
14995
14996 RETURN;
14997
14998 END IF;
14999
15000
15001
15002 -- Create record in AMS_LIST_ENTRIES
15003
15004 Insert_AmsListEntries( p_list_id
15005
15006 , Get_SourceType(p_list_id)
15007
15008 , Get_ScheduleSourceCode(p_list_id)
15009
15010 , Get_ScheduleId(p_list_id)
15011
15012 , x_party_id
15013
15014 , x_list_entry_id
15015
15016 );
15017
15018
15019
15020 -- Update record details in AMS_LIST_ENTRIES using Source Type Views
15021
15022 Update_AmsListEntries( p_list_id
15023
15024 , x_list_entry_id
15025
15026 , Get_SourceTypeView(p_list_id)
15027
15028 , p_column_name
15029
15030 , p_column_value
15031
15032 );
15033
15034
15035
15036 -- Update List Header Counts
15037
15038 Update_AmsListHeaderCounts( p_list_id
15039
15040 , 1
15041
15042 , 1
15043
15044 );
15045
15046
15047
15048 EXCEPTION
15049
15050 WHEN fnd_api.g_exc_error THEN
15051
15052 RAISE;
15053
15054 WHEN fnd_api.g_exc_unexpected_error THEN
15055
15056 RAISE;
15057
15058 WHEN OTHERS THEN
15059
15060 Log( 'Create_NewEntry'
15061
15062 , 'MAIN'
15063
15064 , SQLERRM
15065
15066 );
15067
15068 RAISE fnd_api.g_exc_unexpected_error;
15069
15070 END Create_NewEntry;
15071
15072
15073
15074 PROCEDURE Get_ValidationFailureCode
15075
15076 ( p_list_id IN NUMBER
15077
15078 , p_list_entry_id IN NUMBER
15079
15080 , x_failure_code OUT NOCOPY VARCHAR2
15081
15082 )
15083
15084 IS
15085
15086 BEGIN
15087
15088
15089
15090 x_failure_code := NULL;
15091
15092
15093
15094 EXECUTE IMMEDIATE
15095
15096 'SELECT DO_NOT_USE_REASON_S1
15097
15098 FROM IEC_O_VALIDATION_REPORT_DETS
15099
15100 WHERE LIST_HEADER_ID = :list_id
15101
15102 AND LIST_ENTRY_ID = :list_entry_id'
15103
15104 INTO x_failure_code
15105
15106 USING IN p_list_id, IN p_list_entry_id;
15107
15108
15109
15110 EXCEPTION
15111
15112 WHEN NO_DATA_FOUND THEN
15113
15114 x_failure_code := NULL;
15115
15116 WHEN OTHERS THEN
15117
15118 Log( 'Get_ValidationFailureCode'
15119
15120 , 'MAIN'
15121
15122 , SQLERRM
15123
15124 );
15125
15126 RAISE fnd_api.g_exc_unexpected_error;
15127
15128 END Get_ValidationFailureCode;
15129
15130
15131
15132 PROCEDURE Update_CallbackTime
15133
15134 ( p_list_id IN NUMBER
15135
15136 , p_list_entry_id IN NUMBER
15137
15138 , p_callback_time IN DATE
15139
15140 )
15141
15142 IS
15143
15144 l_callback_flag VARCHAR2(1);
15145
15146 BEGIN
15147
15148
15149
15150 IF p_callback_time IS NOT NULL THEN
15151
15152
15153
15154 EXECUTE IMMEDIATE
15155
15156 'UPDATE IEC_G_RETURN_ENTRIES
15157
15158 SET CALLBACK_FLAG = ''Y''
15159
15160 , NEXT_CALL_TIME = :callback_time
15161
15162 WHERE LIST_HEADER_ID = :list_id
15163
15164 AND LIST_ENTRY_ID = :list_entry_id'
15165
15166 USING IN p_callback_time
15167
15168 , IN p_list_id
15169
15170 , IN p_list_entry_id;
15171
15172 END IF;
15173
15174
15175
15176 EXCEPTION
15177
15178 WHEN OTHERS THEN
15179
15180 Log( 'Update_CallbackTime'
15181
15182 , 'MAIN'
15183
15184 , SQLERRM
15185
15186 );
15187
15188 RAISE fnd_api.g_exc_unexpected_error;
15189
15190 END Update_CallbackTime;
15191
15192
15193
15194 PROCEDURE Add_Record_To_List_Pvt
15195
15196 ( p_list_id IN NUMBER
15197
15198 , p_column_name IN SYSTEM.varchar_tbl_type
15199
15200 , p_column_value IN SYSTEM.varchar_tbl_type
15201
15202 , p_callback_time IN DATE
15203
15204 , p_interactive_mode IN BOOLEAN
15205
15206 , x_failure_code OUT NOCOPY VARCHAR2
15207
15208 )
15209
15210 IS
15211
15212 PRAGMA AUTONOMOUS_TRANSACTION;
15213
15214
15215
15216 l_list_entry_id NUMBER(15);
15217
15218 l_party_id NUMBER(15);
15219
15220 l_list_entry_id_col SYSTEM.NUMBER_TBL_TYPE := SYSTEM.NUMBER_TBL_TYPE();
15221
15222
15223
15224 BEGIN
15225
15226
15227
15228 x_failure_code := NULL;
15229
15230
15231
15232 -- Setup logging information
15233
15234 Init_LoggingVariables;
15235
15236 -- FND_MESSAGE.SET_NAME( 'IEC'
15237
15238 -- , 'IEC_LOG_ADD_PARTY_EXCEPTION');
15239
15240 -- FND_MESSAGE.SET_TOKEN( 'RECORD'
15241
15242 -- , NVL(ToString_ColumnValuePairs(p_column_name,p_column_value), 'UNKNOWN')
15243
15244 -- , TRUE);
15245
15246 -- FND_MESSAGE.SET_TOKEN( 'TARGET_GROUP_NAME'
15247
15248 -- , NVL(Get_ListName(p_list_id), 'UNKNOWN')
15249
15250 -- , TRUE);
15251
15252 -- FND_MESSAGE.SET_TOKEN( 'LIST_HEADER_ID'
15253
15254 -- , NVL(TO_CHAR(p_list_id), 'UNKNOWN')
15255
15256 -- , TRUE);
15257
15258 -- Set_MessagePrefix(FND_MESSAGE.GET);
15259
15260 Set_MessagePrefix('add_list_entry');
15261
15262
15263
15264 -- In interactive mode, require all parameters for first contact point
15265
15266 -- Requirements may be relaxed in future, but this makes sense for now
15267
15268 -- since validation rules are not used in to validate this record.
15269
15270 -- In batch mode, we do not require all parameters - we only require
15271
15272 -- enough parameters to insert the record into AMS_LIST_ENTRIES since
15273
15274 -- it doesn't matter if the record fails validation.
15275
15276 IF p_interactive_mode THEN
15277
15278 Verify_AllRequiredColumns( p_column_name
15279
15280 , p_column_value
15281
15282 , l_party_id
15283
15284 , x_failure_code
15285
15286 );
15287
15288 IF x_failure_code IS NOT NULL THEN
15289
15290 ROLLBACK;
15291
15292 RETURN;
15293
15294 END IF;
15295
15296 END IF;
15297
15298
15299
15300 -- Create the new entry in AMS_LIST_ENTRIES
15301
15302 Create_NewEntry( p_list_id
15303
15304 , p_column_name
15305
15306 , p_column_value
15307
15308 , l_party_id
15309
15310 , l_list_entry_id
15311
15312 , x_failure_code
15313
15314 );
15315
15316
15317
15318 -- Must rollback if unable to insert entry into AMS_LIST_ENTRIES
15319
15320 -- Possible reasons include missing parameters, or duplicate party id
15321
15322 IF x_failure_code IS NOT NULL THEN
15323
15324 ROLLBACK;
15325
15326 RETURN;
15327
15328 END IF;
15329
15330
15331
15332 -- Load the new entry into the system
15333
15334 l_list_entry_id_col.EXTEND;
15335
15336 l_list_entry_id_col(1) := l_list_entry_id;
15337
15338
15339
15340 Load_Entries_Pvt( l_list_entry_id_col
15341
15342 , p_list_id
15343
15344 , 'N' -- disable validation rules
15345
15346 );
15347
15348
15349
15350 -- Need to get feedback about whether or not entry passed validation
15351
15352 Get_ValidationFailureCode( p_list_id
15353
15354 , l_list_entry_id
15355
15356 , x_failure_code
15357
15358 );
15359
15360
15361
15362 -- In interactive mode, if the record fails validation,
15363
15364 -- we rollback the entire transaction. User will have
15365
15366 -- to resubmit request with updated customer information.
15367
15368 -- In batch mode, do not rollback b/c we want to leave
15369
15370 -- the entry as invalid in the system. User will have
15371
15372 -- to "fix" the data in our system and revalidate using
15373
15374 -- the standard validation process.
15375
15376 IF x_failure_code IS NOT NULL THEN
15377
15378 IF p_interactive_mode THEN
15379
15380 ROLLBACK;
15381
15382 RETURN;
15383
15384 END IF;
15385
15386 ELSE
15387
15388 -- If record was successfully inserted, update callback time
15389
15390 Update_CallbackTime(p_list_id, l_list_entry_id, p_callback_time);
15391
15392 END IF;
15393
15394
15395
15396 COMMIT;
15397
15398
15399
15400 EXCEPTION
15401
15402 WHEN fnd_api.g_exc_error THEN
15403
15404 ROLLBACK;
15405
15406 RAISE;
15407
15408 WHEN fnd_api.g_exc_unexpected_error THEN
15409
15410 ROLLBACK;
15411
15412 RAISE;
15413
15414 WHEN OTHERS THEN
15415
15416 Log( 'Add_Record_To_List_Pvt'
15417
15418 , 'MAIN'
15419
15420 , SQLERRM
15421
15422 );
15423
15424 ROLLBACK;
15425
15426 RAISE fnd_api.g_exc_unexpected_error;
15427
15428 END Add_Record_To_List_Pvt;
15429
15430
15431
15432 PROCEDURE Add_Record_To_List
15433
15434 ( p_list_id IN NUMBER
15435
15436 , p_column_name IN SYSTEM.varchar_tbl_type
15437
15438 , p_column_value IN SYSTEM.varchar_tbl_type
15439
15440 , p_callback_time IN DATE DEFAULT NULL
15441
15442 , x_failure_code OUT NOCOPY VARCHAR2
15443
15444 )
15445
15446 IS
15447
15448 BEGIN
15449
15450
15451
15452 Add_Record_To_List_Pvt( p_list_id
15453
15454 , p_column_name
15455
15456 , p_column_value
15457
15458 , p_callback_time
15459
15460 , FALSE -- batch mode
15461
15462 , x_failure_code
15463
15464 );
15465
15466
15467
15468 EXCEPTION
15469
15470 WHEN OTHERS THEN
15471
15472 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
15473
15474 END Add_Record_To_List;
15475
15476
15477
15478 PROCEDURE Add_Record_To_List_Interactive
15479
15480 ( p_list_id IN NUMBER
15481
15482 , p_column_name IN SYSTEM.varchar_tbl_type
15483
15484 , p_column_value IN SYSTEM.varchar_tbl_type
15485
15486 , p_callback_time IN DATE DEFAULT NULL
15487
15488 , x_failure_code OUT NOCOPY VARCHAR2
15489
15490 )
15491
15492 IS
15493
15494 BEGIN
15495
15496
15497
15498 Add_Record_To_List_Pvt( p_list_id
15499
15500 , p_column_name
15501
15502 , p_column_value
15503
15504 , p_callback_time
15505
15506 , TRUE -- interactive mode
15507
15508 , x_failure_code
15509
15510 );
15511
15512
15513
15514 EXCEPTION
15515
15516 WHEN OTHERS THEN
15517
15518 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
15519
15520
15521
15522 END Add_Record_To_List_Interactive;
15523
15524
15525
15526 FUNCTION Get_Postfix
15527
15528 ( p_index IN NUMBER)
15529
15530 RETURN VARCHAR2
15531
15532 IS
15533
15534 l_postfix VARCHAR2(3);
15535
15536 BEGIN
15537
15538
15539
15540 SELECT DECODE( p_index
15541
15542 , 1, '_S1'
15543
15544 , 2, '_S2'
15545
15546 , 3, '_S3'
15547
15548 , 4, '_S4'
15549
15550 , 5, '_S5'
15551
15552 , 6, '_S6'
15553
15554 , NULL)
15555
15556 INTO l_postfix
15557
15558 FROM DUAL;
15559
15560
15561
15562 RETURN l_postfix;
15563
15564
15565
15566 END Get_Postfix;
15567
15568
15569
15570 PROCEDURE Update_ContactPoint
15571
15572 ( p_list_id IN NUMBER
15573
15574 , p_list_entry_id IN NUMBER
15575
15576 , p_party_id IN NUMBER
15577
15578 , p_contact_point_id IN NUMBER
15579
15580 , p_index IN NUMBER
15581
15582 , p_country_code IN VARCHAR2
15583
15584 , p_area_code IN VARCHAR2
15585
15586 , p_phone_number IN VARCHAR2
15587
15588 , p_time_zone IN NUMBER
15589
15590 , p_update_tca_flag IN VARCHAR2
15591
15592 )
15593
15594 IS
15595
15596 l_source_type_view VARCHAR2(32);
15597
15598 l_postfix VARCHAR2(3);
15599
15600
15601
15602 l_contact_point_rec HZ_CONTACT_POINT_V2PUB.contact_point_rec_type;
15603
15604 l_phone_rec HZ_CONTACT_POINT_V2PUB.phone_rec_type;
15605
15606
15607
15608 l_object_version_number NUMBER;
15609
15610 l_return_status VARCHAR2(1);
15611
15612 l_msg_count NUMBER;
15613
15614 l_msg_data VARCHAR2(4000);
15615
15616 l_error_msg VARCHAR2(4000);
15617
15618 BEGIN
15619
15620
15621
15622 -- Update TCA contact point record
15623
15624 IF p_update_tca_flag = 'Y' THEN
15625
15626 l_contact_point_rec.contact_point_id := p_contact_point_id;
15627
15628
15629
15630 l_phone_rec.phone_country_code := p_country_code;
15631
15632 l_phone_rec.phone_area_code := p_area_code;
15633
15634 l_phone_rec.phone_number := p_phone_number;
15635
15636 l_phone_rec.timezone_id := p_time_zone;
15637
15638
15639
15640 -- Get object version number
15641
15642 SELECT OBJECT_VERSION_NUMBER
15643
15644 INTO l_object_version_number
15645
15646 FROM HZ_CONTACT_POINTS
15647
15648 WHERE CONTACT_POINT_ID = p_contact_point_id;
15649
15650
15651
15652 HZ_CONTACT_POINT_V2PUB.update_phone_contact_point
15653
15654 ( fnd_api.g_true -- init msg list
15655
15656 , l_contact_point_rec
15657
15658 , l_phone_rec
15659
15660 , l_object_version_number -- object version number
15661
15662 , l_return_status
15663
15664 , l_msg_count
15665
15666 , l_msg_data
15667
15668 );
15669
15670
15671
15672 ----------------------------------------------------------------
15673
15674 -- If the call to the ams api did not complete successfully then write
15675
15676 -- a log and stop the update list procedure.
15677
15678 ----------------------------------------------------------------
15679
15680 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15681
15682 BEGIN
15683
15684 -- Get Marketing API Error Message
15685
15686 FOR i IN 1..FND_MSG_PUB.count_msg LOOP
15687
15688 l_msg_data := LTRIM(RTRIM(FND_MSG_PUB.GET(i, FND_API.G_FALSE)));
15689
15690 IF (NVL(LENGTH(l_error_msg), 0) + NVL(LENGTH(l_msg_data), 0) < 1000) THEN
15691
15692 l_error_msg := l_error_msg || l_msg_data;
15693
15694 ELSIF (NVL(LENGTH(l_error_msg), 0) = 0) THEN
15695
15696 l_error_msg := SUBSTR(l_msg_data, 1000);
15697
15698 END IF;
15699
15700 END LOOP;
15701
15702 EXCEPTION
15703
15704 WHEN OTHERS THEN
15705
15706 l_error_msg := NULL;
15707
15708 END;
15709
15710
15711
15712 Log( 'Update_ContactPoint'
15713
15714 , 'UPDATE_HZ_CONTACT_POINTS'
15715
15716 , l_error_msg
15717
15718 );
15719
15720
15721
15722 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
15723
15724 RAISE FND_API.G_EXC_ERROR;
15725
15726 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15727
15728 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15729
15730 END IF;
15731
15732 END IF;
15733
15734
15735
15736 END IF;
15737
15738
15739
15740 -- Update AMS_LIST_ENTRIES contact point
15741
15742 BEGIN
15743
15744 l_source_type_view := Get_SourceTypeView(p_list_id);
15745
15746 l_postfix := Get_Postfix(p_index);
15747
15748 EXECUTE IMMEDIATE
15749
15750 'UPDATE ' || l_source_type_view ||
15751
15752 ' SET PHONE_COUNTRY_CODE' || l_postfix || ' = ' || p_country_code ||
15753
15754 ' , PHONE_AREA_CODE' || l_postfix || ' = ' || p_area_code ||
15755
15756 ' , PHONE_NUMBER' || l_postfix || ' = ' || p_phone_number ||
15757
15758 ' , RAW_PHONE_NUMBER' || l_postfix || ' = NULL
15759
15760 , TIME_ZONE' || l_postfix || ' = ' || p_time_zone ||
15761
15762 'WHERE LIST_HEADER_ID = :list_id
15763
15764 AND LIST_ENTRY_ID = :list_entry_id
15765
15766 AND CONTACT_POINT_ID' || l_postfix || ' = ' || p_contact_point_id
15767
15768 USING IN p_list_id, IN p_list_entry_id;
15769
15770 EXCEPTION
15771
15772 WHEN OTHERS THEN
15773
15774 IF SQLCODE = -904 THEN
15775
15776 Log_MissingSourceTypeColumns(p_list_id, l_source_type_view, Get_SourceType(p_list_id), 'Update_ContactPoint', 'UPDATE_AMS_LIST_ENTRIES');
15777
15778 RAISE fnd_api.g_exc_unexpected_error;
15779
15780 ELSE
15781
15782 Log( 'Update_ContactPoint'
15783
15784 , 'UPDATE_AMS_LIST_ENTRIES'
15785
15786 , SQLERRM
15787
15788 );
15789
15790 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15791
15792 END IF;
15793
15794 END;
15795
15796
15797
15798 EXCEPTION
15799
15800 WHEN OTHERS THEN
15801
15802 RAISE_APPLICATION_ERROR(-20999, Get_TranslatedErrorMessage);
15803
15804 END Update_ContactPoint;
15805
15806 /*
15807
15808 PROCEDURE SubsetTransition_List
15809
15810 ( p_list_id IN NUMBER
15811
15812 , p_schedule_id IN NUMBER
15813
15814 , p_source_type_v IN VARCHAR2
15815
15816 , x_return_code OUT NOCOPY VARCHAR2) -- OUT
15817
15818 IS
15819
15820
15821
15822 l_subset_id_col SYSTEM.number_tbl_type;
15823
15824 l_subset_view_col SYSTEM.varchar_tbl_type;
15825
15826 l_subset_rec_loaded_col SYSTEM.number_tbl_type;
15827
15828
15829
15830 l_list_entry_csr ListEntryCsrType;
15831
15832 l_entry_count PLS_INTEGER;
15833
15834
15835
15836 l_list_entry_id NUMBER(15);
15837
15838 l_callback_flag VARCHAR2(1);
15839
15840 l_next_call_time DATE;
15841
15842 l_do_not_use_flag VARCHAR2(1);
15843
15844 l_do_not_use_reason NUMBER;
15845
15846 l_record_out_flag VARCHAR2(1);
15847
15848 l_record_release_time DATE;
15849
15850
15851
15852 l_cpc_id NUMBER(15);
15853
15854 l_cpc_index NUMBER;
15855
15856 l_cpc_cc VARCHAR2(240);
15857
15858 l_cpc_ac NUMBER;
15859
15860 l_cpc_pn VARCHAR2(240);
15861
15862 l_cpc_rpn VARCHAR2(240);
15863
15864
15865
15866 l_cpc_cc_tz_id NUMBER(15);
15867
15868 l_cc_tz_id_s1 NUMBER(15);
15869
15870 l_cc_tz_id_s2 NUMBER(15);
15871
15872 l_cc_tz_id_s3 NUMBER(15);
15873
15874 l_cc_tz_id_s4 NUMBER(15);
15875
15876 l_cc_tz_id_s5 NUMBER(15);
15877
15878 l_cc_tz_id_s6 NUMBER(15);
15879
15880
15881
15882 l_cpc_tz NUMBER(15);
15883
15884 l_tz_s1 NUMBER(15);
15885
15886 l_tz_s2 NUMBER(15);
15887
15888 l_tz_s3 NUMBER(15);
15889
15890 l_tz_s4 NUMBER(15);
15891
15892 l_tz_s5 NUMBER(15);
15893
15894 l_tz_s6 NUMBER(15);
15895
15896
15897
15898 l_cpc_tc VARCHAR2(2);
15899
15900 l_tc_s1 VARCHAR2(2);
15901
15902 l_tc_s2 VARCHAR2(2);
15903
15904 l_tc_s3 VARCHAR2(2);
15905
15906 l_tc_s4 VARCHAR2(2);
15907
15908 l_tc_s5 VARCHAR2(2);
15909
15910 l_tc_s6 VARCHAR2(2);
15911
15912
15913
15914 l_cpc_rc NUMBER(15);
15915
15916 l_rc_s1 NUMBER(15);
15917
15918 l_rc_s2 NUMBER(15);
15919
15920 l_rc_s3 NUMBER(15);
15921
15922 l_rc_s4 NUMBER(15);
15923
15924 l_rc_s5 NUMBER(15);
15925
15926 l_rc_s6 NUMBER(15);
15927
15928
15929
15930 l_cpc_valid_flag VARCHAR2(1);
15931
15932 l_valid_flag_s1 VARCHAR2(1);
15933
15934 l_valid_flag_s2 VARCHAR2(1);
15935
15936 l_valid_flag_s3 VARCHAR2(1);
15937
15938 l_valid_flag_s4 VARCHAR2(1);
15939
15940 l_valid_flag_s5 VARCHAR2(1);
15941
15942 l_valid_flag_s6 VARCHAR2(1);
15943
15944
15945
15946 l_records_passed NUMBER(9) := 0;
15947
15948 l_records_failed NUMBER(9) := 0;
15949
15950
15951
15952 l_count NUMBER(9);
15953
15954
15955
15956 BEGIN
15957
15958
15959
15960 x_return_code := FND_API.G_RET_STS_SUCCESS;
15961
15962
15963
15964 SAVEPOINT subset_transition;
15965
15966
15967
15968 -- Make sure that data hasn't already been transitioned
15969
15970 EXECUTE IMMEDIATE
15971
15972 'SELECT COUNT(*)
15973
15974 FROM IEC_G_REP_SUBSET_COUNTS
15975
15976 WHERE LIST_HEADER_ID = :list_id'
15977
15978 INTO l_count
15979
15980 USING p_list_id;
15981
15982
15983
15984 IF l_count > 0 THEN
15985
15986 GOTO Done;
15987
15988 END IF;
15989
15990
15991
15992 -- Ensure that marketing objects created prior to Minipack N are updated
15993
15994 -- with the ITM_CC_TZ_ID populated in the REASON_CODE_S? column instead of 'Y' or 'N'
15995
15996 EXECUTE IMMEDIATE
15997
15998 'BEGIN
15999
16000 UPDATE ' || p_source_type_v || ' A' || '
16001
16002 SET
16003
16004 REASON_CODE_S1 = (SELECT ITM_CC_TZ_ID FROM IEC_G_MKTG_ITEM_CC_TZS B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S1 AND B.TIMEZONE_ID = A.TIME_ZONE_S1 AND B.LIST_HEADER_ID = :1 AND B.REGION_ID IS NULL)
16005
16006 , REASON_CODE_S2 = (SELECT ITM_CC_TZ_ID FROM IEC_G_MKTG_ITEM_CC_TZS B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S2 AND B.TIMEZONE_ID = A.TIME_ZONE_S2 AND B.LIST_HEADER_ID = :2 AND B.REGION_ID IS NULL)
16007
16008 , REASON_CODE_S3 = (SELECT ITM_CC_TZ_ID FROM IEC_G_MKTG_ITEM_CC_TZS B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S3 AND B.TIMEZONE_ID = A.TIME_ZONE_S3 AND B.LIST_HEADER_ID = :3 AND B.REGION_ID IS NULL)
16009
16010 , REASON_CODE_S4 = (SELECT ITM_CC_TZ_ID FROM IEC_G_MKTG_ITEM_CC_TZS B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S4 AND B.TIMEZONE_ID = A.TIME_ZONE_S4 AND B.LIST_HEADER_ID = :4 AND B.REGION_ID IS NULL)
16011
16012 , REASON_CODE_S5 = (SELECT ITM_CC_TZ_ID FROM IEC_G_MKTG_ITEM_CC_TZS B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S5 AND B.TIMEZONE_ID = A.TIME_ZONE_S5 AND B.LIST_HEADER_ID = :5 AND B.REGION_ID IS NULL)
16013
16014 , REASON_CODE_S6 = (SELECT ITM_CC_TZ_ID FROM IEC_G_MKTG_ITEM_CC_TZS B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S6 AND B.TIMEZONE_ID = A.TIME_ZONE_S6 AND B.LIST_HEADER_ID = :6 AND B.REGION_ID IS NULL)
16015
16016 WHERE LIST_HEADER_ID = :list_header_id
16017
16018 AND TRANSLATE(UPPER(CURR_CP_COUNTRY_CODE), ''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'', ''0123456789'') IS NULL
16019
16020 AND (DO_NOT_USE_FLAG = ''N'' OR (DO_NOT_USE_FLAG = ''Y'' AND DO_NOT_USE_REASON <> 4));
16021
16022 END;'
16023
16024 USING p_list_id
16025
16026 , p_list_id
16027
16028 , p_list_id
16029
16030 , p_list_id
16031
16032 , p_list_id
16033
16034 , p_list_id
16035
16036 , p_list_id;
16037
16038
16039
16040 EXECUTE IMMEDIATE
16041
16042 'BEGIN
16043
16044 UPDATE ' || p_source_type_v || ' A' || '
16045
16046 SET
16047
16048 CURR_CP_COUNTRY_CODE = (SELECT PHONE_COUNTRY_CODE FROM HZ_PHONE_COUNTRY_CODES B WHERE B.TERRITORY_CODE = A.CURR_CP_COUNTRY_CODE)
16049
16050 , PHONE_COUNTRY_CODE_S1 = (SELECT PHONE_COUNTRY_CODE FROM HZ_PHONE_COUNTRY_CODES B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S1)
16051
16052 , PHONE_COUNTRY_CODE_S2 = (SELECT PHONE_COUNTRY_CODE FROM HZ_PHONE_COUNTRY_CODES B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S2)
16053
16054 , PHONE_COUNTRY_CODE_S3 = (SELECT PHONE_COUNTRY_CODE FROM HZ_PHONE_COUNTRY_CODES B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S3)
16055
16056 , PHONE_COUNTRY_CODE_S4 = (SELECT PHONE_COUNTRY_CODE FROM HZ_PHONE_COUNTRY_CODES B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S4)
16057
16058 , PHONE_COUNTRY_CODE_S5 = (SELECT PHONE_COUNTRY_CODE FROM HZ_PHONE_COUNTRY_CODES B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S5)
16059
16060 , PHONE_COUNTRY_CODE_S6 = (SELECT PHONE_COUNTRY_CODE FROM HZ_PHONE_COUNTRY_CODES B WHERE B.TERRITORY_CODE = A.PHONE_COUNTRY_CODE_S6)
16061
16062 WHERE LIST_HEADER_ID = :list_header_id
16063
16064 AND TRANSLATE(UPPER(CURR_CP_COUNTRY_CODE), ''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'', ''0123456789'') IS NULL
16065
16066 AND (DO_NOT_USE_FLAG = ''N'' OR (DO_NOT_USE_FLAG = ''Y'' AND DO_NOT_USE_REASON <> 4));
16067
16068 END;'
16069
16070 USING p_list_id;
16071
16072
16073
16074
16075
16076 -- Assign load priorities to subsets
16077
16078 EXECUTE IMMEDIATE
16079
16080 'UPDATE IEC_G_LIST_SUBSETS
16081
16082 SET LOAD_PRIORITY = ROWNUM
16083
16084 WHERE LIST_HEADER_ID = :1
16085
16086 AND (DEFAULT_SUBSET_FLAG IS NULL OR DEFAULT_SUBSET_FLAG = ''N'')
16087
16088 AND LOAD_PRIORITY IS NULL'
16089
16090 USING p_list_id;
16091
16092
16093
16094 Init_SubsetRtInfo(p_list_id, p_source_type_v, l_subset_id_col, l_subset_view_col);
16095
16096
16097
16098 -- Load current callable zones into cache with special flag 'O' to indicate that they should not be
16099
16100 -- used when assigning new callable zones (with subsets) to entries
16101
16102 EXECUTE IMMEDIATE
16103
16104 'INSERT INTO IEC_TC_TZ_PAIRS_CACHE (SUBSET_ID, TERRITORY_CODE, REGION_ID, TIMEZONE_ID, TC_TZ_PAIR_ID, RECORD_COUNT, CACHE_ONLY_FLAG)
16105
16106 SELECT SUBSET_ID, TERRITORY_CODE, REGION_ID, TIMEZONE_ID, ITM_CC_TZ_ID, RECORD_COUNT, ''O''
16107
16108 FROM IEC_G_MKTG_ITEM_CC_TZS
16109
16110 WHERE LIST_HEADER_ID = :list_id'
16111
16112 USING p_list_id;
16113
16114
16115
16116 -- Need to delete them from IEC_G_MKTG_ITEM_CC_TZS to avoid unique constraint violation on purge
16117
16118 EXECUTE IMMEDIATE
16119
16120 'DELETE FROM IEC_G_MKTG_ITEM_CC_TZS
16121
16122 WHERE LIST_HEADER_ID = :list_id'
16123
16124 USING p_list_id;
16125
16126
16127
16128 -- Load entries into IEC_VAL_ENTRY_CACHE
16129
16130 BEGIN
16131
16132 OPEN l_list_entry_csr FOR
16133
16134 'SELECT LIST_ENTRY_ID
16135
16136 , CALLBACK_FLAG
16137
16138 , NEXT_CALL_TIME
16139
16140 , DO_NOT_USE_FLAG
16141
16142 , DO_NOT_USE_REASON
16143
16144 , RECORD_OUT_FLAG
16145
16146 , RECORD_RELEASE_TIME
16147
16148 , CURR_CP_ID
16149
16150 , CURR_CP_INDEX
16151
16152 , CURR_CP_COUNTRY_CODE
16153
16154 , CURR_CP_AREA_CODE
16155
16156 , CURR_CP_PHONE_NUMBER
16157
16158 , CURR_CP_RAW_PHONE_NUMBER
16159
16160 , CURR_CP_TIME_ZONE_AUX
16161
16162 , REASON_CODE_S1
16163
16164 , REASON_CODE_S2
16165
16166 , REASON_CODE_S3
16167
16168 , REASON_CODE_S4
16169
16170 , REASON_CODE_S5
16171
16172 , REASON_CODE_S6
16173
16174 FROM ' || p_source_type_v || '
16175
16176 WHERE LIST_HEADER_ID = :list_id' || '
16177
16178 AND ( DO_NOT_USE_FLAG = ''N''
16179
16180 OR
16181
16182 (DO_NOT_USE_FLAG = ''Y'' AND DO_NOT_USE_REASON <> 4 AND (DO_NOT_USE_REASON < 400 OR DO_NOT_USE_REASON > 499))
16183
16184 )'
16185
16186 USING p_list_id;
16187
16188 EXCEPTION
16189
16190 WHEN OTHERS THEN
16191
16192 IF SQLCODE = -904 THEN
16193
16194 g_error_msg := 'Source type view ' || p_source_type_v || ' is missing at least one of the following columns: ' ||
16195
16196 'REASON_CODE_S1, REASON_CODE_S2, REASON_CODE_S3, REASON_CODE_S4, REASON_CODE_S5, REASON_CODE_S6';
16197
16198 RAISE fnd_api.g_exc_unexpected_error;
16199
16200 ELSE
16201
16202 RAISE;
16203
16204 END IF;
16205
16206 END;
16207
16208
16209
16210 LOOP
16211
16212
16213
16214 FOR I IN 1..g_row_increment LOOP
16215
16216
16217
16218 FETCH l_list_entry_csr INTO
16219
16220 l_list_entry_id,
16221
16222 l_callback_flag,
16223
16224 l_next_call_time,
16225
16226 l_do_not_use_flag,
16227
16228 l_do_not_use_reason,
16229
16230 l_record_out_flag,
16231
16232 l_record_release_time,
16233
16234 l_cpc_id,
16235
16236 l_cpc_index,
16237
16238 l_cpc_cc,
16239
16240 l_cpc_ac,
16241
16242 l_cpc_pn,
16243
16244 l_cpc_rpn,
16245
16246 l_cpc_cc_tz_id,
16247
16248 l_cc_tz_id_s1,
16249
16250 l_cc_tz_id_s2,
16251
16252 l_cc_tz_id_s3,
16253
16254 l_cc_tz_id_s4,
16255
16256 l_cc_tz_id_s5,
16257
16258 l_cc_tz_id_s6;
16259
16260
16261
16262 EXIT WHEN l_list_entry_csr%NOTFOUND;
16263
16264
16265
16266 -- Map CC_TZ_ID to territory code, region code, and time zone
16267
16268 Get_CallableZoneDetail_Cache(l_cpc_cc_tz_id, l_cpc_tc, l_cpc_rc, l_cpc_tz, l_cpc_valid_flag);
16269
16270 Get_CallableZoneDetail_Cache(l_cc_tz_id_s1, l_tc_s1, l_rc_s1, l_tz_s1, l_valid_flag_s1);
16271
16272 Get_CallableZoneDetail_Cache(l_cc_tz_id_s2, l_tc_s2, l_rc_s2, l_tz_s2, l_valid_flag_s2);
16273
16274 Get_CallableZoneDetail_Cache(l_cc_tz_id_s3, l_tc_s3, l_rc_s3, l_tz_s3, l_valid_flag_s3);
16275
16276 Get_CallableZoneDetail_Cache(l_cc_tz_id_s4, l_tc_s4, l_rc_s4, l_tz_s4, l_valid_flag_s4);
16277
16278 Get_CallableZoneDetail_Cache(l_cc_tz_id_s5, l_tc_s5, l_rc_s5, l_tz_s5, l_valid_flag_s5);
16279
16280 Get_CallableZoneDetail_Cache(l_cc_tz_id_s6, l_tc_s6, l_rc_s6, l_tz_s6, l_valid_flag_s6);
16281
16282
16283
16284 INSERT INTO IEC_VAL_ENTRY_CACHE
16285
16286 ( LIST_ENTRY_ID
16287
16288 , CALLBACK_FLAG
16289
16290 , NEXT_CALL_TIME
16291
16292 , DO_NOT_USE_FLAG
16293
16294 , PREV_STATUS_CODE
16295
16296 , DO_NOT_USE_REASON
16297
16298 , RECORD_OUT_FLAG
16299
16300 , RECORD_RELEASE_TIME
16301
16302 , CURR_CP_ID
16303
16304 , CURR_CP_INDEX
16305
16306 , CURR_CP_COUNTRY_CODE
16307
16308 , CURR_CP_AREA_CODE
16309
16310 , CURR_CP_PHONE_NUMBER
16311
16312 , CURR_CP_RAW_PHONE_NUMBER
16313
16314 , CURR_CP_TIME_ZONE
16315
16316 , CURR_CP_TERRITORY_CODE
16317
16318 , CURR_CP_REGION_ID
16319
16320 , TIME_ZONE_S1, TERRITORY_CODE_S1, REGION_ID_S1, VALID_FLAG_S1
16321
16322 , TIME_ZONE_S2, TERRITORY_CODE_S2, REGION_ID_S2, VALID_FLAG_S2
16323
16324 , TIME_ZONE_S3, TERRITORY_CODE_S3, REGION_ID_S3, VALID_FLAG_S3
16325
16326 , TIME_ZONE_S4, TERRITORY_CODE_S4, REGION_ID_S4, VALID_FLAG_S4
16327
16328 , TIME_ZONE_S5, TERRITORY_CODE_S5, REGION_ID_S5, VALID_FLAG_S5
16329
16330 , TIME_ZONE_S6, TERRITORY_CODE_S6, REGION_ID_S6, VALID_FLAG_S6
16331
16332 )
16333
16334 VALUES
16335
16336 ( l_list_entry_id
16337
16338 , l_callback_flag
16339
16340 , l_next_call_time
16341
16342 , 'N' -- Default DO_NOT_USE_FLAG in temp table to 'N' for processing
16343
16344 , l_do_not_use_flag -- Store actual value of DO_NOT_USE_FLAG in PREV_STATUS_CODE column of temp table
16345
16346 , l_do_not_use_reason
16347
16348 , l_record_out_flag
16349
16350 , l_record_release_time
16351
16352 , l_cpc_id
16353
16354 , l_cpc_index
16355
16356 , l_cpc_cc
16357
16358 , l_cpc_ac
16359
16360 , l_cpc_pn
16361
16362 , l_cpc_rpn
16363
16364 , l_cpc_tz
16365
16366 , l_cpc_tc
16367
16368 , l_cpc_rc
16369
16370 , l_tz_s1, l_tc_s1, l_rc_s1, l_valid_flag_s1
16371
16372 , l_tz_s2, l_tc_s2, l_rc_s2, l_valid_flag_s2
16373
16374 , l_tz_s3, l_tc_s3, l_rc_s3, l_valid_flag_s3
16375
16376 , l_tz_s4, l_tc_s4, l_rc_s4, l_valid_flag_s4
16377
16378 , l_tz_s5, l_tc_s5, l_rc_s5, l_valid_flag_s5
16379
16380 , l_tz_s6, l_tc_s6, l_rc_s6, l_valid_flag_s6
16381
16382 );
16383
16384
16385
16386 END LOOP;
16387
16388
16389
16390 EXECUTE IMMEDIATE
16391
16392 'SELECT COUNT(*)
16393
16394 FROM IEC_VAL_ENTRY_CACHE'
16395
16396 INTO l_entry_count;
16397
16398
16399
16400 EXIT WHEN l_entry_count = 0;
16401
16402
16403
16404 l_records_passed := l_records_passed + l_entry_count;
16405
16406
16407
16408 -- Assign subsets
16409
16410 Partition_SubsetEntries( p_list_id
16411
16412 , l_subset_id_col
16413
16414 , l_subset_view_col
16415
16416 , l_subset_rec_loaded_col);
16417
16418
16419
16420 -- Compile data on callable zones (incorporating subsets) and initialize counts
16421
16422 Update_CallableZones(p_list_id);
16423
16424
16425
16426 -- Update AMS_LIST_ENTRIES and IEC_G_RETURN_ENTRIES
16427
16428 EXECUTE IMMEDIATE
16429
16430 'BEGIN
16431
16432 UPDATE ' || p_source_type_v || ' A' ||
16433
16434 ' SET ( REASON_CODE_S1
16435
16436 , REASON_CODE_S2
16437
16438 , REASON_CODE_S3
16439
16440 , REASON_CODE_S4
16441
16442 , REASON_CODE_S5
16443
16444 , REASON_CODE_S6 )
16445
16446 =
16447
16448 ( SELECT MKTG_ITEM_CC_TZS_ID_S1
16449
16450 , MKTG_ITEM_CC_TZS_ID_S2
16451
16452 , MKTG_ITEM_CC_TZS_ID_S3
16453
16454 , MKTG_ITEM_CC_TZS_ID_S4
16455
16456 , MKTG_ITEM_CC_TZS_ID_S5
16457
16458 , MKTG_ITEM_CC_TZS_ID_S6
16459
16460 FROM IEC_VAL_ENTRY_CACHE B WHERE A.LIST_ENTRY_ID = B.LIST_ENTRY_ID )
16461
16462 WHERE LIST_HEADER_ID = :list_id AND LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID FROM IEC_VAL_ENTRY_CACHE);
16463
16464 END;'
16465
16466 USING p_list_id;
16467
16468
16469
16470 EXECUTE IMMEDIATE
16471
16472 'BEGIN
16473
16474 UPDATE IEC_G_RETURN_ENTRIES A
16475
16476 SET ( SUBSET_ID
16477
16478 , ITM_CC_TZ_ID
16479
16480 , CALLBACK_FLAG
16481
16482 , NEXT_CALL_TIME
16483
16484 , DO_NOT_USE_FLAG
16485
16486 , DO_NOT_USE_REASON
16487
16488 , RECORD_OUT_FLAG
16489
16490 , RECORD_RELEASE_TIME
16491
16492 , CONTACT_POINT_ID
16493
16494 , CONTACT_POINT_INDEX
16495
16496 , COUNTRY_CODE
16497
16498 , AREA_CODE
16499
16500 , PHONE_NUMBER
16501
16502 , RAW_PHONE_NUMBER
16503
16504 , TIME_ZONE )
16505
16506 =
16507
16508 ( SELECT SUBSET_ID
16509
16510 , CURR_CP_MKTG_ITEM_CC_TZS_ID
16511
16512 , CALLBACK_FLAG
16513
16514 , NEXT_CALL_TIME
16515
16516 , PREV_STATUS_CODE -- ACTUAL DO_NOT_USE_FLAG VALUE FROM ALE
16517
16518 , DO_NOT_USE_REASON
16519
16520 , RECORD_OUT_FLAG
16521
16522 , RECORD_RELEASE_TIME
16523
16524 , CURR_CP_ID
16525
16526 , CURR_CP_INDEX
16527
16528 , CURR_CP_COUNTRY_CODE
16529
16530 , CURR_CP_AREA_CODE
16531
16532 , CURR_CP_PHONE_NUMBER
16533
16534 , CURR_CP_RAW_PHONE_NUMBER
16535
16536 , CURR_CP_TIME_ZONE
16537
16538 FROM IEC_VAL_ENTRY_CACHE B
16539
16540 WHERE A.LIST_ENTRY_ID = B.LIST_ENTRY_ID )
16541
16542 WHERE LIST_HEADER_ID = :list_id AND LIST_ENTRY_ID IN (SELECT LIST_ENTRY_ID FROM IEC_VAL_ENTRY_CACHE);
16543
16544 END;'
16545
16546 USING p_list_id;
16547
16548
16549
16550 Update_ReportCounts( p_campaign_id
16551
16552 , p_schedule_id
16553
16554 , p_list_id
16555
16556 , l_subset_id_col
16557
16558 , l_subset_rec_loaded_col);
16559
16560
16561
16562 Purge_CallableZones(p_list_id, p_schedule_id);
16563
16564
16565
16566 Truncate_IecValEntryCache;
16567
16568
16569
16570 END LOOP;
16571
16572
16573
16574 CLOSE l_list_entry_csr;
16575
16576
16577
16578 l_count := NULL;
16579
16580
16581
16582 -- Check for existence of record in IEC_O_VALIDATION_STATUS
16583
16584 EXECUTE IMMEDIATE
16585
16586 'SELECT COUNT(*)
16587
16588 FROM IEC_O_VALIDATION_STATUS
16589
16590 WHERE LIST_HEADER_ID = :list_id'
16591
16592 INTO l_count
16593
16594 USING p_list_id;
16595
16596
16597
16598 IF l_count = 0 THEN
16599
16600 EXECUTE IMMEDIATE
16601
16602 'INSERT INTO IEC_O_VALIDATION_STATUS
16603
16604 ( VALIDATION_STATUS_ID
16605
16606 , LIST_HEADER_ID
16607
16608 , VALIDATED_ONCE_FLAG
16609
16610 , CREATED_BY
16611
16612 , CREATION_DATE
16613
16614 , LAST_UPDATED_BY
16615
16616 , LAST_UPDATE_DATE
16617
16618 , OBJECT_VERSION_NUMBER)
16619
16620 VALUES
16621
16622 ( IEC_O_VALIDATION_STATUS_S.NEXTVAL
16623
16624 , :list_id
16625
16626 , ''Y''
16627
16628 , 1
16629
16630 , SYSDATE
16631
16632 , 1
16633
16634 , SYSDATE
16635
16636 , 0)'
16637
16638 USING p_list_id;
16639
16640 END IF;
16641
16642
16643
16644 l_count := NULL;
16645
16646
16647
16648 -- Update execution start time for list
16649
16650 EXECUTE IMMEDIATE
16651
16652 'UPDATE IEC_G_LIST_RT_INFO
16653
16654 SET EXECUTION_START_TIME = SYSDATE
16655
16656 , LAST_UPDATED_BY = 0
16657
16658 , LAST_UPDATE_DATE = SYSDATE
16659
16660 WHERE LIST_HEADER_ID IN (SELECT LIST_HEADER_ID FROM AMS_LIST_HEADERS_ALL WHERE LIST_HEADER_ID = :list_id AND STATUS_CODE = ''EXECUTING'')
16661
16662 AND EXECUTION_START_TIME IS NULL'
16663
16664 USING p_list_id;
16665
16666
16667
16668 Truncate_Temporary_Tables;
16669
16670
16671
16672 <<Done>>
16673
16674
16675
16676 Update_Status(p_list_id, 'VALIDATED');
16677
16678 COMMIT;
16679
16680
16681
16682 EXCEPTION
16683
16684 WHEN fnd_api.g_exc_unexpected_error THEN
16685
16686 x_return_code := FND_API.G_RET_STS_ERROR;
16687
16688 ROLLBACK TO subset_transition;
16689
16690 Truncate_Temporary_Tables;
16691
16692 RAISE_APPLICATION_ERROR(-20999, g_error_msg);
16693
16694 WHEN OTHERS THEN
16695
16696 x_return_code := FND_API.G_RET_STS_ERROR;
16697
16698 Log( 'SubsetTransition_list'
16699
16700 , 'MAIN'
16701
16702 , SQLERRM
16703
16704 );
16705
16706 ROLLBACK TO subset_transition;
16707
16708 Truncate_Temporary_Tables;
16709
16710 RAISE_APPLICATION_ERROR(-20999, g_error_msg);
16711
16712
16713
16714 END SubsetTransition_List;
16715
16716 */
16717
16718 PROCEDURE UPDATE_TZ_MAPPINGS
16719
16720 IS
16721
16722 L_COUNT NUMBER(9);
16723
16724 L_TERRITORY_CODE VARCHAR2(2);
16725
16726 L_TIMEZONE_ID NUMBER(15);
16727
16728
16729
16730 CURSOR AREA_CODE_LIST IS
16731
16732 SELECT DISTINCT PHONE_AREA_CODE FROM IEC_G_TIMEZONE_MAPPINGS;
16733
16734
16735
16736 BEGIN
16737
16738
16739
16740 FOR REC IN AREA_CODE_LIST LOOP
16741
16742
16743
16744 SELECT COUNT(*) INTO L_COUNT FROM
16745
16746 (SELECT DISTINCT TIMEZONE_ID FROM IEC_G_TIMEZONE_MAPPINGS WHERE PHONE_AREA_CODE = REC.PHONE_AREA_CODE);
16747
16748
16749
16750 IF L_COUNT = 1 THEN
16751
16752
16753
16754 SELECT DISTINCT TERRITORY_CODE INTO L_TERRITORY_CODE
16755
16756 FROM IEC_G_TIMEZONE_MAPPINGS
16757
16758 WHERE PHONE_AREA_CODE = REC.PHONE_AREA_CODE;
16759
16760
16761
16762 SELECT DISTINCT TIMEZONE_ID INTO L_TIMEZONE_ID
16763
16764 FROM IEC_G_TIMEZONE_MAPPINGS
16765
16766 WHERE PHONE_AREA_CODE = REC.PHONE_AREA_CODE;
16767
16768
16769
16770 DELETE IEC_G_TIMEZONE_MAPPINGS WHERE PHONE_AREA_CODE = REC.PHONE_AREA_CODE;
16771
16772
16773
16774 INSERT INTO IEC_G_TIMEZONE_MAPPINGS
16775
16776 (TIMEZONE_MAPPING_ID, TERRITORY_CODE, PHONE_AREA_CODE, POSTAL_CODE, TIMEZONE_ID, CREATED_BY,
16777
16778 CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER)
16779
16780 VALUES
16781
16782 (IEC_G_TIMEZONE_MAPPINGS_S.NEXTVAL, L_TERRITORY_CODE, REC.PHONE_AREA_CODE, NULL, L_TIMEZONE_ID, 0,
16783
16784 SYSDATE, 0, SYSDATE, 0, 1);
16785
16786 END IF;
16787
16788 COMMIT;
16789
16790 END LOOP;
16791
16792 END UPDATE_TZ_MAPPINGS;
16793
16794
16795
16796
16797
16798 END IEC_VALIDATE_PVT;
16799