DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_ACCOUNT_VALIDATE_V2PUB

Source


1 PACKAGE BODY HZ_ACCOUNT_VALIDATE_V2PUB AS
2 /*$Header: ARH2ACVB.pls 120.78 2011/12/22 17:41:21 rgokavar ship $ */
3 
4 --------------------------------------
5 -- declaration of private global varibles
6 --------------------------------------
7 
8 G_DEBUG_COUNT                           NUMBER := 0;
9 --G_DEBUG                                 BOOLEAN := FALSE;
10 
11 G_SPECIAL_STRING                        CONSTANT VARCHAR2(4):= '%#@*';
12 G_LENGTH                                CONSTANT NUMBER := LENGTHB( G_SPECIAL_STRING );
13 
14 TYPE VAL_TAB_TYPE IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
15 
16 --------------------------------------
17 -- define the internal table that will cache values
18 --------------------------------------
19 
20 VAL_TAB                                 VAL_TAB_TYPE;    -- the table of values
21 TABLE_SIZE                              BINARY_INTEGER := 2048; -- the size of above tables
22 
23 --------------------------------------
24 -- declaration of private procedures and functions
25 --------------------------------------
26 
27 /*PROCEDURE enable_debug;
28 
29 PROCEDURE disable_debug;
30 */
31 
32 
33 FUNCTION get_index (
34     p_val                               IN     VARCHAR2
35 ) RETURN BINARY_INTEGER;
36 
37 PROCEDURE put (
38     p_val                               IN     VARCHAR2
39 );
40 
41 FUNCTION search (
42     p_val                               IN     VARCHAR2,
43     p_category                          IN     VARCHAR2
44 ) RETURN BOOLEAN;
45 
46 PROCEDURE validate_mandatory (
47     p_create_update_flag                    IN     VARCHAR2,
48     p_column                                IN     VARCHAR2,
49     p_column_value                          IN     VARCHAR2,
50     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
51     x_return_status                         IN OUT NOCOPY VARCHAR2
52 );
53 
54 PROCEDURE validate_mandatory (
55     p_create_update_flag                    IN     VARCHAR2,
56     p_column                                IN     VARCHAR2,
57     p_column_value                          IN     NUMBER,
58     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
59     x_return_status                         IN OUT NOCOPY VARCHAR2
60 );
61 
62 PROCEDURE validate_mandatory (
63     p_create_update_flag                    IN     VARCHAR2,
64     p_column                                IN     VARCHAR2,
65     p_column_value                          IN     DATE,
66     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
67     x_return_status                         IN OUT NOCOPY VARCHAR2
68 );
69 
70 PROCEDURE validate_nonupdateable (
71     p_column                                IN     VARCHAR2,
72     p_column_value                          IN     VARCHAR2,
73     p_old_column_value                      IN     VARCHAR2,
74     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
75     x_return_status                         IN OUT NOCOPY VARCHAR2
76 );
77 
78 PROCEDURE validate_nonupdateable (
79     p_column                                IN     VARCHAR2,
80     p_column_value                          IN     NUMBER,
81     p_old_column_value                      IN     NUMBER,
82     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
83     x_return_status                         IN OUT NOCOPY VARCHAR2
84 );
85 
86 PROCEDURE validate_nonupdateable (
87     p_column                                IN     VARCHAR2,
88     p_column_value                          IN     DATE,
89     p_old_column_value                      IN     DATE,
90     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
91     x_return_status                         IN OUT NOCOPY VARCHAR2
92 );
93 
94 PROCEDURE validate_start_end_date (
95     p_create_update_flag                    IN     VARCHAR2,
96     p_start_date_column_name                IN     VARCHAR2,
97     p_start_date                            IN     DATE,
98     p_old_start_date                        IN     DATE,
99     p_end_date_column_name                  IN     VARCHAR2,
100     p_end_date                              IN     DATE,
101     p_old_end_date                          IN     DATE,
102     x_return_status                         IN OUT NOCOPY VARCHAR2
103 );
104 
105 PROCEDURE validate_cannot_update_to_null (
106     p_column                                IN     VARCHAR2,
107     p_column_value                          IN     VARCHAR2,
108     x_return_status                         IN OUT NOCOPY VARCHAR2
109 );
110 
111 PROCEDURE validate_cannot_update_to_null (
112     p_column                                IN     VARCHAR2,
113     p_column_value                          IN     NUMBER,
114     x_return_status                         IN OUT NOCOPY VARCHAR2
115 );
116 
117 PROCEDURE validate_cannot_update_to_null (
118     p_column                                IN     VARCHAR2,
119     p_column_value                          IN     DATE,
120     x_return_status                         IN OUT NOCOPY VARCHAR2
121 );
122 
123 PROCEDURE validate_lookup (
124     p_column                                IN     VARCHAR2,
125     p_lookup_table                          IN     VARCHAR2 DEFAULT 'AR_LOOKUPS',
126     p_lookup_type                           IN     VARCHAR2,
127     p_column_value                          IN     VARCHAR2,
128     x_return_status                         IN OUT NOCOPY VARCHAR2
129 );
130 
131 PROCEDURE check_cust_account_fk (
132     p_column                                IN     VARCHAR2,
133     p_column_value                          IN     NUMBER,
134     x_return_status                         IN OUT NOCOPY VARCHAR2
135 );
136 
137 PROCEDURE check_cust_acct_site_fk (
138     p_column                                IN     VARCHAR2,
139     p_column_value                          IN     NUMBER,
140     p_org_id                                IN     NUMBER,  -- Bug 3456489
141     x_return_status                         IN OUT NOCOPY VARCHAR2
142 );
143 
144 PROCEDURE check_cust_site_use_fk (
145     p_column                                IN     VARCHAR2,
146     p_column_value                          IN     NUMBER,
147     x_return_status                         IN OUT NOCOPY VARCHAR2
148 );
149 PROCEDURE check_cust_site_use_cont_fk(
150     p_column                                IN     VARCHAR2,
151     p_column_value                          IN     NUMBER,
152     p_customer_id                           IN     NUMBER,
153     x_return_status                         IN OUT NOCOPY VARCHAR2
154 );
155 PROCEDURE check_cust_account_role_fk (
156     p_column                                IN     VARCHAR2,
157     p_column_value                          IN     NUMBER,
158     x_return_status                         IN OUT NOCOPY VARCHAR2
159 );
160 
161 PROCEDURE check_per_all_people_f_fk (
162     p_column                                IN     VARCHAR2,
163     p_column_value                          IN     NUMBER,
164     x_return_status                         IN OUT NOCOPY VARCHAR2
165 );
166 
167 PROCEDURE check_collector_fk (
168     p_column                                IN     VARCHAR2,
169     p_column_value                          IN     NUMBER,
170     x_return_status                         IN OUT NOCOPY VARCHAR2
171 );
172 
173 PROCEDURE check_party_fk (
174     p_column                                IN     VARCHAR2,
175     p_column_value                          IN     NUMBER,
176     x_return_status                         IN OUT NOCOPY VARCHAR2
177 );
178 
179 PROCEDURE check_party_site_fk (
180     p_column                                IN     VARCHAR2,
181     p_column_value                          IN     NUMBER,
182     x_return_status                         IN OUT NOCOPY VARCHAR2
183 );
184 
185 PROCEDURE check_currency_fk (
186     p_column                                IN     VARCHAR2,
187     p_column_value                          IN     VARCHAR2,
188     x_return_status                         IN OUT NOCOPY VARCHAR2
189 );
190 
191 PROCEDURE check_oe_ship_methods_v_fk (
192     p_entity                                IN     VARCHAR2,
193     p_column                                IN     VARCHAR2,
194     p_column_value                          IN     VARCHAR2,
195     x_return_status                         IN OUT NOCOPY VARCHAR2
196 );
197 
198 PROCEDURE check_payterm_id_fk (
199     p_column                                IN     VARCHAR2,
200     p_column_value                          IN     VARCHAR2,
201     x_return_status                         IN OUT NOCOPY VARCHAR2
202 );
203 
204 PROCEDURE check_late_charge_term_id_fk (
205     p_column                                IN     VARCHAR2,
206     p_column_value                          IN     NUMBER,
207     p_cons_inv_flag                         IN     VARCHAR2,
208     x_return_status                         IN OUT NOCOPY VARCHAR2
209 );
210 
211 PROCEDURE check_message_text_id_fk (
212     p_column                                IN     VARCHAR2,
213     p_column_value                          IN     NUMBER,
214     x_return_status                         IN OUT NOCOPY VARCHAR2
215 );
216 
217 PROCEDURE check_exchange_rate_type_fk (
218     p_column                                IN     VARCHAR2,
219     p_column_value                          IN     VARCHAR2,
220     x_return_status                         IN OUT NOCOPY VARCHAR2
221 );
222 
223 PROCEDURE check_charge_schedule_id_fk (
224     p_column                                IN     VARCHAR2,
225     p_column_value                          IN     NUMBER,
226     x_return_status                         IN OUT NOCOPY VARCHAR2
227 );
228 
229 PROCEDURE check_finchrg_trx_fk (
230         p_column                                IN      VARCHAR2,
231         p_column_value                          IN      VARCHAR2,
232         p_org_id                                IN      NUMBER,         -- Bug 3456489
233         x_return_status                         IN OUT  NOCOPY VARCHAR2
234 );
235 
236 
237 PROCEDURE check_price_list_fk (
238     p_column                                IN     VARCHAR2,
239     p_column_value                          IN     VARCHAR2,
240     x_return_status                         IN OUT NOCOPY VARCHAR2
241 );
242 
243 PROCEDURE check_item_cross_ref(
244           p_column                                IN     VARCHAR2,
245           p_column_value                          IN     VARCHAR2,
246           x_return_status                         IN OUT NOCOPY VARCHAR2
247 );
248 
249 PROCEDURE check_warehouse(
250           p_column                                IN     VARCHAR2,
251           p_column_value                          IN     VARCHAR2,
252           x_return_status                         IN OUT NOCOPY VARCHAR2
253 );
254 
255 PROCEDURE check_ord_type(
256         p_column                                IN      VARCHAR2,
257         p_column_value                          IN      VARCHAR2,
258         p_org_id                                IN      NUMBER,         -- Bug 3456489
259         x_return_status                         IN OUT  NOCOPY VARCHAR2
260 );
261 
262 PROCEDURE check_prim_salesrep(
263         p_column                                IN      VARCHAR2,
264         p_column_value                          IN      VARCHAR2,
265         p_org_id                                IN      NUMBER,         -- Bug 3456489
266         x_return_status                         IN OUT  NOCOPY VARCHAR2
267 );
268 
269 PROCEDURE check_tax_code(
270     p_column                                IN     VARCHAR2,
271     p_column_value                          IN     VARCHAR2,
272     -- Bug 4713150
273     --p_org_id                                IN     NUMBER,          -- Bug 3456489
274     -- Bug 5136396: to indicate from where this procedure is called from.
275     p_called_from                           IN     VARCHAR2,
276     x_return_status                         IN OUT NOCOPY VARCHAR2
277 );
278 
279 PROCEDURE check_partial_mandatory_column (
280     p_column                                IN     VARCHAR2,
281     p_column_value                          IN     NUMBER,
282     x_return_status                         IN OUT NOCOPY VARCHAR2
283 );
284 
285 PROCEDURE check_partial_mandatory_column (
286     p_column                                IN     VARCHAR2,
287     p_column_value                          IN     VARCHAR2,
288     x_return_status                         IN OUT NOCOPY VARCHAR2
289 );
290 
291 PROCEDURE validate_gl_id (
292     p_gl_name                           IN      VARCHAR2,
293     p_column_value                      IN      NUMBER,
294     p_coa_id                            IN      NUMBER,             -- Bug 3456489
295     x_return_status                     IN OUT  NOCOPY VARCHAR2
296 );
297 
298 PROCEDURE check_auto_hierid_fk (
299     p_column                                IN     VARCHAR2,
300     p_column_value                          IN     NUMBER,
301     x_return_status                         IN OUT NOCOPY VARCHAR2
302 );
303 
304 PROCEDURE check_stat_cycid_fk (
305     p_column                                IN     VARCHAR2,
306     p_column_value                          IN     NUMBER,
307     x_return_status                         IN OUT NOCOPY VARCHAR2
308 );
309 
310 PROCEDURE check_dunning_letid_fk (
311     p_column                                IN     VARCHAR2,
312     p_column_value                          IN     NUMBER,
313     x_return_status                         IN OUT NOCOPY VARCHAR2
314 );
315 
316 PROCEDURE check_standard_terms_fk (
317     p_column                                IN     VARCHAR2,
318     p_column_value                          IN     NUMBER,
319     p_cons_inv_flag                         IN     VARCHAR2,
320     p_ckeck_acc_bfb_enabled                 IN     VARCHAR2,
321     x_return_status                         IN OUT NOCOPY VARCHAR2
322 );
323 
324 PROCEDURE check_grouping_ruleid_fk (
325     p_column                                IN     VARCHAR2,
326     p_column_value                          IN     NUMBER,
327     x_return_status                         IN OUT NOCOPY VARCHAR2
328 );
329 
330 PROCEDURE check_automatch_set_id_fk (
331     p_column                                IN     VARCHAR2,
332     p_column_value                          IN     NUMBER,
333     x_return_status                         IN OUT NOCOPY VARCHAR2
334 );
335 
336 PROCEDURE check_positive_value (
337     p_column                                IN     VARCHAR2,
338     p_column_value                          IN     NUMBER,
339     x_return_status                         IN OUT NOCOPY VARCHAR2
340 );
341 PROCEDURE check_greater_than_zero (
342     p_column                                IN     VARCHAR2,
343     p_column_value                          IN     NUMBER,
344     x_return_status                         IN OUT NOCOPY VARCHAR2
345 );
346 
347 PROCEDURE check_less_than_100 (
348     p_column                                IN     VARCHAR2,
349     p_column_value                          IN     NUMBER,
350     x_return_status                         IN OUT NOCOPY VARCHAR2
351 );
352 
353 PROCEDURE validate_created_by_module (
354     p_create_update_flag          IN     VARCHAR2,
355     p_created_by_module           IN     VARCHAR2,
356     p_old_created_by_module       IN     VARCHAR2,
357     x_return_status               IN OUT NOCOPY VARCHAR2
358 );
359 
360 PROCEDURE validate_application_id (
361     p_create_update_flag          IN     VARCHAR2,
362     p_application_id              IN     NUMBER,
363     p_old_application_id          IN     NUMBER,
364     x_return_status               IN OUT NOCOPY VARCHAR2
365 );
366 
367 
368 PROCEDURE validate_bill_level (
369     p_create_update_flag                    IN     VARCHAR2,
370     p_customer_profile_rec                  IN     HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
371     x_return_status                         IN OUT NOCOPY VARCHAR2
372 );
373 
374 PROCEDURE validate_fv_attributes(
375     p_create_update_flag                    IN     VARCHAR2,
376     p_cust_account_rec                      IN     HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE,
377     p_rowid                                 IN     ROWID,
378     x_return_status                         IN OUT NOCOPY VARCHAR2
379 );
380 
381 --------------------------------------
382 -- public procedures and functions
383 --------------------------------------
384 
385 /**
386  * PROCEDURE validate_cust_account
387  *
388  * DESCRIPTION
389  *     Validates customer account record. Checks for
390  *         uniqueness
391  *         lookup types
392  *         mandatory columns
393  *         non-updateable fields
394  *         foreign key validations
395  *         other validations
396  *
397  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
398  *
399  * ARGUMENTS
400  *   IN:
401  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
402  *     p_cust_account_rec             Customer account record.
403  *     p_rowid                        Rowid of the record (used only in update mode).
404  *   IN/OUT:
405  *     x_return_status                Return status after the call. The status can
406  *                                    be FND_API.G_RET_STS_SUCCESS (success),
407  *                                    FND_API.G_RET_STS_ERROR (error),
408  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
409  *
410  * NOTES
411  *
412  * MODIFICATION HISTORY
413  *
414  *   07-23-2001    Jianying Huang      o Created.
415  *   11-08-2001    Rajeshwari P        Included the validation for fields, tax_code,
416  *                                     invoice_quantity_rule,customer_class_code,
417  *                                     tax_rounding_rule,primary_salesrep_id,
418  *                                     order_type_id,price_list_id,ship_partial,fob_point ,
419  *                                     item_cross_ref_pref,warehouse_id,date_type_preference,
420  *                                     ship_sets_include_lines_flag and
421  *                                     arrivalsets_include_lines_flag in  procedure
422  *                                     VALIDATE_CUST_ACCOUNT.
423  *  21-05-2002   Rajeshwari P          Bug fix 2311760.Commented the code which validates the
424  *                                     Obsolete column ship_partial.
425  *
426  *  05-26-2003   Ramesh Ch               Bug No:2441276. Added Validation to make
427  *                                       account_number as non updateable.
428  *  12-MAY-2005  Rajib Ranjan Borah   o TCA SSA Uptake (Bug 3456489)
429  *                                      ~ HZ Cache will be used instead of querying from
430  *                                        AR System Parameters.
431  *                                      ~ Tax Code, Order Type and Sales Rep are no longer set
432  *                                        at the Cust Account level.
433  */
434 
435 PROCEDURE validate_cust_account (
436     p_create_update_flag                    IN     VARCHAR2,
437     p_cust_account_rec                      IN     HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE,
438     p_rowid                                 IN     ROWID,
439     x_return_status                         IN OUT NOCOPY VARCHAR2
440 ) IS
441 
442     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_account'
443 
444     l_dummy                                 VARCHAR2(1);
445     l_rowid                                 ROWID := NULL;
446 
447 --  Bug 3456489
448 --  l_profile                               AR_SYSTEM_PARAMETERS.generate_customer_number%TYPE;
449     l_profile                               VARCHAR2(1);
450 
451     l_orig_system_reference HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
452     l_orig_system_reference1                 HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
453     l_account_established_date              HZ_CUST_ACCOUNTS.account_established_date%TYPE;
454     -- l_account_termination_date              HZ_CUST_ACCOUNTS.account_termination_date%TYPE;
455     -- l_account_activation_date               HZ_CUST_ACCOUNTS.account_activation_date%TYPE;
456     l_created_by_module                     HZ_CUST_ACCOUNTS.created_by_module%TYPE;
457     l_application_id                        NUMBER;
458     l_status                                HZ_CUST_ACCOUNTS.status%TYPE;
459     l_customer_type                         HZ_CUST_ACCOUNTS.customer_type%TYPE;
460     l_sales_channel_code                    HZ_CUST_ACCOUNTS.sales_channel_code%TYPE;
461     l_freight_term                          HZ_CUST_ACCOUNTS.freight_term%TYPE;
462     l_ship_via                              HZ_CUST_ACCOUNTS.ship_via%TYPE;
463     l_ship_sets_inc_lines_f                 HZ_CUST_ACCOUNTS.ship_sets_include_lines_flag%TYPE;
464     l_arrivalsets_inc_lines_f               HZ_CUST_ACCOUNTS.arrivalsets_include_lines_flag%TYPE;
465     l_tax_code                              HZ_CUST_ACCOUNTS.TAX_CODE%TYPE;
466     l_invoice_quantity_rule                 HZ_CUST_ACCOUNTS.INVOICE_QUANTITY_RULE%TYPE;
467 --    l_primary_salesrep_id                   HZ_CUST_ACCOUNTS.PRIMARY_SALESREP_ID%TYPE;
468     l_order_type_id                         HZ_CUST_ACCOUNTS.ORDER_TYPE_ID%TYPE;
469     l_price_list_id                         HZ_CUST_ACCOUNTS.PRICE_LIST_ID%TYPE;
470 --    l_ship_partial                          HZ_CUST_ACCOUNTS.SHIP_PARTIAL%TYPE;
471     l_fob_point                             HZ_CUST_ACCOUNTS.FOB_POINT%TYPE;
472     l_item_cross_ref_pref                   HZ_CUST_ACCOUNTS.ITEM_CROSS_REF_PREF%TYPE;
473     l_warehouse_id                          HZ_CUST_ACCOUNTS.WAREHOUSE_ID%TYPE;
474     l_date_type_preference                  HZ_CUST_ACCOUNTS.DATE_TYPE_PREFERENCE%TYPE;
475     l_customer_class_code                   HZ_CUST_ACCOUNTS.CUSTOMER_CLASS_CODE%TYPE;
476     l_tax_rounding_rule                     HZ_CUST_ACCOUNTS.TAX_ROUNDING_RULE%TYPE;
477     l_account_number                        HZ_CUST_ACCOUNTS.ACCOUNT_NUMBER%TYPE;
478     l_instr_length  number := 0;
479     l_validate_flag varchar2(1) := 'Y';
480     l_mosr_owner_table_id number;
481 
482     l_temp_return_status VARCHAR2(10); -- for storing return status from
483                                        -- hz_orig_system_ref_pub.get_owner_table_id
484 
485 BEGIN
486 
487     -- Check if API is called in debug mode. If yes, enable debug.
488     --enable_debug;
489 
490     -- Debug info.
491     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
492         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_cust_account (+)',
493                                p_msg_level=>fnd_log.level_procedure);
494     END IF;
495 
496 
497     -- Select fields for later use during update.
498     IF p_create_update_flag = 'U' THEN
499         SELECT ACCOUNT_NUMBER,ORIG_SYSTEM_REFERENCE, ACCOUNT_ESTABLISHED_DATE,
500                -- ACCOUNT_TERMINATION_DATE, --ACCOUNT_ACTIVATION_DATE,
501                CREATED_BY_MODULE, APPLICATION_ID,
502                STATUS, CUSTOMER_TYPE, SALES_CHANNEL_CODE, FREIGHT_TERM,
503                SHIP_VIA,SHIP_SETS_INCLUDE_LINES_FLAG,ARRIVALSETS_INCLUDE_LINES_FLAG,
504                TAX_CODE,INVOICE_QUANTITY_RULE,--PRIMARY_SALESREP_ID,
505                ORDER_TYPE_ID,PRICE_LIST_ID,FOB_POINT,
506                ITEM_CROSS_REF_PREF,WAREHOUSE_ID,DATE_TYPE_PREFERENCE,
507                CUSTOMER_CLASS_CODE,TAX_ROUNDING_RULE
508         INTO l_account_number,l_orig_system_reference, l_account_established_date,
509              -- l_account_termination_date, --l_account_activation_date,
510              l_created_by_module, l_application_id,
511              l_status, l_customer_type, l_sales_channel_code, l_freight_term,
512              l_ship_via,l_ship_sets_inc_lines_f,l_arrivalsets_inc_lines_f,
513              l_tax_code,l_invoice_quantity_rule,--l_primary_salesrep_id,
514              l_order_type_id,l_price_list_id,l_fob_point,
515              l_item_cross_ref_pref,l_warehouse_id,l_date_type_preference,
516              l_customer_class_code,l_tax_rounding_rule
517         FROM HZ_CUST_ACCOUNTS
518         WHERE ROWID = p_rowid;
519     END IF;
520 
521     --------------------------------------
522     -- validate cust_account_id
523     --------------------------------------
524 /****Logical APIs - validation not required****/
525   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
526     IF p_create_update_flag = 'C' THEN
527 
528         -- If primary key value is passed, check for uniqueness.
529         -- If primary key value is not passed, it will be generated
530         -- from sequence by table handler.
531 
532         IF p_cust_account_rec.cust_account_id IS NOT NULL AND
533            p_cust_account_rec.cust_account_id <> FND_API.G_MISS_NUM
534         THEN
535         BEGIN
536             SELECT 'Y' INTO l_dummy
537             FROM HZ_CUST_ACCOUNTS
538             WHERE CUST_ACCOUNT_ID = p_cust_account_rec.cust_account_id;
539 
540             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
541             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
542             FND_MSG_PUB.ADD;
543             x_return_status := FND_API.G_RET_STS_ERROR;
544         EXCEPTION
545             WHEN NO_DATA_FOUND THEN
546                 NULL;
547         END;
548 
549         /*IF G_DEBUG THEN
550             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
551                 'cust_account_id is unique during creation if passed in. ' ||
552                 'x_return_status = ' || x_return_status, l_debug_prefix );
553         END IF;
554         */
555         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
556            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
557                                   p_message=>'cust_account_id is unique during creation if passed in. ' ||
558                                              'x_return_status = ' || x_return_status,
559                                   p_msg_level=>fnd_log.level_statement);
560         END IF;
561 
562         END IF;
563 
564     END IF;
565 
566     /*IF G_DEBUG THEN
567         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
568             '(+) after validate cust_account_id ... ' ||
569             'x_return_status = ' || x_return_status, l_debug_prefix );
570     END IF;
571     */
572     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
573            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate cust_account_id ... ' ||
574                                       'x_return_status = ' || x_return_status,
575                                   p_msg_level=>fnd_log.level_statement);
576     END IF;
577   END IF;
578 
579     --------------------------------------
580     -- validate account_number
581     --------------------------------------
582 
583     -- account_number should be mandatory and unique.
584 
585     -- check if need generate account_number.
586    BEGIN
587 
588    /* 3456489. Refer the new HZ_CACHE. */
589         --IF p_create_update_flag = 'C' THEN
590                 l_profile := HZ_MO_GLOBAL_CACHE.Get_Generate_Customer_Number;
591         --END IF;
592 
593    EXCEPTION
594        WHEN NO_DATA_FOUND THEN
595            x_return_status := FND_API.G_RET_STS_ERROR;
596    END ;
597 
598    /* IF G_DEBUG THEN
599         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
600             'account_number autonumbering is ' || NVL( l_profile, 'N' ),
601             l_debug_prefix );
602     END IF;
603     */
604     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
605            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number autonumbering is ' || NVL( l_profile, 'N' ),
606                                   p_msg_level=>fnd_log.level_statement);
607     END IF;
608 
609     IF p_create_update_flag = 'C' THEN
610 
611         -- If autonumbering is on, if user has passed in an account_number,
612         -- error out. If autonumbering is off, if user has not passed in
613         -- value, error out;
614 
615         IF l_profile = 'Y' THEN
616             IF p_cust_account_rec.account_number IS NOT NULL AND
617                p_cust_account_rec.account_number <> FND_API.G_MISS_CHAR
618             THEN
619                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCOUNT_NUMBER_AUTO_ON' );
620                 FND_MSG_PUB.ADD;
621                 x_return_status := FND_API.G_RET_STS_ERROR;
622             END IF;
623 
624             -- the account_number will be generated from sequence by table handler.
625 
626             /*IF G_DEBUG THEN
627                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
628                     'account_number cannot be passed in if autonumbering is on. ' ||
629                     'x_return_status = ' || x_return_status, l_debug_prefix );
630             END IF;
631             */
632             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
633                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
634                                        p_message=>'account_number cannot be passed in if autonumbering is on. ' ||
635                                                   'x_return_status = ' || x_return_status,
636                                        p_msg_level=>fnd_log.level_statement);
637             END IF;
638 
639         ELSIF  l_profile = 'N' /* Bug 5118546 */
640         THEN
641             IF p_cust_account_rec.account_number IS NULL OR
642                p_cust_account_rec.account_number = FND_API.G_MISS_CHAR
643             THEN
644                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
645                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'account_number' );
646                 FND_MSG_PUB.ADD;
647                 x_return_status := FND_API.G_RET_STS_ERROR;
648             END IF;
649 
650             /*IF G_DEBUG THEN
651                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
652                     'account_number is mandatory if autonumbering is off. ' ||
653                     'x_return_status = ' || x_return_status, l_debug_prefix );
654             END IF;
655             */
656             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
657                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is mandatory if autonumbering is off. ' ||
658                                                 'x_return_status = ' || x_return_status,
659                                         p_msg_level=>fnd_log.level_statement);
660             END IF;
661 
662         END IF;
663 
664     ELSE -- in update
665         IF p_cust_account_rec.account_number IS NOT NULL THEN
666             validate_cannot_update_to_null (
667                 p_column                                => 'account_number',
668                 p_column_value                          => p_cust_account_rec.account_number,
669                 x_return_status                         => x_return_status );
670 
671             /*IF G_DEBUG THEN
672                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
673                     'account_number cannot be updated to null. ' ||
674                     'x_return_status = ' || x_return_status, l_debug_prefix );
675             END IF;
676             */
677             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
678                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number cannot be updated to null. ' ||
679                                                 'x_return_status = ' || x_return_status,
680                                        p_msg_level=>fnd_log.level_statement);
681             END IF;
682 
683             --------------------------------------
684             -- validate ACCOUNT NUMBER  BugNo:2441276
685             --------------------------------------
686 
687             --  bug 3969469. account_number is updatable if the system option
688             --  if AUTO_CUSTOMER_NUMBERING is OFF else it is not updatable.
689 
690 
691             IF  (p_cust_account_rec.account_number<>l_account_number
692                 AND l_profile='Y') -- bug 3969469
693             THEN
694 
695                 validate_nonupdateable (
696                     p_column                                => 'account_number',
697                     p_column_value                          => p_cust_account_rec.account_number,
698                     p_old_column_value                      => l_account_number,
699                     x_return_status                         => x_return_status );
700 
701                 /*IF G_DEBUG THEN
702                     hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
703                         'account_number is non-updateable. ' ||
704                         'x_return_status = ' || x_return_status, l_debug_prefix );
705                 END IF;
706                 */
707                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
708                         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is non-updateable. ' ||
709                                                          'x_return_status = ' || x_return_status,
710                                                p_msg_level=>fnd_log.level_statement);
711                 END IF;
712 
713             END IF;
714 
715         END IF;
716 
717     END IF;
718 
719     -- account_number is unique.
720     IF p_cust_account_rec.account_number IS NOT NULL AND
721        p_cust_account_rec.account_number <> FND_API.G_MISS_CHAR
722     THEN
723     BEGIN
724         SELECT ROWID INTO l_rowid
725         FROM HZ_CUST_ACCOUNTS
726         WHERE ACCOUNT_NUMBER = p_cust_account_rec.account_number;
727 
728         IF p_create_update_flag = 'C' OR
729            ( p_create_update_flag = 'U' AND l_rowid <> p_rowid )
730         THEN
731             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
732             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'account_number' );
733             FND_MSG_PUB.ADD;
734             x_return_status := FND_API.G_RET_STS_ERROR;
735         END IF;
736     EXCEPTION
737         WHEN NO_DATA_FOUND THEN
738             NULL;
739     END;
740 
741     /*IF G_DEBUG THEN
742         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
743             'account_number is unique. ' ||
744             'x_return_status = ' || x_return_status, l_debug_prefix );
745     END IF;
746     */
747     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
748            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is unique. ' ||
749                                              'x_return_status = ' || x_return_status,
750                                   p_msg_level=>fnd_log.level_statement);
751     END IF;
752 
753     END IF;
754 
755 
756 
757 
758     /*IF G_DEBUG THEN
759         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
760             '(+) after validate account_number ... ' ||
761             'x_return_status = ' || x_return_status, l_debug_prefix );
762     END IF;
763     */
764 
765     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
766            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate account_number ... ' ||
767                                   'x_return_status = ' || x_return_status,
768                                   p_msg_level=>fnd_log.level_statement);
769     END IF;
770 
771 
772     --------------------------------------
773     -- validate orig_system_reference
774     --------------------------------------
775 /****Logical APIs - validation not required****/
776   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
777     -- orig_system_reference is unique. Since orig_system_refence is defaulting to
778     -- primary key, we only need to check the uniqueness if user passes some value.
779     -- database constraints can catch unique error when we defaulting.
780     -- orig_system_reference is non-updateable, we only need to check uniqueness
781     -- during creation.
782 
783     IF p_create_update_flag = 'C' AND
784        p_cust_account_rec.orig_system_reference IS NOT NULL AND
785        p_cust_account_rec.orig_system_reference <> FND_API.G_MISS_CHAR
786     THEN
787     BEGIN
788         SELECT 'Y' INTO l_dummy
789         FROM HZ_CUST_ACCOUNTS
790         WHERE ORIG_SYSTEM_REFERENCE = p_cust_account_rec.orig_system_reference;
791 
792         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
793         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'orig_system_reference' );
794         FND_MSG_PUB.ADD;
795         x_return_status := FND_API.G_RET_STS_ERROR;
796     EXCEPTION
797         WHEN NO_DATA_FOUND THEN
798             NULL;
799     END;
800 
801     /*IF G_DEBUG THEN
802         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
803             'orig_system_reference is unique. ' ||
804             'x_return_status = ' || x_return_status, l_debug_prefix );
805     END IF;
806     */
807     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
808            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is unique. ' ||
809                                          'x_return_status = ' || x_return_status,
810                                   p_msg_level=>fnd_log.level_statement);
811     END IF;
812 
813     END IF;
814 
815     l_instr_length := instr(l_orig_system_reference,'#@');
816     if l_instr_length > 0
817     then
818         l_orig_system_reference1 := null;
819         if  substr(l_orig_system_reference,1,l_instr_length-1) <> p_cust_account_rec.orig_system_reference
820         then
821                 l_validate_flag := 'N';
822         end if;
823     else
824         l_orig_system_reference1 := p_cust_account_rec.orig_system_reference;
825     end if;
826 
827    IF (p_cust_account_rec.orig_system is not null and p_cust_account_rec.orig_system <>fnd_api.g_miss_char)
828     and (p_cust_account_rec.orig_system_reference is not null and p_cust_account_rec.orig_system_reference <>fnd_api.g_miss_char)
829     and p_create_update_flag = 'U'
830    then
831         hz_orig_system_ref_pub.get_owner_table_id
832         (p_orig_system => p_cust_account_rec.orig_system,
833         p_orig_system_reference => p_cust_account_rec.orig_system_reference,
834         p_owner_table_name => 'HZ_CUST_ACCOUNTS',
835         x_owner_table_id => l_mosr_owner_table_id,
836         x_return_status => l_temp_return_status);
837 
838         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
839 		    l_mosr_owner_table_id= nvl(p_cust_account_rec.cust_account_id,l_mosr_owner_table_id))
840         THEN
841             l_validate_flag := 'N';
842         END IF;
843 
844         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
845 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
846 		-- In case of success, leave it to carry over previous value as before this call.
847 		-- Fix for Bug 5498116 (29-AUG-2006)
848         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
849           x_return_status := l_temp_return_status;
850         END IF;
851 
852     END IF;
853     -- orig_system_reference is non-updateable field
854     IF p_create_update_flag = 'U' AND
855        p_cust_account_rec.orig_system_reference IS NOT NULL
856        and l_validate_flag = 'Y'
857     THEN
858 
859         validate_nonupdateable (
860             p_column                                => 'orig_system_reference',
861             p_column_value                          => l_orig_system_reference1,
862             p_old_column_value                      => l_orig_system_reference,
863             x_return_status                         => x_return_status );
864 
865         /*IF G_DEBUG THEN
866             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
867                 'orig_system_reference is non-updateable. ' ||
868                 'x_return_status = ' || x_return_status, l_debug_prefix );
869         END IF;
870         */
871         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
872            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is non-updateable. ' ||
873                                         'x_return_status = ' || x_return_status,
874                                   p_msg_level=>fnd_log.level_statement);
875         END IF;
876 
877     END IF;
878 
879     /*IF G_DEBUG THEN
880         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
881             '(+) after validate orig_system_reference ... ' ||
882             'x_return_status = ' || x_return_status, l_debug_prefix );
883     END IF;
884     */
885     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
886            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
887                                         'x_return_status = ' || x_return_status,
888                                   p_prefix =>l_debug_prefix,
889                                   p_msg_level=>fnd_log.level_statement);
890     END IF;
891   END IF;
892 
893 
894 
895     --------------------------------------
896     -- validate status
897     --------------------------------------
898 
899     -- status cannot be set to null during update
900     IF p_create_update_flag = 'U' AND
901        p_cust_account_rec.status IS NOT NULL
902     THEN
903         validate_cannot_update_to_null (
904             p_column                                => 'status',
905             p_column_value                          => p_cust_account_rec.status,
906             x_return_status                         => x_return_status );
907 
908         /*IF G_DEBUG THEN
909             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
910                 'status cannot be updated to null. ' ||
911                 'x_return_status = ' || x_return_status, l_debug_prefix );
912         END IF;
913         */
914         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
915            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be updated to null. ' ||
916                                         'x_return_status = ' || x_return_status,
917                                    p_msg_level=>fnd_log.level_statement);
918         END IF;
919 
920     END IF;
921 
922 /****Logical APIs - validation not required****/
923   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
924     -- status is lookup code in lookup type CODE_STATUS
925     IF p_cust_account_rec.status IS NOT NULL AND
926        p_cust_account_rec.status <> FND_API.G_MISS_CHAR AND
927        ( p_create_update_flag = 'C' OR
928          ( p_create_update_flag = 'U'  AND
929            p_cust_account_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
930     THEN
931         validate_lookup (
932             p_column                                => 'status',
933             p_lookup_type                           => 'CODE_STATUS',
934             p_column_value                          => p_cust_account_rec.status,
935             x_return_status                         => x_return_status );
936 
937         /*IF G_DEBUG THEN
938             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
939                 'status is lookup code in lookup type CODE_STATUS. ' ||
940                 'x_return_status = ' || x_return_status, l_debug_prefix );
941         END IF;
942         */
943 
944         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
945            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
946                                      'x_return_status = ' || x_return_status,
947                                   p_msg_level=>fnd_log.level_statement);
948         END IF;
949 
950     END IF;
951   END IF;
952 
953     /*IF G_DEBUG THEN
954         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
955             '(+) after validate status ... ' ||
956             'x_return_status = ' || x_return_status, l_debug_prefix );
957     END IF;
958     */
959 
960     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
961            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate status ... ' ||
962                                         'x_return_status = ' || x_return_status,
963                                   p_msg_level=>fnd_log.level_statement);
964     END IF;
965 
966 
967     --------------------------------------
968     -- validate customer_type
969     --------------------------------------
970 
971     -- customer_type is lookup code in lookup type CUSTOMER_TYPE
972     IF p_cust_account_rec.customer_type IS NOT NULL AND
973        p_cust_account_rec.customer_type <> FND_API.G_MISS_CHAR AND
974        ( p_create_update_flag = 'C' OR
975          ( p_create_update_flag = 'U'  AND
976            p_cust_account_rec.customer_type <> NVL( l_customer_type, FND_API.G_MISS_CHAR ) ) )
977     THEN
978         validate_lookup (
979             p_column                                => 'customer_type',
980             p_lookup_type                           => 'CUSTOMER_TYPE',
981             p_column_value                          => p_cust_account_rec.customer_type,
982             x_return_status                         => x_return_status );
983 
984         /*IF G_DEBUG THEN
985             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
986                 'customer_type is lookup code in lookup type CUSTOMER_TYPE. ' ||
987                 'x_return_status = ' || x_return_status, l_debug_prefix );
988         END IF;
989         */
990         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
991            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'customer_type is lookup code in lookup type CUSTOMER_TYPE. ' ||
992                                              'x_return_status = ' || x_return_status,
993                                   p_msg_level=>fnd_log.level_statement);
994         END IF;
995 
996     END IF;
997 
998     /*IF G_DEBUG THEN
999         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1000             '(+) after validate customer_type ... ' ||
1001             'x_return_status = ' || x_return_status, l_debug_prefix );
1002     END IF;
1003     */
1004     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1005            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate customer_type ... ' ||
1006                                         'x_return_status = ' || x_return_status,
1007                                   p_msg_level=>fnd_log.level_statement);
1008     END IF;
1009 
1010 
1011     --------------------------------------
1012     -- validate sales_channel_code
1013     --------------------------------------
1014 
1015     -- sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups
1016     IF p_cust_account_rec.sales_channel_code IS NOT NULL AND
1017        p_cust_account_rec.sales_channel_code <> FND_API.G_MISS_CHAR AND
1018        ( p_create_update_flag = 'C' OR
1019          ( p_create_update_flag = 'U'  AND
1020            p_cust_account_rec.sales_channel_code <> NVL( l_sales_channel_code, FND_API.G_MISS_CHAR ) ) )
1021     THEN
1022         validate_lookup (
1023             p_column                                => 'sales_channel_code',
1024             p_lookup_table                          => 'SO_LOOKUPS',
1025             p_lookup_type                           => 'SALES_CHANNEL',
1026             p_column_value                          => p_cust_account_rec.sales_channel_code,
1027             x_return_status                         => x_return_status );
1028 
1029         /*IF G_DEBUG THEN
1030             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1031                 'sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups. ' ||
1032                 'x_return_status = ' || x_return_status, l_debug_prefix );
1033         END IF;
1034         */
1035         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1036            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups. ' ||
1037                                         'x_return_status = ' || x_return_status,
1038                                   p_msg_level=>fnd_log.level_statement);
1039         END IF;
1040 
1041     END IF;
1042 
1043     /*IF G_DEBUG THEN
1044         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1045             '(+) after validate sales_channel_code ... ' ||
1046             'x_return_status = ' || x_return_status, l_debug_prefix );
1047     END IF;
1048     */
1049     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1050            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate sales_channel_code ... ' ||
1051                                         'x_return_status = ' || x_return_status,
1052                                   p_msg_level=>fnd_log.level_statement);
1053     END IF;
1054 
1055 
1056     --------------------------------------
1057     -- validate freight_term
1058     --------------------------------------
1059 
1060     -- freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups
1061     IF p_cust_account_rec.freight_term IS NOT NULL AND
1062        p_cust_account_rec.freight_term <> FND_API.G_MISS_CHAR AND
1063        ( p_create_update_flag = 'C' OR
1064          ( p_create_update_flag = 'U'  AND
1065            p_cust_account_rec.freight_term <> NVL( l_freight_term, FND_API.G_MISS_CHAR ) ) )
1066     THEN
1067         validate_lookup (
1068             p_column                                => 'freight_term',
1069             p_lookup_table                          => 'SO_LOOKUPS',
1070             p_lookup_type                           => 'FREIGHT_TERMS',
1071             p_column_value                          => p_cust_account_rec.freight_term,
1072             x_return_status                         => x_return_status );
1073 
1074         /*IF G_DEBUG THEN
1075             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1076                 'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
1077                 'x_return_status = ' || x_return_status, l_debug_prefix );
1078         END IF;
1079         */
1080         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1081            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
1082                                                 'x_return_status = ' || x_return_status,
1083                                   p_msg_level=>fnd_log.level_statement);
1084          END IF;
1085 
1086 
1087     END IF;
1088 
1089     /*IF G_DEBUG THEN
1090         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1091             '(+) after validate freight_term ... ' ||
1092             'x_return_status = ' || x_return_status, l_debug_prefix );
1093     END IF;
1094     */
1095     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1096            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate freight_term ... ' ||
1097                                         'x_return_status = ' || x_return_status,
1098                                   p_msg_level=>fnd_log.level_statement);
1099     END IF;
1100 
1101 
1102     --------------------------------------
1103     -- validate tax_header_level_flag
1104     --------------------------------------
1105 /****Logical APIs - validation not required****/
1106   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1107     -- tax_header_level_flag is lookup code in lookup type YES/NO
1108     IF p_cust_account_rec.tax_header_level_flag IS NOT NULL AND
1109        p_cust_account_rec.tax_header_level_flag <> FND_API.G_MISS_CHAR
1110     THEN
1111         validate_lookup (
1112             p_column                                => 'tax_header_level_flag',
1113             p_lookup_type                           => 'YES/NO',
1114             p_column_value                          => p_cust_account_rec.tax_header_level_flag,
1115             x_return_status                         => x_return_status );
1116 
1117         /*IF G_DEBUG THEN
1118             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1119                 'tax_header_level_flag is lookup code in lookup type YES/NO. ' ||
1120                 'x_return_status = ' || x_return_status, l_debug_prefix );
1121         END IF;
1122         */
1123 
1124         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1125            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_header_level_flag is lookup code in lookup type YES/NO. ' ||
1126                                         'x_return_status = ' || x_return_status,
1127                                   p_msg_level=>fnd_log.level_statement);
1128         END IF;
1129 
1130     END IF;
1131 
1132     /*IF G_DEBUG THEN
1133         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1134             '(+) after validate tax_header_level_flag ... ' ||
1135             'x_return_status = ' || x_return_status, l_debug_prefix );
1136     END IF;
1137     */
1138     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1139            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_header_level_flag ... ' ||
1140                                   'x_return_status = ' || x_return_status,
1141                                   p_msg_level=>fnd_log.level_statement);
1142     END IF;
1143   END IF;
1144 
1145        ----------------------------
1146        --validate tax_code
1147        ----------------------------
1148 
1149    -- Bug 4713150 : tax_code is now validated against the view zx_output_classifications_v
1150 /*
1151    IF p_cust_account_rec.tax_code IS NOT NULL AND
1152       p_cust_account_rec.tax_code <> FND_API.G_MISS_CHAR
1153    THEN
1154        FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1155        FND_MESSAGE.SET_TOKEN('COLUMN','TAX_CODE');
1156        FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1157        FND_MSG_PUB.ADD;
1158        x_return_status := FND_API.G_RET_STS_ERROR;
1159    END IF;
1160 */
1161 
1162       IF p_cust_account_rec.tax_code is NOT NULL AND
1163          p_cust_account_rec.tax_code <> FND_API.G_MISS_CHAR AND
1164        ( p_create_update_flag = 'C' OR
1165          ( p_create_update_flag = 'U'  AND
1166            p_cust_account_rec.tax_code <> NVL( l_tax_code, FND_API.G_MISS_CHAR ) ) )
1167       THEN
1168           check_tax_code(
1169                p_column                                => 'tax_code',
1170                p_column_value                          => p_cust_account_rec.tax_code,
1171 	       p_called_from                           => 'validate_cust_account',
1172                x_return_status                         => x_return_status );
1173 
1174          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1175             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Tax_code should be a valid value defined in view zx_output_classifications_v. '||
1176                                                'x_return_status = ' || x_return_status,
1177                                    p_msg_level=>fnd_log.level_statement);
1178          END IF;
1179 
1180        END IF;
1181          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1182                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_code..' ||
1183                                        'x_return_status = ' || x_return_status,
1184                                       p_msg_level=>fnd_log.level_statement);
1185          END IF;
1186 
1187 
1188       ----------------------------------------------------------
1189       --validate order_type_id
1190       ----------------------------------------------------------
1191    /* 3456489. Order type is no longer set at the Customer Account Level. */
1192 
1193    IF p_cust_account_rec.order_type_id IS NOT NULL AND
1194       p_cust_account_rec.order_type_id <> FND_API.G_MISS_NUM
1195    THEN
1196        FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1197        FND_MESSAGE.SET_TOKEN('COLUMN','ORDER_TYPE_ID');
1198        FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1199        FND_MSG_PUB.ADD;
1200        x_return_status := FND_API.G_RET_STS_ERROR;
1201    END IF;
1202 
1203 
1204    /*
1205     |  --order_type_id should be a valid value defined in OE_ORDER_TYPES_V
1206     |
1207     |  IF p_cust_account_rec.order_type_id is NOT NULL AND
1208     |     p_cust_account_rec.order_type_id <> FND_API.G_MISS_NUM AND
1209     |   ( p_create_update_flag = 'C' OR
1210     |     ( p_create_update_flag = 'U'  AND
1211     |       p_cust_account_rec.order_type_id <> NVL( l_order_type_id, FND_API.G_MISS_NUM ) ) )
1212     |  THEN
1213     |      check_ord_type(
1214     |            p_column                                => 'order_type_id',
1215     |            p_column_value                          => p_cust_account_rec.order_type_id,
1216     |            x_return_status                         => x_return_status );
1217     |
1218     |     /*IF G_DEBUG THEN
1219     |        hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1220     |           'order_type_id should be a valid value defined in OE_ORDER_TYPES_V..' ||
1221     |           'x_return_status = ' || x_return_status, l_debug_prefix);
1222     |     END IF;
1223     |    *//*
1224     |    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1225     |       |  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'order_type_id should be a valid value defined in OE_ORDER_TYPES_V..' ||
1226     |                                           'x_return_status = ' || x_return_status,
1227     |                                p_msg_level=>fnd_log.level_statement);
1228     |    END IF;
1229     |
1230     |  END IF;
1231     |     /*IF G_DEBUG THEN
1232     |        hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1233     |           '(+) after validate order_type_id..' ||
1234     |           'x_return_status = ' || x_return_status, l_debug_prefix );
1235     |     END IF;
1236     |    *//*
1237     |    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1238     |      hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate order_type_id..' ||
1239     |                                   'x_return_status = ' || x_return_status,
1240     |                             p_msg_level=>fnd_log.level_statement);
1241     |    END IF;
1242     */
1243 
1244         ----------------------------------------------------------
1245         --validate primary_salesrep_id
1246         ----------------------------------------------------------
1247   /* 3456489. Sales Rep is no longer set at the Customer Account Level. */
1248 
1249    IF p_cust_account_rec.primary_salesrep_id IS NOT NULL AND
1250       p_cust_account_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
1251    THEN
1252        FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1253        FND_MESSAGE.SET_TOKEN('COLUMN','PRIMARY_SALESREP_ID');
1254        FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1255        FND_MSG_PUB.ADD;
1256        x_return_status := FND_API.G_RET_STS_ERROR;
1257    END IF;
1258 
1259   /*
1260    |    --Primary_salesrep_id should be a valid value defined in RA_SALESREPS
1261    |
1262    |    IF p_cust_account_rec.primary_salesrep_id is NOT NULL AND
1263    |       p_cust_account_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
1264    |      AND ( p_create_update_flag = 'C' OR
1265    |      ( p_create_update_flag = 'U'  AND
1266    |        p_cust_account_rec.primary_salesrep_id <> NVL( l_primary_salesrep_id, FND_API.G_MISS_NUM ) ) )
1267    |    THEN
1268    |        check_prim_salesrep(
1269    |                      p_column                                => 'primary_salesrep_id',
1270    |              p_column_value                          => p_cust_account_rec.primary_salesrep_id,
1271    |               x_return_status                         => x_return_status );
1272    |
1273    |        /*IF G_DEBUG THEN
1274    |           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1275    |               'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
1276    |               'x_return_status = ' || x_return_status, l_debug_prefix);
1277    |       | END IF;
1278    |       | *//*
1279    |        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1280    |            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
1281    |                                    'x_return_status = ' || x_return_status,
1282    |                           p_msg_level=>fnd_log.level_statement);
1283    |         END IF;
1284    |
1285    |     END IF;
1286    |         /*IF G_DEBUG THEN
1287    |            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1288    |               '(+) after validate primary_salesrep_id..' ||
1289    |               'x_return_status = ' || x_return_status, l_debug_prefix );
1290    |         END IF;
1291    |        *//*
1292    |        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1293    |             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate primary_salesrep_id..' ||
1294    |                                            'x_return_status = ' || x_return_status,
1295    |                                  p_msg_level=>fnd_log.level_statement);
1296    |        END IF;
1297    */
1298 
1299 --Bug fix 2311760
1300 /**********
1301         -------------------------------------------------------
1302         --validate ship_partial
1303         -------------------------------------------------------
1304         -- ship_partial is a lookup code in lookup type YES/NO
1305 
1306         IF p_cust_account_rec.ship_partial IS NOT NULL AND
1307            p_cust_account_rec.ship_partial <> FND_API.G_MISS_CHAR
1308          AND ( p_create_update_flag = 'C' OR
1309          ( p_create_update_flag = 'U'  AND
1310            p_cust_account_rec.ship_partial <> NVL( l_ship_partial, FND_API.G_MISS_CHAR) ) )
1311         THEN
1312             validate_lookup (
1313                 p_column                                => 'ship_partial',
1314                 p_lookup_type                           => 'YES/NO',
1315                 p_column_value                          => p_cust_account_rec.ship_partial,
1316                 x_return_status                         => x_return_status );
1317 
1318             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1319                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ship_partial is a lookup code in lookup type YES/NO. ' ||
1320                                              'x_return_status = ' || x_return_status,
1321                                           p_msg_level=>fnd_log.level_statement);
1322             END IF;
1323 
1324         END IF;
1325 
1326             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1327                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate ship_partial ... ' ||
1328                                                 'x_return_status = ' || x_return_status,
1329                                         p_msg_level=>fnd_log.level_statement);
1330             END IF;
1331 
1332 
1333 ***************/
1334         -----------------------------------------------------------
1335         --validate tax_rounding_rule
1336         -----------------------------------------------------------
1337         --tax_rounding_rule is a lookup_code in lookup type TAX_ROUNDING_RULE
1338 
1339         IF p_cust_account_rec.tax_rounding_rule is NOT NULL AND
1340            p_cust_account_rec.tax_rounding_rule <> FND_API.G_MISS_CHAR
1341          AND ( p_create_update_flag = 'C' OR
1342          ( p_create_update_flag = 'U'  AND
1343            p_cust_account_rec.tax_rounding_rule <> NVL( l_tax_rounding_rule, FND_API.G_MISS_CHAR) ) )
1344         THEN
1345             validate_lookup(
1346                 p_column        =>'tax_rounding_rule',
1347                 p_lookup_type   =>'TAX_ROUNDING_RULE',
1348                 p_column_value  =>p_cust_account_rec.tax_rounding_rule,
1349                 x_return_status =>x_return_status  );
1350 
1351             /*IF G_DEBUG THEN
1352                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1353                   'tax_rounding_rule is lookup_code in lookup type TAX_ROUNDING_RULE. '||
1354                   'x_return_status = ' || x_return_status, l_debug_prefix);
1355             END IF;
1356             */
1357 
1358             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1359                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_rounding_rule is lookup_code in lookup type TAX_ROUNDING_RULE. '||
1360                                                  'x_return_status = ' || x_return_status,
1361                                   p_msg_level=>fnd_log.level_statement);
1362             END IF;
1363 
1364         END IF;
1365             /*IF G_DEBUG THEN
1366                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1367                   '(+) after validate tax_rounding_rule..' ||
1368                   'x_return_status = ' || x_return_status, l_debug_prefix );
1369             END IF;
1370             */
1371             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1372                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_rounding_rule..' ||
1373                                                  'x_return_status = ' || x_return_status,
1374                                   p_msg_level=>fnd_log.level_statement);
1375              END IF;
1376 
1377 
1378         -------------------------------------------------------
1379         --validate customer_class_code
1380         -------------------------------------------------------
1381         --Customer_class_code is a lookup_code in lookup type CUSTOMER_CLASS
1382 
1383         IF p_cust_account_rec.customer_class_code is NOT NULL AND
1384            p_cust_account_rec.customer_class_code <> FND_API.G_MISS_CHAR
1385          AND ( p_create_update_flag = 'C' OR
1386          ( p_create_update_flag = 'U'  AND
1387            p_cust_account_rec.customer_class_code <> NVL( l_customer_class_code, FND_API.G_MISS_CHAR) ) )
1388         THEN
1389             validate_lookup(
1390                 p_column        =>'customer_class_code',
1391                 p_lookup_type   =>'CUSTOMER CLASS',
1392                 p_column_value  =>p_cust_account_rec.customer_class_code,
1393                 x_return_status =>x_return_status  );
1394             /*IF G_DEBUG THEN
1395                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1396                   'Customer_class_code is lookup_code in lookup type CUSTOMER_CLASS. '||
1397                   'x_return_status = ' || x_return_status, l_debug_prefix);
1398             END IF;
1399             */
1400             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1401                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Customer_class_code is lookup_code in lookup type CUSTOMER_CLASS. '||
1402                                                 'x_return_status = ' || x_return_status,
1403                                         p_msg_level=>fnd_log.level_statement);
1404             END IF;
1405 
1406         END IF;
1407             /*IF G_DEBUG THEN
1408                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1409                   '(+) after validate CUSTOMER_CLASS_CODE..' ||
1410                   'x_return_status = ' || x_return_status, l_debug_prefix );
1411              END IF;
1412              */
1413              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1414                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate CUSTOMER_CLASS_CODE..' ||
1415                                                 'x_return_status = ' || x_return_status,
1416                                           p_msg_level=>fnd_log.level_statement);
1417              END IF;
1418 
1419 
1420         ---------------------------------------------------
1421         --validate Invoice_quantity_rule
1422         ---------------------------------------------------
1423         --Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS
1424 
1425         IF p_cust_account_rec.invoice_quantity_rule is NOT NULL AND
1426            p_cust_account_rec.invoice_quantity_rule <> FND_API.G_MISS_CHAR
1427          AND ( p_create_update_flag = 'C' OR
1428          ( p_create_update_flag = 'U'  AND
1429            p_cust_account_rec.invoice_quantity_rule <> NVL( l_invoice_quantity_rule, FND_API.G_MISS_CHAR) ) )
1430         THEN
1431             validate_lookup(
1432                 p_column        =>'invoice_quantity_rule',
1433                 p_lookup_table  =>'OE_LOOKUPS',
1434                 p_lookup_type   =>'INVOICE_BASIS',
1435                 p_column_value  =>p_cust_account_rec.invoice_quantity_rule,
1436                 x_return_status =>x_return_status  );
1437 
1438             /*IF G_DEBUG THEN
1439                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1440                   'Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS. '||
1441                   'x_return_status = ' || x_return_status, l_debug_prefix);
1442             END IF;
1443             */
1444             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1445                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=> 'Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS. '||
1446                                                         'x_return_status = ' || x_return_status,
1447                                   p_msg_level=>fnd_log.level_statement);
1448             END IF;
1449 
1450         END IF;
1451             /*IF G_DEBUG THEN
1452                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1453                   '(+) after validate invoice_quantity_rule..' ||
1454                   'x_return_status = ' || x_return_status, l_debug_prefix );
1455             END IF;
1456             */
1457 
1458             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1459                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate invoice_quantity_rule..' ||
1460                                                         'x_return_status = ' || x_return_status,
1461                                   p_msg_level=>fnd_log.level_statement);
1462              END IF;
1463 
1464 
1465         ----------------------------------------------------------
1466         --validate price_list_id
1467         ----------------------------------------------------------
1468         --price_list_id should be a valid value defined in SO_PRICE_LISTS
1469 
1470         IF p_cust_account_rec.price_list_id is NOT NULL AND
1471            p_cust_account_rec.price_list_id <> FND_API.G_MISS_NUM
1472          AND ( p_create_update_flag = 'C' OR
1473          ( p_create_update_flag = 'U'  AND
1474            p_cust_account_rec.price_list_id <> NVL( l_price_list_id, FND_API.G_MISS_NUM) ) )
1475         THEN
1476             check_price_list_fk(
1477                  p_column                           => 'price_list_id',
1478                  p_column_value                     => p_cust_account_rec.price_list_id,
1479                  x_return_status                    => x_return_status );
1480             /*IF G_DEBUG THEN
1481                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1482                   'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
1483                   'x_return_status = ' || x_return_status, l_debug_prefix);
1484             END IF;
1485             */
1486             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1487                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
1488                                          'x_return_status = ' || x_return_status,
1489                                         p_msg_level=>fnd_log.level_statement);
1490             END IF;
1491 
1492         END IF;
1493             /*IF G_DEBUG THEN
1494                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1495                   '(+) after validate price_list_id..' ||
1496                   'x_return_status = ' || x_return_status, l_debug_prefix );
1497             END IF;
1498             */
1499             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1500                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate price_list_id..' ||
1501                                                 'x_return_status = ' || x_return_status,
1502                                         p_msg_level=>fnd_log.level_statement);
1503             END IF;
1504 
1505 
1506         ----------------------------------------------------------
1507         --validate fob_point
1508         ----------------------------------------------------------
1509         --fob_point is lookup_code in lookup type FOB
1510 
1511         IF p_cust_account_rec.fob_point is NOT NULL AND
1512            p_cust_account_rec.fob_point <> FND_API.G_MISS_CHAR
1513          AND ( p_create_update_flag = 'C' OR
1514          ( p_create_update_flag = 'U'  AND
1515            p_cust_account_rec.fob_point <> NVL( l_fob_point, FND_API.G_MISS_CHAR) ) )
1516         THEN
1517             validate_lookup(
1518                 p_column        =>'fob_point',
1519                 p_lookup_type   =>'FOB',
1520                 p_column_value  =>p_cust_account_rec.fob_point,
1521                 x_return_status =>x_return_status  );
1522 
1523             /*IF G_DEBUG THEN
1524                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1525                   'fob_point is lookup_code in lookup type FOB. '||
1526                   'x_return_status = ' || x_return_status, l_debug_prefix);
1527             END IF;
1528             */
1529             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1530                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fob_point is lookup_code in lookup type FOB. '||
1531                                                 'x_return_status = ' || x_return_status,
1532                                         p_msg_level=>fnd_log.level_statement);
1533             END IF;
1534 
1535 
1536         END IF;
1537             /*IF G_DEBUG THEN
1538                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1539                   '(+) after validate fob_point..' ||
1540                   'x_return_status = ' || x_return_status, l_debug_prefix );
1541             END IF;
1542             */
1543             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1544                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate fob_point..' ||
1545                                                 'x_return_status = ' || x_return_status,
1546                                   p_msg_level=>fnd_log.level_statement);
1547             END IF;
1548 
1549         ----------------------------------------------------------
1550         --validate item_cross_ref_pref
1551         ----------------------------------------------------------
1552         --item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should have value 'INT' or 'CUST'
1553 
1554         IF p_cust_account_rec.item_cross_ref_pref is NOT NULL AND
1555            p_cust_account_rec.item_cross_ref_pref <> FND_API.G_MISS_CHAR
1556          AND ( p_create_update_flag = 'C' OR
1557          ( p_create_update_flag = 'U'  AND
1558            p_cust_account_rec.item_cross_ref_pref <> NVL( l_item_cross_ref_pref, FND_API.G_MISS_CHAR) ) )
1559         THEN
1560             IF p_cust_account_rec.item_cross_ref_pref NOT IN('INT','CUST')
1561             THEN
1562                 check_item_cross_ref(
1563                      p_column                           => 'item_cross_ref_pref',
1564                      p_column_value                     => p_cust_account_rec.item_cross_ref_pref,
1565                      x_return_status                    => x_return_status );
1566 
1567                 /*IF G_DEBUG THEN
1568                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1569                       'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . '||
1570                       'x_return_status = ' || x_return_status, l_debug_prefix);
1571                 END IF;
1572                 */
1573                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1574                           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . '||
1575                                                         'x_return_status = ' || x_return_status,
1576                                                  p_msg_level=>fnd_log.level_statement);
1577                 END IF;
1578 
1579            END IF;
1580        END IF;
1581                /*IF G_DEBUG THEN
1582                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1583                      '(+) after validate item_cross_ref_pref..' ||
1584                      'x_return_status = ' || x_return_status, l_debug_prefix );
1585                END IF;
1586                */
1587                IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1588                         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate item_cross_ref_pref..' ||
1589                                                         'x_return_status = ' || x_return_status,
1590                                                p_msg_level=>fnd_log.level_statement);
1591                 END IF;
1592 
1593 
1594         ----------------------------------------------------------
1595         --validate warehouse_id
1596         ----------------------------------------------------------
1597         --warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS
1598 
1599         IF p_cust_account_rec.warehouse_id is NOT NULL AND
1600            p_cust_account_rec.warehouse_id <> FND_API.G_MISS_NUM
1601          AND ( p_create_update_flag = 'C' OR
1602          ( p_create_update_flag = 'U'  AND
1603            p_cust_account_rec.warehouse_id <> NVL( l_warehouse_id, FND_API.G_MISS_NUM) ) )
1604         THEN
1605             check_warehouse(
1606                  p_column                           => 'warehouse_id',
1607                  p_column_value                     => p_cust_account_rec.warehouse_id,
1608                  x_return_status                    => x_return_status );
1609             /*IF G_DEBUG THEN
1610                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1611                   'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
1612                   'x_return_status = ' || x_return_status, l_debug_prefix);
1613             END IF;
1614             */
1615 
1616             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1617                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
1618                                                         'x_return_status = ' || x_return_status,
1619                                         p_msg_level=>fnd_log.level_statement);
1620             END IF;
1621 
1622         END IF;
1623             /*IF G_DEBUG THEN
1624                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1625                   '(+) after validate warehouse_id..' ||
1626                   'x_return_status = ' || x_return_status, l_debug_prefix );
1627             END IF;
1628             */
1629 
1630             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1631                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate warehouse_id..' ||
1632                                                 'x_return_status = ' || x_return_status,
1633                                         p_msg_level=>fnd_log.level_statement);
1634             END IF;
1635 
1636 
1637         ----------------------------------------------------------
1638         --validate date_type_preference
1639         ----------------------------------------------------------
1640         --date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups
1641 
1642         IF p_cust_account_rec.date_type_preference is NOT NULL AND
1643            p_cust_account_rec.date_type_preference <> FND_API.G_MISS_CHAR
1644          AND ( p_create_update_flag = 'C' OR
1645          ( p_create_update_flag = 'U'  AND
1646            p_cust_account_rec.date_type_preference <> NVL( l_date_type_preference, FND_API.G_MISS_CHAR) ) )
1647         THEN
1648             validate_lookup(
1649                  p_column               =>'date_type_preference',
1650                  p_lookup_table         =>'OE_LOOKUPS',
1651                  p_lookup_type          =>'REQUEST_DATE_TYPE',
1652                  p_column_value         =>p_cust_account_rec.date_type_preference,
1653                  x_return_status        =>x_return_status   );
1654             /*IF G_DEBUG THEN
1655                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1656                   'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
1657                   'x_return_status = ' || x_return_status, l_debug_prefix);
1658             END IF;
1659             */
1660             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1661                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
1662                                                    'x_return_status = ' || x_return_status,
1663                                   p_msg_level=>fnd_log.level_statement);
1664             END IF;
1665 
1666         END IF;
1667             /*IF G_DEBUG THEN
1668                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1669                   '(+) after validate date_type_preference..' ||
1670                   'x_return_status = ' || x_return_status, l_debug_prefix );
1671             END IF;
1672             */
1673             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1674                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate date_type_preference..' ||
1675                                                 'x_return_status = ' || x_return_status,
1676                                   p_msg_level=>fnd_log.level_statement);
1677             END IF;
1678 
1679 
1680     --------------------------------------
1681     -- validate primary_specialist_id
1682     --------------------------------------
1683 
1684     -- primary_specialist_id is foreign key to per_all_people_f
1685     IF p_cust_account_rec.primary_specialist_id IS NOT NULL AND
1686        p_cust_account_rec.primary_specialist_id <> FND_API.G_MISS_NUM
1687     THEN
1688         check_per_all_people_f_fk (
1689             p_column                                 => 'primary_specialist_id',
1690             p_column_value                           => p_cust_account_rec.primary_specialist_id,
1691             x_return_status                          => x_return_status );
1692 
1693         /*IF G_DEBUG THEN
1694             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1695                 'primary_specialist_id is foreign key to per_all_people_f. ' ||
1696                 'x_return_status = ' || x_return_status, l_debug_prefix );
1697         END IF;
1698         */
1699         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1700            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'primary_specialist_id is foreign key to per_all_people_f. ' ||
1701                                              'x_return_status = ' || x_return_status,
1702                                   p_msg_level=>fnd_log.level_statement);
1703         END IF;
1704 
1705 
1706     END IF;
1707 
1708     /*IF G_DEBUG THEN
1709         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1710             '(+) after validate primary_specialist_id ... ' ||
1711             'x_return_status = ' || x_return_status, l_debug_prefix );
1712     END IF;
1713     */
1714     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1715            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate primary_specialist_id ... ' ||
1716                                         'x_return_status = ' || x_return_status,
1717                                   p_msg_level=>fnd_log.level_statement);
1718     END IF;
1719 
1720 
1721     --------------------------------------
1722     -- validate secondary_specialist_id
1723     --------------------------------------
1724 
1725     -- secondary_specialist_id is foreign key to per_all_people_f
1726     IF p_cust_account_rec.secondary_specialist_id IS NOT NULL AND
1727        p_cust_account_rec.secondary_specialist_id <> FND_API.G_MISS_NUM
1728     THEN
1729         check_per_all_people_f_fk (
1730             p_column                                 => 'secondary_specialist_id',
1731             p_column_value                           => p_cust_account_rec.secondary_specialist_id,
1732             x_return_status                          => x_return_status );
1733 
1734         /*IF G_DEBUG THEN
1735             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1736                 'secondary_specialist_id is foreign key to per_all_people_f. ' ||
1737                 'x_return_status = ' || x_return_status, l_debug_prefix );
1738         END IF;
1739         */
1740         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1741            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'secondary_specialist_id is foreign key to per_all_people_f. ' ||
1742                                              'x_return_status = ' || x_return_status,
1743                                   p_msg_level=>fnd_log.level_statement);
1744         END IF;
1745 
1746     END IF;
1747 
1748     /*IF G_DEBUG THEN
1749         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1750             '(+) after validate secondary_specialist_id ... ' ||
1751             'x_return_status = ' || x_return_status, l_debug_prefix );
1752     END IF;
1753     */
1754     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1755            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate secondary_specialist_id ... ' ||
1756                                              'x_return_status = ' || x_return_status,
1757                                   p_msg_level=>fnd_log.level_statement);
1758     END IF;
1759 
1760   /* comment out the validation as the account_liable_flag column is obsoleted in r12
1761 
1762     --------------------------------------
1763     -- validate account_liable_flag
1764     --------------------------------------
1765   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1766     -- account_liable_flag is lookup code in lookup type YES/NO
1767     IF p_cust_account_rec.account_liable_flag IS NOT NULL AND
1768        p_cust_account_rec.account_liable_flag <> FND_API.G_MISS_CHAR
1769     THEN
1770         validate_lookup (
1771             p_column                                => 'account_liable_flag',
1772             p_lookup_type                           => 'YES/NO',
1773             p_column_value                          => p_cust_account_rec.account_liable_flag,
1774             x_return_status                         => x_return_status );
1775 
1776         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1777            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_liable_flag is lookup code in lookup type YES/NO. ' ||
1778                                                 'x_return_status = ' || x_return_status,
1779                                   p_msg_level=>fnd_log.level_statement);
1780         END IF;
1781 
1782     END IF;
1783 
1784     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1785            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate account_liable_flag ... ' ||
1786                                                 'x_return_status = ' || x_return_status,
1787                                   p_msg_level=>fnd_log.level_statement);
1788     END IF;
1789   END IF;
1790   */
1791 
1792     --------------------------------------
1793     -- validate hold_bill_flag
1794     --------------------------------------
1795 /****Logical APIs - validation not required****/
1796   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1797     -- hold_bill_flag is lookup code in lookup type YES/NO
1798     IF p_cust_account_rec.hold_bill_flag IS NOT NULL AND
1799        p_cust_account_rec.hold_bill_flag <> FND_API.G_MISS_CHAR
1800     THEN
1801         validate_lookup (
1802             p_column                                => 'hold_bill_flag',
1803             p_lookup_type                           => 'YES/NO',
1804             p_column_value                          => p_cust_account_rec.hold_bill_flag,
1805             x_return_status                         => x_return_status );
1806 
1807         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1808            hz_utility_v2pub.debug(p_message=>'hold_bill_flag is lookup code in lookup type YES/NO. ' ||
1809                                              'x_return_status = ' || x_return_status,
1810                                   p_prefix=>l_debug_prefix,
1811                                   p_msg_level=>fnd_log.level_statement);
1812         END IF;
1813 
1814     END IF;
1815 
1816     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1817            hz_utility_v2pub.debug(p_message=>'(+) after validate hold_bill_flag ... ' ||
1818                                         'x_return_status = ' || x_return_status,
1819                                   p_prefix=>l_debug_prefix,
1820                                   p_msg_level=>fnd_log.level_statement);
1821     END IF;
1822   END IF;
1823 
1824   /* comment out the validation as the dormant_account_flag column is obsoleted in r12
1825 
1826     --------------------------------------
1827     -- validate dormant_account_flag
1828     --------------------------------------
1829   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1830     -- dormant_account_flag is lookup code in lookup type YES/NO
1831     IF p_cust_account_rec.dormant_account_flag IS NOT NULL AND
1832        p_cust_account_rec.dormant_account_flag <> FND_API.G_MISS_CHAR
1833     THEN
1834         validate_lookup (
1835             p_column                                => 'dormant_account_flag',
1836             p_lookup_type                           => 'YES/NO',
1837             p_column_value                          => p_cust_account_rec.dormant_account_flag,
1838             x_return_status                         => x_return_status );
1839 
1840         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1841            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'dormant_account_flag is lookup code in lookup type YES/NO. ' ||
1842                                                  'x_return_status = ' || x_return_status,
1843                                   p_msg_level=>fnd_log.level_statement);
1844        END IF;
1845 
1846     END IF;
1847 
1848     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1849            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate dormant_account_flag ... ' ||
1850                                         'x_return_status = ' || x_return_status,
1851                                   p_msg_level=>fnd_log.level_statement);
1852     END IF;
1853   END IF;
1854   */
1855 
1856     --------------------------------------
1857     -- validate ship_sets_include_lines_flag
1858     --------------------------------------
1859 /****Logical APIs - validation not required****/
1860   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1861     -- ship_sets_include_lines_flag is lookup code in lookup type YES/NO
1862     IF p_cust_account_rec.ship_sets_include_lines_flag IS NOT NULL AND
1863        p_cust_account_rec.ship_sets_include_lines_flag <> FND_API.G_MISS_CHAR
1864          AND ( p_create_update_flag = 'C' OR
1865          ( p_create_update_flag = 'U'  AND
1866            p_cust_account_rec.ship_sets_include_lines_flag <> NVL( l_ship_sets_inc_lines_f, FND_API.G_MISS_CHAR) ) )
1867     THEN
1868         validate_lookup (
1869             p_column                                => 'ship_sets_include_lines_flag',
1870             p_lookup_type                           => 'YES/NO',
1871             p_column_value                          => p_cust_account_rec.ship_sets_include_lines_flag,
1872             x_return_status                         => x_return_status );
1873 
1874         /*IF G_DEBUG THEN
1875             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1876                 'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1877                 'x_return_status = ' || x_return_status, l_debug_prefix );
1878         END IF;
1879         */
1880         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1881            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1882                                                 'x_return_status = ' || x_return_status,
1883                                   p_msg_level=>fnd_log.level_statement);
1884         END IF;
1885 
1886     END IF;
1887   END IF;
1888 
1889 --if ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag
1890 --is always set to N.
1891 
1892 IF (p_create_update_flag = 'C' or
1893    (p_create_update_flag ='U' and
1894     p_cust_account_rec.ship_sets_include_lines_flag <> NVL(l_ship_sets_inc_lines_f,FND_API.G_MISS_CHAR)))
1895 THEN
1896    IF p_cust_account_rec.ship_sets_include_lines_flag = 'Y'
1897    THEN
1898      BEGIN
1899        SELECT decode(p_cust_account_rec.ship_sets_include_lines_flag,p_cust_account_rec.arrivalsets_include_lines_flag,
1900                      'N',l_arrivalsets_inc_lines_f,
1901                                          decode(p_cust_account_rec.arrivalsets_include_lines_flag,l_ship_sets_inc_lines_f,                                                'Y','N'),'Y')
1902        INTO l_dummy
1903        FROM DUAL;
1904        IF l_dummy <> 'Y'
1905        THEN
1906             FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
1907             FND_MESSAGE.SET_TOKEN('COLUMN1','ship_sets_include_lines_flag');
1908             FND_MESSAGE.SET_TOKEN('VALUE1','Y');
1909             FND_MESSAGE.SET_TOKEN('COLUMN2','arrivalsets_include_lines_flag');
1910             FND_MESSAGE.SET_TOKEN('VALUE2','N');
1911             FND_MSG_PUB.ADD;
1912             x_return_status := FND_API.G_RET_STS_ERROR;
1913        END IF;
1914      END ;
1915    END IF;
1916 END IF;
1917         /*IF G_DEBUG THEN
1918             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1919                 'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
1920                 'x_return_status = ' || x_return_status, l_debug_prefix);
1921         END IF;
1922         */
1923         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1924            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
1925                                                 'x_return_status = ' || x_return_status,
1926                                   p_msg_level=>fnd_log.level_statement);
1927         END IF;
1928 
1929 
1930 
1931         /*IF G_DEBUG THEN
1932            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1933               '(+) after validate arrivalsets_include_lines_flag ... ' ||
1934               'x_return_status = ' || x_return_status, l_debug_prefix );
1935         END IF;
1936         */
1937         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1938            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
1939                                         'x_return_status = ' || x_return_status,
1940                                   p_msg_level=>fnd_log.level_statement);
1941         END IF;
1942 
1943 
1944     --------------------------------------
1945     -- validate arrivalsets_include_lines_flag
1946     --------------------------------------
1947 /****Logical APIs - validation not required****/
1948   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1949     -- arrivalsets_include_lines_flag is lookup code in lookup type YES/NO
1950     IF p_cust_account_rec.arrivalsets_include_lines_flag IS NOT NULL AND
1951        p_cust_account_rec.arrivalsets_include_lines_flag <> FND_API.G_MISS_CHAR
1952          AND ( p_create_update_flag = 'C' OR
1953          ( p_create_update_flag = 'U'  AND
1954            p_cust_account_rec.arrivalsets_include_lines_flag <> NVL( l_arrivalsets_inc_lines_f, FND_API.G_MISS_CHAR) ) )
1955     THEN
1956         validate_lookup (
1957             p_column                                => 'arrivalsets_include_lines_flag',
1958             p_lookup_type                           => 'YES/NO',
1959             p_column_value                          => p_cust_account_rec.arrivalsets_include_lines_flag,
1960             x_return_status                         => x_return_status );
1961 
1962         /*IF G_DEBUG THEN
1963             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1964                 'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1965                 'x_return_status = ' || x_return_status, l_debug_prefix );
1966         END IF;
1967         */
1968         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1969            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1970                                   'x_return_status = ' || x_return_status,
1971                                   p_msg_level=>fnd_log.level_statement);
1972         END IF;
1973 
1974     END IF;
1975   END IF;
1976 
1977 --If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag
1978 --is always set to N.
1979 
1980 IF (p_create_update_flag ='C' or
1981         (p_create_update_flag ='U' and
1982          p_cust_account_rec.arrivalsets_include_lines_flag <> NVL(l_arrivalsets_inc_lines_f,FND_API.G_MISS_CHAR)))
1983 THEN
1984         IF p_cust_account_rec.arrivalsets_include_lines_flag = 'Y'
1985         THEN
1986           BEGIN
1987             SELECT decode(p_cust_account_rec.arrivalsets_include_lines_flag,p_cust_account_rec.ship_sets_include_lines_flag,
1988                           'N',l_ship_sets_inc_lines_f,
1989                                         decode(p_cust_account_rec.ship_sets_include_lines_flag,l_arrivalsets_inc_lines_f,
1990                                                'Y','N'),'Y')
1991             INTO l_dummy
1992             FROM DUAL;
1993             IF l_dummy <> 'Y'
1994             THEN
1995                     FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
1996                     FND_MESSAGE.SET_TOKEN('COLUMN1','arrivalsets_include_lines_flag');
1997                     FND_MESSAGE.SET_TOKEN('VALUE1','Y');
1998                     FND_MESSAGE.SET_TOKEN('COLUMN2','ship_sets_include_lines_flag');
1999                     FND_MESSAGE.SET_TOKEN('VALUE2','N');
2000                     FND_MSG_PUB.ADD;
2001                x_return_status := FND_API.G_RET_STS_ERROR;
2002             END IF;
2003           END ;
2004         END IF;
2005 END IF;
2006         /*IF G_DEBUG THEN
2007            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2008               'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always set to N. ' ||
2009               'x_return_status = ' || x_return_status, l_debug_prefix );
2010         END IF;
2011         */
2012         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2013            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always set to N. ' ||
2014                                              'x_return_status = ' || x_return_status,
2015                                   p_msg_level=>fnd_log.level_statement);
2016         END IF;
2017 
2018 
2019         /*IF G_DEBUG THEN
2020              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2021                  '(+) after validate arrivalsets_include_lines_flag ... ' ||
2022                  'x_return_status = ' || x_return_status, l_debug_prefix );
2023         END IF;
2024         */
2025         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2026            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
2027                                          'x_return_status = ' || x_return_status,
2028                                   p_msg_level=>fnd_log.level_statement);
2029         END IF;
2030 
2031 
2032     --------------------------------------
2033     -- validate sched_date_push_flag
2034     --------------------------------------
2035 /****Logical APIs - validation not required****/
2036   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2037     -- sched_date_push_flag is lookup code in lookup type YES/NO
2038     IF p_cust_account_rec.sched_date_push_flag IS NOT NULL AND
2039        p_cust_account_rec.sched_date_push_flag <> FND_API.G_MISS_CHAR
2040     THEN
2041         validate_lookup (
2042             p_column                                => 'sched_date_push_flag',
2043             p_lookup_type                           => 'YES/NO',
2044             p_column_value                          => p_cust_account_rec.sched_date_push_flag,
2045             x_return_status                         => x_return_status );
2046 
2047         /*IF G_DEBUG THEN
2048             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2049                 'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
2050                 'x_return_status = ' || x_return_status, l_debug_prefix );
2051         END IF;
2052         */
2053         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2054            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
2055                                                 'x_return_status = ' || x_return_status,
2056                                   p_msg_level=>fnd_log.level_statement);
2057         END IF;
2058 
2059     END IF;
2060 
2061     /*IF G_DEBUG THEN
2062         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2063             '(+) after validate sched_date_push_flag ... ' ||
2064             'x_return_status = ' || x_return_status, l_debug_prefix );
2065     END IF;
2066     */
2067     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2068            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate sched_date_push_flag ... ' ||
2069                                         'x_return_status = ' || x_return_status,
2070                                   p_msg_level=>fnd_log.level_statement);
2071     END IF;
2072   END IF;
2073 
2074 
2075     /* comment out the validation as the account_activation_date column
2076        and account_termination_date column are obsoleted in r12
2077 
2078     ----------------------------------------------
2079     -- validate account_established_date and account_termination_date
2080     ----------------------------------------------
2081 
2082     -- account_termination_date should be greater than account_established_date
2083     validate_start_end_date (
2084         p_create_update_flag                    => p_create_update_flag,
2085         p_start_date_column_name                => 'account_established_date',
2086         p_start_date                            => p_cust_account_rec.account_established_date,
2087         p_old_start_date                        => l_account_established_date,
2088         p_end_date_column_name                  => 'account_termination_date',
2089         p_end_date                              => p_cust_account_rec.account_termination_date,
2090         p_old_end_date                          => l_account_termination_date,
2091         x_return_status                         => x_return_status );
2092 
2093     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2094            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_termination_date should be greater than account_established_date. ' ||
2095                                         'x_return_status = ' || x_return_status,
2096                                   p_msg_level=>fnd_log.level_statement);
2097     END IF;
2098 
2099     ----------------------------------------------
2100     -- validate account_established_date and account_activation_date
2101     ----------------------------------------------
2102 
2103     -- account_activation_date should be greater than account_established_date
2104     validate_start_end_date (
2105         p_create_update_flag                    => p_create_update_flag,
2106         p_start_date_column_name                => 'account_established_date',
2107         p_start_date                            => p_cust_account_rec.account_established_date,
2108         p_old_start_date                        => l_account_established_date,
2109         p_end_date_column_name                  => 'account_activation_date',
2110         p_end_date                              => p_cust_account_rec.account_activation_date,
2111         p_old_end_date                          => l_account_activation_date,
2112         x_return_status                         => x_return_status );
2113 
2114     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2115            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_activation_date should be greater than account_established_date. ' ||
2116                                         'x_return_status = ' || x_return_status,
2117                                   p_msg_level=>fnd_log.level_statement);
2118     END IF;
2119 
2120 
2121     ----------------------------------------------
2122     -- validate account_activation_date and account_termination_date
2123     ----------------------------------------------
2124 
2125     -- account_termination_date should be greater than account_activation_date
2126     validate_start_end_date (
2127         p_create_update_flag                    => p_create_update_flag,
2128         p_start_date_column_name                => 'account_activation_date',
2129         p_start_date                            => p_cust_account_rec.account_activation_date,
2130         p_old_start_date                        => l_account_activation_date,
2131         p_end_date_column_name                  => 'account_termination_date',
2132         p_end_date                              => p_cust_account_rec.account_termination_date,
2133         p_old_end_date                          => l_account_termination_date,
2134         x_return_status                         => x_return_status );
2135 
2136     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2137            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_termination_date should be greater than account_activation_date. ' ||
2138                                              'x_return_status = ' || x_return_status,
2139                                   p_msg_level=>fnd_log.level_statement);
2140     END IF;
2141     */
2142 
2143     --------------------------------------
2144     -- validate autopay_flag
2145     --------------------------------------
2146 /****Logical APIs - validation not required****/
2147   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2148     -- autopay_flag is lookup code in lookup type YES/NO
2149     IF p_cust_account_rec.autopay_flag IS NOT NULL AND
2150        p_cust_account_rec.autopay_flag <> FND_API.G_MISS_CHAR
2151     THEN
2152         validate_lookup (
2153             p_column                                => 'autopay_flag',
2154             p_lookup_type                           => 'YES/NO',
2155             p_column_value                          => p_cust_account_rec.autopay_flag,
2156             x_return_status                         => x_return_status );
2157 
2158         /*IF G_DEBUG THEN
2159             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2160                 'autopay_flag is lookup code in lookup type YES/NO. ' ||
2161                 'x_return_status = ' || x_return_status, l_debug_prefix );
2162         END IF;
2163         */
2164         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2165            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'autopay_flag is lookup code in lookup type YES/NO. ' ||
2166                                                 'x_return_status = ' || x_return_status,
2167                                   p_msg_level=>fnd_log.level_statement);
2168         END IF;
2169 
2170     END IF;
2171 
2172     /*IF G_DEBUG THEN
2173         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2174             '(+) after validate autopay_flag ... ' ||
2175             'x_return_status = ' || x_return_status, l_debug_prefix );
2176     END IF;
2177     */
2178     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2179            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate autopay_flag ... ' ||
2180                                                 'x_return_status = ' || x_return_status,
2181                                   p_msg_level=>fnd_log.level_statement);
2182     END IF;
2183   END IF;
2184 
2185   /* comment out the validation as the title column is obsoleted in r12
2186 
2187     --------------------------------------
2188     -- validate notify_flag
2189     --------------------------------------
2190   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2191     -- notify_flag is lookup code in lookup type YES/NO
2192     IF p_cust_account_rec.notify_flag IS NOT NULL AND
2193        p_cust_account_rec.notify_flag <> FND_API.G_MISS_CHAR
2194     THEN
2195         validate_lookup (
2196             p_column                                => 'notify_flag',
2197             p_lookup_type                           => 'YES/NO',
2198             p_column_value                          => p_cust_account_rec.notify_flag,
2199             x_return_status                         => x_return_status );
2200 
2201         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2202            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'notify_flag is lookup code in lookup type YES/NO. ' ||
2203                                         'x_return_status = ' || x_return_status,
2204                                   p_msg_level=>fnd_log.level_statement);
2205         END IF;
2206 
2207     END IF;
2208 
2209     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2210            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate notify_flag ... ' ||
2211                                         'x_return_status = ' || x_return_status,
2212                                   p_msg_level=>fnd_log.level_statement);
2213     END IF;
2214   END IF;
2215   */
2216 
2217     --------------------------------------
2218     -- validate ship_via
2219     --------------------------------------
2220 
2221     -- ship_via is foreign key to oe_ship_methods_v
2222     -- can be used only in single org case.
2223     IF p_cust_account_rec.ship_via IS NOT NULL AND
2224        p_cust_account_rec.ship_via <> FND_API.G_MISS_CHAR AND
2225        ( p_create_update_flag = 'C' OR
2226          ( p_create_update_flag = 'U'  AND
2227            p_cust_account_rec.ship_via <> NVL( l_ship_via, FND_API.G_MISS_CHAR ) ) )
2228     THEN
2229         check_oe_ship_methods_v_fk (
2230             p_entity                                 => 'ACCOUNT',
2231             p_column                                 => 'ship_via',
2232             p_column_value                           => p_cust_account_rec.ship_via,
2233             x_return_status                          => x_return_status );
2234 
2235         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2236            hz_utility_v2pub.debug(p_message=>'ship_via is foreign key to oe_ship_methods_v and can be used only in single org case. ' ||
2237                                              'x_return_status = ' || x_return_status,
2238                                   p_prefix=>l_debug_prefix,
2239                                   p_msg_level=>fnd_log.level_statement);
2240         END IF;
2241 
2242     END IF;
2243 
2244     /*IF G_DEBUG THEN
2245         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2246             '(+) after validate ship_via ... ' ||
2247             'x_return_status = ' || x_return_status, l_debug_prefix );
2248     END IF;
2249     */
2250     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2251            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate ship_via ... ' ||
2252                                              'x_return_status = ' || x_return_status,
2253                                   p_msg_level=>fnd_log.level_statement);
2254     END IF;
2255 
2256 
2257     --------------------------------------
2258     -- validate selling_party_id
2259     --------------------------------------
2260 
2261     -- selling_party_id is foreign key of hz_parties
2262     IF p_cust_account_rec.selling_party_id IS NOT NULL AND
2263        p_cust_account_rec.selling_party_id <> FND_API.G_MISS_NUM
2264     THEN
2265         check_party_fk (
2266             p_column                                 => 'selling_party_id',
2267             p_column_value                           => p_cust_account_rec.selling_party_id,
2268             x_return_status                          => x_return_status );
2269 
2270         /*IF G_DEBUG THEN
2271             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2272                 'selling_party_id is foreign key of hz_parties. ' ||
2273                 'x_return_status = ' || x_return_status, l_debug_prefix );
2274         END IF;
2275         */
2276         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2277            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'selling_party_id is foreign key of hz_parties. ' ||
2278                                               'x_return_status = ' || x_return_status,
2279                                   p_msg_level=>fnd_log.level_statement);
2280         END IF;
2281 
2282     END IF;
2283 
2284     /*IF G_DEBUG THEN
2285         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2286             '(+) after validate selling_party_id ... ' ||
2287             'x_return_status = ' || x_return_status, l_debug_prefix );
2288     END IF;
2289     */
2290     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2291            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate selling_party_id ... ' ||
2292                                              'x_return_status = ' || x_return_status,
2293                                   p_msg_level=>fnd_log.level_statement);
2294     END IF;
2295 
2296 
2297     --------------------------------------
2298     -- validate created_by_module
2299     --------------------------------------
2300 
2301     validate_created_by_module(
2302       p_create_update_flag     => p_create_update_flag,
2303       p_created_by_module      => p_cust_account_rec.created_by_module,
2304       p_old_created_by_module  => l_created_by_module,
2305       x_return_status          => x_return_status);
2306 
2307     --------------------------------------
2308     -- validate application_id
2309     --------------------------------------
2310 
2311     validate_application_id(
2312       p_create_update_flag     => p_create_update_flag,
2313       p_application_id         => p_cust_account_rec.application_id,
2314       p_old_application_id     => l_application_id,
2315       x_return_status          => x_return_status);
2316 
2317     --ER#13337184
2318 	--Validate procedure called to validate FV attributes
2319     validate_fv_attributes(
2320     p_create_update_flag       => p_create_update_flag,
2321     p_cust_account_rec         => p_cust_account_rec,
2322 	p_rowid                    => p_rowid,
2323     x_return_status            => x_return_status);
2324 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2325            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate_fv_attributes call ' ||
2326                                              'x_return_status = ' || x_return_status,
2327                                   p_msg_level=>fnd_log.level_statement);
2328     END IF;
2329 
2330     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2331         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_cust_account (-)',
2332                                p_msg_level=>fnd_log.level_procedure);
2333     END IF;
2334 
2335 END validate_cust_account;
2336 
2337 /**
2338  * PROCEDURE validate_cust_acct_relate
2339  *
2340  * DESCRIPTION
2341  *     Validates customer account relate record. Checks for
2342  *         uniqueness
2343  *         lookup types
2344  *         mandatory columns
2345  *         non-updateable fields
2346  *         foreign key validations
2347  *         other validations
2348  *
2349  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2350  *
2351  * ARGUMENTS
2352  *   IN:
2353  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
2354  *     p_cust_account_rec             Customer account relate record.
2355  *     p_rowid                        Rowid of the record (used only in update mode).
2356  *   IN/OUT:
2357  *     x_return_status                Return status after the call. The status can
2358  *                                    be FND_API.G_RET_STS_SUCCESS (success),
2359  *                                    FND_API.G_RET_STS_ERROR (error),
2360  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2361  *
2362  * NOTES
2363  *
2364  * MODIFICATION HISTORY
2365  *
2366  *   07-23-2001    Jianying Huang      o Created.
2367  *   10-04-2003    Rajib Ranjan Borah  o Bug 2985448.Only active relationships will be considered
2368  *                                       while checking for duplicates.
2369  *   12-MAY-2005   Rajib Ranjan Borah  o TCA SSA Uptake (Bug 3456489)
2370  *   12-AUG-2205   Idris Ali           o Bug 4529413:Replaced p_rowid with p_cust_acct_relate_id.
2371  */
2372 
2373 PROCEDURE validate_cust_acct_relate (
2374     p_create_update_flag                    IN     VARCHAR2,
2375     p_cust_acct_relate_rec                  IN     HZ_CUST_ACCOUNT_V2PUB.CUST_ACCT_RELATE_REC_TYPE,
2376     p_cust_acct_relate_id                   IN     NUMBER,      -- Bug 4529413
2377     x_return_status                         IN OUT NOCOPY VARCHAR2
2378 ) IS
2379 
2380     l_debug_prefix                          VARCHAR2(30) := '';
2381     l_dummy                                 VARCHAR2(1);
2382     l_customer_reciprocal_flag              HZ_CUST_ACCT_RELATE.customer_reciprocal_flag%TYPE;
2383     l_created_by_module                     HZ_CUST_ACCT_RELATE.created_by_module%TYPE;
2384     l_application_id                        NUMBER;
2385     l_relationship_type                     HZ_CUST_ACCT_RELATE.relationship_type%TYPE;
2386     l_status                                HZ_CUST_ACCT_RELATE.status%TYPE;
2387 
2388 BEGIN
2389 
2390     -- Check if API is called in debug mode. If yes, enable debug.
2391     --enable_debug;
2392 
2393     -- Debug info.
2394 
2395     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2396         hz_utility_v2pub.debug(p_message=>'validate_cust_acct_relate (+)',
2397                                p_prefix=>l_debug_prefix,
2398                                p_msg_level=>fnd_log.level_procedure);
2399     END IF;
2400 
2401 
2402     -- Select fields for later use during update.
2403     IF p_create_update_flag = 'U' THEN
2404         SELECT CUSTOMER_RECIPROCAL_FLAG, CREATED_BY_MODULE, APPLICATION_ID,
2405                RELATIONSHIP_TYPE, STATUS
2406         INTO l_customer_reciprocal_flag, l_created_by_module, l_application_id,
2407              l_relationship_type, l_status
2408         FROM HZ_CUST_ACCT_RELATE_ALL  -- Bug 3456489
2409         WHERE CUST_ACCT_RELATE_ID = p_cust_acct_relate_id;
2410     END IF;
2411 
2412     --------------------------------------
2413     -- validate cust_account_id
2414     --------------------------------------
2415 /****Logical APIs - validation not required****/
2416   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2417     -- cust_account_id is mandatory field
2418    IF  (p_create_update_flag <> 'U') OR
2419        (p_cust_acct_relate_rec.cust_acct_relate_id is NULL)  -- Bug 4529413
2420    THEN
2421     validate_mandatory (
2422         p_create_update_flag                    => p_create_update_flag,
2423         p_column                                => 'cust_account_id',
2424         p_column_value                          => p_cust_acct_relate_rec.cust_account_id,
2425         p_restricted                            => 'Y',
2426         x_return_status                         => x_return_status );
2427 
2428     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2429            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'cust_account_id is mandatory. ' ||
2430                                              'x_return_status = ' || x_return_status,
2431                                   p_msg_level=>fnd_log.level_statement);
2432     END IF;
2433    END IF;
2434 
2435     -- since cust account id is part of primary key, we do not need to
2436     -- check non-updateable.
2437 
2438     -- cust_account_id is foreign key of hz_cust_accounts
2439     IF p_create_update_flag = 'C' AND
2440        p_cust_acct_relate_rec.cust_account_id IS NOT NULL AND
2441        p_cust_acct_relate_rec.cust_account_id <> FND_API.G_MISS_NUM
2442     THEN
2443         check_cust_account_fk (
2444             p_column                                 => 'cust_account_id',
2445             p_column_value                           => p_cust_acct_relate_rec.cust_account_id,
2446             x_return_status                          => x_return_status );
2447 
2448         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2449            hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key of hz_cust_accounts. ' ||
2450                                              'x_return_status = ' || x_return_status,
2451                                   p_prefix=>l_debug_prefix,
2452                                   p_msg_level=>fnd_log.level_statement);
2453         END IF;
2454     END IF;
2455 
2456     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2457            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate cust_account_id ... ' ||
2458                                              'x_return_status = ' || x_return_status,
2459                                   p_msg_level=>fnd_log.level_statement);
2460     END IF;
2461   END IF;
2462 
2463     --------------------------------------
2464     -- validate related_cust_account_id
2465     --------------------------------------
2466 /****Logical APIs - validation not required****/
2467   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2468     -- related_cust_account_id is mandatory field
2469    IF  (p_create_update_flag <> 'U') OR
2470        (p_cust_acct_relate_rec.cust_acct_relate_id is NULL)     -- Bug 4529413
2471    THEN
2472     validate_mandatory (
2473         p_create_update_flag                    => p_create_update_flag,
2474         p_column                                => 'related_cust_account_id',
2475         p_column_value                          => p_cust_acct_relate_rec.related_cust_account_id,
2476         p_restricted                            => 'Y',
2477         x_return_status                         => x_return_status );
2478 
2479     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2480            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'related_cust_account_id is mandatory. ' ||
2481                                              'x_return_status = ' || x_return_status,
2482                                   p_msg_level=>fnd_log.level_statement);
2483     END IF;
2484    END IF;
2485 
2486     -- since related_cust account id is part of primary key, we do not need to
2487     -- check non-updateable.
2488 
2489     -- related_cust_account_id is foreign key of hz_cust_accounts
2490     IF p_create_update_flag = 'C' AND
2491        p_cust_acct_relate_rec.related_cust_account_id IS NOT NULL AND
2492        p_cust_acct_relate_rec.related_cust_account_id <> FND_API.G_MISS_NUM
2493     THEN
2494         check_cust_account_fk (
2495             p_column                                 => 'related_cust_account_id',
2496             p_column_value                           => p_cust_acct_relate_rec.related_cust_account_id,
2497             x_return_status                          => x_return_status );
2498 
2499         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2500            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'related_cust_account_id is foreign key of hz_cust_accounts. ' ||
2501                                                 'x_return_status = ' || x_return_status,
2502                                   p_msg_level=>fnd_log.level_statement);
2503         END IF;
2504 
2505     END IF;
2506   END IF;
2507 
2508     -- combination of cust_account_id and related_cust_account_id should be unique.
2509     -- we do not need to check this in update mode because there two columns
2510     -- are primary key.
2511     IF p_create_update_flag = 'C' THEN
2512     BEGIN
2513         SELECT 'Y' INTO l_dummy
2514         FROM HZ_CUST_ACCT_RELATE_ALL    -- Bug 3456489
2515         WHERE CUST_ACCOUNT_ID = p_cust_acct_relate_rec.cust_account_id
2516         AND RELATED_CUST_ACCOUNT_ID = p_cust_acct_relate_rec.related_cust_account_id
2517         --Bug 2985448
2518         AND STATUS='A'
2519         AND ORG_ID = p_cust_acct_relate_rec.org_id; -- Bug 3456489
2520 
2521         FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_REL_ALREADY_EXISTS' );
2522         FND_MSG_PUB.ADD;
2523         x_return_status := FND_API.G_RET_STS_ERROR;
2524 
2525     EXCEPTION
2526         WHEN NO_DATA_FOUND THEN
2527             NULL;
2528     END;
2529 
2530     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2531        hz_utility_v2pub.debug(p_message=>'combination of cust_account_id and related_cust_account_id should be unique. ' ||
2532                                         'x_return_status = ' || x_return_status,
2533                                   p_prefix =>l_debug_prefix,
2534                                   p_msg_level=>fnd_log.level_statement);
2535     END IF;
2536     END IF;
2537 
2538     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2539            hz_utility_v2pub.debug(p_message=>'(+) after validate related_cust_account_id ... ' ||
2540                                         'x_return_status = ' || x_return_status,
2541                                   p_prefix =>l_debug_prefix,
2542                                   p_msg_level=>fnd_log.level_statement);
2543     END IF;
2544 
2545     --------------------------------------
2546     -- validate customer_reciprocal_flag
2547     --------------------------------------
2548 
2549 /****Logical APIs - validation not required****/
2550   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2551     -- donot need to check customer_reciprocal_flag mandatory
2552     -- because customer_reciprocal_flag is non-updateable and it is defaulted
2553     -- to 'N' during insert
2554 
2555     -- customer_reciprocal_flag is non-updateable
2556     IF p_create_update_flag = 'U' AND
2557        p_cust_acct_relate_rec.customer_reciprocal_flag IS NOT NULL
2558     THEN
2559         validate_nonupdateable (
2560             p_column                                => 'customer_reciprocal_flag',
2561             p_column_value                          => p_cust_acct_relate_rec.customer_reciprocal_flag,
2562             p_old_column_value                      => l_customer_reciprocal_flag,
2563             x_return_status                         => x_return_status );
2564 
2565         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2566            hz_utility_v2pub.debug(p_message=>'customer_reciprocal_flag is non-updateable. ' ||
2567                                  'x_return_status = ' || x_return_status,
2568                                   p_prefix =>l_debug_prefix,
2569                                   p_msg_level=>fnd_log.level_statement);
2570         END IF;
2571 
2572     END IF;
2573 
2574     -- customer_reciprocal_flag is lookup code in lookup type YES/NO
2575     -- Since customer_reciprocal_flag is non-updateable, we only need to do
2576     -- checking during create.
2577 
2578     IF p_create_update_flag = 'C' AND
2579        p_cust_acct_relate_rec.customer_reciprocal_flag IS NOT NULL AND
2580        p_cust_acct_relate_rec.customer_reciprocal_flag <> FND_API.G_MISS_CHAR
2581     THEN
2582         validate_lookup (
2583             p_column                                => 'customer_reciprocal_flag',
2584             p_lookup_type                           => 'YES/NO',
2585             p_column_value                          => p_cust_acct_relate_rec.customer_reciprocal_flag,
2586             x_return_status                         => x_return_status );
2587 
2588 
2589         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2590            hz_utility_v2pub.debug(p_message=>'customer_reciprocal_flag is lookup code in lookup type YES/NO. ' ||
2591                                          'x_return_status = ' || x_return_status,
2592                                   p_prefix =>l_debug_prefix,
2593                                   p_msg_level=>fnd_log.level_statement);
2594         END IF;
2595     END IF;
2596 
2597 
2598     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2599            hz_utility_v2pub.debug(p_message=>'(+) after validate customer_reciprocal_flag ... ' ||
2600                                 'x_return_status = ' || x_return_status,
2601                                   p_prefix =>l_debug_prefix,
2602                                   p_msg_level=>fnd_log.level_statement);
2603     END IF;
2604   END IF;
2605     --------------------------------------
2606     -- validate relationship_type
2607     --------------------------------------
2608 
2609     -- relationship_type is lookup code in lookup type RELATIONSHIP_TYPE
2610     IF p_cust_acct_relate_rec.relationship_type IS NOT NULL AND
2611        p_cust_acct_relate_rec.relationship_type <> FND_API.G_MISS_CHAR AND
2612         ( p_create_update_flag = 'C' OR
2613           ( p_create_update_flag = 'U'  AND
2614             p_cust_acct_relate_rec.relationship_type <> NVL( l_relationship_type, FND_API.G_MISS_CHAR ) ) )
2615     THEN
2616         validate_lookup (
2617             p_column                                => 'relationship_type',
2618             p_lookup_type                           => 'RELATIONSHIP_TYPE',
2619             p_column_value                          => p_cust_acct_relate_rec.relationship_type,
2620             x_return_status                         => x_return_status );
2621 
2622 
2623         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2624            hz_utility_v2pub.debug(p_message=>'relationship_type is lookup code in lookup type RELATIONSHIP_TYPE. ' ||
2625                                              'x_return_status = ' || x_return_status,
2626                                   p_prefix =>l_debug_prefix,
2627                                   p_msg_level=>fnd_log.level_statement);
2628         END IF;
2629     END IF;
2630 
2631 
2632     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2633            hz_utility_v2pub.debug(p_message=>'(+) after validate relationship_type ... ' ||
2634                                 'x_return_status = ' || x_return_status,
2635                                   p_prefix =>l_debug_prefix,
2636                                   p_msg_level=>fnd_log.level_statement);
2637     END IF;
2638     --------------------------------------
2639     -- validate status
2640     --------------------------------------
2641 
2642     -- status cannot be set to null during update
2643     IF p_create_update_flag = 'U' AND
2644        p_cust_acct_relate_rec.status IS NOT NULL
2645     THEN
2646         validate_cannot_update_to_null (
2647             p_column                                => 'status',
2648             p_column_value                          => p_cust_acct_relate_rec.status,
2649             x_return_status                         => x_return_status );
2650 
2651         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2652            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
2653                                              'x_return_status = ' || x_return_status,
2654                                   p_prefix =>l_debug_prefix,
2655                                   p_msg_level=>fnd_log.level_statement);
2656         END IF;
2657     END IF;
2658 
2659 /****Logical APIs - validation not required****/
2660   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2661     -- status is lookup code in lookup type CODE_STATUS
2662     IF p_cust_acct_relate_rec.status IS NOT NULL AND
2663        p_cust_acct_relate_rec.status <> FND_API.G_MISS_CHAR AND
2664         ( p_create_update_flag = 'C' OR
2665           ( p_create_update_flag = 'U'  AND
2666             p_cust_acct_relate_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
2667     THEN
2668         validate_lookup (
2669             p_column                                => 'status',
2670             p_lookup_type                           => 'CODE_STATUS',
2671             p_column_value                          => p_cust_acct_relate_rec.status,
2672             x_return_status                         => x_return_status );
2673 
2674 
2675         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2676            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
2677                                                  'x_return_status = ' || x_return_status,
2678                                   p_prefix =>l_debug_prefix,
2679                                   p_msg_level=>fnd_log.level_statement);
2680         END IF;
2681     END IF;
2682   END IF;
2683 
2684     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2685            hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
2686                                                 'x_return_status = ' || x_return_status,
2687                                   p_prefix =>l_debug_prefix,
2688                                   p_msg_level=>fnd_log.level_statement);
2689     END IF;
2690     --------------------------------------
2691     -- validate created_by_module
2692     --------------------------------------
2693 
2694     validate_created_by_module(
2695       p_create_update_flag     => p_create_update_flag,
2696       p_created_by_module      => p_cust_acct_relate_rec.created_by_module,
2697       p_old_created_by_module  => l_created_by_module,
2698       x_return_status          => x_return_status);
2699 
2700     --------------------------------------
2701     -- validate application_id
2702     --------------------------------------
2703 
2704     validate_application_id(
2705       p_create_update_flag     => p_create_update_flag,
2706       p_application_id         => p_cust_acct_relate_rec.application_id,
2707       p_old_application_id     => l_application_id,
2708       x_return_status          => x_return_status);
2709 
2710     -- Debug info.
2711 
2712     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2713         hz_utility_v2pub.debug(p_message=>' validate_cust_acct_relate (-)',
2714                                p_prefix=>l_debug_prefix,
2715                                p_msg_level=>fnd_log.level_procedure);
2716     END IF;
2717 
2718 END validate_cust_acct_relate;
2719 
2720 /**
2721  * PROCEDURE validate_customer_profile
2722  *
2723  * DESCRIPTION
2724  *     Validates customer profile record. Checks for
2725  *         uniqueness
2726  *         lookup types
2727  *         mandatory columns
2728  *         non-updateable fields
2729  *         foreign key validations
2730  *         other validations
2731  *
2732  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2733  *
2734  * ARGUMENTS
2735  *   IN:
2736  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
2737  *     p_customer_profile_rec         Customer profile record.
2738  *     p_rowid                        Rowid of the record (used only in update mode).
2739  *   IN/OUT:
2740  *     x_return_status                Return status after the call. The status can
2741  *                                    be FND_API.G_RET_STS_SUCCESS (success),
2742  *                                    FND_API.G_RET_STS_ERROR (error),
2743  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2744  *
2745  * NOTES
2746  *
2747  * MODIFICATION HISTORY
2748  *
2749  *   07-23-2001    Jianying Huang      o Created.
2750  *   11-08-2001    P.Suresh            * Bug No : 1999532. Added validations as present in
2751  *                                       customer standard form and interface.
2752  *   12-05-2001    P.Suresh            * Bug No : 2125994. Commented the mandatory check
2753  *                                       on charge_on_finance_charge_flag when interest
2754  *                                       charge is 'Y'.
2755  *   16-09-2002    P.Suresh            * Bug No : 2441092. Added a condition that the
2756  *                                       discount_terms should be 'Y' when defaulting the
2757  *                                       discount_grace_days from the hz_cust_profile_classes.
2758  *   05-30-2003   Ramesh Ch            * Bug No : 2884220. Added a condition that the
2759  *                                       interest_charges should be 'Y' when initializing
2760  *                                       the interest_period_days from the hz_cust_profile_classes.
2761  *  06-23-2003  Ramesh Ch                Bug No : 2884220. Added a condition that the dunning_letters,send_statements
2762  *                                       should be 'Y' when initializing the dunning_letter_set_id,statement_cycle_id resp
2763  *                                       from the hz_cust_profile_classes.
2764  *
2765  */
2766 
2767 PROCEDURE validate_customer_profile (
2768     p_create_update_flag                    IN     VARCHAR2,
2769     p_customer_profile_rec                  IN     HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
2770     p_rowid                                 IN     ROWID,
2771     x_return_status                         IN OUT NOCOPY VARCHAR2
2772 ) IS
2773 
2774     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_customer_profile'
2775 
2776     l_dummy                                 VARCHAR2(1);
2777 
2778     l_cust_account_id                       NUMBER;
2779     l_collector_id                          NUMBER;
2780     l_profile_class_id                      NUMBER;
2781     l_site_use_id                           NUMBER;
2782     l_cust_acct_site_id                     NUMBER;
2783     l_class_status                          HZ_CUST_PROFILE_CLASSES.status%TYPE;
2784     l_profile_class_name                    HZ_CUST_PROFILE_CLASSES.name%TYPE;
2785     l_created_by_module                     HZ_CUSTOMER_PROFILES.created_by_module%TYPE;
2786     l_application_id                        NUMBER;
2787     l_credit_rating                         HZ_CUSTOMER_PROFILES.credit_rating%TYPE;
2788     l_risk_code                             HZ_CUSTOMER_PROFILES.risk_code%TYPE;
2789     l_status                                HZ_CUSTOMER_PROFILES.status%TYPE;
2790     l_profile_class_rec                     HZ_CUST_PROFILE_CLASSES%ROWTYPE;
2791     v_customer_profile_rec                  HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE
2792                                                                      := p_customer_profile_rec;
2793     l_discount_terms                        HZ_CUSTOMER_PROFILES.discount_terms%TYPE;
2794     l_discount_grace_days                   HZ_CUSTOMER_PROFILES.discount_grace_days%TYPE;
2795     l_dunning_letters                       HZ_CUSTOMER_PROFILES.dunning_letters%TYPE;
2796     l_dunning_letter_set_id                 HZ_CUSTOMER_PROFILES.dunning_letter_set_id%TYPE;
2797     l_send_statements                       HZ_CUSTOMER_PROFILES.send_statements%TYPE;
2798     l_statement_cycle_id                    HZ_CUSTOMER_PROFILES.statement_cycle_id%TYPE;
2799     l_credit_balance_statements             HZ_CUSTOMER_PROFILES.credit_balance_statements%TYPE;
2800     l_interest_charges                      HZ_CUSTOMER_PROFILES.interest_charges%TYPE;
2801     l_finance_charge_flag                   HZ_CUSTOMER_PROFILES.charge_on_finance_charge_flag%TYPE;
2802     l_interest_period_days                  HZ_CUSTOMER_PROFILES.interest_period_days%TYPE;
2803 
2804     l_account_status                        HZ_CUSTOMER_PROFILES.ACCOUNT_STATUS%TYPE;
2805     l_tolerance                             HZ_CUSTOMER_PROFILES.TOLERANCE%TYPE;
2806     l_percent_collectable                   HZ_CUSTOMER_PROFILES.PERCENT_COLLECTABLE%TYPE;
2807     l_standard_terms                        HZ_CUSTOMER_PROFILES.STANDARD_TERMS%TYPE;
2808     l_override_terms                        HZ_CUSTOMER_PROFILES.OVERRIDE_TERMS%TYPE;
2809     l_lockbox_matching_option               HZ_CUSTOMER_PROFILES.LOCKBOX_MATCHING_OPTION%TYPE;
2810     l_autocash_hierarchy_id                 HZ_CUSTOMER_PROFILES.AUTOCASH_HIERARCHY_ID%TYPE;
2811     l_autocash_hierarchy_id_for_ad          HZ_CUSTOMER_PROFILES.AUTOCASH_HIERARCHY_ID_FOR_ADR%TYPE;
2812     l_clearing_days                         HZ_CUSTOMER_PROFILES.CLEARING_DAYS%TYPE;
2813     l_payment_grace_days                    HZ_CUSTOMER_PROFILES.PAYMENT_GRACE_DAYS%TYPE;
2814     l_grouping_rule_id                      HZ_CUSTOMER_PROFILES.GROUPING_RULE_ID%TYPE;
2815     l_tax_printing_option                   HZ_CUSTOMER_PROFILES.TAX_PRINTING_OPTION%TYPE;
2816     l_review_cycle                          HZ_CUSTOMER_PROFILES.REVIEW_CYCLE%TYPE;
2817     l_last_credit_review_date               HZ_CUSTOMER_PROFILES.LAST_CREDIT_REVIEW_DATE%TYPE;
2818     l_next_credit_review_date               HZ_CUSTOMER_PROFILES.NEXT_CREDIT_REVIEW_DATE%TYPE;
2819     l_party_id                              HZ_CUSTOMER_PROFILES.PARTY_ID%TYPE;
2820     l_credit_classification                 HZ_CUSTOMER_PROFILES.CREDIT_CLASSIFICATION%TYPE;
2821 
2822     l_cust_acct_site_use_code               HZ_CUST_SITE_USES.SITE_USE_CODE%TYPE;
2823     l_return_status                         VARCHAR2(1);
2824     l_org_id                                HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
2825 
2826     l_ckeck_acc_bfb_enabled                 VARCHAR2(1);
2827     ll_cons_inv_flag                        VARCHAR2(1);
2828 
2829     -- Added following variables for late charge policy project.
2830     l_late_charge_calculation_trx           HZ_CUSTOMER_PROFILES.LATE_CHARGE_CALCULATION_TRX%TYPE;
2831     l_credit_items_flag         	    HZ_CUSTOMER_PROFILES.CREDIT_ITEMS_FLAG%TYPE;
2832     l_disputed_transactions_flag            HZ_CUSTOMER_PROFILES.DISPUTED_TRANSACTIONS_FLAG%TYPE;
2833     l_late_charge_type	                    HZ_CUSTOMER_PROFILES.LATE_CHARGE_TYPE%TYPE;
2834     l_late_charge_term_id           	    HZ_CUSTOMER_PROFILES.LATE_CHARGE_TERM_ID%TYPE;
2835     l_interest_calculation_period    	    HZ_CUSTOMER_PROFILES.INTEREST_CALCULATION_PERIOD%TYPE;
2836     l_hold_charged_invoices_flag     	    HZ_CUSTOMER_PROFILES.HOLD_CHARGED_INVOICES_FLAG%TYPE;
2837     l_message_Text_id                       HZ_CUSTOMER_PROFILES.MESSAGE_TEXT_ID%TYPE;
2838     l_multiple_Interest_Rates_flag   	    HZ_CUSTOMER_PROFILES.MULTIPLE_INTEREST_RATES_FLAG%TYPE;
2839     l_charge_begin_date	                    HZ_CUSTOMER_PROFILES.CHARGE_BEGIN_DATE%TYPE;
2840     l_automatch_set_id                      HZ_CUSTOMER_PROFILES.AUTOMATCH_SET_ID%TYPE;
2841 
2842 BEGIN
2843 
2844     -- Check if API is called in debug mode. If yes, enable debug.
2845     --enable_debug;
2846 
2847     -- Debug info.
2848 
2849     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2850         hz_utility_v2pub.debug(p_message=> 'validate_customer_profile (+)',
2851                                p_prefix=>l_debug_prefix,
2852                                p_msg_level=>fnd_log.level_procedure);
2853     END IF;
2854     -- Select fields for later use during update.
2855     IF p_create_update_flag = 'U'
2856     THEN
2857 
2858         SELECT CUST_ACCOUNT_ID, SITE_USE_ID, CREATED_BY_MODULE, APPLICATION_ID,
2859                CREDIT_RATING, RISK_CODE, STATUS,DISCOUNT_TERMS,
2860                DISCOUNT_GRACE_DAYS,DUNNING_LETTERS,DUNNING_LETTER_SET_ID,
2861                SEND_STATEMENTS,STATEMENT_CYCLE_ID,CREDIT_BALANCE_STATEMENTS,
2862                INTEREST_CHARGES,CHARGE_ON_FINANCE_CHARGE_FLAG,
2863                INTEREST_PERIOD_DAYS,ACCOUNT_STATUS,TOLERANCE,PERCENT_COLLECTABLE,
2864                STANDARD_TERMS,OVERRIDE_TERMS,LOCKBOX_MATCHING_OPTION,
2865                AUTOCASH_HIERARCHY_ID,AUTOCASH_HIERARCHY_ID_FOR_ADR,
2866                CLEARING_DAYS,PAYMENT_GRACE_DAYS,GROUPING_RULE_ID,
2867                TAX_PRINTING_OPTION,
2868                REVIEW_CYCLE,LAST_CREDIT_REVIEW_DATE,NEXT_CREDIT_REVIEW_DATE,PARTY_ID,
2869                CREDIT_CLASSIFICATION, LATE_CHARGE_CALCULATION_TRX, CREDIT_ITEMS_FLAG,
2870                DISPUTED_TRANSACTIONS_FLAG, LATE_CHARGE_TYPE, LATE_CHARGE_TERM_ID,
2871                INTEREST_CALCULATION_PERIOD, HOLD_CHARGED_INVOICES_FLAG, MESSAGE_TEXT_ID,
2872                MULTIPLE_INTEREST_RATES_FLAG, CHARGE_BEGIN_DATE, AUTOMATCH_SET_ID
2873         INTO l_cust_account_id, l_site_use_id, l_created_by_module, l_application_id,
2874              l_credit_rating, l_risk_code, l_status,l_discount_terms,
2875              l_discount_grace_days,l_dunning_letters,l_dunning_letter_set_id,
2876              l_send_statements,l_statement_cycle_id,l_credit_balance_statements,
2877              l_interest_charges,l_finance_charge_flag,
2878              l_interest_period_days,l_account_status,l_tolerance,l_percent_collectable,
2879              l_standard_terms,l_override_terms,l_lockbox_matching_option,
2880              l_autocash_hierarchy_id,l_autocash_hierarchy_id_for_ad,
2881              l_clearing_days,l_payment_grace_days,l_grouping_rule_id,
2882              l_tax_printing_option,
2883              l_review_cycle,l_last_credit_review_date,l_next_credit_review_date,l_party_id,
2884              l_credit_classification, l_late_charge_calculation_trx, l_credit_items_flag,
2885              l_disputed_transactions_flag, l_late_charge_type, l_late_charge_term_id,
2886              l_interest_calculation_period, l_hold_charged_invoices_flag, l_message_text_id,
2887              l_multiple_interest_rates_flag, l_charge_begin_date,l_automatch_set_id
2888         FROM HZ_CUSTOMER_PROFILES
2889         WHERE ROWID = p_rowid;
2890     END IF;
2891 
2892     --------------------------------------
2893     -- validate cust_account_profile_id
2894     --------------------------------------
2895 /****Logical APIs - validation not required****/
2896   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2897     IF p_create_update_flag = 'C' THEN
2898 
2899         -- If primary key value is passed, check for uniqueness.
2900         -- If primary key value is not passed, it will be generated
2901         -- from sequence by table handler.
2902 
2903         IF p_customer_profile_rec.cust_account_profile_id IS NOT NULL AND
2904            p_customer_profile_rec.cust_account_profile_id <> FND_API.G_MISS_NUM
2905         THEN
2906         BEGIN
2907             SELECT 'Y' INTO l_dummy
2908             FROM   HZ_CUSTOMER_PROFILES
2909             WHERE  CUST_ACCOUNT_PROFILE_ID = p_customer_profile_rec.cust_account_profile_id;
2910 
2911             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
2912             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id' );
2913             FND_MSG_PUB.ADD;
2914             x_return_status := FND_API.G_RET_STS_ERROR;
2915         EXCEPTION
2916             WHEN NO_DATA_FOUND THEN
2917                 NULL;
2918         END;
2919 
2920         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2921            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is unique during creation if passed in. ' ||
2922                                                 'x_return_status = ' || x_return_status,
2923                                   p_prefix =>l_debug_prefix,
2924                                   p_msg_level=>fnd_log.level_statement);
2925         END IF;
2926 
2927         END IF;
2928     END IF;
2929 
2930     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2931            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_profile_id ... ' ||
2932                                              'x_return_status = ' || x_return_status,
2933                                   p_prefix =>l_debug_prefix,
2934                                   p_msg_level=>fnd_log.level_statement);
2935     END IF;
2936   END IF;
2937 
2938     ----------------------------------------------
2939     -- validate cust_account_id
2940     ----------------------------------------------
2941 /****Logical APIs - validation not required****/
2942   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2943     -- cust_account_id is mandatory field
2944     -- Since cust_account_id is non-updateable, we only need to check mandatory
2945     -- during creation.
2946     --
2947     -- 2310474: cust_account_id can be equal = -1 if the profile is related to party
2948     -- and not a customer account.
2949     --
2950 
2951 
2952     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2953            hz_utility_v2pub.debug(p_message=>'cust_account_id = ' || p_customer_profile_rec.cust_account_id || ' ' ||
2954             'x_return_status = ' || x_return_status,
2955                                   p_prefix =>l_debug_prefix,
2956                                   p_msg_level=>fnd_log.level_statement);
2957     END IF;
2958 
2959 
2960     IF p_create_update_flag = 'C' THEN
2961         validate_mandatory (
2962             p_create_update_flag                    => p_create_update_flag,
2963             p_column                                => 'cust_account_id',
2964             p_column_value                          => p_customer_profile_rec.cust_account_id,
2965             x_return_status                         => x_return_status );
2966 
2967         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2968            hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
2969                                    'x_return_status = ' || x_return_status,
2970                                   p_prefix =>l_debug_prefix,
2971                                   p_msg_level=>fnd_log.level_statement);
2972         END IF;
2973 
2974     END IF;
2975 
2976     -- 2310474 party_id is mandatory field
2977     IF p_create_update_flag = 'C'
2978     THEN
2979         validate_mandatory (
2980             p_create_update_flag                    => p_create_update_flag,
2981             p_column                                => 'party_id',
2982             p_column_value                          => p_customer_profile_rec.party_id,
2983             x_return_status                         => x_return_status );
2984 
2985         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2986            hz_utility_v2pub.debug(p_message=>'party_id is mandatory. ' ||
2987                                         'x_return_status = ' || x_return_status,
2988                                   p_prefix =>l_debug_prefix,
2989                                   p_msg_level=>fnd_log.level_statement);
2990         END IF;
2991 
2992     END IF;
2993 
2994     -- cust_account_id is non-updateable field.
2995     IF p_create_update_flag = 'U' AND
2996        p_customer_profile_rec.cust_account_id IS NOT NULL
2997     THEN
2998         validate_nonupdateable (
2999             p_column                                => 'cust_account_id',
3000             p_column_value                          => p_customer_profile_rec.cust_account_id,
3001             p_old_column_value                      => l_cust_account_id,
3002             x_return_status                         => x_return_status );
3003 
3004         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3005            hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
3006                                                 'x_return_status = ' || x_return_status,
3007                                   p_prefix =>l_debug_prefix,
3008                                   p_msg_level=>fnd_log.level_statement);
3009         END IF;
3010 
3011     END IF;
3012 
3013     -- 2310474 After the migration script to fill up party_id for all exiting customer profiles arhucppt.sql
3014     -- the party_id is not updeatable
3015 
3016     IF p_create_update_flag = 'U' AND
3017        p_customer_profile_rec.party_id IS NOT NULL
3018     THEN
3019         validate_nonupdateable (
3020             p_column                                => 'party_id',
3021             p_column_value                          => p_customer_profile_rec.party_id,
3022             p_old_column_value                      => l_party_id,
3023             x_return_status                         => x_return_status );
3024 
3025         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3026            hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
3027                                         'x_return_status = ' || x_return_status,
3028                                   p_prefix =>l_debug_prefix,
3029                                   p_msg_level=>fnd_log.level_statement);
3030         END IF;
3031 
3032     END IF;
3033 
3034 
3035     -- cust_account_id is foreign key to hz_cust_accounts
3036     -- Since cust_acocunt_id is non-updateable, we only need to
3037     -- check FK during creation.
3038 
3039     IF p_create_update_flag = 'C' AND
3040        p_customer_profile_rec.cust_account_id IS NOT NULL AND
3041        p_customer_profile_rec.cust_account_id <> FND_API.G_MISS_NUM
3042     THEN
3043         check_cust_account_fk (
3044             p_column                                 => 'cust_account_id',
3045             p_column_value                           => p_customer_profile_rec.cust_account_id,
3046             x_return_status                          => x_return_status );
3047 
3048 
3049         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3050            hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
3051                                                 'x_return_status = ' || x_return_status,
3052                                   p_prefix =>l_debug_prefix,
3053                                   p_msg_level=>fnd_log.level_statement);
3054         END IF;
3055 
3056     END IF;
3057   END IF;
3058 
3059     -- We can only have one customer profile for one account
3060     -- Because cust_account_id is non-updateable, we only need to do this check during
3061     -- creation.
3062     -------------------------------------
3063     -- 2310474: p_cust_account_rec.cust_account_id = -1 if we are creating the profile for a party
3064     --      One party can only have 1 only 1 customer profile directly attached to it
3065     -------------------------------------
3066 
3067     IF p_create_update_flag = 'C' AND
3068        ( p_customer_profile_rec.site_use_id IS NULL OR
3069          p_customer_profile_rec.site_use_id = FND_API.G_MISS_NUM ) AND
3070        p_customer_profile_rec.cust_account_id <> -1
3071     THEN
3072       BEGIN
3073           SELECT 'Y' INTO l_dummy
3074           FROM HZ_CUSTOMER_PROFILES
3075           WHERE CUST_ACCOUNT_ID = p_customer_profile_rec.cust_account_id
3076           AND SITE_USE_ID IS NULL
3077           AND ROWNUM = 1;
3078 
3079           FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
3080           FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
3081           FND_MSG_PUB.ADD;
3082           x_return_status := FND_API.G_RET_STS_ERROR;
3083       EXCEPTION
3084           WHEN NO_DATA_FOUND THEN
3085               NULL;
3086       END;
3087 
3088 
3089       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3090            hz_utility_v2pub.debug(p_message=>'only one customer profile for one account. ' ||
3091                                              'x_return_status = ' || x_return_status,
3092                                   p_prefix =>l_debug_prefix,
3093                                   p_msg_level=>fnd_log.level_statement);
3094       END IF;
3095 
3096 
3097     ELSIF p_create_update_flag = 'C' AND
3098          ( p_customer_profile_rec.site_use_id IS NULL OR
3099            p_customer_profile_rec.site_use_id = FND_API.G_MISS_NUM ) AND
3100           p_customer_profile_rec.cust_account_id = -1
3101     THEN
3102       -- 2310474 in this case we are creating a customer profile for party
3103       -- One party can only have 1 and only 1 profile directly attachment to the party
3104       -- At party level
3105       BEGIN
3106          SELECT 'Y' INTO l_dummy
3107          FROM HZ_CUSTOMER_PROFILES
3108          WHERE PARTY_ID = p_customer_profile_rec.party_id
3109          AND CUST_ACCOUNT_ID = -1;
3110 
3111          FND_MESSAGE.SET_NAME( 'AR', 'HZ_ONLY_ONE_PROF_AT_PARTY_LEV' );
3112          FND_MESSAGE.SET_TOKEN( 'PARTY_ID', p_customer_profile_rec.party_id );
3113          FND_MSG_PUB.ADD;
3114          x_return_status := FND_API.G_RET_STS_ERROR;
3115       EXCEPTION
3116          WHEN NO_DATA_FOUND THEN
3117                 NULL;
3118       END;
3119 
3120 
3121       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3122            hz_utility_v2pub.debug(p_message=>'only one customer profile for one party at party level. ' ||
3123                                         'x_return_status = ' || x_return_status,
3124                                   p_prefix =>l_debug_prefix,
3125                                   p_msg_level=>fnd_log.level_statement);
3126       END IF;
3127 
3128 
3129     END IF;
3130 
3131 
3132     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3133            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
3134             'x_return_status = ' || x_return_status,
3135                                   p_prefix =>l_debug_prefix,
3136                                   p_msg_level=>fnd_log.level_statement);
3137     END IF;
3138 
3139     ---------------------------------
3140     -- 2310474 Validation of review_cycle
3141     -- The last_credit_review_date and next_credit_review_date are not part of TCA API management
3142     -- Credit Management team take care of them
3143     -- V2 API does not do any validation on Last_Review_date and Next_review_date
3144     ---------------------------------
3145 
3146     -- Validate lookup_code of the REVIEW_CYCLE
3147     IF p_customer_profile_rec.review_cycle IS NOT NULL AND
3148        p_customer_profile_rec.review_cycle <> FND_API.G_MISS_CHAR AND
3149        ( p_create_update_flag = 'C' OR
3150          ( p_create_update_flag = 'U'  AND
3151            p_customer_profile_rec.review_cycle <> NVL( l_review_cycle, FND_API.G_MISS_CHAR ) ) )
3152     THEN
3153         validate_lookup (
3154             p_column                                => 'review_cycle',
3155             p_lookup_table                          => 'AR_LOOKUPS',
3156             p_lookup_type                           => 'PERIODIC_REVIEW_CYCLE',
3157             p_column_value                          => p_customer_profile_rec.review_cycle,
3158             x_return_status                         => x_return_status );
3159 
3160         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3161            hz_utility_v2pub.debug(p_message=>'review_cycle is lookup code in lookup type PERIODIC_REVIEW_CYCLE in ar_lookups. ' ||
3162                                                 'x_return_status = ' || x_return_status,
3163                                   p_prefix =>l_debug_prefix,
3164                                   p_msg_level=>fnd_log.level_statement);
3165         END IF;
3166 
3167 
3168     END IF;
3169 
3170 
3171     ----------------------------------------------
3172     -- validate collector_id
3173     ----------------------------------------------
3174 
3175     -- collector_id is mandatory field.
3176 
3177     -- Since we are defaulting to default profile class if profile_class_id
3178     -- has not been passed in, the collector_id can be null or G_MISS during
3179     -- creation and it will default to collect_id of default profile class if
3180     -- it is NULL. We can have G_MISS checking to make it mandatory.
3181 
3182     check_partial_mandatory_column (
3183         p_column                                 => 'collector_id',
3184         p_column_value                           => p_customer_profile_rec.collector_id,
3185         x_return_status                          => x_return_status );
3186 
3187 
3188     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3189            hz_utility_v2pub.debug(p_message=>'collector_id is mandatory : it can be null but not G_MISS. ' ||
3190                                 'x_return_status = ' || x_return_status,
3191                                   p_prefix =>l_debug_prefix,
3192                                   p_msg_level=>fnd_log.level_statement);
3193     END IF;
3194 
3195     -- collector_id is foreign key to ar_collectors
3196     IF p_customer_profile_rec.collector_id IS NOT NULL AND
3197        p_customer_profile_rec.collector_id <> FND_API.G_MISS_NUM
3198     THEN
3199         check_collector_fk (
3200             p_column                                 => 'collector_id',
3201             p_column_value                           => p_customer_profile_rec.collector_id,
3202             x_return_status                          => x_return_status );
3203 
3204 
3205         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3206            hz_utility_v2pub.debug(p_message=>'collector_id is foreign key to ar_collectors. ' ||
3207                                                   'x_return_status = ' || x_return_status,
3208                                   p_prefix =>l_debug_prefix,
3209                                   p_msg_level=>fnd_log.level_statement);
3210         END IF;
3211 
3212     END IF;
3213 
3214     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3215            hz_utility_v2pub.debug(p_message=>'(+) after validate collector_id ... ' ||
3216                                                  'x_return_status = ' || x_return_status,
3217                                   p_prefix =>l_debug_prefix,
3218                                   p_msg_level=>fnd_log.level_statement);
3219     END IF;
3220 
3221     ----------------------------------------------
3222     -- validate credit_checking
3223     ----------------------------------------------
3224 
3225     -- credit_checking is mandatory field.
3226 
3227     -- Since we are defaulting to default profile class if profile_class_id
3228     -- has not been passed in, the credit_checking can be null or G_MISS during
3229     -- creation and it will default to credit_checking of default profile class if
3230     -- it is NULL. We can have G_MISS checking to make it mandatory.
3231 
3232     check_partial_mandatory_column (
3233         p_column                                 => 'credit_checking',
3234         p_column_value                           => p_customer_profile_rec.credit_checking,
3235         x_return_status                          => x_return_status );
3236 
3237 
3238     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3239            hz_utility_v2pub.debug(p_message=>'credit_checking is mandatory : it can be null but not G_MISS. ' ||
3240                                                 'x_return_status = ' || x_return_status,
3241                                   p_prefix =>l_debug_prefix,
3242                                   p_msg_level=>fnd_log.level_statement);
3243     END IF;
3244 
3245 
3246     -- credit_checking is lookup code in lookup type YES/NO
3247     IF p_customer_profile_rec.credit_checking IS NOT NULL AND
3248        p_customer_profile_rec.credit_checking <> FND_API.G_MISS_CHAR
3249     THEN
3250         validate_lookup (
3251             p_column                                => 'credit_checking',
3252             p_lookup_type                           => 'YES/NO',
3253             p_column_value                          => p_customer_profile_rec.credit_checking,
3254             x_return_status                         => x_return_status );
3255 
3256         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3257            hz_utility_v2pub.debug(p_message=>'credit_checking is lookup code in lookup type YES/NO. ' ||
3258                                                 'x_return_status = ' || x_return_status,
3259                                   p_prefix =>l_debug_prefix,
3260                                   p_msg_level=>fnd_log.level_statement);
3261          END IF;
3262 
3263     END IF;
3264 
3265     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3266            hz_utility_v2pub.debug(p_message=>'(+) after validate credit_checking ... ' ||
3267                                                  'x_return_status = ' || x_return_status,
3268                                   p_prefix =>l_debug_prefix,
3269                                   p_msg_level=>fnd_log.level_statement);
3270     END IF;
3271 
3272 
3273     ----------------------------------------------
3274     -- validate discount_terms
3275     ----------------------------------------------
3276 
3277     -- discount_terms is mandatory field.
3278 
3279     -- Since we are defaulting to default profile class if profile_class_id
3280     -- has not been passed in, the discount_terms can be null or G_MISS during
3281     -- creation and it will default to discount_terms of default profile class if
3282     -- it is NULL. We can have G_MISS checking to make it mandatory.
3283 
3284     check_partial_mandatory_column (
3285         p_column                                 => 'discount_terms',
3286         p_column_value                           => p_customer_profile_rec.discount_terms,
3287         x_return_status                          => x_return_status );
3288 
3289     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3290            hz_utility_v2pub.debug(p_message=>'discount_terms is mandatory : it can be null but not G_MISS. ' ||
3291                                                 'x_return_status = ' || x_return_status,
3292                                   p_prefix =>l_debug_prefix,
3293                                   p_msg_level=>fnd_log.level_statement);
3294     END IF;
3295 
3296 
3297 /****Logical APIs - validation not required****/
3298   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3299     -- discount_terms is lookup code in lookup type YES/NO
3300     IF p_customer_profile_rec.discount_terms IS NOT NULL AND
3301        p_customer_profile_rec.discount_terms <> FND_API.G_MISS_CHAR
3302        AND ( p_create_update_flag = 'C' OR
3303          ( p_create_update_flag = 'U'  AND
3304            p_customer_profile_rec.discount_terms <> NVL( l_discount_terms, FND_API.G_MISS_CHAR ) ) )
3305     THEN
3306         validate_lookup (
3307             p_column                                => 'discount_terms',
3308             p_lookup_type                           => 'YES/NO',
3309             p_column_value                          => p_customer_profile_rec.discount_terms,
3310             x_return_status                         => x_return_status );
3311 
3312 
3313         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3314            hz_utility_v2pub.debug(p_message=>'discount_terms is lookup code in lookup type YES/NO. ' ||
3315                            'x_return_status = ' || x_return_status,
3316                                   p_prefix =>l_debug_prefix,
3317                                   p_msg_level=>fnd_log.level_statement);
3318         END IF;
3319 
3320     END IF;
3321   END IF;
3322 
3323     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3324            hz_utility_v2pub.debug(p_message=>'(+) after validate discount_terms ... ' ||
3325             'x_return_status = ' || x_return_status,
3326                                   p_prefix =>l_debug_prefix,
3327                                   p_msg_level=>fnd_log.level_statement);
3328     END IF;
3329 
3330     ----------------------------------------------
3331     -- validate tolerance
3332     ----------------------------------------------
3333 
3334     -- tolerance is mandatory field.
3335 
3336     -- Since we are defaulting to default profile class if profile_class_id
3337     -- has not been passed in, the tolerance can be null or G_MISS during
3338     -- creation and it will default to tolerance of default profile class if
3339     -- it is NULL. We can have G_MISS checking to make it mandatory.
3340 
3341     check_partial_mandatory_column (
3342         p_column                                 => 'tolerance',
3343         p_column_value                           => p_customer_profile_rec.tolerance,
3344         x_return_status                          => x_return_status );
3345 
3346 
3347     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3348            hz_utility_v2pub.debug(p_message=>'tolerance is mandatory : it can be null but not G_MISS. ' ||
3349             'x_return_status = ' || x_return_status,
3350                                   p_prefix =>l_debug_prefix,
3351                                   p_msg_level=>fnd_log.level_statement);
3352     END IF;
3353 
3354 
3355     ----------------------------------------------
3356     -- validate profile_class_id
3357     ----------------------------------------------
3358 
3359     -- profile_class_id is foreign key to hz_cust_profile_classes
3360     IF p_customer_profile_rec.profile_class_id IS NOT NULL AND
3361        p_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM
3362     THEN
3363         IF p_customer_profile_rec.profile_class_id < 0 THEN
3364             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NEGATIVE_PROFILE_CLASS' );
3365             FND_MSG_PUB.ADD;
3366             x_return_status := FND_API.G_RET_STS_ERROR;
3367         ELSE
3368         BEGIN
3369             SELECT STATUS, NAME INTO l_class_status, l_profile_class_name
3370             FROM HZ_CUST_PROFILE_CLASSES
3371             WHERE PROFILE_CLASS_ID = p_customer_profile_rec.profile_class_id;
3372 
3373             IF l_class_status <> 'A' THEN
3374                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INACTIVE_PROFILE_CLASS' );
3375                 FND_MESSAGE.SET_TOKEN( 'NAME', l_profile_class_name );
3376                 FND_MSG_PUB.ADD;
3377                 x_return_status := FND_API.G_RET_STS_ERROR;
3378             END IF;
3379         EXCEPTION
3380             WHEN NO_DATA_FOUND THEN
3381                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
3382                 FND_MESSAGE.SET_TOKEN( 'FK', 'profile_class_id' );
3383                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'profile_class_id' );
3384                 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_profile_classes');
3385                 FND_MSG_PUB.ADD;
3386                 x_return_status := FND_API.G_RET_STS_ERROR;
3387         END;
3388         END IF;
3389 
3390         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3391            hz_utility_v2pub.debug(p_message=>'profile_class_id should be positive, foreign key of hz_cust_profile_classes and point to an active profile class. ' ||
3392                 'x_return_status = ' || x_return_status,
3393                                   p_prefix =>l_debug_prefix,
3394                                   p_msg_level=>fnd_log.level_statement);
3395         END IF;
3396 
3397     END IF;
3398 
3399     -- profile_class_id cannot be set to null during update
3400     IF p_create_update_flag = 'U' AND
3401        p_customer_profile_rec.profile_class_id IS NOT NULL
3402     THEN
3403         validate_cannot_update_to_null (
3404             p_column                                => 'profile_class_id',
3405             p_column_value                          => p_customer_profile_rec.profile_class_id,
3406             x_return_status                         => x_return_status );
3407 
3408 
3409         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3410            hz_utility_v2pub.debug(p_message=>'profile_class_id cannot be updated to null. ' ||
3411                 'x_return_status = ' || x_return_status,
3412                                   p_prefix =>l_debug_prefix,
3413                                   p_msg_level=>fnd_log.level_statement);
3414         END IF;
3415 
3416     END IF;
3417 
3418 
3419     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3420            hz_utility_v2pub.debug(p_message=>'(+) after validate profile_class_id ... ' ||
3421             'x_return_status = ' || x_return_status,
3422                                   p_prefix =>l_debug_prefix,
3423                                   p_msg_level=>fnd_log.level_statement);
3424     END IF;
3425 
3426     ----------------------------------------------
3427     -- validate site_use_id
3428     ----------------------------------------------
3429 
3430     -- site_use_id is non-updateable field.
3431     IF p_create_update_flag = 'U' AND
3432        p_customer_profile_rec.site_use_id IS NOT NULL
3433     THEN
3434         validate_nonupdateable (
3435             p_column                                => 'site_use_id',
3436             p_column_value                          => p_customer_profile_rec.site_use_id,
3437             p_old_column_value                      => l_site_use_id,
3438             x_return_status                         => x_return_status );
3439 
3440 
3441         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3442            hz_utility_v2pub.debug(p_message=>'site_use_id is non-updateable. ' ||
3443                                          'x_return_status = ' || x_return_status,
3444                                   p_prefix =>l_debug_prefix,
3445                                   p_msg_level=>fnd_log.level_statement);
3446         END IF;
3447 
3448     END IF;
3449 
3450     ------------------
3451     -- site_use_id is foreign key to hz_cust_site_uses.
3452     -- one site use can only have one profile.
3453     -- Since site_use_id is non-updateable, we only need to check
3454     -- FK during creation.
3455     ------------------
3456     -- 2310474: User can create a customer profile at site level
3457     -- only if the profile is created for at account level
3458     -- and not at party level
3459     ------------------
3460 
3461 
3462     IF p_create_update_flag = 'C' AND
3463        p_customer_profile_rec.site_use_id IS NOT NULL AND
3464        p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM AND
3465        p_customer_profile_rec.cust_account_id <> -1
3466     THEN
3467         BEGIN
3468 
3469             SELECT CUST_ACCT_SITE_ID,SITE_USE_CODE,ORG_ID
3470             INTO l_cust_acct_site_id,l_cust_acct_site_use_code,l_org_id
3471             FROM HZ_CUST_SITE_USES_ALL
3472             WHERE SITE_USE_ID = p_customer_profile_rec.site_use_id;
3473 
3474            -- Bug 4650473. Check if org is accessible.
3475            BEGIN
3476             MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
3477            EXCEPTION
3478            WHEN OTHERS
3479            THEN
3480              x_return_status := FND_API.G_RET_STS_ERROR;
3481            END;
3482 
3483             -- cust_account_id should be same as cust_account_id site_use_id belongs to.
3484             SELECT CUST_ACCOUNT_ID INTO l_cust_account_id
3485             FROM HZ_CUST_ACCT_SITES_ALL
3486             WHERE CUST_ACCT_SITE_ID = l_cust_acct_site_id;
3487 
3488             IF l_cust_account_id <> p_customer_profile_rec.cust_account_id THEN
3489               FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_SITEUSE_MISMATCH' );
3490               FND_MSG_PUB.ADD;
3491               x_return_status := FND_API.G_RET_STS_ERROR;
3492             END IF;
3493 
3494             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3495                hz_utility_v2pub.debug(p_message=>'cust_account_id should be same as cust_account_id site_use_id belongs to. ' ||
3496                 'x_return_status = ' || x_return_status,
3497                                   p_prefix =>l_debug_prefix,
3498                                   p_msg_level=>fnd_log.level_statement);
3499              END IF;
3500 
3501         EXCEPTION
3502             WHEN NO_DATA_FOUND THEN
3503                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
3504                 FND_MESSAGE.SET_TOKEN( 'FK', 'site_use_id' );
3505                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'site_use_id' );
3506                 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_site_uses' );
3507                 FND_MSG_PUB.ADD;
3508                 x_return_status := FND_API.G_RET_STS_ERROR;
3509         END;
3510 
3511         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3512            hz_utility_v2pub.debug(p_message=>'site_use_id is foreign key to hz_cust_site_uses. ' ||
3513                 'x_return_status = ' || x_return_status,
3514                                   p_prefix =>l_debug_prefix,
3515                                   p_msg_level=>fnd_log.level_statement);
3516         END IF;
3517 
3518 
3519         BEGIN
3520             SELECT 'Y' INTO l_dummy
3521             FROM HZ_CUSTOMER_PROFILES
3522             WHERE CUST_ACCOUNT_ID = p_customer_profile_rec.cust_account_id
3523             AND SITE_USE_ID = p_customer_profile_rec.site_use_id
3524             AND ROWNUM = 1;
3525 
3526             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
3527             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
3528             FND_MSG_PUB.ADD;
3529             x_return_status := FND_API.G_RET_STS_ERROR;
3530         EXCEPTION
3531             WHEN NO_DATA_FOUND THEN
3532                 NULL;
3533         END;
3534 
3535 
3536         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3537            hz_utility_v2pub.debug(p_message=>'one site use can only have one profile. ' ||
3538                 'x_return_status = ' || x_return_status,
3539                                   p_prefix =>l_debug_prefix,
3540                                   p_msg_level=>fnd_log.level_statement);
3541         END IF;
3542 
3543 
3544     -- 2310474: Profile can not be at account site level if it is created at party level
3545     ELSIF p_create_update_flag = 'C' AND
3546           p_customer_profile_rec.site_use_id IS NOT NULL AND
3547           p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM AND
3548           p_customer_profile_rec.cust_account_id = -1
3549     THEN
3550           FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NO_SITE_PROF_AT_PTY_LEV' );
3551           FND_MESSAGE.SET_TOKEN( 'PARTY_ID', p_customer_profile_rec.party_id );
3552           FND_MESSAGE.SET_TOKEN( 'SITE_USE_ID', p_customer_profile_rec.site_use_id );
3553           FND_MSG_PUB.ADD;
3554           x_return_status := FND_API.G_RET_STS_ERROR;
3555 
3556 
3557         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3558            hz_utility_v2pub.debug(p_message=>'profile at party level cannot be assign to a site. ' ||
3559                 'x_return_status = ' || x_return_status,
3560                                   p_prefix =>l_debug_prefix,
3561                                   p_msg_level=>fnd_log.level_statement);
3562         END IF;
3563 
3564 
3565     END IF;
3566 
3567 
3568     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3569            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
3570             'x_return_status = ' || x_return_status,
3571                                   p_prefix =>l_debug_prefix,
3572                                   p_msg_level=>fnd_log.level_statement);
3573     END IF;
3574 
3575     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3576            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
3577             'x_return_status = ' || x_return_status,
3578                                   p_prefix =>l_debug_prefix,
3579                                   p_msg_level=>fnd_log.level_statement);
3580     END IF;
3581 
3582 
3583     ----------------------------------------------
3584     -- validate credit_rating
3585     ----------------------------------------------
3586 
3587     -- credit_rating is lookup code in lookup type CREDIT_RATING
3588     IF p_customer_profile_rec.credit_rating IS NOT NULL AND
3589        p_customer_profile_rec.credit_rating <> FND_API.G_MISS_CHAR AND
3590         ( p_create_update_flag = 'C' OR
3591           ( p_create_update_flag = 'U'  AND
3592             p_customer_profile_rec.credit_rating <> NVL( l_credit_rating, FND_API.G_MISS_CHAR ) ) )
3593     THEN
3594         validate_lookup (
3595             p_column                                => 'credit_rating',
3596             p_lookup_type                           => 'CREDIT_RATING',
3597             p_column_value                          => p_customer_profile_rec.credit_rating,
3598             x_return_status                         => x_return_status );
3599 
3600         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3601            hz_utility_v2pub.debug(p_message=>'credit_rating is lookup code in lookup type CREDIT_RATING. ' ||
3602                 'x_return_status = ' || x_return_status,
3603                                   p_prefix =>l_debug_prefix,
3604                                   p_msg_level=>fnd_log.level_statement);
3605         END IF;
3606 
3607     END IF;
3608 
3609 
3610     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3611            hz_utility_v2pub.debug(p_message=>'(+) after validate credit_rating ... ' ||
3612             'x_return_status = ' || x_return_status,
3613                                   p_prefix =>l_debug_prefix,
3614                                   p_msg_level=>fnd_log.level_statement);
3615     END IF;
3616 
3617 
3618     ----------------------------------------------
3619     -- validate risk_code
3620     ----------------------------------------------
3621 
3622     -- risk_code is lookup code in lookup type RISK_CODE
3623     IF p_customer_profile_rec.risk_code IS NOT NULL AND
3624        p_customer_profile_rec.risk_code <> FND_API.G_MISS_CHAR AND
3625         ( p_create_update_flag = 'C' OR
3626           ( p_create_update_flag = 'U'  AND
3627             p_customer_profile_rec.risk_code <> NVL( l_risk_code, FND_API.G_MISS_CHAR ) ) )
3628     THEN
3629         validate_lookup (
3630             p_column                                => 'risk_code',
3631             p_lookup_type                           => 'RISK_CODE',
3632             p_column_value                          => p_customer_profile_rec.risk_code,
3633             x_return_status                         => x_return_status );
3634 
3635         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3636            hz_utility_v2pub.debug(p_message=>'risk_code is lookup code in lookup type RISK_CODE. ' ||
3637                 'x_return_status = ' || x_return_status,
3638                                   p_prefix =>l_debug_prefix,
3639                                   p_msg_level=>fnd_log.level_statement);
3640         END IF;
3641 
3642     END IF;
3643 
3644     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3645            hz_utility_v2pub.debug(p_message=>'(+) after validate risk_code ... ' ||
3646             'x_return_status = ' || x_return_status,
3647                                   p_prefix =>l_debug_prefix,
3648                                   p_msg_level=>fnd_log.level_statement);
3649     END IF;
3650 
3651 
3652     ----------------------------------------------
3653     -- validate auto_rec_incl_disputed_flag
3654     ----------------------------------------------
3655 
3656     -- auto_rec_incl_disputed_flag is mandatory field.
3657 
3658     -- Since we are defaulting to default profile class if profile_class_id
3659     -- has not been passed in, the auto_rec_incl_disputed_flag can be null or G_MISS during
3660     -- creation and it will default to auto_rec_incl_disputed_flag of default profile class if
3661     -- it is NULL. We can have G_MISS checking to make it mandatory.
3662 
3663     check_partial_mandatory_column (
3664         p_column                                 => 'auto_rec_incl_disputed_flag',
3665         p_column_value                           => p_customer_profile_rec.auto_rec_incl_disputed_flag,
3666         x_return_status                          => x_return_status );
3667 
3668     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3669            hz_utility_v2pub.debug(p_message=>'auto_rec_incl_disputed_flag is mandatory : it can be null but not G_MISS. ' ||
3670             'x_return_status = ' || x_return_status,
3671                                   p_prefix =>l_debug_prefix,
3672                                   p_msg_level=>fnd_log.level_statement);
3673     END IF;
3674 
3675 
3676     -- auto_rec_incl_disputed_flag is lookup code in lookup type YES/NO
3677     IF p_customer_profile_rec.auto_rec_incl_disputed_flag IS NOT NULL AND
3678        p_customer_profile_rec.auto_rec_incl_disputed_flag <> FND_API.G_MISS_CHAR
3679     THEN
3680         validate_lookup (
3681             p_column                                => 'auto_rec_incl_disputed_flag',
3682             p_lookup_type                           => 'YES/NO',
3683             p_column_value                          => p_customer_profile_rec.auto_rec_incl_disputed_flag,
3684             x_return_status                         => x_return_status );
3685 
3686 
3687         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3688            hz_utility_v2pub.debug(p_message=>'auto_rec_incl_disputed_flag is lookup code in lookup type YES/NO. ' ||
3689                 'x_return_status = ' || x_return_status,
3690                                   p_prefix =>l_debug_prefix,
3691                                   p_msg_level=>fnd_log.level_statement);
3692         END IF;
3693 
3694     END IF;
3695 
3696 
3697     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3698            hz_utility_v2pub.debug(p_message=>'(+) after validate auto_rec_incl_disputed_flag ... ' ||
3699             'x_return_status = ' || x_return_status,
3700                                   p_prefix =>l_debug_prefix,
3701                                   p_msg_level=>fnd_log.level_statement);
3702     END IF;
3703 
3704 
3705     ----------------------------------------------
3706     -- validate charge_on_finance_charge_flag
3707     ----------------------------------------------
3708 /****Logical APIs - validation not required****/
3709   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3710     -- charge_on_finance_charge_flag is lookup code in lookup type YES/NO
3711     -- As a part of late charge policy project changing the lookup type to AR_FORMULAE (bug # 5065436)
3712     IF p_customer_profile_rec.charge_on_finance_charge_flag IS NOT NULL AND
3713        p_customer_profile_rec.charge_on_finance_charge_flag <> FND_API.G_MISS_CHAR
3714     THEN
3715         validate_lookup (
3716             p_column                                => 'charge_on_finance_charge_flag',
3717             p_lookup_type                           => 'AR_FORMULAE',
3718             p_column_value                          => p_customer_profile_rec.charge_on_finance_charge_flag,
3719             x_return_status                         => x_return_status );
3720 
3721         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3722            hz_utility_v2pub.debug(p_message=>'charge_on_finance_charge_flag is lookup code in lookup type AR_FORMULAE. ' ||
3723                 'x_return_status = ' || x_return_status,
3724                                   p_prefix =>l_debug_prefix,
3725                                   p_msg_level=>fnd_log.level_statement);
3726         END IF;
3727 
3728     END IF;
3729 
3730     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3731            hz_utility_v2pub.debug(p_message=>'(+) after charge_on_finance_charge_flag ... ' ||
3732             'x_return_status = ' || x_return_status,
3733                                   p_prefix =>l_debug_prefix,
3734                                   p_msg_level=>fnd_log.level_statement);
3735     END IF;
3736   END IF;
3737 
3738     ----------------------------------------------
3739     -- validate cons_inv_flag
3740     ----------------------------------------------
3741 /****Logical APIs - validation not required****/
3742   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3743     -- cons_inv_flag is lookup code in lookup type YES/NO
3744     IF p_customer_profile_rec.cons_inv_flag IS NOT NULL AND
3745        p_customer_profile_rec.cons_inv_flag <> FND_API.G_MISS_CHAR
3746     THEN
3747         validate_lookup (
3748             p_column                                => 'cons_inv_flag',
3749             p_lookup_type                           => 'YES/NO',
3750             p_column_value                          => p_customer_profile_rec.cons_inv_flag,
3751             x_return_status                         => x_return_status );
3752 
3753 
3754         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3755            hz_utility_v2pub.debug(p_message=>'cons_inv_flag is lookup code in lookup type YES/NO. ' ||
3756                  'x_return_status = ' || x_return_status,
3757                                   p_prefix =>l_debug_prefix,
3758                                   p_msg_level=>fnd_log.level_statement);
3759         END IF;
3760 
3761     END IF;
3762 
3763 
3764     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3765            hz_utility_v2pub.debug(p_message=>'(+) after cons_inv_flag ... ' ||
3766             'x_return_status = ' || x_return_status,
3767                                   p_prefix =>l_debug_prefix,
3768                                   p_msg_level=>fnd_log.level_statement);
3769     END IF;
3770   END IF;
3771 
3772     ----------------------------------------------
3773     -- validate cons_bill_level
3774     ----------------------------------------------
3775 /****Logical APIs - validation not required****/
3776   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3777 
3778     validate_bill_level (
3779             p_create_update_flag         => p_create_update_flag,
3780             p_customer_profile_rec       => p_customer_profile_rec,
3781             x_return_status              => x_return_status );
3782 
3783     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3784            hz_utility_v2pub.debug(p_message=>'(+) after cons_bill_level ... ' ||
3785             'x_return_status = ' || x_return_status,
3786                                   p_prefix =>l_debug_prefix,
3787                                   p_msg_level=>fnd_log.level_statement);
3788     END IF;
3789   END IF;
3790 
3791     ----------------------------------------------
3792     -- validate status
3793     ----------------------------------------------
3794 
3795     -- status cannot be set to null during update
3796     IF p_create_update_flag = 'U' AND
3797        p_customer_profile_rec.status IS NOT NULL
3798     THEN
3799         validate_cannot_update_to_null (
3800             p_column                                => 'status',
3801             p_column_value                          => p_customer_profile_rec.status,
3802             x_return_status                         => x_return_status );
3803 
3804         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3805            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
3806                 'x_return_status = ' || x_return_status,
3807                                   p_prefix =>l_debug_prefix,
3808                                   p_msg_level=>fnd_log.level_statement);
3809         END IF;
3810 
3811     END IF;
3812 
3813 /****Logical APIs - validation not required****/
3814   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3815     -- status is lookup code in lookup type CODE_STATUS
3816     IF p_customer_profile_rec.status IS NOT NULL AND
3817        p_customer_profile_rec.status <> FND_API.G_MISS_CHAR AND
3818         ( p_create_update_flag = 'C' OR
3819           ( p_create_update_flag = 'U'  AND
3820             p_customer_profile_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
3821     THEN
3822         validate_lookup (
3823             p_column                                => 'status',
3824             p_lookup_type                           => 'CODE_STATUS',
3825             p_column_value                          => p_customer_profile_rec.status,
3826             x_return_status                         => x_return_status );
3827 
3828         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3829            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
3830                 'x_return_status = ' || x_return_status,
3831                                   p_prefix =>l_debug_prefix,
3832                                   p_msg_level=>fnd_log.level_statement);
3833         END IF;
3834 
3835     END IF;
3836   END IF;
3837 
3838     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3839            hz_utility_v2pub.debug(p_message=>'(+) after status ... ' ||
3840             'x_return_status = ' || x_return_status,
3841                                   p_prefix =>l_debug_prefix,
3842                                   p_msg_level=>fnd_log.level_statement);
3843     END IF;
3844 
3845 
3846     ----------------------------------------------
3847     -- validate dunning_letters
3848     ----------------------------------------------
3849 
3850     -- dunning_letters is mandatory field.
3851 
3852     -- Since we are defaulting to default profile class if profile_class_id
3853     -- has not been passed in, the dunning_letters can be null or G_MISS during
3854     -- creation and it will default to dunning_letters of default profile class if
3855     -- it is NULL. We can have G_MISS checking to make it mandatory.
3856 
3857     check_partial_mandatory_column (
3858         p_column                                 => 'dunning_letters',
3859         p_column_value                           => p_customer_profile_rec.dunning_letters,
3860         x_return_status                          => x_return_status );
3861 
3862     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3863            hz_utility_v2pub.debug(p_message=>'dunning_letters is mandatory : it can be null but not G_MISS. ' ||
3864             'x_return_status = ' || x_return_status,
3865                                   p_prefix =>l_debug_prefix,
3866                                   p_msg_level=>fnd_log.level_statement);
3867     END IF;
3868 
3869 
3870     -- dunning_letters is lookup code in lookup type YES/NO
3871     IF p_customer_profile_rec.dunning_letters IS NOT NULL AND
3872        p_customer_profile_rec.dunning_letters <> FND_API.G_MISS_CHAR
3873        AND ( p_create_update_flag = 'C' OR
3874          ( p_create_update_flag = 'U'  AND
3875            p_customer_profile_rec.dunning_letters <> NVL( l_dunning_letters, FND_API.G_MISS_CHAR ) ) )
3876     THEN
3877         validate_lookup (
3878             p_column                                => 'dunning_letters',
3879             p_lookup_type                           => 'YES/NO',
3880             p_column_value                          => p_customer_profile_rec.dunning_letters,
3881             x_return_status                         => x_return_status );
3882 
3883         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3884            hz_utility_v2pub.debug(p_message=>'dunning_letters is lookup code in lookup type YES/NO. ' ||
3885                 'x_return_status = ' || x_return_status,
3886                                   p_prefix =>l_debug_prefix,
3887                                   p_msg_level=>fnd_log.level_statement);
3888         END IF;
3889 
3890     END IF;
3891 
3892     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3893            hz_utility_v2pub.debug(p_message=>'(+) after dunning_letters ... ' ||
3894                 'x_return_status = ' || x_return_status,
3895                                   p_prefix =>l_debug_prefix,
3896                                   p_msg_level=>fnd_log.level_statement);
3897     END IF;
3898 
3899 
3900     ----------------------------------------------
3901     -- validate interest_charges
3902     ----------------------------------------------
3903 
3904     -- interest_charges is mandatory field.
3905 
3906     -- Since we are defaulting to default profile class if profile_class_id
3907     -- has not been passed in, the interest_charges can be null or G_MISS during
3908     -- creation and it will default to interest_charges of default profile class if
3909     -- it is NULL. We can have G_MISS checking to make it mandatory.
3910 
3911     check_partial_mandatory_column (
3912         p_column                                 => 'interest_charges',
3913         p_column_value                           => p_customer_profile_rec.interest_charges,
3914         x_return_status                          => x_return_status );
3915 
3916     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3917            hz_utility_v2pub.debug(p_message=>'interest_charges is mandatory : it can be null but not G_MISS. ' ||
3918             'x_return_status = ' || x_return_status,
3919                                   p_prefix =>l_debug_prefix,
3920                                   p_msg_level=>fnd_log.level_statement);
3921     END IF;
3922 
3923 /****Logical APIs - validation not required****/
3924   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3925     -- interest_charges is lookup code in lookup type YES/NO
3926     IF p_customer_profile_rec.interest_charges IS NOT NULL AND
3927        p_customer_profile_rec.interest_charges <> FND_API.G_MISS_CHAR
3928        AND ( p_create_update_flag = 'C' OR
3929          ( p_create_update_flag = 'U'  AND
3930            p_customer_profile_rec.interest_charges <> NVL( l_interest_charges, FND_API.G_MISS_CHAR ) ) )
3931     THEN
3932         validate_lookup (
3933             p_column                                => 'interest_charges',
3934             p_lookup_type                           => 'YES/NO',
3935             p_column_value                          => p_customer_profile_rec.interest_charges,
3936             x_return_status                         => x_return_status );
3937 
3938         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3939            hz_utility_v2pub.debug(p_message=>'interest_charges is lookup code in lookup type YES/NO. ' ||
3940                 'x_return_status = ' || x_return_status,
3941                                   p_prefix =>l_debug_prefix,
3942                                   p_msg_level=>fnd_log.level_statement);
3943         END IF;
3944 
3945     END IF;
3946   END IF;
3947 
3948     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3949            hz_utility_v2pub.debug(p_message=>'(+) after interest_charges ... ' ||
3950             'x_return_status = ' || x_return_status,
3951                                   p_prefix =>l_debug_prefix,
3952                                   p_msg_level=>fnd_log.level_statement);
3953     END IF;
3954 
3955 
3956     ----------------------------------------------
3957     -- validate send_statements
3958     ----------------------------------------------
3959 
3960     -- send_statements is mandatory field.
3961 
3962     -- Since we are defaulting to default profile class if profile_class_id
3963     -- has not been passed in, the send_statements can be null or G_MISS during
3964     -- creation and it will default to send_statements of default profile class if
3965     -- it is NULL. We can have G_MISS checking to make it mandatory.
3966 
3967     check_partial_mandatory_column (
3968         p_column                                 => 'send_statements',
3969         p_column_value                           => p_customer_profile_rec.send_statements,
3970         x_return_status                          => x_return_status );
3971 
3972     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3973            hz_utility_v2pub.debug(p_message=>'send_statements is mandatory : it can be null but not G_MISS. ' ||
3974             'x_return_status = ' || x_return_status,
3975                                   p_prefix =>l_debug_prefix,
3976                                   p_msg_level=>fnd_log.level_statement);
3977     END IF;
3978 
3979 
3980 /****Logical APIs - validation not required****/
3981   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3982     -- send_statements is lookup code in lookup type YES/NO
3983     IF p_customer_profile_rec.send_statements IS NOT NULL AND
3984        p_customer_profile_rec.send_statements <> FND_API.G_MISS_CHAR
3985        AND ( p_create_update_flag = 'C' OR
3986          ( p_create_update_flag = 'U'  AND
3987            p_customer_profile_rec.send_statements <> NVL( l_send_statements, FND_API.G_MISS_CHAR ) ) )
3988     THEN
3989         validate_lookup (
3990             p_column                                => 'send_statements',
3991             p_lookup_type                           => 'YES/NO',
3992             p_column_value                          => p_customer_profile_rec.send_statements,
3993             x_return_status                         => x_return_status );
3994 
3995         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3996            hz_utility_v2pub.debug(p_message=>'send_statements is lookup code in lookup type YES/NO. ' ||
3997                 'x_return_status = ' || x_return_status,
3998                                   p_prefix =>l_debug_prefix,
3999                                   p_msg_level=>fnd_log.level_statement);
4000         END IF;
4001 
4002     END IF;
4003   END IF;
4004 
4005     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4006            hz_utility_v2pub.debug(p_message=>'(+) after send_statements ... ' ||
4007             'x_return_status = ' || x_return_status,
4008                                   p_prefix =>l_debug_prefix,
4009                                   p_msg_level=>fnd_log.level_statement);
4010     END IF;
4011 
4012 
4013     ----------------------------------------------
4014     -- validate credit_balance_statements
4015     ----------------------------------------------
4016 
4017     -- credit_balance_statements is mandatory field.
4018 
4019     -- Since we are defaulting to default profile class if profile_class_id
4020     -- has not been passed in, the credit_balance_statements can be null or G_MISS during
4021     -- creation and it will default to credit_balance_statements of default profile class if
4022     -- it is NULL. We can have G_MISS checking to make it mandatory.
4023 
4024     check_partial_mandatory_column (
4025         p_column                                 => 'credit_balance_statements',
4026         p_column_value                           => p_customer_profile_rec.credit_balance_statements,
4027         x_return_status                          => x_return_status );
4028 
4029 
4030     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4031            hz_utility_v2pub.debug(p_message=>'credit_balance_statements is mandatory : it can be null but not G_MISS. ' ||
4032             'x_return_status = ' || x_return_status,
4033                                   p_prefix =>l_debug_prefix,
4034                                   p_msg_level=>fnd_log.level_statement);
4035     END IF;
4036 
4037 
4038 /****Logical APIs - validation not required****/
4039   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4040     -- credit_balance_statements is lookup code in lookup type YES/NO
4041     IF p_customer_profile_rec.credit_balance_statements IS NOT NULL AND
4042        p_customer_profile_rec.credit_balance_statements <> FND_API.G_MISS_CHAR
4043     THEN
4044         validate_lookup (
4045             p_column                                => 'credit_balance_statements',
4046             p_lookup_type                           => 'YES/NO',
4047             p_column_value                          => p_customer_profile_rec.credit_balance_statements,
4048             x_return_status                         => x_return_status );
4049 
4050         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4051            hz_utility_v2pub.debug(p_message=>'credit_balance_statements is lookup code in lookup type YES/NO. ' ||
4052                 'x_return_status = ' || x_return_status,
4053                                   p_prefix =>l_debug_prefix,
4054                                   p_msg_level=>fnd_log.level_statement);
4055        END IF;
4056 
4057     END IF;
4058   END IF;
4059 
4060     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4061            hz_utility_v2pub.debug(p_message=>'(+) after credit_balance_statements ... ' ||
4062             'x_return_status = ' || x_return_status,
4063                                   p_prefix =>l_debug_prefix,
4064                                   p_msg_level=>fnd_log.level_statement);
4065     END IF;
4066 
4067 
4068     ----------------------------------------------
4069     -- validate credit_hold
4070     ----------------------------------------------
4071 
4072     -- credit_hold is mandatory field.
4073 
4074     -- Since we are defaulting to default profile class if profile_class_id
4075     -- has not been passed in, the credit_hold can be null or G_MISS during
4076     -- creation and it will default to credit_hold of default profile class if
4077     -- it is NULL. We can have G_MISS checking to make it mandatory.
4078 
4079     check_partial_mandatory_column (
4080         p_column                                 => 'credit_hold',
4081         p_column_value                           => p_customer_profile_rec.credit_hold,
4082         x_return_status                          => x_return_status );
4083 
4084     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4085            hz_utility_v2pub.debug(p_message=>'credit_hold is mandatory : it can be null but not G_MISS. ' ||
4086             'x_return_status = ' || x_return_status,
4087                                   p_prefix =>l_debug_prefix,
4088                                   p_msg_level=>fnd_log.level_statement);
4089     END IF;
4090 
4091 
4092 /****Logical APIs - validation not required****/
4093   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4094     -- credit_hold is lookup code in lookup type YES/NO
4095     IF p_customer_profile_rec.credit_hold IS NOT NULL AND
4096        p_customer_profile_rec.credit_hold <> FND_API.G_MISS_CHAR
4097     THEN
4098         validate_lookup (
4099             p_column                                => 'credit_hold',
4100             p_lookup_type                           => 'YES/NO',
4101             p_column_value                          => p_customer_profile_rec.credit_hold,
4102             x_return_status                         => x_return_status );
4103 
4104         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4105            hz_utility_v2pub.debug(p_message=>'credit_hold is lookup code in lookup type YES/NO. ' ||
4106                 'x_return_status = ' || x_return_status,
4107                                   p_prefix =>l_debug_prefix,
4108                                   p_msg_level=>fnd_log.level_statement);
4109         END IF;
4110 
4111     END IF;
4112   END IF;
4113 
4114     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4115            hz_utility_v2pub.debug(p_message=>'(+) after credit_hold ... ' ||
4116             'x_return_status = ' || x_return_status,
4117                                   p_prefix =>l_debug_prefix,
4118                                   p_msg_level=>fnd_log.level_statement);
4119     END IF;
4120 
4121 
4122     --------------------------------------
4123     -- validate created_by_module
4124     --------------------------------------
4125 
4126     validate_created_by_module(
4127       p_create_update_flag     => p_create_update_flag,
4128       p_created_by_module      => p_customer_profile_rec.created_by_module,
4129       p_old_created_by_module  => l_created_by_module,
4130       x_return_status          => x_return_status);
4131 
4132     --------------------------------------
4133     -- validate application_id
4134     --------------------------------------
4135 
4136     validate_application_id(
4137       p_create_update_flag     => p_create_update_flag,
4138       p_application_id         => p_customer_profile_rec.application_id,
4139       p_old_application_id     => l_application_id,
4140       x_return_status          => x_return_status);
4141 
4142     ------------------------------------------
4143     ----*** Select fields to validate  ***----
4144     ------------------------------------------
4145       IF  p_customer_profile_rec.profile_class_id IS NOT NULL AND
4146           p_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM
4147       THEN
4148 
4149           SELECT * INTO l_profile_class_rec
4150           FROM     HZ_CUST_PROFILE_CLASSES
4151           WHERE    PROFILE_CLASS_ID = p_customer_profile_rec.profile_class_id;
4152 
4153       END IF;
4154 
4155     ------------------------------------------
4156     ---***  Account Status Validation   ***---
4157     ------------------------------------------
4158    IF p_customer_profile_rec.account_status IS NOT NULL AND
4159       p_customer_profile_rec.account_status <> FND_API.G_MISS_CHAR
4160        AND ( p_create_update_flag = 'C' OR
4161          ( p_create_update_flag = 'U'  AND
4162            p_customer_profile_rec.account_status <> NVL( l_account_status, FND_API.G_MISS_CHAR ) ) )
4163    THEN
4164         validate_lookup (
4165             p_column                   => 'account_status',
4166             p_lookup_type              => 'ACCOUNT_STATUS',
4167             p_column_value             => p_customer_profile_rec.account_status,
4168             x_return_status            => x_return_status );
4169 
4170         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4171            hz_utility_v2pub.debug(p_message=>'account_status is lookup code in lookup type ACCOUNT_STATUS.' ||
4172                'x_return_status = ' || x_return_status,
4173                                   p_prefix =>l_debug_prefix,
4174                                   p_msg_level=>fnd_log.level_statement);
4175         END IF;
4176 
4177     END IF;
4178 
4179         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4180            hz_utility_v2pub.debug(p_message=>'(+) after validate account_status ... ' ||
4181               'x_return_status = ' || x_return_status,
4182                                   p_prefix =>l_debug_prefix,
4183                                   p_msg_level=>fnd_log.level_statement);
4184         END IF;
4185 
4186 
4187     ---------------------------------------
4188     ------***Tolerance Validation ***------
4189     ---------------------------------------
4190    IF p_customer_profile_rec.tolerance IS NOT NULL AND
4191       p_customer_profile_rec.tolerance <> FND_API.G_MISS_NUM
4192        AND ( p_create_update_flag = 'C' OR
4193          ( p_create_update_flag = 'U'  AND
4194            p_customer_profile_rec.tolerance <> NVL( l_tolerance, FND_API.G_MISS_NUM ) ) )
4195    THEN
4196        IF p_customer_profile_rec.tolerance > 100  OR
4197           p_customer_profile_rec.tolerance < -100
4198        THEN
4199             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VALUE_BETWEEN' );
4200             FND_MESSAGE.SET_TOKEN( 'COLUMN','tolerance');
4201             FND_MESSAGE.SET_TOKEN( 'VALUE1', '-100' );
4202             FND_MESSAGE.SET_TOKEN( 'VALUE2', '100' );
4203             FND_MSG_PUB.ADD;
4204             x_return_status := FND_API.G_RET_STS_ERROR;
4205            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4206                 hz_utility_v2pub.debug(p_message=>'Tolerance should be between -100 and 100 .' ||
4207                          'x_return_status = ' || x_return_status,
4208                                   p_prefix =>l_debug_prefix,
4209                                   p_msg_level=>fnd_log.level_statement);
4210             END IF;
4211 
4212        END IF;
4213    END IF;
4214 
4215    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4216            hz_utility_v2pub.debug(p_message=>'(+) after validate tolerance ... ' ||
4217               'x_return_status = ' || x_return_status,
4218                                   p_prefix =>l_debug_prefix,
4219                                   p_msg_level=>fnd_log.level_statement);
4220     END IF;
4221 
4222 
4223     -------------------------------------------------
4224     ---***   Validating Percent_Collectable    ***---
4225     -------------------------------------------------
4226    IF  p_customer_profile_rec.percent_collectable IS NOT NULL AND
4227        p_customer_profile_rec.percent_collectable <> FND_API.G_MISS_NUM
4228        AND ( p_create_update_flag = 'C' OR
4229          ( p_create_update_flag = 'U'  AND
4230            p_customer_profile_rec.percent_collectable <> NVL( l_percent_collectable, FND_API.G_MISS_NUM ) ) )
4231    THEN
4232        IF p_customer_profile_rec.percent_collectable > 100 OR
4233           p_customer_profile_rec.percent_collectable < 0
4234        THEN
4235             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VALUE_BETWEEN' );
4236             FND_MESSAGE.SET_TOKEN( 'COLUMN','percent_collectable');
4237             FND_MESSAGE.SET_TOKEN( 'VALUE1', '0' );
4238             FND_MESSAGE.SET_TOKEN( 'VALUE2', '100' );
4239             FND_MSG_PUB.ADD;
4240             x_return_status := FND_API.G_RET_STS_ERROR;
4241 
4242             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4243                 hz_utility_v2pub.debug(p_message=>'Percent_Collectable should be between 0 and 100 .' ||
4244                       'x_return_status = ' || x_return_status,
4245                                   p_prefix =>l_debug_prefix,
4246                                   p_msg_level=>fnd_log.level_statement);
4247              END IF;
4248 
4249         END IF;
4250     END IF;
4251 
4252     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4253            hz_utility_v2pub.debug(p_message=>'(+) after validate percent_collectable ... ' ||
4254               'x_return_status = ' || x_return_status,
4255                                   p_prefix =>l_debug_prefix,
4256                                   p_msg_level=>fnd_log.level_statement);
4257     END IF;
4258 
4259 
4260     -----------------------------------------
4261     ---***  Validating Override_Terms  ***---
4262     -----------------------------------------
4263     -- override_terms is lookup code in lookup type YES/NO
4264     IF p_customer_profile_rec.override_terms IS NOT NULL AND
4265        p_customer_profile_rec.override_terms <> FND_API.G_MISS_CHAR
4266        AND ( p_create_update_flag = 'C' OR
4267          ( p_create_update_flag = 'U'  AND
4268            p_customer_profile_rec.override_terms <> NVL( l_override_terms, FND_API.G_MISS_CHAR) ) )
4269     THEN
4270         validate_lookup (
4271             p_column                   => 'override_terms',
4272             p_lookup_type              => 'YES/NO',
4273             p_column_value             => p_customer_profile_rec.override_terms,
4274             x_return_status            => x_return_status );
4275 
4276 
4277         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4278            hz_utility_v2pub.debug(p_message=>'override_terms is lookup code in lookup type YES/NO. ' ||
4279                 'x_return_status = ' || x_return_status,
4280                                   p_prefix =>l_debug_prefix,
4281                                   p_msg_level=>fnd_log.level_statement);
4282         END IF;
4283 
4284     END IF;
4285 
4286     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4287            hz_utility_v2pub.debug(p_message=>'(+) after override_terms ... ' ||
4288             'x_return_status = ' || x_return_status,
4289                                   p_prefix =>l_debug_prefix,
4290                                   p_msg_level=>fnd_log.level_statement);
4291     END IF;
4292 
4293 
4294      ----------------------------------------------
4295      ---***Validating lockbox_matching_option***---
4296      ----------------------------------------------
4297      IF p_customer_profile_rec.lockbox_matching_option IS NOT NULL AND
4298         p_customer_profile_rec.lockbox_matching_option <> FND_API.G_MISS_CHAR
4299        AND ( p_create_update_flag = 'C' OR
4300          ( p_create_update_flag = 'U'  AND
4301            p_customer_profile_rec.lockbox_matching_option <> NVL( l_lockbox_matching_option, FND_API.G_MISS_CHAR) ) )
4302      THEN
4303         validate_lookup (
4304             p_column          => 'lockbox_matching_option',
4305             p_lookup_type     => 'ARLPLB_MATCHING_OPTION',
4306             p_column_value    => p_customer_profile_rec.lockbox_matching_option,
4307             x_return_status   => x_return_status );
4308 
4309         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4310            hz_utility_v2pub.debug(p_message=>'lockbox_matching_option is lookup code in lookup type
4311                                         ARLPLB_MATCHING_OPTION.' ||'x_return_status = ' ||
4312                                         x_return_status,
4313                                   p_prefix =>l_debug_prefix,
4314                                   p_msg_level=>fnd_log.level_statement);
4315        END IF;
4316 
4317     END IF;
4318 
4319         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4320            hz_utility_v2pub.debug(p_message=>'(+) after validate lockbox_matching_option ... ' ||
4321               'x_return_status = ' || x_return_status,
4322                                   p_prefix =>l_debug_prefix,
4323                                   p_msg_level=>fnd_log.level_statement);
4324         END IF;
4325 
4326 
4327       --------------------------------------------
4328       --*** Validating autocash_hierarchy_id***---
4329       --------------------------------------------
4330     IF p_customer_profile_rec.autocash_hierarchy_id IS NOT NULL AND
4331         p_customer_profile_rec.autocash_hierarchy_id <> FND_API.G_MISS_NUM
4332        AND ( p_create_update_flag = 'C' OR
4333          ( p_create_update_flag = 'U'  AND
4334            p_customer_profile_rec.autocash_hierarchy_id <> NVL( l_autocash_hierarchy_id, FND_API.G_MISS_NUM) ) )
4335     THEN
4336         check_auto_hierid_fk (
4337            p_column             => 'autocash_hierarchy_id',
4338            p_column_value       => p_customer_profile_rec.autocash_hierarchy_id,
4339            x_return_status      => x_return_status );
4340 
4341         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4342            hz_utility_v2pub.debug(p_message=>'autocash_hierarchy_id is foreign key to
4343                                                  ar_autocash_hierarchies. ' || 'x_return_status = ' ||
4344                                                  x_return_status,
4345                                   p_prefix =>l_debug_prefix,
4346                                   p_msg_level=>fnd_log.level_statement);
4347         END IF;
4348 
4349     END IF;
4350 
4351     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4352            hz_utility_v2pub.debug(p_message=>'(+) after validate autocash_hierarchy_id ... ' ||
4353                                                 'x_return_status = ' || x_return_status,
4354                                   p_prefix =>l_debug_prefix,
4355                                   p_msg_level=>fnd_log.level_statement);
4356     END IF;
4357 
4358 
4359      ---------------------------------------------------------
4360      -----*** Validating autocash_hierarchy_id_for_adr***-----
4361      ---------------------------------------------------------
4362    IF p_customer_profile_rec.autocash_hierarchy_id_for_adr IS NOT NULL AND
4363       p_customer_profile_rec.autocash_hierarchy_id_for_adr <> FND_API.G_MISS_NUM
4364        AND ( p_create_update_flag = 'C' OR
4365          ( p_create_update_flag = 'U'  AND
4366            p_customer_profile_rec.autocash_hierarchy_id_for_adr<> NVL( l_autocash_hierarchy_id_for_ad, FND_API.G_MISS_NUM) ) )
4367    THEN
4368      check_auto_hierid_fk (
4369         p_column       => 'autocash_hierarchy_id_for_adr',
4370         p_column_value => p_customer_profile_rec.autocash_hierarchy_id_for_adr,
4371         x_return_status=> x_return_status );
4372 
4373         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4374            hz_utility_v2pub.debug(p_message=>'autocash_hierarchy_id_for_adr is foreign key to
4375                                                  ar_autocash_hierarchies . ' || 'x_return_status = ' ||
4376                                                  x_return_status,
4377                                   p_prefix =>l_debug_prefix,
4378                                   p_msg_level=>fnd_log.level_statement);
4379         END IF;
4380 
4381     END IF;
4382 
4383     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4384            hz_utility_v2pub.debug(p_message=>'(+) after validate autocash_hierarchy_id_for_adr ... ' ||
4385             'x_return_status = ' || x_return_status,
4386                                   p_prefix =>l_debug_prefix,
4387                                   p_msg_level=>fnd_log.level_statement);
4388     END IF;
4389 
4390      --------------------------------------------
4391      ---*** Validating statement_cycle_id  ***---
4392      --------------------------------------------
4393      IF p_customer_profile_rec.statement_cycle_id IS NOT NULL AND
4394         p_customer_profile_rec.statement_cycle_id <> FND_API.G_MISS_NUM
4395        AND ( p_create_update_flag = 'C' OR
4396          ( p_create_update_flag = 'U'  AND
4397            p_customer_profile_rec.statement_cycle_id <> NVL( l_statement_cycle_id, FND_API.G_MISS_NUM) ) )
4398      THEN
4399           check_stat_cycid_fk (
4400            p_column             => 'statement_cycle_id',
4401            p_column_value       => p_customer_profile_rec.statement_cycle_id,
4402            x_return_status      => x_return_status );
4403 
4404         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4405            hz_utility_v2pub.debug(p_message=>'statement_cycle_id is foreign key to
4406                                  ar_statement_cycles . ' || 'x_return_status = ' ||
4407                                  x_return_status,
4408                                   p_prefix =>l_debug_prefix,
4409                                   p_msg_level=>fnd_log.level_statement);
4410         END IF;
4411 
4412     END IF;
4413 
4414     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4415            hz_utility_v2pub.debug(p_message=>'(+) after validate statement_cycle_id ... ' ||
4416                                              'x_return_status = ' || x_return_status,
4417                                   p_prefix =>l_debug_prefix,
4418                                   p_msg_level=>fnd_log.level_statement);
4419     END IF;
4420 
4421 
4422     ---------------------------------------------
4423     --------------*** Clearing Days***-----------
4424     ---------------------------------------------
4425    IF p_customer_profile_rec.clearing_days IS NOT NULL            AND
4426       p_customer_profile_rec.clearing_days <> FND_API.G_MISS_NUM
4427        AND ( p_create_update_flag = 'C' OR
4428          ( p_create_update_flag = 'U'  AND
4429            p_customer_profile_rec.clearing_days <> NVL( l_clearing_days, FND_API.G_MISS_NUM) ) )
4430    THEN
4431      -- Error
4432        check_positive_value (
4433            p_column             => 'clearing_days',
4434            p_column_value       => p_customer_profile_rec.clearing_days,
4435            x_return_status      => x_return_status );
4436 
4437      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4438            hz_utility_v2pub.debug(p_message=>'clearing_days should be > 0.' ||'x_return_status = ' ||
4439                                                 x_return_status,
4440                                   p_prefix =>l_debug_prefix,
4441                                   p_msg_level=>fnd_log.level_statement);
4442     END IF;
4443 
4444 
4445    END IF;
4446        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4447            hz_utility_v2pub.debug(p_message=>'(+) after validate clearing_days... ' ||
4448                                  'x_return_status = ' || x_return_status,
4449                                   p_prefix =>l_debug_prefix,
4450                                   p_msg_level=>fnd_log.level_statement);
4451        END IF;
4452 
4453     ---------------------------------------------
4454     ------------*** Payment_grace_days***--------
4455     ---------------------------------------------
4456    IF p_customer_profile_rec.payment_grace_days IS NOT NULL            AND
4457       p_customer_profile_rec.payment_grace_days <> FND_API.G_MISS_NUM
4458        AND ( p_create_update_flag = 'C' OR
4459          ( p_create_update_flag = 'U'  AND
4460            p_customer_profile_rec.payment_grace_days <> NVL( l_payment_grace_days, FND_API.G_MISS_NUM) ) )
4461    THEN
4462        check_positive_value (
4463            p_column             => 'payment_grace_days',
4464            p_column_value       => p_customer_profile_rec.payment_grace_days,
4465            x_return_status      => x_return_status );
4466 
4467      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4468            hz_utility_v2pub.debug(p_message=>'payment_grace_days should be > 0.' ||'x_return_status = ' ||
4469                                                 x_return_status,
4470                                   p_prefix =>l_debug_prefix,
4471                                   p_msg_level=>fnd_log.level_statement);
4472     END IF;
4473 
4474    END IF;
4475 
4476        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4477            hz_utility_v2pub.debug(p_message=>'(+) after validate payment_grace_days... ' ||
4478                                                 'x_return_status = ' || x_return_status,
4479                                   p_prefix =>l_debug_prefix,
4480                                   p_msg_level=>fnd_log.level_statement);
4481        END IF;
4482 
4483 
4484     ---------------------------------------------
4485     -----------***Interest_period_day***---------
4486     ---------------------------------------------
4487    IF p_customer_profile_rec.interest_period_days IS NOT NULL            AND
4488       p_customer_profile_rec.interest_period_days <> FND_API.G_MISS_NUM
4489    THEN
4490        check_greater_than_zero (
4491            p_column             => 'interest_period_days',
4492            p_column_value       => p_customer_profile_rec.interest_period_days,
4493            x_return_status      => x_return_status );
4494 
4495      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4496            hz_utility_v2pub.debug(p_message=>'interest_period_days should be > 0.' ||'x_return_status = ' ||
4497                                          x_return_status,
4498                                   p_prefix =>l_debug_prefix,
4499                                   p_msg_level=>fnd_log.level_statement);
4500     END IF;
4501 
4502    END IF;
4503 
4504        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4505            hz_utility_v2pub.debug(p_message=>'(+) after validate interest_period_days... ' ||
4506                                              'x_return_status = ' || x_return_status,
4507                                   p_prefix =>l_debug_prefix,
4508                                   p_msg_level=>fnd_log.level_statement);
4509        END IF;
4510 
4511 
4512      --------------------------------------------
4513      ---***Validating dunning_letter_set_id***---
4514      --------------------------------------------
4515  IF p_customer_profile_rec.dunning_letter_set_id IS NOT NULL AND
4516     p_customer_profile_rec.dunning_letter_set_id <> FND_API.G_MISS_NUM
4517  THEN
4518  /* Bug 5095478. DUNNING_LETTER_SET_ID is obsoleted.
4519    This validation is changed to throw an error if user passes the
4520    DUNNING_LETTER_SET_ID */
4521 
4522      check_dunning_letid_fk (
4523            p_column             => 'dunning_letter_set_id',
4524            p_column_value       => p_customer_profile_rec.dunning_letter_set_id,
4525            x_return_status      => x_return_status );
4526 
4527      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4528            hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id is foreign key to
4529                                          ar_dunning_letter_sets . ' || 'x_return_status = ' ||
4530                                          x_return_status,
4531                                   p_prefix =>l_debug_prefix,
4532                                   p_msg_level=>fnd_log.level_statement);
4533     END IF;
4534    /* IF fnd_profile.value('HZ_API_ERR_ON_OBSOLETE_COLUMN')='Y'
4535     THEN
4536          FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_OBSOLETE_COLUMN');
4537          FND_MESSAGE.SET_TOKEN( 'COLUMN', 'dunning_letter_set_id' );
4538          FND_MSG_PUB.ADD;
4539          x_return_status := FND_API.G_RET_STS_ERROR;
4540     END IF; */
4541 
4542  END IF;
4543 
4544     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4545            hz_utility_v2pub.debug(p_message=>'(+) after validate dunning_letter_set_id ... ' ||
4546                                                 'x_return_status = ' || x_return_status,
4547                                   p_prefix =>l_debug_prefix,
4548                                   p_msg_level=>fnd_log.level_statement);
4549     END IF;
4550 
4551      --------------------------------------------
4552      ---*** Validating tax_printing_option ***---
4553      --------------------------------------------
4554      IF p_customer_profile_rec.tax_printing_option IS NOT NULL AND
4555         p_customer_profile_rec.tax_printing_option <> FND_API.G_MISS_CHAR
4556         AND ( p_create_update_flag = 'C' OR
4557          ( p_create_update_flag = 'U'  AND
4558          p_customer_profile_rec.tax_printing_option <> NVL( l_tax_printing_option, FND_API.G_MISS_CHAR ) ))
4559      THEN
4560         validate_lookup (
4561             p_column          => 'tax_printing_option',
4562             p_lookup_type     => 'TAX_PRINTING_OPTION',
4563             p_column_value    => p_customer_profile_rec.tax_printing_option,
4564             x_return_status   => x_return_status );
4565 
4566         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4567            hz_utility_v2pub.debug(p_message=>'tax_printing_option is lookup code in lookup type
4568                                                 TAX_PRINTING_OPTION.' ||'x_return_status = ' ||
4569                                                 x_return_status,
4570                                   p_prefix =>l_debug_prefix,
4571                                   p_msg_level=>fnd_log.level_statement);
4572        END IF;
4573 
4574      END IF;
4575 
4576         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4577            hz_utility_v2pub.debug(p_message=>'(+) after validate tax_printing_option ... ' ||
4578                                          'x_return_status = ' || x_return_status,
4579                                   p_prefix =>l_debug_prefix,
4580                                   p_msg_level=>fnd_log.level_statement);
4581         END IF;
4582 
4583 
4584      ----------------------------------------
4585      ----***  Validating standard_terms***---
4586      ----------------------------------------
4587  IF p_customer_profile_rec.standard_terms IS NOT NULL AND
4588     p_customer_profile_rec.standard_terms <> FND_API.G_MISS_NUM
4589         AND ( p_create_update_flag = 'C' OR
4590          ( p_create_update_flag = 'U'  AND
4591          p_customer_profile_rec.standard_terms <> NVL( l_standard_terms, FND_API.G_MISS_NUM ) ))
4592  THEN
4593     l_ckeck_acc_bfb_enabled := 'N';
4594     /* Commented the below code and added new set of validations below
4595        for enhancement # 5529044
4596     -- When Updating a BFB enabled site use profile which has a null payment term id
4597     -- with a  new payment term id check  that the payment term id is a BFB payment term
4598     -- if  BFB is enabled for the account profile and check that the payment term is
4599     -- a non BFB payment term if BFB is disabled for the Account profile.
4600     if (p_customer_profile_rec.site_use_id is NOT NULL and p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM
4601         and p_create_update_flag = 'U' )then
4602       l_ckeck_acc_bfb_enabled := 'Y';
4603       ll_cons_inv_flag := 'N';
4604       begin
4605           select cons_inv_flag
4606           into   ll_cons_inv_flag
4607           from   hz_customer_profiles
4608           where  cust_account_id = p_customer_profile_rec.cust_account_id
4609           and    site_use_id is NULL;
4610        exception when others then
4611           ll_cons_inv_flag := 'N';
4612        end;
4613     else
4614        ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4615     end if;
4616     */
4617 
4618     ----------------
4619     -- Below validatins are added for enhancement # 5529044
4620     -- If BFB is enabled, check standard_terms is a BFB standard term
4621     -- If BFB is not enabled, any valid standard_terms ok irrespective of BFB
4622     -- For site profile, if Account level is BFB disabled,
4623     -- validate any valid standard_terms, irrespective of site level BFB
4624     if p_customer_profile_rec.site_use_id is NOT NULL then  -- Site profile
4625       ll_cons_inv_flag := 'N';
4626       begin
4627           select cons_inv_flag
4628           into   ll_cons_inv_flag
4629           from   hz_customer_profiles
4630           where  cust_account_id = p_customer_profile_rec.cust_account_id
4631           and    site_use_id is NULL;
4632        exception when others then
4633           ll_cons_inv_flag := 'N';
4634        end;
4635        if ll_cons_inv_flag = 'Y' then
4636           ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4637        else
4638           l_ckeck_acc_bfb_enabled := 'Y';
4639        end if;
4640     else -- Account profile
4641        ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4642     end if;
4643     ----------------
4644 
4645        check_standard_terms_fk (
4646            p_column             => 'standard_terms',
4647            p_column_value       => p_customer_profile_rec.standard_terms,
4648            p_cons_inv_flag      => ll_cons_inv_flag,
4649            p_ckeck_acc_bfb_enabled => l_ckeck_acc_bfb_enabled,
4650            x_return_status      => x_return_status );
4651 
4652      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4653            hz_utility_v2pub.debug(p_message=>'standard_terms is foreign key to ra_terms . ' ||
4654                                                   'x_return_status = ' || x_return_status,
4655                                   p_prefix =>l_debug_prefix,
4656                                   p_msg_level=>fnd_log.level_statement);
4657     END IF;
4658 
4659  END IF;
4660 
4661     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4662            hz_utility_v2pub.debug(p_message=>'(+) after validate standard_terms ... ' ||
4663                                            'x_return_status = ' || x_return_status,
4664                                   p_prefix =>l_debug_prefix,
4665                                   p_msg_level=>fnd_log.level_statement);
4666     END IF;
4667 
4668 
4669      -------------------------------------------
4670      ---*** Validating grouping_rule_id   ***---
4671      -------------------------------------------
4672  IF p_customer_profile_rec.grouping_rule_id IS NOT NULL AND
4673     p_customer_profile_rec.grouping_rule_id <> FND_API.G_MISS_NUM
4674         AND ( p_create_update_flag = 'C' OR
4675          ( p_create_update_flag = 'U'  AND
4676          p_customer_profile_rec.grouping_rule_id <> NVL( l_grouping_rule_id, FND_API.G_MISS_NUM ) ))
4677 
4678  THEN
4679      check_grouping_ruleid_fk (
4680            p_column             => 'grouping_rule_id',
4681            p_column_value       => p_customer_profile_rec.grouping_rule_id,
4682            x_return_status      => x_return_status );
4683 
4684      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4685            hz_utility_v2pub.debug(p_message=>'grouping_rule_id is foreign key to ra_grouping_rules  . ' ||
4686                                              'x_return_status = ' || x_return_status,
4687                                   p_prefix =>l_debug_prefix,
4688                                   p_msg_level=>fnd_log.level_statement);
4689     END IF;
4690 
4691  END IF;
4692 
4693  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4694            hz_utility_v2pub.debug(p_message=>'(+) after validate grouping_rule_id ... ' ||
4695             'x_return_status = ' || x_return_status,
4696                                   p_prefix =>l_debug_prefix,
4697                                   p_msg_level=>fnd_log.level_statement);
4698  END IF;
4699      -------------------------------------------
4700      ---*** Validating Automatch Set Id   ***---
4701      -------------------------------------------
4702  IF p_customer_profile_rec.automatch_set_id IS NOT NULL AND
4703     p_customer_profile_rec.automatch_set_id <> FND_API.G_MISS_NUM
4704         AND ( p_create_update_flag = 'C' OR
4705          ( p_create_update_flag = 'U'  AND
4706          p_customer_profile_rec.automatch_set_id <> NVL( l_automatch_set_id, FND_API.G_MISS_NUM ) ))
4707 
4708  THEN
4709      check_automatch_set_id_fk (
4710            p_column             => 'automatch_set_id',
4711            p_column_value       => p_customer_profile_rec.automatch_set_id,
4712            x_return_status      => x_return_status );
4713 
4714      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4715            hz_utility_v2pub.debug(p_message=>'automatch_set_id is foreign key to AR_CASH_AUTO_RULE_SETS. ' ||
4716                                              'x_return_status = ' || x_return_status,
4717                                   p_prefix =>l_debug_prefix,
4718                                   p_msg_level=>fnd_log.level_statement);
4719     END IF;
4720 
4721  END IF;
4722 
4723  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4724            hz_utility_v2pub.debug(p_message=>'(+) after validate automatch_set_id ... ' ||
4725             'x_return_status = ' || x_return_status,
4726                                   p_prefix =>l_debug_prefix,
4727                                   p_msg_level=>fnd_log.level_statement);
4728  END IF;
4729 
4730     -------------------------------------------------
4731     ------------*** Discount_grace_days **---------------
4732     -------------------------------------------------
4733 IF v_customer_profile_rec.discount_grace_days IS NOT NULL AND
4734    v_customer_profile_rec.discount_grace_days <> FND_API.G_MISS_NUM
4735         AND ( p_create_update_flag = 'C' OR
4736          ( p_create_update_flag = 'U'  AND
4737          p_customer_profile_rec.discount_grace_days <> NVL( l_discount_grace_days, FND_API.G_MISS_NUM ) ))
4738 THEN
4739     check_positive_value (
4740            p_column             => 'discount_grace_days',
4741            p_column_value       => v_customer_profile_rec.discount_grace_days,
4742            x_return_status      => x_return_status );
4743 
4744      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4745            hz_utility_v2pub.debug(p_message=>'discount_grace_days should be > 0.' ||'x_return_status = ' ||
4746                                  x_return_status,
4747                                   p_prefix =>l_debug_prefix,
4748                                   p_msg_level=>fnd_log.level_statement);
4749     END IF;
4750 
4751 END IF;
4752 
4753 IF p_create_update_flag = 'C' OR
4754    (p_create_update_flag = 'U' AND
4755    v_customer_profile_rec.profile_class_id IS NOT NULL AND
4756    v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM)
4757 THEN
4758 
4759    IF v_customer_profile_rec.discount_terms IS  NULL THEN
4760       v_customer_profile_rec.discount_terms :=
4761       l_profile_class_rec.discount_terms;
4762    END IF;
4763 
4764    IF v_customer_profile_rec.discount_grace_days IS NULL AND
4765       v_customer_profile_rec.discount_terms = 'Y'
4766    THEN
4767 
4768       v_customer_profile_rec.discount_grace_days :=
4769       l_profile_class_rec.discount_grace_days;
4770    END IF;
4771 END IF;
4772 
4773 IF p_create_update_flag = 'U' AND
4774    v_customer_profile_rec.profile_class_id  IS NULL THEN
4775    IF v_customer_profile_rec.discount_terms IS NULL
4776    THEN
4777       v_customer_profile_rec.discount_terms := l_discount_terms;
4778    END IF;
4779    IF v_customer_profile_rec.discount_grace_days IS NULL THEN
4780       v_customer_profile_rec.discount_grace_days := l_discount_grace_days;
4781    END IF;
4782 END IF;
4783 
4784 
4785  IF v_customer_profile_rec.discount_terms = 'N' OR
4786     v_customer_profile_rec.discount_terms is NULL
4787  THEN
4788       IF v_customer_profile_rec.discount_grace_days >= 0 AND
4789          v_customer_profile_rec.discount_grace_days <> FND_API.G_MISS_NUM
4790       THEN
4791             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4792             FND_MESSAGE.SET_TOKEN( 'COLUMN1', 'discount_terms' );
4793             FND_MESSAGE.SET_TOKEN( 'VALUE1', 'N' );
4794             FND_MESSAGE.SET_TOKEN( 'COLUMN2', 'discount_grace_days');
4795             FND_MESSAGE.SET_TOKEN( 'VALUE2', 'NULL' );
4796             FND_MSG_PUB.ADD;
4797             x_return_status := FND_API.G_RET_STS_ERROR;
4798 
4799             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4800                  hz_utility_v2pub.debug(p_message=>'discount_grace_days should be null when discount_terms is N.' ||
4801                                           'x_return_status = ' || x_return_status,
4802                                   p_prefix =>l_debug_prefix,
4803                                   p_msg_level=>fnd_log.level_statement);
4804             END IF;
4805 
4806       END IF;
4807  END IF;
4808 
4809  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4810            hz_utility_v2pub.debug(p_message=>'(+) after validate discount_terms ... ' ||
4811                         'x_return_status = ' || x_return_status,
4812                                   p_prefix =>l_debug_prefix,
4813                                   p_msg_level=>fnd_log.level_statement);
4814  END IF;
4815 
4816 
4817      -----------------------------------------------------------
4818      ------------*** dunning_letters ***------------------------
4819      ----------------------------------------------------------
4820 
4821 IF p_create_update_flag = 'C' OR
4822    (p_create_update_flag = 'U' AND
4823    v_customer_profile_rec.profile_class_id IS NOT NULL AND
4824    v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM)
4825 THEN
4826    IF v_customer_profile_rec.dunning_letters IS NULL THEN
4827       v_customer_profile_rec.dunning_letters :=
4828       l_profile_class_rec.dunning_letters;
4829    END IF;
4830    /* Bug Fix:2884220  Added "v_customer_profile_rec.dunning_letters='Y'" Condition
4831                        when initializing dunning_letter_set_id from hz_cust_profile_classes.
4832    */
4833    /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4834    IF v_customer_profile_rec.dunning_letters='Y' and
4835       v_customer_profile_rec.dunning_letter_set_id IS  NULL THEN
4836       v_customer_profile_rec.dunning_letter_set_id :=
4837       l_profile_class_rec.dunning_letter_set_id;
4838    END IF;*/
4839 END IF;
4840 
4841 IF p_create_update_flag = 'U' AND
4842    v_customer_profile_rec.profile_class_id IS NULL
4843 THEN
4844    IF v_customer_profile_rec.dunning_letters IS NULL THEN
4845       v_customer_profile_rec.dunning_letters := l_dunning_letters;
4846    END IF;
4847    /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4848    IF v_customer_profile_rec.dunning_letter_set_id IS NULL THEN
4849       v_customer_profile_rec.dunning_letter_set_id := l_dunning_letter_set_id;
4850    END IF; */
4851 END IF;
4852 
4853 /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4854  IF v_customer_profile_rec.dunning_letters = 'Y'
4855  THEN
4856      IF v_customer_profile_rec.dunning_letter_set_id = FND_API.G_MISS_NUM OR
4857         v_customer_profile_rec.dunning_letter_set_id IS NULL
4858      THEN
4859        FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4860        FND_MESSAGE.SET_TOKEN('COLUMN1', 'dunning_letters');
4861        FND_MESSAGE.SET_TOKEN('VALUE1', 'Y');
4862        FND_MESSAGE.SET_TOKEN('COLUMN2','dunning_letter_set_id');
4863        FND_MSG_PUB.ADD;
4864        x_return_status := FND_API.G_RET_STS_ERROR;
4865 
4866           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4867              hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id cannot be NULL when dunning_letters is Y.' ||
4868             'x_return_status = ' || x_return_status,
4869                                   p_prefix =>l_debug_prefix,
4870                                   p_msg_level=>fnd_log.level_statement);
4871           END IF;
4872 
4873        END IF;
4874  END IF;
4875 
4876  IF v_customer_profile_rec.dunning_letters = 'N' OR
4877     v_customer_profile_rec.dunning_letters IS NULL
4878  THEN
4879    IF v_customer_profile_rec.dunning_letter_set_id >= 0 AND
4880       v_customer_profile_rec.dunning_letter_set_id <> FND_API.G_MISS_NUM
4881    THEN
4882             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4883             FND_MESSAGE.SET_TOKEN('COLUMN1','dunning_letters');
4884             FND_MESSAGE.SET_TOKEN('VALUE1','N');
4885             FND_MESSAGE.SET_TOKEN('COLUMN2','dunning_letter_set_id');
4886             FND_MESSAGE.SET_TOKEN('VALUE2','NULL');
4887             FND_MSG_PUB.ADD;
4888             x_return_status := FND_API.G_RET_STS_ERROR;
4889 
4890             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4891                 hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id should be NULL when dunning_letters is N.' ||
4892                                         'x_return_status = ' || x_return_status,
4893                                   p_prefix =>l_debug_prefix,
4894                                   p_msg_level=>fnd_log.level_statement);
4895              END IF;
4896 
4897     END IF;
4898  END IF;*/
4899   IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4900            hz_utility_v2pub.debug(p_message=>'(+) after validate duning_letters ... ' ||
4901                                                 'x_return_status = ' || x_return_status,
4902                                   p_prefix =>l_debug_prefix,
4903                                   p_msg_level=>fnd_log.level_statement);
4904   END IF;
4905 
4906 
4907 ------------------------------------------------
4908 ---------*** send_statements ***----------------
4909 ------------------------------------------------
4910 
4911 IF p_create_update_flag = 'C' OR
4912    ( p_create_update_flag = 'U' AND
4913    v_customer_profile_rec.profile_class_id is not null AND
4914    v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM )
4915 THEN
4916 
4917    IF v_customer_profile_rec.send_statements IS  NULL   THEN
4918       v_customer_profile_rec.send_statements :=
4919       l_profile_class_rec.statements;
4920    END IF;
4921    /* Bug Fix:2884220  Added "v_customer_profile_rec.send_statements='Y'" Condition
4922                        when initializing statement_cycle_id from hz_cust_profile_classes.
4923    */
4924    IF v_customer_profile_rec.send_statements='Y' and
4925       v_customer_profile_rec.statement_cycle_id IS NULL THEN
4926       v_customer_profile_rec.statement_cycle_id :=
4927       l_profile_class_rec.statement_cycle_id;
4928    END IF;
4929    IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4930       v_customer_profile_rec.credit_balance_statements :=
4931       l_profile_class_rec.credit_balance_statements;
4932    END IF;
4933 
4934    --  Bug 5400422 : default from profile class
4935    IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
4936       v_customer_profile_rec.late_charge_calculation_trx :=
4937       l_profile_class_rec.late_charge_calculation_trx;
4938    END IF;
4939 
4940 END IF;
4941 
4942 IF p_create_update_flag = 'U' AND
4943    v_customer_profile_rec.profile_class_id is null
4944 THEN
4945    IF v_customer_profile_rec.send_statements IS NULL   THEN
4946       v_customer_profile_rec.send_statements := l_send_statements;
4947    END IF;
4948    IF v_customer_profile_rec.statement_cycle_id IS NULL THEN
4949       v_customer_profile_rec.statement_cycle_id := l_statement_cycle_id;
4950    END IF;
4951    IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4952       v_customer_profile_rec.credit_balance_statements := l_credit_balance_statements;
4953    END IF;
4954 END IF;
4955 
4956 IF v_customer_profile_rec.send_statements = 'Y' THEN
4957       IF v_customer_profile_rec.statement_cycle_id = FND_API.G_MISS_NUM OR
4958          v_customer_profile_rec.statement_cycle_id IS NULL
4959       THEN
4960             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4961             FND_MESSAGE.SET_TOKEN( 'COLUMN1','send_statements');
4962             FND_MESSAGE.SET_TOKEN( 'VALUE1','Y');
4963             FND_MESSAGE.SET_TOKEN( 'COLUMN2','statement_cycle_id');
4964             FND_MSG_PUB.ADD;
4965             x_return_status := FND_API.G_RET_STS_ERROR;
4966 
4967             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4968                    hz_utility_v2pub.debug(p_message=>'statement_cycle_id cannot be NULL when send_statements
4969                                                  is Y.' || 'x_return_status = ' || x_return_status,
4970                                   p_prefix =>l_debug_prefix,
4971                                   p_msg_level=>fnd_log.level_statement);
4972              END IF;
4973 
4974        END IF;
4975        IF  v_customer_profile_rec.credit_balance_statements IS NULL THEN
4976             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4977             FND_MESSAGE.SET_TOKEN( 'COLUMN1','send_statements');
4978             FND_MESSAGE.SET_TOKEN( 'VALUE1','Y');
4979             FND_MESSAGE.SET_TOKEN( 'COLUMN2','credit_balance_statements');
4980             FND_MSG_PUB.ADD;
4981             x_return_status := FND_API.G_RET_STS_ERROR;
4982 
4983             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4984                  hz_utility_v2pub.debug(p_message=>'credit_balance_statements cannot be NULL when
4985                                            send_statements is Y .' || 'x_return_status = ' ||
4986                                            x_return_status,
4987                                   p_prefix =>l_debug_prefix,
4988                                   p_msg_level=>fnd_log.level_statement);
4989             END IF;
4990 
4991         END IF;
4992 END IF;
4993 
4994 IF v_customer_profile_rec.send_statements = 'N' OR
4995       v_customer_profile_rec.send_statements IS NULL
4996 THEN
4997         IF v_customer_profile_rec.statement_cycle_id >= 0 AND
4998            v_customer_profile_rec.statement_cycle_id <> FND_API.G_MISS_NUM
4999         THEN
5000             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5001             FND_MESSAGE.SET_TOKEN('COLUMN1', 'send_statements');
5002             FND_MESSAGE.SET_TOKEN('VALUE1', 'N');
5003             FND_MESSAGE.SET_TOKEN('COLUMN2','statement_cycle_id');
5004             FND_MESSAGE.SET_TOKEN('VALUE2', 'NULL');
5005             FND_MSG_PUB.ADD;
5006             x_return_status := FND_API.G_RET_STS_ERROR;
5007 
5008             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5009                    hz_utility_v2pub.debug(p_message=>'statement_cycle_id should be NULL when send_statements
5010                                                          is N .' || 'x_return_status = ' || x_return_status,
5011                                   p_prefix =>l_debug_prefix,
5012                                   p_msg_level=>fnd_log.level_statement);
5013             END IF;
5014 
5015         END IF;
5016         IF v_customer_profile_rec.credit_balance_statements <> 'N' AND
5017            v_customer_profile_rec.credit_balance_statements IS NOT NULL
5018         THEN
5019             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5020             FND_MESSAGE.SET_TOKEN('COLUMN1','send_statements');
5021             FND_MESSAGE.SET_TOKEN('VALUE1','N');
5022             FND_MESSAGE.SET_TOKEN('COLUMN2','credit_balance_statements');
5023             FND_MESSAGE.SET_TOKEN('VALUE2','N');
5024             FND_MSG_PUB.ADD;
5025             x_return_status := FND_API.G_RET_STS_ERROR;
5026 
5027             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5028                  hz_utility_v2pub.debug(p_message=>'credit_balance_statements should be N when send_statements
5029                                               is N .' || 'x_return_status = ' || x_return_status,
5030                                   p_prefix =>l_debug_prefix,
5031                                   p_msg_level=>fnd_log.level_statement);
5032             END IF;
5033 
5034         END IF;
5035 END IF;
5036 
5037     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5038            hz_utility_v2pub.debug(p_message=>'(+) after validate send_statements ... ' ||
5039                                  'x_return_status = ' || x_return_status,
5040                                   p_prefix =>l_debug_prefix,
5041                                   p_msg_level=>fnd_log.level_statement);
5042     END IF;
5043 
5044 
5045 
5046     --------------------------------------------------
5047     ------------*** interest_charges ***--------------
5048     --------------------------------------------------
5049 
5050 IF p_create_update_flag = 'C' OR
5051    ( p_create_update_flag = 'U' AND
5052      v_customer_profile_rec.profile_class_id is not null AND
5053      v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM )
5054 THEN
5055 
5056    IF v_customer_profile_rec.interest_charges  IS NULL   THEN
5057       v_customer_profile_rec.interest_charges :=
5058       l_profile_class_rec.interest_charges;
5059    END IF;
5060    /* Bug Fix:2884220  Added "v_customer_profile_rec.interest_charges='Y'" Condition
5061                        when initializing interest_period_days from hz_cust_profile_classes.
5062    */
5063    IF v_customer_profile_rec.interest_charges='Y' and
5064        v_customer_profile_rec.interest_period_days IS NULL THEN
5065       v_customer_profile_rec.interest_period_days :=
5066       l_profile_class_rec.interest_period_days;
5067    END IF;
5068    IF v_customer_profile_rec.charge_on_finance_charge_flag IS  NULL THEN
5069       v_customer_profile_rec.charge_on_finance_charge_flag :=
5070       l_profile_class_rec.charge_on_finance_charge_flag;
5071    END IF;
5072 
5073    --  Bug 5400422 : Defalut from profile classes
5074    IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
5075       v_customer_profile_rec.late_charge_calculation_trx :=
5076       l_profile_class_rec.late_charge_calculation_trx;
5077    END IF;
5078 
5079 END IF;
5080 
5081 IF p_create_update_flag = 'U' AND
5082    v_customer_profile_rec.profile_class_id is null
5083 THEN
5084    IF v_customer_profile_rec.interest_charges  IS NULL  THEN
5085       v_customer_profile_rec.interest_charges := l_interest_charges;
5086    END IF;
5087    IF v_customer_profile_rec.interest_period_days IS NULL THEN
5088       v_customer_profile_rec.interest_period_days := l_interest_period_days;
5089    END IF;
5090    IF v_customer_profile_rec.charge_on_finance_charge_flag IS NULL THEN
5091       v_customer_profile_rec.charge_on_finance_charge_flag :=
5092       l_finance_charge_flag;
5093    END IF;
5094    --  Bug 5400422 : Defalut from existing record
5095    IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
5096       v_customer_profile_rec.late_charge_calculation_trx :=
5097       l_late_charge_calculation_trx;
5098    END IF;
5099 
5100 END IF;
5101 
5102 IF v_customer_profile_rec.interest_charges = 'Y' THEN
5103 --  Bug 5400422 : Validate only for few late_charge_calculation_trx
5104   IF v_customer_profile_rec.late_charge_calculation_trx IN
5105      ('LATE', 'OVERDUE_LATE', 'OVERDUE') THEN
5106       IF v_customer_profile_rec.interest_period_days = FND_API.G_MISS_NUM OR
5107          v_customer_profile_rec.interest_period_days IS  NULL
5108       THEN
5109             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_INT_CHARGES_Y' );
5110             FND_MSG_PUB.ADD;
5111             x_return_status := FND_API.G_RET_STS_ERROR;
5112          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5113              hz_utility_v2pub.debug(p_message=>'interest_period_days cannot be NULL when interest_charges is Y.' || 'x_return_status = ' || x_return_status,
5114                                   p_prefix =>l_debug_prefix,
5115                                   p_msg_level=>fnd_log.level_statement);
5116          END IF;
5117 
5118        END IF;
5119   END IF;
5120     /* Commented the mandatory check for 2125994.
5121         validate_mandatory (
5122             p_create_update_flag     => p_create_update_flag,
5123             p_column                 => 'charge_on_finance_charge_flag',
5124             p_column_value           => v_customer_profile_rec.charge_on_finance_charge_flag,
5125             x_return_status          => x_return_status );
5126 
5127 
5128         IF G_DEBUG THEN
5129             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5130                 'charge_on_finance_charge_flag is mandatory. ' ||
5131                 'x_return_status = ' || x_return_status, l_debug_prefix );
5132         END IF;
5133     */
5134 END IF;
5135 /*
5136 -- This validation is removed for based on bug # 5190290
5137 -- Confirmed from AR team that, by removing this validation, there is no
5138 -- impact on AR setup forms and there is no impact on AR late charges calculation.
5139 IF v_customer_profile_rec.interest_charges = 'N' OR
5140    v_customer_profile_rec.interest_charges IS NULL
5141 THEN
5142        IF v_customer_profile_rec.interest_period_days >= 0 AND
5143           v_customer_profile_rec.interest_period_days <> FND_API.G_MISS_NUM
5144        THEN
5145             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5146             FND_MESSAGE.SET_TOKEN( 'COLUMN1','interest_charges');
5147             FND_MESSAGE.SET_TOKEN( 'VALUE1','N');
5148             FND_MESSAGE.SET_TOKEN( 'COLUMN2','interest_period_days');
5149             FND_MESSAGE.SET_TOKEN( 'VALUE2','NULL');
5150             FND_MSG_PUB.ADD;
5151             x_return_status := FND_API.G_RET_STS_ERROR;
5152 
5153             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5154                 hz_utility_v2pub.debug(p_message=>'Interest_period_days should be NULL when interest_charges
5155                                                    is N .' || 'x_return_status = ' || x_return_status,
5156                                   p_prefix =>l_debug_prefix,
5157                                   p_msg_level=>fnd_log.level_statement);
5158             END IF;
5159 
5160         END IF;
5161         IF v_customer_profile_rec.charge_on_finance_charge_flag  = 'Y'
5162         THEN
5163             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5164             FND_MESSAGE.SET_TOKEN( 'COLUMN1','interest_charges');
5165             FND_MESSAGE.SET_TOKEN( 'VALUE1','N');
5166             FND_MESSAGE.SET_TOKEN( 'COLUMN2','charge_on_finance_charge_flag');
5167             FND_MESSAGE.SET_TOKEN( 'VALUE2','N');
5168             FND_MSG_PUB.ADD;
5169             x_return_status := FND_API.G_RET_STS_ERROR;
5170 
5171             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5172                    hz_utility_v2pub.debug(p_message=>'charge_on_finance_charge_flag cannot be Y when
5173                                       interest_charges is N .' || 'x_return_status ='
5174                                       || x_return_status,
5175                                   p_prefix =>l_debug_prefix,
5176                                   p_msg_level=>fnd_log.level_statement);
5177             END IF;
5178 
5179         END IF;
5180 END IF;
5181 */
5182        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5183            hz_utility_v2pub.debug(p_message=>'(+) after validate interest_charges ... ' ||
5184                                           'x_return_status = ' || x_return_status,
5185                                   p_prefix =>l_debug_prefix,
5186                                   p_msg_level=>fnd_log.level_statement);
5187        END IF;
5188 
5189 -----------------------------------------------------------------------
5190 --                          Credit_classification
5191 -----------------------------------------------------------------------
5192 -- Validate lookup_code of the CREDIT_CLASSIFICATION
5193     IF p_customer_profile_rec.credit_classification IS NOT NULL AND
5194        p_customer_profile_rec.credit_classification <> FND_API.G_MISS_CHAR AND
5195        ( p_create_update_flag = 'C' OR
5196          ( p_create_update_flag = 'U'  AND
5197            p_customer_profile_rec.credit_classification <> NVL( l_credit_classification, FND_API.G_MISS_CHAR ) ) )
5198     THEN
5199         validate_lookup (
5200             p_column                                => 'credit_classification',
5201             p_lookup_table                          => 'AR_LOOKUPS',
5202             p_lookup_type                           => 'AR_CMGT_CREDIT_CLASSIFICATION',
5203             p_column_value                          => p_customer_profile_rec.credit_classification,
5204             x_return_status                         => x_return_status );
5205 
5206         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5207            hz_utility_v2pub.debug(p_message=>'credit_classification is lookup code in lookup type AR_CMGT_CREDIT_CLASSIFICATION in ar_lookups. ' ||
5208                      'x_return_status = ' || x_return_status,
5209                                   p_prefix =>l_debug_prefix,
5210                                   p_msg_level=>fnd_log.level_statement);
5211         END IF;
5212 
5213 
5214     END IF;
5215 
5216 
5217     -- Debug info.
5218 
5219     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5220         hz_utility_v2pub.debug(p_message=>'validate_customer_profile (-)',
5221                                p_prefix=>l_debug_prefix,
5222                                p_msg_level=>fnd_log.level_procedure);
5223     END IF;
5224 
5225 
5226     ----------------------------------------------
5227     -- validate LATE_CHARGE_CALCULATION_TRX
5228     ----------------------------------------------
5229 
5230     -- LATE_CHARGE_CALCULATION_TRX is lookup code in lookup type AR_MANDATORY_LATE_CHARGES
5231     IF p_customer_profile_rec.late_charge_calculation_trx IS NOT NULL AND
5232        p_customer_profile_rec.late_charge_calculation_trx <> FND_API.G_MISS_CHAR AND
5233         ( p_create_update_flag = 'C' OR
5234           ( p_create_update_flag = 'U'  AND
5235             p_customer_profile_rec.late_charge_calculation_trx <> NVL( l_late_charge_calculation_trx, FND_API.G_MISS_CHAR ) ) )
5236     THEN
5237         validate_lookup (
5238             p_column                                => 'late_charge_calculation_trx',
5239             p_lookup_type                           => 'AR_MANDATORY_LATE_CHARGES',
5240             p_column_value                          => p_customer_profile_rec.late_charge_calculation_trx,
5241             x_return_status                         => x_return_status );
5242 
5243         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5244            hz_utility_v2pub.debug(p_message=>'late_charge_calculation_trx is lookup code in lookup type AR_MANDATORY_LATE_CHARGES. ' ||
5245                 'x_return_status = ' || x_return_status,
5246                                   p_prefix =>l_debug_prefix,
5247                                   p_msg_level=>fnd_log.level_statement);
5248         END IF;
5249 
5250     END IF;
5251 
5252     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5253            hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_calculation_trx ... ' ||
5254             'x_return_status = ' || x_return_status,
5255                                   p_prefix =>l_debug_prefix,
5256                                   p_msg_level=>fnd_log.level_statement);
5257     END IF;
5258 
5259     ----------------------------------------------
5260     -- validate CREDIT_ITEMS_FLAG
5261     ----------------------------------------------
5262 
5263     -- CREDIT_ITEMS_FLAG is lookup code in lookup type YES/NO
5264     IF p_customer_profile_rec.credit_items_flag IS NOT NULL AND
5265        p_customer_profile_rec.credit_items_flag <> FND_API.G_MISS_CHAR
5266        AND ( p_create_update_flag = 'C' OR
5267          ( p_create_update_flag = 'U'  AND
5268            p_customer_profile_rec.credit_items_flag <> NVL( l_credit_items_flag, FND_API.G_MISS_CHAR ) ) )
5269     THEN
5270         validate_lookup (
5271             p_column                                => 'credit_items_flag',
5272             p_lookup_type                           => 'YES/NO',
5273             p_column_value                          => p_customer_profile_rec.credit_items_flag,
5274             x_return_status                         => x_return_status );
5275 
5276 
5277         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5278            hz_utility_v2pub.debug(p_message=>'credit_items_flag is lookup code in lookup type YES/NO. ' ||
5279                            'x_return_status = ' || x_return_status,
5280                                   p_prefix =>l_debug_prefix,
5281                                   p_msg_level=>fnd_log.level_statement);
5282         END IF;
5283 
5284     END IF;
5285 
5286     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5287            hz_utility_v2pub.debug(p_message=>'(+) after validate credit_items_flag ... ' ||
5288             'x_return_status = ' || x_return_status,
5289                                   p_prefix =>l_debug_prefix,
5290                                   p_msg_level=>fnd_log.level_statement);
5291     END IF;
5292 
5293     ----------------------------------------------
5294     -- validate DISPUTED_TRANSACTIONS_FLAG
5295     ----------------------------------------------
5296 
5297     -- DISPUTED_TRANSACTIONS_FLAG is lookup code in lookup type YES/NO
5298     IF p_customer_profile_rec.disputed_transactions_flag IS NOT NULL AND
5299        p_customer_profile_rec.disputed_transactions_flag <> FND_API.G_MISS_CHAR
5300        AND ( p_create_update_flag = 'C' OR
5301          ( p_create_update_flag = 'U'  AND
5302            p_customer_profile_rec.disputed_transactions_flag <> NVL( l_disputed_transactions_flag, FND_API.G_MISS_CHAR ) ) )
5303     THEN
5304         validate_lookup (
5305             p_column                                => 'disputed_transactions_flag',
5306             p_lookup_type                           => 'YES/NO',
5307             p_column_value                          => p_customer_profile_rec.disputed_transactions_flag,
5308             x_return_status                         => x_return_status );
5309 
5310 
5311         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5312            hz_utility_v2pub.debug(p_message=>'disputed_transactions_flag is lookup code in lookup type YES/NO. ' ||
5313                            'x_return_status = ' || x_return_status,
5314                                   p_prefix =>l_debug_prefix,
5315                                   p_msg_level=>fnd_log.level_statement);
5316         END IF;
5317 
5318     END IF;
5319 
5320     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5321            hz_utility_v2pub.debug(p_message=>'(+) after validate disputed_transactions_flag ... ' ||
5322             'x_return_status = ' || x_return_status,
5323                                   p_prefix =>l_debug_prefix,
5324                                   p_msg_level=>fnd_log.level_statement);
5325     END IF;
5326 
5327     ----------------------------------------------
5328     -- validate LATE_CHARGE_TYPE
5329     ----------------------------------------------
5330 
5331     -- LATE_CHARGE_TYPE is lookup code in lookup type AR_LATE_CHARGE_TYPE
5332     IF p_customer_profile_rec.late_charge_type IS NOT NULL AND
5333        p_customer_profile_rec.late_charge_type <> FND_API.G_MISS_CHAR AND
5334         ( p_create_update_flag = 'C' OR
5335           ( p_create_update_flag = 'U'  AND
5336             p_customer_profile_rec.late_charge_type <> NVL( l_late_charge_type, FND_API.G_MISS_CHAR ) ) )
5337     THEN
5338         validate_lookup (
5339             p_column                                => 'late_charge_type',
5340             p_lookup_type                           => 'AR_LATE_CHARGE_TYPE',
5341             p_column_value                          => p_customer_profile_rec.late_charge_type,
5342             x_return_status                         => x_return_status );
5343 
5344         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5345            hz_utility_v2pub.debug(p_message=>'late_charge_type is lookup code in lookup type AR_LATE_CHARGE_TYPE. ' ||
5346                 'x_return_status = ' || x_return_status,
5347                                   p_prefix =>l_debug_prefix,
5348                                   p_msg_level=>fnd_log.level_statement);
5349         END IF;
5350 
5351     END IF;
5352 
5353     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5354            hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_type ... ' ||
5355             'x_return_status = ' || x_return_status,
5356                                   p_prefix =>l_debug_prefix,
5357                                   p_msg_level=>fnd_log.level_statement);
5358     END IF;
5359 
5360     ----------------------------------------------
5361     -- validate INTEREST_CALCULATION_PERIOD
5362     ----------------------------------------------
5363 
5364     -- INTEREST_CALCULATION_PERIOD is lookup code in lookup type AR_CALCULATION_PERIOD
5365     IF p_customer_profile_rec.interest_calculation_period IS NOT NULL AND
5366        p_customer_profile_rec.interest_calculation_period <> FND_API.G_MISS_CHAR AND
5367         ( p_create_update_flag = 'C' OR
5368           ( p_create_update_flag = 'U'  AND
5369             p_customer_profile_rec.interest_calculation_period <> NVL( l_interest_calculation_period, FND_API.G_MISS_CHAR ) ) )
5370     THEN
5371         validate_lookup (
5372             p_column                                => 'interest_calculation_period',
5373             p_lookup_type                           => 'AR_CALCULATION_PERIOD',
5374             p_column_value                          => p_customer_profile_rec.interest_calculation_period,
5375             x_return_status                         => x_return_status );
5376 
5377         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5378            hz_utility_v2pub.debug(p_message=>'interest_calculation_period is lookup code in lookup type AR_CALCULATION_PERIOD. ' ||
5379                 'x_return_status = ' || x_return_status,
5380                                   p_prefix =>l_debug_prefix,
5381                                   p_msg_level=>fnd_log.level_statement);
5382         END IF;
5383 
5384     END IF;
5385 
5386     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5387            hz_utility_v2pub.debug(p_message=>'(+) after validate interest_calculation_period ... ' ||
5388             'x_return_status = ' || x_return_status,
5389                                   p_prefix =>l_debug_prefix,
5390                                   p_msg_level=>fnd_log.level_statement);
5391     END IF;
5392 
5393     ----------------------------------------------
5394     -- validate HOLD_CHARGED_INVOICES_FLAG
5395     ----------------------------------------------
5396 
5397     -- HOLD_CHARGED_INVOICES_FLAG is lookup code in lookup type YES/NO
5398     IF p_customer_profile_rec.hold_charged_invoices_flag IS NOT NULL AND
5399        p_customer_profile_rec.hold_charged_invoices_flag <> FND_API.G_MISS_CHAR
5400        AND ( p_create_update_flag = 'C' OR
5401          ( p_create_update_flag = 'U'  AND
5402            p_customer_profile_rec.hold_charged_invoices_flag <> NVL( l_hold_charged_invoices_flag, FND_API.G_MISS_CHAR ) ) )
5403     THEN
5404         validate_lookup (
5405             p_column                                => 'hold_charged_invoices_flag',
5406             p_lookup_type                           => 'YES/NO',
5407             p_column_value                          => p_customer_profile_rec.hold_charged_invoices_flag,
5408             x_return_status                         => x_return_status );
5409 
5410 
5411         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5412            hz_utility_v2pub.debug(p_message=>'hold_charged_invoices_flag is lookup code in lookup type YES/NO. ' ||
5413                            'x_return_status = ' || x_return_status,
5414                                   p_prefix =>l_debug_prefix,
5415                                   p_msg_level=>fnd_log.level_statement);
5416         END IF;
5417 
5418     END IF;
5419 
5420     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5421            hz_utility_v2pub.debug(p_message=>'(+) after validate hold_charged_invoices_flag ... ' ||
5422             'x_return_status = ' || x_return_status,
5423                                   p_prefix =>l_debug_prefix,
5424                                   p_msg_level=>fnd_log.level_statement);
5425     END IF;
5426 
5427     ----------------------------------------------
5428     -- validate MULTIPLE_INTEREST_RATES_FLAG
5429     ----------------------------------------------
5430 
5431     -- MULTIPLE_INTEREST_RATES_FLAG is lookup code in lookup type YES/NO
5432     IF p_customer_profile_rec.multiple_interest_rates_flag IS NOT NULL AND
5433        p_customer_profile_rec.multiple_interest_rates_flag <> FND_API.G_MISS_CHAR
5434        AND ( p_create_update_flag = 'C' OR
5435          ( p_create_update_flag = 'U'  AND
5436            p_customer_profile_rec.multiple_interest_rates_flag <> NVL( l_multiple_interest_rates_flag, FND_API.G_MISS_CHAR ) ) )
5437     THEN
5438         validate_lookup (
5439             p_column                                => 'multiple_interest_rates_flag',
5440             p_lookup_type                           => 'YES/NO',
5441             p_column_value                          => p_customer_profile_rec.multiple_interest_rates_flag,
5442             x_return_status                         => x_return_status );
5443 
5444 
5445         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5446            hz_utility_v2pub.debug(p_message=>'multiple_interest_rates_flag is lookup code in lookup type YES/NO. ' ||
5447                            'x_return_status = ' || x_return_status,
5448                                   p_prefix =>l_debug_prefix,
5449                                   p_msg_level=>fnd_log.level_statement);
5450         END IF;
5451 
5452     END IF;
5453 
5454     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5455            hz_utility_v2pub.debug(p_message=>'(+) after validate multiple_interest_rates_flag ... ' ||
5456             'x_return_status = ' || x_return_status,
5457                                   p_prefix =>l_debug_prefix,
5458                                   p_msg_level=>fnd_log.level_statement);
5459     END IF;
5460 
5461     ------------------------------------
5462     -- validate late_charge_term_id
5463     ------------------------------------
5464         -- 1. late_charge_term_id should be a valid value defined in RA_TERMS
5465         -- 2. Late charge payment term is required when late charge type is debit memo or interest invoice
5466 
5467         IF (((p_customer_profile_rec.late_charge_term_id IS NULL OR p_customer_profile_rec.late_charge_term_id = FND_API.G_MISS_NUM) AND
5468              (p_customer_profile_rec.late_charge_type = 'DM' OR
5469               p_customer_profile_rec.late_charge_type = 'INV')) OR
5470             ((p_customer_profile_rec.late_charge_type = 'ADJ') AND
5471              (p_customer_profile_rec.late_charge_term_id IS NOT NULL AND p_customer_profile_rec.late_charge_term_id <> FND_API.G_MISS_NUM))) THEN
5472                 -- Late charge payment term is required when
5473                 -- late charge type is debit memo or interest invoice
5474                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_LC_PAY_TERM' );
5475                 FND_MSG_PUB.ADD;
5476                 x_return_status := FND_API.G_RET_STS_ERROR;
5477         END IF;
5478 
5479         IF p_customer_profile_rec.late_charge_term_id is NOT NULL AND
5480            p_customer_profile_rec.late_charge_term_id <> FND_API.G_MISS_NUM
5481           AND ( p_create_update_flag = 'C' OR
5482            ( p_create_update_flag = 'U'  AND
5483             p_customer_profile_rec.late_charge_term_id <> NVL( l_late_charge_term_id, FND_API.G_MISS_NUM ) ) )
5484         THEN
5485             check_late_charge_term_id_fk(
5486                     p_column                                => 'payment_term_id',
5487                     p_column_value                          => p_customer_profile_rec.late_charge_term_id,
5488                     p_cons_inv_flag                         => p_customer_profile_rec.cons_inv_flag,
5489                     x_return_status                         => x_return_status );
5490 
5491             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5492                 hz_utility_v2pub.debug(p_message=>'late_charge_term_id should be a valid value defined in  RA_TERMS. '||
5493                   'x_return_status = ' || x_return_status,
5494                                   p_prefix =>l_debug_prefix,
5495                                   p_msg_level=>fnd_log.level_statement);
5496             END IF;
5497 
5498         END IF;
5499 
5500             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5501                    hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_term_id..' ||
5502                                                  'x_return_status = ' || x_return_status,
5503                                   p_prefix =>l_debug_prefix,
5504                                   p_msg_level=>fnd_log.level_statement);
5505             END IF;
5506 
5507     ------------------------------------
5508     -- validate message_text_id
5509     ------------------------------------
5510         -- 1. message_text_id should be a valid value defined in AR_STANDARD_TEXT
5511         -- 2. Message text can be entered only when late charge type is debit memo or interest invoice
5512 
5513         IF ((p_customer_profile_rec.late_charge_type = 'ADJ') AND
5514             (p_customer_profile_rec.message_text_id IS NOT NULL AND p_customer_profile_rec.message_text_id <> FND_API.G_MISS_NUM)) THEN
5515              -- Message text can be entered only when
5516              -- late charge type is debit memo or interest invoice
5517              FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_MSG_FOR_LC_TYPE' );
5518              FND_MSG_PUB.ADD;
5519              x_return_status := FND_API.G_RET_STS_ERROR;
5520         END IF;
5521 
5522         IF p_customer_profile_rec.message_text_id is NOT NULL AND
5523            p_customer_profile_rec.message_text_id <> FND_API.G_MISS_NUM
5524           AND ( p_create_update_flag = 'C' OR
5525            ( p_create_update_flag = 'U'  AND
5526             p_customer_profile_rec.message_text_id <> NVL( l_message_text_id, FND_API.G_MISS_NUM ) ) )
5527         THEN
5528 
5529             check_message_text_id_fk(
5530                     p_column                                => 'message_text_id',
5531                     p_column_value                          => p_customer_profile_rec.message_text_id,
5532                     x_return_status                         => x_return_status );
5533 
5534             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5535                 hz_utility_v2pub.debug(p_message=>'message_text_id should be a valid value defined in AR_STANDARD_TEXT. '||
5536                   'x_return_status = ' || x_return_status,
5537                                   p_prefix =>l_debug_prefix,
5538                                   p_msg_level=>fnd_log.level_statement);
5539             END IF;
5540 
5541         END IF;
5542 
5543         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5544                hz_utility_v2pub.debug(p_message=>'(+) after validate message_text_id..' ||
5545                                              'x_return_status = ' || x_return_status,
5546                               p_prefix =>l_debug_prefix,
5547                               p_msg_level=>fnd_log.level_statement);
5548         END IF;
5549 
5550     -- Check if API is called in debug mode. If yes, disable debug.
5551     --disable_debug;
5552 
5553 END validate_customer_profile;
5554 
5555 /**
5556  * PROCEDURE validate_cust_profile_amt
5557  *
5558  * DESCRIPTION
5559  *     Validates customer profile amount record. Checks for
5560  *         uniqueness
5561  *         lookup types
5562  *         mandatory columns
5563  *         non-updateable fields
5564  *         foreign key validations
5565  *         other validations
5566  *
5567  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
5568  *
5569  * ARGUMENTS
5570  *   IN:
5571  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
5572  *     p_check_foreign_key            If do foreign key checking on cust_account_id
5573  *                                    and cust_account_profile_id or not.
5574  *     p_cust_profile_amt_rec         Customer profile amount record.
5575  *     p_rowid                        Rowid of the record (used only in update mode).
5576  *   IN/OUT:
5577  *     x_return_status                Return status after the call. The status can
5578  *                                    be FND_API.G_RET_STS_SUCCESS (success),
5579  *                                    FND_API.G_RET_STS_ERROR (error),
5580  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
5581  *
5582  * NOTES
5583  *
5584  * MODIFICATION HISTORY
5585  *
5586  *   07-23-2001    Jianying Huang      o Created.
5587  *   11-08-2001    P.Suresh            * Bug Fix : 2001573. Validated overall_credit_limit.
5588  *                                       It should be greater or equal to trx_credit_limit.
5589  *
5590  */
5591 
5592 PROCEDURE validate_cust_profile_amt (
5593     p_create_update_flag                    IN     VARCHAR2,
5594     p_check_foreign_key                     IN     VARCHAR2,
5595     p_cust_profile_amt_rec                  IN     HZ_CUSTOMER_PROFILE_V2PUB.CUST_PROFILE_AMT_REC_TYPE,
5596     p_rowid                                 IN     ROWID,
5597     x_return_status                         IN OUT NOCOPY VARCHAR2
5598 ) IS
5599 
5600     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_profile_amt'
5601 
5602     l_dummy                                 VARCHAR2(1);
5603 
5604     l_cust_account_id                       NUMBER;
5605     l_site_use_id                           NUMBER;
5606     l_cust_account_profile_id               NUMBER;
5607     l_currency_code                         HZ_CUST_PROFILE_AMTS.currency_code%TYPE;
5608     l_created_by_module                     HZ_CUST_PROFILE_AMTS.created_by_module%TYPE;
5609     l_application_id                        NUMBER;
5610     l_overall_credit_limit                  HZ_CUST_PROFILE_AMTS.OVERALL_CREDIT_LIMIT%TYPE;
5611     l_trx_credit_limit                      HZ_CUST_PROFILE_AMTS.TRX_CREDIT_LIMIT%TYPE;
5612     --  Bug 4770111 : Added for CBM of customer profile
5613     l_prof_cbm HZ_CUST_PROFILE_AMTS.created_by_module%TYPE := 'TCA_V2_API';
5614 
5615     -- Added following variables for late charge policy project.
5616     v_cust_profile_amt_rec            HZ_CUSTOMER_PROFILE_V2PUB.CUST_PROFILE_AMT_REC_TYPE;
5617     l_min_fc_invoice_overdue_type     HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_OVERDUE_TYPE%TYPE;
5618     l_min_fc_balance_overdue_type     HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_OVERDUE_TYPE%TYPE;
5619     l_interest_type                   HZ_CUST_PROFILE_AMTS.INTEREST_TYPE%TYPE;
5620     l_penalty_type                    HZ_CUST_PROFILE_AMTS.PENALTY_TYPE%TYPE;
5621     l_exchange_rate_type              HZ_CUST_PROFILE_AMTS.EXCHANGE_RATE_TYPE%TYPE;
5622     l_min_fc_invoice_amount           HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_AMOUNT%TYPE;
5623     l_min_fc_invoice_percent          HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_PERCENT%TYPE;
5624     l_min_fc_balance_amount           HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_AMOUNT%TYPE;
5625     l_min_fc_balance_percent          HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_PERCENT%TYPE;
5626     l_interest_rate                   HZ_CUST_PROFILE_AMTS.INTEREST_RATE%TYPE;
5627     l_interest_fixed_amount           HZ_CUST_PROFILE_AMTS.INTEREST_FIXED_AMOUNT%TYPE;
5628     l_interest_schedule_id            HZ_CUST_PROFILE_AMTS.INTEREST_SCHEDULE_ID%TYPE;
5629     l_penalty_rate                    HZ_CUST_PROFILE_AMTS.PENALTY_RATE%TYPE;
5630     l_penalty_fixed_amount            HZ_CUST_PROFILE_AMTS.PENALTY_FIXED_AMOUNT%TYPE;
5631     l_penalty_schedule_id             HZ_CUST_PROFILE_AMTS.PENALTY_SCHEDULE_ID%TYPE;
5632 
5633 BEGIN
5634 
5635     -- Check if API is called in debug mode. If yes, enable debug.
5636     --enable_debug;
5637 
5638     -- Debug info.
5639 
5640     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5641         hz_utility_v2pub.debug(p_message=>'validate_cust_profile_amt (+)',
5642                                p_prefix=>l_debug_prefix,
5643                                p_msg_level=>fnd_log.level_procedure);
5644     END IF;
5645 
5646     v_cust_profile_amt_rec := p_cust_profile_amt_rec;
5647 
5648     -- Select fields for later use during update.
5649     IF p_create_update_flag = 'U' THEN
5650         SELECT CUST_ACCOUNT_ID, SITE_USE_ID,
5651                CUST_ACCOUNT_PROFILE_ID, CURRENCY_CODE,
5652                CREATED_BY_MODULE, APPLICATION_ID,
5653                OVERALL_CREDIT_LIMIT,TRX_CREDIT_LIMIT,
5654                MIN_FC_INVOICE_OVERDUE_TYPE, MIN_FC_BALANCE_OVERDUE_TYPE,
5655                INTEREST_TYPE, PENALTY_TYPE, EXCHANGE_RATE_TYPE,
5656                MIN_FC_INVOICE_AMOUNT, MIN_FC_INVOICE_PERCENT,
5657                MIN_FC_BALANCE_AMOUNT, MIN_FC_BALANCE_PERCENT,
5658                INTEREST_RATE, INTEREST_FIXED_AMOUNT, INTEREST_SCHEDULE_ID,
5659                PENALTY_RATE, PENALTY_FIXED_AMOUNT, PENALTY_SCHEDULE_ID
5660         INTO l_cust_account_id, l_site_use_id,
5661              l_cust_account_profile_id, l_currency_code,
5662              l_created_by_module, l_application_id,
5663              l_overall_credit_limit,l_trx_credit_limit,
5664              l_min_fc_invoice_overdue_type, l_min_fc_balance_overdue_type,
5665              l_interest_type, l_penalty_type, l_exchange_rate_type,
5666              l_min_fc_invoice_amount, l_min_fc_invoice_percent,
5667              l_min_fc_balance_amount, l_min_fc_balance_percent,
5668              l_interest_rate, l_interest_fixed_amount, l_interest_schedule_id,
5669              l_penalty_rate, l_penalty_fixed_amount, l_penalty_schedule_id
5670         FROM HZ_CUST_PROFILE_AMTS
5671         WHERE ROWID = p_rowid;
5672     END IF;
5673 
5674     --------------------------------------
5675     -- validate cust_acct_profile_amt_id
5676     --------------------------------------
5677 /****Logical APIs - validation not required****/
5678   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5679     IF p_create_update_flag = 'C' THEN
5680 
5681         -- If primary key value is passed, check for uniqueness.
5682         -- If primary key value is not passed, it will be generated
5683         -- from sequence by table handler.
5684 
5685         IF p_cust_profile_amt_rec.cust_acct_profile_amt_id IS NOT NULL AND
5686            p_cust_profile_amt_rec.cust_acct_profile_amt_id <> FND_API.G_MISS_NUM
5687         THEN
5688         BEGIN
5689             SELECT 'Y' INTO l_dummy
5690             FROM HZ_CUST_PROFILE_AMTS
5691             WHERE CUST_ACCT_PROFILE_AMT_ID = p_cust_profile_amt_rec.cust_acct_profile_amt_id;
5692 
5693             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
5694             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_profile_amt_id' );
5695             FND_MSG_PUB.ADD;
5696             x_return_status := FND_API.G_RET_STS_ERROR;
5697         EXCEPTION
5698             WHEN NO_DATA_FOUND THEN
5699                 NULL;
5700         END;
5701 
5702         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5703            hz_utility_v2pub.debug(p_message=>'cust_acct_profile_amt_id is unique during creation if passed in. ' ||
5704                                 'x_return_status = ' || x_return_status,
5705                                   p_prefix =>l_debug_prefix,
5706                                   p_msg_level=>fnd_log.level_statement);
5707         END IF;
5708         END IF;
5709     END IF;
5710 
5711     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5712            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_profile_amt_id ... ' ||
5713                                 'x_return_status = ' || x_return_status,
5714                                   p_prefix =>l_debug_prefix,
5715                                   p_msg_level=>fnd_log.level_statement);
5716     END IF;
5717   END IF;
5718 
5719     ----------------------------------------------
5720     -- validate cust_account_profile_id
5721     ----------------------------------------------
5722 /****Logical APIs - validation not required****/
5723   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5724     -- cust_account_profile_id is mandatory field
5725     -- Since cust_account_profile_id is non-updateable, we only need to check mandatory
5726     -- during creation.
5727 
5728     IF p_create_update_flag = 'C' THEN
5729         validate_mandatory (
5730             p_create_update_flag                    => p_create_update_flag,
5731             p_column                                => 'cust_account_profile_id',
5732             p_column_value                          => p_cust_profile_amt_rec.cust_account_profile_id,
5733             x_return_status                         => x_return_status );
5734 
5735         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5736            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is mandatory. ' ||
5737                                                  'x_return_status = ' || x_return_status,
5738                                   p_prefix =>l_debug_prefix,
5739                                   p_msg_level=>fnd_log.level_statement);
5740         END IF;
5741     END IF;
5742 
5743     -- cust_account_profile_id is non-updateable field
5744     IF p_create_update_flag = 'U' AND
5745        p_cust_profile_amt_rec.cust_account_profile_id IS NOT NULL
5746     THEN
5747         validate_nonupdateable (
5748             p_column                                => 'cust_account_profile_id',
5749             p_column_value                          => p_cust_profile_amt_rec.cust_account_profile_id,
5750             p_old_column_value                      => l_cust_account_profile_id,
5751             x_return_status                         => x_return_status );
5752 
5753         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5754            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is non-updateable. ' ||
5755                                   'x_return_status = ' || x_return_status,
5756                                   p_prefix =>l_debug_prefix,
5757                                   p_msg_level=>fnd_log.level_statement);
5758         END IF;
5759     END IF;
5760 
5761     -- cust_account_profile_id is foreign key to hz_customer_profiles
5762     -- Since cust_account_profile_id is mandatory and non-updateable,
5763     -- we only need to check FK during creation.
5764 
5765 
5766     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5767            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id = ' || p_cust_profile_amt_rec.cust_account_profile_id || ' ' ||
5768                                         'x_return_status = ' || x_return_status,
5769                                   p_prefix =>l_debug_prefix,
5770                                   p_msg_level=>fnd_log.level_statement);
5771     END IF;
5772 
5773     IF p_create_update_flag = 'C' AND
5774        p_check_foreign_key = FND_API.G_TRUE AND
5775        p_cust_profile_amt_rec.cust_account_profile_id IS NOT NULL AND
5776        p_cust_profile_amt_rec.cust_account_profile_id <> FND_API.G_MISS_NUM
5777     THEN
5778     BEGIN
5779         -- select cust_account_id, site_use_id for later cross reference checking
5780         --  Bug 4770111 : select created_by_module also
5781 
5782         SELECT CUST_ACCOUNT_ID, SITE_USE_ID, CREATED_BY_MODULE
5783         INTO l_cust_account_id, l_site_use_id, l_prof_cbm
5784         FROM HZ_CUSTOMER_PROFILES
5785         WHERE CUST_ACCOUNT_PROFILE_ID = p_cust_profile_amt_rec.cust_account_profile_id;
5786 
5787     EXCEPTION
5788         WHEN NO_DATA_FOUND THEN
5789             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
5790             FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_profile_id' );
5791             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id' );
5792             FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_customer_profiles' );
5793             FND_MSG_PUB.ADD;
5794             x_return_status := FND_API.G_RET_STS_ERROR;
5795     END;
5796 
5797     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5798            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is foreign key to hz_customer_profiles. ' ||
5799                                                   'x_return_status = ' || x_return_status,
5800                                   p_prefix =>l_debug_prefix,
5801                                   p_msg_level=>fnd_log.level_statement);
5802     END IF;
5803 
5804     END IF;
5805 
5806     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5807            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_profile_id ... ' ||
5808                                                 'x_return_status = ' || x_return_status,
5809                                   p_prefix =>l_debug_prefix,
5810                                   p_msg_level=>fnd_log.level_statement);
5811     END IF;
5812   END IF;
5813 
5814     ----------------------------------------------
5815     -- validate cust_account_id
5816     ----------------------------------------------
5817 /****Logical APIs - validation not required****/
5818   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5819     -- cust_account_id is mandatory field
5820     -- Since cust_account_id is non-updateable, we only need to check mandatory
5821     -- during creation.
5822 
5823     IF p_create_update_flag = 'C' THEN
5824         validate_mandatory (
5825             p_create_update_flag                    => p_create_update_flag,
5826             p_column                                => 'cust_account_id',
5827             p_column_value                          => p_cust_profile_amt_rec.cust_account_id,
5828             x_return_status                         => x_return_status );
5829 
5830         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5831            hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
5832                  'x_return_status = ' || x_return_status,
5833                                   p_prefix =>l_debug_prefix,
5834                                   p_msg_level=>fnd_log.level_statement);
5835         END IF;
5836     END IF;
5837 
5838     -- cust_account_id is non-updateable field
5839     IF p_create_update_flag = 'U' AND
5840        p_cust_profile_amt_rec.cust_account_id IS NOT NULL
5841     THEN
5842         validate_nonupdateable (
5843             p_column                                => 'cust_account_id',
5844             p_column_value                          => p_cust_profile_amt_rec.cust_account_id,
5845             p_old_column_value                      => l_cust_account_id,
5846             x_return_status                         => x_return_status );
5847 
5848         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5849            hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
5850                                                 'x_return_status = ' || x_return_status,
5851                                   p_prefix =>l_debug_prefix,
5852                                   p_msg_level=>fnd_log.level_statement);
5853         END IF;
5854     END IF;
5855 
5856     -- cust_account_id is foreign key to hz_cust_accounts
5857     -- Since cust_account_id is mandatory and non-updateable,
5858     -- we only need to check FK during creation.
5859 
5860     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5861            hz_utility_v2pub.debug(p_message=>'cust_account_id = ' || p_cust_profile_amt_rec.cust_account_id || ' ' ||
5862                                            'x_return_status = ' || x_return_status,
5863                                   p_prefix =>l_debug_prefix,
5864                                   p_msg_level=>fnd_log.level_statement);
5865     END IF;
5866 
5867     IF p_create_update_flag = 'C' AND
5868        p_check_foreign_key = FND_API.G_TRUE AND
5869        p_cust_profile_amt_rec.cust_account_id IS NOT NULL AND
5870        p_cust_profile_amt_rec.cust_account_id <> FND_API.G_MISS_NUM
5871     THEN
5872         check_cust_account_fk (
5873             p_column                                 => 'cust_account_id',
5874             p_column_value                           => p_cust_profile_amt_rec.cust_account_id,
5875             x_return_status                          => x_return_status );
5876 
5877         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5878            hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
5879                                                 'x_return_status = ' || x_return_status,
5880                                   p_prefix =>l_debug_prefix,
5881                                   p_msg_level=>fnd_log.level_statement);
5882         END IF;
5883 
5884         -- cross reference checking
5885 
5886         IF p_cust_profile_amt_rec.cust_account_id <> l_cust_account_id THEN
5887             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_PROF_AMT_IDS_MISMATCH' );
5888             FND_MESSAGE.SET_TOKEN( 'ENTITY', 'customer' );
5889             FND_MSG_PUB.ADD;
5890             x_return_status := FND_API.G_RET_STS_ERROR;
5891         END IF;
5892 
5893         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5894            hz_utility_v2pub.debug(p_message=>'cust_account_id should be the same as cust_account_id in corresponding customer profile. ' ||
5895                                   'x_return_status = ' || x_return_status,
5896                                   p_prefix =>l_debug_prefix,
5897                                   p_msg_level=>fnd_log.level_statement);
5898         END IF;
5899 
5900     END IF;
5901 
5902     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5903            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
5904                                                  'x_return_status = ' || x_return_status,
5905                                   p_prefix =>l_debug_prefix,
5906                                   p_msg_level=>fnd_log.level_statement);
5907     END IF;
5908   END IF;
5909 
5910     ----------------------------------------------
5911     -- validate currency_code
5912     ----------------------------------------------
5913 
5914     -- currency_code is mandatory field
5915     -- Since currency_code is non-updateable, we only need to check mandatory
5916     -- during creation.
5917 
5918     IF p_create_update_flag = 'C' THEN
5919         validate_mandatory (
5920             p_create_update_flag                    => p_create_update_flag,
5921             p_column                                => 'currency_code',
5922             p_column_value                          => p_cust_profile_amt_rec.currency_code,
5923             x_return_status                         => x_return_status );
5924 
5925         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5926            hz_utility_v2pub.debug(p_message=>'currency_code is mandatory. ' ||
5927                                         'x_return_status = ' || x_return_status,
5928                                   p_prefix =>l_debug_prefix,
5929                                   p_msg_level=>fnd_log.level_statement);
5930         END IF;
5931     END IF;
5932 
5933     -- currency_code is non-updateable field
5934     IF p_create_update_flag = 'U' AND
5935        p_cust_profile_amt_rec.currency_code IS NOT NULL
5936     THEN
5937         validate_nonupdateable (
5938             p_column                                => 'currency_code',
5939             p_column_value                          => p_cust_profile_amt_rec.currency_code,
5940             p_old_column_value                      => l_currency_code,
5941             x_return_status                         => x_return_status );
5942 
5943         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5944             hz_utility_v2pub.debug(p_message=>'currency_code is non-updateable. ' ||
5945                                                  'x_return_status = ' || x_return_status,
5946                                   p_prefix =>l_debug_prefix,
5947                                   p_msg_level=>fnd_log.level_statement);
5948         END IF;
5949     END IF;
5950 
5951     -- currency_code is foreign key to fnd_currencies
5952     -- Since currency_code is mandatory and non-updateable,
5953     -- we only need to check FK during creation.
5954 
5955     IF p_create_update_flag = 'C' AND
5956        p_cust_profile_amt_rec.currency_code IS NOT NULL AND
5957        p_cust_profile_amt_rec.currency_code <> FND_API.G_MISS_CHAR
5958     THEN
5959         check_currency_fk (
5960             p_column                                => 'currency_code',
5961             p_column_value                          => p_cust_profile_amt_rec.currency_code,
5962             x_return_status                         => x_return_status );
5963 
5964         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5965            hz_utility_v2pub.debug(p_message=>'currency_code is foreign key to fnd_currencies. ' ||
5966                                  'x_return_status = ' || x_return_status,
5967                                   p_prefix =>l_debug_prefix,
5968                                   p_msg_level=>fnd_log.level_statement);
5969         END IF;
5970     END IF;
5971 
5972     -- For a given cust_account_profile_id and currency_code, only one
5973     -- record of the profile amount is allowed.
5974     -- Since cust_account_profile_id and currency_code are mandatory
5975     -- and non-updateable columns, we only need to do the checking
5976     -- during creation.
5977 
5978     IF p_create_update_flag = 'C' THEN
5979     BEGIN
5980         SELECT 'Y' INTO l_dummy
5981         FROM HZ_CUST_PROFILE_AMTS
5982         WHERE CUST_ACCOUNT_PROFILE_ID = p_cust_profile_amt_rec.cust_account_profile_id
5983         AND CURRENCY_CODE = p_cust_profile_amt_rec.currency_code
5984         AND ROWNUM = 1;
5985 
5986         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
5987         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id - currency_code' );
5988         FND_MSG_PUB.ADD;
5989         x_return_status := FND_API.G_RET_STS_ERROR;
5990     EXCEPTION
5991         WHEN NO_DATA_FOUND THEN
5992             NULL;
5993     END;
5994 
5995     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5996            hz_utility_v2pub.debug(p_message=>'for a given cust_account_profile_id and currency_code, only one record of the profile amount is allowed. ' ||
5997                                          'x_return_status = ' || x_return_status,
5998                                   p_prefix =>l_debug_prefix,
5999                                   p_msg_level=>fnd_log.level_statement);
6000     END IF;
6001     END IF;
6002 
6003     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6004            hz_utility_v2pub.debug(p_message=>'(+) after validate currency_code ... ' ||
6005                          'x_return_status = ' || x_return_status,
6006                                   p_prefix =>l_debug_prefix,
6007                                   p_msg_level=>fnd_log.level_statement);
6008     END IF;
6009 
6010     ----------------------------------------------
6011     -- validate site_use_id
6012     ----------------------------------------------
6013 /****Logical APIs - validation not required****/
6014   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6015     -- site_use_id is non-updateable field
6016     IF p_create_update_flag = 'U' AND
6017        p_cust_profile_amt_rec.site_use_id IS NOT NULL
6018     THEN
6019         validate_nonupdateable (
6020             p_column                                => 'site_use_id',
6021             p_column_value                          => p_cust_profile_amt_rec.site_use_id,
6022             p_old_column_value                      => l_site_use_id,
6023             x_return_status                         => x_return_status );
6024 
6025         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6026            hz_utility_v2pub.debug(p_message=>'site_use_id is non-updateable. ' ||
6027                                              'x_return_status = ' || x_return_status,
6028                                   p_prefix =>l_debug_prefix,
6029                                   p_msg_level=>fnd_log.level_statement);
6030        END IF;
6031     END IF;
6032 
6033     -- site_use_id is foreign key to hz_cust_site_uses
6034     -- Since site_use_id is non-updateable, we only need to
6035     -- check FK during creation.
6036 
6037     IF p_create_update_flag = 'C' AND
6038        p_check_foreign_key = FND_API.G_TRUE
6039     THEN
6040         IF p_cust_profile_amt_rec.site_use_id IS NOT NULL AND
6041            p_cust_profile_amt_rec.site_use_id <> FND_API.G_MISS_NUM
6042         THEN
6043             check_cust_site_use_fk (
6044                 p_column                                 => 'site_use_id',
6045                 p_column_value                           => p_cust_profile_amt_rec.site_use_id,
6046                 x_return_status                          => x_return_status );
6047 
6048             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6049                 hz_utility_v2pub.debug(p_message=>'site_use_id is foreign key to hz_cust_site_uses. ' ||
6050                                                 'x_return_status = ' || x_return_status,
6051                                   p_prefix =>l_debug_prefix,
6052                                   p_msg_level=>fnd_log.level_statement);
6053             END IF;
6054         END IF;
6055 
6056         -- cross reference checking
6057 
6058         IF ( p_cust_profile_amt_rec.site_use_id IS NOT NULL
6059              AND p_cust_profile_amt_rec.site_use_id <> FND_API.G_MISS_NUM AND
6060              ( l_site_use_id IS NULL OR
6061                l_site_use_id <> p_cust_profile_amt_rec.site_use_id ) ) OR
6062            ( ( p_cust_profile_amt_rec.site_use_id IS NULL OR
6063                p_cust_profile_amt_rec.site_use_id = FND_API.G_MISS_NUM ) AND
6064              l_site_use_id IS NOT NULL )
6065         THEN
6066             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_PROF_AMT_IDS_MISMATCH' );
6067             FND_MESSAGE.SET_TOKEN( 'ENTITY', 'site use' );
6068             FND_MSG_PUB.ADD;
6069             x_return_status := FND_API.G_RET_STS_ERROR;
6070         END IF;
6071 
6072         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6073            hz_utility_v2pub.debug(p_message=>'site_use_id should be the same as site_use_id site_use_id in corresponding customer profile. ' ||
6074                           'x_return_status = ' || x_return_status,
6075                                   p_prefix =>l_debug_prefix,
6076                                   p_msg_level=>fnd_log.level_statement);
6077         END IF;
6078     END IF;
6079 
6080     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6081            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
6082                                              'x_return_status = ' || x_return_status,
6083                                   p_prefix =>l_debug_prefix,
6084                                   p_msg_level=>fnd_log.level_statement);
6085     END IF;
6086   END IF;
6087 
6088     --------------------------------------
6089     -- validate created_by_module
6090     --------------------------------------
6091 
6092 --  Bug 4770111 : Validate CBM only if <> l_prof_cbm
6093     IF p_create_update_flag = 'C' THEN
6094       IF p_cust_profile_amt_rec.created_by_module <> nvl(l_prof_cbm, 'TCA_V2_API') THEN
6095       validate_created_by_module(
6096       p_create_update_flag     => p_create_update_flag,
6097       p_created_by_module      => p_cust_profile_amt_rec.created_by_module,
6098       p_old_created_by_module  => l_created_by_module,
6099       x_return_status          => x_return_status);
6100       END IF;
6101     ELSE
6102     validate_created_by_module(
6103       p_create_update_flag     => p_create_update_flag,
6104       p_created_by_module      => p_cust_profile_amt_rec.created_by_module,
6105       p_old_created_by_module  => l_created_by_module,
6106       x_return_status          => x_return_status);
6107     END IF;
6108 
6109     --------------------------------------
6110     -- validate application_id
6111     --------------------------------------
6112 
6113     validate_application_id(
6114       p_create_update_flag     => p_create_update_flag,
6115       p_application_id         => p_cust_profile_amt_rec.application_id,
6116       p_old_application_id     => l_application_id,
6117       x_return_status          => x_return_status);
6118 
6119     ------------------------------------
6120     --*** Credit Limit Validations ***--
6121     ------------------------------------
6122 
6123     IF p_cust_profile_amt_rec.overall_credit_limit   <> FND_API.G_MISS_NUM  AND
6124        p_cust_profile_amt_rec.overall_credit_limit   IS NOT NULL
6125     THEN
6126        IF  p_cust_profile_amt_rec.trx_credit_limit   <>  FND_API.G_MISS_NUM  AND
6127            p_cust_profile_amt_rec.trx_credit_limit   IS NOT NULL
6128        THEN
6129 
6130         IF ( p_create_update_flag = 'C' OR
6131            ( p_create_update_flag = 'U'  AND
6132             (
6133              (p_cust_profile_amt_rec.overall_credit_limit <> NVL( l_overall_credit_limit, FND_API.G_MISS_NUM ))
6134              OR
6135              (p_cust_profile_amt_rec.trx_credit_limit <> NVL(l_trx_credit_limit,FND_API.G_MISS_NUM))
6136             )
6137            )
6138            )
6139         THEN
6140            IF p_cust_profile_amt_rec.overall_credit_limit < p_cust_profile_amt_rec.trx_credit_limit
6141            THEN
6142               FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_OVERALL_CREDIT' );
6143               FND_MSG_PUB.ADD;
6144               x_return_status := FND_API.G_RET_STS_ERROR;
6145 
6146               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6147                  hz_utility_v2pub.debug(p_message=>'overall_credit_limit should be greater than the trx_credit_limit. ' ||
6148                                         'x_return_status = ' || x_return_status,
6149                                          p_prefix =>l_debug_prefix,
6150                                          p_msg_level=>fnd_log.level_statement);
6151               END IF;
6152            END IF;
6153         END IF;
6154        END IF;
6155     END IF;
6156 
6157         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6158            hz_utility_v2pub.debug(p_message=>'Credit Limit Validation failure. Please check the overall_credit_limit and trx_credit_limit ' || 'x_return_status = ' || x_return_status,
6159                                   p_prefix =>l_debug_prefix,
6160                                   p_msg_level=>fnd_log.level_statement);
6161         END IF;
6162 
6163     ----------------------------------------------
6164     -- validate MIN_FC_INVOICE_OVERDUE_TYPE
6165     ----------------------------------------------
6166 
6167     -- MIN_FC_INVOICE_OVERDUE_TYPE is lookup code in lookup type AR_AMOUNT_PERCENT
6168     IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type IS NOT NULL AND
6169        p_cust_profile_amt_rec.min_fc_invoice_overdue_type <> FND_API.G_MISS_CHAR AND
6170         ( p_create_update_flag = 'C' OR
6171           ( p_create_update_flag = 'U'  AND
6172             p_cust_profile_amt_rec.min_fc_invoice_overdue_type <> NVL( l_min_fc_invoice_overdue_type, FND_API.G_MISS_CHAR ) ) )
6173     THEN
6174         validate_lookup (
6175             p_column                                => 'min_fc_invoice_overdue_type',
6176             p_lookup_table                          => 'AR_LOOKUPS',
6177             p_lookup_type                           => 'AR_AMOUNT_PERCENT',
6178             p_column_value                          => p_cust_profile_amt_rec.min_fc_invoice_overdue_type,
6179             x_return_status                         => x_return_status );
6180 
6181         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6182            hz_utility_v2pub.debug(p_message=>'min_fc_invoice_overdue_type is lookup code in lookup type AR_AMOUNT_PERCENT. ' ||
6183                 'x_return_status = ' || x_return_status,
6184                                   p_prefix =>l_debug_prefix,
6185                                   p_msg_level=>fnd_log.level_statement);
6186         END IF;
6187 
6188     END IF;
6189 
6190     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6191            hz_utility_v2pub.debug(p_message=>'(+) after validate min_fc_invoice_overdue_type ... ' ||
6192             'x_return_status = ' || x_return_status,
6193                                   p_prefix =>l_debug_prefix,
6194                                   p_msg_level=>fnd_log.level_statement);
6195     END IF;
6196 
6197     ----------------------------------------------
6198     -- validate MIN_FC_BALANCE_OVERDUE_TYPE
6199     ----------------------------------------------
6200 
6201     -- MIN_FC_BALANCE_OVERDUE_TYPE is lookup code in lookup type AR_AMOUNT_PERCENT
6202     IF p_cust_profile_amt_rec.min_fc_balance_overdue_type  IS NOT NULL AND
6203        p_cust_profile_amt_rec.min_fc_balance_overdue_type <> FND_API.G_MISS_CHAR AND
6204         ( p_create_update_flag = 'C' OR
6205           ( p_create_update_flag = 'U'  AND
6206             p_cust_profile_amt_rec.min_fc_balance_overdue_type <> NVL( l_min_fc_balance_overdue_type, FND_API.G_MISS_CHAR ) ) )
6207     THEN
6208         validate_lookup (
6209             p_column                                => 'min_fc_balance_overdue_type',
6210             p_lookup_table                          => 'AR_LOOKUPS',
6211             p_lookup_type                           => 'AR_AMOUNT_PERCENT',
6212             p_column_value                          => p_cust_profile_amt_rec.min_fc_balance_overdue_type,
6213             x_return_status                         => x_return_status );
6214 
6215         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6216            hz_utility_v2pub.debug(p_message=>'min_fc_balance_overdue_type is lookup code in lookup type AR_AMOUNT_PERCENT. ' ||
6217                 'x_return_status = ' || x_return_status,
6218                                   p_prefix =>l_debug_prefix,
6219                                   p_msg_level=>fnd_log.level_statement);
6220         END IF;
6221 
6222     END IF;
6223 
6224     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6225            hz_utility_v2pub.debug(p_message=>'(+) after validate min_fc_balance_overdue_type ... ' ||
6226             'x_return_status = ' || x_return_status,
6227                                   p_prefix =>l_debug_prefix,
6228                                   p_msg_level=>fnd_log.level_statement);
6229     END IF;
6230 
6231     ----------------------------------------------
6232     -- validate INTEREST_TYPE
6233     ----------------------------------------------
6234 
6235     -- INTEREST_TYPE is lookup code in lookup type AR_INTEREST_PENALTY_TYPE
6236     IF p_cust_profile_amt_rec.interest_type  IS NOT NULL AND
6237        p_cust_profile_amt_rec.interest_type <> FND_API.G_MISS_CHAR AND
6238         ( p_create_update_flag = 'C' OR
6239           ( p_create_update_flag = 'U'  AND
6240             p_cust_profile_amt_rec.interest_type <> NVL( l_interest_type, FND_API.G_MISS_CHAR ) ) )
6241     THEN
6242         validate_lookup (
6243             p_column                                => 'interest_type',
6244             p_lookup_table                          => 'AR_LOOKUPS',
6245             p_lookup_type                           => 'AR_INTEREST_PENALTY_TYPE',
6246             p_column_value                          => p_cust_profile_amt_rec.interest_type,
6247             x_return_status                         => x_return_status );
6248 
6249         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6250            hz_utility_v2pub.debug(p_message=>'interest_type is lookup code in lookup type AR_INTEREST_PENALTY_TYPE. ' ||
6251                 'x_return_status = ' || x_return_status,
6252                                   p_prefix =>l_debug_prefix,
6253                                   p_msg_level=>fnd_log.level_statement);
6254         END IF;
6255 
6256     END IF;
6257 
6258     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6259            hz_utility_v2pub.debug(p_message=>'(+) after validate interest_type ... ' ||
6260             'x_return_status = ' || x_return_status,
6261                                   p_prefix =>l_debug_prefix,
6262                                   p_msg_level=>fnd_log.level_statement);
6263     END IF;
6264 
6265     ----------------------------------------------
6266     -- validate PENALTY_TYPE
6267     ----------------------------------------------
6268 
6269     -- PENALTY_TYPE is lookup code in lookup type AR_INTEREST_PENALTY_TYPE
6270     IF p_cust_profile_amt_rec.penalty_type  IS NOT NULL AND
6271        p_cust_profile_amt_rec.penalty_type <> FND_API.G_MISS_CHAR AND
6272         ( p_create_update_flag = 'C' OR
6273           ( p_create_update_flag = 'U'  AND
6274             p_cust_profile_amt_rec.penalty_type <> NVL( l_penalty_type, FND_API.G_MISS_CHAR ) ) )
6275     THEN
6276         validate_lookup (
6277             p_column                                => 'penalty_type',
6278             p_lookup_table                          => 'AR_LOOKUPS',
6279             p_lookup_type                           => 'AR_INTEREST_PENALTY_TYPE',
6280             p_column_value                          => p_cust_profile_amt_rec.penalty_type,
6281             x_return_status                         => x_return_status );
6282 
6283         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6284            hz_utility_v2pub.debug(p_message=>'penalty_type is lookup code in lookup type AR_INTEREST_PENALTY_TYPE. ' ||
6285                 'x_return_status = ' || x_return_status,
6286                                   p_prefix =>l_debug_prefix,
6287                                   p_msg_level=>fnd_log.level_statement);
6288         END IF;
6289 
6290     END IF;
6291 
6292     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6293            hz_utility_v2pub.debug(p_message=>'(+) after validate penalty_type ... ' ||
6294             'x_return_status = ' || x_return_status,
6295                                   p_prefix =>l_debug_prefix,
6296                                   p_msg_level=>fnd_log.level_statement);
6297     END IF;
6298 
6299     -- Debug info.
6300 
6301     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6302         hz_utility_v2pub.debug(p_message=> 'validate_cust_profile_amt (-)',
6303                                p_prefix=>l_debug_prefix,
6304                                p_msg_level=>fnd_log.level_procedure);
6305     END IF;
6306 
6307     ------------------------------------
6308     -- validate exchange_rate_type
6309     ------------------------------------
6310     --  exchange_rate_type should be a valid value defined in GL_DAILY_CONVERSION_TYPES
6311     --  The type USER is excluded.
6312 
6313     IF p_cust_profile_amt_rec.exchange_rate_type is NOT NULL AND
6314        p_cust_profile_amt_rec.exchange_rate_type <> FND_API.G_MISS_CHAR
6315       AND ( p_create_update_flag = 'C' OR
6316           ( p_create_update_flag = 'U'  AND
6317             p_cust_profile_amt_rec.exchange_rate_type <> NVL( l_exchange_rate_type, FND_API.G_MISS_CHAR ) ) )
6318     THEN
6319 
6320         check_exchange_rate_type_fk(
6321                 p_column                                => 'exchange_rate_type',
6322                 p_column_value                          => p_cust_profile_amt_rec.exchange_rate_type,
6323                 x_return_status                         => x_return_status );
6324 
6325         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6326             hz_utility_v2pub.debug(p_message=>'exchange_rate_type should be a valid value defined in GL_DAILY_CONVERSION_TYPES. '||
6327               'x_return_status = ' || x_return_status,
6328                               p_prefix =>l_debug_prefix,
6329                               p_msg_level=>fnd_log.level_statement);
6330         END IF;
6331 
6332     END IF;
6333 
6334     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6335            hz_utility_v2pub.debug(p_message=>'(+) after validate exchange_rate_type..' ||
6336                                          'x_return_status = ' || x_return_status,
6337                           p_prefix =>l_debug_prefix,
6338                           p_msg_level=>fnd_log.level_statement);
6339     END IF;
6340 
6341     ---------------------------------------------------------
6342     -- validate min_fc_invoice_amount, min_fc_invoice_percent
6343     ---------------------------------------------------------
6344     -- min_fc_invoice_amount is populated and mandatory only if min_fc_invoice_overdue_type = AMOUNT.
6345     -- Must be null if (min_fc_invoice_overdue_type = 'PERCENT' OR
6346     -- min_fc_invoice_overdue_type is null)
6347     -- min_fc_invoice_percent is populated and mandatory only if min_fc_invoice_overdue_type = PERCENT.
6348     -- Must be null if (min_fc_invoice_overdue_type = 'AMOUNT' OR
6349     -- min_fc_invoice_overdue_type is null)
6350     -- min_fc_invoice_percent cannot exceed 100.
6351 
6352     IF p_create_update_flag = 'U' THEN
6353        IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type is NULL THEN
6354           v_cust_profile_amt_rec.min_fc_invoice_overdue_type := l_min_fc_invoice_overdue_type;
6355        END IF;
6356        IF p_cust_profile_amt_rec.min_fc_invoice_amount is NULL THEN
6357           v_cust_profile_amt_rec.min_fc_invoice_amount := l_min_fc_invoice_amount;
6358        ELSIF p_cust_profile_amt_rec.min_fc_invoice_amount = FND_API.G_MISS_NUM THEN
6359           v_cust_profile_amt_rec.min_fc_invoice_amount := NULL;
6360        END IF;
6361        IF p_cust_profile_amt_rec.min_fc_invoice_percent is NULL THEN
6362           v_cust_profile_amt_rec.min_fc_invoice_percent := l_min_fc_invoice_percent;
6363        ELSIF p_cust_profile_amt_rec.min_fc_invoice_percent = FND_API.G_MISS_NUM THEN
6364           v_cust_profile_amt_rec.min_fc_invoice_percent := NULL;
6365        END IF;
6366     END IF;
6367 
6368     IF p_create_update_flag = 'C' THEN
6369        IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type = FND_API.G_MISS_CHAR THEN
6370           v_cust_profile_amt_rec.min_fc_invoice_overdue_type := NULL;
6371        END IF;
6372        IF p_cust_profile_amt_rec.min_fc_invoice_amount = FND_API.G_MISS_NUM THEN
6373           v_cust_profile_amt_rec.min_fc_invoice_amount := NULL;
6374        END IF;
6375        IF p_cust_profile_amt_rec.min_fc_invoice_percent = FND_API.G_MISS_NUM THEN
6376           v_cust_profile_amt_rec.min_fc_invoice_percent := NULL;
6377        END IF;
6378     END IF;
6379 
6380     IF v_cust_profile_amt_rec.min_fc_invoice_overdue_type = 'AMOUNT' THEN
6381        IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NULL OR
6382            v_cust_profile_amt_rec.min_fc_invoice_percent IS NOT NULL) THEN
6383            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6384            FND_MSG_PUB.ADD;
6385            x_return_status := FND_API.G_RET_STS_ERROR;
6386        END IF;
6387     ELSIF v_cust_profile_amt_rec.min_fc_invoice_overdue_type = 'PERCENT' THEN
6388        IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NOT NULL OR
6389            v_cust_profile_amt_rec.min_fc_invoice_percent IS NULL) THEN
6390            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6391            FND_MSG_PUB.ADD;
6392            x_return_status := FND_API.G_RET_STS_ERROR;
6393        ELSE
6394           check_less_than_100 (
6395               p_column             => 'min_fc_invoice_percent',
6396               p_column_value       => v_cust_profile_amt_rec.min_fc_invoice_percent,
6397               x_return_status      => x_return_status );
6398 
6399           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6400               hz_utility_v2pub.debug(p_message=>'min_fc_invoice_percent should be < 100.' ||'x_return_status = ' ||
6401                                   x_return_status,
6402                                   p_prefix =>l_debug_prefix,
6403                                   p_msg_level=>fnd_log.level_statement);
6404           END IF;
6405        END IF;
6406     ELSE
6407        IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NOT NULL OR
6408            v_cust_profile_amt_rec.min_fc_invoice_percent IS NOT NULL) THEN
6409            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6410            FND_MSG_PUB.ADD;
6411            x_return_status := FND_API.G_RET_STS_ERROR;
6412        END IF;
6413     END IF;
6414 
6415     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6416            hz_utility_v2pub.debug(p_message=>' after validate min_fc_invoice_amount and min_fc_invoice_percent..' ||
6417                                          'x_return_status = ' || x_return_status,
6418                           p_prefix =>l_debug_prefix,
6419                           p_msg_level=>fnd_log.level_statement);
6420     END IF;
6421 
6422     ---------------------------------------------------------
6423     -- validate min_fc_balance_amount, min_fc_balance_percent
6424     ---------------------------------------------------------
6425     -- min_fc_balance_amount is populated and mandatory only if min_fc_balance_overdue_type = AMOUNT.
6426     -- Must be null if (min_fc_balance_overdue_type = 'PERCENT' OR
6427     -- min_fc_balance_overdue_type is null)
6428     -- min_fc_balance_percent is populated and mandatory only if min_fc_balance_overdue_type = PERCENT.
6429     -- Must be null if (min_fc_balance_overdue_type = 'AMOUNT' OR
6430     -- min_fc_balance_overdue_type is null)
6431     -- min_fc_balance_percent cannot exceed 100.
6432 
6433     IF p_create_update_flag = 'U' THEN
6434        IF p_cust_profile_amt_rec.min_fc_balance_overdue_type is NULL THEN
6435           v_cust_profile_amt_rec.min_fc_balance_overdue_type := l_min_fc_balance_overdue_type;
6436        END IF;
6437        IF p_cust_profile_amt_rec.min_fc_balance_amount is NULL THEN
6438           v_cust_profile_amt_rec.min_fc_balance_amount := l_min_fc_balance_amount;
6439        ELSIF p_cust_profile_amt_rec.min_fc_balance_amount = FND_API.G_MISS_NUM THEN
6440           v_cust_profile_amt_rec.min_fc_balance_amount := NULL;
6441        END IF;
6442        IF p_cust_profile_amt_rec.min_fc_balance_percent is NULL THEN
6443           v_cust_profile_amt_rec.min_fc_balance_percent := l_min_fc_balance_percent;
6444        ELSIF p_cust_profile_amt_rec.min_fc_balance_percent = FND_API.G_MISS_NUM THEN
6445           v_cust_profile_amt_rec.min_fc_balance_percent := NULL;
6446        END IF;
6447     END IF;
6448 
6449     IF p_create_update_flag = 'C' THEN
6450        IF p_cust_profile_amt_rec.min_fc_balance_overdue_type = FND_API.G_MISS_CHAR THEN
6451           v_cust_profile_amt_rec.min_fc_balance_overdue_type := NULL;
6452        END IF;
6453        IF p_cust_profile_amt_rec.min_fc_balance_amount = FND_API.G_MISS_NUM THEN
6454           v_cust_profile_amt_rec.min_fc_balance_amount := NULL;
6455        END IF;
6456        IF p_cust_profile_amt_rec.min_fc_balance_percent = FND_API.G_MISS_NUM THEN
6457           v_cust_profile_amt_rec.min_fc_balance_percent := NULL;
6458        END IF;
6459     END IF;
6460 
6461     IF v_cust_profile_amt_rec.min_fc_balance_overdue_type = 'AMOUNT' THEN
6462        IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NULL OR
6463            v_cust_profile_amt_rec.min_fc_balance_percent IS NOT NULL) THEN
6464            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6465            FND_MSG_PUB.ADD;
6466            x_return_status := FND_API.G_RET_STS_ERROR;
6467        END IF;
6468     ELSIF v_cust_profile_amt_rec.min_fc_balance_overdue_type = 'PERCENT' THEN
6469        IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NOT NULL OR
6470            v_cust_profile_amt_rec.min_fc_balance_percent IS NULL) THEN
6471            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6472            FND_MSG_PUB.ADD;
6473            x_return_status := FND_API.G_RET_STS_ERROR;
6474        ELSE
6475           check_less_than_100 (
6476               p_column             => 'min_fc_balance_percent',
6477               p_column_value       => v_cust_profile_amt_rec.min_fc_balance_percent,
6478               x_return_status      => x_return_status );
6479 
6480           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6481               hz_utility_v2pub.debug(p_message=>'min_fc_balance_percent should be < 100.' ||'x_return_status = ' ||
6482                                   x_return_status,
6483                                   p_prefix =>l_debug_prefix,
6484                                   p_msg_level=>fnd_log.level_statement);
6485           END IF;
6486        END IF;
6487     ELSE
6488        IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NOT NULL OR
6489            v_cust_profile_amt_rec.min_fc_balance_percent IS NOT NULL) THEN
6490            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6491            FND_MSG_PUB.ADD;
6492            x_return_status := FND_API.G_RET_STS_ERROR;
6493        END IF;
6494     END IF;
6495 
6496     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6497            hz_utility_v2pub.debug(p_message=>' after validate min_fc_balance_amount and min_fc_balance_percent..' ||
6498                                          'x_return_status = ' || x_return_status,
6499                           p_prefix =>l_debug_prefix,
6500                           p_msg_level=>fnd_log.level_statement);
6501     END IF;
6502 
6503     -------------------------------------------------------------------------
6504     -- validate interest_rate, interest_fixed_amount and interest_schedule_id
6505     -------------------------------------------------------------------------
6506     -- interest_rate cannot exceed 100. Is populated and mandatory only if interest_type = FIXED_RATE.
6507     -- Must be null if interest_type <> FIXED_RATE OR interest_type is null
6508     -- interest_fixed_amount is populated and mandatory only if interest_type = FIXED_AMOUNT.
6509     -- Must be null if interest_type <> FIXED_AMOUNT OR interest_type  is null
6510     -- interest_schedule_id is populated and mandatory if only if  interest_type is CHARGES_SCHEDULE or CHARGE_PER_TIER.
6511     -- Validated against ar_charge_schedules.schedule_id.
6512 
6513     IF p_create_update_flag = 'U' THEN
6514        IF p_cust_profile_amt_rec.interest_type is NULL THEN
6515           v_cust_profile_amt_rec.interest_type := l_interest_type;
6516        END IF;
6517        IF p_cust_profile_amt_rec.interest_rate is NULL THEN
6518           v_cust_profile_amt_rec.interest_rate := l_interest_rate;
6519        ELSIF p_cust_profile_amt_rec.interest_rate = FND_API.G_MISS_NUM THEN
6520           v_cust_profile_amt_rec.interest_rate := NULL;
6521        END IF;
6522        IF p_cust_profile_amt_rec.interest_fixed_amount is NULL THEN
6523           v_cust_profile_amt_rec.interest_fixed_amount := l_interest_fixed_amount;
6524        ELSIF p_cust_profile_amt_rec.interest_fixed_amount = FND_API.G_MISS_NUM THEN
6525           v_cust_profile_amt_rec.interest_fixed_amount := NULL;
6526        END IF;
6527        IF p_cust_profile_amt_rec.interest_schedule_id is NULL THEN
6528           v_cust_profile_amt_rec.interest_schedule_id := l_interest_schedule_id;
6529        ELSIF p_cust_profile_amt_rec.interest_schedule_id = FND_API.G_MISS_NUM THEN
6530           v_cust_profile_amt_rec.interest_schedule_id := NULL;
6531        END IF;
6532     END IF;
6533 
6534     IF p_create_update_flag = 'C' THEN
6535        IF p_cust_profile_amt_rec.interest_type = FND_API.G_MISS_CHAR THEN
6536           v_cust_profile_amt_rec.interest_type := NULL;
6537        END IF;
6538        IF p_cust_profile_amt_rec.interest_rate = FND_API.G_MISS_NUM THEN
6539           v_cust_profile_amt_rec.interest_rate := NULL;
6540        END IF;
6541        IF p_cust_profile_amt_rec.interest_fixed_amount = FND_API.G_MISS_NUM THEN
6542           v_cust_profile_amt_rec.interest_fixed_amount := NULL;
6543        END IF;
6544        IF p_cust_profile_amt_rec.interest_schedule_id = FND_API.G_MISS_NUM THEN
6545           v_cust_profile_amt_rec.interest_schedule_id := NULL;
6546        END IF;
6547     END IF;
6548 
6549     IF v_cust_profile_amt_rec.interest_type = 'FIXED_RATE' THEN
6550        IF (v_cust_profile_amt_rec.interest_rate IS NULL OR
6551            v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6552            v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6553            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6554            FND_MSG_PUB.ADD;
6555            x_return_status := FND_API.G_RET_STS_ERROR;
6556        ELSE
6557           check_less_than_100 (
6558               p_column             => 'interest_rate',
6559               p_column_value       => v_cust_profile_amt_rec.interest_rate,
6560               x_return_status      => x_return_status );
6561 
6562           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6563               hz_utility_v2pub.debug(p_message=>'interest_rate should be < 100.' ||'x_return_status = ' ||
6564                                   x_return_status,
6565                                   p_prefix =>l_debug_prefix,
6566                                   p_msg_level=>fnd_log.level_statement);
6567           END IF;
6568        END IF;
6569     ELSIF v_cust_profile_amt_rec.interest_type = 'FIXED_AMOUNT' THEN
6570        IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6571            v_cust_profile_amt_rec.interest_fixed_amount IS NULL OR
6572            v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6573            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6574            FND_MSG_PUB.ADD;
6575            x_return_status := FND_API.G_RET_STS_ERROR;
6576        END IF;
6577     /*6469663 Late charge enhacement handling case oftier basis calculation*/
6578     ELSIF v_cust_profile_amt_rec.interest_type IN ( 'CHARGES_SCHEDULE','CHARGE_PER_TIER') THEN
6579        IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6580            v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6581            v_cust_profile_amt_rec.interest_schedule_id IS NULL) THEN
6582            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6583            FND_MSG_PUB.ADD;
6584            x_return_status := FND_API.G_RET_STS_ERROR;
6585        ELSE
6586           check_charge_schedule_id_fk (
6587               p_column             => 'interest_schedule_id',
6588               p_column_value       => v_cust_profile_amt_rec.interest_schedule_id,
6589               x_return_status      => x_return_status );
6590 
6591           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6592               hz_utility_v2pub.debug(p_message=>'interest_schedule_id should be a valid value defined in ar_charge_schedules' ||'x_return_status = ' ||
6593                                   x_return_status,
6594                                   p_prefix =>l_debug_prefix,
6595                                   p_msg_level=>fnd_log.level_statement);
6596           END IF;
6597        END IF;
6598     ELSE
6599        IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6600            v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6601            v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6602            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6603            FND_MSG_PUB.ADD;
6604            x_return_status := FND_API.G_RET_STS_ERROR;
6605        END IF;
6606     END IF;
6607 
6608     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6609            hz_utility_v2pub.debug(p_message=>' after validate interest_rate, interest_fixed_amount and interest_schedule_id.' ||
6610                                          'x_return_status = ' || x_return_status,
6611                           p_prefix =>l_debug_prefix,
6612                           p_msg_level=>fnd_log.level_statement);
6613     END IF;
6614 
6615     -------------------------------------------------------------------------
6616     -- validate penalty_rate, penalty_fixed_amount and penalty_schedule_id
6617     -------------------------------------------------------------------------
6618     -- penalty_rate cannot exceed 100. Is populated and mandatory only if penalty_type = FIXED_RATE.
6619     -- Must be null if penalty_type <> FIXED_RATE OR penalty_type is null
6620     -- penalty_fixed_amount is populated and mandatory only if penalty_type = FIXED_AMOUNT.
6621     -- Must be null if penalty_type <> FIXED_AMOUNT OR penalty_type  is null
6622     -- penalty_schedule_id is populated and mandatory if only if  penalty_type in  CHARGES_SCHEDULE or CHARGE_PER_TIER.
6623     -- Validated against ar_charge_schedules.schedule_id.
6624 
6625     IF p_create_update_flag = 'U' THEN
6626        IF p_cust_profile_amt_rec.penalty_type is NULL THEN
6627           v_cust_profile_amt_rec.penalty_type := l_penalty_type;
6628        END IF;
6629        IF p_cust_profile_amt_rec.penalty_rate is NULL THEN
6630           v_cust_profile_amt_rec.penalty_rate := l_penalty_rate;
6631        ELSIF p_cust_profile_amt_rec.penalty_rate = FND_API.G_MISS_NUM THEN
6632           v_cust_profile_amt_rec.penalty_rate := NULL;
6633        END IF;
6634        IF p_cust_profile_amt_rec.penalty_fixed_amount is NULL THEN
6635           v_cust_profile_amt_rec.penalty_fixed_amount := l_penalty_fixed_amount;
6636        ELSIF p_cust_profile_amt_rec.penalty_fixed_amount = FND_API.G_MISS_NUM THEN
6637           v_cust_profile_amt_rec.penalty_fixed_amount := NULL;
6638        END IF;
6639        IF p_cust_profile_amt_rec.penalty_schedule_id is NULL THEN
6640           v_cust_profile_amt_rec.penalty_schedule_id := l_penalty_schedule_id;
6641        ELSIF p_cust_profile_amt_rec.penalty_schedule_id = FND_API.G_MISS_NUM THEN
6642           v_cust_profile_amt_rec.penalty_schedule_id := NULL;
6643        END IF;
6644     END IF;
6645 
6646     IF p_create_update_flag = 'C' THEN
6647        IF p_cust_profile_amt_rec.penalty_type = FND_API.G_MISS_CHAR THEN
6648           v_cust_profile_amt_rec.penalty_type := NULL;
6649        END IF;
6650        IF p_cust_profile_amt_rec.penalty_rate = FND_API.G_MISS_NUM THEN
6651           v_cust_profile_amt_rec.penalty_rate := NULL;
6652        END IF;
6653        IF p_cust_profile_amt_rec.penalty_fixed_amount = FND_API.G_MISS_NUM THEN
6654           v_cust_profile_amt_rec.penalty_fixed_amount := NULL;
6655        END IF;
6656        IF p_cust_profile_amt_rec.penalty_schedule_id = FND_API.G_MISS_NUM THEN
6657           v_cust_profile_amt_rec.penalty_schedule_id := NULL;
6658        END IF;
6659     END IF;
6660 
6661     IF v_cust_profile_amt_rec.penalty_type = 'FIXED_RATE' THEN
6662        IF (v_cust_profile_amt_rec.penalty_rate IS NULL OR
6663            v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6664            v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6665            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6666            FND_MSG_PUB.ADD;
6667            x_return_status := FND_API.G_RET_STS_ERROR;
6668        ELSE
6669           check_less_than_100 (
6670               p_column             => 'penalty_rate',
6671               p_column_value       => v_cust_profile_amt_rec.penalty_rate,
6672               x_return_status      => x_return_status );
6673 
6674           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6675               hz_utility_v2pub.debug(p_message=>'penalty_rate should be < 100.' ||'x_return_status = ' ||
6676                                   x_return_status,
6677                                   p_prefix =>l_debug_prefix,
6678                                   p_msg_level=>fnd_log.level_statement);
6679           END IF;
6680        END IF;
6681     ELSIF v_cust_profile_amt_rec.penalty_type = 'FIXED_AMOUNT' THEN
6682        IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6683            v_cust_profile_amt_rec.penalty_fixed_amount IS NULL OR
6684            v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6685            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6686            FND_MSG_PUB.ADD;
6687            x_return_status := FND_API.G_RET_STS_ERROR;
6688        END IF;
6689        /*6469663 Late charge enhacement handling case oftier basis calculation*/
6690     ELSIF v_cust_profile_amt_rec.penalty_type IN ('CHARGES_SCHEDULE','CHARGE_PER_TIER') THEN
6691        IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6692            v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6693            v_cust_profile_amt_rec.penalty_schedule_id IS NULL) THEN
6694            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6695            FND_MSG_PUB.ADD;
6696            x_return_status := FND_API.G_RET_STS_ERROR;
6697        ELSE
6698           check_charge_schedule_id_fk (
6699               p_column             => 'penalty_schedule_id',
6700               p_column_value       => v_cust_profile_amt_rec.penalty_schedule_id,
6701               x_return_status      => x_return_status );
6702 
6703           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6704               hz_utility_v2pub.debug(p_message=>'penalty_schedule_id should be a valid value defined in ar_charge_schedules' ||'x_return_status = ' ||
6705                                   x_return_status,
6706                                   p_prefix =>l_debug_prefix,
6707                                   p_msg_level=>fnd_log.level_statement);
6708           END IF;
6709        END IF;
6710     ELSE
6711        IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6712            v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6713            v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6714            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6715            FND_MSG_PUB.ADD;
6716            x_return_status := FND_API.G_RET_STS_ERROR;
6717        END IF;
6718     END IF;
6719 
6720     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6721            hz_utility_v2pub.debug(p_message=>' after validate penalty_rate, penalty_fixed_amount and penalty_schedule_id.' ||
6722                                          'x_return_status = ' || x_return_status,
6723                           p_prefix =>l_debug_prefix,
6724                           p_msg_level=>fnd_log.level_statement);
6725     END IF;
6726 
6727 END validate_cust_profile_amt;
6728 
6729 /**
6730  * PROCEDURE validate_accnt_party_site
6731  *
6732  * DESCRIPTION
6733  *     Validates party_site adding to Customer Account Site.
6734  *     If a party is directly related to another party (through active party relationship),
6735  *     then account site creation between 2 parties is allowed.
6736  *     Do not allow Account Site creation only if they are completely unrelated.
6737  *
6738  *     Get Party information from Account and Party Site, if those are not equal then
6739  *     look for Relationship between these two parties eiter directly or indirectly.
6740  *     If no relation found then return error
6741  *
6742  * Private Procedure
6743  *
6744  * ARGUMENTS
6745  *   IN:
6746  *     p_cust_acct_site_rec           Customer account site record.
6747  *   IN/OUT:
6748  *     x_return_status                Return status after the call. The status can
6749  *                                    be FND_API.G_RET_STS_SUCCESS (success),
6750  *                                    FND_API.G_RET_STS_ERROR (error),
6751  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6752  *
6753  * NOTES
6754  *
6755  * MODIFICATION HISTORY
6756  *
6757  *   23rd Mar 11    Sudhir Gokavarapu    o Created.
6758  */
6759 
6760 
6761 PROCEDURE validate_accnt_party_site (
6762     p_cust_acct_site_rec                    IN     HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_ACCT_SITE_REC_TYPE,
6763     x_return_status                         IN OUT NOCOPY VARCHAR2
6764 ) IS
6765     l_site_party_id        hz_party_sites.party_id%TYPE;
6766 	l_account_party_id     hz_cust_accounts.party_id%TYPE;
6767 	l_account_number       hz_cust_accounts.account_number%TYPE;
6768     l_party_type           hz_parties.party_type%TYPE;
6769     l_site_party_name      hz_parties.party_name%TYPE;
6770 	l_account_party_name   hz_parties.party_name%TYPE;
6771 
6772     l_debug_prefix         VARCHAR2(30) := '';
6773 	l_dummy                VARCHAR2(1);
6774 BEGIN
6775         BEGIN
6776 		    IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6777                hz_utility_v2pub.debug(p_message=>'validate_accnt_party_site (+)',
6778                                p_prefix=>l_debug_prefix,
6779                                p_msg_level=>fnd_log.level_procedure);
6780             END IF;
6781 
6782             SELECT party_id,account_number
6783              INTO   l_account_party_id,l_account_number
6784             FROM hz_cust_accounts
6785             WHERE cust_account_id = p_cust_acct_site_rec.cust_account_id ;
6786 
6787              -- Debug info.
6788                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6789                   hz_utility_v2pub.debug(p_message=>' Account Party ID : '||l_account_party_id||' Account Number : '||l_account_number,
6790                                   p_prefix =>l_debug_prefix,
6791                                   p_msg_level=>fnd_log.level_statement);
6792                 END IF;
6793 
6794             SELECT party_id
6795              INTO  l_site_party_id
6796             FROM   hz_party_sites ps
6797             WHERE  party_site_id = p_cust_acct_site_rec.party_site_id;
6798 
6799               -- Debug info.
6800                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6801                   hz_utility_v2pub.debug(p_message=>'Site Party ID : '||l_site_party_id,
6802                                   p_prefix =>l_debug_prefix,
6803                                   p_msg_level=>fnd_log.level_statement);
6804                 END IF;
6805 
6806 
6807             IF l_account_party_id <> l_site_party_id THEN
6808 			 BEGIN
6809 				  -- Debug info.
6810 					IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6811 					  hz_utility_v2pub.debug(p_message=>'Parties are not equal, Site Party ID : '||l_site_party_id
6812 														 ||' and Account Party ID : '||l_account_party_id,
6813 									  p_prefix =>l_debug_prefix,
6814 									  p_msg_level=>fnd_log.level_statement);
6815 					END IF;
6816 
6817 				  SELECT party_type,party_name
6818 				   INTO  l_party_type,l_site_party_name
6819 				  FROM   hz_parties
6820 				  WHERE  party_id = l_site_party_id ;
6821 					 -- Debug info.
6822 					IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6823 					  hz_utility_v2pub.debug(p_message=>' Site Party Type : '||l_party_type||' Site Party Name : '||l_site_party_name,
6824 									  p_prefix =>l_debug_prefix,
6825 									  p_msg_level=>fnd_log.level_statement);
6826 					END IF;
6827 
6828 				  SELECT party_name
6829 				   INTO  l_account_party_name
6830 				  FROM   hz_parties
6831 				  WHERE  party_id = l_account_party_id ;
6832 					 -- Debug info.
6833 					IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6834 					  hz_utility_v2pub.debug(p_message=>' Account Party Name : '||l_account_party_name,
6835 									  p_prefix =>l_debug_prefix,
6836 									  p_msg_level=>fnd_log.level_statement);
6837 					END IF;
6838 
6839 				  IF l_party_type = 'PARTY_RELATIONSHIP' THEN
6840 
6841 						BEGIN
6842 						 SELECT 'X'
6843 						  INTO l_dummy
6844 						 FROM hz_relationships
6845 						 WHERE subject_id         = l_account_party_id
6846 						 AND   subject_table_name = 'HZ_PARTIES'
6847 						 AND   party_id           = l_site_party_id
6848 					     AND   object_table_name  = 'HZ_PARTIES'
6849 						 AND   status             = 'A'
6850 						 AND   ROWNUM             = 1;
6851 						EXCEPTION
6852 						WHEN NO_DATA_FOUND THEN
6853 
6854 						-- Debug info.
6855 						 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6856 						  hz_utility_v2pub.debug(p_message=>'Party Type is PARTY_RELATIONSHIP and no record found '||
6857 											' with combination of '||l_account_party_id||'(subject_id) and '||l_site_party_id||'(Party_id)',
6858 										  p_prefix =>l_debug_prefix,
6859 										  p_msg_level=>fnd_log.level_statement);
6860 						 END IF;
6861 
6862 						 FND_MESSAGE.SET_NAME( 'AR', 'HZ_PARTY_SITE_MISSMATCH' );
6863 						 FND_MESSAGE.SET_TOKEN( 'ADDRESS_PARTY_NAME', l_site_party_name );
6864 						 FND_MESSAGE.SET_TOKEN( 'ACCOUNT_PARTY_NAME', l_account_party_name );
6865 						 FND_MESSAGE.SET_TOKEN( 'ACCOUNT_NUMBER', l_account_number );
6866 						 FND_MSG_PUB.ADD;
6867 						 x_return_status := FND_API.G_RET_STS_ERROR;
6868 						END;
6869 				  ELSE
6870 
6871 						BEGIN
6872 						 SELECT 'X'
6873 						  INTO l_dummy
6874 						 FROM hz_relationships
6875 						 WHERE subject_id         = l_account_party_id
6876 						 AND   subject_table_name = 'HZ_PARTIES'
6877 						 AND   object_id          = l_site_party_id
6878 					     AND   object_table_name  = 'HZ_PARTIES'
6879 						 AND   status             = 'A'
6880 						 AND   ROWNUM             = 1;
6881 						EXCEPTION
6882 						WHEN NO_DATA_FOUND THEN
6883 						  -- Debug info.
6884 						 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6885 						  hz_utility_v2pub.debug(p_message=>'Party Type is not a PARTY_RELATIONSHIP and no record found '||
6886 											' with combination of '||l_account_party_id||'(subject_id) and '||l_site_party_id||'(object_id)',
6887 										  p_prefix =>l_debug_prefix,
6888 										  p_msg_level=>fnd_log.level_statement);
6889 						 END IF;
6890 						FND_MESSAGE.SET_NAME( 'AR', 'HZ_PARTY_SITE_MISSMATCH' );
6891 						FND_MESSAGE.SET_TOKEN( 'ADDRESS_PARTY_NAME', l_site_party_name );
6892 						FND_MESSAGE.SET_TOKEN( 'ACCOUNT_PARTY_NAME', l_account_party_name );
6893 						FND_MESSAGE.SET_TOKEN( 'ACCOUNT_NUMBER', l_account_number );
6894 						FND_MSG_PUB.ADD;
6895 						x_return_status := FND_API.G_RET_STS_ERROR;
6896 					   END;
6897 				  END IF;
6898 
6899 				 EXCEPTION
6900 				 WHEN NO_DATA_FOUND THEN
6901 				 -- Debug info.
6902 				 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6903 					  hz_utility_v2pub.debug(p_message=>'Site Party ID : '||l_site_party_id
6904 														 ||' or Account Party ID : '||l_account_party_id||' is Invalid',
6905 									  p_prefix =>l_debug_prefix,
6906 									  p_msg_level=>fnd_log.level_statement);
6907 				 END IF;
6908 				 END;
6909 
6910 		    END IF;
6911 		    IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6912                hz_utility_v2pub.debug(p_message=>'validate_accnt_party_site (-)',
6913                                p_prefix=>l_debug_prefix,
6914                                p_msg_level=>fnd_log.level_procedure);
6915             END IF;
6916 		EXCEPTION
6917 		WHEN NO_DATA_FOUND THEN
6918              -- Debug info.
6919              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6920                   hz_utility_v2pub.debug(p_message=>'Account Id '||p_cust_acct_site_rec.cust_account_id||
6921 				                                    ' or Party Site Id '||p_cust_acct_site_rec.party_site_id||' is Invalid',
6922                                   p_prefix =>l_debug_prefix,
6923                                   p_msg_level=>fnd_log.level_statement);
6924              END IF;
6925         END;
6926 
6927 END validate_accnt_party_site;
6928 
6929 /**
6930  * PROCEDURE validate_cust_acct_site
6931  *
6932  * DESCRIPTION
6933  *     Validates customer account site record. Checks for
6934  *         uniqueness
6935  *         lookup types
6936  *         mandatory columns
6937  *         non-updateable fields
6938  *         foreign key validations
6939  *         other validations
6940  *
6941  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
6942  *
6943  * ARGUMENTS
6944  *   IN:
6945  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
6946  *     p_cust_acct_site_rec           Customer account site record.
6947  *     p_rowid                        Rowid of the record (used only in update mode).
6948  *   IN/OUT:
6949  *     x_return_status                Return status after the call. The status can
6950  *                                    be FND_API.G_RET_STS_SUCCESS (success),
6951  *                                    FND_API.G_RET_STS_ERROR (error),
6952  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6953  *
6954  * NOTES
6955  *
6956  * MODIFICATION HISTORY
6957  *
6958  *   07-23-2001    Jianying Huang      o Created.
6959  *   10-25-2002    P.Suresh            o Bug No : 2528119. Added validation for ece_tp_location_code
6960  *                                       in validate_cust_acct_site procedure.
6961  *   12-MAY-2005   Rajib Ranjan Borah  o TCA SSA Uptake (Bug 3456489)
6962  */
6963 
6964 PROCEDURE validate_cust_acct_site (
6965     p_create_update_flag                    IN     VARCHAR2,
6966     p_cust_acct_site_rec                    IN     HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_ACCT_SITE_REC_TYPE,
6967     p_rowid                                 IN     ROWID,
6968     x_return_status                         IN OUT NOCOPY VARCHAR2
6969 ) IS
6970 
6971     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_acct_site'
6972 
6973     l_dummy                                 VARCHAR2(1);
6974     l_rowid                                 ROWID := NULL;
6975 
6976     l_cust_account_id                       NUMBER;
6977     l_party_site_id                         NUMBER;
6978     l_orig_system_reference                 HZ_CUST_ACCT_SITES.orig_system_reference%TYPE;
6979     l_orig_system_reference1                 HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
6980     l_created_by_module                     HZ_CUST_ACCT_SITES.created_by_module%TYPE;
6981     l_application_id                        NUMBER;
6982     l_status                                HZ_CUST_ACCT_SITES.status%TYPE;
6983     l_customer_category_code                HZ_CUST_ACCT_SITES.customer_category_code%TYPE;
6984     l_count                                 NUMBER := 0;
6985     l_instr_length  number := 0;
6986     l_validate_flag varchar2(1) := 'Y';
6987     l_mosr_owner_table_id number;
6988 
6989     l_temp_return_status   VARCHAR2(10); -- for storing return status from
6990                                          -- hz_orig_system_ref_pub.get_owner_table_id
6991 
6992 BEGIN
6993 
6994     -- Check if API is called in debug mode. If yes, enable debug.
6995     --enable_debug;
6996 
6997     -- Debug info.
6998 
6999     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7000         hz_utility_v2pub.debug(p_message=>'validate_cust_acct_site (+)',
7001                                p_prefix=>l_debug_prefix,
7002                                p_msg_level=>fnd_log.level_procedure);
7003     END IF;
7004 
7005 
7006     -- Select fields for later use during update.
7007     IF p_create_update_flag = 'U' THEN
7008         SELECT CUST_ACCOUNT_ID, PARTY_SITE_ID, ORIG_SYSTEM_REFERENCE,
7009                CREATED_BY_MODULE, APPLICATION_ID, STATUS, CUSTOMER_CATEGORY_CODE
7010         INTO l_cust_account_id, l_party_site_id, l_orig_system_reference,
7011              l_created_by_module, l_application_id, l_status, l_customer_category_code
7012         FROM HZ_CUST_ACCT_SITES_ALL   -- Bug 3456489
7013         WHERE ROWID = p_rowid;
7014     END IF;
7015 
7016     --------------------------------------
7017     -- validate cust_acct_site_id
7018     --------------------------------------
7019 /****Logical APIs - validation not required****/
7020   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7021     IF p_create_update_flag = 'C' THEN
7022 
7023         -- If primary key value is passed, check for uniqueness.
7024         -- If primary key value is not passed, it will be generated
7025         -- from sequence by table handler.
7026 
7027         IF p_cust_acct_site_rec.cust_acct_site_id IS NOT NULL AND
7028            p_cust_acct_site_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
7029         THEN
7030         BEGIN
7031             SELECT 'Y' INTO l_dummy
7032             FROM HZ_CUST_ACCT_SITES_ALL   -- Bug 3456489
7033             WHERE CUST_ACCT_SITE_ID = p_cust_acct_site_rec.cust_acct_site_id;
7034 
7035             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7036             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id' );
7037             FND_MSG_PUB.ADD;
7038             x_return_status := FND_API.G_RET_STS_ERROR;
7039         EXCEPTION
7040             WHEN NO_DATA_FOUND THEN
7041                 NULL;
7042         END;
7043 
7044         -- Debug info.
7045 
7046         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7047            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is unique during creation if passed in. ' ||
7048                                                 'x_return_status = ' || x_return_status,
7049                                   p_prefix =>l_debug_prefix,
7050                                   p_msg_level=>fnd_log.level_statement);
7051         END IF;
7052         END IF;
7053     END IF;
7054 
7055     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7056            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
7057                                              'x_return_status = ' || x_return_status,
7058                                   p_prefix =>l_debug_prefix,
7059                                   p_msg_level=>fnd_log.level_statement);
7060     END IF;
7061   END IF;
7062 
7063     ----------------------------------------------
7064     -- validate cust_account_id
7065     ----------------------------------------------
7066 /****Logical APIs - validation not required****/
7067   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7068     -- cust_account_id is mandatory field
7069     -- Since cust_account_id is non-updateable filed, we only need to check mandatory
7070     -- during creation.
7071 
7072     IF p_create_update_flag = 'C' THEN
7073         validate_mandatory (
7074             p_create_update_flag                    => p_create_update_flag,
7075             p_column                                => 'cust_account_id',
7076             p_column_value                          => p_cust_acct_site_rec.cust_account_id,
7077             x_return_status                         => x_return_status );
7078 
7079         -- Debug info.
7080 
7081         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7082             hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
7083                                                   'x_return_status = ' || x_return_status,
7084                                   p_prefix =>l_debug_prefix,
7085                                   p_msg_level=>fnd_log.level_statement);
7086         END IF;
7087     END IF;
7088 
7089     -- cust_account_id is non-updateable field
7090     IF p_create_update_flag = 'U' AND
7091        p_cust_acct_site_rec.cust_account_id IS NOT NULL
7092     THEN
7093         validate_nonupdateable (
7094             p_column                                => 'cust_account_id',
7095             p_column_value                          => p_cust_acct_site_rec.cust_account_id,
7096             p_old_column_value                      => l_cust_account_id,
7097             x_return_status                         => x_return_status );
7098 
7099         -- Debug info.
7100 
7101         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7102             hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
7103                                            'x_return_status = ' || x_return_status,
7104                                   p_prefix =>l_debug_prefix,
7105                                   p_msg_level=>fnd_log.level_statement);
7106         END IF;
7107     END IF;
7108 
7109     -- cust_account_id is foreign key of hz_cust_accounts
7110     -- Do not need to check during update because cust_account_id is
7111     -- non-updateable.
7112     IF p_create_update_flag = 'C' THEN
7113         IF p_cust_acct_site_rec.cust_account_id <> -1 AND
7114            p_cust_acct_site_rec.cust_account_id IS NOT NULL AND
7115            p_cust_acct_site_rec.cust_account_id <> FND_API.G_MISS_NUM
7116         THEN
7117             check_cust_account_fk (
7118                 p_column                                 => 'cust_account_id',
7119                 p_column_value                           => p_cust_acct_site_rec.cust_account_id,
7120                 x_return_status                          => x_return_status );
7121 
7122             -- Debug info.
7123 
7124             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7125                  hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key of hz_cust_accounts. ' ||
7126                                                    'x_return_status = ' || x_return_status,
7127                                   p_prefix =>l_debug_prefix,
7128                                   p_msg_level=>fnd_log.level_statement);
7129             END IF;
7130         END IF;
7131     END IF;
7132 
7133     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7134            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
7135                                              'x_return_status = ' || x_return_status,
7136                                   p_prefix =>l_debug_prefix,
7137                                   p_msg_level=>fnd_log.level_statement);
7138     END IF;
7139   END IF;
7140 
7141     ----------------------------------------------
7142     -- validate party_site_id
7143     ----------------------------------------------
7144 /****Logical APIs - validation not required****/
7145   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7146     -- party_site_id is mandatory field
7147     -- Since party_site_id is non-updateable filed, we only need to check mandatory
7148     -- during creation.
7149 
7150     IF p_create_update_flag = 'C' THEN
7151         validate_mandatory (
7152             p_create_update_flag                    => p_create_update_flag,
7153             p_column                                => 'party_site_id',
7154             p_column_value                          => p_cust_acct_site_rec.party_site_id,
7155             x_return_status                         => x_return_status );
7156 
7157         -- Debug info.
7158 
7159         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7160            hz_utility_v2pub.debug(p_message=>'party_site_id is mandatory. ' ||
7161                                                 'x_return_status = ' || x_return_status,
7162                                   p_prefix =>l_debug_prefix,
7163                                   p_msg_level=>fnd_log.level_statement);
7164         END IF;
7165     END IF;
7166 
7167     -- party_site_id is non-updateable field
7168     IF p_create_update_flag = 'U' AND
7169        p_cust_acct_site_rec.party_site_id IS NOT NULL
7170     THEN
7171         validate_nonupdateable (
7172             p_column                                => 'party_site_id',
7173             p_column_value                          => p_cust_acct_site_rec.party_site_id,
7174             p_old_column_value                      => l_party_site_id,
7175             x_return_status                         => x_return_status );
7176 
7177         -- Debug info.
7178 
7179         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7180            hz_utility_v2pub.debug(p_message=>'party_site_id is non-updateable. ' ||
7181                                              'x_return_status = ' || x_return_status,
7182                                   p_prefix =>l_debug_prefix,
7183                                   p_msg_level=>fnd_log.level_statement);
7184         END IF;
7185     END IF;
7186 
7187     -- party_site_id is foreign key of hz_party_sites
7188     -- Do not need to check during update because party_site_id is
7189     -- non-updateable.
7190     IF p_create_update_flag = 'C' AND
7191        p_cust_acct_site_rec.party_site_id IS NOT NULL AND
7192        p_cust_acct_site_rec.party_site_id <> FND_API.G_MISS_NUM
7193     THEN
7194         check_party_site_fk (
7195             p_column                                => 'party_site_id',
7196             p_column_value                          => p_cust_acct_site_rec.party_site_id,
7197             x_return_status                         => x_return_status );
7198 
7199         -- Debug info.
7200 
7201         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7202            hz_utility_v2pub.debug(p_message=>'party_site_id is foreign key of hz_party_sites. ' ||
7203                                                  'x_return_status = ' || x_return_status,
7204                                   p_prefix =>l_debug_prefix,
7205                                   p_msg_level=>fnd_log.level_statement);
7206         END IF;
7207 
7208 
7209 
7210        -- Bug 2197181: Because of Mix-n-Match project, location from 3rd party content
7211        -- providers can now be used in the business flow. Therefore, removing restriction
7212        -- that the "party_site_id must link to a 'USER_ENTERED' location".
7213 
7214 /*
7215 
7216         --- party_site_id must link to a 'USER_ENTERED' location
7217         BEGIN
7218             SELECT 'Y' INTO l_dummy
7219             FROM HZ_LOCATIONS
7220             WHERE LOCATION_ID = (
7221                 SELECT LOCATION_ID
7222                 FROM HZ_PARTY_SITES
7223                 WHERE PARTY_SITE_ID = p_cust_acct_site_rec.party_site_id )
7224             AND CONTENT_SOURCE_TYPE = HZ_PARTY_V2PUB.G_MISS_CONTENT_SOURCE_TYPE;
7225 
7226         EXCEPTION
7227             WHEN NO_DATA_FOUND THEN
7228                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_LOC_CONTENT_INVALID' );
7229                 FND_MSG_PUB.ADD;
7230                 x_return_status := FND_API.G_RET_STS_ERROR;
7231         END;
7232 
7233         -- Debug info.
7234         IF G_DEBUG THEN
7235             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7236                 'party_site_id must link to a USER_ENTERED location. ' ||
7237                 'x_return_status = ' || x_return_status, l_debug_prefix );
7238         END IF;
7239 
7240 */
7241       --Bug 9967304
7242 	  --Validating Party associated with address and party associated with account
7243 	  IF p_create_update_flag = 'C' THEN
7244 
7245        validate_accnt_party_site(
7246 		p_cust_acct_site_rec  => p_cust_acct_site_rec,
7247 		x_return_status       => x_return_status);
7248 
7249 	  	    -- Debug info.
7250         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7251            hz_utility_v2pub.debug(p_message=>'Account Party and Site Party are related. ' ||
7252                                                 'x_return_status = ' || x_return_status,
7253                                   p_prefix =>l_debug_prefix,
7254                                   p_msg_level=>fnd_log.level_statement);
7255         END IF;
7256 
7257       END IF;
7258 	   -- End of 9967304
7259 
7260 
7261         -- cust_account_id and party_site_id together should be unique.
7262         -- Bug 3456489. Post MOAC, this uniqueness should be within orgs.
7263         BEGIN
7264             SELECT 'Y' INTO l_dummy
7265             FROM HZ_CUST_ACCT_SITES_ALL   -- Bug 3456489
7266             WHERE CUST_ACCOUNT_ID = p_cust_acct_site_rec.cust_account_id
7267             AND PARTY_SITE_ID = p_cust_acct_site_rec.party_site_id
7268             AND ORG_ID = p_cust_acct_site_rec.org_id   -- Bug 3456489
7269             AND ROWNUM = 1;
7270 
7271             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7272             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_site_id' );
7273             FND_MSG_PUB.ADD;
7274             x_return_status := FND_API.G_RET_STS_ERROR;
7275         EXCEPTION
7276             WHEN NO_DATA_FOUND THEN
7277                 NULL;
7278         END;
7279 
7280         -- Debug info.
7281 
7282         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7283            hz_utility_v2pub.debug(p_message=>'cust_account_id and party_site_id together should be unique. ' ||
7284                                                 'x_return_status = ' || x_return_status,
7285                                   p_prefix =>l_debug_prefix,
7286                                   p_msg_level=>fnd_log.level_statement);
7287         END IF;
7288     END IF;
7289 
7290     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7291            hz_utility_v2pub.debug(p_message=>'(+) after validate party_site_id ... ' ||
7292                                         'x_return_status = ' || x_return_status,
7293                                   p_prefix =>l_debug_prefix,
7294                                   p_msg_level=>fnd_log.level_statement);
7295     END IF;
7296   END IF;
7297 
7298     ----------------------------------------------
7299     -- validate orig_system_reference
7300     ----------------------------------------------
7301 /****Logical APIs - validation not required****/
7302   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7303     -- orig_system_reference is unique. Since orig_system_refence is defaulting to
7304     -- primary key, we only need to check the uniqueness if user passes some value.
7305     -- database constraints can catch unique error when we defaulting.
7306     -- orig_system_reference is non-updateable, we only need to check uniqueness
7307     -- during creation.
7308 
7309     -- Bug 3456489. Post MOAC, this uniqeness should be within orgs.
7310     IF p_create_update_flag = 'C' AND
7311        p_cust_acct_site_rec.orig_system_reference IS NOT NULL AND
7312        p_cust_acct_site_rec.orig_system_reference <> FND_API.G_MISS_CHAR
7313     THEN
7314     BEGIN
7315         SELECT 'Y' INTO l_dummy
7316         FROM HZ_CUST_ACCT_SITES_ALL
7317         WHERE ORIG_SYSTEM_REFERENCE = p_cust_acct_site_rec.orig_system_reference
7318         AND   ORG_ID = p_cust_acct_site_rec.org_id;
7319 
7320         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7321         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'orig_system_reference' );
7322         FND_MSG_PUB.ADD;
7323         x_return_status := FND_API.G_RET_STS_ERROR;
7324     EXCEPTION
7325         WHEN NO_DATA_FOUND THEN
7326             NULL;
7327     END;
7328 
7329     -- Debug info.
7330 
7331     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7332            hz_utility_v2pub.debug(p_message=>'orig_system_reference is unique if passed in. ' ||
7333                          'x_return_status = ' || x_return_status,
7334                                   p_prefix =>l_debug_prefix,
7335                                   p_msg_level=>fnd_log.level_statement);
7336     END IF;
7337 
7338     END IF;
7339 
7340     -- orig_system_reference is non-updateable field
7341     l_instr_length := instr(l_orig_system_reference,'#@');
7342     if l_instr_length > 0
7343     then
7344         l_orig_system_reference1 := null;
7345         if  substr(l_orig_system_reference,1,l_instr_length-1) <> p_cust_acct_site_rec.orig_system_reference
7346         then
7347                 l_validate_flag := 'N';
7348         end if;
7349     else
7350         l_orig_system_reference1 := p_cust_acct_site_rec.orig_system_reference;
7351     end if;
7352 
7353    IF (p_cust_acct_site_rec.orig_system is not null and p_cust_acct_site_rec.orig_system <>fnd_api.g_miss_char)
7354     and (p_cust_acct_site_rec.orig_system_reference is not null and p_cust_acct_site_rec.orig_system_reference <>fnd_api.g_miss_char)
7355     and p_create_update_flag = 'U'
7356    then
7357         hz_orig_system_ref_pub.get_owner_table_id
7358         (p_orig_system => p_cust_acct_site_rec.orig_system,
7359         p_orig_system_reference => p_cust_acct_site_rec.orig_system_reference,
7360         p_owner_table_name => 'HZ_CUST_ACCT_SITES_ALL',
7361         x_owner_table_id => l_mosr_owner_table_id,
7362         x_return_status => l_temp_return_status);
7363 
7364         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
7365 		    l_mosr_owner_table_id= nvl(p_cust_acct_site_rec.cust_acct_site_id,l_mosr_owner_table_id))
7366         THEN
7367                 l_validate_flag := 'N';
7368         END IF;
7369 
7370         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
7371 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
7372 		-- In case of success, leave it to carry over previous value as before this call.
7373 		-- Fix for Bug 5498116 (29-AUG-2006)
7374         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
7375           x_return_status := l_temp_return_status;
7376         END IF;
7377 
7378     end if;
7379     -- orig_system_reference is non-updateable field
7380     IF p_create_update_flag = 'U' AND
7381        p_cust_acct_site_rec.orig_system_reference IS NOT NULL
7382        and l_validate_flag = 'Y'
7383     THEN
7384         validate_nonupdateable (
7385             p_column                                => 'orig_system_reference',
7386             p_column_value                          => p_cust_acct_site_rec.orig_system_reference,
7387             p_old_column_value                      => l_orig_system_reference,
7388             x_return_status                         => x_return_status );
7389 
7390         -- Debug info.
7391 
7392         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7393            hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
7394                            'x_return_status = ' || x_return_status,
7395                                   p_prefix =>l_debug_prefix,
7396                                   p_msg_level=>fnd_log.level_statement);
7397         END IF;
7398     END IF;
7399 
7400     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7401            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
7402             'x_return_status = ' || x_return_status,
7403                                   p_prefix =>l_debug_prefix,
7404                                   p_msg_level=>fnd_log.level_statement);
7405     END IF;
7406   END IF;
7407 
7408     --------------------------------------
7409     -- validate tp_header_id
7410     --------------------------------------
7411 
7412     -- We have unique index on tp_header_id
7413 
7414     IF p_cust_acct_site_rec.tp_header_id IS NOT NULL AND
7415        p_cust_acct_site_rec.tp_header_id <> FND_API.G_MISS_NUM
7416     THEN
7417     BEGIN
7418         SELECT ROWID INTO l_rowid
7419         FROM HZ_CUST_ACCT_SITES_ALL
7420         WHERE TP_HEADER_ID = p_cust_acct_site_rec.tp_header_id
7421           AND ORG_ID = p_cust_acct_site_rec.org_id;  -- Bug 3456489
7422 
7423         IF p_create_update_flag = 'C' OR
7424            ( p_create_update_flag = 'U' AND l_rowid <> p_rowid )
7425         THEN
7426             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7427             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'tp_header_id' );
7428             FND_MSG_PUB.ADD;
7429             x_return_status := FND_API.G_RET_STS_ERROR;
7430         END IF;
7431     EXCEPTION
7432         WHEN NO_DATA_FOUND THEN
7433             NULL;
7434     END;
7435 
7436     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7437            hz_utility_v2pub.debug(p_message=>'tp_header_id is unique if passed in. ' ||
7438                                                  'x_return_status = ' || x_return_status,
7439                                   p_prefix =>l_debug_prefix,
7440                                   p_msg_level=>fnd_log.level_statement);
7441     END IF;
7442 
7443     END IF;
7444 
7445     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7446            hz_utility_v2pub.debug(p_message=>'(+) after validate tp_header_id ... ' ||
7447                                                  'x_return_status = ' || x_return_status,
7448                                   p_prefix =>l_debug_prefix,
7449                                   p_msg_level=>fnd_log.level_statement);
7450     END IF;
7451 
7452     --------------------------------------
7453     -- validate status
7454     --------------------------------------
7455 
7456     -- status cannot be set to null during update
7457     IF p_create_update_flag = 'U' AND
7458        p_cust_acct_site_rec.status IS NOT NULL
7459     THEN
7460         validate_cannot_update_to_null (
7461             p_column                                => 'status',
7462             p_column_value                          => p_cust_acct_site_rec.status,
7463             x_return_status                         => x_return_status );
7464 
7465         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7466            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
7467                                                  'x_return_status = ' || x_return_status,
7468                                   p_prefix =>l_debug_prefix,
7469                                   p_msg_level=>fnd_log.level_statement);
7470         END IF;
7471     END IF;
7472 
7473 /****Logical APIs - validation not required****/
7474   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7475     -- status is lookup code in lookup type CODE_STATUS
7476     IF p_cust_acct_site_rec.status IS NOT NULL AND
7477        p_cust_acct_site_rec.status <> FND_API.G_MISS_CHAR AND
7478        ( p_create_update_flag = 'C' OR
7479          ( p_create_update_flag = 'U'  AND
7480            p_cust_acct_site_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
7481     THEN
7482         validate_lookup (
7483             p_column                                => 'status',
7484             p_lookup_type                           => 'CODE_STATUS',
7485             p_column_value                          => p_cust_acct_site_rec.status,
7486             x_return_status                         => x_return_status );
7487 
7488         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7489            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
7490                                                 'x_return_status = ' || x_return_status,
7491                                   p_prefix =>l_debug_prefix,
7492                                   p_msg_level=>fnd_log.level_statement);
7493         END IF;
7494 
7495     END IF;
7496 
7497     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7498            hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
7499                                                  'x_return_status = ' || x_return_status,
7500                                   p_prefix =>l_debug_prefix,
7501                                   p_msg_level=>fnd_log.level_statement);
7502     END IF;
7503   END IF;
7504 
7505     ----------------------------------------------
7506     -- validate customer_category_code
7507     ----------------------------------------------
7508 
7509     -- customer_category_code is lookup code in lookup type ADDRESS_CATEGORY
7510     IF p_cust_acct_site_rec.customer_category_code IS NOT NULL AND
7511        p_cust_acct_site_rec.customer_category_code <> FND_API.G_MISS_CHAR AND
7512        ( p_create_update_flag = 'C' OR
7513          ( p_create_update_flag = 'U'  AND
7514            p_cust_acct_site_rec.customer_category_code <> NVL( l_customer_category_code, FND_API.G_MISS_CHAR ) ) )
7515     THEN
7516         validate_lookup (
7517             p_column                                => 'customer_category_code',
7518             p_lookup_type                           => 'ADDRESS_CATEGORY',
7519             p_column_value                          => p_cust_acct_site_rec.customer_category_code,
7520             x_return_status                         => x_return_status );
7521 
7522         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7523            hz_utility_v2pub.debug(p_message=>'customer_category_code is lookup code in lookup type ADDRESS_CATEGORY. ' ||
7524                                                  'x_return_status = ' || x_return_status,
7525                                   p_prefix =>l_debug_prefix,
7526                                   p_msg_level=>fnd_log.level_statement);
7527         END IF;
7528     END IF;
7529 
7530     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7531            hz_utility_v2pub.debug(p_message=>'(+) after validate customer_category_code ... ' ||
7532                                                 'x_return_status = ' || x_return_status,
7533                                   p_prefix =>l_debug_prefix,
7534                                   p_msg_level=>fnd_log.level_statement);
7535     END IF;
7536 
7537     /* comment out the validation as the language column is obsoleted in r12
7538     ----------------------------------------------
7539     -- validate language
7540     ----------------------------------------------
7541 
7542     -- language is foreign key of fnd installed languages
7543     IF p_cust_acct_site_rec.language IS NOT NULL AND
7544        p_cust_acct_site_rec.language <> FND_API.G_MISS_CHAR
7545     THEN
7546     BEGIN
7547         SELECT 'Y' INTO l_dummy
7548         FROM FND_LANGUAGES
7549         WHERE LANGUAGE_CODE = p_cust_acct_site_rec.language
7550         AND INSTALLED_FLAG IN ('B', 'I')
7551         AND ROWNUM = 1;
7552     EXCEPTION
7553         WHEN NO_DATA_FOUND THEN
7554             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
7555             FND_MESSAGE.SET_TOKEN( 'FK', 'language' );
7556             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'language_code' );
7557             FND_MESSAGE.SET_TOKEN( 'TABLE', 'fnd_languages(installed)' );
7558             FND_MSG_PUB.ADD;
7559             x_return_status := FND_API.G_RET_STS_ERROR;
7560     END;
7561 
7562     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7563            hz_utility_v2pub.debug(p_message=>'language is foreign key of fnd installed languages. ' ||
7564                                          'x_return_status = ' || x_return_status,
7565                                   p_prefix =>l_debug_prefix,
7566                                   p_msg_level=>fnd_log.level_statement);
7567     END IF;
7568 
7569     END IF;
7570 
7571     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7572            hz_utility_v2pub.debug(p_message=>'(+) after validate language ... ' ||
7573                                                 'x_return_status = ' || x_return_status,
7574                                   p_prefix =>l_debug_prefix,
7575                                   p_msg_level=>fnd_log.level_statement);
7576     END IF;
7577     */
7578 
7579     --------------------------------------
7580     -- validate primary_specialist_id
7581     --------------------------------------
7582 
7583     -- primary_specialist_id is foreign key to per_all_people_f
7584     IF p_cust_acct_site_rec.primary_specialist_id IS NOT NULL AND
7585        p_cust_acct_site_rec.primary_specialist_id <> FND_API.G_MISS_NUM
7586     THEN
7587         check_per_all_people_f_fk (
7588             p_column                                 => 'primary_specialist_id',
7589             p_column_value                           => p_cust_acct_site_rec.primary_specialist_id,
7590             x_return_status                          => x_return_status );
7591 
7592         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7593            hz_utility_v2pub.debug(p_message=>'primary_specialist_id is foreign key to per_all_people_f. ' ||
7594                                                 'x_return_status = ' || x_return_status,
7595                                   p_prefix =>l_debug_prefix,
7596                                   p_msg_level=>fnd_log.level_statement);
7597         END IF;
7598     END IF;
7599 
7600     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7601            hz_utility_v2pub.debug(p_message=>'(+) after validate primary_specialist_id ... ' ||
7602                                                  'x_return_status = ' || x_return_status,
7603                                   p_prefix =>l_debug_prefix,
7604                                   p_msg_level=>fnd_log.level_statement);
7605     END IF;
7606 
7607     --------------------------------------
7608     -- validate secondary_specialist_id
7609     --------------------------------------
7610 
7611     -- secondary_specialist_id is foreign key to per_all_people_f
7612     IF p_cust_acct_site_rec.secondary_specialist_id IS NOT NULL AND
7613        p_cust_acct_site_rec.secondary_specialist_id <> FND_API.G_MISS_NUM
7614     THEN
7615     /* Bug 3591694 Changed foreign key validation from check_cust_account_fk to
7616                    check_per_all_people_f_fk.
7617     */
7618     --   check_cust_account_fk (
7619          check_per_all_people_f_fk(
7620             p_column                                 => 'secondary_specialist_id',
7621             p_column_value                           => p_cust_acct_site_rec.secondary_specialist_id,
7622             x_return_status                          => x_return_status );
7623 
7624         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7625            hz_utility_v2pub.debug(p_message=>'secondary_specialist_id is foreign key to per_all_people_f. ' ||
7626                               'x_return_status = ' || x_return_status,
7627                                   p_prefix =>l_debug_prefix,
7628                                   p_msg_level=>fnd_log.level_statement);
7629         END IF;
7630     END IF;
7631 
7632     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7633            hz_utility_v2pub.debug(p_message=>'(+) after validate secondary_specialist_id ... ' ||
7634                                    'x_return_status = ' || x_return_status,
7635                                   p_prefix =>l_debug_prefix,
7636                                   p_msg_level=>fnd_log.level_statement);
7637     END IF;
7638 
7639     --------------------------------------
7640     -- validate created_by_module
7641     --------------------------------------
7642 
7643     validate_created_by_module(
7644       p_create_update_flag     => p_create_update_flag,
7645       p_created_by_module      => p_cust_acct_site_rec.created_by_module,
7646       p_old_created_by_module  => l_created_by_module,
7647       x_return_status          => x_return_status);
7648 
7649     --------------------------------------
7650     -- validate application_id
7651     --------------------------------------
7652 
7653     validate_application_id(
7654       p_create_update_flag     => p_create_update_flag,
7655       p_application_id         => p_cust_acct_site_rec.application_id,
7656       p_old_application_id     => l_application_id,
7657       x_return_status          => x_return_status);
7658 
7659     --------------------------------------
7660     -- validate ece_tp_location_code
7661     --------------------------------------
7662      IF p_create_update_flag = 'C' THEN
7663         IF p_cust_acct_site_rec.cust_account_id <> -1 AND
7664            p_cust_acct_site_rec.cust_account_id IS NOT NULL AND
7665            p_cust_acct_site_rec.cust_account_id <> FND_API.G_MISS_NUM
7666         THEN
7667           IF p_cust_acct_site_rec.ece_tp_location_code IS NOT NULL AND
7668              p_cust_acct_site_rec.ece_tp_location_code <> FND_API.G_MISS_CHAR
7669           THEN
7670              select  count(1)
7671              into    l_count
7672              from    hz_cust_acct_sites_all addr  -- Bug 3456489
7673              where   addr.cust_account_id        = p_cust_acct_site_rec.cust_account_id
7674              and     addr.ece_tp_location_code   = p_cust_acct_site_rec.ece_tp_location_code
7675              and     org_id                      = p_cust_acct_site_rec.org_id; -- Bug 3456489
7676 
7677              IF l_count > 0 THEN
7678                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ADDR_EDI_LOC_EXISTS' );
7679                 FND_MSG_PUB.ADD;
7680                 x_return_status := FND_API.G_RET_STS_ERROR;
7681              END IF;
7682           END IF;
7683         END IF;
7684      ELSIF p_create_update_flag = 'U' THEN
7685         IF p_cust_acct_site_rec.ece_tp_location_code IS NOT NULL AND
7686            p_cust_acct_site_rec.ece_tp_location_code <> FND_API.G_MISS_CHAR
7687         THEN
7688              select  count(1)
7689              into    l_count
7690              from    hz_cust_acct_sites_all addr   -- Bug 3456489
7691              where   addr.cust_account_id        = l_cust_account_id
7692              and     addr.ece_tp_location_code   = p_cust_acct_site_rec.ece_tp_location_code
7693              and     addr.cust_acct_site_id      <> p_cust_acct_site_rec.cust_acct_site_id
7694              and     org_id                      = p_cust_acct_site_rec.org_id;  -- Bug 3456489
7695 
7696              IF l_count > 0 THEN
7697                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ADDR_EDI_LOC_EXISTS' );
7698                 FND_MSG_PUB.ADD;
7699                 x_return_status := FND_API.G_RET_STS_ERROR;
7700              END IF;
7701          END IF;
7702      END IF;
7703 
7704      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7705            hz_utility_v2pub.debug(p_message=>'The ece_tp_location_code should be unique for a customer ' ||
7706                                                  'x_return_status = ' || x_return_status,
7707                                   p_prefix =>l_debug_prefix,
7708                                   p_msg_level=>fnd_log.level_statement);
7709     END IF;
7710 
7711     -- Debug info.
7712 
7713     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7714         hz_utility_v2pub.debug(p_message=>'validate_cust_acct_site (-)',
7715                                p_prefix=>l_debug_prefix,
7716                                p_msg_level=>fnd_log.level_procedure);
7717     END IF;
7718 
7719     -- Check if API is called in debug mode. If yes, disable debug.
7720     --disable_debug;
7721 
7722 END validate_cust_acct_site;
7723 
7724 /**
7725  * PROCEDURE validate_cust_site_use
7726  *
7727  * DESCRIPTION
7728  *     Validates customer account site use record. Checks for
7729  *         uniqueness
7730  *         lookup types
7731  *         mandatory columns
7732  *         non-updateable fields
7733  *         foreign key validations
7734  *         other validations
7735  *
7736  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
7737  *
7738  * ARGUMENTS
7739  *   IN:
7740  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
7741  *     p_cust_site_use_rec            Customer account site use record.
7742  *     p_rowid                        Rowid of the record (used only in update mode).
7743  *   IN/OUT:
7744  *     x_return_status                Return status after the call. The status can
7745  *                                    be FND_API.G_RET_STS_SUCCESS (success),
7746  *                                    FND_API.G_RET_STS_ERROR (error),
7747  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
7748  *
7749  * NOTES
7750  *
7751  * MODIFICATION HISTORY
7752  *
7753  *   07-23-2001    Jianying Huang      o Created.
7754  *   11-08-2001    Rajeshwari P          Added validations  for fields, tax_code,payment_term_id,
7755  *                                       demand_class_codeprimary_salesrep_id,finchrg_receivables_trx_id,
7756  *                                       order_type_id,order_type_id,ship_partial,item_cross_ref_pref,
7757  *                                       warehouse_id,date_type_preference,
7758  *                                       ship_sets_include_lines_flag and arrivalsets_include_lines_flag
7759  *                                       in procedure VALIDATE_CUST_SITE_USE.
7760  *   03-26-2002    P.Suresh              Bug No : 2266165. Added the check that bill_to_flag of
7761  *                                       hz_cust_acct_relate_all table should be Y when validating
7762  *                                       bill_to_site_use_id.
7763  *   04-11-2002    P.Suresh              Bug No : 2260832. Added the check for the status
7764  *                                       when validating that only one primary is allowed for
7765  *                                       one site use type per account in the procedure
7766  *                                       validate_cust_site_use.
7767  *   21-05-2002   Rajeshwari P           Bug fix 2311760.Commented the code which validates the
7768  *                                       Obsolete column ship_partial.
7769  *   06-13-2002    P.Suresh              Bug No : 2403263. Added validation that the contact_id
7770  *                                       should be a foreign key to hz_cust_account_roles.
7771  *                                       cust_account_role_id.
7772  *   06-19-2002   Rajeshwari P           Bug 2399491.Validating site_use_id for duplicates
7773  *                                       against hz_cust_site_uses_all table instead of the
7774  *                                       org stripped view, hz_cust_site_uses.
7775  *   03-May-3004 Venkata Sowjanya S      Bug No : 3609601. Commented the statements which sets tokens Column1,Column2
7776  *                                        for message HZ_API_INACTIVE_CANNOT_PRIM
7777  *   12-MAY-2005   Rajib Ranjan Borah  o TCA SSA Uptake (Bug 3456489)
7778  */
7779 
7780 PROCEDURE validate_cust_site_use (
7781     p_create_update_flag                    IN     VARCHAR2,
7782     p_cust_site_use_rec                     IN     HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE,
7783     p_rowid                                 IN     ROWID,
7784     x_return_status                         IN OUT NOCOPY VARCHAR2
7785 ) IS
7786 
7787     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_site_use'
7788 
7789     l_dummy                                 VARCHAR2(1);
7790     l_profile                               AR_SYSTEM_PARAMETERS.auto_site_numbering%TYPE;
7791 
7792     l_cust_acct_site_id                     NUMBER;
7793     l_site_use_code                         HZ_CUST_SITE_USES.site_use_code%TYPE;
7794     l_cust_account_id                       NUMBER;
7795     l_orig_system_reference                 HZ_CUST_SITE_USES.orig_system_reference%TYPE;
7796     l_created_by_module                     HZ_CUST_SITE_USES.created_by_module%TYPE;
7797     l_application_id                        NUMBER;
7798     l_status                                HZ_CUST_SITE_USES.status%TYPE;
7799     l_ship_via                              HZ_CUST_SITE_USES.ship_via%TYPE;
7800     l_freight_term                          HZ_CUST_SITE_USES.freight_term%TYPE;
7801     l_ship_sets_inc_lines_f                 HZ_CUST_SITE_USES.ship_sets_include_lines_flag%TYPE;
7802     l_arrivalsets_inc_lines_f               HZ_CUST_SITE_USES.arrivalsets_include_lines_flag%TYPE;
7803     l_tax_code                              HZ_CUST_SITE_USES.tax_code%TYPE;
7804     l_payment_term_id                       HZ_CUST_SITE_USES.payment_term_id%TYPE;
7805     l_demand_class_code                     HZ_CUST_SITE_USES.demand_class_code%TYPE;
7806     l_primary_salesrep_id                   HZ_CUST_SITE_USES.primary_salesrep_id%TYPE;
7807     l_finchrg_receivables_trx_id            HZ_CUST_SITE_USES.FINCHRG_RECEIVABLES_TRX_ID%TYPE;
7808     l_order_type_id                         HZ_CUST_SITE_USES.ORDER_TYPE_ID%TYPE;
7809     l_price_list_id                         HZ_CUST_SITE_USES.PRICE_LIST_ID%TYPE;
7810 --    l_ship_partial                          HZ_CUST_SITE_USES.SHIP_PARTIAL%TYPE;
7811     l_fob_point                             HZ_CUST_SITE_USES.FOB_POINT%TYPE;
7812     l_item_cross_ref_pref                   HZ_CUST_SITE_USES.ITEM_CROSS_REF_PREF%TYPE;
7813     l_warehouse_id                          HZ_CUST_SITE_USES.WAREHOUSE_ID%TYPE;
7814     l_date_type_preference                  HZ_CUST_SITE_USES.DATE_TYPE_PREFERENCE%TYPE;
7815 --    l_ship_sets_include_lines_flag          HZ_CUST_SITE_USES.SHIP_SETS_INCLUDE_LINES_FLAG%TYPE;
7816     l_primary_flag                          HZ_CUST_SITE_USES.PRIMARY_FLAG%TYPE;
7817     l_error                                 BOOLEAN := FALSE;
7818     l_validate_flag                         varchar2(1) := 'Y';
7819     l_mosr_owner_table_id                   number;
7820     l_coa_id                                NUMBER;
7821     l_exist_flag                            VARCHAR2(1);
7822 
7823     l_temp_return_status                    VARCHAR2(10); -- for storing return status from
7824 	                                                      -- hz_orig_system_ref_pub.get_owner_table_id
7825 
7826 BEGIN
7827 
7828     -- Check if API is called in debug mode. If yes, enable debug.
7829     --enable_debug;
7830     -- Debug info.
7831 
7832     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7833         hz_utility_v2pub.debug(p_message=>'validate_cust_site_use (+)',
7834                                p_prefix=>l_debug_prefix,
7835                                p_msg_level=>fnd_log.level_procedure);
7836     END IF;
7837 
7838 
7839 
7840     -- Select fields for later use during update.
7841     IF p_create_update_flag = 'U' THEN
7842         SELECT CUST_ACCT_SITE_ID, SITE_USE_CODE, ORIG_SYSTEM_REFERENCE,
7843                CREATED_BY_MODULE, APPLICATION_ID, STATUS, SHIP_VIA, FREIGHT_TERM,
7844                SHIP_SETS_INCLUDE_LINES_FLAG,ARRIVALSETS_INCLUDE_LINES_FLAG,
7845                TAX_CODE,DEMAND_CLASS_CODE,PRIMARY_SALESREP_ID,FINCHRG_RECEIVABLES_TRX_ID,
7846                ORDER_TYPE_ID,PRICE_LIST_ID,FOB_POINT,ITEM_CROSS_REF_PREF,
7847                WAREHOUSE_ID,DATE_TYPE_PREFERENCE
7848         INTO l_cust_acct_site_id, l_site_use_code, l_orig_system_reference,
7849              l_created_by_module, l_application_id, l_status, l_ship_via, l_freight_term,
7850              l_ship_sets_inc_lines_f,l_arrivalsets_inc_lines_f,l_tax_code,l_demand_class_code,
7851              l_primary_salesrep_id,l_finchrg_receivables_trx_id,l_order_type_id,l_price_list_id,
7852              l_fob_point,l_item_cross_ref_pref,l_warehouse_id,l_date_type_preference
7853              FROM HZ_CUST_SITE_USES_ALL    -- Bug 3456489
7854         WHERE ROWID = p_rowid;
7855     END IF;
7856 
7857     --------------------------------------
7858     -- validate site_use_id
7859     --------------------------------------
7860 /****Logical APIs - validation not required****/
7861   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7862     IF p_create_update_flag = 'C' THEN
7863 
7864         -- If primary key value is passed, check for uniqueness.
7865         -- If primary key value is not passed, it will be generated
7866         -- from sequence by table handler.
7867 
7868 --Bug Fix 2399491, Checking for duplicates in the _all table.
7869 
7870         IF p_cust_site_use_rec.site_use_id IS NOT NULL AND
7871            p_cust_site_use_rec.site_use_id <> FND_API.G_MISS_NUM
7872         THEN
7873         BEGIN
7874             SELECT 'Y' INTO l_dummy
7875             FROM HZ_CUST_SITE_USES_ALL
7876             WHERE SITE_USE_ID = p_cust_site_use_rec.site_use_id;
7877 
7878             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7879             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_site_use_id' );
7880             FND_MSG_PUB.ADD;
7881             x_return_status := FND_API.G_RET_STS_ERROR;
7882         EXCEPTION
7883             WHEN NO_DATA_FOUND THEN
7884                 NULL;
7885         END;
7886 
7887         -- Debug info.
7888 
7889         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7890            hz_utility_v2pub.debug(p_message=>'site_use_id is unique during creation if passed in. ' ||
7891                                            'x_return_status = ' || x_return_status,
7892                                   p_prefix =>l_debug_prefix,
7893                                   p_msg_level=>fnd_log.level_statement);
7894         END IF;
7895 
7896         END IF;
7897     END IF;
7898 
7899     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7900            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
7901                                   'x_return_status = ' || x_return_status,
7902                                   p_prefix =>l_debug_prefix,
7903                                   p_msg_level=>fnd_log.level_statement);
7904     END IF;
7905   END IF;
7906 
7907     ----------------------------------------------
7908     -- validate cust_acct_site_id
7909     ----------------------------------------------
7910  -- for later use. It is selected from database during update.
7911   l_cust_acct_site_id := p_cust_site_use_rec.cust_acct_site_id; -- move it out of  IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) -- bug 8408630 no data found error
7912 
7913 /****Logical APIs - validation not required****/
7914   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7915     -- cust_acct_site_id is mandatory field
7916     -- Since cust_acct_site_id is non-updateable, we only need to check mandatory
7917     -- during creation.
7918 
7919     IF p_create_update_flag = 'C' THEN
7920         validate_mandatory (
7921             p_create_update_flag                    => p_create_update_flag,
7922             p_column                                => 'cust_acct_site_id',
7923             p_column_value                          => p_cust_site_use_rec.cust_acct_site_id,
7924             x_return_status                         => x_return_status );
7925 
7926         -- for later use. It is selected from database during update.
7927         --l_cust_acct_site_id := p_cust_site_use_rec.cust_acct_site_id;
7928 
7929         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7930            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is mandatory. ' ||
7931                                            'x_return_status = ' || x_return_status,
7932                                   p_prefix =>l_debug_prefix,
7933                                   p_msg_level=>fnd_log.level_statement);
7934         END IF;
7935     END IF;
7936 
7937     -- cust_acct_site_id is non-updateable field
7938     IF p_create_update_flag = 'U' AND
7939        p_cust_site_use_rec.cust_acct_site_id IS NOT NULL
7940     THEN
7941         validate_nonupdateable (
7942             p_column                                => 'cust_acct_site_id',
7943             p_column_value                          => p_cust_site_use_rec.cust_acct_site_id,
7944             p_old_column_value                      => l_cust_acct_site_id,
7945             x_return_status                         => x_return_status );
7946 
7947         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7948            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is non-updateable. ' ||
7949                                                  'x_return_status = ' || x_return_status,
7950                                   p_prefix =>l_debug_prefix,
7951                                   p_msg_level=>fnd_log.level_statement);
7952         END IF;
7953     END IF;
7954 
7955     -- Since cust_acct_site_id is mandatory and non-updateable, we only need
7956     -- to check FK during site use creation.
7957 
7958     -- cust_acct_site_id is foreign key to hz_cust_acct_sites
7959     IF p_create_update_flag = 'C' AND
7960        p_cust_site_use_rec.cust_acct_site_id IS NOT NULL AND
7961        p_cust_site_use_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
7962     THEN
7963         check_cust_acct_site_fk (
7964             p_column                                 => 'cust_acct_site_id',
7965             p_column_value                           => p_cust_site_use_rec.cust_acct_site_id,
7966             p_org_id                                 => p_cust_site_use_rec.org_id,   -- Bug 3456489
7967             x_return_status                          => x_return_status );
7968 
7969         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7970            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is foreign key to hz_cust_acct_sites. ' ||
7971                                          'x_return_status = ' || x_return_status,
7972                                   p_prefix =>l_debug_prefix,
7973                                   p_msg_level=>fnd_log.level_statement);
7974         END IF;
7975     END IF;
7976 END IF; -- 8295000
7977     -- Find customer account id this site use belongs to.
7978     -- For later use.
7979 
7980     SELECT CUST_ACCOUNT_ID INTO l_cust_account_id
7981     FROM HZ_CUST_ACCT_SITES_ALL  -- Bug 3456489
7982     WHERE CUST_ACCT_SITE_ID = l_cust_acct_site_id;
7983 
7984     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7985            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
7986                             'x_return_status = ' || x_return_status,
7987                                   p_prefix =>l_debug_prefix,
7988                                   p_msg_level=>fnd_log.level_statement);
7989     END IF;
7990   -- END IF; Bug 8295000 - move select out of  IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL)
7991 
7992 
7993     --------------------------------------
7994     -- validate status
7995     --------------------------------------
7996 
7997     -- status cannot be set to null during update
7998     IF p_create_update_flag = 'U' AND
7999        p_cust_site_use_rec.status IS NOT NULL
8000     THEN
8001         validate_cannot_update_to_null (
8002             p_column                                => 'status',
8003             p_column_value                          => p_cust_site_use_rec.status,
8004             x_return_status                         => x_return_status );
8005 
8006         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8007            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
8008                                                 'x_return_status = ' || x_return_status,
8009                                   p_prefix =>l_debug_prefix,
8010                                   p_msg_level=>fnd_log.level_statement);
8011         END IF;
8012     END IF;
8013 
8014 /****Logical APIs - validation not required****/
8015   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8016     -- status is lookup code in lookup type CODE_STATUS
8017     IF p_cust_site_use_rec.status IS NOT NULL AND
8018        p_cust_site_use_rec.status <> FND_API.G_MISS_CHAR AND
8019        ( p_create_update_flag = 'C' OR
8020          ( p_create_update_flag = 'U'  AND
8021            p_cust_site_use_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
8022     THEN
8023         validate_lookup (
8024             p_column                                => 'status',
8025             p_lookup_type                           => 'CODE_STATUS',
8026             p_column_value                          => p_cust_site_use_rec.status,
8027             x_return_status                         => x_return_status );
8028 
8029         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8030            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
8031                                                  'x_return_status = ' || x_return_status,
8032                                   p_prefix =>l_debug_prefix,
8033                                   p_msg_level=>fnd_log.level_statement);
8034         END IF;
8035     END IF;
8036   END IF;
8037 
8038     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8039            hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
8040             'x_return_status = ' || x_return_status,
8041                                   p_prefix =>l_debug_prefix,
8042                                   p_msg_level=>fnd_log.level_statement);
8043     END IF;
8044 
8045     ----------------------------------------------
8046     -- validate site_use_code
8047     ----------------------------------------------
8048 
8049     -- site_use_code is mandatory field
8050     -- Since site_use_code is non-updateable, we only need to check mandatory
8051     -- during creation.
8052 
8053     IF p_create_update_flag = 'C' THEN
8054         validate_mandatory (
8055             p_create_update_flag                    => p_create_update_flag,
8056             p_column                                => 'site_use_code',
8057             p_column_value                          => p_cust_site_use_rec.site_use_code,
8058             x_return_status                         => x_return_status );
8059 
8060         -- for later use. It is selected from database during update.
8061         l_site_use_code := p_cust_site_use_rec.site_use_code;
8062 
8063         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8064            hz_utility_v2pub.debug(p_message=>'site_use_code is mandatory. ' ||
8065                       'x_return_status = ' || x_return_status,
8066                                   p_prefix =>l_debug_prefix,
8067                                   p_msg_level=>fnd_log.level_statement);
8068        END IF;
8069     END IF;
8070 
8071     -- site_use_code is non-updateable field
8072     IF p_create_update_flag = 'U' AND
8073        p_cust_site_use_rec.site_use_code IS NOT NULL
8074     THEN
8075         validate_nonupdateable (
8076             p_column                                => 'site_use_code',
8077             p_column_value                          => p_cust_site_use_rec.site_use_code,
8078             p_old_column_value                      => l_site_use_code,
8079             x_return_status                         => x_return_status );
8080 
8081         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8082            hz_utility_v2pub.debug(p_message=>'site_use_code is non-updateable. ' ||
8083                                            'x_return_status = ' || x_return_status,
8084                                   p_prefix =>l_debug_prefix,
8085                                   p_msg_level=>fnd_log.level_statement);
8086         END IF;
8087     END IF;
8088 
8089     -- site_use_code is lookup code in lookup type SITE_USE_CODE
8090     -- Since site_use_code is non-updateable, we only need to do the checking
8091     -- during creation.
8092 
8093     IF p_create_update_flag = 'C' AND
8094        p_cust_site_use_rec.site_use_code IS NOT NULL AND
8095        p_cust_site_use_rec.site_use_code <> FND_API.G_MISS_CHAR
8096     THEN
8097         validate_lookup (
8098             p_column                                => 'site_use_code',
8099             p_lookup_type                           => 'SITE_USE_CODE',
8100             p_column_value                          => p_cust_site_use_rec.site_use_code,
8101             x_return_status                         => x_return_status );
8102 
8103         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8104            hz_utility_v2pub.debug(p_message=>'site_use_code is lookup code in lookup type SITE_USE_CODE. ' ||
8105                                         'x_return_status = ' || x_return_status,
8106                                   p_prefix =>l_debug_prefix,
8107                                   p_msg_level=>fnd_log.level_statement);
8108         END IF;
8109     END IF;
8110 
8111     -- l_status is selected from database during update.
8112 
8113     IF p_cust_site_use_rec.status = 'A' OR
8114        ( p_create_update_flag = 'C' AND
8115          ( p_cust_site_use_rec.status IS NULL OR
8116            p_cust_site_use_rec.status = FND_API.G_MISS_CHAR ) ) OR
8117        ( p_create_update_flag = 'U' AND
8118          p_cust_site_use_rec.status IS NULL AND
8119          l_status = 'A' )
8120     THEN
8121 
8122         -- A customer can have only one active DUN, STMTS, LEGAL site use
8123 
8124         IF l_site_use_code IN ( 'DUN', 'STMTS', 'LEGAL' ) THEN
8125         BEGIN
8126             SELECT 'Y' INTO l_dummy
8127             FROM HZ_CUST_ACCT_SITES_ALL site,
8128                  HZ_CUST_SITE_USES_ALL su
8129             WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
8130             AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
8131             AND su.SITE_USE_CODE = l_site_use_code
8132             AND su.STATUS = 'A'
8133             AND ( p_create_update_flag = 'C' OR
8134                   p_create_update_flag = 'U' AND su.ROWID <> p_rowid )
8135             AND site.org_id = p_cust_site_use_rec.org_id   -- Bug 3456489
8136             AND su.org_id   = p_cust_site_use_rec.org_id   -- Bug 3456489
8137             AND ROWNUM = 1;
8138 
8139             IF l_site_use_code = 'DUN' THEN
8140                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_DUN_SITE' );
8141             ELSIF l_site_use_code = 'LEGAL' THEN
8142                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_LEGAL_SITE' );
8143             ELSIF l_site_use_code = 'STMTS' THEN
8144                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_STMTS_SITE' );
8145             END IF;
8146 
8147             FND_MSG_PUB.ADD;
8148             x_return_status := FND_API.G_RET_STS_ERROR;
8149 
8150         EXCEPTION
8151             WHEN NO_DATA_FOUND THEN
8152                 NULL;
8153         END;
8154         END IF;
8155 
8156         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8157            hz_utility_v2pub.debug(p_message=>'A customer can have only one active DUN, STMTS, LEGAL site use. ' ||
8158                                                  'x_return_status = ' || x_return_status,
8159                                   p_prefix =>l_debug_prefix,
8160                                   p_msg_level=>fnd_log.level_statement);
8161         END IF;
8162     END IF;
8163 
8164     -- cust_acct_site_id and site_use_code together should be unique.
8165 if p_cust_site_use_rec.status <> 'I' or (p_create_update_flag = 'C' and (p_cust_site_use_rec.status is null or p_cust_site_use_rec.status = fnd_api.g_miss_char ))
8166              -- bug 8331061, BO API allows to pass in multiple site uses at same time such as 'A', 'I', null for status
8167 
8168 then
8169     -- Bug 3988537.
8170     BEGIN
8171         SELECT 'Y' INTO l_dummy
8172         FROM HZ_CUST_SITE_USES_ALL    -- Bug 3456489
8173         WHERE CUST_ACCT_SITE_ID = nvl(p_cust_site_use_rec.cust_acct_site_id,l_cust_acct_site_id)
8174         AND SITE_USE_CODE = nvl(p_cust_site_use_rec.site_use_code,l_site_use_code)
8175         AND SITE_USE_ID <> nvl(p_cust_site_use_rec.site_use_id,fnd_api.g_miss_num)
8176         AND STATUS = 'A'
8177         AND ORG_ID = p_cust_site_use_rec.org_id  -- Bug 3456489
8178         AND ROWNUM = 1;
8179 
8180         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
8181         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - site_use_code' );
8182         FND_MSG_PUB.ADD;
8183         x_return_status := FND_API.G_RET_STS_ERROR;
8184     EXCEPTION
8185         WHEN NO_DATA_FOUND THEN
8186             NULL;
8187     END;
8188  end if;
8189 
8190     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8191            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id and site_use_code together should be unique. ' ||
8192                                         'x_return_status = ' || x_return_status,
8193                                   p_prefix =>l_debug_prefix,
8194                                   p_msg_level=>fnd_log.level_statement);
8195     END IF;
8196 
8197 
8198     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8199            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_code ... ' ||
8200                                          'x_return_status = ' || x_return_status,
8201                                   p_prefix =>l_debug_prefix,
8202                                   p_msg_level=>fnd_log.level_statement);
8203     END IF;
8204 
8205     ----------------------------------------------
8206     -- validate location
8207     ----------------------------------------------
8208 
8209     -- location should be mandatory.
8210 
8211     -- check if need generate location.
8212 --    BEGIN
8213 
8214    /* 3456489 Refer new HZ_Cache instead of AR System Parameters */
8215 
8216     BEGIN
8217         IF (p_create_update_flag = 'C') THEN
8218                 l_profile := HZ_MO_GLOBAL_CACHE.get_auto_site_numbering(
8219                                         p_cust_site_use_rec.org_id);
8220         END IF;
8221    EXCEPTION
8222    WHEN NO_DATA_FOUND THEN
8223         x_return_status := FND_API.G_RET_STS_ERROR;
8224    END ;
8225 
8226 
8227     IF p_create_update_flag = 'C' THEN
8228         IF p_cust_site_use_rec.location IS NULL OR
8229            p_cust_site_use_rec.location = FND_API.G_MISS_CHAR
8230         THEN
8231             IF l_profile = 'N' THEN
8232                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
8233                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'location' );
8234                 FND_MSG_PUB.ADD;
8235                 x_return_status := FND_API.G_RET_STS_ERROR;
8236             END IF;
8237 
8238             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8239                 hz_utility_v2pub.debug(p_message=>'location is mandatory if autonumbering is set to N. ' ||
8240                     'x_return_status = ' || x_return_status,
8241                                   p_prefix =>l_debug_prefix,
8242                                   p_msg_level=>fnd_log.level_statement);
8243             END IF;
8244 
8245         END IF;
8246     ELSIF p_create_update_flag = 'U' AND
8247           p_cust_site_use_rec.location IS NOT NULL
8248     THEN
8249         -- location cannot be set to null during update
8250         validate_cannot_update_to_null (
8251             p_column                                => 'location',
8252             p_column_value                          => p_cust_site_use_rec.location,
8253             x_return_status                         => x_return_status );
8254 
8255         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8256            hz_utility_v2pub.debug(p_message=>'location cannot be updated to null. ' ||
8257                 'x_return_status = ' || x_return_status,
8258                                   p_prefix =>l_debug_prefix,
8259                                   p_msg_level=>fnd_log.level_statement);
8260         END IF;
8261 
8262     END IF;
8263 
8264     -- location must be unique within a customer account/site_use_type
8265 
8266     IF p_cust_site_use_rec.location IS NOT NULL AND
8267        p_cust_site_use_rec.location <> FND_API.G_MISS_CHAR
8268     THEN
8269     BEGIN
8270 
8271 --Bug No : 2998504. Status check added to the where clause.
8272 
8273         SELECT 'Y' INTO l_dummy
8274         FROM HZ_CUST_ACCT_SITES_ALL site,
8275              HZ_CUST_SITE_USES_ALL su
8276         WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
8277         AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
8278         AND su.SITE_USE_CODE = l_site_use_code
8279         AND su.LOCATION = p_cust_site_use_rec.location
8280         AND ( p_create_update_flag = 'C' OR
8281               p_create_update_flag = 'U' AND su.ROWID <> p_rowid )
8282         AND su.STATUS = 'A'
8283         AND site.org_id     = p_cust_site_use_rec.org_id  -- Bug 3456489
8284         AND su.org_id       = p_cust_site_use_rec.org_id  -- Bug 3456489
8285         AND ROWNUM = 1;
8286 
8287 
8288         FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_DUP_CODE_LOCATION' );
8289         FND_MSG_PUB.ADD;
8290         x_return_status := FND_API.G_RET_STS_ERROR;
8291 
8292     EXCEPTION
8293         WHEN NO_DATA_FOUND THEN
8294             NULL;
8295     END;
8296 
8297     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8298            hz_utility_v2pub.debug(p_message=>'location must be unique within a customer account/site_use_type. ' ||
8299             'x_return_status = ' || x_return_status,
8300                                   p_prefix =>l_debug_prefix,
8301                                   p_msg_level=>fnd_log.level_statement);
8302     END IF;
8303 
8304     END IF;
8305 
8306     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8307            hz_utility_v2pub.debug(p_message=>'(+) after validate location ... ' ||
8308             'x_return_status = ' || x_return_status,
8309                                   p_prefix =>l_debug_prefix,
8310                                   p_msg_level=>fnd_log.level_statement);
8311     END IF;
8312 
8313     ----------------------------------------------
8314     -- validate contact_id
8315     ----------------------------------------------
8316     IF p_cust_site_use_rec.contact_id IS NOT NULL AND
8317        p_cust_site_use_rec.contact_id <> FND_API.G_MISS_NUM
8318     THEN
8319         check_cust_site_use_cont_fk (
8320             p_column                                 => 'cust_account_role_id',
8321             p_column_value                           => p_cust_site_use_rec.contact_id,
8322             p_customer_id                            => l_cust_account_id,
8323             x_return_status                          => x_return_status );
8324 
8325         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8326            hz_utility_v2pub.debug(p_message=>'contact_id is foreign key to hz_cust_account_roles. ' ||
8327                                          'x_return_status = ' || x_return_status,
8328                                   p_prefix =>l_debug_prefix,
8329                                   p_msg_level=>fnd_log.level_statement);
8330         END IF;
8331 
8332     END IF;
8333     ----------------------------------------------
8334     -- validate bill_to_site_use_id
8335     ----------------------------------------------
8336 
8337     -- For SHIP_TO site use, bill_to_site_use_id should be a valid
8338     -- BILL_TO site use of this account and its related account.
8339     -- For other type of site uses, this column should be NULL.
8340     -- Bug No : 2266165. Added the check for bill_to_flag.
8341     IF p_cust_site_use_rec.bill_to_site_use_id IS NOT NULL AND
8342        p_cust_site_use_rec.bill_to_site_use_id <> FND_API.G_MISS_NUM
8343     THEN
8344         IF l_site_use_code = 'SHIP_TO' THEN
8345         BEGIN
8346             SELECT 'Y' INTO l_dummy
8347             FROM HZ_CUST_ACCT_SITES_ALL site,
8348                  HZ_CUST_SITE_USES_ALL su
8349             WHERE su.SITE_USE_ID = p_cust_site_use_rec.bill_to_site_use_id
8350             AND su.SITE_USE_CODE = 'BILL_TO'
8351             AND su.STATUS = 'A'
8352             AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
8353             AND site.STATUS = 'A'
8354             AND site.org_id = p_cust_site_use_rec.org_id  -- Bug 3456489
8355             AND su.org_id   = p_cust_site_use_rec.org_id  -- Bug 3456489
8356             AND site.CUST_ACCOUNT_ID IN (
8357                 SELECT l_cust_account_id
8358                 FROM DUAL
8359                 UNION
8360                 SELECT CUST_ACCOUNT_ID
8361                 FROM HZ_CUST_ACCT_RELATE_ALL
8362                 WHERE RELATED_CUST_ACCOUNT_ID = l_cust_account_id
8363                 AND   BILL_TO_FLAG            = 'Y' );
8364         EXCEPTION
8365             WHEN NO_DATA_FOUND THEN
8366                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BILL_TO_SITE_USE_F' );
8367                 FND_MSG_PUB.ADD;
8368                 x_return_status := FND_API.G_RET_STS_ERROR;
8369         END;
8370 
8371         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8372            hz_utility_v2pub.debug(p_message=>'For SHIP_TO site use, bill_to_site_use_id should be a valid BILL_TO site use of this account and its related account. ' ||
8373                                 'x_return_status = ' || x_return_status,
8374                                   p_prefix =>l_debug_prefix,
8375                                   p_msg_level=>fnd_log.level_statement);
8376         END IF;
8377 
8378         ELSE
8379             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BILL_TO_SITE_USE_S' );
8380             FND_MSG_PUB.ADD;
8381             x_return_status := FND_API.G_RET_STS_ERROR;
8382         END IF;
8383     END IF;
8384 
8385 
8386     -- Bug 2836888.
8387     -- For BILL_TO site use, it should not be allowed
8388     -- to be inactivated if there exists active SHIP_TO uses
8389     -- with bill_to_site_id as the site_use_id of this 'BILL_TO'
8390     -- site use.
8391     IF p_create_update_flag = 'U'
8392     and p_cust_site_use_rec.status = 'I'
8393     and l_status = 'A'
8394     and nvl(p_cust_site_use_rec.site_use_code,l_site_use_code)='BILL_TO'
8395     THEN
8396        BEGIN
8397        SELECT 'Y'
8398        INTO l_exist_flag
8399        FROM hz_cust_site_uses_all hsu
8400        WHERE hsu.site_use_code = 'SHIP_TO'
8401        AND hsu.status = 'A'
8402        AND hsu.bill_to_site_use_id = p_cust_site_use_rec.site_use_id
8403        AND rownum = 1;
8404 
8405        FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_SHIP_TO_SITES_EXIST' );
8406        FND_MSG_PUB.ADD;
8407        x_return_status := FND_API.G_RET_STS_ERROR;
8408 
8409         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8410            hz_utility_v2pub.debug(p_message=>'For BILL_TO site use,  inactivation not allowed if a SHIP_TO address uses this BILL_TO address ' ||
8411                                 'x_return_status = ' || x_return_status,
8412                                   p_prefix =>l_debug_prefix,
8413                                   p_msg_level=>fnd_log.level_statement);
8414         END IF;
8415 
8416        EXCEPTION
8417        WHEN NO_DATA_FOUND THEN NULL;
8418        END;
8419     END IF;
8420 
8421     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8422            hz_utility_v2pub.debug(p_message=>'(+) after validate bill_to_site_use_id ... ' ||
8423                           'x_return_status = ' || x_return_status,
8424                                   p_prefix =>l_debug_prefix,
8425                                   p_msg_level=>fnd_log.level_statement);
8426     END IF;
8427 
8428 
8429 
8430 
8431     ----------------------------------------------
8432     -- validate orig_system_reference
8433     ----------------------------------------------
8434 /****Logical APIs - validation not required****/
8435   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8436     IF (p_cust_site_use_rec.orig_system is not null and p_cust_site_use_rec.orig_system <>fnd_api.g_miss_char)
8437     and (p_cust_site_use_rec.orig_system_reference is not null and p_cust_site_use_rec.orig_system_reference <>fnd_api.g_miss_char)
8438      and p_create_update_flag = 'U'
8439     THEN
8440 
8441         hz_orig_system_ref_pub.get_owner_table_id
8442         (p_orig_system => p_cust_site_use_rec.orig_system,
8443         p_orig_system_reference => p_cust_site_use_rec.orig_system_reference,
8444         p_owner_table_name =>'HZ_CUST_SITE_USES_ALL',
8445         x_owner_table_id => l_mosr_owner_table_id,
8446         x_return_status => l_temp_return_status);
8447 
8448         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
8449 		    l_mosr_owner_table_id= nvl(p_cust_site_use_rec.site_use_id,l_mosr_owner_table_id))
8450         THEN
8451             l_validate_flag := 'N';
8452         END IF;
8453 
8454         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
8455 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
8456 		-- In case of success, leave it to carry over previous value as before this call.
8457 		-- Fix for Bug 5498116 (29-AUG-2006)
8458         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
8459           x_return_status := l_temp_return_status;
8460         END IF;
8461 
8462     end if;
8463     -- orig_system_reference is non-updateable field
8464     IF p_create_update_flag = 'U' AND
8465        p_cust_site_use_rec.orig_system_reference IS NOT NULL
8466        and l_validate_flag = 'Y'
8467     THEN
8468         validate_nonupdateable (
8469             p_column                                => 'orig_system_reference',
8470             p_column_value                          => p_cust_site_use_rec.orig_system_reference,
8471             p_old_column_value                      => l_orig_system_reference,
8472             x_return_status                         => x_return_status );
8473 
8474         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8475            hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
8476                                 'x_return_status = ' || x_return_status,
8477                                   p_prefix =>l_debug_prefix,
8478                                   p_msg_level=>fnd_log.level_statement);
8479         END IF;
8480 
8481     END IF;
8482     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8483            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
8484                          'x_return_status = ' || x_return_status,
8485                                   p_prefix =>l_debug_prefix,
8486                                   p_msg_level=>fnd_log.level_statement);
8487     END IF;
8488   END IF;
8489 
8490     ----------------------------------------------
8491     -- validate freight_term
8492     ----------------------------------------------
8493 
8494     -- freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups
8495     IF p_cust_site_use_rec.freight_term IS NOT NULL AND
8496        p_cust_site_use_rec.freight_term <> FND_API.G_MISS_CHAR AND
8497        ( p_create_update_flag = 'C' OR
8498          ( p_create_update_flag = 'U'  AND
8499            p_cust_site_use_rec.freight_term <> NVL( l_freight_term, FND_API.G_MISS_CHAR ) ) )
8500     THEN
8501         validate_lookup (
8502             p_column                                => 'freight_term',
8503             p_lookup_table                          => 'SO_LOOKUPS',
8504             p_lookup_type                           => 'FREIGHT_TERMS',
8505             p_column_value                          => p_cust_site_use_rec.freight_term,
8506             x_return_status                         => x_return_status );
8507 
8508         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8509            hz_utility_v2pub.debug(p_message=>'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
8510                 'x_return_status = ' || x_return_status,
8511                                   p_prefix =>l_debug_prefix,
8512                                   p_msg_level=>fnd_log.level_statement);
8513         END IF;
8514     END IF;
8515 
8516     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8517            hz_utility_v2pub.debug(p_message=>'(+) after validate freight_term ... ' ||
8518             'x_return_status = ' || x_return_status,
8519                                   p_prefix =>l_debug_prefix,
8520                                   p_msg_level=>fnd_log.level_statement);
8521     END IF;
8522 
8523     ----------------------------------------------
8524     -- validate primary_flag
8525     ----------------------------------------------
8526 
8527     -- primary_flag cannot be set to null during update
8528     IF p_create_update_flag = 'U' AND
8529        p_cust_site_use_rec.primary_flag IS NOT NULL
8530     THEN
8531         validate_cannot_update_to_null (
8532             p_column                                => 'primary_flag',
8533             p_column_value                          => p_cust_site_use_rec.primary_flag,
8534             x_return_status                         => x_return_status );
8535 
8536         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8537            hz_utility_v2pub.debug(p_message=>'primary_flag cannot be updated to NULL. ' ||
8538                          'x_return_status = ' || x_return_status,
8539                                   p_prefix =>l_debug_prefix,
8540                                   p_msg_level=>fnd_log.level_statement);
8541         END IF;
8542 
8543     END IF;
8544 
8545 /****Logical APIs - validation not required****/
8546   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8547     -- primary_flag is lookup code in lookup type YES/NO
8548     IF p_cust_site_use_rec.primary_flag IS NOT NULL AND
8549        p_cust_site_use_rec.primary_flag <> FND_API.G_MISS_CHAR
8550     THEN
8551         validate_lookup (
8552             p_column                                => 'primary_flag',
8553             p_lookup_type                           => 'YES/NO',
8554             p_column_value                          => p_cust_site_use_rec.primary_flag,
8555             x_return_status                         => x_return_status );
8556 
8557         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8558            hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
8559                                   'x_return_status = ' || x_return_status,
8560                                   p_prefix =>l_debug_prefix,
8561                                   p_msg_level=>fnd_log.level_statement);
8562         END IF;
8563 
8564     END IF;
8565   END IF;
8566 
8567     -- only one primary is allowed for one site use type per account
8568     -- Bug Fix : 2260832
8569     -- Bug 2643624  Removing the below validation so as to enable the setting
8570     --              of another site use as primary.
8571 /*
8572 
8573     IF p_cust_site_use_rec.primary_flag = 'Y'
8574     THEN
8575     BEGIN
8576         SELECT 'Y'  INTO l_dummy
8577         FROM HZ_CUST_ACCT_SITES site,
8578              HZ_CUST_SITE_USES su
8579         WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
8580         AND su.CUST_ACCT_SITE_ID = site.CUST_ACCT_SITE_ID
8581         AND su.SITE_USE_CODE = l_site_use_code
8582         AND su.PRIMARY_FLAG = 'Y'
8583 --Bug 2792589        AND su.STATUS       = 'Y'
8584         AND su.STATUS       = 'A'
8585         AND ( p_create_update_flag = 'C' OR
8586               (p_create_update_flag = 'U' AND su.ROWID <> p_rowid ))
8587         AND ROWNUM = 1;
8588 
8589         FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_PRIMARY_SU' );
8590         FND_MESSAGE.SET_TOKEN( 'SITE_CODE', l_site_use_code );
8591         FND_MSG_PUB.ADD;
8592         x_return_status := FND_API.G_RET_STS_ERROR;
8593 
8594     EXCEPTION
8595         WHEN NO_DATA_FOUND THEN
8596             NULL;
8597     END;
8598 
8599     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8600            hz_utility_v2pub.debug(p_message=>'only one primary is allowed for one site use type per account. ' ||
8601                                          'x_return_status = ' || x_return_status,
8602                                   p_prefix =>l_debug_prefix,
8603                                   p_msg_level=>fnd_log.level_statement);
8604     END IF;
8605 
8606     END IF;
8607 */
8608 
8609     -- check to ensure that an inactive site use is never marked
8610     -- as primary.
8611     IF p_create_update_flag = 'C' THEN
8612       IF p_cust_site_use_rec.primary_flag IS NULL OR
8613          p_cust_site_use_rec.primary_flag = fnd_api.g_miss_char
8614       THEN
8615         l_primary_flag := 'N';
8616       ELSE
8617         l_primary_flag := p_cust_site_use_rec.primary_flag;
8618       END IF;
8619 
8620       IF p_cust_site_use_rec.status IS NULL OR
8621          p_cust_site_use_rec.status = fnd_api.g_miss_char
8622       THEN
8623         l_status := 'A';
8624       ELSE
8625         l_status := p_cust_site_use_rec.status;
8626       END IF;
8627 
8628       IF l_primary_flag = 'Y' AND l_status <> 'A' THEN
8629         l_error := TRUE;
8630       END IF;
8631     ELSE
8632       IF p_cust_site_use_rec.primary_flag = 'Y' AND
8633          ((p_cust_site_use_rec.status IS NOT NULL AND
8634            p_cust_site_use_rec.status <> 'A') OR
8635           (p_cust_site_use_rec.status IS NULL AND
8636            l_status <> 'A'))
8637       THEN
8638         l_error := TRUE;
8639       END IF;
8640     END IF;
8641 
8642     IF l_error THEN
8643           fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8644           fnd_message.set_token('ENTITY', 'Site Use');
8645       --    fnd_message.set_token('COLUMN1', 'primary_flag');
8646       --    fnd_message.set_token('COLUMN2', 'status');
8647           fnd_msg_pub.add;
8648           x_return_status := FND_API.G_RET_STS_ERROR;
8649       -- reset l_error for later use.
8650           l_error := FALSE;
8651     END IF;
8652 
8653     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8654            hz_utility_v2pub.debug(p_message=>'an inactive site use is never marked as primary. ' ||
8655                                          'x_return_status = ' || x_return_status,
8656                                   p_prefix =>l_debug_prefix,
8657                                   p_msg_level=>fnd_log.level_statement);
8658     END IF;
8659 
8660 
8661     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8662            hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
8663                                          'x_return_status = ' || x_return_status,
8664                                   p_prefix =>l_debug_prefix,
8665                                   p_msg_level=>fnd_log.level_statement);
8666     END IF;
8667 
8668 
8669 --bug fix 2311760
8670 /***************************
8671     ----------------------------------------------
8672     -- validate ship_partial
8673     ----------------------------------------------
8674 
8675     -- ship_partial is lookup code in lookup type YES/NO
8676     IF p_cust_site_use_rec.ship_partial IS NOT NULL AND
8677        p_cust_site_use_rec.ship_partial <> FND_API.G_MISS_CHAR
8678     THEN
8679         validate_lookup (
8680             p_column                                => 'ship_partial',
8681             p_lookup_type                           => 'YES/NO',
8682             p_column_value                          => p_cust_site_use_rec.ship_partial,
8683             x_return_status                         => x_return_status );
8684 
8685         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8686            hz_utility_v2pub.debug(p_message=>'ship_partial is lookup code in lookup type YES/NO. ' ||
8687                                                 'x_return_status = ' || x_return_status,
8688                                   p_prefix =>l_debug_prefix,
8689                                   p_msg_level=>fnd_log.level_statement);
8690         END IF;
8691 
8692     END IF;
8693 
8694     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8695            hz_utility_v2pub.debug(p_message=>'(+) after validate ship_partial ... ' ||
8696                                                 'x_return_status = ' || x_return_status,
8697                                   p_prefix =>l_debug_prefix,
8698                                   p_msg_level=>fnd_log.level_statement);
8699     END IF;
8700 
8701 ***********************/
8702     ----------------------------------------------
8703     -- validate ship_sets_include_lines_flag
8704     ----------------------------------------------
8705 /****Logical APIs - validation not required****/
8706   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8707     -- ship_sets_include_lines_flag is lookup code in lookup type YES/NO
8708     IF p_cust_site_use_rec.ship_sets_include_lines_flag IS NOT NULL AND
8709        p_cust_site_use_rec.ship_sets_include_lines_flag <> FND_API.G_MISS_CHAR
8710     THEN
8711         validate_lookup (
8712             p_column                                => 'ship_sets_include_lines_flag',
8713             p_lookup_type                           => 'YES/NO',
8714             p_column_value                          => p_cust_site_use_rec.ship_sets_include_lines_flag,
8715             x_return_status                         => x_return_status );
8716 
8717         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8718            hz_utility_v2pub.debug(p_message=>'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
8719                                         'x_return_status = ' || x_return_status,
8720                                   p_prefix =>l_debug_prefix,
8721                                   p_msg_level=>fnd_log.level_statement);
8722         END IF;
8723 
8724     END IF;
8725   END IF;
8726 
8727 --If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag
8728 --is always set to N.
8729 IF (p_create_update_flag = 'C' or
8730    (p_create_update_flag ='U' and
8731     p_cust_site_use_rec.ship_sets_include_lines_flag <> NVL(l_ship_sets_inc_lines_f,FND_API.G_MISS_CHAR)))
8732 THEN
8733    IF p_cust_site_use_rec.ship_sets_include_lines_flag = 'Y'
8734    THEN
8735     BEGIN
8736        SELECT decode(p_cust_site_use_rec.ship_sets_include_lines_flag,p_cust_site_use_rec.arrivalsets_include_lines_flag,
8737                      'N',l_arrivalsets_inc_lines_f,
8738                                         decode(p_cust_site_use_rec.arrivalsets_include_lines_flag,l_ship_sets_inc_lines_f,
8739                                                'Y','N'),'Y')
8740        INTO l_dummy
8741        FROM DUAL;
8742        IF l_dummy <> 'Y'
8743        THEN
8744             FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
8745             FND_MESSAGE.SET_TOKEN('COLUMN1','ship_sets_include_lines_flag');
8746             FND_MESSAGE.SET_TOKEN('VALUE1','Y');
8747             FND_MESSAGE.SET_TOKEN('COLUMN2','arrivalsets_include_lines_flag');
8748             FND_MESSAGE.SET_TOKEN('VALUE2','N');
8749             FND_MSG_PUB.ADD;
8750             x_return_status := FND_API.G_RET_STS_ERROR;
8751         END IF;
8752     END ;
8753    END IF;
8754 END IF;
8755 
8756           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8757                 hz_utility_v2pub.debug(p_message=>'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
8758                   'x_return_status = ' || x_return_status,
8759                                   p_prefix =>l_debug_prefix,
8760                                   p_msg_level=>fnd_log.level_statement);
8761           END IF;
8762 
8763           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8764                  hz_utility_v2pub.debug(p_message=>'(+) after validate ship_sets_include_lines_flag ... ' ||
8765                            'x_return_status = ' || x_return_status,
8766                                   p_prefix =>l_debug_prefix,
8767                                   p_msg_level=>fnd_log.level_statement);
8768            END IF;
8769 
8770     ----------------------------------------------
8771     -- validate arrivalsets_include_lines_flag
8772     ----------------------------------------------
8773 /****Logical APIs - validation not required****/
8774   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8775     -- arrivalsets_include_lines_flag is lookup code in lookup type YES/NO
8776     IF p_cust_site_use_rec.arrivalsets_include_lines_flag IS NOT NULL AND
8777        p_cust_site_use_rec.arrivalsets_include_lines_flag <> FND_API.G_MISS_CHAR
8778     THEN
8779         validate_lookup (
8780             p_column                                => 'arrivalsets_include_lines_flag',
8781             p_lookup_type                           => 'YES/NO',
8782             p_column_value                          => p_cust_site_use_rec.arrivalsets_include_lines_flag,
8783             x_return_status                         => x_return_status );
8784 
8785         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8786            hz_utility_v2pub.debug(p_message=>'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
8787                    'x_return_status = ' || x_return_status,
8788                                   p_prefix =>l_debug_prefix,
8789                                   p_msg_level=>fnd_log.level_statement);
8790         END IF;
8791 
8792     END IF;
8793   END IF;
8794 
8795 --If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag
8796 --is always set to N.
8797 
8798 IF (p_create_update_flag ='C' or
8799     (p_create_update_flag ='U' and
8800     p_cust_site_use_rec.arrivalsets_include_lines_flag <> NVL(l_arrivalsets_inc_lines_f,FND_API.G_MISS_CHAR)))
8801 THEN
8802  IF p_cust_site_use_rec.arrivalsets_include_lines_flag = 'Y'
8803  THEN
8804    BEGIN
8805      SELECT decode(p_cust_site_use_rec.arrivalsets_include_lines_flag,p_cust_site_use_rec.ship_sets_include_lines_flag,
8806                    'N',l_ship_sets_inc_lines_f,
8807                                        decode(p_cust_site_use_rec.ship_sets_include_lines_flag,l_arrivalsets_inc_lines_f,
8808                                                'Y','N'),'Y')
8809      INTO l_dummy
8810      FROM DUAL;
8811      IF l_dummy <> 'Y'
8812      THEN
8813             FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
8814             FND_MESSAGE.SET_TOKEN('COLUMN1','arrivalsets_include_lines_flag');
8815             FND_MESSAGE.SET_TOKEN('VALUE1','Y');
8816             FND_MESSAGE.SET_TOKEN('COLUMN2','ship_sets_include_lines_flag');
8817             FND_MESSAGE.SET_TOKEN('VALUE2','N');
8818             FND_MSG_PUB.ADD;
8819             x_return_status := FND_API.G_RET_STS_ERROR;
8820      END IF;
8821    END ;
8822   END IF;
8823 END IF;
8824 
8825         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8826            hz_utility_v2pub.debug(p_message=>'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always setto N. ' ||
8827                          'x_return_status = ' || x_return_status,
8828                                   p_prefix =>l_debug_prefix,
8829                                   p_msg_level=>fnd_log.level_statement);
8830         END IF;
8831 
8832         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8833            hz_utility_v2pub.debug(p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
8834                                         'x_return_status = ' || x_return_status,
8835                                   p_prefix =>l_debug_prefix,
8836                                   p_msg_level=>fnd_log.level_statement);
8837         END IF;
8838 
8839         ------------------------------------------
8840         -- validate tax_code
8841         ------------------------------------------
8842         --Tax_code should be a valid value defined in zx_output_classifications_v
8843 
8844         IF p_cust_site_use_rec.tax_code is NOT NULL AND
8845            p_cust_site_use_rec.tax_code <> FND_API.G_MISS_CHAR
8846           AND ( p_create_update_flag = 'C' OR
8847            ( p_create_update_flag = 'U'  AND
8848             p_cust_site_use_rec.tax_code <> NVL( l_tax_code, FND_API.G_MISS_CHAR ) ) )
8849         THEN
8850            check_tax_code(
8851                p_column                                => 'tax_code',
8852                p_column_value                          => p_cust_site_use_rec.tax_code,
8853 	       -- Bug 4713150
8854                -- p_org_id                                => p_cust_site_use_rec.org_id,  -- Bug 3456489
8855 	       p_called_from                           => 'validate_cust_site_use',
8856                x_return_status                         => x_return_status );
8857 
8858            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8859               hz_utility_v2pub.debug(p_message=>'Tax_code should be a valid value defined in view zx_output_classifications_v. '||
8860                                                  'x_return_status = ' || x_return_status,
8861                                   p_prefix =>l_debug_prefix,
8862                                   p_msg_level=>fnd_log.level_statement);
8863            END IF;
8864 
8865         END IF;
8866 
8867            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8868                    hz_utility_v2pub.debug(p_message=>'(+) after validate tax_code..' ||
8869                                         'x_return_status = ' || x_return_status,
8870                                   p_prefix =>l_debug_prefix,
8871                                   p_msg_level=>fnd_log.level_statement);
8872            END IF;
8873         ------------------------------------
8874         --validate payment_term_id
8875         ------------------------------------
8876         --Payment_term_id should be a valid value defined in RA_TERMS
8877 
8878         IF p_cust_site_use_rec.payment_term_id is NOT NULL AND
8879            p_cust_site_use_rec.payment_term_id <> FND_API.G_MISS_NUM
8880           AND ( p_create_update_flag = 'C' OR
8881            ( p_create_update_flag = 'U'  AND
8882             p_cust_site_use_rec.payment_term_id <> NVL( l_payment_term_id, FND_API.G_MISS_NUM ) ) )
8883         THEN
8884             check_payterm_id_fk(
8885                     p_column                                => 'payment_term_id',
8886                     p_column_value                          => p_cust_site_use_rec.payment_term_id,
8887                     x_return_status                         => x_return_status );
8888 
8889             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8890                 hz_utility_v2pub.debug(p_message=>'Payment_term_id should be a valid value defined in  RA_TERMS. '||
8891                   'x_return_status = ' || x_return_status,
8892                                   p_prefix =>l_debug_prefix,
8893                                   p_msg_level=>fnd_log.level_statement);
8894             END IF;
8895 
8896         END IF;
8897 
8898             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8899                    hz_utility_v2pub.debug(p_message=>'(+) after validate payment_term_id..' ||
8900                                                  'x_return_status = ' || x_return_status,
8901                                   p_prefix =>l_debug_prefix,
8902                                   p_msg_level=>fnd_log.level_statement);
8903             END IF;
8904         ---------------------------------------------
8905         --validate demand_class_code
8906         ---------------------------------------------
8907         --Demand_class_code is lookup_code in lookup_type DEMAND_CLASS in fnd_common_lookups
8908 
8909         IF p_cust_site_use_rec.demand_class_code is NOT NULL AND
8910            p_cust_site_use_rec.demand_class_code <> FND_API.G_MISS_CHAR
8911           AND ( p_create_update_flag = 'C' OR
8912            ( p_create_update_flag = 'U'  AND
8913             p_cust_site_use_rec.demand_class_code <> NVL(l_demand_class_code,FND_API.G_MISS_CHAR) ) )
8914         THEN
8915             validate_lookup(
8916                 p_column               =>'demand_class_code',
8917                 p_lookup_table         =>'FND_COMMON_LOOKUPS',
8918                 p_lookup_type           =>'DEMAND_CLASS',
8919                 p_column_value         =>p_cust_site_use_rec.demand_class_code,
8920                 x_return_status        =>x_return_status   );
8921             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8922                   hz_utility_v2pub.debug(p_message=>'Demand_class_code is lookup_code in lookup_type DEMAND_CLASS in fnd_common_lookups. '||
8923                           'x_return_status = ' || x_return_status,
8924                                   p_prefix =>l_debug_prefix,
8925                                   p_msg_level=>fnd_log.level_statement);
8926              END IF;
8927         END IF;
8928 
8929             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8930                  hz_utility_v2pub.debug(p_message=>'(+) after validate demand_class_code..' ||
8931                                   'x_return_status = ' || x_return_status,
8932                                   p_prefix =>l_debug_prefix,
8933                                   p_msg_level=>fnd_log.level_statement);
8934             END IF;
8935 
8936         -----------------------------------------------
8937         --validate primary_salesrep_id
8938         -----------------------------------------------
8939         --Primary_salesrep_id should be a valid value defined in RA_SALESREPS
8940 
8941         IF p_cust_site_use_rec.primary_salesrep_id is NOT NULL AND
8942            p_cust_site_use_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
8943           AND ( p_create_update_flag = 'C' OR
8944            ( p_create_update_flag = 'U'  AND
8945             p_cust_site_use_rec.primary_salesrep_id <> NVL(l_primary_salesrep_id,FND_API.G_MISS_NUM) ) )
8946         THEN
8947             check_prim_salesrep(
8948                    p_column                                => 'primary_salesrep_id',
8949                    p_column_value                          => p_cust_site_use_rec.primary_salesrep_id,
8950                    p_org_id                                => p_cust_site_use_rec.org_id,  -- Bug 3456489
8951                    x_return_status                         => x_return_status );
8952 
8953             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8954                 hz_utility_v2pub.debug(p_message=>'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
8955                   'x_return_status = ' || x_return_status,
8956                                   p_prefix =>l_debug_prefix,
8957                                   p_msg_level=>fnd_log.level_statement);
8958              END IF;
8959 
8960         END IF;
8961              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8962                 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_salesrep_id..' ||
8963                          'x_return_status = ' || x_return_status,
8964                                   p_prefix =>l_debug_prefix,
8965                                   p_msg_level=>fnd_log.level_statement);
8966              END IF;
8967 
8968 ----------------------------------------------------
8969 --validate finchrg_receivables_trx_id
8970 ----------------------------------------------------
8971 IF p_cust_site_use_rec.finchrg_receivables_trx_id is NOT NULL AND
8972    p_cust_site_use_rec.finchrg_receivables_trx_id <> FND_API.G_MISS_NUM
8973           AND ( p_create_update_flag = 'C' OR
8974            ( p_create_update_flag = 'U'  AND
8975             p_cust_site_use_rec.finchrg_receivables_trx_id <> NVL(l_finchrg_receivables_trx_id,FND_API.G_MISS_NUM) ) )
8976 THEN
8977               check_finchrg_trx_fk(
8978                    p_column                 => 'finchrg_receivables_trx_id',
8979                    p_column_value           => p_cust_site_use_rec.finchrg_receivables_trx_id,
8980                    p_org_id                 => p_cust_site_use_rec.org_id,  -- Bug 3456489
8981                    x_return_status          => x_return_status );
8982 
8983 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8984            hz_utility_v2pub.debug(p_message=>'finchrg_receivables_trx_id should be a valid value defined in AR_RECEIVABLES_TRX. '||
8985                          'x_return_status = ' || x_return_status,
8986                                   p_prefix =>l_debug_prefix,
8987                                   p_msg_level=>fnd_log.level_statement);
8988  END IF;
8989 
8990 
8991 END IF;
8992 
8993  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8994            hz_utility_v2pub.debug(p_message=>'(+) after validate finchrg_receivables_trx_id..' ||
8995                                          'x_return_status = ' || x_return_status,
8996                                   p_prefix =>l_debug_prefix,
8997                                   p_msg_level=>fnd_log.level_statement);
8998  END IF;
8999 
9000 
9001 
9002         -------------------------------------------
9003         --validate order_Type_id
9004         -------------------------------------------
9005         --order_type_id should be a valid value defined in OE_ORDER_TYPES_V
9006 
9007         IF p_cust_site_use_rec.order_type_id is NOT NULL AND
9008            p_cust_site_use_rec.order_type_id <> FND_API.G_MISS_NUM
9009           AND ( p_create_update_flag = 'C' OR
9010            ( p_create_update_flag = 'U'  AND
9011             p_cust_site_use_rec.order_type_id <> NVL(l_order_type_id,FND_API.G_MISS_NUM) ) )
9012         THEN
9013             check_ord_type(
9014                    p_column                                => 'order_type_id',
9015                    p_column_value                          => p_cust_site_use_rec.order_type_id,
9016                    p_org_id                                => p_cust_site_use_rec.org_id,  -- Bug 3456489
9017                    x_return_status                         => x_return_status );
9018 
9019             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9020                 hz_utility_v2pub.debug(p_message=>'order_type_id should be a valid value defined in OE_ORDER_TYPES_V. '||
9021                          'x_return_status = ' || x_return_status,
9022                                   p_prefix =>l_debug_prefix,
9023                                   p_msg_level=>fnd_log.level_statement);
9024             END IF;
9025 
9026         END IF;
9027 
9028             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9029                   hz_utility_v2pub.debug(p_message=>'(+) after validate order_type_id..' ||
9030                                                 'x_return_status = ' || x_return_status,
9031                                   p_prefix =>l_debug_prefix,
9032                                   p_msg_level=>fnd_log.level_statement);
9033             END IF;
9034 
9035 
9036         ----------------------------------------------------------
9037         --validate price_list_id
9038         ----------------------------------------------------------
9039         --price_list_id should be a valid value defined in SO_PRICE_LISTS
9040 
9041         IF p_cust_site_use_rec.price_list_id is NOT NULL AND
9042            p_cust_site_use_rec.price_list_id <> FND_API.G_MISS_NUM
9043           AND ( p_create_update_flag = 'C' OR
9044            ( p_create_update_flag = 'U'  AND
9045             p_cust_site_use_rec.price_list_id <> NVL(l_price_list_id,FND_API.G_MISS_NUM) ) )
9046         THEN
9047             check_price_list_fk(
9048                  p_column                           => 'price_list_id',
9049                  p_column_value                     => p_cust_site_use_rec.price_list_id,
9050                  x_return_status                    => x_return_status );
9051 
9052             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9053                 hz_utility_v2pub.debug(p_message=>'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
9054                                  'x_return_status = ' || x_return_status,
9055                                   p_prefix =>l_debug_prefix,
9056                                   p_msg_level=>fnd_log.level_statement);
9057             END IF;
9058 
9059         END IF;
9060 
9061             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9062                 hz_utility_v2pub.debug(p_message=>'(+) after validate price_list_id..' ||
9063                    'x_return_status = ' || x_return_status,
9064                                   p_prefix =>l_debug_prefix,
9065                                   p_msg_level=>fnd_log.level_statement);
9066             END IF;
9067 
9068 
9069         ----------------------------------------------
9070         --validate item_cross_ref_pref
9071         ----------------------------------------------
9072         --item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should have value 'INT' or 'CUST'
9073 
9074         IF p_cust_site_use_rec.item_cross_ref_pref IS NOT NULL AND
9075            p_cust_site_use_rec.item_cross_ref_pref <> FND_API.G_MISS_CHAR
9076           AND ( p_create_update_flag = 'C' OR
9077            ( p_create_update_flag = 'U'  AND
9078             p_cust_site_use_rec.item_cross_ref_pref <> NVL(l_item_cross_ref_pref,FND_API.G_MISS_CHAR) ) )
9079         THEN
9080           IF p_cust_site_use_rec.item_cross_ref_pref NOT IN('INT','CUST')
9081           THEN
9082              check_item_cross_ref(
9083                     p_column                           => 'price_list_id',
9084                     p_column_value                     => p_cust_site_use_rec.item_cross_ref_pref,
9085                     x_return_status                    => x_return_status );
9086 
9087              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9088                 hz_utility_v2pub.debug(p_message=>'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . ' ||
9089                    'x_return_status = ' || x_return_status,
9090                                   p_prefix =>l_debug_prefix,
9091                                   p_msg_level=>fnd_log.level_statement);
9092              END IF;
9093 
9094           END IF;
9095         END IF;
9096 
9097             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9098                  hz_utility_v2pub.debug(p_message=>'(+) after validate item_cross_ref_pref..' ||
9099                                                 'x_return_status = ' || x_return_status,
9100                                   p_prefix =>l_debug_prefix,
9101                                   p_msg_level=>fnd_log.level_statement);
9102             END IF;
9103 
9104         --------------------------------------------------
9105         --validate warehouse_id
9106         --------------------------------------------------
9107         --warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS
9108 
9109         IF p_cust_site_use_rec.warehouse_id is NOT NULL AND
9110            p_cust_site_use_rec.warehouse_id <> FND_API.G_MISS_NUM
9111           AND ( p_create_update_flag = 'C' OR
9112            ( p_create_update_flag = 'U'  AND
9113             p_cust_site_use_rec.warehouse_id <> NVL(l_warehouse_id,FND_API.G_MISS_NUM) ) )
9114         THEN
9115             check_warehouse(
9116                   p_column                           => 'warehouse_id',
9117                   p_column_value                     => p_cust_site_use_rec.warehouse_id,
9118                   x_return_status                    => x_return_status );
9119 
9120             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9121                 hz_utility_v2pub.debug(p_message=>'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
9122                           'x_return_status = ' || x_return_status,
9123                                   p_prefix =>l_debug_prefix,
9124                                   p_msg_level=>fnd_log.level_statement);
9125             END IF;
9126 
9127         END IF;
9128 
9129             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9130                 hz_utility_v2pub.debug(p_message=>'(+) after validate warehouse_id..' ||
9131                                         'x_return_status = ' || x_return_status,
9132                                   p_prefix =>l_debug_prefix,
9133                                   p_msg_level=>fnd_log.level_statement);
9134             END IF;
9135 
9136 
9137 
9138          ----------------------------------------------
9139          --validate fob_point
9140          ----------------------------------------------
9141         --fob_point is lookup_code in lookup type FOB
9142 
9143         IF p_cust_site_use_rec.fob_point is NOT NULL AND
9144            p_cust_site_use_rec.fob_point <> FND_API.G_MISS_CHAR
9145           AND ( p_create_update_flag = 'C' OR
9146            ( p_create_update_flag = 'U'  AND
9147             p_cust_site_use_rec.fob_point <> NVL(l_fob_point,FND_API.G_MISS_CHAR) ) )
9148         THEN
9149             validate_lookup(
9150                 p_column        =>'fob_point',
9151                 p_lookup_type   =>'FOB',
9152                 p_column_value  =>p_cust_site_use_rec.fob_point,
9153                 x_return_status =>x_return_status  );
9154 
9155             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9156                 hz_utility_v2pub.debug(p_message=>'fob_point is lookup_code in lookup type FOB. '||
9157                                                 'x_return_status = ' || x_return_status,
9158                                   p_prefix =>l_debug_prefix,
9159                                   p_msg_level=>fnd_log.level_statement);
9160             END IF;
9161 
9162         END IF;
9163 
9164              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9165                 hz_utility_v2pub.debug(p_message=>'(+) after validate fob_point..' ||
9166                          'x_return_status = ' || x_return_status,
9167                                   p_prefix =>l_debug_prefix,
9168                                   p_msg_level=>fnd_log.level_statement);
9169             END IF;
9170 
9171 
9172 
9173         ----------------------------------------------------------
9174         --validate date_type_preference
9175         ----------------------------------------------------------
9176         --date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups
9177 
9178         IF p_cust_site_use_rec.date_type_preference IS NOT NULL AND
9179            p_cust_site_use_rec.date_type_preference <> FND_API.G_MISS_CHAR
9180           AND ( p_create_update_flag = 'C' OR
9181            ( p_create_update_flag = 'U'  AND
9182             p_cust_site_use_rec.date_type_preference <> NVL(l_date_type_preference,FND_API.G_MISS_CHAR) ) )
9183         THEN
9184             validate_lookup(
9185                  p_column               =>'date_type_preference',
9186                  p_lookup_table         =>'OE_LOOKUPS',
9187                  p_lookup_type          =>'REQUEST_DATE_TYPE',
9188                  p_column_value         =>p_cust_site_use_rec.date_type_preference,
9189                  x_return_status        =>x_return_status   );
9190 
9191              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9192                 hz_utility_v2pub.debug(p_message=>'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
9193                                  'x_return_status = ' || x_return_status,
9194                                   p_prefix =>l_debug_prefix,
9195                                   p_msg_level=>fnd_log.level_statement);
9196             END IF;
9197 
9198         END IF;
9199 
9200            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9201                 hz_utility_v2pub.debug(p_message=>'(+) after validate date_type_preference..' ||
9202                                         'x_return_status = ' || x_return_status,
9203                                   p_prefix =>l_debug_prefix,
9204                                   p_msg_level=>fnd_log.level_statement);
9205            END IF;
9206 
9207 --Bug fix 2311760
9208 /***************************
9209     ----------------------------------------------
9210     -- validate ship_partial
9211     ----------------------------------------------
9212 
9213     -- ship_partial is lookup code in lookup type YES/NO
9214     IF p_cust_site_use_rec.ship_partial IS NOT NULL AND
9215        p_cust_site_use_rec.ship_partial <> FND_API.G_MISS_CHAR
9216           AND ( p_create_update_flag = 'C' OR
9217            ( p_create_update_flag = 'U'  AND
9218             p_cust_site_use_rec.ship_partial <> NVL(l_ship_partial,FND_API.G_MISS_CHAR) ) )
9219     THEN
9220         validate_lookup (
9221             p_column                                => 'ship_partial',
9222             p_lookup_type                           => 'YES/NO',
9223             p_column_value                          => p_cust_site_use_rec.ship_partial,
9224             x_return_status                         => x_return_status );
9225 
9226         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9227            hz_utility_v2pub.debug(p_message=>'ship_partial is lookup code in lookup type YES/NO. ' ||
9228                                                  'x_return_status = ' || x_return_status,
9229                                   p_prefix =>l_debug_prefix,
9230                                   p_msg_level=>fnd_log.level_statement);
9231         END IF;
9232 
9233     END IF;
9234 
9235     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9236            hz_utility_v2pub.debug(p_message=>'(+) after validate ship_partial ... ' ||
9237                                              'x_return_status = ' || x_return_status,
9238                                   p_prefix =>l_debug_prefix,
9239                                   p_msg_level=>fnd_log.level_statement);
9240     END IF;
9241 
9242 ******************************/
9243     ----------------------------------------------
9244     -- validate sched_date_push_flag
9245     ----------------------------------------------
9246 /****Logical APIs - validation not required****/
9247   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9248     -- sched_date_push_flag is lookup code in lookup type YES/NO
9249     IF p_cust_site_use_rec.sched_date_push_flag IS NOT NULL AND
9250        p_cust_site_use_rec.sched_date_push_flag <> FND_API.G_MISS_CHAR
9251     THEN
9252         validate_lookup (
9253             p_column                                => 'sched_date_push_flag',
9254             p_lookup_type                           => 'YES/NO',
9255             p_column_value                          => p_cust_site_use_rec.sched_date_push_flag,
9256             x_return_status                         => x_return_status );
9257 
9258         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9259            hz_utility_v2pub.debug(p_message=>'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
9260                         'x_return_status = ' || x_return_status,
9261                                   p_prefix =>l_debug_prefix,
9262                                   p_msg_level=>fnd_log.level_statement);
9263         END IF;
9264 
9265     END IF;
9266 
9267     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9268            hz_utility_v2pub.debug(p_message=>'(+) after validate sched_date_push_flag ... ' ||
9269                                                  'x_return_status = ' || x_return_status,
9270                                   p_prefix =>l_debug_prefix,
9271                                   p_msg_level=>fnd_log.level_statement);
9272     END IF;
9273   END IF;
9274 
9275     ----------------------------------------------
9276     -- validate gsa_indicator
9277     ----------------------------------------------
9278 /****Logical APIs - validation not required****/
9279   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9280     -- gsa_indicator is lookup code in lookup type YES/NO
9281     IF p_cust_site_use_rec.gsa_indicator IS NOT NULL AND
9282        p_cust_site_use_rec.gsa_indicator <> FND_API.G_MISS_CHAR
9283     THEN
9284         validate_lookup (
9285             p_column                                => 'gsa_indicator',
9286             p_lookup_type                           => 'YES/NO',
9287             p_column_value                          => p_cust_site_use_rec.gsa_indicator,
9288             x_return_status                         => x_return_status );
9289 
9290         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9291            hz_utility_v2pub.debug(p_message=>'gsa_indicator is lookup code in lookup type YES/NO. ' ||
9292                                                  'x_return_status = ' || x_return_status,
9293                                   p_prefix =>l_debug_prefix,
9294                                   p_msg_level=>fnd_log.level_statement);
9295         END IF;
9296 
9297     END IF;
9298 
9299     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9300            hz_utility_v2pub.debug(p_message=>'(+) after validate gsa_indicator ... ' ||
9301                  'x_return_status = ' || x_return_status,
9302                                   p_prefix =>l_debug_prefix,
9303                                   p_msg_level=>fnd_log.level_statement);
9304     END IF;
9305   END IF;
9306 
9307     ----------------------------------------------
9308     -- validate gl_id_xxx fields
9309     ----------------------------------------------
9310     -- Bug 2553286
9311     -- If site_use_code is not 'BILL_TO', then Revenue, Tax, Freight, Clearing,
9312     -- Unbilled Receivable and Unearned Revenue fields should not be populated.
9313 
9314     IF p_cust_site_use_rec.site_use_code <> 'BILL_TO' OR
9315        ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code <> 'BILL_TO' )
9316     THEN
9317         IF ( p_cust_site_use_rec.gl_id_rev IS NOT NULL AND
9318              p_cust_site_use_rec.gl_id_rev <> FND_API.G_MISS_NUM ) OR
9319            ( p_cust_site_use_rec.gl_id_tax IS NOT NULL AND
9320              p_cust_site_use_rec.gl_id_tax <> FND_API.G_MISS_NUM ) OR
9321            ( p_cust_site_use_rec.gl_id_freight IS NOT NULL AND
9322              p_cust_site_use_rec.gl_id_freight <> FND_API.G_MISS_NUM ) OR
9323            ( p_cust_site_use_rec.gl_id_clearing IS NOT NULL AND
9324              p_cust_site_use_rec.gl_id_clearing <> FND_API.G_MISS_NUM ) OR
9325            ( p_cust_site_use_rec.gl_id_unbilled IS NOT NULL AND
9326              p_cust_site_use_rec.gl_id_unbilled <> FND_API.G_MISS_NUM ) OR
9327            ( p_cust_site_use_rec.gl_id_unearned IS NOT NULL AND
9328              p_cust_site_use_rec.gl_id_unearned <> FND_API.G_MISS_NUM )
9329         THEN
9330             FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9331             FND_MSG_PUB.ADD;
9332             x_return_status := FND_API.G_RET_STS_ERROR;
9333         END IF;
9334 
9335         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9336            hz_utility_v2pub.debug(p_message=>'If site_use_code is not BILL_TO, then Revenue, Tax, Freight, Clearing, ' ||
9337                                         'Unbilled Receivable and Unearned Revenue fields should not be populated. ' ||
9338                                         'x_return_status = ' || x_return_status,
9339                                   p_prefix =>l_debug_prefix,
9340                                   p_msg_level=>fnd_log.level_statement);
9341         END IF;
9342 
9343     END IF;
9344     -- Bug 2553286
9345     -- If site_use_code is not 'DRAWEE', then Unpaid Bills Receivables,
9346     -- Remitted Bills Receivables and Factored Bills Receivables fields should not be populated.
9347 
9348     IF p_cust_site_use_rec.site_use_code <> 'DRAWEE' OR
9349        ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code <> 'DRAWEE' )
9350     THEN
9351         IF ( p_cust_site_use_rec.gl_id_unpaid_rec IS NOT NULL AND
9352              p_cust_site_use_rec.gl_id_unpaid_rec <> FND_API.G_MISS_NUM ) OR
9353            ( p_cust_site_use_rec.gl_id_remittance IS NOT NULL AND
9354              p_cust_site_use_rec.gl_id_remittance <> FND_API.G_MISS_NUM ) OR
9355            ( p_cust_site_use_rec.gl_id_factor IS NOT NULL AND
9356              p_cust_site_use_rec.gl_id_factor <> FND_API.G_MISS_NUM )
9357         THEN
9358             FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9359             FND_MSG_PUB.ADD;
9360             x_return_status := FND_API.G_RET_STS_ERROR;
9361         END IF;
9362 
9363         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9364            hz_utility_v2pub.debug(p_message=>'If site_use_code is not DRAWEE, then Unpaid Bills Receivables, ' ||
9365                                         'Remitted Bills Receivables and Factored Bills Receivables fields should not be populated. ' ||
9366                                         'x_return_status = ' || x_return_status,
9367                                   p_prefix =>l_debug_prefix,
9368                                   p_msg_level=>fnd_log.level_statement);
9369         END IF;
9370 
9371     END IF;
9372     -- Bug 2553286
9373     -- If site_use_code is not 'BILL_TO OR DRAWEE', then Bills Receivables field should not be populated.
9374 
9375     IF p_cust_site_use_rec.site_use_code NOT IN ('BILL_TO', 'DRAWEE') OR
9376         ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code NOT IN ('BILL_TO', 'DRAWEE') )
9377     THEN
9378         IF ( p_cust_site_use_rec.gl_id_rec IS NOT NULL AND
9379              p_cust_site_use_rec.gl_id_rec <> FND_API.G_MISS_NUM )
9380         THEN
9381             FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9382             FND_MSG_PUB.ADD;
9383             x_return_status := FND_API.G_RET_STS_ERROR;
9384         END IF;
9385 
9386         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9387            hz_utility_v2pub.debug(p_message=>'If site_use_code is not BILL_TO OR DRAWEE, then Bills Receivables field should not be populated. ' ||
9388                                                 'x_return_status = ' || x_return_status,
9389                                   p_prefix =>l_debug_prefix,
9390                                   p_msg_level=>fnd_log.level_statement);
9391         END IF;
9392 
9393     END IF;
9394 
9395 
9396     /* 3456489. Get chart of accounts ID. */
9397     BEGIN
9398         l_coa_id := HZ_MO_GLOBAL_CACHE.get_chart_of_accounts_id(
9399                                                 p_cust_site_use_rec.org_id);
9400     EXCEPTION
9401         WHEN NO_DATA_FOUND THEN
9402                 x_return_status := FND_API.G_RET_STS_ERROR;
9403     END;
9404 
9405     /* 3456489. Validate accounts only if Chart of Accounts ID is not null. */
9406     IF (l_coa_id IS NOT NULL) THEN
9407 
9408         ----------------------------------------------
9409         -- validate gl_id_rec
9410         ----------------------------------------------
9411 
9412 
9413        -- gl_id_rec is validate gl field.
9414        IF p_cust_site_use_rec.gl_id_rec IS NOT NULL AND
9415           p_cust_site_use_rec.gl_id_rec <> FND_API.G_MISS_NUM
9416        THEN
9417            validate_gl_id (
9418                p_gl_name                               => 'REC',
9419                p_column_value                          => p_cust_site_use_rec.gl_id_rec,
9420                p_coa_id                                   => l_coa_id,    -- Bug 3456489
9421                x_return_status                         => x_return_status );
9422 
9423            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9424                hz_utility_v2pub.debug(p_message=>'gl_id_rec is validate gl field. ' ||
9425                        'x_return_status = ' || x_return_status,
9426                                       p_prefix =>l_debug_prefix,
9427                                       p_msg_level=>fnd_log.level_statement);
9428            END IF;
9429 
9430        END IF;
9431 
9432         ----------------------------------------------
9433         -- validate gl_id_rev
9434         ----------------------------------------------
9435 
9436         -- gl_id_rev is validate gl field.
9437         IF p_cust_site_use_rec.gl_id_rev IS NOT NULL AND
9438            p_cust_site_use_rec.gl_id_rev <> FND_API.G_MISS_NUM
9439         THEN
9440             validate_gl_id (
9441                 p_gl_name                               => 'REV',
9442                 p_column_value                          => p_cust_site_use_rec.gl_id_rev,
9443                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9444                 x_return_status                         => x_return_status );
9445 
9446             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9447                hz_utility_v2pub.debug(p_message=>'gl_id_rev is validate gl field. ' ||
9448                       'x_return_status = ' || x_return_status,
9449                                       p_prefix =>l_debug_prefix,
9450                                       p_msg_level=>fnd_log.level_statement);
9451             END IF;
9452 
9453         END IF;
9454 
9455         ----------------------------------------------
9456         -- validate gl_id_tax
9457         ----------------------------------------------
9458 
9459         -- gl_id_tax is validate gl field.
9460         IF p_cust_site_use_rec.gl_id_tax IS NOT NULL AND
9461            p_cust_site_use_rec.gl_id_tax <> FND_API.G_MISS_NUM
9462         THEN
9463             validate_gl_id (
9464                 p_gl_name                               => 'TAX',
9465                 p_column_value                          => p_cust_site_use_rec.gl_id_tax,
9466                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9467                 x_return_status                         => x_return_status );
9468 
9469            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9470                hz_utility_v2pub.debug(p_message=>'gl_id_tax is validate gl field. ' ||
9471                    'x_return_status = ' || x_return_status,
9472                                   p_prefix =>l_debug_prefix,
9473                                   p_msg_level=>fnd_log.level_statement);
9474            END IF;
9475 
9476         END IF;
9477 
9478         ----------------------------------------------
9479         -- validate gl_id_freight
9480         ----------------------------------------------
9481 
9482         -- gl_id_freight is validate gl field.
9483         IF p_cust_site_use_rec.gl_id_freight IS NOT NULL AND
9484            p_cust_site_use_rec.gl_id_freight <> FND_API.G_MISS_NUM
9485         THEN
9486             validate_gl_id (
9487                 p_gl_name                               => 'FREIGHT',
9488                 p_column_value                          => p_cust_site_use_rec.gl_id_freight,
9489                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9490                 x_return_status                         => x_return_status );
9491 
9492             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9493                hz_utility_v2pub.debug(p_message=>'gl_id_freight is validate gl field. ' ||
9494                    'x_return_status = ' || x_return_status,
9495                                       p_prefix =>l_debug_prefix,
9496                                       p_msg_level=>fnd_log.level_statement);
9497             END IF;
9498 
9499         END IF;
9500 
9501         ----------------------------------------------
9502         -- validate gl_id_clearing
9503         ----------------------------------------------
9504 
9505         -- gl_id_clearing is validate gl field.
9506         IF p_cust_site_use_rec.gl_id_clearing IS NOT NULL AND
9507            p_cust_site_use_rec.gl_id_clearing <> FND_API.G_MISS_NUM
9508         THEN
9509             validate_gl_id (
9510                 p_gl_name                               => 'CLEARING',
9511                 p_column_value                          => p_cust_site_use_rec.gl_id_clearing,
9512                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9513                 x_return_status                         => x_return_status );
9514 
9515             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9516                hz_utility_v2pub.debug(p_message=>'gl_id_clearing is validate gl field. ' ||
9517                              'x_return_status = ' || x_return_status,
9518                                       p_prefix =>l_debug_prefix,
9519                                       p_msg_level=>fnd_log.level_statement);
9520             END IF;
9521 
9522         END IF;
9523 
9524         ----------------------------------------------
9525         -- validate gl_id_unbilled
9526         ----------------------------------------------
9527 
9528         -- gl_id_unbilled is validate gl field.
9529         IF p_cust_site_use_rec.gl_id_unbilled IS NOT NULL AND
9530            p_cust_site_use_rec.gl_id_unbilled <> FND_API.G_MISS_NUM
9531         THEN
9532             validate_gl_id (
9533                 p_gl_name                               => 'UNBILLED',
9534                 p_column_value                          => p_cust_site_use_rec.gl_id_unbilled,
9535                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9536                 x_return_status                         => x_return_status );
9537 
9538             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9539                hz_utility_v2pub.debug(p_message=>'gl_id_unbilled is validate gl field. ' ||
9540                      'x_return_status = ' || x_return_status,
9541                                       p_prefix =>l_debug_prefix,
9542                                       p_msg_level=>fnd_log.level_statement);
9543             END IF;
9544 
9545         END IF;
9546 
9547         ----------------------------------------------
9548         -- validate gl_id_unearned
9549         ----------------------------------------------
9550 
9551         -- gl_id_unearned is validate gl field.
9552         IF p_cust_site_use_rec.gl_id_unearned IS NOT NULL AND
9553            p_cust_site_use_rec.gl_id_unearned <> FND_API.G_MISS_NUM
9554         THEN
9555             validate_gl_id (
9556                 p_gl_name                               => 'UNEARNED',
9557                 p_column_value                          => p_cust_site_use_rec.gl_id_unearned,
9558                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9559                 x_return_status                         => x_return_status );
9560 
9561             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9562                    hz_utility_v2pub.debug(p_message=>'gl_id_unearned is validate gl field. ' ||
9563                          'x_return_status = ' || x_return_status,
9564                                           p_prefix =>l_debug_prefix,
9565                                           p_msg_level=>fnd_log.level_statement);
9566             END IF;
9567 
9568         END IF;
9569 
9570         ----------------------------------------------
9571             -- validate gl_id_unpaid_rec
9572         ----------------------------------------------
9573 
9574         -- gl_id_unpaid_rec is validate gl field.
9575         IF p_cust_site_use_rec.gl_id_unpaid_rec IS NOT NULL AND
9576            p_cust_site_use_rec.gl_id_unpaid_rec <> FND_API.G_MISS_NUM
9577         THEN
9578             validate_gl_id (
9579                 p_gl_name                               => 'UNPAID_REC',
9580                 p_column_value                          => p_cust_site_use_rec.gl_id_unpaid_rec,
9581                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9582                 x_return_status                         => x_return_status );
9583 
9584                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9585                    hz_utility_v2pub.debug(p_message=>'gl_id_unpaid_rec is validate gl field. ' ||
9586                                   'x_return_status = ' || x_return_status,
9587                                           p_prefix =>l_debug_prefix,
9588                                           p_msg_level=>fnd_log.level_statement);
9589                 END IF;
9590 
9591         END IF;
9592 
9593         ----------------------------------------------
9594         -- validate gl_id_remittance
9595         ----------------------------------------------
9596 
9597         -- gl_id_remittance is validate gl field.
9598         IF p_cust_site_use_rec.gl_id_remittance IS NOT NULL AND
9599            p_cust_site_use_rec.gl_id_remittance <> FND_API.G_MISS_NUM
9600         THEN
9601             validate_gl_id (
9602                 p_gl_name                               => 'REMITTANCE',
9603                 p_column_value                          => p_cust_site_use_rec.gl_id_remittance,
9604                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9605                 x_return_status                         => x_return_status );
9606 
9607                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9608                    hz_utility_v2pub.debug(p_message=>'gl_id_remittance is validate gl field. ' ||
9609                                                  'x_return_status = ' || x_return_status,
9610                                           p_prefix =>l_debug_prefix,
9611                                           p_msg_level=>fnd_log.level_statement);
9612                 END IF;
9613 
9614         END IF;
9615 
9616         ----------------------------------------------
9617             -- validate gl_id_factor
9618         ----------------------------------------------
9619 
9620         -- gl_id_factor is validate gl field.
9621         IF p_cust_site_use_rec.gl_id_factor IS NOT NULL AND
9622            p_cust_site_use_rec.gl_id_factor <> FND_API.G_MISS_NUM
9623         THEN
9624             validate_gl_id (
9625                 p_gl_name                               => 'FACTOR',
9626                 p_column_value                          => p_cust_site_use_rec.gl_id_factor,
9627                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9628                 x_return_status                         => x_return_status );
9629 
9630             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9631                    hz_utility_v2pub.debug(p_message=>'gl_id_factor is validate gl field. ' ||
9632                          'x_return_status = ' || x_return_status,
9633                                           p_prefix =>l_debug_prefix,
9634                                           p_msg_level=>fnd_log.level_statement);
9635             END IF;
9636 
9637         END IF;
9638 
9639         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9640            hz_utility_v2pub.debug(p_message=>'(+) after validate gl_xxx ... ' ||
9641                          'x_return_status = ' || x_return_status,
9642                                   p_prefix =>l_debug_prefix,
9643                                   p_msg_level=>fnd_log.level_statement);
9644         END IF;
9645 
9646     END IF; -- Corresponding to IF l_coa_id IS NOT NULL  (Bug 3456489)
9647     --------------------------------------
9648     -- validate ship_via
9649     --------------------------------------
9650 
9651     -- ship_via is foreign key to oe_ship_methods_v
9652     -- can be used in both single and multi org case.
9653     IF p_cust_site_use_rec.ship_via IS NOT NULL AND
9654        p_cust_site_use_rec.ship_via <> FND_API.G_MISS_CHAR AND
9655        ( p_create_update_flag = 'C' OR
9656          ( p_create_update_flag = 'U'  AND
9657            p_cust_site_use_rec.ship_via <> NVL( l_ship_via, FND_API.G_MISS_CHAR ) ) )
9658     THEN
9659         check_oe_ship_methods_v_fk (
9660             p_entity                                 => 'SITE_USE',
9661             p_column                                 => 'ship_via',
9662             p_column_value                           => p_cust_site_use_rec.ship_via,
9663             x_return_status                          => x_return_status );
9664 
9665         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9666            hz_utility_v2pub.debug(p_message=>'ship_via is foreign key to oe_ship_methods_v. ' ||
9667                           'x_return_status = ' || x_return_status,
9668                                   p_prefix =>l_debug_prefix,
9669                                   p_msg_level=>fnd_log.level_statement);
9670         END IF;
9671 
9672     END IF;
9673 
9674     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9675            hz_utility_v2pub.debug(p_message=>'(+) after validate ship_via ... ' ||
9676                         'x_return_status = ' || x_return_status,
9677                                   p_prefix =>l_debug_prefix,
9678                                   p_msg_level=>fnd_log.level_statement);
9679     END IF;
9680 
9681 
9682     --------------------------------------
9683     -- validate created_by_module
9684     --------------------------------------
9685 
9686     validate_created_by_module(
9687       p_create_update_flag     => p_create_update_flag,
9688       p_created_by_module      => p_cust_site_use_rec.created_by_module,
9689       p_old_created_by_module  => l_created_by_module,
9690       x_return_status          => x_return_status);
9691 
9692     --------------------------------------
9693     -- validate application_id
9694     --------------------------------------
9695 
9696     validate_application_id(
9697       p_create_update_flag     => p_create_update_flag,
9698       p_application_id         => p_cust_site_use_rec.application_id,
9699       p_old_application_id     => l_application_id,
9700       x_return_status          => x_return_status);
9701 
9702     -- Debug info.
9703 
9704     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9705         hz_utility_v2pub.debug(p_message=>'validate_cust_site_use (-)',
9706                                p_prefix=>l_debug_prefix,
9707                                p_msg_level=>fnd_log.level_procedure);
9708     END IF;
9709 
9710 END validate_cust_site_use;
9711 
9712 /**
9713  * PROCEDURE validate_cust_account_role
9714  *
9715  * DESCRIPTION
9716  *     Validates customer account role record. Checks for
9717  *         uniqueness
9718  *         lookup types
9719  *         mandatory columns
9720  *         non-updateable fields
9721  *         foreign key validations
9722  *         other validations
9723  *
9724  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
9725  *
9726  * ARGUMENTS
9727  *   IN:
9728  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
9729  *     p_cust_account_role_rec        Customer account role record.
9730  *     p_rowid                        Rowid of the record (used only in update mode).
9731  *   IN/OUT:
9732  *     x_return_status                Return status after the call. The status can
9733  *                                    be FND_API.G_RET_STS_SUCCESS (success),
9734  *                                    FND_API.G_RET_STS_ERROR (error),
9735  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
9736  *
9737  * NOTES
9738  *
9739  * MODIFICATION HISTORY
9740  *
9741  *   07-23-2001    Jianying Huang      o Created.
9742  *
9743  */
9744 
9745 PROCEDURE validate_cust_account_role (
9746     p_create_update_flag                    IN     VARCHAR2,
9747     p_cust_account_role_rec                 IN     HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE,
9748     p_rowid                                 IN     ROWID,
9749     x_return_status                         IN OUT NOCOPY VARCHAR2
9750 ) IS
9751 
9752     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_account_role'
9753 
9754     l_dummy                                 VARCHAR2(1);
9755 
9756     l_party_id                              NUMBER;
9757     l_cust_account_id                       NUMBER;
9758     l_cust_acct_site_id                     NUMBER;
9759     l_role_type                             HZ_CUST_ACCOUNT_ROLES.role_type%TYPE;
9760     l_created_by_module                     HZ_CUST_ACCOUNT_ROLES.created_by_module%TYPE;
9761     l_application_id                        NUMBER;
9762     l_orig_system_reference                 HZ_CUST_ACCOUNT_ROLES.orig_system_reference%TYPE;
9763     l_status                                HZ_CUST_ACCOUNT_ROLES.status%TYPE;
9764     l_validate_flag varchar2(1) := 'Y';
9765     l_mosr_owner_table_id number;
9766     l_return_status                         VARCHAR2(1);
9767     l_org_id                                HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
9768     l_temp_return_status   VARCHAR2(10); -- for storing return status from
9769                                          -- hz_orig_system_ref_pub.get_owner_table_id
9770 
9771 BEGIN
9772 
9773     -- Check if API is called in debug mode. If yes, enable debug.
9774     --enable_debug;
9775 
9776     -- Debug info.
9777 
9778     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9779         hz_utility_v2pub.debug(p_message=>'validate_cust_account_role (+)',
9780                                p_prefix=>l_debug_prefix,
9781                                p_msg_level=>fnd_log.level_procedure);
9782     END IF;
9783 
9784 
9785     -- Select fields for later use during update.
9786     IF p_create_update_flag = 'U' THEN
9787         SELECT PARTY_ID, CUST_ACCOUNT_ID, CUST_ACCT_SITE_ID,
9788                ROLE_TYPE, ORIG_SYSTEM_REFERENCE, CREATED_BY_MODULE,
9789                APPLICATION_ID, STATUS
9790         INTO l_party_id, l_cust_account_id, l_cust_acct_site_id,
9791              l_role_type, l_orig_system_reference, l_created_by_module,
9792              l_application_id, l_status
9793         FROM HZ_CUST_ACCOUNT_ROLES
9794         WHERE CUST_ACCOUNT_ROLE_ID = p_cust_account_role_rec.cust_account_role_id;
9795     END IF;
9796 
9797     --------------------------------------
9798     -- validate cust_account_role_id
9799     --------------------------------------
9800 /****Logical APIs - validation not required****/
9801   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9802     IF p_create_update_flag = 'C' THEN
9803 
9804         -- If primary key value is passed, check for uniqueness.
9805         -- If primary key value is not passed, it will be generated
9806         -- from sequence by table handler.
9807 
9808         IF p_cust_account_role_rec.cust_account_role_id IS NOT NULL AND
9809            p_cust_account_role_rec.cust_account_role_id <> FND_API.G_MISS_NUM
9810         THEN
9811         BEGIN
9812             SELECT 'Y' INTO l_dummy
9813             FROM HZ_CUST_ACCOUNT_ROLES
9814             WHERE CUST_ACCOUNT_ROLE_ID = p_cust_account_role_rec.cust_account_role_id;
9815 
9816             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9817             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_role_id' );
9818             FND_MSG_PUB.ADD;
9819             x_return_status := FND_API.G_RET_STS_ERROR;
9820         EXCEPTION
9821             WHEN NO_DATA_FOUND THEN
9822                 NULL;
9823         END;
9824 
9825         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9826            hz_utility_v2pub.debug(p_message=>'cust_account_role_id is unique during creation if passed in. ' ||
9827                                                 'x_return_status = ' || x_return_status,
9828                                   p_prefix =>l_debug_prefix,
9829                                   p_msg_level=>fnd_log.level_statement);
9830         END IF;
9831 
9832         END IF;
9833 
9834     END IF;
9835 
9836     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9837            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_role_id ... ' ||
9838                                                 'x_return_status = ' || x_return_status,
9839                                   p_prefix =>l_debug_prefix,
9840                                   p_msg_level=>fnd_log.level_statement);
9841     END IF;
9842   END IF;
9843 
9844     ----------------------------------------------
9845     -- validate party_id
9846     ----------------------------------------------
9847 /****Logical APIs - validation not required****/
9848   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9849     -- party_id is mandatory field
9850     -- Since party_id is non-updateable, we only need to check mandatory
9851     -- during creation.
9852 
9853     IF p_create_update_flag = 'C' THEN
9854         validate_mandatory (
9855             p_create_update_flag                    => p_create_update_flag,
9856             p_column                                => 'party_id',
9857             p_column_value                          => p_cust_account_role_rec.party_id,
9858             x_return_status                         => x_return_status );
9859 
9860         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9861            hz_utility_v2pub.debug(p_message=>'party_id is mandatory. ' ||
9862                                         'x_return_status = ' || x_return_status,
9863                                   p_prefix =>l_debug_prefix,
9864                                   p_msg_level=>fnd_log.level_statement);
9865         END IF;
9866 
9867     END IF;
9868 
9869     -- party_id is non-updateable field
9870     IF p_create_update_flag = 'U' AND
9871        p_cust_account_role_rec.party_id IS NOT NULL
9872     THEN
9873         validate_nonupdateable (
9874             p_column                                => 'party_id',
9875             p_column_value                          => p_cust_account_role_rec.party_id,
9876             p_old_column_value                      => l_party_id,
9877             x_return_status                         => x_return_status );
9878 
9879         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9880            hz_utility_v2pub.debug(p_message=>'party_id is non-updateable. ' ||
9881                                          'x_return_status = ' || x_return_status,
9882                                   p_prefix =>l_debug_prefix,
9883                                   p_msg_level=>fnd_log.level_statement);
9884         END IF;
9885 
9886     END IF;
9887 
9888     -- party_id is type of party_relationship.
9889     -- party_id is the object_id in the relationship. Subject_id is the party
9890     -- referened by cust_account_id.
9891     -- However, we decide donot add this validation for now since we may
9892     -- need migrate data. (Dylan's reply)
9893 
9894     -- party_id is foreign key to hz_parties
9895     -- Since party_id is mandatory and non-updateable, we only need to
9896     -- check FK during creation.
9897 
9898     IF p_create_update_flag = 'C' AND
9899        p_cust_account_role_rec.party_id IS NOT NULL AND
9900        p_cust_account_role_rec.party_id <> FND_API.G_MISS_NUM
9901     THEN
9902         check_party_fk (
9903             p_column                                => 'party_id',
9904             p_column_value                          => p_cust_account_role_rec.party_id,
9905             x_return_status                         => x_return_status );
9906 
9907         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9908            hz_utility_v2pub.debug(p_message=>'party_id is foreign key to hz_parties. ' ||
9909                                         'x_return_status = ' || x_return_status,
9910                                   p_prefix =>l_debug_prefix,
9911                                   p_msg_level=>fnd_log.level_statement);
9912         END IF;
9913 
9914     END IF;
9915 
9916     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9917            hz_utility_v2pub.debug(p_message=>'(+) after validate party_id ... ' ||
9918             'x_return_status = ' || x_return_status,
9919                                   p_prefix =>l_debug_prefix,
9920                                   p_msg_level=>fnd_log.level_statement);
9921     END IF;
9922   END IF;
9923 
9924     ----------------------------------------------
9925     -- validate cust_account_id
9926     ----------------------------------------------
9927 /****Logical APIs - validation not required****/
9928   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9929     -- cust_account_id is mandatory field
9930     -- Since cust_account_id is non-updateable, we only need to check mandatory
9931     -- during creation.
9932 
9933     IF p_create_update_flag = 'C' THEN
9934         validate_mandatory (
9935             p_create_update_flag                    => p_create_update_flag,
9936             p_column                                => 'cust_account_id',
9937             p_column_value                          => p_cust_account_role_rec.cust_account_id,
9938             x_return_status                         => x_return_status );
9939 
9940         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9941            hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
9942                                                 'x_return_status = ' || x_return_status,
9943                                   p_prefix =>l_debug_prefix,
9944                                   p_msg_level=>fnd_log.level_statement);
9945         END IF;
9946 
9947     END IF;
9948 
9949     -- cust_account_id is non-updateable field
9950     IF p_create_update_flag = 'U' AND
9951        p_cust_account_role_rec.cust_account_id IS NOT NULL
9952     THEN
9953         validate_nonupdateable (
9954             p_column                                => 'cust_account_id',
9955             p_column_value                          => p_cust_account_role_rec.cust_account_id,
9956             p_old_column_value                      => l_cust_account_id,
9957             x_return_status                         => x_return_status );
9958 
9959         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9960            hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
9961                                         'x_return_status = ' || x_return_status,
9962                                   p_prefix =>l_debug_prefix,
9963                                   p_msg_level=>fnd_log.level_statement);
9964         END IF;
9965 
9966     END IF;
9967 
9968     -- cust_account_id is foreign key to hz_cust_accounts
9969     -- Since cust_account_id is mandatory and non-updateable,
9970     -- we only need to check FK during creation.
9971 
9972     IF p_create_update_flag = 'C' AND
9973        p_cust_account_role_rec.cust_account_id IS NOT NULL AND
9974        p_cust_account_role_rec.cust_account_id <> FND_API.G_MISS_NUM
9975     THEN
9976         check_cust_account_fk (
9977             p_column                                 => 'cust_account_id',
9978             p_column_value                           => p_cust_account_role_rec.cust_account_id,
9979             x_return_status                          => x_return_status );
9980 
9981         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9982            hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
9983                                                 'x_return_status = ' || x_return_status,
9984                                   p_prefix =>l_debug_prefix,
9985                                   p_msg_level=>fnd_log.level_statement);
9986         END IF;
9987 
9988     END IF;
9989 
9990     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9991            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
9992             'x_return_status = ' || x_return_status,
9993                                   p_prefix =>l_debug_prefix,
9994                                   p_msg_level=>fnd_log.level_statement);
9995     END IF;
9996   END IF;
9997 
9998     ----------------------------------------------
9999     -- validate cust_acct_site_id
10000     ----------------------------------------------
10001 /****Logical APIs - validation not required****/
10002   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10003     -- cust_acct_site_id is non-updateable field
10004     IF p_create_update_flag = 'U' AND
10005        p_cust_account_role_rec.cust_acct_site_id IS NOT NULL
10006     THEN
10007         validate_nonupdateable (
10008             p_column                                => 'cust_acct_site_id',
10009             p_column_value                          => p_cust_account_role_rec.cust_acct_site_id,
10010             p_old_column_value                      => l_cust_acct_site_id,
10011             x_return_status                         => x_return_status );
10012 
10013         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10014            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is non-updateable. ' ||
10015                                         'x_return_status = ' || x_return_status,
10016                                   p_prefix =>l_debug_prefix,
10017                                   p_msg_level=>fnd_log.level_statement);
10018         END IF;
10019 
10020     END IF;
10021 
10022     -- cust_acct_site_id is foreign key to hz_cust_acct_sites.
10023     -- The cust_account_id in hz_cust_acct_sites should be same
10024     -- as we put in cust_account_id in hz_cust_account_roles.
10025     -- Since cust_acct_site_id is non-updateable, we only need to
10026     -- check FK during creation.
10027 
10028     IF p_create_update_flag = 'C' AND
10029        p_cust_account_role_rec.cust_acct_site_id IS NOT NULL AND
10030        p_cust_account_role_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
10031     THEN
10032     BEGIN
10033 
10034         SELECT CUST_ACCOUNT_ID,ORG_ID
10035         INTO l_cust_account_id,l_org_id
10036         FROM HZ_CUST_ACCT_SITES_ALL
10037         WHERE CUST_ACCT_SITE_ID = p_cust_account_role_rec.cust_acct_site_id;
10038 
10039         -- Bug 4650473. Check if org is accessible.
10040         BEGIN
10041           MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
10042         EXCEPTION
10043         WHEN OTHERS
10044         THEN
10045            x_return_status := FND_API.G_RET_STS_ERROR;
10046         END;
10047 
10048        IF l_cust_account_id <> p_cust_account_role_rec.cust_account_id THEN
10049             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_SITE_MISSMATCH' );
10050             FND_MSG_PUB.ADD;
10051             x_return_status := FND_API.G_RET_STS_ERROR;
10052         END IF;
10053 
10054     EXCEPTION
10055         WHEN NO_DATA_FOUND THEN
10056             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10057             FND_MESSAGE.SET_TOKEN( 'FK', 'cust_acct_site_id' );
10058             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id' );
10059             FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_acct_sites' );
10060             FND_MSG_PUB.ADD;
10061             x_return_status := FND_API.G_RET_STS_ERROR;
10062     END;
10063 
10064         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10065            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is foreign key to hz_cust_acct_sites and cust_account_id in hz_cust_acct_sites should be same as we put in cust_account_id in hz_cust_account_roles.' ||
10066                           'x_return_status = ' || x_return_status,
10067                                   p_prefix =>l_debug_prefix,
10068                                   p_msg_level=>fnd_log.level_statement);
10069         END IF;
10070 
10071     END IF;
10072 
10073     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10074            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
10075                         'x_return_status = ' || x_return_status,
10076                                   p_prefix =>l_debug_prefix,
10077                                   p_msg_level=>fnd_log.level_statement);
10078     END IF;
10079   END IF;
10080 
10081     ----------------------------------------------
10082     -- validate role_type
10083     ----------------------------------------------
10084 
10085     -- role_type is mandatory field
10086     -- Since role_type is non-updateable, we only need to check mandatory
10087     -- during creation.
10088 
10089     IF p_create_update_flag = 'C' THEN
10090         validate_mandatory (
10091             p_create_update_flag                    => p_create_update_flag,
10092             p_column                                => 'role_type',
10093             p_column_value                          => p_cust_account_role_rec.role_type,
10094             x_return_status                         => x_return_status );
10095 
10096         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10097            hz_utility_v2pub.debug(p_message=>'role_type is mandatory. ' ||
10098                 'x_return_status = ' || x_return_status,
10099                                   p_prefix =>l_debug_prefix,
10100                                   p_msg_level=>fnd_log.level_statement);
10101         END IF;
10102 
10103     END IF;
10104 
10105     -- role_type is non-updateable field
10106     IF p_create_update_flag = 'U' AND
10107        p_cust_account_role_rec.role_type IS NOT NULL
10108     THEN
10109         validate_nonupdateable (
10110             p_column                                => 'role_type',
10111             p_column_value                          => p_cust_account_role_rec.role_type,
10112             p_old_column_value                      => l_role_type,
10113             x_return_status                         => x_return_status );
10114 
10115         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10116            hz_utility_v2pub.debug(p_message=>'role_type is non-updateable. ' ||
10117                                                  'x_return_status = ' || x_return_status,
10118                                   p_prefix =>l_debug_prefix,
10119                                   p_msg_level=>fnd_log.level_statement);
10120         END IF;
10121 
10122     END IF;
10123 
10124     -- role_type is lookup code in lookup type ACCT_ROLE_TYPE
10125     -- Since role_type is non-updateable, we only need to do the checking
10126     -- during creation.
10127 
10128     IF p_create_update_flag = 'C' AND
10129        p_cust_account_role_rec.role_type IS NOT NULL AND
10130        p_cust_account_role_rec.role_type <> FND_API.G_MISS_CHAR
10131     THEN
10132         validate_lookup (
10133             p_column                                => 'role_type',
10134             p_lookup_type                           => 'ACCT_ROLE_TYPE',
10135             p_column_value                          => p_cust_account_role_rec.role_type,
10136             x_return_status                         => x_return_status );
10137 
10138         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10139            hz_utility_v2pub.debug(p_message=>'role_type is lookup code in lookup type ACCT_ROLE_TYPE. ' ||
10140                                                 'x_return_status = ' || x_return_status,
10141                                   p_prefix =>l_debug_prefix,
10142                                   p_msg_level=>fnd_log.level_statement);
10143         END IF;
10144 
10145     END IF;
10146 
10147     -- The combination of CUST_ACCOUNT_ID, PARTY_ID, ROLE_TYPE should be unique.
10148     -- Or the combination of CUST_ACCT_SITE_ID, PARTY_ID, ROLE_TYPE should be unique.
10149     -- We only need to check this during creation because all of these
10150     -- three columns are non-updateable.
10151 
10152     IF p_create_update_flag = 'C' THEN
10153         IF p_cust_account_role_rec.cust_acct_site_id IS NULL OR
10154            p_cust_account_role_rec.cust_acct_site_id = FND_API.G_MISS_NUM
10155         THEN
10156         BEGIN
10157             SELECT 'Y' INTO l_dummy
10158             FROM HZ_CUST_ACCOUNT_ROLES
10159             WHERE CUST_ACCOUNT_ID = p_cust_account_role_rec.cust_account_id
10160             AND PARTY_ID = p_cust_account_role_rec.party_id
10161             AND CUST_ACCT_SITE_ID IS NULL
10162             AND ROLE_TYPE = p_cust_account_role_rec.role_type
10163             AND STATUS='A' -- Bug 4624292
10164             AND ROWNUM = 1;
10165 
10166             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10167             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_id - role_type' );
10168             FND_MSG_PUB.ADD;
10169             x_return_status := FND_API.G_RET_STS_ERROR;
10170         EXCEPTION
10171             WHEN NO_DATA_FOUND THEN
10172                 NULL;
10173         END;
10174 
10175         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10176            hz_utility_v2pub.debug(p_message=>'the combination of cust_account_id, party_id, role_type should be unique. ' ||
10177                                   'x_return_status = ' || x_return_status,
10178                                   p_prefix =>l_debug_prefix,
10179                                   p_msg_level=>fnd_log.level_statement);
10180         END IF;
10181 
10182         ELSE
10183         BEGIN
10184             SELECT 'Y' INTO l_dummy
10185             FROM HZ_CUST_ACCOUNT_ROLES
10186             WHERE CUST_ACCT_SITE_ID = p_cust_account_role_rec.cust_acct_site_id
10187             AND PARTY_ID = p_cust_account_role_rec.party_id
10188             AND ROLE_TYPE = p_cust_account_role_rec.role_type
10189             AND STATUS='A' -- Bug 4624292
10190             AND ROWNUM = 1;
10191 
10192             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10193             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - party_id - role_type' );
10194             FND_MSG_PUB.ADD;
10195             x_return_status := FND_API.G_RET_STS_ERROR;
10196         EXCEPTION
10197             WHEN NO_DATA_FOUND THEN
10198                 NULL;
10199         END;
10200 
10201         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10202            hz_utility_v2pub.debug(p_message=>'the combination of cust_acct_site_id, party_id, role_type should be unique. ' ||
10203                                                   'x_return_status = ' || x_return_status,
10204                                   p_prefix =>l_debug_prefix,
10205                                   p_msg_level=>fnd_log.level_statement);
10206         END IF;
10207 
10208         END IF;
10209 
10210     ELSE -- Update case (Bug 4624292)
10211       IF p_cust_account_role_rec.status='A'
10212          AND l_status='I'
10213       THEN
10214         IF l_cust_acct_site_id IS NOT NULL
10215         THEN
10216         BEGIN
10217             SELECT 'Y' INTO l_dummy
10218             FROM HZ_CUST_ACCOUNT_ROLES
10219             WHERE
10220             CUST_ACCT_SITE_ID = nvl(p_cust_account_role_rec.cust_acct_site_id,l_cust_acct_site_id)
10221             AND PARTY_ID = nvl(p_cust_account_role_rec.party_id,l_party_id)
10222             AND ROLE_TYPE = nvl(p_cust_account_role_rec.role_type,l_role_type)
10223             AND STATUS='A'
10224             AND ROWID<>p_rowid
10225             AND ROWNUM = 1;
10226 
10227             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10228             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - party_id - role_type' );
10229             FND_MSG_PUB.ADD;
10230             x_return_status := FND_API.G_RET_STS_ERROR;
10231         EXCEPTION
10232             WHEN NO_DATA_FOUND THEN
10233                 NULL;
10234         END;
10235 
10236         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10237            hz_utility_v2pub.debug(p_message=>'the combination of cust_acct_site_id, party_id, role_type should be unique. ' ||
10238                                                   'x_return_status = ' || x_return_status,
10239                                   p_prefix =>l_debug_prefix,
10240                                   p_msg_level=>fnd_log.level_statement);
10241         END IF;
10242 
10243         ELSE
10244         BEGIN
10245             SELECT 'Y' INTO l_dummy
10246             FROM HZ_CUST_ACCOUNT_ROLES
10247             WHERE
10248             CUST_ACCT_SITE_ID IS NULL
10249             AND CUST_ACCOUNT_ID = nvl(p_cust_account_role_rec.cust_account_id,l_cust_account_id)
10250             AND PARTY_ID = nvl(p_cust_account_role_rec.party_id,l_party_id)
10251             AND ROLE_TYPE = nvl(p_cust_account_role_rec.role_type,l_role_type)
10252             AND STATUS='A'
10253             AND ROWID<>p_rowid
10254             AND ROWNUM = 1;
10255 
10256             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10257             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_id - role_type' );
10258             FND_MSG_PUB.ADD;
10259             x_return_status := FND_API.G_RET_STS_ERROR;
10260         EXCEPTION
10261             WHEN NO_DATA_FOUND THEN
10262                 NULL;
10263         END;
10264 
10265         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10266            hz_utility_v2pub.debug(p_message=>'the combination of cust_account_id, party_id, role_type should be unique. ' ||
10267                                   'x_return_status = ' || x_return_status,
10268                                   p_prefix =>l_debug_prefix,
10269                                   p_msg_level=>fnd_log.level_statement);
10270         END IF;
10271 
10272         END IF;
10273       END IF;
10274     END IF;
10275 
10276     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10277            hz_utility_v2pub.debug(p_message=>'(+) after validate role_type ... ' ||
10278                                          'x_return_status = ' || x_return_status,
10279                                   p_prefix =>l_debug_prefix,
10280                                   p_msg_level=>fnd_log.level_statement);
10281     END IF;
10282 
10283 
10284     ----------------------------------------------
10285     -- validate orig_system_reference
10286     ----------------------------------------------
10287 /****Logical APIs - validation not required****/
10288   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10289        IF (p_cust_account_role_rec.orig_system is not null and p_cust_account_role_rec.orig_system <>fnd_api.g_miss_char)
10290     and (p_cust_account_role_rec.orig_system_reference is not null and p_cust_account_role_rec.orig_system_reference <>fnd_api.g_miss_char)
10291     and p_create_update_flag = 'U'
10292    then
10293         hz_orig_system_ref_pub.get_owner_table_id
10294         (p_orig_system => p_cust_account_role_rec.orig_system,
10295         p_orig_system_reference => p_cust_account_role_rec.orig_system_reference,
10296         p_owner_table_name =>  'HZ_CUST_ACCOUNT_ROLES',
10297         x_owner_table_id => l_mosr_owner_table_id,
10298         x_return_status => l_temp_return_status);
10299 
10300         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
10301 		    l_mosr_owner_table_id= nvl(p_cust_account_role_rec.cust_account_role_id,l_mosr_owner_table_id))
10302         THEN
10303                 l_validate_flag := 'N';
10304         END IF;
10305 
10306         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
10307 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
10308 		-- In case of success, leave it to carry over previous value as before this call.
10309 		-- Fix for Bug 5498116 (29-AUG-2006)
10310         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
10311           x_return_status := l_temp_return_status;
10312         END IF;
10313 
10314     end if;
10315     -- orig_system_reference is non-updateable field
10316     IF p_create_update_flag = 'U' AND
10317        p_cust_account_role_rec.orig_system_reference IS NOT NULL
10318        and l_validate_flag = 'Y'
10319     THEN
10320         validate_nonupdateable (
10321             p_column                                => 'orig_system_reference',
10322             p_column_value                          => p_cust_account_role_rec.orig_system_reference,
10323             p_old_column_value                      => l_orig_system_reference,
10324             x_return_status                         => x_return_status );
10325 
10326         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10327            hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
10328                                                 'x_return_status = ' || x_return_status,
10329                                   p_prefix =>l_debug_prefix,
10330                                   p_msg_level=>fnd_log.level_statement);
10331         END IF;
10332 
10333     END IF;
10334 
10335     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10336            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
10337                                         'x_return_status = ' || x_return_status,
10338                                   p_prefix =>l_debug_prefix,
10339                                   p_msg_level=>fnd_log.level_statement);
10340     END IF;
10341   END IF;
10342 
10343     ----------------------------------------------
10344     -- validate primary_flag
10345     ----------------------------------------------
10346 /****Logical APIs - validation not required****/
10347   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10348 
10349     -- primary_flag is lookup code in lookup type YES/NO
10350     IF p_cust_account_role_rec.primary_flag IS NOT NULL AND
10351        p_cust_account_role_rec.primary_flag <> FND_API.G_MISS_CHAR
10352     THEN
10353         validate_lookup (
10354             p_column                                => 'primary_flag',
10355             p_lookup_type                           => 'YES/NO',
10356             p_column_value                          => p_cust_account_role_rec.primary_flag,
10357             x_return_status                         => x_return_status );
10358 
10359         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10360            hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
10361                                         'x_return_status = ' || x_return_status,
10362                                   p_prefix =>l_debug_prefix,
10363                                   p_msg_level=>fnd_log.level_statement);
10364         END IF;
10365 
10366     END IF;
10367   END IF;
10368 
10369     -- primary_flag is unique per cust_account_id or cust_acct_site_id
10370 
10371     IF p_cust_account_role_rec.primary_flag = 'Y' THEN
10372         IF p_create_update_flag = 'C' THEN
10373             l_cust_account_id := p_cust_account_role_rec.cust_account_id;
10374             l_cust_acct_site_id := p_cust_account_role_rec.cust_acct_site_id;
10375         END IF;
10376 
10377         IF l_cust_acct_site_id IS NULL OR
10378            l_cust_acct_site_id = FND_API.G_MISS_NUM
10379         THEN
10380         BEGIN
10381             SELECT 'Y' INTO l_dummy
10382             FROM HZ_CUST_ACCOUNT_ROLES
10383             WHERE CUST_ACCOUNT_ID = l_cust_account_id
10384             AND CUST_ACCT_SITE_ID IS NULL
10385             AND PRIMARY_FLAG = 'Y'
10386             AND ( p_create_update_flag = 'C' OR
10387                   p_create_update_flag = 'U' AND ROWID <> p_rowid )
10388             AND ROWNUM = 1;
10389 
10390             FND_MESSAGE.SET_NAME( 'AR', 'HZ_CUST_ACCT_ROLE_PRIMARY' );
10391             FND_MESSAGE.SET_TOKEN( 'ENTITY', 'account' );
10392             FND_MSG_PUB.ADD;
10393             x_return_status := FND_API.G_RET_STS_ERROR;
10394         EXCEPTION
10395             WHEN NO_DATA_FOUND THEN
10396                 NULL;
10397         END;
10398 
10399         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10400            hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_account_id. ' ||
10401                                  'x_return_status = ' || x_return_status,
10402                                   p_prefix =>l_debug_prefix,
10403                                   p_msg_level=>fnd_log.level_statement);
10404         END IF;
10405 
10406         ELSE
10407         BEGIN
10408             SELECT 'Y' INTO l_dummy
10409             FROM HZ_CUST_ACCOUNT_ROLES
10410             WHERE CUST_ACCOUNT_ID = l_cust_account_id
10411             AND CUST_ACCT_SITE_ID = l_cust_acct_site_id
10412             AND PRIMARY_FLAG = 'Y'
10413             AND ( p_create_update_flag = 'C' OR
10414                   p_create_update_flag = 'U' AND ROWID <> p_rowid )
10415             AND ROWNUM = 1;
10416 
10417             FND_MESSAGE.SET_NAME( 'AR', 'HZ_CUST_ACCT_ROLE_PRIMARY' );
10418             FND_MESSAGE.SET_TOKEN( 'ENTITY', 'account site' );
10419             FND_MSG_PUB.ADD;
10420             x_return_status := FND_API.G_RET_STS_ERROR;
10421         EXCEPTION
10422             WHEN NO_DATA_FOUND THEN
10423                 NULL;
10424         END;
10425 
10426         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10427            hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_acct_site_id. ' ||
10428                                         'x_return_status = ' || x_return_status,
10429                                   p_prefix =>l_debug_prefix,
10430                                   p_msg_level=>fnd_log.level_statement);
10431         END IF;
10432 
10433         END IF;
10434     END IF;
10435 
10436     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10437            hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
10438                                         'x_return_status = ' || x_return_status,
10439                                   p_prefix =>l_debug_prefix,
10440                                   p_msg_level=>fnd_log.level_statement);
10441     END IF;
10442 
10443 
10444     --------------------------------------
10445     -- validate status
10446     --------------------------------------
10447 
10448     -- status cannot be set to null during update
10449     IF p_create_update_flag = 'U' AND
10450        p_cust_account_role_rec.status IS NOT NULL
10451     THEN
10452         validate_cannot_update_to_null (
10453             p_column                                => 'status',
10454             p_column_value                          => p_cust_account_role_rec.status,
10455             x_return_status                         => x_return_status );
10456 
10457         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10458            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
10459                 'x_return_status = ' || x_return_status,
10460                                   p_prefix =>l_debug_prefix,
10461                                   p_msg_level=>fnd_log.level_statement);
10462         END IF;
10463 
10464     END IF;
10465 
10466 /****Logical APIs - validation not required****/
10467   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10468     -- status is lookup code in lookup type REGISTRY_STATUS because
10469     -- the status is used in party merge.
10470     IF p_cust_account_role_rec.status IS NOT NULL AND
10471        p_cust_account_role_rec.status <> FND_API.G_MISS_CHAR AND
10472        ( p_create_update_flag = 'C' OR
10473          ( p_create_update_flag = 'U' AND
10474            p_cust_account_role_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
10475     THEN
10476         validate_lookup (
10477             p_column                                => 'status',
10478             p_lookup_type                           => 'REGISTRY_STATUS',
10479             p_column_value                          => p_cust_account_role_rec.status,
10480             x_return_status                         => x_return_status );
10481 
10482         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10483            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10484                 'x_return_status = ' || x_return_status,
10485                                   p_prefix =>l_debug_prefix,
10486                                   p_msg_level=>fnd_log.level_statement);
10487         END IF;
10488 
10489     END IF;
10490   END IF;
10491 
10492     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10493            hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
10494             'x_return_status = ' || x_return_status,
10495                                   p_prefix =>l_debug_prefix,
10496                                   p_msg_level=>fnd_log.level_statement);
10497     END IF;
10498 
10499 
10500     --------------------------------------
10501     -- validate created_by_module
10502     --------------------------------------
10503 
10504     validate_created_by_module(
10505       p_create_update_flag     => p_create_update_flag,
10506       p_created_by_module      => p_cust_account_role_rec.created_by_module,
10507       p_old_created_by_module  => l_created_by_module,
10508       x_return_status          => x_return_status);
10509 
10510     --------------------------------------
10511     -- validate application_id
10512     --------------------------------------
10513 
10514     validate_application_id(
10515       p_create_update_flag     => p_create_update_flag,
10516       p_application_id         => p_cust_account_role_rec.application_id,
10517       p_old_application_id     => l_application_id,
10518       x_return_status          => x_return_status);
10519 
10520     -- Debug info.
10521     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10522         hz_utility_v2pub.debug(p_message=>'validate_cust_account_role (-)',
10523                                p_prefix=>l_debug_prefix,
10524                                p_msg_level=>fnd_log.level_procedure);
10525     END IF;
10526 
10527 END validate_cust_account_role;
10528 
10529 /**
10530  * PROCEDURE validate_role_responsibility
10531  *
10532  * DESCRIPTION
10533  *     Validates customer account role responsibility record. Checks for
10534  *         uniqueness
10535  *         lookup types
10536  *         mandatory columns
10537  *         non-updateable fields
10538  *         foreign key validations
10539  *         other validations
10540  *
10541  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10542  *
10543  * ARGUMENTS
10544  *   IN:
10545  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
10546  *     p_role_responsibility_rec      Customer account role responsibility record.
10547  *     p_rowid                        Rowid of the record (used only in update mode).
10548  *   IN/OUT:
10549  *     x_return_status                Return status after the call. The status can
10550  *                                    be FND_API.G_RET_STS_SUCCESS (success),
10551  *                                    FND_API.G_RET_STS_ERROR (error),
10552  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
10553  *
10554  * NOTES
10555  *
10556  * MODIFICATION HISTORY
10557  *
10558  *   07-23-2001    Jianying Huang      o Created.
10559  *
10560  */
10561 
10562 PROCEDURE validate_role_responsibility (
10563     p_create_update_flag                    IN     VARCHAR2,
10564     p_role_responsibility_rec               IN     HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE,
10565     p_rowid                                 IN     ROWID,
10566     x_return_status                         IN OUT NOCOPY VARCHAR2
10567 ) IS
10568 
10569     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_role_repsonsibility'
10570 
10571     l_dummy                                 VARCHAR2(1);
10572 
10573     l_responsibility_type                   HZ_ROLE_RESPONSIBILITY.responsibility_type%TYPE;
10574     l_cust_account_role_id                  NUMBER;
10575     l_orig_system_reference                 HZ_ROLE_RESPONSIBILITY.orig_system_reference%TYPE;
10576     l_created_by_module                     HZ_ROLE_RESPONSIBILITY.created_by_module%TYPE;
10577     l_application_id                        NUMBER;
10578 
10579 BEGIN
10580 
10581     -- Check if API is called in debug mode. If yes, enable debug.
10582     --enable_debug;
10583 
10584     -- Debug info.
10585     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10586         hz_utility_v2pub.debug(p_message=>'validate_role_responsibility (+)',
10587                                p_prefix=>l_debug_prefix,
10588                                p_msg_level=>fnd_log.level_procedure);
10589     END IF;
10590 
10591     -- Select fields for later use during update.
10592     IF p_create_update_flag = 'U' THEN
10593         SELECT RESPONSIBILITY_TYPE, CUST_ACCOUNT_ROLE_ID, ORIG_SYSTEM_REFERENCE ,
10594                CREATED_BY_MODULE, APPLICATION_ID
10595         INTO l_responsibility_type, l_cust_account_role_id, l_orig_system_reference,
10596              l_created_by_module, l_application_id
10597         FROM HZ_ROLE_RESPONSIBILITY
10598         WHERE ROWID = p_rowid;
10599     END IF;
10600 
10601     --------------------------------------
10602     -- validate responsibility_id
10603     --------------------------------------
10604 /****Logical APIs - validation not required****/
10605   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10606     IF p_create_update_flag = 'C' THEN
10607 
10608         -- If primary key value is passed, check for uniqueness.
10609         -- If primary key value is not passed, it will be generated
10610         -- from sequence by table handler.
10611 
10612         IF p_role_responsibility_rec.responsibility_id IS NOT NULL AND
10613            p_role_responsibility_rec.responsibility_id <> FND_API.G_MISS_NUM
10614         THEN
10615         BEGIN
10616             SELECT 'Y' INTO l_dummy
10617             FROM HZ_ROLE_RESPONSIBILITY
10618             WHERE RESPONSIBILITY_ID = p_role_responsibility_rec.responsibility_id;
10619 
10620             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10621             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'responsibility_id' );
10622             FND_MSG_PUB.ADD;
10623             x_return_status := FND_API.G_RET_STS_ERROR;
10624         EXCEPTION
10625             WHEN NO_DATA_FOUND THEN
10626                 NULL;
10627         END;
10628 
10629         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10630            hz_utility_v2pub.debug(p_message=>'responsibility_id is unique during creation if passed in. ' ||
10631                 'x_return_status = ' || x_return_status,
10632                                   p_prefix =>l_debug_prefix,
10633                                   p_msg_level=>fnd_log.level_statement);
10634         END IF;
10635 
10636 
10637         END IF;
10638     END IF;
10639 
10640     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10641            hz_utility_v2pub.debug(p_message=>'(+) after validate responsibility_id ... ' ||
10642             'x_return_status = ' || x_return_status,
10643                                   p_prefix =>l_debug_prefix,
10644                                   p_msg_level=>fnd_log.level_statement);
10645     END IF;
10646   END IF;
10647 
10648     ----------------------------------------------
10649     -- validate responsibility_type
10650     ----------------------------------------------
10651 
10652     -- responsibility_type is mandatory field
10653 
10654     validate_mandatory (
10655         p_create_update_flag                    => p_create_update_flag,
10656         p_column                                => 'responsibility_type',
10657         p_column_value                          => p_role_responsibility_rec.responsibility_type,
10658         x_return_status                         => x_return_status );
10659 
10660     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10661            hz_utility_v2pub.debug(p_message=>'responsibility_type is mandatory. ' ||
10662             'x_return_status = ' || x_return_status,
10663                                   p_prefix =>l_debug_prefix,
10664                                   p_msg_level=>fnd_log.level_statement);
10665     END IF;
10666 
10667 
10668     -- responsibility_type is lookup code in lookup type SITE_USE_CODE
10669 
10670     IF p_role_responsibility_rec.responsibility_type IS NOT NULL AND
10671        p_role_responsibility_rec.responsibility_type <> FND_API.G_MISS_CHAR AND
10672        ( p_create_update_flag = 'C' OR
10673          ( p_create_update_flag = 'U' AND
10674            p_role_responsibility_rec.responsibility_type <> NVL( l_responsibility_type, FND_API.G_MISS_CHAR ) ) )
10675     THEN
10676         validate_lookup (
10677             p_column                                => 'responsibility_type',
10678             p_lookup_type                           => 'SITE_USE_CODE',
10679             p_column_value                          => p_role_responsibility_rec.responsibility_type,
10680             x_return_status                         => x_return_status );
10681 
10682         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10683            hz_utility_v2pub.debug(p_message=>'responsibility_type is lookup code in lookup type SITE_USE_CODE. ' ||
10684                   'x_return_status = ' || x_return_status,
10685                                   p_prefix =>l_debug_prefix,
10686                                   p_msg_level=>fnd_log.level_statement);
10687         END IF;
10688 
10689 
10690         l_responsibility_type := p_role_responsibility_rec.responsibility_type;
10691     END IF;
10692 
10693     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10694            hz_utility_v2pub.debug(p_message=>'(+) after validate responsibility_type ... ' ||
10695             'x_return_status = ' || x_return_status,
10696                                   p_prefix =>l_debug_prefix,
10697                                   p_msg_level=>fnd_log.level_statement);
10698     END IF;
10699 
10700 
10701     ----------------------------------------------
10702     -- validate cust_account_role_id
10703     ----------------------------------------------
10704 /****Logical APIs - validation not required****/
10705   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10706     -- cust_account_role_id is mandatory field
10707     -- Since cust_account_role_id is non-updateable, we only need to check mandatory
10708     -- during creation.
10709 
10710     IF p_create_update_flag = 'C' THEN
10711         validate_mandatory (
10712             p_create_update_flag                    => p_create_update_flag,
10713             p_column                                => 'cust_account_role_id',
10714             p_column_value                          => p_role_responsibility_rec.cust_account_role_id,
10715             x_return_status                         => x_return_status );
10716 
10717         l_cust_account_role_id := p_role_responsibility_rec.cust_account_role_id;
10718 
10719         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10720            hz_utility_v2pub.debug(p_message=>'cust_account_role_id is mandatory. ' ||
10721                 'x_return_status = ' || x_return_status,
10722                                   p_prefix =>l_debug_prefix,
10723                                   p_msg_level=>fnd_log.level_statement);
10724         END IF;
10725     END IF;
10726 
10727     -- cust_account_role_id is non-updateable
10728     IF p_create_update_flag = 'U' AND
10729        p_role_responsibility_rec.cust_account_role_id IS NOT NULL
10730     THEN
10731         validate_nonupdateable (
10732             p_column                                => 'cust_account_role_id',
10733             p_column_value                          => p_role_responsibility_rec.cust_account_role_id,
10734             p_old_column_value                      => l_cust_account_role_id,
10735             x_return_status                         => x_return_status );
10736 
10737         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10738            hz_utility_v2pub.debug(p_message=>'cust_account_role_id is non-updateable. ' ||
10739                 'x_return_status = ' || x_return_status,
10740                                   p_prefix =>l_debug_prefix,
10741                                   p_msg_level=>fnd_log.level_statement);
10742         END IF;
10743 
10744     END IF;
10745 
10746     -- cust_account_role_id is foreign key to hz_cust_account_roles.
10747     -- Since cust_account_role_id is mandatory and non-updateable,
10748     -- we only need to check FK during creation.
10749 
10750     IF p_create_update_flag = 'C' AND
10751        p_role_responsibility_rec.cust_account_role_id IS NOT NULL AND
10752        p_role_responsibility_rec.cust_account_role_id <> FND_API.G_MISS_NUM
10753     THEN
10754         check_cust_account_role_fk (
10755             p_column                                => 'cust_account_role_id',
10756             p_column_value                          => p_role_responsibility_rec.cust_account_role_id,
10757             x_return_status                         => x_return_status );
10758 
10759         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10760            hz_utility_v2pub.debug(p_message=>'cust_account_role_id is foreign key to hz_cust_account_roles. ' ||
10761                 'x_return_status = ' || x_return_status,
10762                                   p_prefix =>l_debug_prefix,
10763                                   p_msg_level=>fnd_log.level_statement);
10764         END IF;
10765 
10766     END IF;
10767 
10768     -- The combination of cust_account_role_id and responsibility_type
10769     -- should be unique.
10770 
10771     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10772            hz_utility_v2pub.debug(p_message=>'cust_account_role_id = ' || l_cust_account_role_id || ' ' ||
10773                                     'role_responsibility_id = ' || l_responsibility_type || ' ' ||
10774                                     'create_update_flag = ' || p_create_update_flag || ' ' ||
10775                                     'p_rowid = ' || p_rowid || ' ' ||
10776                                     'x_return_status = ' || x_return_status,
10777                                   p_prefix =>l_debug_prefix,
10778                                   p_msg_level=>fnd_log.level_statement);
10779     END IF;
10780   END IF;
10781 
10782     BEGIN
10783         SELECT 'Y' INTO l_dummy
10784         FROM HZ_ROLE_RESPONSIBILITY
10785         WHERE CUST_ACCOUNT_ROLE_ID = l_cust_account_role_id
10786         AND RESPONSIBILITY_TYPE = l_responsibility_type
10787         AND ( p_create_update_flag = 'C' OR
10788             ( p_create_update_flag = 'U' AND ROWID <> p_rowid ) )
10789         AND ROWNUM = 1;
10790 
10791         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10792         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_role_id - responsibility_type' );
10793         FND_MSG_PUB.ADD;
10794         x_return_status := FND_API.G_RET_STS_ERROR;
10795     EXCEPTION
10796         WHEN NO_DATA_FOUND THEN
10797             NULL;
10798     END;
10799 
10800     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10801            hz_utility_v2pub.debug(p_message=>'combination of cust_account_role_id and responsibility_type should be unique. ' ||
10802                                         'x_return_status = ' || x_return_status,
10803                                   p_prefix =>l_debug_prefix,
10804                                   p_msg_level=>fnd_log.level_statement);
10805     END IF;
10806 
10807     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10808            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_role_id ... ' ||
10809             'x_return_status = ' || x_return_status,
10810                                   p_prefix =>l_debug_prefix,
10811                                   p_msg_level=>fnd_log.level_statement);
10812     END IF;
10813 
10814 
10815     ----------------------------------------------
10816     -- validate orig_system_reference
10817     ----------------------------------------------
10818 /****Logical APIs - validation not required****/
10819   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10820     -- orig_system_reference is non-updateable field
10821     IF p_create_update_flag = 'U' AND
10822        p_role_responsibility_rec.orig_system_reference IS NOT NULL
10823     THEN
10824         validate_nonupdateable (
10825             p_column                                => 'orig_system_reference',
10826             p_column_value                          => p_role_responsibility_rec.orig_system_reference,
10827             p_old_column_value                      => l_orig_system_reference,
10828             x_return_status                         => x_return_status );
10829 
10830         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10831            hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
10832                 'x_return_status = ' || x_return_status,
10833                                   p_prefix =>l_debug_prefix,
10834                                   p_msg_level=>fnd_log.level_statement);
10835         END IF;
10836 
10837 
10838     END IF;
10839 
10840     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10841            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
10842             'x_return_status = ' || x_return_status,
10843                                   p_prefix =>l_debug_prefix,
10844                                   p_msg_level=>fnd_log.level_statement);
10845     END IF;
10846   END IF;
10847 
10848     ----------------------------------------------
10849     -- validate primary_flag
10850     ----------------------------------------------
10851 /****Logical APIs - validation not required****/
10852   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10853     -- primary_flag is lookup code in lookup type YES/NO
10854     IF p_role_responsibility_rec.primary_flag IS NOT NULL AND
10855        p_role_responsibility_rec.primary_flag <> FND_API.G_MISS_CHAR
10856     THEN
10857         validate_lookup (
10858             p_column                                => 'primary_flag',
10859             p_lookup_type                           => 'YES/NO',
10860             p_column_value                          => p_role_responsibility_rec.primary_flag,
10861             x_return_status                         => x_return_status );
10862 
10863         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10864            hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
10865                 'x_return_status = ' || x_return_status,
10866                                   p_prefix =>l_debug_prefix,
10867                                   p_msg_level=>fnd_log.level_statement);
10868         END IF;
10869 
10870     END IF;
10871   END IF;
10872 
10873     -- primary_flag is unique per cust_account_role_id
10874     IF p_role_responsibility_rec.primary_flag = 'Y' THEN
10875         IF p_create_update_flag = 'C' THEN
10876             l_cust_account_role_id := p_role_responsibility_rec.cust_account_role_id;
10877         END IF;
10878 
10879         BEGIN
10880             SELECT 'Y' INTO l_dummy
10881             FROM HZ_ROLE_RESPONSIBILITY
10882             WHERE CUST_ACCOUNT_ROLE_ID = l_cust_account_role_id
10883             AND PRIMARY_FLAG = 'Y'
10884             AND ( p_create_update_flag = 'C' OR
10885                   p_create_update_flag = 'U' AND ROWID <> p_rowid )
10886             AND ROWNUM = 1;
10887 
10888             FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ROLE_PRIMARY' );
10889             FND_MSG_PUB.ADD;
10890             x_return_status := FND_API.G_RET_STS_ERROR;
10891         EXCEPTION
10892             WHEN NO_DATA_FOUND THEN
10893                 NULL;
10894         END;
10895 
10896         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10897            hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_account_role_id. ' ||
10898                 'x_return_status = ' || x_return_status,
10899                                   p_prefix =>l_debug_prefix,
10900                                   p_msg_level=>fnd_log.level_statement);
10901         END IF;
10902 
10903     END IF;
10904 
10905     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10906            hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
10907             'x_return_status = ' || x_return_status,
10908                                   p_prefix =>l_debug_prefix,
10909                                   p_msg_level=>fnd_log.level_statement);
10910     END IF;
10911 
10912 
10913     --------------------------------------
10914     -- validate created_by_module
10915     --------------------------------------
10916 
10917     validate_created_by_module(
10918       p_create_update_flag     => p_create_update_flag,
10919       p_created_by_module      => p_role_responsibility_rec.created_by_module,
10920       p_old_created_by_module  => l_created_by_module,
10921       x_return_status          => x_return_status);
10922 
10923     --------------------------------------
10924     -- validate application_id
10925     --------------------------------------
10926 
10927     validate_application_id(
10928       p_create_update_flag     => p_create_update_flag,
10929       p_application_id         => p_role_responsibility_rec.application_id,
10930       p_old_application_id     => l_application_id,
10931       x_return_status          => x_return_status);
10932 
10933     -- Debug info.
10934 
10935     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10936         hz_utility_v2pub.debug(p_message=>'validate_role_responsibility (-)',
10937                                p_prefix=>l_debug_prefix,
10938                                p_msg_level=>fnd_log.level_procedure);
10939     END IF;
10940 
10941 END validate_role_responsibility;
10942 
10943 --------------------------------------
10944 -- private procedures and functions
10945 --------------------------------------
10946 
10947 PROCEDURE check_cust_account_fk (
10948     p_column                                IN     VARCHAR2,
10949     p_column_value                          IN     NUMBER,
10950     x_return_status                         IN OUT NOCOPY VARCHAR2
10951 ) IS
10952 
10953     l_dummy                                 VARCHAR2(1);
10954 
10955 BEGIN
10956 
10957 -- 2310474 : cust_account_id = -1 for profile at party level
10958 
10959   IF p_column_value <> -1 THEN
10960 
10961     SELECT 'Y' INTO l_dummy
10962     FROM HZ_CUST_ACCOUNTS
10963     WHERE CUST_ACCOUNT_ID = p_column_value;
10964 
10965   END IF;
10966 
10967 EXCEPTION
10968     WHEN NO_DATA_FOUND THEN
10969         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10970         FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_id' );
10971         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10972         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_accounts' );
10973         FND_MSG_PUB.ADD;
10974         x_return_status := FND_API.G_RET_STS_ERROR;
10975 
10976 END check_cust_account_fk;
10977 
10978 PROCEDURE check_cust_acct_site_fk (
10979     p_column                                IN     VARCHAR2,
10980     p_column_value                          IN     NUMBER,
10981     p_org_id                                IN     NUMBER,    -- 3456489
10982     x_return_status                         IN OUT NOCOPY VARCHAR2
10983 ) IS
10984 
10985     l_dummy                                 VARCHAR2(1);
10986   l_debug_prefix                          VARCHAR2(30) := '';
10987 
10988 BEGIN
10989 
10990   IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10991         hz_utility_v2pub.debug(p_message=>' check_cust_acct_site_fk (+) '||p_column_value
10992                                           ||' Org Id '||p_org_id,
10993                                p_prefix=>l_debug_prefix,
10994                                p_msg_level=>fnd_log.level_procedure);
10995     END IF;
10996 
10997     SELECT 'Y' INTO l_dummy
10998     FROM HZ_CUST_ACCT_SITES_ALL  -- Bug 3456489
10999     WHERE CUST_ACCT_SITE_ID = p_column_value
11000       AND ORG_ID = p_org_id;  -- Bug 3456489
11001 
11002 EXCEPTION
11003     WHEN NO_DATA_FOUND THEN
11004         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11005         FND_MESSAGE.SET_TOKEN( 'FK', 'cust_acct_site_id' );
11006         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11007         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_acct_sites' );
11008         FND_MSG_PUB.ADD;
11009         x_return_status := FND_API.G_RET_STS_ERROR;
11010 
11011 END check_cust_acct_site_fk;
11012 
11013 PROCEDURE check_cust_site_use_fk (
11014     p_column                                IN     VARCHAR2,
11015     p_column_value                          IN     NUMBER,
11016     x_return_status                         IN OUT NOCOPY VARCHAR2
11017 ) IS
11018 
11019     l_return_status                         VARCHAR2(1);
11020     l_org_id                                HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
11021 BEGIN
11022 
11023     SELECT org_id INTO l_org_id
11024     FROM HZ_CUST_SITE_USES_ALL
11025     WHERE SITE_USE_ID = p_column_value;
11026 
11027     -- Bug 4650473. Check if org is accessible.
11028     BEGIN
11029     MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
11030     EXCEPTION
11031     WHEN OTHERS
11032     THEN
11033      x_return_status := FND_API.G_RET_STS_ERROR;
11034     END;
11035 
11036 EXCEPTION
11037     WHEN NO_DATA_FOUND THEN
11038         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11039         FND_MESSAGE.SET_TOKEN( 'FK', 'site_use_id' );
11040         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11041         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_site_uses' );
11042         FND_MSG_PUB.ADD;
11043         x_return_status := FND_API.G_RET_STS_ERROR;
11044 
11045 END check_cust_site_use_fk;
11046 PROCEDURE check_cust_site_use_cont_fk(
11047    p_column                                IN     VARCHAR2,
11048    p_column_value                          IN     NUMBER,
11049    p_customer_id                           IN     NUMBER,
11050    x_return_status                         IN OUT NOCOPY VARCHAR2
11051 ) IS
11052 
11053     l_dummy                                 VARCHAR2(1);
11054 BEGIN
11055     SELECT 'Y' INTO l_dummy
11056     FROM HZ_CUST_ACCOUNT_ROLES
11057     WHERE CUST_ACCOUNT_ROLE_ID = p_column_value
11058     AND   CUST_ACCOUNT_ID      = p_customer_id;
11059 
11060 EXCEPTION
11061     WHEN NO_DATA_FOUND THEN
11062         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11063         FND_MESSAGE.SET_TOKEN( 'FK', 'contact_id' );
11064         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11065         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_account_roles' );
11066         FND_MSG_PUB.ADD;
11067         x_return_status := FND_API.G_RET_STS_ERROR;
11068 
11069 END check_cust_site_use_cont_fk;
11070 
11071 PROCEDURE check_cust_account_role_fk (
11072     p_column                                IN     VARCHAR2,
11073     p_column_value                          IN     NUMBER,
11074     x_return_status                         IN OUT NOCOPY VARCHAR2
11075 ) IS
11076 
11077     l_dummy                                 VARCHAR2(1);
11078 
11079 BEGIN
11080     SELECT 'Y' INTO l_dummy
11081     FROM HZ_CUST_ACCOUNT_ROLES
11082     WHERE CUST_ACCOUNT_ROLE_ID = p_column_value;
11083 
11084 EXCEPTION
11085     WHEN NO_DATA_FOUND THEN
11086         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11087         FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_role_id' );
11088         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11089         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_account_roles' );
11090         FND_MSG_PUB.ADD;
11091         x_return_status := FND_API.G_RET_STS_ERROR;
11092 
11093 END check_cust_account_role_fk;
11094 
11095 PROCEDURE check_per_all_people_f_fk (
11096     p_column                                IN     VARCHAR2,
11097     p_column_value                          IN     NUMBER,
11098     x_return_status                         IN OUT NOCOPY VARCHAR2
11099 ) IS
11100 
11101     l_dummy                                 VARCHAR2(1);
11102 
11103 BEGIN
11104 
11105     SELECT 'Y' INTO l_dummy
11106     FROM PER_ALL_PEOPLE_F
11107     WHERE PERSON_ID = p_column_value
11108       /* Bug 3591694.
11109          Retrieve only those records, which are effective on sysdate.
11110          Both effective_start_date and effective_end_date are not null columns and
11111          as such there is no need to explicitely do a NVL.
11112        */
11113       AND EFFECTIVE_START_DATE <= SYSDATE
11114       AND EFFECTIVE_END_DATE >= SYSDATE
11115       AND ROWNUM = 1;
11116 
11117 EXCEPTION
11118     WHEN NO_DATA_FOUND THEN
11119         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11120         FND_MESSAGE.SET_TOKEN( 'FK', 'person_id' );
11121         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11122         FND_MESSAGE.SET_TOKEN( 'TABLE', 'per_all_people_f' );
11123         FND_MSG_PUB.ADD;
11124         x_return_status := FND_API.G_RET_STS_ERROR;
11125 
11126 END check_per_all_people_f_fk;
11127 
11128 PROCEDURE check_collector_fk (
11129     p_column                                IN     VARCHAR2,
11130     p_column_value                          IN     NUMBER,
11131     x_return_status                         IN OUT NOCOPY VARCHAR2
11132 ) IS
11133 
11134     l_dummy                                 VARCHAR2(1);
11135 
11136 BEGIN
11137 
11138     SELECT 'Y' INTO l_dummy
11139     FROM AR_COLLECTORS
11140     WHERE COLLECTOR_ID = p_column_value;
11141 
11142 EXCEPTION
11143     WHEN NO_DATA_FOUND THEN
11144         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11145         FND_MESSAGE.SET_TOKEN( 'FK', 'collector_id' );
11146         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11147         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_collectors');
11148         FND_MSG_PUB.ADD;
11149         x_return_status := FND_API.G_RET_STS_ERROR;
11150 
11151 END check_collector_fk;
11152 
11153 PROCEDURE check_party_fk (
11154     p_column                                IN     VARCHAR2,
11155     p_column_value                          IN     NUMBER,
11156     x_return_status                         IN OUT NOCOPY VARCHAR2
11157 ) IS
11158 
11159     l_dummy                                 VARCHAR2(1);
11160 
11161 BEGIN
11162 
11163     SELECT 'Y' INTO l_dummy
11164     FROM HZ_PARTIES
11165     WHERE PARTY_ID = p_column_value;
11166 
11167 EXCEPTION
11168     WHEN NO_DATA_FOUND THEN
11169         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11170         FND_MESSAGE.SET_TOKEN( 'FK', 'party_id' );
11171         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11172         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_parties' );
11173         FND_MSG_PUB.ADD;
11174         x_return_status := FND_API.G_RET_STS_ERROR;
11175 
11176 END check_party_fk;
11177 
11178 PROCEDURE check_party_site_fk (
11179     p_column                                IN     VARCHAR2,
11180     p_column_value                          IN     NUMBER,
11181     x_return_status                         IN OUT NOCOPY VARCHAR2
11182 ) IS
11183 
11184     l_dummy                                 VARCHAR2(1);
11185 
11186 BEGIN
11187 
11188     BEGIN
11189         SELECT 'Y' INTO l_dummy
11190         FROM HZ_PARTY_SITES
11191         WHERE PARTY_SITE_ID = p_column_value;
11192     EXCEPTION
11193         WHEN NO_DATA_FOUND THEN
11194             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11195             FND_MESSAGE.SET_TOKEN( 'FK', 'party_site_id' );
11196             FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11197             FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_party_sites' );
11198             FND_MSG_PUB.ADD;
11199             x_return_status := FND_API.G_RET_STS_ERROR;
11200     END;
11201 
11202 END check_party_site_fk;
11203 
11204 PROCEDURE check_currency_fk (
11205     p_column                                IN     VARCHAR2,
11206     p_column_value                          IN     VARCHAR2,
11207     x_return_status                         IN OUT NOCOPY VARCHAR2
11208 ) IS
11209 
11210     l_dummy                                 VARCHAR2(1);
11211 
11212 BEGIN
11213     -- Bug Fix: 3877782
11214     SELECT 'Y' INTO l_dummy
11215     FROM FND_CURRENCIES
11216     WHERE CURRENCY_CODE = p_column_value
11217     AND   CURRENCY_FLAG = 'Y'
11218     AND   ENABLED_FLAG  = 'Y'
11219     AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE,SYSDATE))
11220                          AND     TRUNC(NVL(END_DATE_ACTIVE,SYSDATE));
11221 
11222 EXCEPTION
11223     WHEN NO_DATA_FOUND THEN
11224         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11225         FND_MESSAGE.SET_TOKEN( 'FK', 'currency_code' );
11226         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11227         FND_MESSAGE.SET_TOKEN( 'TABLE', 'fnd_currencies' );
11228         FND_MSG_PUB.ADD;
11229         x_return_status := FND_API.G_RET_STS_ERROR;
11230 
11231 END check_currency_fk;
11232 
11233 PROCEDURE check_oe_ship_methods_v_fk (
11234     p_entity                                IN     VARCHAR2,
11235     p_column                                IN     VARCHAR2,
11236     p_column_value                          IN     VARCHAR2,
11237     x_return_status                         IN OUT NOCOPY VARCHAR2
11238 ) IS
11239 
11240     l_org_id                                NUMBER;
11241 
11242 BEGIN
11243     --Bug Fix 2262248, API should NOT DISALLOW the specification of a value for
11244     --ship-via based on multi-org installation status for ACOUNT and SITE USE levels.
11245     /**************************************************************************
11246     IF p_entity = 'ACCOUNT' THEN
11247 
11248      BEGIN
11249         SELECT MIN(ORG_ID) INTO l_org_id
11250         FROM AR_SYSTEM_PARAMETERS;
11251 
11252         IF l_org_id IS NOT NULL THEN
11253             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_COLUMN_SHOULD_BE_NULL' );
11254             FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11255             FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_accounts' );
11256             FND_MSG_PUB.ADD;
11257             x_return_status := FND_API.G_RET_STS_ERROR;
11258 
11259             RETURN;
11260         END IF;
11261 
11262  --Bug Fix 2183072 Handled the exception
11263      EXCEPTION
11264      WHEN NO_DATA_FOUND THEN
11265           FND_MESSAGE.SET_NAME( 'AR', 'AR_NO_ROW_IN_SYSTEM_PARAMETERS');
11266           FND_MSG_PUB.ADD;
11267           x_return_status := FND_API.G_RET_STS_ERROR;
11268     END ;
11269     END IF;
11270     **************************************************************************/
11271     validate_lookup (
11272         p_column                                => p_column,
11273         p_lookup_table                          => 'OE_SHIP_METHODS_V',
11274         p_lookup_type                           => 'SHIP_METHOD',
11275         p_column_value                          => p_column_value,
11276         x_return_status                         => x_return_status );
11277 
11278 END check_oe_ship_methods_v_fk;
11279 
11280 PROCEDURE check_payterm_id_fk (
11281     p_column                                IN     VARCHAR2,
11282     p_column_value                          IN     VARCHAR2,
11283     x_return_status                         IN OUT NOCOPY VARCHAR2
11284 ) IS
11285         l_dummy                                 VARCHAR2(1);
11286   BEGIN
11287 
11288      -- Modified the below query for bug # 5529044
11289      -- Now this will validate only for a valid payment term.
11290      -- Validate that the payment_term_id passed should be a non Balance Forwarded Billing payment term.
11291      -- Changed as a part of Balance Forwarded Billing enhancement. bug # 4935721
11292      SELECT 'Y'
11293      into  l_dummy
11294      from  ra_terms_b
11295      where term_id = p_column_value
11296 --     and   billing_cycle_id is null
11297      and   trunc(sysdate) between
11298            start_date_active and nvl(end_date_active,trunc(sysdate));
11299 /*
11300      SELECT 'Y' INTO l_dummy
11301      FROM RA_TERMS ra
11302      WHERE ra.term_id = p_column_value
11303      AND   trunc(sysdate) between START_DATE_ACTIVE and nvl(END_DATE_ACTIVE,trunc(sysdate));
11304 */
11305 EXCEPTION
11306     WHEN NO_DATA_FOUND THEN
11307         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11308         FND_MESSAGE.SET_TOKEN( 'FK', 'payment_term_id' );
11309         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11310         FND_MESSAGE.SET_TOKEN( 'TABLE', 'RA_TERMS' );
11311         FND_MSG_PUB.ADD;
11312         x_return_status := FND_API.G_RET_STS_ERROR;
11313 END check_payterm_id_fk;
11314 
11315 PROCEDURE check_late_charge_term_id_fk (
11316     p_column                                IN     VARCHAR2,
11317     p_column_value                          IN     NUMBER,
11318     p_cons_inv_flag                         IN     VARCHAR2,
11319     x_return_status                         IN OUT NOCOPY VARCHAR2
11320 ) IS
11321         l_dummy                                 VARCHAR2(1);
11322   BEGIN
11323 
11324    -- if cons_inv_flag = 'N' validate that the late charge payment term that
11325    -- does not have a balance forward billing cycle. If cons_inv_flag = 'Y' then,
11326    -- Validate that late charge payment term that has a balance forward billing cycle.
11327    if p_cons_inv_flag = 'N' then
11328       begin
11329          SELECT 'Y'
11330          into  l_dummy
11331          from  ra_terms_b
11332          where term_id = p_column_value
11333          and   billing_cycle_id is null
11334          and   trunc(sysdate) between
11335                start_date_active and nvl(end_date_active,trunc(sysdate));
11336 
11337          EXCEPTION
11338          WHEN NO_DATA_FOUND THEN
11339            -- Balance forward billing has not been enabled.
11340            -- Pass a late charge payment term that does not have a balance forward billing cycle.
11341            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_PAY_TERM_DISABLED' );
11342            FND_MSG_PUB.ADD;
11343            x_return_status := FND_API.G_RET_STS_ERROR;
11344       end;
11345    elsif p_cons_inv_flag = 'Y' then
11346       begin
11347          SELECT 'Y'
11348          into  l_dummy
11349          from  ra_terms_b t
11350          where t.term_id = p_column_value
11351          and   t.billing_cycle_id is not null
11352          and   trunc(sysdate) between
11353                t.start_date_active  and nvl(t.end_date_active,trunc(sysdate));
11354 
11355          EXCEPTION
11356          WHEN NO_DATA_FOUND THEN
11357            -- Balance forward billing has been enabled.
11358            -- Pass a late charge payment term that has a balance forward billing cycle.
11359            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_PAY_TERM_ENABLED' );
11360            FND_MSG_PUB.ADD;
11361            x_return_status := FND_API.G_RET_STS_ERROR;
11362       end;
11363    end if;
11364 
11365 END check_late_charge_term_id_fk;
11366 
11367 PROCEDURE check_message_text_id_fk (
11368     p_column                                IN     VARCHAR2,
11369     p_column_value                          IN     NUMBER,
11370     x_return_status                         IN OUT NOCOPY VARCHAR2
11371 ) IS
11372         l_dummy                                 VARCHAR2(1);
11373   BEGIN
11374 
11375      -- Validate that the message_text_id passed should be a valid
11376      -- value in AR_STANDARD_TEXT.STANDARD_TEXT_ID. bug # 5065436
11377      SELECT 'Y'
11378      into  l_dummy
11379      from  AR_STANDARD_TEXT
11380      where STANDARD_TEXT_ID = p_column_value
11381      and   trunc(sysdate) between
11382            start_date and nvl(end_date,trunc(sysdate));
11383 EXCEPTION
11384     WHEN NO_DATA_FOUND THEN
11385         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11386         FND_MESSAGE.SET_TOKEN( 'FK', 'standard_text_id' );
11387         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11388         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_standard_text' );
11389         FND_MSG_PUB.ADD;
11390         x_return_status := FND_API.G_RET_STS_ERROR;
11391 END check_message_text_id_fk;
11392 
11393 PROCEDURE check_exchange_rate_type_fk (
11394     p_column                                IN     VARCHAR2,
11395     p_column_value                          IN     VARCHAR2,
11396     x_return_status                         IN OUT NOCOPY VARCHAR2
11397 ) IS
11398         l_dummy                                 VARCHAR2(1);
11399   BEGIN
11400 
11401      -- Validate that the exchange_rate_type passed should be a valid
11402      -- value in GL_DAILY_CONVERSION_TYPES. where type is not USER. bug # 5065436
11403      SELECT 'Y'
11404      into  l_dummy
11405      from  gl_daily_conversion_types
11406      where conversion_type <> 'USER'
11407      and   conversion_type = p_column_value;
11408 
11409 EXCEPTION
11410     WHEN NO_DATA_FOUND THEN
11411         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11412         FND_MESSAGE.SET_TOKEN( 'FK', 'conversion_type' );
11413         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11414         FND_MESSAGE.SET_TOKEN( 'TABLE', 'gl_daily_conversion_types' );
11415         FND_MSG_PUB.ADD;
11416         x_return_status := FND_API.G_RET_STS_ERROR;
11417 END check_exchange_rate_type_fk;
11418 
11419 PROCEDURE check_charge_schedule_id_fk (
11420     p_column                                IN     VARCHAR2,
11421     p_column_value                          IN     NUMBER,
11422     x_return_status                         IN OUT NOCOPY VARCHAR2
11423 ) IS
11424         l_dummy                                 VARCHAR2(1);
11425   BEGIN
11426 
11427      -- Validate that the schedule_id passed should be a valid
11428      -- value in ar_charge_schedules. bug # 5065436
11429      SELECT 'Y'
11430      into  l_dummy
11431      from  ar_charge_schedules
11432      where schedule_id = p_column_value;
11433 
11434 EXCEPTION
11435     WHEN NO_DATA_FOUND THEN
11436         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11437         FND_MESSAGE.SET_TOKEN( 'FK', 'schedule_id' );
11438         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11439         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_charge_schedules' );
11440         FND_MSG_PUB.ADD;
11441         x_return_status := FND_API.G_RET_STS_ERROR;
11442 END check_charge_schedule_id_fk;
11443 
11444 PROCEDURE check_finchrg_trx_fk (
11445     p_column                                IN     VARCHAR2,
11446     p_column_value                          IN     VARCHAR2,
11447     p_org_id                                IN     NUMBER,   -- Bug 3456489
11448     x_return_status                         IN OUT NOCOPY VARCHAR2
11449 ) IS
11450         l_dummy                                 VARCHAR2(1);
11451   BEGIN
11452     SELECT 'Y' INTO l_dummy
11453      FROM AR_RECEIVABLES_TRX_ALL art
11454      WHERE art.receivables_trx_id = p_column_value
11455      AND   status = 'A'
11456      AND   art.org_id = p_org_id;  -- Bug 3456489
11457 EXCEPTION
11458     WHEN NO_DATA_FOUND THEN
11459         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11460         FND_MESSAGE.SET_TOKEN( 'FK', 'finchrg_receivables_trx_id' );
11461         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11462         FND_MESSAGE.SET_TOKEN( 'TABLE', 'AR_RECEIVABLES_TRX' );
11463         FND_MSG_PUB.ADD;
11464         x_return_status := FND_API.G_RET_STS_ERROR;
11465 END check_finchrg_trx_fk;
11466 
11467 PROCEDURE check_price_list_fk (
11468     p_column                                IN     VARCHAR2,
11469     p_column_value                          IN     VARCHAR2,
11470     x_return_status                         IN OUT NOCOPY VARCHAR2
11471 ) IS
11472         l_dummy                                 VARCHAR2(1);
11473   BEGIN
11474   --Bug Fix 2262616, changed the query, which was lookong at SO_PRICE_LISTS
11475   --to query qp_list_headers_b with active_flag
11476   /**************************************************************************
11477      SELECT 'Y' INTO l_dummy
11478      FROM  SO_PRICE_LISTS pl
11479      WHERE pl.price_list_id = p_column_value
11480      AND   sysdate between nvl(pl.start_date_active,sysdate) and nvl(pl.end_date_active,sysdate);
11481   ***************************************************************************/
11482      SELECT  'Y'
11483      INTO    l_dummy
11484      FROM    qp_list_headers_b lh
11485      WHERE   list_header_id = p_column_value
11486      AND     list_type_code = 'PRL'
11487      AND     (sysdate between nvl(lh.start_date_active,sysdate) and nvl(lh.end_date_active,sysdate)
11488      AND     nvl(active_flag, 'N') = 'Y');
11489 EXCEPTION
11490     WHEN NO_DATA_FOUND THEN
11491         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11492         FND_MESSAGE.SET_TOKEN( 'FK', 'price_list_id' );
11493         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11494 -- Bug 3591694        FND_MESSAGE.SET_TOKEN( 'TABLE', 'SO_PRICE_LISTS' );
11495         FND_MESSAGE.SET_TOKEN( 'TABLE', 'QP_LIST_HEADERS_B' );
11496 
11497         FND_MSG_PUB.ADD;
11498         x_return_status := FND_API.G_RET_STS_ERROR;
11499 END check_price_list_fk;
11500 
11501 PROCEDURE check_item_cross_ref(
11502           p_column                                IN     VARCHAR2,
11503           p_column_value                          IN     VARCHAR2,
11504           x_return_status                         IN OUT NOCOPY VARCHAR2
11505 ) IS
11506         l_dummy                                 VARCHAR2(1);
11507   BEGIN
11508      SELECT 'Y' INTO l_dummy
11509      FROM MTL_CROSS_REFERENCE_TYPES mtl
11510      WHERE mtl.cross_reference_type = p_column_value;
11511 EXCEPTION
11512     WHEN NO_DATA_FOUND THEN
11513         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11514         FND_MESSAGE.SET_TOKEN( 'FK', 'item_cross_ref_pref' );
11515         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11516         FND_MESSAGE.SET_TOKEN( 'TABLE', 'mtl_cross_reference_types' );
11517         FND_MSG_PUB.ADD;
11518         x_return_status := FND_API.G_RET_STS_ERROR;
11519 END check_item_cross_ref;
11520 
11521 PROCEDURE check_tax_code(
11522     p_column                                IN     VARCHAR2,
11523     p_column_value                          IN     VARCHAR2,
11524     -- Bug 4713150
11525     -- p_org_id                                IN     NUMBER,   -- Bug 3456489
11526     -- Bug 5136396: to indicate from where this procedure is called from
11527     p_called_from                           IN     VARCHAR2,
11528     x_return_status                         IN OUT NOCOPY VARCHAR2
11529 ) IS
11530 
11531     l_dummy         varchar2(1);
11532     l_org_id        number;
11533     -- l_sob_id        NUMBER;
11534 BEGIN
11535     -- Bug 5136396
11536     IF p_called_from = 'validate_cust_account' THEN
11537         l_org_id := nvl(mo_global.get_current_org_id, mo_utils.get_default_org_id);
11538     ELSE
11539     -- if from validate_cust_site_use
11540         l_org_id := mo_global.get_current_org_id;
11541     END IF;
11542 
11543     -- Bug 4713150
11544     SELECT 'Y' INTO l_dummy
11545     FROM zx_output_classifications_v
11546     WHERE lookup_type = 'ZX_OUTPUT_CLASSIFICATIONS'
11547     AND lookup_code = p_column_value
11548     AND trunc(sysdate) BETWEEN trunc(start_date_active) AND nvl(trunc(end_date_active),trunc(sysdate))
11549     AND enabled_flag = 'Y'
11550     -- Bug 5136396
11551     AND org_id IN (l_org_id, -99)
11552     AND ROWNUM = 1;
11553 
11554 /*
11555     -- Bug 3456489
11556     l_sob_id := HZ_MO_GLOBAL_CACHE.get_set_of_books_id(p_org_id);
11557 
11558     SELECT 'Y' INTO l_dummy
11559     FROM AR_VAT_TAX_ALL avt
11560     WHERE avt.tax_code = p_column_value
11561     AND trunc(SYSDATE) BETWEEN START_DATE AND NVL(END_DATE,trunc(sysdate))
11562     AND avt.enabled_flag = 'Y'
11563     AND avt.tax_class = 'O'
11564     AND avt.displayed_flag = 'Y'
11565     AND avt.set_of_books_id = l_sob_id
11566     AND avt.org_id = p_org_id;
11567 */
11568 EXCEPTION
11569     WHEN NO_DATA_FOUND THEN
11570         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11571         FND_MESSAGE.SET_TOKEN( 'FK', 'tax_code' );
11572         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11573         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ZX_OUTPUT_CLASSIFICATIONS_V' );
11574         FND_MSG_PUB.ADD;
11575         x_return_status := FND_API.G_RET_STS_ERROR;
11576 END check_tax_code;
11577 
11578 PROCEDURE check_warehouse(
11579           p_column                                IN     VARCHAR2,
11580           p_column_value                          IN     VARCHAR2,
11581           x_return_status                         IN OUT NOCOPY VARCHAR2
11582 ) IS
11583         l_dummy                                 VARCHAR2(1);
11584   BEGIN
11585     SELECT 'Y' INTO l_dummy
11586     FROM ORG_ORGANIZATION_DEFINITIONS org
11587     WHERE org.organization_id = p_column_value
11588     AND trunc(sysdate) <= nvl(trunc(org.disable_date),trunc(sysdate));
11589 EXCEPTION
11590     WHEN NO_DATA_FOUND THEN
11591         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11592         FND_MESSAGE.SET_TOKEN( 'FK', 'warehouse_id' );
11593         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11594         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ORG_ORGANIZATION_DEFINITIONS' );
11595         FND_MSG_PUB.ADD;
11596         x_return_status := FND_API.G_RET_STS_ERROR;
11597 END check_warehouse;
11598 
11599 PROCEDURE check_prim_salesrep(
11600         p_column                                IN     VARCHAR2,
11601         p_column_value                          IN     VARCHAR2,
11602         p_org_id                                IN     NUMBER,  -- Bug 3456489
11603         x_return_status                         IN OUT NOCOPY VARCHAR2
11604 ) IS
11605 
11606     l_dummy         varchar2(1);
11607 BEGIN
11608 
11609 /*
11610 show err;
11611 SELECT 'Y' INTO l_dummy
11612      -- FROM RA_SALESREPS ras   -- Bug 3456489
11613      FROM  JTF_RS_SALESREP ras
11614      WHERE ras.salesrep_id = p_column_value
11615      AND   ras.org_id = p_org_id
11616      AND sysdate between nvl(start_date_active,sysdate) and nvl(end_date_active,sysdate)
11617      AND nvl(status, 'A') = 'A'
11618      AND salesrep_id NOT IN( -1,-2);
11619 EXCEPTION
11620     WHEN NO_DATA_FOUND THEN
11621         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11622         FND_MESSAGE.SET_TOKEN( 'FK', 'primary_salesrep_id' );
11623         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11624         FND_MESSAGE.SET_TOKEN( 'TABLE', 'JTF_RS_SALESREPS' );
11625         FND_MSG_PUB.ADD;
11626         x_return_status := FND_API.G_RET_STS_ERROR;
11627 */
11628 x_return_status := FND_API.G_RET_STS_SUCCESS;
11629 END check_prim_salesrep;
11630  --Bug 7695461 : Commented x_return_status value setting and added NULL.
11631 PROCEDURE check_ord_type(
11632         p_column                                IN     VARCHAR2,
11633         p_column_value                          IN     VARCHAR2,
11634         p_org_id                                IN     NUMBER,  -- Bug 3456489
11635         x_return_status                         IN OUT NOCOPY VARCHAR2
11636 ) IS
11637 
11638     l_dummy         varchar2(1);
11639 BEGIN
11640 
11641 /* Bug 3456489
11642      SELECT 'Y' INTO l_dummy
11643      FROM   OE_ORDER_TYPES_V ot
11644      WHERE ot.order_type_id = p_column_value
11645      AND   sysdate between nvl(ot.start_date_active,sysdate) and nvl(ot.end_date_active,sysdate);
11646 */
11647 /*
11648 show err;
11649 temporarily commenting this out as this table has not been created
11650         SELECT 'Y' INTO l_dummy
11651         FROM    OE_TRANSACTION_TYPES_ALL ot
11652         WHERE   ot.order_type_id = p_column_value
11653         AND     ot.transaction_type_code = 'ORDER'
11654         AND     ot.org_id = p_org_id
11655         AND     sysdate between nvl(ot.start_date_active,sysdate)
11656                 and nvl(ot.end_date_active,sysdate);
11657 
11658 EXCEPTION
11659     WHEN NO_DATA_FOUND THEN
11660         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11661         FND_MESSAGE.SET_TOKEN( 'FK', 'order_type_id' );
11662         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11663         FND_MESSAGE.SET_TOKEN( 'TABLE', 'OE_TRANSACTIONS_TYPES_VL' );
11664         FND_MSG_PUB.ADD;
11665         x_return_status := FND_API.G_RET_STS_ERROR;
11666 */
11667 --x_return_status := FND_API.G_RET_STS_SUCCESS;
11668 NULL;
11669 END check_ord_type;
11670 
11671 PROCEDURE check_partial_mandatory_column (
11672     p_column                                IN     VARCHAR2,
11673     p_column_value                          IN     NUMBER,
11674     x_return_status                         IN OUT NOCOPY VARCHAR2
11675 ) IS
11676 
11677 BEGIN
11678 
11679     IF p_column_value = FND_API.G_MISS_NUM THEN
11680         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
11681         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11682         FND_MSG_PUB.ADD;
11683         x_return_status := FND_API.G_RET_STS_ERROR;
11684     END IF;
11685 
11686 END check_partial_mandatory_column;
11687 
11688 PROCEDURE check_partial_mandatory_column (
11689     p_column                                IN     VARCHAR2,
11690     p_column_value                          IN     VARCHAR2,
11691     x_return_status                         IN OUT NOCOPY VARCHAR2
11692 ) IS
11693 
11694 BEGIN
11695 
11696     IF p_column_value = FND_API.G_MISS_CHAR THEN
11697         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
11698         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11699         FND_MSG_PUB.ADD;
11700         x_return_status := FND_API.G_RET_STS_ERROR;
11701     END IF;
11702 
11703 END check_partial_mandatory_column;
11704 
11705 PROCEDURE validate_gl_id (
11706     p_gl_name                               IN     VARCHAR2,
11707     p_column_value                          IN     NUMBER,
11708     p_coa_id                                IN     NUMBER,  -- Bug 3456489
11709     x_return_status                         IN OUT NOCOPY VARCHAR2
11710 ) IS
11711 
11712 BEGIN
11713 
11714     IF p_column_value IS NOT NULL AND
11715        p_column_value <> FND_API.G_MISS_NUM
11716     THEN
11717         IF NOT FND_FLEX_KEYVAL.validate_ccid (
11718             appl_short_name               => 'SQLGL',
11719             key_flex_code                 => 'GL#',
11720          -- Bug 3456489
11721          -- structure_number              => ARP_GLOBAL.chart_of_accounts_id,
11722             structure_number              => p_coa_id,
11723             combination_id                => p_column_value )
11724         THEN
11725             FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_' ||
11726                 UPPER( p_gl_name ) || '_CCID_INVALID' );
11727             FND_MSG_PUB.ADD;
11728             x_return_status := FND_API.G_RET_STS_ERROR;
11729         END IF;
11730     END IF;
11731 
11732 END validate_gl_id;
11733 
11734 PROCEDURE check_auto_hierid_fk (
11735     p_column                                IN     VARCHAR2,
11736     p_column_value                          IN     NUMBER,
11737     x_return_status                         IN OUT NOCOPY VARCHAR2
11738 ) IS
11739 
11740     l_dummy                                 VARCHAR2(1);
11741 
11742 BEGIN
11743 
11744     SELECT 'Y' into l_dummy
11745         FROM   ar_autocash_hierarchies h
11746         WHERE  h.status = 'A'
11747         AND    h.autocash_hierarchy_id =
11748                p_column_value;
11749 EXCEPTION
11750     WHEN NO_DATA_FOUND THEN
11751         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11752         FND_MESSAGE.SET_TOKEN( 'FK', p_column );
11753         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11754         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_autocash_hierarchies');
11755         FND_MSG_PUB.ADD;
11756         x_return_status := FND_API.G_RET_STS_ERROR;
11757 
11758 END check_auto_hierid_fk;
11759 
11760 PROCEDURE check_stat_cycid_fk (
11761     p_column                                IN     VARCHAR2,
11762     p_column_value                          IN     NUMBER,
11763     x_return_status                         IN OUT NOCOPY VARCHAR2
11764 ) IS
11765 
11766     l_dummy                                 VARCHAR2(1);
11767 
11768 BEGIN
11769     SELECT 'Y' into l_dummy
11770         FROM   ar_statement_cycles sc
11771         WHERE  sc.status = 'A'
11772         AND    sc.statement_cycle_id =
11773                p_column_value;
11774 EXCEPTION
11775     WHEN NO_DATA_FOUND THEN
11776         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11777         FND_MESSAGE.SET_TOKEN( 'FK', 'statement_cycle_id' );
11778         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11779         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_statement_cycles');
11780         FND_MSG_PUB.ADD;
11781         x_return_status := FND_API.G_RET_STS_ERROR;
11782 
11783 END check_stat_cycid_fk;
11784 
11785 PROCEDURE check_dunning_letid_fk (
11786     p_column                                IN     VARCHAR2,
11787     p_column_value                          IN     NUMBER,
11788     x_return_status                         IN OUT NOCOPY VARCHAR2
11789 ) IS
11790 
11791     l_dummy                                 VARCHAR2(1);
11792 
11793 BEGIN
11794       SELECT 'Y' into l_dummy
11795         FROM   ar_dunning_letter_sets dls
11796         WHERE  dls.status = 'A'
11797         AND    dls.dunning_letter_set_id =
11798                p_column_value;
11799 EXCEPTION
11800     WHEN NO_DATA_FOUND THEN
11801         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11802         FND_MESSAGE.SET_TOKEN( 'FK', 'dunning_letter_set_id' );
11803         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11804         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_dunning_letter_sets');
11805         FND_MSG_PUB.ADD;
11806         x_return_status := FND_API.G_RET_STS_ERROR;
11807 
11808 END check_dunning_letid_fk;
11809 
11810 PROCEDURE check_standard_terms_fk (
11811     p_column                                IN     VARCHAR2,
11812     p_column_value                          IN     NUMBER,
11813     p_cons_inv_flag                         IN     VARCHAR2,
11814     p_ckeck_acc_bfb_enabled                 IN     VARCHAR2,
11815     x_return_status                         IN OUT NOCOPY VARCHAR2
11816 ) IS
11817 
11818     l_dummy                                 VARCHAR2(1);
11819 
11820 BEGIN
11821 
11822    -- Modified the below validation for Balance Forwarded Billing
11823    -- if cons_inv_flag = 'N' validate that the payment term is a non Balanace
11824    -- Forward billing payment term. If cons_inv_flag = 'Y' then,
11825    -- Validate that the payment term is a Balance Forward billing payment term.
11826    if p_cons_inv_flag = 'N' then
11827       begin
11828          SELECT 'Y'
11829          into  l_dummy
11830          from  ra_terms_b
11831          where term_id = p_column_value
11832 --         and   billing_cycle_id is null
11833          and   trunc(sysdate) between
11834                start_date_active and nvl(end_date_active,trunc(sysdate));
11835 
11836          EXCEPTION
11837          WHEN NO_DATA_FOUND THEN
11838            /* Modified the below error message setting for bug # 5529044
11839               Now we will look for any valid term_id if BFB is not enabled.
11840            -- If Balance Forward Billing is enabled for the site but disabled for the
11841            -- account. Pass a payment term without a balance forward billing cycle associated.
11842            if p_ckeck_acc_bfb_enabled = 'Y' then
11843               FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_BAL_FWD_DISABLED' );
11844            -- Balance forward billing has not been enabled.
11845            -- Pass a payment term without a balance forward billing cycle associated.
11846            else
11847               FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BAL_FWD_BILL_DISABLED' );
11848            end if;
11849            */
11850            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11851            FND_MESSAGE.SET_TOKEN( 'FK', 'standard_terms' );
11852            FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11853            FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_terms_b');
11854            FND_MSG_PUB.ADD;
11855            x_return_status := FND_API.G_RET_STS_ERROR;
11856       end;
11857    elsif p_cons_inv_flag = 'Y' then
11858       begin
11859          SELECT 'Y'
11860          into  l_dummy
11861          from  ra_terms_b t
11862          where t.term_id = p_column_value
11863          and   t.billing_cycle_id is not null
11864          and   trunc(sysdate) between
11865                t.start_date_active  and nvl(t.end_date_active,trunc(sysdate));
11866 
11867          EXCEPTION
11868          WHEN NO_DATA_FOUND THEN
11869            -- Balance forward billing has been enabled. Pass a payment term
11870            -- with a balance forward billing cycle associated.
11871            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BAL_FWD_BILL_ENABLED' );
11872            FND_MSG_PUB.ADD;
11873            x_return_status := FND_API.G_RET_STS_ERROR;
11874       end;
11875    end if;
11876 
11877 /*
11878       SELECT   'Y' into l_dummy
11879         FROM     ra_terms t
11880         WHERE    trunc(sysdate)
11881         BETWEEN  t.start_date_active AND
11882                  nvl(t.end_date_active,trunc(sysdate))
11883         AND      t.term_id =
11884                  p_column_value;
11885 EXCEPTION
11886     WHEN NO_DATA_FOUND THEN
11887         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11888         FND_MESSAGE.SET_TOKEN( 'FK', 'standard_terms' );
11889         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11890         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_terms');
11891         FND_MSG_PUB.ADD;
11892         x_return_status := FND_API.G_RET_STS_ERROR;
11893 */
11894 END check_standard_terms_fk;
11895 
11896 PROCEDURE check_grouping_ruleid_fk (
11897     p_column                                IN     VARCHAR2,
11898     p_column_value                          IN     NUMBER,
11899     x_return_status                         IN OUT NOCOPY VARCHAR2
11900 ) IS
11901 
11902     l_dummy                                 VARCHAR2(1);
11903 
11904 BEGIN
11905      SELECT   'Y' into l_dummy
11906         FROM     ra_grouping_rules gr
11907         WHERE    trunc(sysdate)
11908         BETWEEN  gr.start_date AND
11909                  nvl(gr.end_date,trunc(sysdate))
11910         AND      gr.grouping_rule_id =
11911                  p_column_value;
11912 EXCEPTION
11913     WHEN NO_DATA_FOUND THEN
11914         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11915         FND_MESSAGE.SET_TOKEN( 'FK', 'grouping_rule_id' );
11916         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11917         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_grouping_rules');
11918         FND_MSG_PUB.ADD;
11919         x_return_status := FND_API.G_RET_STS_ERROR;
11920 
11921 END check_grouping_ruleid_fk;
11922 
11923 PROCEDURE check_automatch_set_id_fk (
11924     p_column                                IN     VARCHAR2,
11925     p_column_value                          IN     NUMBER,
11926     x_return_status                         IN OUT NOCOPY VARCHAR2
11927 ) IS
11928 
11929     l_dummy                                 VARCHAR2(1);
11930 BEGIN
11931 
11932         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
11933           hz_utility_v2pub.debug(
11934             p_prefix               => '',
11935             p_message              => ' At check_automatch_set_id_fk '||p_column ||' is '||p_column_value,
11936             p_msg_level            => fnd_log.level_statement);
11937         END IF;
11938 
11939     SELECT 'x'   into l_dummy
11940     FROM   AR_CASH_AUTO_RULE_SETS
11941     WHERE  active_flag = 'Y'
11942     AND    automatch_set_id = p_column_value;
11943 EXCEPTION
11944     WHEN NO_DATA_FOUND THEN
11945         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11946         FND_MESSAGE.SET_TOKEN( 'FK', 'Automatch_Set_Id' );
11947         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11948         FND_MESSAGE.SET_TOKEN( 'TABLE', 'AR_CASH_AUTO_RULE_SETS');
11949         FND_MSG_PUB.ADD;
11950         x_return_status := FND_API.G_RET_STS_ERROR;
11951 
11952 END check_automatch_set_id_fk;
11953 
11954 PROCEDURE check_positive_value (
11955     p_column                                IN     VARCHAR2,
11956     p_column_value                          IN     NUMBER,
11957     x_return_status                         IN OUT NOCOPY VARCHAR2
11958 ) IS
11959 
11960 BEGIN
11961       IF p_column_value < 0 THEN
11962         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LESS_THAN_ZERO' );
11963         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11964         FND_MSG_PUB.ADD;
11965         x_return_status := FND_API.G_RET_STS_ERROR;
11966       END IF;
11967 
11968 END check_positive_value;
11969 
11970 PROCEDURE check_greater_than_zero (
11971     p_column                                IN     VARCHAR2,
11972     p_column_value                          IN     NUMBER,
11973     x_return_status                         IN OUT NOCOPY VARCHAR2
11974 ) IS
11975 
11976 BEGIN
11977       IF p_column_value <= 0 THEN
11978         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_GREATER_THAN_ZERO' );
11979         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11980         FND_MSG_PUB.ADD;
11981         x_return_status := FND_API.G_RET_STS_ERROR;
11982       END IF;
11983 
11984 END check_greater_than_zero;
11985 
11986 PROCEDURE check_less_than_100 (
11987     p_column                                IN     VARCHAR2,
11988     p_column_value                          IN     NUMBER,
11989     x_return_status                         IN OUT NOCOPY VARCHAR2
11990 ) IS
11991 
11992 BEGIN
11993       IF p_column_value > 100 THEN
11994         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_GREATER_THAN_100' );
11995         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11996         FND_MSG_PUB.ADD;
11997         x_return_status := FND_API.G_RET_STS_ERROR;
11998       END IF;
11999 
12000 END check_less_than_100;
12001 
12002 /**
12003  * PRIVATE PROCEDURE enable_debug
12004  *
12005  * DESCRIPTION
12006  *     Turn on debug mode.
12007  *
12008  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
12009  *     HZ_UTILITY_V2PUB.enable_debug
12010  *
12011  * MODIFICATION HISTORY
12012  *
12013  *   07-23-2001    Jianying Huang      o Created.
12014  *
12015  */
12016 
12017 /*PROCEDURE enable_debug IS
12018 
12019 BEGIN
12020 
12021     G_DEBUG_COUNT := G_DEBUG_COUNT + 1;
12022 
12023     IF G_DEBUG_COUNT = 1 THEN
12024         IF FND_PROFILE.value( 'HZ_API_FILE_DEBUG_ON' ) = 'Y' OR
12025            FND_PROFILE.value( 'HZ_API_DBMS_DEBUG_ON' ) = 'Y'
12026         THEN
12027            HZ_UTILITY_V2PUB.enable_debug;
12028            G_DEBUG := TRUE;
12029         END IF;
12030     END IF;
12031 
12032 END enable_debug;
12033 */
12034 
12035 
12036 /**
12037  * PRIVATE PROCEDURE disable_debug
12038  *
12039  * DESCRIPTION
12040  *     Turn off debug mode.
12041  *
12042  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
12043  *     HZ_UTILITY_V2PUB.disable_debug
12044  *
12045  * MODIFICATION HISTORY
12046  *
12047  *   07-23-2001    Jianying Huang      o Created.
12048  *
12049  */
12050 
12051 /*PROCEDURE disable_debug IS
12052 
12053 BEGIN
12054 
12055     IF G_DEBUG THEN
12056         G_DEBUG_COUNT := G_DEBUG_COUNT - 1;
12057 
12058         IF G_DEBUG_COUNT = 0 THEN
12059             HZ_UTILITY_V2PUB.disable_debug;
12060             G_DEBUG := FALSE;
12061         END IF;
12062     END IF;
12063 
12064 END disable_debug;
12065 */
12066 
12067 
12068 FUNCTION get_index (
12069     p_val                               IN     VARCHAR2
12070 ) RETURN BINARY_INTEGER IS
12071 
12072     l_table_index                       BINARY_INTEGER;
12073     l_found                             BOOLEAN := FALSE;
12074     l_hash_value                        NUMBER;
12075 
12076 BEGIN
12077 
12078     l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
12079 
12080     IF VAL_TAB.EXISTS(l_table_index) THEN
12081         IF VAL_TAB(l_table_index) = p_val THEN
12082             RETURN l_table_index;
12083         ELSE
12084             l_hash_value := l_table_index;
12085             l_table_index := l_table_index + 1;
12086             l_found := FALSE;
12087 
12088             WHILE ( l_table_index < TABLE_SIZE ) AND ( NOT l_found ) LOOP
12089                 IF VAL_TAB.EXISTS(l_table_index) THEN
12090                     IF VAL_TAB(l_table_index) = p_val THEN
12091                         l_found := TRUE;
12092                     ELSE
12093                         l_table_index := l_table_index + 1;
12094                     END IF;
12095                 ELSE
12096                     RETURN TABLE_SIZE + 1;
12097                 END IF;
12098             END LOOP;
12099 
12100             IF NOT l_found THEN  -- Didn't find any till the end
12101                 l_table_index := 1;  -- Start from the beginning
12102 
12103                 WHILE ( l_table_index < l_hash_value ) AND ( NOT l_found ) LOOP
12104                     IF VAL_TAB.EXISTS(l_table_index) THEN
12105                         IF VAL_TAB(l_table_index) = p_val THEN
12106                             l_found := TRUE;
12107                         ELSE
12108                             l_table_index := l_table_index + 1;
12109                         END IF;
12110                     ELSE
12111                         RETURN TABLE_SIZE + 1;
12112                     END IF;
12113                 END LOOP;
12114             END IF;
12115 
12116             IF NOT l_found THEN
12117                 RETURN TABLE_SIZE + 1;  -- Return a higher value
12118             END IF;
12119         END IF;
12120     ELSE
12121         RETURN TABLE_SIZE + 1;
12122     END IF;
12123 
12124     RETURN l_table_index;
12125 
12126 EXCEPTION
12127     WHEN OTHERS THEN  -- The entry doesn't exists
12128         RETURN TABLE_SIZE + 1;
12129 
12130 END get_index;
12131 
12132 PROCEDURE put (
12133     p_val                               IN     VARCHAR2
12134 ) IS
12135 
12136     l_table_index                       BINARY_INTEGER;
12137     l_stored                            BOOLEAN := FALSE;
12138     l_hash_value                        NUMBER;
12139 
12140 BEGIN
12141 
12142     l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
12143 
12144     IF VAL_TAB.EXISTS(l_table_index) THEN
12145         IF VAL_TAB(l_table_index) <> p_val THEN --Collision
12146             l_hash_value := l_table_index;
12147             l_table_index := l_table_index + 1;
12148 
12149             WHILE (l_table_index < TABLE_SIZE) AND (NOT l_stored) LOOP
12150                 IF VAL_TAB.EXISTS(l_table_index) THEN
12151                     IF VAL_TAB(l_table_index) <> p_val THEN
12152                         l_table_index := l_table_index + 1;
12153                     END IF;
12154                 ELSE
12155                     VAL_TAB(l_table_index) := p_val;
12156                     l_stored := TRUE;
12157                 END IF;
12158             END LOOP;
12159 
12160             IF NOT l_stored THEN --Didn't find any free bucket till the end
12161                 l_table_index := 1;
12162 
12163                 WHILE (l_table_index < l_hash_value) AND (NOT l_stored) LOOP
12164                     IF VAL_TAB.EXISTS(l_table_index) THEN
12165                         IF VAL_TAB(l_table_index) <> p_val THEN
12166                             l_table_index := l_table_index + 1;
12167                         END IF;
12168                     ELSE
12169                         VAL_TAB(l_table_index) := p_val;
12170                         l_stored := TRUE;
12171                     END IF;
12172                 END LOOP;
12173             END IF;
12174 
12175         END IF;
12176     ELSE
12177         VAL_TAB(l_table_index) := p_val;
12178     END IF;
12179 
12180 EXCEPTION
12181     WHEN OTHERS THEN
12182         NULL;
12183 
12184 END put;
12185 
12186 FUNCTION search (
12187     p_val                               IN     VARCHAR2,
12188     p_category                          IN     VARCHAR2
12189 ) RETURN BOOLEAN IS
12190 
12191     l_table_index                       BINARY_INTEGER;
12192     l_return                            BOOLEAN;
12193 
12194     l_dummy                             VARCHAR2(1);
12195     l_position1                         NUMBER;
12196     l_position2                         NUMBER;
12197 
12198     l_lookup_table                      VARCHAR2(30);
12199     l_lookup_type                       AR_LOOKUPS.lookup_type%TYPE;
12200     l_lookup_code                       AR_LOOKUPS.lookup_code%TYPE;
12201 
12202 BEGIN
12203 
12204     -- search for the value
12205     l_table_index := get_index( p_val || G_SPECIAL_STRING || p_category );
12206 
12207     IF l_table_index < table_size THEN
12208          l_return := TRUE;
12209     ELSE
12210         --Can't find the value in the table; look in the database
12211         IF p_category = 'LOOKUP' THEN
12212 
12213             l_position1 := INSTRB( p_val, G_SPECIAL_STRING, 1, 1 );
12214             l_lookup_table := SUBSTRB( p_val, 1, l_position1 - 1 );
12215             l_position2 := INSTRB( p_val, G_SPECIAL_STRING, 1, 2 );
12216             l_lookup_type := SUBSTRB( p_val, l_position1 + G_LENGTH,
12217                                      l_position2  - l_position1 - G_LENGTH );
12218             l_lookup_code := SUBSTRB( p_val, l_position2 + G_LENGTH );
12219 
12220             IF UPPER( l_lookup_table ) = 'AR_LOOKUPS' THEN
12221             BEGIN
12222                 SELECT 'Y' INTO l_dummy
12223                 FROM   AR_LOOKUPS
12224                 WHERE  LOOKUP_TYPE = l_lookup_type
12225                 AND    LOOKUP_CODE = l_lookup_code
12226                 AND    ( ENABLED_FLAG = 'Y' AND
12227                          TRUNC( SYSDATE ) BETWEEN
12228                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12229                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
12230 
12231                 l_return := TRUE;
12232             EXCEPTION
12233                 WHEN NO_DATA_FOUND THEN
12234                     l_return := FALSE;
12235             END;
12236             ELSIF UPPER( l_lookup_table ) = 'SO_LOOKUPS' THEN
12237             BEGIN
12238                 SELECT 'Y' INTO l_dummy
12239                 FROM   SO_LOOKUPS
12240                 WHERE  LOOKUP_TYPE = l_lookup_type
12241                 AND    LOOKUP_CODE = l_lookup_code
12242                 AND    ( ENABLED_FLAG = 'Y' AND
12243                          TRUNC( SYSDATE ) BETWEEN
12244                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12245                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
12246 
12247                 l_return := TRUE;
12248             EXCEPTION
12249                 WHEN NO_DATA_FOUND THEN
12250                     l_return := FALSE;
12251             END;
12252             ELSIF UPPER( l_lookup_table ) = 'OE_SHIP_METHODS_V' THEN
12253             BEGIN
12254                 SELECT 'Y' INTO l_dummy
12255                 FROM   OE_SHIP_METHODS_V
12256                 WHERE  LOOKUP_TYPE = l_lookup_type
12257                 AND    LOOKUP_CODE = l_lookup_code
12258                 AND    ( ENABLED_FLAG = 'Y' AND
12259                          TRUNC( SYSDATE ) BETWEEN
12260                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12261                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12262                 AND    ROWNUM = 1;
12263 
12264                 l_return := TRUE;
12265             EXCEPTION
12266                 WHEN NO_DATA_FOUND THEN
12267                     l_return := FALSE;
12268             END;
12269             ELSIF UPPER( l_lookup_table ) = 'OE_LOOKUPS' THEN
12270             BEGIN
12271                 SELECT 'Y' INTO l_dummy
12272                 FROM   OE_LOOKUPS
12273                 WHERE  LOOKUP_TYPE = l_lookup_type
12274                 AND    LOOKUP_CODE = l_lookup_code
12275                 AND    ( ENABLED_FLAG = 'Y' AND
12276                          TRUNC( SYSDATE ) BETWEEN
12277                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12278                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12279                 AND    ROWNUM = 1;
12280 
12281                 l_return := TRUE;
12282             EXCEPTION
12283                 WHEN NO_DATA_FOUND THEN
12284                     l_return := FALSE;
12285             END;
12286             ELSIF UPPER( l_lookup_table ) = 'FND_COMMON_LOOKUPS' THEN
12287             BEGIN
12288                 SELECT 'Y' INTO l_dummy
12289                 FROM   FND_COMMON_LOOKUPS
12290                 WHERE  LOOKUP_TYPE = l_lookup_type
12291                 AND    LOOKUP_CODE = l_lookup_code
12292                 AND    ( ENABLED_FLAG = 'Y' AND
12293                          TRUNC( SYSDATE ) BETWEEN
12294                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12295                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12296                 AND    ROWNUM = 1;
12297 
12298                 l_return := TRUE;
12299             EXCEPTION
12300                 WHEN NO_DATA_FOUND THEN
12301                     l_return := FALSE;
12302             END;
12303             ELSIF UPPER( l_lookup_table ) = 'FND_LOOKUP_VALUES' THEN
12304             BEGIN
12305                 SELECT 'Y' INTO l_dummy
12306                 FROM   FND_LOOKUP_VALUES
12307                 WHERE  LOOKUP_TYPE = l_lookup_type
12308                 AND    LOOKUP_CODE = l_lookup_code
12309                 AND    ( ENABLED_FLAG = 'Y' AND
12310                          TRUNC( SYSDATE ) BETWEEN
12311                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12312                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12313                 AND    ROWNUM = 1;
12314 
12315                 l_return := TRUE;
12316             EXCEPTION
12317                 WHEN NO_DATA_FOUND THEN
12318                     l_return := FALSE;
12319             END;
12320 			ELSIF UPPER(l_lookup_table ) = 'FV_LOOKUP_CODES' THEN
12321 			BEGIN
12322 			    SELECT 'Y' INTO l_dummy
12323                 FROM   FV_LOOKUP_CODES
12324                 WHERE  LOOKUP_TYPE = l_lookup_type
12325                 AND    LOOKUP_CODE = l_lookup_code
12326                 AND    ( ENABLED_FLAG = 'Y' AND
12327                          TRUNC( SYSDATE ) BETWEEN
12328                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12329                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12330                 AND    ROWNUM = 1;
12331 
12332                 l_return := TRUE;
12333             EXCEPTION
12334                 WHEN NO_DATA_FOUND THEN
12335                     l_return := FALSE;
12336 			END;
12337             ELSE
12338                 l_return := FALSE;
12339             END IF;
12340         END IF;
12341 
12342         --Cache the value
12343         IF l_return THEN
12344            put( p_val || G_SPECIAL_STRING || p_category );
12345         END IF;
12346     END IF;
12347 
12348     RETURN l_return;
12349 
12350 END search;
12351 
12352 PROCEDURE validate_mandatory (
12353     p_create_update_flag                    IN     VARCHAR2,
12354     p_column                                IN     VARCHAR2,
12355     p_column_value                          IN     VARCHAR2,
12356     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
12357     x_return_status                         IN OUT NOCOPY VARCHAR2
12358 ) IS
12359 
12360     l_error                                 BOOLEAN := FALSE;
12361 
12362 BEGIN
12363 
12364     IF p_restricted = 'N' THEN
12365         IF ( p_create_update_flag = 'C' AND
12366              ( p_column_value IS NULL OR
12367                p_column_value = FND_API.G_MISS_CHAR ) ) OR
12368            ( p_create_update_flag = 'U' AND
12369              p_column_value = FND_API.G_MISS_CHAR )
12370         THEN
12371             l_error := TRUE;
12372         END IF;
12373     ELSE
12374         IF ( p_column_value IS NULL OR
12375              p_column_value = FND_API.G_MISS_CHAR )
12376         THEN
12377             l_error := TRUE;
12378         END IF;
12379     END IF;
12380 
12381     IF l_error THEN
12382         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12383         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12384         FND_MSG_PUB.ADD;
12385         x_return_status := FND_API.G_RET_STS_ERROR;
12386     END IF;
12387 
12388 END validate_mandatory;
12389 
12390 PROCEDURE validate_mandatory (
12391     p_create_update_flag                    IN     VARCHAR2,
12392     p_column                                IN     VARCHAR2,
12393     p_column_value                          IN     NUMBER,
12394     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
12395     x_return_status                         IN OUT NOCOPY VARCHAR2
12396 ) IS
12397 
12398     l_error                                 BOOLEAN := FALSE;
12399 
12400 BEGIN
12401 
12402     IF p_restricted = 'N' THEN
12403         IF ( p_create_update_flag = 'C' AND
12404              ( p_column_value IS NULL OR
12405                p_column_value = FND_API.G_MISS_NUM ) ) OR
12406            ( p_create_update_flag = 'U' AND
12407              p_column_value = FND_API.G_MISS_NUM )
12408         THEN
12409             l_error := TRUE;
12410         END IF;
12411     ELSE
12412         IF ( p_column_value IS NULL OR
12413              p_column_value = FND_API.G_MISS_NUM )
12414         THEN
12415             l_error := TRUE;
12416         END IF;
12417     END IF;
12418 
12419     IF l_error THEN
12420         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12421         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12422         FND_MSG_PUB.ADD;
12423         x_return_status := FND_API.G_RET_STS_ERROR;
12424     END IF;
12425 
12426 END validate_mandatory;
12427 
12428 PROCEDURE validate_mandatory (
12429     p_create_update_flag                    IN     VARCHAR2,
12430     p_column                                IN     VARCHAR2,
12431     p_column_value                          IN     DATE,
12432     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
12433     x_return_status                         IN OUT NOCOPY VARCHAR2
12434 ) IS
12435 
12436     l_error                                 BOOLEAN := FALSE;
12437 
12438 BEGIN
12439 
12440     IF p_restricted = 'N' THEN
12441         IF ( p_create_update_flag = 'C' AND
12442              ( p_column_value IS NULL OR
12443                p_column_value = FND_API.G_MISS_DATE ) ) OR
12444            ( p_create_update_flag = 'U' AND
12445              p_column_value = FND_API.G_MISS_DATE )
12446         THEN
12447             l_error := TRUE;
12448         END IF;
12449     ELSE
12450         IF ( p_column_value IS NULL OR
12451              p_column_value = FND_API.G_MISS_DATE )
12452         THEN
12453             l_error := TRUE;
12454         END IF;
12455     END IF;
12456 
12457     IF l_error THEN
12458         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12459         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12460         FND_MSG_PUB.ADD;
12461         x_return_status := FND_API.G_RET_STS_ERROR;
12462     END IF;
12463 
12464 END validate_mandatory;
12465 
12466 PROCEDURE validate_nonupdateable (
12467     p_column                                IN     VARCHAR2,
12468     p_column_value                          IN     VARCHAR2,
12469     p_old_column_value                      IN     VARCHAR2,
12470     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
12471     x_return_status                         IN OUT NOCOPY VARCHAR2
12472 ) IS
12473 
12474     l_error                                 BOOLEAN := FALSE;
12475 
12476 BEGIN
12477 
12478     IF p_column_value IS NOT NULL THEN
12479         IF p_restricted = 'Y' THEN
12480             IF ( p_column_value <> FND_API.G_MISS_CHAR OR
12481                  p_old_column_value IS NOT NULL ) AND
12482                ( p_old_column_value IS NULL OR
12483                  p_column_value <> p_old_column_value )
12484             THEN
12485                l_error := TRUE;
12486             END IF;
12487         ELSE
12488             IF (p_old_column_value IS NOT NULL AND       -- Bug 3439053.
12489                 p_old_column_value <> FND_API.G_MISS_CHAR)
12490                AND
12491                ( p_column_value = FND_API.G_MISS_CHAR OR
12492                  p_column_value <> p_old_column_value )
12493             THEN
12494                l_error := TRUE;
12495             END IF;
12496         END IF;
12497     END IF;
12498 
12499     IF l_error THEN
12500         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12501         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12502         FND_MSG_PUB.ADD;
12503         x_return_status := FND_API.G_RET_STS_ERROR;
12504     END IF;
12505 
12506 END validate_nonupdateable;
12507 
12508 PROCEDURE validate_nonupdateable (
12509     p_column                                IN     VARCHAR2,
12510     p_column_value                          IN     NUMBER,
12511     p_old_column_value                      IN     NUMBER,
12512     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
12513     x_return_status                         IN OUT NOCOPY VARCHAR2
12514 ) IS
12515 
12516     l_error                                 BOOLEAN := FALSE;
12517 
12518 BEGIN
12519 
12520     IF p_column_value IS NOT NULL THEN
12521         IF p_restricted = 'Y' THEN
12522             IF ( p_column_value <> FND_API.G_MISS_NUM OR
12523                  p_old_column_value IS NOT NULL ) AND
12524                ( p_old_column_value IS NULL OR
12525                  p_column_value <> p_old_column_value )
12526             THEN
12527                l_error := TRUE;
12528             END IF;
12529         ELSE
12530             IF (p_old_column_value IS NOT NULL AND          -- Bug 3439053
12531                 p_old_column_value <> FND_API.G_MISS_NUM)
12532                 AND
12533                ( p_column_value = FND_API.G_MISS_NUM OR
12534                  p_column_value <> p_old_column_value )
12535             THEN
12536                l_error := TRUE;
12537             END IF;
12538         END IF;
12539     END IF;
12540 
12541     IF l_error THEN
12542         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12543         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12544         FND_MSG_PUB.ADD;
12545         x_return_status := FND_API.G_RET_STS_ERROR;
12546     END IF;
12547 
12548 END validate_nonupdateable;
12549 
12550 PROCEDURE validate_nonupdateable (
12551     p_column                                IN     VARCHAR2,
12552     p_column_value                          IN     DATE,
12553     p_old_column_value                      IN     DATE,
12554     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
12555     x_return_status                         IN OUT NOCOPY VARCHAR2
12556 ) IS
12557 
12558     l_error                                 BOOLEAN := FALSE;
12559 
12560 BEGIN
12561 
12562     IF p_column_value IS NOT NULL THEN
12563         IF p_restricted = 'Y' THEN
12564             IF ( p_column_value <> FND_API.G_MISS_DATE OR
12565                  p_old_column_value IS NOT NULL ) AND
12566                ( p_old_column_value IS NULL OR
12567                  p_column_value <> p_old_column_value )
12568             THEN
12569                l_error := TRUE;
12570             END IF;
12571         ELSE
12572             IF (p_old_column_value IS NOT NULL AND       -- Bug 3439053
12573                 p_old_column_value <> FND_API.G_MISS_DATE)
12574                 AND
12575                ( p_column_value = FND_API.G_MISS_DATE OR
12576                  p_column_value <> p_old_column_value )
12577             THEN
12578                l_error := TRUE;
12579             END IF;
12580         END IF;
12581     END IF;
12582 
12583     IF l_error THEN
12584         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12585         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12586         FND_MSG_PUB.ADD;
12587         x_return_status := FND_API.G_RET_STS_ERROR;
12588     END IF;
12589 
12590 END validate_nonupdateable;
12591 
12592 PROCEDURE validate_start_end_date (
12593     p_create_update_flag                    IN     VARCHAR2,
12594     p_start_date_column_name                IN     VARCHAR2,
12595     p_start_date                            IN     DATE,
12596     p_old_start_date                        IN     DATE,
12597     p_end_date_column_name                  IN     VARCHAR2,
12598     p_end_date                              IN     DATE,
12599     p_old_end_date                          IN     DATE,
12600     x_return_status                         IN OUT NOCOPY VARCHAR2
12601 ) IS
12602 
12603     l_start_date                            DATE := p_old_start_date;
12604     l_end_date                              DATE := p_old_end_date;
12605 
12606 BEGIN
12607 
12608     IF p_create_update_flag = 'C' THEN
12609         l_start_date := p_start_date;
12610         l_end_date := p_end_date;
12611     ELSIF p_create_update_flag = 'U' THEN
12612         IF p_start_date IS NOT NULL
12613         THEN
12614             IF p_start_date = FND_API.G_MISS_DATE THEN
12615                 l_start_date := NULL;
12616             ELSE
12617                 l_start_date := p_start_date;
12618             END IF;
12619         END IF;
12620 
12621         IF p_end_date IS NOT NULL
12622         THEN
12623             IF p_end_date = FND_API.G_MISS_DATE THEN
12624                 l_end_date := NULL;
12625             ELSE
12626                 l_end_date := p_end_date;
12627             END IF;
12628         END IF;
12629     END IF;
12630 
12631     IF l_end_date IS NOT NULL AND
12632        l_end_date <> FND_API.G_MISS_DATE AND
12633        ( l_start_date IS NULL OR
12634          l_start_date = FND_API.G_MISS_DATE OR
12635          l_start_date > l_end_date )
12636     THEN
12637         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DATE_GREATER' );
12638         FND_MESSAGE.SET_TOKEN( 'DATE2', p_end_date_column_name );
12639         FND_MESSAGE.SET_TOKEN( 'DATE1', p_start_date_column_name );
12640         FND_MSG_PUB.ADD;
12641         x_return_status := FND_API.G_RET_STS_ERROR;
12642     END IF;
12643 
12644 END validate_start_end_date;
12645 
12646 PROCEDURE validate_cannot_update_to_null (
12647     p_column                                IN     VARCHAR2,
12648     p_column_value                          IN     VARCHAR2,
12649     x_return_status                         IN OUT NOCOPY VARCHAR2
12650 ) IS
12651 
12652 BEGIN
12653 
12654     IF p_column_value = FND_API.G_MISS_CHAR THEN
12655         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12656         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12657         FND_MSG_PUB.ADD;
12658         x_return_status := FND_API.G_RET_STS_ERROR;
12659     END IF;
12660 
12661 END validate_cannot_update_to_null;
12662 
12663 PROCEDURE validate_cannot_update_to_null (
12664     p_column                                IN     VARCHAR2,
12665     p_column_value                          IN     NUMBER,
12666     x_return_status                         IN OUT NOCOPY VARCHAR2
12667 ) IS
12668 
12669 BEGIN
12670 
12671     IF p_column_value = FND_API.G_MISS_NUM THEN
12672         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12673         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12674         FND_MSG_PUB.ADD;
12675         x_return_status := FND_API.G_RET_STS_ERROR;
12676     END IF;
12677 
12678 END validate_cannot_update_to_null;
12679 
12680 PROCEDURE validate_cannot_update_to_null (
12681     p_column                                IN     VARCHAR2,
12682     p_column_value                          IN     DATE,
12683     x_return_status                         IN OUT NOCOPY VARCHAR2
12684 ) IS
12685 
12686 BEGIN
12687 
12688     IF p_column_value = FND_API.G_MISS_DATE THEN
12689         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12690         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12691         FND_MSG_PUB.ADD;
12692         x_return_status := FND_API.G_RET_STS_ERROR;
12693     END IF;
12694 
12695 END validate_cannot_update_to_null;
12696 
12697 PROCEDURE validate_lookup (
12698     p_column                                IN     VARCHAR2,
12699     p_lookup_table                          IN     VARCHAR2 DEFAULT 'AR_LOOKUPS',
12700     p_lookup_type                           IN     VARCHAR2,
12701     p_column_value                          IN     VARCHAR2,
12702     x_return_status                         IN OUT NOCOPY VARCHAR2
12703 ) IS
12704 
12705     l_error                                 BOOLEAN := FALSE;
12706 
12707 BEGIN
12708 
12709     IF p_column_value IS NOT NULL AND
12710        p_column_value <> FND_API.G_MISS_CHAR THEN
12711 
12712         IF p_lookup_type = 'YES/NO' THEN
12713             IF p_column_value NOT IN ('Y', 'N') THEN
12714                 l_error := TRUE;
12715             END IF;
12716         ELSE
12717             IF NOT search(p_lookup_table || G_SPECIAL_STRING ||
12718                           p_lookup_type || G_SPECIAL_STRING || p_column_value,
12719                           'LOOKUP' )
12720             THEN
12721                 l_error := TRUE;
12722             END IF;
12723         END IF;
12724 
12725         IF l_error THEN
12726             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_LOOKUP' );
12727             FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12728             FND_MESSAGE.SET_TOKEN( 'LOOKUP_TYPE', p_lookup_type );
12729             FND_MSG_PUB.ADD;
12730             x_return_status := FND_API.G_RET_STS_ERROR;
12731         END IF;
12732     END IF;
12733 
12734 END validate_lookup;
12735 
12736 
12737 /**
12738  * PROCEDURE validate_created_by_module
12739  *
12740  * DESCRIPTION
12741  *    validate created by module
12742  * ARGUMENTS
12743  *   IN:
12744  *     p_create_update_flag      create update flag
12745  *     p_created_by_module       created by module
12746  *     p_old_created_by_module   old value of created by module
12747  *     x_return_status           return status
12748  */
12749 
12750 PROCEDURE validate_created_by_module (
12751     p_create_update_flag          IN     VARCHAR2,
12752     p_created_by_module           IN     VARCHAR2,
12753     p_old_created_by_module       IN     VARCHAR2,
12754     x_return_status               IN OUT NOCOPY VARCHAR2
12755 ) IS
12756 
12757     l_column                      CONSTANT VARCHAR2(30) := 'created_by_module';
12758 
12759 BEGIN
12760 
12761     -- skip mandatory and non-updateable check from logical API
12762     IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
12763       -- created_by_module is mandatory field
12764       -- Since created_by_module is non-updateable, we only need to check mandatory
12765       -- during creation.
12766 
12767       IF p_create_update_flag = 'C' THEN
12768         validate_mandatory (
12769           p_create_update_flag     => p_create_update_flag,
12770           p_column                 => l_column,
12771           p_column_value           => p_created_by_module,
12772           x_return_status          => x_return_status);
12773 
12774         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12775           hz_utility_v2pub.debug(
12776             p_prefix               => '',
12777             p_message              => l_column || ' is mandatory. ' ||
12778                                       'x_return_status = ' || x_return_status,
12779             p_msg_level            => fnd_log.level_statement);
12780         END IF;
12781       END IF;
12782 
12783       -- created_by_module is non-updateable field. But it can be updated from
12784       -- NULL to some value.
12785 
12786       IF p_create_update_flag = 'U' AND
12787          p_created_by_module IS NOT NULL
12788       THEN
12789         validate_nonupdateable (
12790           p_column                 => l_column,
12791           p_column_value           => p_created_by_module,
12792           p_old_column_value       => p_old_created_by_module,
12793           p_restricted             => 'N',
12794           x_return_status          => x_return_status);
12795 
12796         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12797           hz_utility_v2pub.debug(
12798             p_prefix               => '',
12799             p_message              => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
12800                                       'x_return_status = ' || x_return_status,
12801             p_msg_level            => fnd_log.level_statement);
12802         END IF;
12803       END IF;
12804     END IF;
12805 
12806     -- created_by_module is lookup code in lookup type HZ_CREATED_BY_MODULES
12807     IF p_created_by_module IS NOT NULL AND
12808        p_created_by_module <> fnd_api.g_miss_char AND
12809        (p_create_update_flag = 'C' OR
12810         (p_create_update_flag = 'U' AND
12811          (p_old_created_by_module IS NULL OR
12812           p_created_by_module <> p_old_created_by_module)))
12813     THEN
12814       validate_lookup (
12815         p_column                   => l_column,
12816         p_lookup_type              => 'HZ_CREATED_BY_MODULES',
12817         p_column_value             => p_created_by_module,
12818         x_return_status            => x_return_status);
12819 
12820       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12821         hz_utility_v2pub.debug(
12822           p_prefix                 => '',
12823           p_message                => l_column || ' is lookup code in lookup type HZ_CREATED_BY_MODULES. ' ||
12824                                       'x_return_status = ' || x_return_status,
12825           p_msg_level              => fnd_log.level_statement);
12826       END IF;
12827     END IF;
12828 
12829     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12830       hz_utility_v2pub.debug(
12831         p_prefix                   => '',
12832         p_message                  => 'after validate ' || l_column || ' ... ' ||
12833                                       'x_return_status = ' || x_return_status,
12834         p_msg_level                => fnd_log.level_statement);
12835     END IF;
12836 
12837 END validate_created_by_module;
12838 
12839 
12840 /**
12841  * PROCEDURE validate_application_id
12842  *
12843  * DESCRIPTION
12844  *    validate application id
12845  * ARGUMENTS
12846  *   IN:
12847  *     p_create_update_flag      create update flag
12848  *     p_application_id          application id
12849  *     p_old_application_id      old value of application id
12850  *     x_return_status           return status
12851  */
12852 
12853 PROCEDURE validate_application_id (
12854     p_create_update_flag          IN     VARCHAR2,
12855     p_application_id              IN     NUMBER,
12856     p_old_application_id          IN     NUMBER,
12857     x_return_status               IN OUT NOCOPY VARCHAR2
12858 ) IS
12859 
12860     l_column                      CONSTANT VARCHAR2(30) := 'application_id';
12861 
12862 BEGIN
12863 
12864     -- skip non-updateable check from logical API
12865     IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
12866       -- application_id is non-updateable field. But it can be updated from NULL
12867       -- to some value.
12868 
12869       IF p_create_update_flag = 'U' AND
12870          p_application_id IS NOT NULL
12871       THEN
12872         validate_nonupdateable (
12873           p_column                 => l_column,
12874           p_column_value           => p_application_id,
12875           p_old_column_value       => p_old_application_id,
12876           p_restricted             => 'N',
12877           x_return_status          => x_return_status);
12878 
12879         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12880           hz_utility_v2pub.debug(
12881             p_prefix               => '',
12882             p_message              => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
12883                                       'x_return_status = ' || x_return_status,
12884             p_msg_level            => fnd_log.level_statement);
12885         END IF;
12886       END IF;
12887     END IF;
12888 
12889     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12890       hz_utility_v2pub.debug(
12891         p_prefix                   => '',
12892         p_message                  => 'after validate ' || l_column || ' ... ' ||
12893                                       'x_return_status = ' || x_return_status,
12894         p_msg_level                => fnd_log.level_statement);
12895     END IF;
12896 
12897 END validate_application_id;
12898 
12899 PROCEDURE validate_bill_level (
12900     p_create_update_flag                    IN     VARCHAR2,
12901     p_customer_profile_rec                  IN     HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
12902     x_return_status                         IN OUT NOCOPY VARCHAR2
12903 ) IS
12904 
12905     l_profile_class_rec                     HZ_CUST_PROFILE_CLASSES%ROWTYPE;
12906     l_error                                 BOOLEAN := FALSE;
12907 
12908     l_bill_level_count number;
12909     l_bill_type_count  number;
12910 
12911 BEGIN
12912 
12913    -- if cons_inv_flag is 'Y', do all validations
12914    if p_customer_profile_rec.cons_inv_flag = 'Y' then
12915       -- If Balance Forward billing is enabled,
12916       -- Bill Level and Type should have valid not null values
12917       if (p_customer_profile_rec.cons_bill_level IS NULL
12918           OR p_customer_profile_rec.cons_inv_type IS NULL) then
12919          FND_MESSAGE.SET_NAME('AR', 'HZ_API_BILL_LVL_TYPE_INVALID');
12920          FND_MSG_PUB.ADD;
12921          x_return_status := FND_API.G_RET_STS_ERROR;
12922       else
12923          if p_customer_profile_rec.cons_bill_level IS NOT NULL then
12924             SELECT COUNT(*)
12925             INTO  l_bill_level_count
12926             FROM  ar_lookups
12927             WHERE lookup_type = 'HZ_CONS_BILL_LEVEL'
12928             AND   lookup_code = p_customer_profile_rec.cons_bill_level
12929             AND   TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12930             AND   enabled_flag = 'Y';
12931 
12932             IF (l_bill_level_count = 0) THEN
12933                FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_BILL_LEVEL');
12934                FND_MSG_PUB.ADD;
12935                x_return_status := FND_API.G_RET_STS_ERROR;
12936             END IF;
12937          end if;
12938       end if;
12939 
12940       -- For Account use bill level, use Summary or Detail as bill type.
12941       if p_customer_profile_rec.cons_bill_level = 'ACCOUNT' THEN
12942          SELECT COUNT(*)
12943          INTO  l_bill_type_count
12944          FROM  ar_lookups
12945          WHERE lookup_type = 'HZ_CONS_INV_TYPE'
12946          AND   lookup_code = p_customer_profile_rec.cons_inv_type
12947          AND   TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12948          AND   enabled_flag = 'Y'
12949          AND   lookup_code <> 'IMPORTED';
12950 
12951          IF (l_bill_TYPE_count = 0) THEN
12952             FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ACCT_BILL_TYPE');
12953             FND_MSG_PUB.ADD;
12954             x_return_status := FND_API.G_RET_STS_ERROR;
12955          END IF;
12956       -- For Site use bill level, use Summary, Detail, or Imported as bill type.
12957       else
12958          SELECT COUNT(*)
12959          INTO  l_bill_type_count
12960          FROM  ar_lookups
12961          WHERE lookup_type = 'HZ_CONS_INV_TYPE'
12962          AND   lookup_code = p_customer_profile_rec.cons_inv_type
12963          AND   TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12964          AND   enabled_flag = 'Y';
12965 
12966          IF (l_bill_TYPE_count = 0) THEN
12967             FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ACCT_BILL_TYPE');
12968             FND_MSG_PUB.ADD;
12969             x_return_status := FND_API.G_RET_STS_ERROR;
12970          END IF;
12971       end if;
12972    end if;
12973 END validate_bill_level;
12974 --ER13337184
12975 PROCEDURE validate_fv_attributes (
12976     p_create_update_flag                    IN     VARCHAR2,
12977     p_cust_account_rec                      IN     HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE,
12978 	p_rowid                                 IN     ROWID,
12979     x_return_status                         IN OUT NOCOPY VARCHAR2
12980 ) IS
12981     l_federal_entity_type         HZ_CUST_ACCOUNTS.federal_entity_type%TYPE;
12982     l_trading_partner_agency_id   HZ_CUST_ACCOUNTS.trading_partner_agency_id%TYPE;
12983     l_duns_extension              HZ_CUST_ACCOUNTS.duns_extension%TYPE;
12984     l_advance_payment_indicator   HZ_CUST_ACCOUNTS.advance_payment_indicator%TYPE;
12985     l_tpai_validate               VARCHAR2(2);
12986 	l_debug_prefix                VARCHAR2(30) := '';
12987 	l_temp                        VARCHAR2(1);
12988 BEGIN
12989 
12990         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12991            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'FV Attributes Parameter values  : '
12992                                                                        ||' Federal Entity Type ' ||   p_cust_account_rec.federal_entity_type
12993                                                                        ||' trading_partner_agency_id ' ||   p_cust_account_rec.trading_partner_agency_id
12994                                                                         ||' duns_extension ' ||   p_cust_account_rec.duns_extension
12995                                                                         ||' advance_payment_indicator ' ||   p_cust_account_rec.advance_payment_indicator,
12996                                   p_msg_level=>fnd_log.level_statement);
12997         END IF;
12998     -- Select fields for later use during update.
12999     IF p_create_update_flag = 'U' THEN
13000         SELECT federal_entity_type,
13001 		       trading_partner_agency_id,
13002 		       duns_extension,
13003 		       advance_payment_indicator
13004         INTO
13005 		       l_federal_entity_type,
13006 		       l_trading_partner_agency_id,
13007 		       l_duns_extension,
13008 		       l_advance_payment_indicator
13009         FROM HZ_CUST_ACCOUNTS
13010         WHERE ROWID = p_rowid;
13011 
13012         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13013            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'FV Attributes Database values  : '
13014                                                                        ||' Federal Entity Type ' ||   l_federal_entity_type
13015                                                                        ||' trading_partner_agency_id ' ||   l_trading_partner_agency_id
13016                                                                         ||' duns_extension ' ||   l_duns_extension
13017                                                                         ||' advance_payment_indicator ' ||   l_advance_payment_indicator,
13018                                   p_msg_level=>fnd_log.level_statement);
13019         END IF;
13020     END IF;
13021 
13022     -- Federal Entity Type Validation
13023     IF p_cust_account_rec.federal_entity_type IS NOT NULL AND
13024        p_cust_account_rec.federal_entity_type <> FND_API.G_MISS_CHAR AND
13025        ( p_create_update_flag = 'C' OR
13026          ( p_create_update_flag = 'U'  AND
13027            p_cust_account_rec.federal_entity_type <> NVL( l_federal_entity_type, FND_API.G_MISS_CHAR ) ) )
13028     THEN
13029         validate_lookup (
13030             p_column                                => 'federal_entity_type',
13031 			p_lookup_table                          => 'fv_lookup_codes',
13032             p_lookup_type                           => 'FV_FED_NON_FED_CODE',
13033             p_column_value                          =>  p_cust_account_rec.federal_entity_type,
13034             x_return_status                         => x_return_status );
13035 
13036         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13037            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Federal Entity Type is lookup code in lookup type FV_FED_NON_FED_CODE. ' ||
13038                                              'x_return_status = ' || x_return_status,
13039                                   p_msg_level=>fnd_log.level_statement);
13040         END IF;
13041 
13042     END IF;
13043 
13044 	-- Trading Partner Agency Id Validation
13045 	--If Federal Entity Type is null and trading partner agency id is not null then raise error
13046 	IF ( p_create_update_flag = 'C' AND (p_cust_account_rec.federal_entity_type IS NULL
13047                                              OR p_cust_account_rec.federal_entity_type <> 'F'
13048                                              OR p_cust_account_rec.federal_entity_type =  FND_API.G_MISS_CHAR)
13049 	                                AND (p_cust_account_rec.trading_partner_agency_id IS NOT NULL
13050                                              AND p_cust_account_rec.trading_partner_agency_id <> FND_API.G_MISS_CHAR
13051                                             )
13052            )
13053            OR
13054            ( p_create_update_flag = 'U' AND (NVL(p_cust_account_rec.federal_entity_type,l_federal_entity_type) IS NULL
13055                                               OR NVL(p_cust_account_rec.federal_entity_type,l_federal_entity_type) <> 'F'
13056                                               OR p_cust_account_rec.federal_entity_type =  FND_API.G_MISS_CHAR)
13057 	                                AND (nvl(p_cust_account_rec.trading_partner_agency_id,l_trading_partner_agency_id) IS NOT NULL
13058                                              AND NVL(p_cust_account_rec.trading_partner_agency_id,l_trading_partner_agency_id) <> FND_API.G_MISS_CHAR )
13059            )
13060         THEN
13061 	    FND_MESSAGE.SET_NAME('AR', 'HZ_TPAI_IS_NOT_NULL');
13062             FND_MSG_PUB.ADD;
13063             x_return_status := FND_API.G_RET_STS_ERROR;
13064         --If Federal Entity Type is 'Federal' and trading partner agency id is null then raise error
13065 	ELSIF ( p_create_update_flag = 'C' AND p_cust_account_rec.federal_entity_type = 'F'
13066 	                                   AND (p_cust_account_rec.trading_partner_agency_id IS NULL
13067                                                 OR p_cust_account_rec.trading_partner_agency_id =  FND_API.G_MISS_CHAR )
13068               )
13069 	   OR
13070               ( p_create_update_flag = 'U' AND NVL(p_cust_account_rec.federal_entity_type,l_federal_entity_type) = 'F'
13071 	                                   AND (nvl(p_cust_account_rec.trading_partner_agency_id,l_trading_partner_agency_id) IS NULL
13072                                                 OR nvl(p_cust_account_rec.trading_partner_agency_id,l_trading_partner_agency_id) =  FND_API.G_MISS_CHAR )
13073               )
13074          THEN
13075 	        FND_MESSAGE.SET_NAME('AR', 'HZ_TPAI_IS_NULL');
13076                 FND_MSG_PUB.ADD;
13077                 x_return_status := FND_API.G_RET_STS_ERROR;
13078          -- Verify FK value from FV_TP_TREASURY_SYMBOLS table
13079 	 ELSIF p_cust_account_rec.trading_partner_agency_id IS NOT NULL  AND p_cust_account_rec.trading_partner_agency_id <>  FND_API.G_MISS_CHAR THEN
13080                  BEGIN
13081                    SELECT 'Y'
13082                                 into l_temp
13083                     FROM fv_tp_treasury_symbols
13084                     WHERE agency_id = p_cust_account_rec.trading_partner_agency_id
13085                     AND ROWNUM = 1;
13086 
13087                    EXCEPTION
13088                     WHEN NO_DATA_FOUND THEN
13089                         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
13090                         FND_MESSAGE.SET_TOKEN( 'FK', 'Trading Partner Agency Id' );
13091                         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'agency_id' );
13092                         FND_MESSAGE.SET_TOKEN( 'TABLE', 'FV_TP_TREASURY_SYMBOLS');
13093                         FND_MSG_PUB.ADD;
13094                         x_return_status := FND_API.G_RET_STS_ERROR;
13095                     END;
13096 
13097           END IF;
13098 
13099     -- DUNS Extension Validation
13100 	IF p_cust_account_rec.duns_extension IS NOT NULL AND
13101        p_cust_account_rec.duns_extension <> FND_API.G_MISS_CHAR AND
13102        ( p_create_update_flag = 'C' OR
13103          ( p_create_update_flag = 'U'  AND
13104            p_cust_account_rec.duns_extension <> NVL( l_duns_extension, FND_API.G_MISS_CHAR ) ) )
13105     THEN
13106 	  IF TRANSLATE(p_cust_account_rec.duns_extension, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') <> 'XXXX'
13107 	  THEN
13108             FND_MESSAGE.SET_NAME('AR', 'HZ_DUNS_EXTENSION_IS_INVALID');
13109             FND_MSG_PUB.ADD;
13110             x_return_status := FND_API.G_RET_STS_ERROR;
13111 	  END IF;
13112 
13113 	END IF;
13114 
13115     -- Advance Payment Validation
13116     IF p_cust_account_rec.advance_payment_indicator IS NOT NULL AND
13117        p_cust_account_rec.advance_payment_indicator <> FND_API.G_MISS_CHAR AND
13118        ( p_create_update_flag = 'C' OR
13119          ( p_create_update_flag = 'U'  AND
13120            p_cust_account_rec.advance_payment_indicator <> NVL( l_advance_payment_indicator, FND_API.G_MISS_CHAR ) ) )
13121     THEN
13122         validate_lookup (
13123             p_column                                => 'advance_payment_indicator',
13124 			p_lookup_table                          => 'fv_lookup_codes',
13125             p_lookup_type                           => 'FV_ADV_PMT_INDICATOR',
13126             p_column_value                          =>  p_cust_account_rec.advance_payment_indicator,
13127             x_return_status                         => x_return_status );
13128 
13129         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13130            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Advance payment indicator is lookup code in lookup type FV_ADV_PMT_INDICATOR. ' ||
13131                                              'x_return_status = ' || x_return_status,
13132                                   p_msg_level=>fnd_log.level_statement);
13133         END IF;
13134 
13135     END IF;
13136 
13137 END validate_fv_attributes;
13138 
13139 
13140 END HZ_ACCOUNT_VALIDATE_V2PUB;