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