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.70.12010000.1 2008/07/24 16:26:15 appldev 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_positive_value (
331     p_column                                IN     VARCHAR2,
332     p_column_value                          IN     NUMBER,
333     x_return_status                         IN OUT NOCOPY VARCHAR2
334 );
335 PROCEDURE check_greater_than_zero (
336     p_column                                IN     VARCHAR2,
337     p_column_value                          IN     NUMBER,
338     x_return_status                         IN OUT NOCOPY VARCHAR2
339 );
340 
341 PROCEDURE check_less_than_100 (
342     p_column                                IN     VARCHAR2,
343     p_column_value                          IN     NUMBER,
344     x_return_status                         IN OUT NOCOPY VARCHAR2
345 );
346 
347 PROCEDURE validate_created_by_module (
348     p_create_update_flag          IN     VARCHAR2,
349     p_created_by_module           IN     VARCHAR2,
350     p_old_created_by_module       IN     VARCHAR2,
351     x_return_status               IN OUT NOCOPY VARCHAR2
352 );
353 
354 PROCEDURE validate_application_id (
355     p_create_update_flag          IN     VARCHAR2,
356     p_application_id              IN     NUMBER,
357     p_old_application_id          IN     NUMBER,
358     x_return_status               IN OUT NOCOPY VARCHAR2
359 );
360 
361 
362 PROCEDURE validate_bill_level (
363     p_create_update_flag                    IN     VARCHAR2,
364     p_customer_profile_rec                  IN     HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
365     x_return_status                         IN OUT NOCOPY VARCHAR2
366 );
367 
368 --------------------------------------
369 -- public procedures and functions
370 --------------------------------------
371 
372 /**
373  * PROCEDURE validate_cust_account
374  *
375  * DESCRIPTION
376  *     Validates customer account record. Checks for
377  *         uniqueness
378  *         lookup types
379  *         mandatory columns
380  *         non-updateable fields
381  *         foreign key validations
382  *         other validations
383  *
384  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
385  *
386  * ARGUMENTS
387  *   IN:
388  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
389  *     p_cust_account_rec             Customer account record.
390  *     p_rowid                        Rowid of the record (used only in update mode).
391  *   IN/OUT:
392  *     x_return_status                Return status after the call. The status can
393  *                                    be FND_API.G_RET_STS_SUCCESS (success),
394  *                                    FND_API.G_RET_STS_ERROR (error),
395  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
396  *
397  * NOTES
398  *
399  * MODIFICATION HISTORY
400  *
401  *   07-23-2001    Jianying Huang      o Created.
402  *   11-08-2001    Rajeshwari P        Included the validation for fields, tax_code,
403  *                                     invoice_quantity_rule,customer_class_code,
404  *                                     tax_rounding_rule,primary_salesrep_id,
405  *                                     order_type_id,price_list_id,ship_partial,fob_point ,
406  *                                     item_cross_ref_pref,warehouse_id,date_type_preference,
407  *                                     ship_sets_include_lines_flag and
408  *                                     arrivalsets_include_lines_flag in  procedure
409  *                                     VALIDATE_CUST_ACCOUNT.
410  *  21-05-2002   Rajeshwari P          Bug fix 2311760.Commented the code which validates the
411  *                                     Obsolete column ship_partial.
412  *
413  *  05-26-2003   Ramesh Ch               Bug No:2441276. Added Validation to make
414  *                                       account_number as non updateable.
415  *  12-MAY-2005  Rajib Ranjan Borah   o TCA SSA Uptake (Bug 3456489)
416  *                                      ~ HZ Cache will be used instead of querying from
417  *                                        AR System Parameters.
418  *                                      ~ Tax Code, Order Type and Sales Rep are no longer set
419  *                                        at the Cust Account level.
420  */
421 
422 PROCEDURE validate_cust_account (
423     p_create_update_flag                    IN     VARCHAR2,
424     p_cust_account_rec                      IN     HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE,
425     p_rowid                                 IN     ROWID,
426     x_return_status                         IN OUT NOCOPY VARCHAR2
427 ) IS
428 
429     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_account'
430 
431     l_dummy                                 VARCHAR2(1);
432     l_rowid                                 ROWID := NULL;
433 
434 --  Bug 3456489
435 --  l_profile                               AR_SYSTEM_PARAMETERS.generate_customer_number%TYPE;
436     l_profile                               VARCHAR2(1);
437 
438     l_orig_system_reference HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
439     l_orig_system_reference1                 HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
440     l_account_established_date              HZ_CUST_ACCOUNTS.account_established_date%TYPE;
441     -- l_account_termination_date              HZ_CUST_ACCOUNTS.account_termination_date%TYPE;
442     -- l_account_activation_date               HZ_CUST_ACCOUNTS.account_activation_date%TYPE;
443     l_created_by_module                     HZ_CUST_ACCOUNTS.created_by_module%TYPE;
444     l_application_id                        NUMBER;
445     l_status                                HZ_CUST_ACCOUNTS.status%TYPE;
446     l_customer_type                         HZ_CUST_ACCOUNTS.customer_type%TYPE;
447     l_sales_channel_code                    HZ_CUST_ACCOUNTS.sales_channel_code%TYPE;
448     l_freight_term                          HZ_CUST_ACCOUNTS.freight_term%TYPE;
449     l_ship_via                              HZ_CUST_ACCOUNTS.ship_via%TYPE;
450     l_ship_sets_inc_lines_f                 HZ_CUST_ACCOUNTS.ship_sets_include_lines_flag%TYPE;
451     l_arrivalsets_inc_lines_f               HZ_CUST_ACCOUNTS.arrivalsets_include_lines_flag%TYPE;
452     l_tax_code                              HZ_CUST_ACCOUNTS.TAX_CODE%TYPE;
453     l_invoice_quantity_rule                 HZ_CUST_ACCOUNTS.INVOICE_QUANTITY_RULE%TYPE;
454 --    l_primary_salesrep_id                   HZ_CUST_ACCOUNTS.PRIMARY_SALESREP_ID%TYPE;
455     l_order_type_id                         HZ_CUST_ACCOUNTS.ORDER_TYPE_ID%TYPE;
456     l_price_list_id                         HZ_CUST_ACCOUNTS.PRICE_LIST_ID%TYPE;
457 --    l_ship_partial                          HZ_CUST_ACCOUNTS.SHIP_PARTIAL%TYPE;
458     l_fob_point                             HZ_CUST_ACCOUNTS.FOB_POINT%TYPE;
459     l_item_cross_ref_pref                   HZ_CUST_ACCOUNTS.ITEM_CROSS_REF_PREF%TYPE;
460     l_warehouse_id                          HZ_CUST_ACCOUNTS.WAREHOUSE_ID%TYPE;
461     l_date_type_preference                  HZ_CUST_ACCOUNTS.DATE_TYPE_PREFERENCE%TYPE;
462     l_customer_class_code                   HZ_CUST_ACCOUNTS.CUSTOMER_CLASS_CODE%TYPE;
463     l_tax_rounding_rule                     HZ_CUST_ACCOUNTS.TAX_ROUNDING_RULE%TYPE;
464     l_account_number                        HZ_CUST_ACCOUNTS.ACCOUNT_NUMBER%TYPE;
465     l_instr_length  number := 0;
466     l_validate_flag varchar2(1) := 'Y';
467     l_mosr_owner_table_id number;
468 
469     l_temp_return_status VARCHAR2(10); -- for storing return status from
470                                        -- hz_orig_system_ref_pub.get_owner_table_id
471 
472 BEGIN
473 
474     -- Check if API is called in debug mode. If yes, enable debug.
475     --enable_debug;
476 
477     -- Debug info.
478     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
479         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_cust_account (+)',
480                                p_msg_level=>fnd_log.level_procedure);
481     END IF;
482 
483 
484     -- Select fields for later use during update.
485     IF p_create_update_flag = 'U' THEN
486         SELECT ACCOUNT_NUMBER,ORIG_SYSTEM_REFERENCE, ACCOUNT_ESTABLISHED_DATE,
487                -- ACCOUNT_TERMINATION_DATE, --ACCOUNT_ACTIVATION_DATE,
488                CREATED_BY_MODULE, APPLICATION_ID,
489                STATUS, CUSTOMER_TYPE, SALES_CHANNEL_CODE, FREIGHT_TERM,
490                SHIP_VIA,SHIP_SETS_INCLUDE_LINES_FLAG,ARRIVALSETS_INCLUDE_LINES_FLAG,
491                TAX_CODE,INVOICE_QUANTITY_RULE,--PRIMARY_SALESREP_ID,
492                ORDER_TYPE_ID,PRICE_LIST_ID,FOB_POINT,
493                ITEM_CROSS_REF_PREF,WAREHOUSE_ID,DATE_TYPE_PREFERENCE,
494                CUSTOMER_CLASS_CODE,TAX_ROUNDING_RULE
495         INTO l_account_number,l_orig_system_reference, l_account_established_date,
496              -- l_account_termination_date, --l_account_activation_date,
497              l_created_by_module, l_application_id,
498              l_status, l_customer_type, l_sales_channel_code, l_freight_term,
499              l_ship_via,l_ship_sets_inc_lines_f,l_arrivalsets_inc_lines_f,
500              l_tax_code,l_invoice_quantity_rule,--l_primary_salesrep_id,
501              l_order_type_id,l_price_list_id,l_fob_point,
502              l_item_cross_ref_pref,l_warehouse_id,l_date_type_preference,
503              l_customer_class_code,l_tax_rounding_rule
504         FROM HZ_CUST_ACCOUNTS
505         WHERE ROWID = p_rowid;
506     END IF;
507 
508     --------------------------------------
509     -- validate cust_account_id
510     --------------------------------------
511 /****Logical APIs - validation not required****/
512   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
513     IF p_create_update_flag = 'C' THEN
514 
515         -- If primary key value is passed, check for uniqueness.
516         -- If primary key value is not passed, it will be generated
517         -- from sequence by table handler.
518 
519         IF p_cust_account_rec.cust_account_id IS NOT NULL AND
520            p_cust_account_rec.cust_account_id <> FND_API.G_MISS_NUM
521         THEN
522         BEGIN
523             SELECT 'Y' INTO l_dummy
524             FROM HZ_CUST_ACCOUNTS
525             WHERE CUST_ACCOUNT_ID = p_cust_account_rec.cust_account_id;
526 
527             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
528             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
529             FND_MSG_PUB.ADD;
530             x_return_status := FND_API.G_RET_STS_ERROR;
531         EXCEPTION
532             WHEN NO_DATA_FOUND THEN
533                 NULL;
534         END;
535 
536         /*IF G_DEBUG THEN
537             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
538                 'cust_account_id is unique during creation if passed in. ' ||
539                 'x_return_status = ' || x_return_status, l_debug_prefix );
540         END IF;
541         */
542         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
543            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
544                                   p_message=>'cust_account_id is unique during creation if passed in. ' ||
545                                              'x_return_status = ' || x_return_status,
546                                   p_msg_level=>fnd_log.level_statement);
547         END IF;
548 
549         END IF;
550 
551     END IF;
552 
553     /*IF G_DEBUG THEN
554         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
555             '(+) after validate cust_account_id ... ' ||
556             'x_return_status = ' || x_return_status, l_debug_prefix );
557     END IF;
558     */
559     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
560            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate cust_account_id ... ' ||
561                                       'x_return_status = ' || x_return_status,
562                                   p_msg_level=>fnd_log.level_statement);
563     END IF;
564   END IF;
565 
566     --------------------------------------
567     -- validate account_number
568     --------------------------------------
569 
570     -- account_number should be mandatory and unique.
571 
572     -- check if need generate account_number.
573    BEGIN
574 
575    /* 3456489. Refer the new HZ_CACHE. */
576         --IF p_create_update_flag = 'C' THEN
577                 l_profile := HZ_MO_GLOBAL_CACHE.Get_Generate_Customer_Number;
578         --END IF;
579 
580    EXCEPTION
581        WHEN NO_DATA_FOUND THEN
582            x_return_status := FND_API.G_RET_STS_ERROR;
583    END ;
584 
585    /* IF G_DEBUG THEN
586         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
587             'account_number autonumbering is ' || NVL( l_profile, 'N' ),
588             l_debug_prefix );
589     END IF;
590     */
591     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
592            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number autonumbering is ' || NVL( l_profile, 'N' ),
593                                   p_msg_level=>fnd_log.level_statement);
594     END IF;
595 
596     IF p_create_update_flag = 'C' THEN
597 
598         -- If autonumbering is on, if user has passed in an account_number,
599         -- error out. If autonumbering is off, if user has not passed in
600         -- value, error out;
601 
602         IF l_profile = 'Y' THEN
603             IF p_cust_account_rec.account_number IS NOT NULL AND
604                p_cust_account_rec.account_number <> FND_API.G_MISS_CHAR
605             THEN
606                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCOUNT_NUMBER_AUTO_ON' );
607                 FND_MSG_PUB.ADD;
608                 x_return_status := FND_API.G_RET_STS_ERROR;
609             END IF;
610 
611             -- the account_number will be generated from sequence by table handler.
612 
613             /*IF G_DEBUG THEN
614                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
615                     'account_number cannot be passed in if autonumbering is on. ' ||
616                     'x_return_status = ' || x_return_status, l_debug_prefix );
617             END IF;
618             */
619             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
620                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
621                                        p_message=>'account_number cannot be passed in if autonumbering is on. ' ||
622                                                   'x_return_status = ' || x_return_status,
623                                        p_msg_level=>fnd_log.level_statement);
624             END IF;
625 
626         ELSIF  l_profile = 'N' /* Bug 5118546 */
627         THEN
628             IF p_cust_account_rec.account_number IS NULL OR
629                p_cust_account_rec.account_number = FND_API.G_MISS_CHAR
630             THEN
631                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
632                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'account_number' );
633                 FND_MSG_PUB.ADD;
634                 x_return_status := FND_API.G_RET_STS_ERROR;
635             END IF;
636 
637             /*IF G_DEBUG THEN
638                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
639                     'account_number is mandatory if autonumbering is off. ' ||
640                     'x_return_status = ' || x_return_status, l_debug_prefix );
641             END IF;
642             */
643             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
644                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is mandatory if autonumbering is off. ' ||
645                                                 'x_return_status = ' || x_return_status,
646                                         p_msg_level=>fnd_log.level_statement);
647             END IF;
648 
649         END IF;
650 
651     ELSE -- in update
652         IF p_cust_account_rec.account_number IS NOT NULL THEN
653             validate_cannot_update_to_null (
654                 p_column                                => 'account_number',
655                 p_column_value                          => p_cust_account_rec.account_number,
656                 x_return_status                         => x_return_status );
657 
658             /*IF G_DEBUG THEN
659                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
660                     'account_number cannot be updated to null. ' ||
661                     'x_return_status = ' || x_return_status, l_debug_prefix );
662             END IF;
663             */
664             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
665                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number cannot be updated to null. ' ||
666                                                 'x_return_status = ' || x_return_status,
667                                        p_msg_level=>fnd_log.level_statement);
668             END IF;
669 
670             --------------------------------------
671             -- validate ACCOUNT NUMBER  BugNo:2441276
672             --------------------------------------
673 
674             --  bug 3969469. account_number is updatable if the system option
675             --  if AUTO_CUSTOMER_NUMBERING is OFF else it is not updatable.
676 
677 
678             IF  (p_cust_account_rec.account_number<>l_account_number
679                 AND l_profile='Y') -- bug 3969469
680             THEN
681 
682                 validate_nonupdateable (
683                     p_column                                => 'account_number',
684                     p_column_value                          => p_cust_account_rec.account_number,
685                     p_old_column_value                      => l_account_number,
686                     x_return_status                         => x_return_status );
687 
688                 /*IF G_DEBUG THEN
689                     hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
690                         'account_number is non-updateable. ' ||
691                         'x_return_status = ' || x_return_status, l_debug_prefix );
692                 END IF;
693                 */
694                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
695                         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is non-updateable. ' ||
696                                                          'x_return_status = ' || x_return_status,
697                                                p_msg_level=>fnd_log.level_statement);
698                 END IF;
699 
700             END IF;
701 
702         END IF;
703 
704     END IF;
705 
706     -- account_number is unique.
707     IF p_cust_account_rec.account_number IS NOT NULL AND
708        p_cust_account_rec.account_number <> FND_API.G_MISS_CHAR
709     THEN
710     BEGIN
711         SELECT ROWID INTO l_rowid
712         FROM HZ_CUST_ACCOUNTS
713         WHERE ACCOUNT_NUMBER = p_cust_account_rec.account_number;
714 
715         IF p_create_update_flag = 'C' OR
716            ( p_create_update_flag = 'U' AND l_rowid <> p_rowid )
717         THEN
718             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
719             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'account_number' );
720             FND_MSG_PUB.ADD;
721             x_return_status := FND_API.G_RET_STS_ERROR;
722         END IF;
723     EXCEPTION
724         WHEN NO_DATA_FOUND THEN
725             NULL;
726     END;
727 
728     /*IF G_DEBUG THEN
729         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
730             'account_number is unique. ' ||
731             'x_return_status = ' || x_return_status, l_debug_prefix );
732     END IF;
733     */
734     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
735            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is unique. ' ||
736                                              'x_return_status = ' || x_return_status,
737                                   p_msg_level=>fnd_log.level_statement);
738     END IF;
739 
740     END IF;
741 
742 
743 
744 
745     /*IF G_DEBUG THEN
746         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
747             '(+) after validate account_number ... ' ||
748             'x_return_status = ' || x_return_status, l_debug_prefix );
749     END IF;
750     */
751 
752     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
753            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate account_number ... ' ||
754                                   'x_return_status = ' || x_return_status,
755                                   p_msg_level=>fnd_log.level_statement);
756     END IF;
757 
758 
759     --------------------------------------
760     -- validate orig_system_reference
761     --------------------------------------
762 /****Logical APIs - validation not required****/
763   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
764     -- orig_system_reference is unique. Since orig_system_refence is defaulting to
765     -- primary key, we only need to check the uniqueness if user passes some value.
766     -- database constraints can catch unique error when we defaulting.
767     -- orig_system_reference is non-updateable, we only need to check uniqueness
768     -- during creation.
769 
770     IF p_create_update_flag = 'C' AND
771        p_cust_account_rec.orig_system_reference IS NOT NULL AND
772        p_cust_account_rec.orig_system_reference <> FND_API.G_MISS_CHAR
773     THEN
774     BEGIN
775         SELECT 'Y' INTO l_dummy
776         FROM HZ_CUST_ACCOUNTS
777         WHERE ORIG_SYSTEM_REFERENCE = p_cust_account_rec.orig_system_reference;
778 
779         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
780         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'orig_system_reference' );
781         FND_MSG_PUB.ADD;
782         x_return_status := FND_API.G_RET_STS_ERROR;
783     EXCEPTION
784         WHEN NO_DATA_FOUND THEN
785             NULL;
786     END;
787 
788     /*IF G_DEBUG THEN
789         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
790             'orig_system_reference is unique. ' ||
791             'x_return_status = ' || x_return_status, l_debug_prefix );
792     END IF;
793     */
794     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
795            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is unique. ' ||
796                                          'x_return_status = ' || x_return_status,
797                                   p_msg_level=>fnd_log.level_statement);
798     END IF;
799 
800     END IF;
801 
802     l_instr_length := instr(l_orig_system_reference,'#@');
803     if l_instr_length > 0
804     then
805         l_orig_system_reference1 := null;
806         if  substr(l_orig_system_reference,1,l_instr_length-1) <> p_cust_account_rec.orig_system_reference
807         then
808                 l_validate_flag := 'N';
809         end if;
810     else
811         l_orig_system_reference1 := p_cust_account_rec.orig_system_reference;
812     end if;
813 
814    IF (p_cust_account_rec.orig_system is not null and p_cust_account_rec.orig_system <>fnd_api.g_miss_char)
815     and (p_cust_account_rec.orig_system_reference is not null and p_cust_account_rec.orig_system_reference <>fnd_api.g_miss_char)
816     and p_create_update_flag = 'U'
817    then
818         hz_orig_system_ref_pub.get_owner_table_id
819         (p_orig_system => p_cust_account_rec.orig_system,
820         p_orig_system_reference => p_cust_account_rec.orig_system_reference,
821         p_owner_table_name => 'HZ_CUST_ACCOUNTS',
822         x_owner_table_id => l_mosr_owner_table_id,
823         x_return_status => l_temp_return_status);
824 
825         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
826 		    l_mosr_owner_table_id= nvl(p_cust_account_rec.cust_account_id,l_mosr_owner_table_id))
827         THEN
828             l_validate_flag := 'N';
829         END IF;
830 
831         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
832 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
833 		-- In case of success, leave it to carry over previous value as before this call.
834 		-- Fix for Bug 5498116 (29-AUG-2006)
835         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
836           x_return_status := l_temp_return_status;
837         END IF;
838 
839     END IF;
840     -- orig_system_reference is non-updateable field
841     IF p_create_update_flag = 'U' AND
842        p_cust_account_rec.orig_system_reference IS NOT NULL
843        and l_validate_flag = 'Y'
844     THEN
845 
846         validate_nonupdateable (
847             p_column                                => 'orig_system_reference',
848             p_column_value                          => l_orig_system_reference1,
849             p_old_column_value                      => l_orig_system_reference,
850             x_return_status                         => x_return_status );
851 
852         /*IF G_DEBUG THEN
853             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
854                 'orig_system_reference is non-updateable. ' ||
855                 'x_return_status = ' || x_return_status, l_debug_prefix );
856         END IF;
857         */
858         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
859            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is non-updateable. ' ||
860                                         'x_return_status = ' || x_return_status,
861                                   p_msg_level=>fnd_log.level_statement);
862         END IF;
863 
864     END IF;
865 
866     /*IF G_DEBUG THEN
867         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
868             '(+) after validate orig_system_reference ... ' ||
869             'x_return_status = ' || x_return_status, l_debug_prefix );
870     END IF;
871     */
872     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
873            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
874                                         'x_return_status = ' || x_return_status,
875                                   p_prefix =>l_debug_prefix,
876                                   p_msg_level=>fnd_log.level_statement);
877     END IF;
878   END IF;
879 
880 
881 
882     --------------------------------------
883     -- validate status
884     --------------------------------------
885 
886     -- status cannot be set to null during update
887     IF p_create_update_flag = 'U' AND
888        p_cust_account_rec.status IS NOT NULL
889     THEN
890         validate_cannot_update_to_null (
891             p_column                                => 'status',
892             p_column_value                          => p_cust_account_rec.status,
893             x_return_status                         => x_return_status );
894 
895         /*IF G_DEBUG THEN
896             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
897                 'status cannot be updated to null. ' ||
898                 'x_return_status = ' || x_return_status, l_debug_prefix );
899         END IF;
900         */
901         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
902            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be updated to null. ' ||
903                                         'x_return_status = ' || x_return_status,
904                                    p_msg_level=>fnd_log.level_statement);
905         END IF;
906 
907     END IF;
908 
909 /****Logical APIs - validation not required****/
910   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
911     -- status is lookup code in lookup type CODE_STATUS
912     IF p_cust_account_rec.status IS NOT NULL AND
913        p_cust_account_rec.status <> FND_API.G_MISS_CHAR AND
914        ( p_create_update_flag = 'C' OR
915          ( p_create_update_flag = 'U'  AND
916            p_cust_account_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
917     THEN
918         validate_lookup (
919             p_column                                => 'status',
920             p_lookup_type                           => 'CODE_STATUS',
921             p_column_value                          => p_cust_account_rec.status,
922             x_return_status                         => x_return_status );
923 
924         /*IF G_DEBUG THEN
925             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
926                 'status is lookup code in lookup type CODE_STATUS. ' ||
927                 'x_return_status = ' || x_return_status, l_debug_prefix );
928         END IF;
929         */
930 
931         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
932            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
933                                      'x_return_status = ' || x_return_status,
934                                   p_msg_level=>fnd_log.level_statement);
935         END IF;
936 
937     END IF;
938   END IF;
939 
940     /*IF G_DEBUG THEN
941         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
942             '(+) after validate status ... ' ||
943             'x_return_status = ' || x_return_status, l_debug_prefix );
944     END IF;
945     */
946 
947     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
948            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate status ... ' ||
949                                         'x_return_status = ' || x_return_status,
950                                   p_msg_level=>fnd_log.level_statement);
951     END IF;
952 
953 
954     --------------------------------------
955     -- validate customer_type
956     --------------------------------------
957 
958     -- customer_type is lookup code in lookup type CUSTOMER_TYPE
959     IF p_cust_account_rec.customer_type IS NOT NULL AND
960        p_cust_account_rec.customer_type <> FND_API.G_MISS_CHAR AND
961        ( p_create_update_flag = 'C' OR
962          ( p_create_update_flag = 'U'  AND
963            p_cust_account_rec.customer_type <> NVL( l_customer_type, FND_API.G_MISS_CHAR ) ) )
964     THEN
965         validate_lookup (
966             p_column                                => 'customer_type',
967             p_lookup_type                           => 'CUSTOMER_TYPE',
968             p_column_value                          => p_cust_account_rec.customer_type,
969             x_return_status                         => x_return_status );
970 
971         /*IF G_DEBUG THEN
972             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
973                 'customer_type is lookup code in lookup type CUSTOMER_TYPE. ' ||
974                 'x_return_status = ' || x_return_status, l_debug_prefix );
975         END IF;
976         */
977         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
978            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'customer_type is lookup code in lookup type CUSTOMER_TYPE. ' ||
979                                              'x_return_status = ' || x_return_status,
980                                   p_msg_level=>fnd_log.level_statement);
981         END IF;
982 
983     END IF;
984 
985     /*IF G_DEBUG THEN
986         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
987             '(+) after validate customer_type ... ' ||
988             'x_return_status = ' || x_return_status, l_debug_prefix );
989     END IF;
990     */
991     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
992            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate customer_type ... ' ||
993                                         'x_return_status = ' || x_return_status,
994                                   p_msg_level=>fnd_log.level_statement);
995     END IF;
996 
997 
998     --------------------------------------
999     -- validate sales_channel_code
1000     --------------------------------------
1001 
1002     -- sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups
1003     IF p_cust_account_rec.sales_channel_code IS NOT NULL AND
1004        p_cust_account_rec.sales_channel_code <> FND_API.G_MISS_CHAR AND
1005        ( p_create_update_flag = 'C' OR
1006          ( p_create_update_flag = 'U'  AND
1007            p_cust_account_rec.sales_channel_code <> NVL( l_sales_channel_code, FND_API.G_MISS_CHAR ) ) )
1008     THEN
1009         validate_lookup (
1010             p_column                                => 'sales_channel_code',
1011             p_lookup_table                          => 'SO_LOOKUPS',
1012             p_lookup_type                           => 'SALES_CHANNEL',
1013             p_column_value                          => p_cust_account_rec.sales_channel_code,
1014             x_return_status                         => x_return_status );
1015 
1016         /*IF G_DEBUG THEN
1017             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1018                 'sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups. ' ||
1019                 'x_return_status = ' || x_return_status, l_debug_prefix );
1020         END IF;
1021         */
1022         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1023            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. ' ||
1024                                         'x_return_status = ' || x_return_status,
1025                                   p_msg_level=>fnd_log.level_statement);
1026         END IF;
1027 
1028     END IF;
1029 
1030     /*IF G_DEBUG THEN
1031         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1032             '(+) after validate sales_channel_code ... ' ||
1033             'x_return_status = ' || x_return_status, l_debug_prefix );
1034     END IF;
1035     */
1036     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1037            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate sales_channel_code ... ' ||
1038                                         'x_return_status = ' || x_return_status,
1039                                   p_msg_level=>fnd_log.level_statement);
1040     END IF;
1041 
1042 
1043     --------------------------------------
1044     -- validate freight_term
1045     --------------------------------------
1046 
1047     -- freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups
1048     IF p_cust_account_rec.freight_term IS NOT NULL AND
1049        p_cust_account_rec.freight_term <> FND_API.G_MISS_CHAR AND
1050        ( p_create_update_flag = 'C' OR
1051          ( p_create_update_flag = 'U'  AND
1052            p_cust_account_rec.freight_term <> NVL( l_freight_term, FND_API.G_MISS_CHAR ) ) )
1053     THEN
1054         validate_lookup (
1055             p_column                                => 'freight_term',
1056             p_lookup_table                          => 'SO_LOOKUPS',
1057             p_lookup_type                           => 'FREIGHT_TERMS',
1058             p_column_value                          => p_cust_account_rec.freight_term,
1059             x_return_status                         => x_return_status );
1060 
1061         /*IF G_DEBUG THEN
1062             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1063                 'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
1064                 'x_return_status = ' || x_return_status, l_debug_prefix );
1065         END IF;
1066         */
1067         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1068            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
1069                                                 'x_return_status = ' || x_return_status,
1070                                   p_msg_level=>fnd_log.level_statement);
1071          END IF;
1072 
1073 
1074     END IF;
1075 
1076     /*IF G_DEBUG THEN
1077         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1078             '(+) after validate freight_term ... ' ||
1079             'x_return_status = ' || x_return_status, l_debug_prefix );
1080     END IF;
1081     */
1082     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1083            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate freight_term ... ' ||
1084                                         'x_return_status = ' || x_return_status,
1085                                   p_msg_level=>fnd_log.level_statement);
1086     END IF;
1087 
1088 
1089     --------------------------------------
1090     -- validate tax_header_level_flag
1091     --------------------------------------
1092 /****Logical APIs - validation not required****/
1093   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1094     -- tax_header_level_flag is lookup code in lookup type YES/NO
1095     IF p_cust_account_rec.tax_header_level_flag IS NOT NULL AND
1096        p_cust_account_rec.tax_header_level_flag <> FND_API.G_MISS_CHAR
1097     THEN
1098         validate_lookup (
1099             p_column                                => 'tax_header_level_flag',
1100             p_lookup_type                           => 'YES/NO',
1101             p_column_value                          => p_cust_account_rec.tax_header_level_flag,
1102             x_return_status                         => x_return_status );
1103 
1104         /*IF G_DEBUG THEN
1105             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1106                 'tax_header_level_flag is lookup code in lookup type YES/NO. ' ||
1107                 'x_return_status = ' || x_return_status, l_debug_prefix );
1108         END IF;
1109         */
1110 
1111         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1112            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_header_level_flag is lookup code in lookup type YES/NO. ' ||
1113                                         'x_return_status = ' || x_return_status,
1114                                   p_msg_level=>fnd_log.level_statement);
1115         END IF;
1116 
1117     END IF;
1118 
1119     /*IF G_DEBUG THEN
1120         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1121             '(+) after validate tax_header_level_flag ... ' ||
1122             'x_return_status = ' || x_return_status, l_debug_prefix );
1123     END IF;
1124     */
1125     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1126            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_header_level_flag ... ' ||
1127                                   'x_return_status = ' || x_return_status,
1128                                   p_msg_level=>fnd_log.level_statement);
1129     END IF;
1130   END IF;
1131 
1132        ----------------------------
1133        --validate tax_code
1134        ----------------------------
1135 
1136    -- Bug 4713150 : tax_code is now validated against the view zx_output_classifications_v
1137 /*
1138    IF p_cust_account_rec.tax_code IS NOT NULL AND
1139       p_cust_account_rec.tax_code <> FND_API.G_MISS_CHAR
1140    THEN
1141        FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1142        FND_MESSAGE.SET_TOKEN('COLUMN','TAX_CODE');
1143        FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1144        FND_MSG_PUB.ADD;
1145        x_return_status := FND_API.G_RET_STS_ERROR;
1146    END IF;
1147 */
1148 
1149       IF p_cust_account_rec.tax_code is NOT NULL AND
1150          p_cust_account_rec.tax_code <> FND_API.G_MISS_CHAR AND
1151        ( p_create_update_flag = 'C' OR
1152          ( p_create_update_flag = 'U'  AND
1153            p_cust_account_rec.tax_code <> NVL( l_tax_code, FND_API.G_MISS_CHAR ) ) )
1154       THEN
1155           check_tax_code(
1156                p_column                                => 'tax_code',
1157                p_column_value                          => p_cust_account_rec.tax_code,
1158 	       p_called_from                           => 'validate_cust_account',
1159                x_return_status                         => x_return_status );
1160 
1161          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1162             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. '||
1163                                                'x_return_status = ' || x_return_status,
1164                                    p_msg_level=>fnd_log.level_statement);
1165          END IF;
1166 
1167        END IF;
1168          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1169                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_code..' ||
1170                                        'x_return_status = ' || x_return_status,
1171                                       p_msg_level=>fnd_log.level_statement);
1172          END IF;
1173 
1174 
1175       ----------------------------------------------------------
1176       --validate order_type_id
1177       ----------------------------------------------------------
1178    /* 3456489. Order type is no longer set at the Customer Account Level. */
1179 
1180    IF p_cust_account_rec.order_type_id IS NOT NULL AND
1181       p_cust_account_rec.order_type_id <> FND_API.G_MISS_NUM
1182    THEN
1183        FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1184        FND_MESSAGE.SET_TOKEN('COLUMN','ORDER_TYPE_ID');
1185        FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1186        FND_MSG_PUB.ADD;
1187        x_return_status := FND_API.G_RET_STS_ERROR;
1188    END IF;
1189 
1190 
1191    /*
1192     |  --order_type_id should be a valid value defined in OE_ORDER_TYPES_V
1193     |
1194     |  IF p_cust_account_rec.order_type_id is NOT NULL AND
1195     |     p_cust_account_rec.order_type_id <> FND_API.G_MISS_NUM AND
1196     |   ( p_create_update_flag = 'C' OR
1197     |     ( p_create_update_flag = 'U'  AND
1198     |       p_cust_account_rec.order_type_id <> NVL( l_order_type_id, FND_API.G_MISS_NUM ) ) )
1199     |  THEN
1200     |      check_ord_type(
1201     |            p_column                                => 'order_type_id',
1202     |            p_column_value                          => p_cust_account_rec.order_type_id,
1203     |            x_return_status                         => x_return_status );
1204     |
1205     |     /*IF G_DEBUG THEN
1206     |        hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1207     |           'order_type_id should be a valid value defined in OE_ORDER_TYPES_V..' ||
1208     |           'x_return_status = ' || x_return_status, l_debug_prefix);
1209     |     END IF;
1210     |    *//*
1211     |    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1212     |       |  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..' ||
1213     |                                           'x_return_status = ' || x_return_status,
1214     |                                p_msg_level=>fnd_log.level_statement);
1215     |    END IF;
1216     |
1217     |  END IF;
1218     |     /*IF G_DEBUG THEN
1219     |        hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1220     |           '(+) after validate order_type_id..' ||
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=>'(+) after validate order_type_id..' ||
1226     |                                   'x_return_status = ' || x_return_status,
1227     |                             p_msg_level=>fnd_log.level_statement);
1228     |    END IF;
1229     */
1230 
1231         ----------------------------------------------------------
1232         --validate primary_salesrep_id
1233         ----------------------------------------------------------
1234   /* 3456489. Sales Rep is no longer set at the Customer Account Level. */
1235 
1236    IF p_cust_account_rec.primary_salesrep_id IS NOT NULL AND
1237       p_cust_account_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
1238    THEN
1239        FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1240        FND_MESSAGE.SET_TOKEN('COLUMN','PRIMARY_SALESREP_ID');
1241        FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1242        FND_MSG_PUB.ADD;
1243        x_return_status := FND_API.G_RET_STS_ERROR;
1244    END IF;
1245 
1246   /*
1247    |    --Primary_salesrep_id should be a valid value defined in RA_SALESREPS
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    |      AND ( p_create_update_flag = 'C' OR
1252    |      ( p_create_update_flag = 'U'  AND
1253    |        p_cust_account_rec.primary_salesrep_id <> NVL( l_primary_salesrep_id, FND_API.G_MISS_NUM ) ) )
1254    |    THEN
1255    |        check_prim_salesrep(
1256    |                      p_column                                => 'primary_salesrep_id',
1257    |              p_column_value                          => p_cust_account_rec.primary_salesrep_id,
1258    |               x_return_status                         => x_return_status );
1259    |
1260    |        /*IF G_DEBUG THEN
1261    |           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1262    |               'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
1263    |               'x_return_status = ' || x_return_status, l_debug_prefix);
1264    |       | END IF;
1265    |       | *//*
1266    |        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1267    |            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
1268    |                                    'x_return_status = ' || x_return_status,
1269    |                           p_msg_level=>fnd_log.level_statement);
1270    |         END IF;
1271    |
1272    |     END IF;
1273    |         /*IF G_DEBUG THEN
1274    |            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1275    |               '(+) after validate primary_salesrep_id..' ||
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=>'(+) after validate primary_salesrep_id..' ||
1281    |                                            'x_return_status = ' || x_return_status,
1282    |                                  p_msg_level=>fnd_log.level_statement);
1283    |        END IF;
1284    */
1285 
1286 --Bug fix 2311760
1287 /**********
1288         -------------------------------------------------------
1289         --validate ship_partial
1290         -------------------------------------------------------
1291         -- ship_partial is a lookup code in lookup type YES/NO
1292 
1293         IF p_cust_account_rec.ship_partial IS NOT NULL AND
1294            p_cust_account_rec.ship_partial <> FND_API.G_MISS_CHAR
1295          AND ( p_create_update_flag = 'C' OR
1296          ( p_create_update_flag = 'U'  AND
1297            p_cust_account_rec.ship_partial <> NVL( l_ship_partial, FND_API.G_MISS_CHAR) ) )
1298         THEN
1299             validate_lookup (
1300                 p_column                                => 'ship_partial',
1301                 p_lookup_type                           => 'YES/NO',
1302                 p_column_value                          => p_cust_account_rec.ship_partial,
1303                 x_return_status                         => x_return_status );
1304 
1305             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1306                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ship_partial is a lookup code in lookup type YES/NO. ' ||
1307                                              'x_return_status = ' || x_return_status,
1308                                           p_msg_level=>fnd_log.level_statement);
1309             END IF;
1310 
1311         END IF;
1312 
1313             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1314                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate ship_partial ... ' ||
1315                                                 'x_return_status = ' || x_return_status,
1316                                         p_msg_level=>fnd_log.level_statement);
1317             END IF;
1318 
1319 
1320 ***************/
1321         -----------------------------------------------------------
1322         --validate tax_rounding_rule
1323         -----------------------------------------------------------
1324         --tax_rounding_rule is a lookup_code in lookup type TAX_ROUNDING_RULE
1325 
1326         IF p_cust_account_rec.tax_rounding_rule is NOT NULL AND
1327            p_cust_account_rec.tax_rounding_rule <> FND_API.G_MISS_CHAR
1328          AND ( p_create_update_flag = 'C' OR
1329          ( p_create_update_flag = 'U'  AND
1330            p_cust_account_rec.tax_rounding_rule <> NVL( l_tax_rounding_rule, FND_API.G_MISS_CHAR) ) )
1331         THEN
1332             validate_lookup(
1333                 p_column        =>'tax_rounding_rule',
1334                 p_lookup_type   =>'TAX_ROUNDING_RULE',
1335                 p_column_value  =>p_cust_account_rec.tax_rounding_rule,
1336                 x_return_status =>x_return_status  );
1337 
1338             /*IF G_DEBUG THEN
1339                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1340                   'tax_rounding_rule is lookup_code in lookup type TAX_ROUNDING_RULE. '||
1341                   'x_return_status = ' || x_return_status, l_debug_prefix);
1342             END IF;
1343             */
1344 
1345             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1346                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_rounding_rule is lookup_code in lookup type TAX_ROUNDING_RULE. '||
1347                                                  'x_return_status = ' || x_return_status,
1348                                   p_msg_level=>fnd_log.level_statement);
1349             END IF;
1350 
1351         END IF;
1352             /*IF G_DEBUG THEN
1353                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1354                   '(+) after validate tax_rounding_rule..' ||
1355                   'x_return_status = ' || x_return_status, l_debug_prefix );
1356             END IF;
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=>'(+) after validate tax_rounding_rule..' ||
1360                                                  'x_return_status = ' || x_return_status,
1361                                   p_msg_level=>fnd_log.level_statement);
1362              END IF;
1363 
1364 
1365         -------------------------------------------------------
1366         --validate customer_class_code
1367         -------------------------------------------------------
1368         --Customer_class_code is a lookup_code in lookup type CUSTOMER_CLASS
1369 
1370         IF p_cust_account_rec.customer_class_code is NOT NULL AND
1371            p_cust_account_rec.customer_class_code <> FND_API.G_MISS_CHAR
1372          AND ( p_create_update_flag = 'C' OR
1373          ( p_create_update_flag = 'U'  AND
1374            p_cust_account_rec.customer_class_code <> NVL( l_customer_class_code, FND_API.G_MISS_CHAR) ) )
1375         THEN
1376             validate_lookup(
1377                 p_column        =>'customer_class_code',
1378                 p_lookup_type   =>'CUSTOMER CLASS',
1379                 p_column_value  =>p_cust_account_rec.customer_class_code,
1380                 x_return_status =>x_return_status  );
1381             /*IF G_DEBUG THEN
1382                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1383                   'Customer_class_code is lookup_code in lookup type CUSTOMER_CLASS. '||
1384                   'x_return_status = ' || x_return_status, l_debug_prefix);
1385             END IF;
1386             */
1387             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1388                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Customer_class_code is lookup_code in lookup type CUSTOMER_CLASS. '||
1389                                                 'x_return_status = ' || x_return_status,
1390                                         p_msg_level=>fnd_log.level_statement);
1391             END IF;
1392 
1393         END IF;
1394             /*IF G_DEBUG THEN
1395                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1396                   '(+) after validate CUSTOMER_CLASS_CODE..' ||
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=>'(+) after validate CUSTOMER_CLASS_CODE..' ||
1402                                                 'x_return_status = ' || x_return_status,
1403                                           p_msg_level=>fnd_log.level_statement);
1404              END IF;
1405 
1406 
1407         ---------------------------------------------------
1408         --validate Invoice_quantity_rule
1409         ---------------------------------------------------
1410         --Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS
1411 
1412         IF p_cust_account_rec.invoice_quantity_rule is NOT NULL AND
1413            p_cust_account_rec.invoice_quantity_rule <> FND_API.G_MISS_CHAR
1414          AND ( p_create_update_flag = 'C' OR
1415          ( p_create_update_flag = 'U'  AND
1416            p_cust_account_rec.invoice_quantity_rule <> NVL( l_invoice_quantity_rule, FND_API.G_MISS_CHAR) ) )
1417         THEN
1418             validate_lookup(
1419                 p_column        =>'invoice_quantity_rule',
1420                 p_lookup_table  =>'OE_LOOKUPS',
1421                 p_lookup_type   =>'INVOICE_BASIS',
1422                 p_column_value  =>p_cust_account_rec.invoice_quantity_rule,
1423                 x_return_status =>x_return_status  );
1424 
1425             /*IF G_DEBUG THEN
1426                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1427                   'Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS. '||
1428                   'x_return_status = ' || x_return_status, l_debug_prefix);
1429             END IF;
1430             */
1431             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1432                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=> 'Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS. '||
1433                                                         'x_return_status = ' || x_return_status,
1434                                   p_msg_level=>fnd_log.level_statement);
1435             END IF;
1436 
1437         END IF;
1438             /*IF G_DEBUG THEN
1439                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1440                   '(+) after validate invoice_quantity_rule..' ||
1441                   'x_return_status = ' || x_return_status, l_debug_prefix );
1442             END IF;
1443             */
1444 
1445             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1446                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate invoice_quantity_rule..' ||
1447                                                         'x_return_status = ' || x_return_status,
1448                                   p_msg_level=>fnd_log.level_statement);
1449              END IF;
1450 
1451 
1452         ----------------------------------------------------------
1453         --validate price_list_id
1454         ----------------------------------------------------------
1455         --price_list_id should be a valid value defined in SO_PRICE_LISTS
1456 
1457         IF p_cust_account_rec.price_list_id is NOT NULL AND
1458            p_cust_account_rec.price_list_id <> FND_API.G_MISS_NUM
1459          AND ( p_create_update_flag = 'C' OR
1460          ( p_create_update_flag = 'U'  AND
1461            p_cust_account_rec.price_list_id <> NVL( l_price_list_id, FND_API.G_MISS_NUM) ) )
1462         THEN
1463             check_price_list_fk(
1464                  p_column                           => 'price_list_id',
1465                  p_column_value                     => p_cust_account_rec.price_list_id,
1466                  x_return_status                    => x_return_status );
1467             /*IF G_DEBUG THEN
1468                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1469                   'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
1470                   'x_return_status = ' || x_return_status, l_debug_prefix);
1471             END IF;
1472             */
1473             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1474                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
1475                                          'x_return_status = ' || x_return_status,
1476                                         p_msg_level=>fnd_log.level_statement);
1477             END IF;
1478 
1479         END IF;
1480             /*IF G_DEBUG THEN
1481                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1482                   '(+) after validate price_list_id..' ||
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=>'(+) after validate price_list_id..' ||
1488                                                 'x_return_status = ' || x_return_status,
1489                                         p_msg_level=>fnd_log.level_statement);
1490             END IF;
1491 
1492 
1493         ----------------------------------------------------------
1494         --validate fob_point
1495         ----------------------------------------------------------
1496         --fob_point is lookup_code in lookup type FOB
1497 
1498         IF p_cust_account_rec.fob_point is NOT NULL AND
1499            p_cust_account_rec.fob_point <> FND_API.G_MISS_CHAR
1500          AND ( p_create_update_flag = 'C' OR
1501          ( p_create_update_flag = 'U'  AND
1502            p_cust_account_rec.fob_point <> NVL( l_fob_point, FND_API.G_MISS_CHAR) ) )
1503         THEN
1504             validate_lookup(
1505                 p_column        =>'fob_point',
1506                 p_lookup_type   =>'FOB',
1507                 p_column_value  =>p_cust_account_rec.fob_point,
1508                 x_return_status =>x_return_status  );
1509 
1510             /*IF G_DEBUG THEN
1511                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1512                   'fob_point is lookup_code in lookup type FOB. '||
1513                   'x_return_status = ' || x_return_status, l_debug_prefix);
1514             END IF;
1515             */
1516             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1517                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fob_point is lookup_code in lookup type FOB. '||
1518                                                 'x_return_status = ' || x_return_status,
1519                                         p_msg_level=>fnd_log.level_statement);
1520             END IF;
1521 
1522 
1523         END IF;
1524             /*IF G_DEBUG THEN
1525                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1526                   '(+) after validate fob_point..' ||
1527                   'x_return_status = ' || x_return_status, l_debug_prefix );
1528             END IF;
1529             */
1530             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1531                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate fob_point..' ||
1532                                                 'x_return_status = ' || x_return_status,
1533                                   p_msg_level=>fnd_log.level_statement);
1534             END IF;
1535 
1536         ----------------------------------------------------------
1537         --validate item_cross_ref_pref
1538         ----------------------------------------------------------
1539         --item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should have value 'INT' or 'CUST'
1540 
1541         IF p_cust_account_rec.item_cross_ref_pref is NOT NULL AND
1542            p_cust_account_rec.item_cross_ref_pref <> FND_API.G_MISS_CHAR
1543          AND ( p_create_update_flag = 'C' OR
1544          ( p_create_update_flag = 'U'  AND
1545            p_cust_account_rec.item_cross_ref_pref <> NVL( l_item_cross_ref_pref, FND_API.G_MISS_CHAR) ) )
1546         THEN
1547             IF p_cust_account_rec.item_cross_ref_pref NOT IN('INT','CUST')
1548             THEN
1549                 check_item_cross_ref(
1550                      p_column                           => 'item_cross_ref_pref',
1551                      p_column_value                     => p_cust_account_rec.item_cross_ref_pref,
1552                      x_return_status                    => x_return_status );
1553 
1554                 /*IF G_DEBUG THEN
1555                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1556                       'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . '||
1557                       'x_return_status = ' || x_return_status, l_debug_prefix);
1558                 END IF;
1559                 */
1560                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1561                           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 . '||
1562                                                         'x_return_status = ' || x_return_status,
1563                                                  p_msg_level=>fnd_log.level_statement);
1564                 END IF;
1565 
1566            END IF;
1567        END IF;
1568                /*IF G_DEBUG THEN
1569                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1570                      '(+) after validate item_cross_ref_pref..' ||
1571                      'x_return_status = ' || x_return_status, l_debug_prefix );
1572                END IF;
1573                */
1574                IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1575                         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate item_cross_ref_pref..' ||
1576                                                         'x_return_status = ' || x_return_status,
1577                                                p_msg_level=>fnd_log.level_statement);
1578                 END IF;
1579 
1580 
1581         ----------------------------------------------------------
1582         --validate warehouse_id
1583         ----------------------------------------------------------
1584         --warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS
1585 
1586         IF p_cust_account_rec.warehouse_id is NOT NULL AND
1587            p_cust_account_rec.warehouse_id <> FND_API.G_MISS_NUM
1588          AND ( p_create_update_flag = 'C' OR
1589          ( p_create_update_flag = 'U'  AND
1590            p_cust_account_rec.warehouse_id <> NVL( l_warehouse_id, FND_API.G_MISS_NUM) ) )
1591         THEN
1592             check_warehouse(
1593                  p_column                           => 'warehouse_id',
1594                  p_column_value                     => p_cust_account_rec.warehouse_id,
1595                  x_return_status                    => x_return_status );
1596             /*IF G_DEBUG THEN
1597                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1598                   'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
1599                   'x_return_status = ' || x_return_status, l_debug_prefix);
1600             END IF;
1601             */
1602 
1603             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1604                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
1605                                                         'x_return_status = ' || x_return_status,
1606                                         p_msg_level=>fnd_log.level_statement);
1607             END IF;
1608 
1609         END IF;
1610             /*IF G_DEBUG THEN
1611                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1612                   '(+) after validate warehouse_id..' ||
1613                   'x_return_status = ' || x_return_status, l_debug_prefix );
1614             END IF;
1615             */
1616 
1617             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1618                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate warehouse_id..' ||
1619                                                 'x_return_status = ' || x_return_status,
1620                                         p_msg_level=>fnd_log.level_statement);
1621             END IF;
1622 
1623 
1624         ----------------------------------------------------------
1625         --validate date_type_preference
1626         ----------------------------------------------------------
1627         --date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups
1628 
1629         IF p_cust_account_rec.date_type_preference is NOT NULL AND
1630            p_cust_account_rec.date_type_preference <> FND_API.G_MISS_CHAR
1631          AND ( p_create_update_flag = 'C' OR
1632          ( p_create_update_flag = 'U'  AND
1633            p_cust_account_rec.date_type_preference <> NVL( l_date_type_preference, FND_API.G_MISS_CHAR) ) )
1634         THEN
1635             validate_lookup(
1636                  p_column               =>'date_type_preference',
1637                  p_lookup_table         =>'OE_LOOKUPS',
1638                  p_lookup_type          =>'REQUEST_DATE_TYPE',
1639                  p_column_value         =>p_cust_account_rec.date_type_preference,
1640                  x_return_status        =>x_return_status   );
1641             /*IF G_DEBUG THEN
1642                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1643                   'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
1644                   'x_return_status = ' || x_return_status, l_debug_prefix);
1645             END IF;
1646             */
1647             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1648                  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. '||
1649                                                    'x_return_status = ' || x_return_status,
1650                                   p_msg_level=>fnd_log.level_statement);
1651             END IF;
1652 
1653         END IF;
1654             /*IF G_DEBUG THEN
1655                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1656                   '(+) after validate date_type_preference..' ||
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=>'(+) after validate date_type_preference..' ||
1662                                                 'x_return_status = ' || x_return_status,
1663                                   p_msg_level=>fnd_log.level_statement);
1664             END IF;
1665 
1666 
1667     --------------------------------------
1668     -- validate primary_specialist_id
1669     --------------------------------------
1670 
1671     -- primary_specialist_id is foreign key to per_all_people_f
1672     IF p_cust_account_rec.primary_specialist_id IS NOT NULL AND
1673        p_cust_account_rec.primary_specialist_id <> FND_API.G_MISS_NUM
1674     THEN
1675         check_per_all_people_f_fk (
1676             p_column                                 => 'primary_specialist_id',
1677             p_column_value                           => p_cust_account_rec.primary_specialist_id,
1678             x_return_status                          => x_return_status );
1679 
1680         /*IF G_DEBUG THEN
1681             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1682                 'primary_specialist_id is foreign key to per_all_people_f. ' ||
1683                 'x_return_status = ' || x_return_status, l_debug_prefix );
1684         END IF;
1685         */
1686         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1687            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'primary_specialist_id is foreign key to per_all_people_f. ' ||
1688                                              'x_return_status = ' || x_return_status,
1689                                   p_msg_level=>fnd_log.level_statement);
1690         END IF;
1691 
1692 
1693     END IF;
1694 
1695     /*IF G_DEBUG THEN
1696         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1697             '(+) after validate primary_specialist_id ... ' ||
1698             'x_return_status = ' || x_return_status, l_debug_prefix );
1699     END IF;
1700     */
1701     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1702            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate primary_specialist_id ... ' ||
1703                                         'x_return_status = ' || x_return_status,
1704                                   p_msg_level=>fnd_log.level_statement);
1705     END IF;
1706 
1707 
1708     --------------------------------------
1709     -- validate secondary_specialist_id
1710     --------------------------------------
1711 
1712     -- secondary_specialist_id is foreign key to per_all_people_f
1713     IF p_cust_account_rec.secondary_specialist_id IS NOT NULL AND
1714        p_cust_account_rec.secondary_specialist_id <> FND_API.G_MISS_NUM
1715     THEN
1716         check_per_all_people_f_fk (
1717             p_column                                 => 'secondary_specialist_id',
1718             p_column_value                           => p_cust_account_rec.secondary_specialist_id,
1719             x_return_status                          => x_return_status );
1720 
1721         /*IF G_DEBUG THEN
1722             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1723                 'secondary_specialist_id is foreign key to per_all_people_f. ' ||
1724                 'x_return_status = ' || x_return_status, l_debug_prefix );
1725         END IF;
1726         */
1727         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1728            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'secondary_specialist_id is foreign key to per_all_people_f. ' ||
1729                                              'x_return_status = ' || x_return_status,
1730                                   p_msg_level=>fnd_log.level_statement);
1731         END IF;
1732 
1733     END IF;
1734 
1735     /*IF G_DEBUG THEN
1736         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1737             '(+) after validate secondary_specialist_id ... ' ||
1738             'x_return_status = ' || x_return_status, l_debug_prefix );
1739     END IF;
1740     */
1741     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1742            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate secondary_specialist_id ... ' ||
1743                                              'x_return_status = ' || x_return_status,
1744                                   p_msg_level=>fnd_log.level_statement);
1745     END IF;
1746 
1747   /* comment out the validation as the account_liable_flag column is obsoleted in r12
1748 
1749     --------------------------------------
1750     -- validate account_liable_flag
1751     --------------------------------------
1752   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1753     -- account_liable_flag is lookup code in lookup type YES/NO
1754     IF p_cust_account_rec.account_liable_flag IS NOT NULL AND
1755        p_cust_account_rec.account_liable_flag <> FND_API.G_MISS_CHAR
1756     THEN
1757         validate_lookup (
1758             p_column                                => 'account_liable_flag',
1759             p_lookup_type                           => 'YES/NO',
1760             p_column_value                          => p_cust_account_rec.account_liable_flag,
1761             x_return_status                         => x_return_status );
1762 
1763         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1764            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_liable_flag is lookup code in lookup type YES/NO. ' ||
1765                                                 'x_return_status = ' || x_return_status,
1766                                   p_msg_level=>fnd_log.level_statement);
1767         END IF;
1768 
1769     END IF;
1770 
1771     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1772            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate account_liable_flag ... ' ||
1773                                                 'x_return_status = ' || x_return_status,
1774                                   p_msg_level=>fnd_log.level_statement);
1775     END IF;
1776   END IF;
1777   */
1778 
1779     --------------------------------------
1780     -- validate hold_bill_flag
1781     --------------------------------------
1782 /****Logical APIs - validation not required****/
1783   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1784     -- hold_bill_flag is lookup code in lookup type YES/NO
1785     IF p_cust_account_rec.hold_bill_flag IS NOT NULL AND
1786        p_cust_account_rec.hold_bill_flag <> FND_API.G_MISS_CHAR
1787     THEN
1788         validate_lookup (
1789             p_column                                => 'hold_bill_flag',
1790             p_lookup_type                           => 'YES/NO',
1791             p_column_value                          => p_cust_account_rec.hold_bill_flag,
1792             x_return_status                         => x_return_status );
1793 
1794         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1795            hz_utility_v2pub.debug(p_message=>'hold_bill_flag is lookup code in lookup type YES/NO. ' ||
1796                                              'x_return_status = ' || x_return_status,
1797                                   p_prefix=>l_debug_prefix,
1798                                   p_msg_level=>fnd_log.level_statement);
1799         END IF;
1800 
1801     END IF;
1802 
1803     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1804            hz_utility_v2pub.debug(p_message=>'(+) after validate hold_bill_flag ... ' ||
1805                                         'x_return_status = ' || x_return_status,
1806                                   p_prefix=>l_debug_prefix,
1807                                   p_msg_level=>fnd_log.level_statement);
1808     END IF;
1809   END IF;
1810 
1811   /* comment out the validation as the dormant_account_flag column is obsoleted in r12
1812 
1813     --------------------------------------
1814     -- validate dormant_account_flag
1815     --------------------------------------
1816   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1817     -- dormant_account_flag is lookup code in lookup type YES/NO
1818     IF p_cust_account_rec.dormant_account_flag IS NOT NULL AND
1819        p_cust_account_rec.dormant_account_flag <> FND_API.G_MISS_CHAR
1820     THEN
1821         validate_lookup (
1822             p_column                                => 'dormant_account_flag',
1823             p_lookup_type                           => 'YES/NO',
1824             p_column_value                          => p_cust_account_rec.dormant_account_flag,
1825             x_return_status                         => x_return_status );
1826 
1827         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1828            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'dormant_account_flag is lookup code in lookup type YES/NO. ' ||
1829                                                  'x_return_status = ' || x_return_status,
1830                                   p_msg_level=>fnd_log.level_statement);
1831        END IF;
1832 
1833     END IF;
1834 
1835     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1836            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate dormant_account_flag ... ' ||
1837                                         'x_return_status = ' || x_return_status,
1838                                   p_msg_level=>fnd_log.level_statement);
1839     END IF;
1840   END IF;
1841   */
1842 
1843     --------------------------------------
1844     -- validate ship_sets_include_lines_flag
1845     --------------------------------------
1846 /****Logical APIs - validation not required****/
1847   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1848     -- ship_sets_include_lines_flag is lookup code in lookup type YES/NO
1849     IF p_cust_account_rec.ship_sets_include_lines_flag IS NOT NULL AND
1850        p_cust_account_rec.ship_sets_include_lines_flag <> FND_API.G_MISS_CHAR
1851          AND ( p_create_update_flag = 'C' OR
1852          ( p_create_update_flag = 'U'  AND
1853            p_cust_account_rec.ship_sets_include_lines_flag <> NVL( l_ship_sets_inc_lines_f, FND_API.G_MISS_CHAR) ) )
1854     THEN
1855         validate_lookup (
1856             p_column                                => 'ship_sets_include_lines_flag',
1857             p_lookup_type                           => 'YES/NO',
1858             p_column_value                          => p_cust_account_rec.ship_sets_include_lines_flag,
1859             x_return_status                         => x_return_status );
1860 
1861         /*IF G_DEBUG THEN
1862             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1863                 'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1864                 'x_return_status = ' || x_return_status, l_debug_prefix );
1865         END IF;
1866         */
1867         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1868            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1869                                                 'x_return_status = ' || x_return_status,
1870                                   p_msg_level=>fnd_log.level_statement);
1871         END IF;
1872 
1873     END IF;
1874   END IF;
1875 
1876 --if ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag
1877 --is always set to N.
1878 
1879 IF (p_create_update_flag = 'C' or
1880    (p_create_update_flag ='U' and
1881     p_cust_account_rec.ship_sets_include_lines_flag <> NVL(l_ship_sets_inc_lines_f,FND_API.G_MISS_CHAR)))
1882 THEN
1883    IF p_cust_account_rec.ship_sets_include_lines_flag = 'Y'
1884    THEN
1885      BEGIN
1886        SELECT decode(p_cust_account_rec.ship_sets_include_lines_flag,p_cust_account_rec.arrivalsets_include_lines_flag,
1887                      'N',l_arrivalsets_inc_lines_f,
1888                                          decode(p_cust_account_rec.arrivalsets_include_lines_flag,l_ship_sets_inc_lines_f,                                                'Y','N'),'Y')
1889        INTO l_dummy
1890        FROM DUAL;
1891        IF l_dummy <> 'Y'
1892        THEN
1893             FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
1894             FND_MESSAGE.SET_TOKEN('COLUMN1','ship_sets_include_lines_flag');
1895             FND_MESSAGE.SET_TOKEN('VALUE1','Y');
1896             FND_MESSAGE.SET_TOKEN('COLUMN2','arrivalsets_include_lines_flag');
1897             FND_MESSAGE.SET_TOKEN('VALUE2','N');
1898             FND_MSG_PUB.ADD;
1899             x_return_status := FND_API.G_RET_STS_ERROR;
1900        END IF;
1901      END ;
1902    END IF;
1903 END IF;
1904         /*IF G_DEBUG THEN
1905             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1906                 'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
1907                 'x_return_status = ' || x_return_status, l_debug_prefix);
1908         END IF;
1909         */
1910         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1911            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. '||
1912                                                 'x_return_status = ' || x_return_status,
1913                                   p_msg_level=>fnd_log.level_statement);
1914         END IF;
1915 
1916 
1917 
1918         /*IF G_DEBUG THEN
1919            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1920               '(+) after validate arrivalsets_include_lines_flag ... ' ||
1921               'x_return_status = ' || x_return_status, l_debug_prefix );
1922         END IF;
1923         */
1924         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1925            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
1926                                         'x_return_status = ' || x_return_status,
1927                                   p_msg_level=>fnd_log.level_statement);
1928         END IF;
1929 
1930 
1931     --------------------------------------
1932     -- validate arrivalsets_include_lines_flag
1933     --------------------------------------
1934 /****Logical APIs - validation not required****/
1935   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1936     -- arrivalsets_include_lines_flag is lookup code in lookup type YES/NO
1937     IF p_cust_account_rec.arrivalsets_include_lines_flag IS NOT NULL AND
1938        p_cust_account_rec.arrivalsets_include_lines_flag <> FND_API.G_MISS_CHAR
1939          AND ( p_create_update_flag = 'C' OR
1940          ( p_create_update_flag = 'U'  AND
1941            p_cust_account_rec.arrivalsets_include_lines_flag <> NVL( l_arrivalsets_inc_lines_f, FND_API.G_MISS_CHAR) ) )
1942     THEN
1943         validate_lookup (
1944             p_column                                => 'arrivalsets_include_lines_flag',
1945             p_lookup_type                           => 'YES/NO',
1946             p_column_value                          => p_cust_account_rec.arrivalsets_include_lines_flag,
1947             x_return_status                         => x_return_status );
1948 
1949         /*IF G_DEBUG THEN
1950             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1951                 'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1952                 'x_return_status = ' || x_return_status, l_debug_prefix );
1953         END IF;
1954         */
1955         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1956            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1957                                   'x_return_status = ' || x_return_status,
1958                                   p_msg_level=>fnd_log.level_statement);
1959         END IF;
1960 
1961     END IF;
1962   END IF;
1963 
1964 --If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag
1965 --is always set to N.
1966 
1967 IF (p_create_update_flag ='C' or
1968         (p_create_update_flag ='U' and
1969          p_cust_account_rec.arrivalsets_include_lines_flag <> NVL(l_arrivalsets_inc_lines_f,FND_API.G_MISS_CHAR)))
1970 THEN
1971         IF p_cust_account_rec.arrivalsets_include_lines_flag = 'Y'
1972         THEN
1973           BEGIN
1974             SELECT decode(p_cust_account_rec.arrivalsets_include_lines_flag,p_cust_account_rec.ship_sets_include_lines_flag,
1975                           'N',l_ship_sets_inc_lines_f,
1976                                         decode(p_cust_account_rec.ship_sets_include_lines_flag,l_arrivalsets_inc_lines_f,
1977                                                'Y','N'),'Y')
1978             INTO l_dummy
1979             FROM DUAL;
1980             IF l_dummy <> 'Y'
1981             THEN
1982                     FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
1983                     FND_MESSAGE.SET_TOKEN('COLUMN1','arrivalsets_include_lines_flag');
1984                     FND_MESSAGE.SET_TOKEN('VALUE1','Y');
1985                     FND_MESSAGE.SET_TOKEN('COLUMN2','ship_sets_include_lines_flag');
1986                     FND_MESSAGE.SET_TOKEN('VALUE2','N');
1987                     FND_MSG_PUB.ADD;
1988                x_return_status := FND_API.G_RET_STS_ERROR;
1989             END IF;
1990           END ;
1991         END IF;
1992 END IF;
1993         /*IF G_DEBUG THEN
1994            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1995               'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always set to N. ' ||
1996               'x_return_status = ' || x_return_status, l_debug_prefix );
1997         END IF;
1998         */
1999         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2000            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. ' ||
2001                                              'x_return_status = ' || x_return_status,
2002                                   p_msg_level=>fnd_log.level_statement);
2003         END IF;
2004 
2005 
2006         /*IF G_DEBUG THEN
2007              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2008                  '(+) after validate arrivalsets_include_lines_flag ... ' ||
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=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
2014                                          'x_return_status = ' || x_return_status,
2015                                   p_msg_level=>fnd_log.level_statement);
2016         END IF;
2017 
2018 
2019     --------------------------------------
2020     -- validate sched_date_push_flag
2021     --------------------------------------
2022 /****Logical APIs - validation not required****/
2023   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2024     -- sched_date_push_flag is lookup code in lookup type YES/NO
2025     IF p_cust_account_rec.sched_date_push_flag IS NOT NULL AND
2026        p_cust_account_rec.sched_date_push_flag <> FND_API.G_MISS_CHAR
2027     THEN
2028         validate_lookup (
2029             p_column                                => 'sched_date_push_flag',
2030             p_lookup_type                           => 'YES/NO',
2031             p_column_value                          => p_cust_account_rec.sched_date_push_flag,
2032             x_return_status                         => x_return_status );
2033 
2034         /*IF G_DEBUG THEN
2035             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2036                 'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
2037                 'x_return_status = ' || x_return_status, l_debug_prefix );
2038         END IF;
2039         */
2040         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2041            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
2042                                                 'x_return_status = ' || x_return_status,
2043                                   p_msg_level=>fnd_log.level_statement);
2044         END IF;
2045 
2046     END IF;
2047 
2048     /*IF G_DEBUG THEN
2049         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2050             '(+) after validate sched_date_push_flag ... ' ||
2051             'x_return_status = ' || x_return_status, l_debug_prefix );
2052     END IF;
2053     */
2054     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2055            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate sched_date_push_flag ... ' ||
2056                                         'x_return_status = ' || x_return_status,
2057                                   p_msg_level=>fnd_log.level_statement);
2058     END IF;
2059   END IF;
2060 
2061 
2062     /* comment out the validation as the account_activation_date column
2063        and account_termination_date column are obsoleted in r12
2064 
2065     ----------------------------------------------
2066     -- validate account_established_date and account_termination_date
2067     ----------------------------------------------
2068 
2069     -- account_termination_date should be greater than account_established_date
2070     validate_start_end_date (
2071         p_create_update_flag                    => p_create_update_flag,
2072         p_start_date_column_name                => 'account_established_date',
2073         p_start_date                            => p_cust_account_rec.account_established_date,
2074         p_old_start_date                        => l_account_established_date,
2075         p_end_date_column_name                  => 'account_termination_date',
2076         p_end_date                              => p_cust_account_rec.account_termination_date,
2077         p_old_end_date                          => l_account_termination_date,
2078         x_return_status                         => x_return_status );
2079 
2080     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2081            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_termination_date should be greater than account_established_date. ' ||
2082                                         'x_return_status = ' || x_return_status,
2083                                   p_msg_level=>fnd_log.level_statement);
2084     END IF;
2085 
2086     ----------------------------------------------
2087     -- validate account_established_date and account_activation_date
2088     ----------------------------------------------
2089 
2090     -- account_activation_date should be greater than account_established_date
2091     validate_start_end_date (
2092         p_create_update_flag                    => p_create_update_flag,
2093         p_start_date_column_name                => 'account_established_date',
2094         p_start_date                            => p_cust_account_rec.account_established_date,
2095         p_old_start_date                        => l_account_established_date,
2096         p_end_date_column_name                  => 'account_activation_date',
2097         p_end_date                              => p_cust_account_rec.account_activation_date,
2098         p_old_end_date                          => l_account_activation_date,
2099         x_return_status                         => x_return_status );
2100 
2101     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2102            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_activation_date should be greater than account_established_date. ' ||
2103                                         'x_return_status = ' || x_return_status,
2104                                   p_msg_level=>fnd_log.level_statement);
2105     END IF;
2106 
2107 
2108     ----------------------------------------------
2109     -- validate account_activation_date and account_termination_date
2110     ----------------------------------------------
2111 
2112     -- account_termination_date should be greater than account_activation_date
2113     validate_start_end_date (
2114         p_create_update_flag                    => p_create_update_flag,
2115         p_start_date_column_name                => 'account_activation_date',
2116         p_start_date                            => p_cust_account_rec.account_activation_date,
2117         p_old_start_date                        => l_account_activation_date,
2118         p_end_date_column_name                  => 'account_termination_date',
2119         p_end_date                              => p_cust_account_rec.account_termination_date,
2120         p_old_end_date                          => l_account_termination_date,
2121         x_return_status                         => x_return_status );
2122 
2123     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2124            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_termination_date should be greater than account_activation_date. ' ||
2125                                              'x_return_status = ' || x_return_status,
2126                                   p_msg_level=>fnd_log.level_statement);
2127     END IF;
2128     */
2129 
2130     --------------------------------------
2131     -- validate autopay_flag
2132     --------------------------------------
2133 /****Logical APIs - validation not required****/
2134   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2135     -- autopay_flag is lookup code in lookup type YES/NO
2136     IF p_cust_account_rec.autopay_flag IS NOT NULL AND
2137        p_cust_account_rec.autopay_flag <> FND_API.G_MISS_CHAR
2138     THEN
2139         validate_lookup (
2140             p_column                                => 'autopay_flag',
2141             p_lookup_type                           => 'YES/NO',
2142             p_column_value                          => p_cust_account_rec.autopay_flag,
2143             x_return_status                         => x_return_status );
2144 
2145         /*IF G_DEBUG THEN
2146             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2147                 'autopay_flag is lookup code in lookup type YES/NO. ' ||
2148                 'x_return_status = ' || x_return_status, l_debug_prefix );
2149         END IF;
2150         */
2151         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2152            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'autopay_flag is lookup code in lookup type YES/NO. ' ||
2153                                                 'x_return_status = ' || x_return_status,
2154                                   p_msg_level=>fnd_log.level_statement);
2155         END IF;
2156 
2157     END IF;
2158 
2159     /*IF G_DEBUG THEN
2160         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2161             '(+) after validate autopay_flag ... ' ||
2162             'x_return_status = ' || x_return_status, l_debug_prefix );
2163     END IF;
2164     */
2165     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2166            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate autopay_flag ... ' ||
2167                                                 'x_return_status = ' || x_return_status,
2168                                   p_msg_level=>fnd_log.level_statement);
2169     END IF;
2170   END IF;
2171 
2172   /* comment out the validation as the title column is obsoleted in r12
2173 
2174     --------------------------------------
2175     -- validate notify_flag
2176     --------------------------------------
2177   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2178     -- notify_flag is lookup code in lookup type YES/NO
2179     IF p_cust_account_rec.notify_flag IS NOT NULL AND
2180        p_cust_account_rec.notify_flag <> FND_API.G_MISS_CHAR
2181     THEN
2182         validate_lookup (
2183             p_column                                => 'notify_flag',
2184             p_lookup_type                           => 'YES/NO',
2185             p_column_value                          => p_cust_account_rec.notify_flag,
2186             x_return_status                         => x_return_status );
2187 
2188         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2189            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'notify_flag is lookup code in lookup type YES/NO. ' ||
2190                                         'x_return_status = ' || x_return_status,
2191                                   p_msg_level=>fnd_log.level_statement);
2192         END IF;
2193 
2194     END IF;
2195 
2196     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2197            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate notify_flag ... ' ||
2198                                         'x_return_status = ' || x_return_status,
2199                                   p_msg_level=>fnd_log.level_statement);
2200     END IF;
2201   END IF;
2202   */
2203 
2204     --------------------------------------
2205     -- validate ship_via
2206     --------------------------------------
2207 
2208     -- ship_via is foreign key to oe_ship_methods_v
2209     -- can be used only in single org case.
2210     IF p_cust_account_rec.ship_via IS NOT NULL AND
2211        p_cust_account_rec.ship_via <> FND_API.G_MISS_CHAR AND
2212        ( p_create_update_flag = 'C' OR
2213          ( p_create_update_flag = 'U'  AND
2214            p_cust_account_rec.ship_via <> NVL( l_ship_via, FND_API.G_MISS_CHAR ) ) )
2215     THEN
2216         check_oe_ship_methods_v_fk (
2217             p_entity                                 => 'ACCOUNT',
2218             p_column                                 => 'ship_via',
2219             p_column_value                           => p_cust_account_rec.ship_via,
2220             x_return_status                          => x_return_status );
2221 
2222         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2223            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. ' ||
2224                                              'x_return_status = ' || x_return_status,
2225                                   p_prefix=>l_debug_prefix,
2226                                   p_msg_level=>fnd_log.level_statement);
2227         END IF;
2228 
2229     END IF;
2230 
2231     /*IF G_DEBUG THEN
2232         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2233             '(+) after validate ship_via ... ' ||
2234             'x_return_status = ' || x_return_status, l_debug_prefix );
2235     END IF;
2236     */
2237     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2238            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate ship_via ... ' ||
2239                                              'x_return_status = ' || x_return_status,
2240                                   p_msg_level=>fnd_log.level_statement);
2241     END IF;
2242 
2243 
2244     --------------------------------------
2245     -- validate selling_party_id
2246     --------------------------------------
2247 
2248     -- selling_party_id is foreign key of hz_parties
2249     IF p_cust_account_rec.selling_party_id IS NOT NULL AND
2250        p_cust_account_rec.selling_party_id <> FND_API.G_MISS_NUM
2251     THEN
2252         check_party_fk (
2253             p_column                                 => 'selling_party_id',
2254             p_column_value                           => p_cust_account_rec.selling_party_id,
2255             x_return_status                          => x_return_status );
2256 
2257         /*IF G_DEBUG THEN
2258             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2259                 'selling_party_id is foreign key of hz_parties. ' ||
2260                 'x_return_status = ' || x_return_status, l_debug_prefix );
2261         END IF;
2262         */
2263         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2264            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'selling_party_id is foreign key of hz_parties. ' ||
2265                                               'x_return_status = ' || x_return_status,
2266                                   p_msg_level=>fnd_log.level_statement);
2267         END IF;
2268 
2269     END IF;
2270 
2271     /*IF G_DEBUG THEN
2272         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2273             '(+) after validate selling_party_id ... ' ||
2274             'x_return_status = ' || x_return_status, l_debug_prefix );
2275     END IF;
2276     */
2277     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2278            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate selling_party_id ... ' ||
2279                                              'x_return_status = ' || x_return_status,
2280                                   p_msg_level=>fnd_log.level_statement);
2281     END IF;
2282 
2283 
2284     --------------------------------------
2285     -- validate created_by_module
2286     --------------------------------------
2287 
2288     validate_created_by_module(
2289       p_create_update_flag     => p_create_update_flag,
2290       p_created_by_module      => p_cust_account_rec.created_by_module,
2291       p_old_created_by_module  => l_created_by_module,
2292       x_return_status          => x_return_status);
2293 
2294     --------------------------------------
2295     -- validate application_id
2296     --------------------------------------
2297 
2298     validate_application_id(
2299       p_create_update_flag     => p_create_update_flag,
2300       p_application_id         => p_cust_account_rec.application_id,
2301       p_old_application_id     => l_application_id,
2302       x_return_status          => x_return_status);
2303 
2304     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2305         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_cust_account (-)',
2306                                p_msg_level=>fnd_log.level_procedure);
2307     END IF;
2308 
2309 END validate_cust_account;
2310 
2311 /**
2312  * PROCEDURE validate_cust_acct_relate
2313  *
2314  * DESCRIPTION
2315  *     Validates customer account relate record. Checks for
2316  *         uniqueness
2317  *         lookup types
2318  *         mandatory columns
2319  *         non-updateable fields
2320  *         foreign key validations
2321  *         other validations
2322  *
2323  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2324  *
2325  * ARGUMENTS
2326  *   IN:
2327  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
2328  *     p_cust_account_rec             Customer account relate record.
2329  *     p_rowid                        Rowid of the record (used only in update mode).
2330  *   IN/OUT:
2331  *     x_return_status                Return status after the call. The status can
2332  *                                    be FND_API.G_RET_STS_SUCCESS (success),
2333  *                                    FND_API.G_RET_STS_ERROR (error),
2334  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2335  *
2336  * NOTES
2337  *
2338  * MODIFICATION HISTORY
2339  *
2340  *   07-23-2001    Jianying Huang      o Created.
2341  *   10-04-2003    Rajib Ranjan Borah  o Bug 2985448.Only active relationships will be considered
2342  *                                       while checking for duplicates.
2343  *   12-MAY-2005   Rajib Ranjan Borah  o TCA SSA Uptake (Bug 3456489)
2344  *   12-AUG-2205   Idris Ali           o Bug 4529413:Replaced p_rowid with p_cust_acct_relate_id.
2345  */
2346 
2347 PROCEDURE validate_cust_acct_relate (
2348     p_create_update_flag                    IN     VARCHAR2,
2349     p_cust_acct_relate_rec                  IN     HZ_CUST_ACCOUNT_V2PUB.CUST_ACCT_RELATE_REC_TYPE,
2350     p_cust_acct_relate_id                   IN     NUMBER,      -- Bug 4529413
2351     x_return_status                         IN OUT NOCOPY VARCHAR2
2352 ) IS
2353 
2354     l_debug_prefix                          VARCHAR2(30) := '';
2355     l_dummy                                 VARCHAR2(1);
2356     l_customer_reciprocal_flag              HZ_CUST_ACCT_RELATE.customer_reciprocal_flag%TYPE;
2357     l_created_by_module                     HZ_CUST_ACCT_RELATE.created_by_module%TYPE;
2358     l_application_id                        NUMBER;
2359     l_relationship_type                     HZ_CUST_ACCT_RELATE.relationship_type%TYPE;
2360     l_status                                HZ_CUST_ACCT_RELATE.status%TYPE;
2361 
2362 BEGIN
2363 
2364     -- Check if API is called in debug mode. If yes, enable debug.
2365     --enable_debug;
2366 
2367     -- Debug info.
2368 
2369     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2370         hz_utility_v2pub.debug(p_message=>'validate_cust_acct_relate (+)',
2371                                p_prefix=>l_debug_prefix,
2372                                p_msg_level=>fnd_log.level_procedure);
2373     END IF;
2374 
2375 
2376     -- Select fields for later use during update.
2377     IF p_create_update_flag = 'U' THEN
2378         SELECT CUSTOMER_RECIPROCAL_FLAG, CREATED_BY_MODULE, APPLICATION_ID,
2379                RELATIONSHIP_TYPE, STATUS
2380         INTO l_customer_reciprocal_flag, l_created_by_module, l_application_id,
2381              l_relationship_type, l_status
2382         FROM HZ_CUST_ACCT_RELATE_ALL  -- Bug 3456489
2383         WHERE CUST_ACCT_RELATE_ID = p_cust_acct_relate_id;
2384     END IF;
2385 
2386     --------------------------------------
2387     -- validate cust_account_id
2388     --------------------------------------
2389 /****Logical APIs - validation not required****/
2390   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2391     -- cust_account_id is mandatory field
2392    IF  (p_create_update_flag <> 'U') OR
2393        (p_cust_acct_relate_rec.cust_acct_relate_id is NULL)  -- Bug 4529413
2394    THEN
2395     validate_mandatory (
2396         p_create_update_flag                    => p_create_update_flag,
2397         p_column                                => 'cust_account_id',
2398         p_column_value                          => p_cust_acct_relate_rec.cust_account_id,
2399         p_restricted                            => 'Y',
2400         x_return_status                         => x_return_status );
2401 
2402     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2403            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'cust_account_id is mandatory. ' ||
2404                                              'x_return_status = ' || x_return_status,
2405                                   p_msg_level=>fnd_log.level_statement);
2406     END IF;
2407    END IF;
2408 
2409     -- since cust account id is part of primary key, we do not need to
2410     -- check non-updateable.
2411 
2412     -- cust_account_id is foreign key of hz_cust_accounts
2413     IF p_create_update_flag = 'C' AND
2414        p_cust_acct_relate_rec.cust_account_id IS NOT NULL AND
2415        p_cust_acct_relate_rec.cust_account_id <> FND_API.G_MISS_NUM
2416     THEN
2417         check_cust_account_fk (
2418             p_column                                 => 'cust_account_id',
2419             p_column_value                           => p_cust_acct_relate_rec.cust_account_id,
2420             x_return_status                          => x_return_status );
2421 
2422         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2423            hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key of hz_cust_accounts. ' ||
2424                                              'x_return_status = ' || x_return_status,
2425                                   p_prefix=>l_debug_prefix,
2426                                   p_msg_level=>fnd_log.level_statement);
2427         END IF;
2428     END IF;
2429 
2430     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2431            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate cust_account_id ... ' ||
2432                                              'x_return_status = ' || x_return_status,
2433                                   p_msg_level=>fnd_log.level_statement);
2434     END IF;
2435   END IF;
2436 
2437     --------------------------------------
2438     -- validate related_cust_account_id
2439     --------------------------------------
2440 /****Logical APIs - validation not required****/
2441   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2442     -- related_cust_account_id is mandatory field
2443    IF  (p_create_update_flag <> 'U') OR
2444        (p_cust_acct_relate_rec.cust_acct_relate_id is NULL)     -- Bug 4529413
2445    THEN
2446     validate_mandatory (
2447         p_create_update_flag                    => p_create_update_flag,
2448         p_column                                => 'related_cust_account_id',
2449         p_column_value                          => p_cust_acct_relate_rec.related_cust_account_id,
2450         p_restricted                            => 'Y',
2451         x_return_status                         => x_return_status );
2452 
2453     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2454            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'related_cust_account_id is mandatory. ' ||
2455                                              'x_return_status = ' || x_return_status,
2456                                   p_msg_level=>fnd_log.level_statement);
2457     END IF;
2458    END IF;
2459 
2460     -- since related_cust account id is part of primary key, we do not need to
2461     -- check non-updateable.
2462 
2463     -- related_cust_account_id is foreign key of hz_cust_accounts
2464     IF p_create_update_flag = 'C' AND
2465        p_cust_acct_relate_rec.related_cust_account_id IS NOT NULL AND
2466        p_cust_acct_relate_rec.related_cust_account_id <> FND_API.G_MISS_NUM
2467     THEN
2468         check_cust_account_fk (
2469             p_column                                 => 'related_cust_account_id',
2470             p_column_value                           => p_cust_acct_relate_rec.related_cust_account_id,
2471             x_return_status                          => x_return_status );
2472 
2473         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2474            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'related_cust_account_id is foreign key of hz_cust_accounts. ' ||
2475                                                 'x_return_status = ' || x_return_status,
2476                                   p_msg_level=>fnd_log.level_statement);
2477         END IF;
2478 
2479     END IF;
2480   END IF;
2481 
2482     -- combination of cust_account_id and related_cust_account_id should be unique.
2483     -- we do not need to check this in update mode because there two columns
2484     -- are primary key.
2485     IF p_create_update_flag = 'C' THEN
2486     BEGIN
2487         SELECT 'Y' INTO l_dummy
2488         FROM HZ_CUST_ACCT_RELATE_ALL    -- Bug 3456489
2489         WHERE CUST_ACCOUNT_ID = p_cust_acct_relate_rec.cust_account_id
2490         AND RELATED_CUST_ACCOUNT_ID = p_cust_acct_relate_rec.related_cust_account_id
2491         --Bug 2985448
2492         AND STATUS='A'
2493         AND ORG_ID = p_cust_acct_relate_rec.org_id; -- Bug 3456489
2494 
2495         FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_REL_ALREADY_EXISTS' );
2496         FND_MSG_PUB.ADD;
2497         x_return_status := FND_API.G_RET_STS_ERROR;
2498 
2499     EXCEPTION
2500         WHEN NO_DATA_FOUND THEN
2501             NULL;
2502     END;
2503 
2504     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2505        hz_utility_v2pub.debug(p_message=>'combination of cust_account_id and related_cust_account_id should be unique. ' ||
2506                                         'x_return_status = ' || x_return_status,
2507                                   p_prefix =>l_debug_prefix,
2508                                   p_msg_level=>fnd_log.level_statement);
2509     END IF;
2510     END IF;
2511 
2512     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2513            hz_utility_v2pub.debug(p_message=>'(+) after validate related_cust_account_id ... ' ||
2514                                         'x_return_status = ' || x_return_status,
2515                                   p_prefix =>l_debug_prefix,
2516                                   p_msg_level=>fnd_log.level_statement);
2517     END IF;
2518 
2519     --------------------------------------
2520     -- validate customer_reciprocal_flag
2521     --------------------------------------
2522 
2523 /****Logical APIs - validation not required****/
2524   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2525     -- donot need to check customer_reciprocal_flag mandatory
2526     -- because customer_reciprocal_flag is non-updateable and it is defaulted
2527     -- to 'N' during insert
2528 
2529     -- customer_reciprocal_flag is non-updateable
2530     IF p_create_update_flag = 'U' AND
2531        p_cust_acct_relate_rec.customer_reciprocal_flag IS NOT NULL
2532     THEN
2533         validate_nonupdateable (
2534             p_column                                => 'customer_reciprocal_flag',
2535             p_column_value                          => p_cust_acct_relate_rec.customer_reciprocal_flag,
2536             p_old_column_value                      => l_customer_reciprocal_flag,
2537             x_return_status                         => x_return_status );
2538 
2539         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2540            hz_utility_v2pub.debug(p_message=>'customer_reciprocal_flag is non-updateable. ' ||
2541                                  'x_return_status = ' || x_return_status,
2542                                   p_prefix =>l_debug_prefix,
2543                                   p_msg_level=>fnd_log.level_statement);
2544         END IF;
2545 
2546     END IF;
2547 
2548     -- customer_reciprocal_flag is lookup code in lookup type YES/NO
2549     -- Since customer_reciprocal_flag is non-updateable, we only need to do
2550     -- checking during create.
2551 
2552     IF p_create_update_flag = 'C' AND
2553        p_cust_acct_relate_rec.customer_reciprocal_flag IS NOT NULL AND
2554        p_cust_acct_relate_rec.customer_reciprocal_flag <> FND_API.G_MISS_CHAR
2555     THEN
2556         validate_lookup (
2557             p_column                                => 'customer_reciprocal_flag',
2558             p_lookup_type                           => 'YES/NO',
2559             p_column_value                          => p_cust_acct_relate_rec.customer_reciprocal_flag,
2560             x_return_status                         => x_return_status );
2561 
2562 
2563         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2564            hz_utility_v2pub.debug(p_message=>'customer_reciprocal_flag is lookup code in lookup type YES/NO. ' ||
2565                                          'x_return_status = ' || x_return_status,
2566                                   p_prefix =>l_debug_prefix,
2567                                   p_msg_level=>fnd_log.level_statement);
2568         END IF;
2569     END IF;
2570 
2571 
2572     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2573            hz_utility_v2pub.debug(p_message=>'(+) after validate customer_reciprocal_flag ... ' ||
2574                                 'x_return_status = ' || x_return_status,
2575                                   p_prefix =>l_debug_prefix,
2576                                   p_msg_level=>fnd_log.level_statement);
2577     END IF;
2578   END IF;
2579     --------------------------------------
2580     -- validate relationship_type
2581     --------------------------------------
2582 
2583     -- relationship_type is lookup code in lookup type RELATIONSHIP_TYPE
2584     IF p_cust_acct_relate_rec.relationship_type IS NOT NULL AND
2585        p_cust_acct_relate_rec.relationship_type <> FND_API.G_MISS_CHAR AND
2586         ( p_create_update_flag = 'C' OR
2587           ( p_create_update_flag = 'U'  AND
2588             p_cust_acct_relate_rec.relationship_type <> NVL( l_relationship_type, FND_API.G_MISS_CHAR ) ) )
2589     THEN
2590         validate_lookup (
2591             p_column                                => 'relationship_type',
2592             p_lookup_type                           => 'RELATIONSHIP_TYPE',
2593             p_column_value                          => p_cust_acct_relate_rec.relationship_type,
2594             x_return_status                         => x_return_status );
2595 
2596 
2597         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2598            hz_utility_v2pub.debug(p_message=>'relationship_type is lookup code in lookup type RELATIONSHIP_TYPE. ' ||
2599                                              'x_return_status = ' || x_return_status,
2600                                   p_prefix =>l_debug_prefix,
2601                                   p_msg_level=>fnd_log.level_statement);
2602         END IF;
2603     END IF;
2604 
2605 
2606     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2607            hz_utility_v2pub.debug(p_message=>'(+) after validate relationship_type ... ' ||
2608                                 'x_return_status = ' || x_return_status,
2609                                   p_prefix =>l_debug_prefix,
2610                                   p_msg_level=>fnd_log.level_statement);
2611     END IF;
2612     --------------------------------------
2613     -- validate status
2614     --------------------------------------
2615 
2616     -- status cannot be set to null during update
2617     IF p_create_update_flag = 'U' AND
2618        p_cust_acct_relate_rec.status IS NOT NULL
2619     THEN
2620         validate_cannot_update_to_null (
2621             p_column                                => 'status',
2622             p_column_value                          => p_cust_acct_relate_rec.status,
2623             x_return_status                         => x_return_status );
2624 
2625         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2626            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
2627                                              'x_return_status = ' || x_return_status,
2628                                   p_prefix =>l_debug_prefix,
2629                                   p_msg_level=>fnd_log.level_statement);
2630         END IF;
2631     END IF;
2632 
2633 /****Logical APIs - validation not required****/
2634   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2635     -- status is lookup code in lookup type CODE_STATUS
2636     IF p_cust_acct_relate_rec.status IS NOT NULL AND
2637        p_cust_acct_relate_rec.status <> FND_API.G_MISS_CHAR AND
2638         ( p_create_update_flag = 'C' OR
2639           ( p_create_update_flag = 'U'  AND
2640             p_cust_acct_relate_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
2641     THEN
2642         validate_lookup (
2643             p_column                                => 'status',
2644             p_lookup_type                           => 'CODE_STATUS',
2645             p_column_value                          => p_cust_acct_relate_rec.status,
2646             x_return_status                         => x_return_status );
2647 
2648 
2649         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2650            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
2651                                                  'x_return_status = ' || x_return_status,
2652                                   p_prefix =>l_debug_prefix,
2653                                   p_msg_level=>fnd_log.level_statement);
2654         END IF;
2655     END IF;
2656   END IF;
2657 
2658     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2659            hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
2660                                                 'x_return_status = ' || x_return_status,
2661                                   p_prefix =>l_debug_prefix,
2662                                   p_msg_level=>fnd_log.level_statement);
2663     END IF;
2664     --------------------------------------
2665     -- validate created_by_module
2666     --------------------------------------
2667 
2668     validate_created_by_module(
2669       p_create_update_flag     => p_create_update_flag,
2670       p_created_by_module      => p_cust_acct_relate_rec.created_by_module,
2671       p_old_created_by_module  => l_created_by_module,
2672       x_return_status          => x_return_status);
2673 
2674     --------------------------------------
2675     -- validate application_id
2676     --------------------------------------
2677 
2678     validate_application_id(
2679       p_create_update_flag     => p_create_update_flag,
2680       p_application_id         => p_cust_acct_relate_rec.application_id,
2681       p_old_application_id     => l_application_id,
2682       x_return_status          => x_return_status);
2683 
2684     -- Debug info.
2685 
2686     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2687         hz_utility_v2pub.debug(p_message=>' validate_cust_acct_relate (-)',
2688                                p_prefix=>l_debug_prefix,
2689                                p_msg_level=>fnd_log.level_procedure);
2690     END IF;
2691 
2692 END validate_cust_acct_relate;
2693 
2694 /**
2695  * PROCEDURE validate_customer_profile
2696  *
2697  * DESCRIPTION
2698  *     Validates customer profile record. Checks for
2699  *         uniqueness
2700  *         lookup types
2701  *         mandatory columns
2702  *         non-updateable fields
2703  *         foreign key validations
2704  *         other validations
2705  *
2706  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2707  *
2708  * ARGUMENTS
2709  *   IN:
2710  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
2711  *     p_customer_profile_rec         Customer profile record.
2712  *     p_rowid                        Rowid of the record (used only in update mode).
2713  *   IN/OUT:
2714  *     x_return_status                Return status after the call. The status can
2715  *                                    be FND_API.G_RET_STS_SUCCESS (success),
2716  *                                    FND_API.G_RET_STS_ERROR (error),
2717  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2718  *
2719  * NOTES
2720  *
2721  * MODIFICATION HISTORY
2722  *
2723  *   07-23-2001    Jianying Huang      o Created.
2724  *   11-08-2001    P.Suresh            * Bug No : 1999532. Added validations as present in
2725  *                                       customer standard form and interface.
2726  *   12-05-2001    P.Suresh            * Bug No : 2125994. Commented the mandatory check
2727  *                                       on charge_on_finance_charge_flag when interest
2728  *                                       charge is 'Y'.
2729  *   16-09-2002    P.Suresh            * Bug No : 2441092. Added a condition that the
2730  *                                       discount_terms should be 'Y' when defaulting the
2731  *                                       discount_grace_days from the hz_cust_profile_classes.
2732  *   05-30-2003   Ramesh Ch            * Bug No : 2884220. Added a condition that the
2733  *                                       interest_charges should be 'Y' when initializing
2734  *                                       the interest_period_days from the hz_cust_profile_classes.
2735  *  06-23-2003  Ramesh Ch                Bug No : 2884220. Added a condition that the dunning_letters,send_statements
2736  *                                       should be 'Y' when initializing the dunning_letter_set_id,statement_cycle_id resp
2737  *                                       from the hz_cust_profile_classes.
2738  *
2739  */
2740 
2741 PROCEDURE validate_customer_profile (
2742     p_create_update_flag                    IN     VARCHAR2,
2743     p_customer_profile_rec                  IN     HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
2744     p_rowid                                 IN     ROWID,
2745     x_return_status                         IN OUT NOCOPY VARCHAR2
2746 ) IS
2747 
2748     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_customer_profile'
2749 
2750     l_dummy                                 VARCHAR2(1);
2751 
2752     l_cust_account_id                       NUMBER;
2753     l_collector_id                          NUMBER;
2754     l_profile_class_id                      NUMBER;
2755     l_site_use_id                           NUMBER;
2756     l_cust_acct_site_id                     NUMBER;
2757     l_class_status                          HZ_CUST_PROFILE_CLASSES.status%TYPE;
2758     l_profile_class_name                    HZ_CUST_PROFILE_CLASSES.name%TYPE;
2759     l_created_by_module                     HZ_CUSTOMER_PROFILES.created_by_module%TYPE;
2760     l_application_id                        NUMBER;
2761     l_credit_rating                         HZ_CUSTOMER_PROFILES.credit_rating%TYPE;
2762     l_risk_code                             HZ_CUSTOMER_PROFILES.risk_code%TYPE;
2763     l_status                                HZ_CUSTOMER_PROFILES.status%TYPE;
2764     l_profile_class_rec                     HZ_CUST_PROFILE_CLASSES%ROWTYPE;
2765     v_customer_profile_rec                  HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE
2766                                                                      := p_customer_profile_rec;
2767     l_discount_terms                        HZ_CUSTOMER_PROFILES.discount_terms%TYPE;
2768     l_discount_grace_days                   HZ_CUSTOMER_PROFILES.discount_grace_days%TYPE;
2769     l_dunning_letters                       HZ_CUSTOMER_PROFILES.dunning_letters%TYPE;
2770     l_dunning_letter_set_id                 HZ_CUSTOMER_PROFILES.dunning_letter_set_id%TYPE;
2771     l_send_statements                       HZ_CUSTOMER_PROFILES.send_statements%TYPE;
2772     l_statement_cycle_id                    HZ_CUSTOMER_PROFILES.statement_cycle_id%TYPE;
2773     l_credit_balance_statements             HZ_CUSTOMER_PROFILES.credit_balance_statements%TYPE;
2774     l_interest_charges                      HZ_CUSTOMER_PROFILES.interest_charges%TYPE;
2775     l_finance_charge_flag                   HZ_CUSTOMER_PROFILES.charge_on_finance_charge_flag%TYPE;
2776     l_interest_period_days                  HZ_CUSTOMER_PROFILES.interest_period_days%TYPE;
2777 
2778     l_account_status                        HZ_CUSTOMER_PROFILES.ACCOUNT_STATUS%TYPE;
2779     l_tolerance                             HZ_CUSTOMER_PROFILES.TOLERANCE%TYPE;
2780     l_percent_collectable                   HZ_CUSTOMER_PROFILES.PERCENT_COLLECTABLE%TYPE;
2781     l_standard_terms                        HZ_CUSTOMER_PROFILES.STANDARD_TERMS%TYPE;
2782     l_override_terms                        HZ_CUSTOMER_PROFILES.OVERRIDE_TERMS%TYPE;
2783     l_lockbox_matching_option               HZ_CUSTOMER_PROFILES.LOCKBOX_MATCHING_OPTION%TYPE;
2784     l_autocash_hierarchy_id                 HZ_CUSTOMER_PROFILES.AUTOCASH_HIERARCHY_ID%TYPE;
2785     l_autocash_hierarchy_id_for_ad          HZ_CUSTOMER_PROFILES.AUTOCASH_HIERARCHY_ID_FOR_ADR%TYPE;
2786     l_clearing_days                         HZ_CUSTOMER_PROFILES.CLEARING_DAYS%TYPE;
2787     l_payment_grace_days                    HZ_CUSTOMER_PROFILES.PAYMENT_GRACE_DAYS%TYPE;
2788     l_grouping_rule_id                      HZ_CUSTOMER_PROFILES.GROUPING_RULE_ID%TYPE;
2789     l_tax_printing_option                   HZ_CUSTOMER_PROFILES.TAX_PRINTING_OPTION%TYPE;
2790     l_review_cycle                          HZ_CUSTOMER_PROFILES.REVIEW_CYCLE%TYPE;
2791     l_last_credit_review_date               HZ_CUSTOMER_PROFILES.LAST_CREDIT_REVIEW_DATE%TYPE;
2792     l_next_credit_review_date               HZ_CUSTOMER_PROFILES.NEXT_CREDIT_REVIEW_DATE%TYPE;
2793     l_party_id                              HZ_CUSTOMER_PROFILES.PARTY_ID%TYPE;
2794     l_credit_classification                 HZ_CUSTOMER_PROFILES.CREDIT_CLASSIFICATION%TYPE;
2795 
2796     l_cust_acct_site_use_code               HZ_CUST_SITE_USES.SITE_USE_CODE%TYPE;
2797     l_return_status                         VARCHAR2(1);
2798     l_org_id                                HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
2799 
2800     l_ckeck_acc_bfb_enabled                 VARCHAR2(1);
2801     ll_cons_inv_flag                        VARCHAR2(1);
2802 
2803     -- Added following variables for late charge policy project.
2804     l_late_charge_calculation_trx           HZ_CUSTOMER_PROFILES.LATE_CHARGE_CALCULATION_TRX%TYPE;
2805     l_credit_items_flag         	    HZ_CUSTOMER_PROFILES.CREDIT_ITEMS_FLAG%TYPE;
2806     l_disputed_transactions_flag            HZ_CUSTOMER_PROFILES.DISPUTED_TRANSACTIONS_FLAG%TYPE;
2807     l_late_charge_type	                    HZ_CUSTOMER_PROFILES.LATE_CHARGE_TYPE%TYPE;
2808     l_late_charge_term_id           	    HZ_CUSTOMER_PROFILES.LATE_CHARGE_TERM_ID%TYPE;
2809     l_interest_calculation_period    	    HZ_CUSTOMER_PROFILES.INTEREST_CALCULATION_PERIOD%TYPE;
2810     l_hold_charged_invoices_flag     	    HZ_CUSTOMER_PROFILES.HOLD_CHARGED_INVOICES_FLAG%TYPE;
2811     l_message_Text_id                       HZ_CUSTOMER_PROFILES.MESSAGE_TEXT_ID%TYPE;
2812     l_multiple_Interest_Rates_flag   	    HZ_CUSTOMER_PROFILES.MULTIPLE_INTEREST_RATES_FLAG%TYPE;
2813     l_charge_begin_date	                    HZ_CUSTOMER_PROFILES.CHARGE_BEGIN_DATE%TYPE;
2814 
2815 BEGIN
2816 
2817     -- Check if API is called in debug mode. If yes, enable debug.
2818     --enable_debug;
2819 
2820     -- Debug info.
2821 
2822     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2823         hz_utility_v2pub.debug(p_message=> 'validate_customer_profile (+)',
2824                                p_prefix=>l_debug_prefix,
2825                                p_msg_level=>fnd_log.level_procedure);
2826     END IF;
2827     -- Select fields for later use during update.
2828     IF p_create_update_flag = 'U'
2829     THEN
2830 
2831         SELECT CUST_ACCOUNT_ID, SITE_USE_ID, CREATED_BY_MODULE, APPLICATION_ID,
2832                CREDIT_RATING, RISK_CODE, STATUS,DISCOUNT_TERMS,
2833                DISCOUNT_GRACE_DAYS,DUNNING_LETTERS,DUNNING_LETTER_SET_ID,
2834                SEND_STATEMENTS,STATEMENT_CYCLE_ID,CREDIT_BALANCE_STATEMENTS,
2835                INTEREST_CHARGES,CHARGE_ON_FINANCE_CHARGE_FLAG,
2836                INTEREST_PERIOD_DAYS,ACCOUNT_STATUS,TOLERANCE,PERCENT_COLLECTABLE,
2837                STANDARD_TERMS,OVERRIDE_TERMS,LOCKBOX_MATCHING_OPTION,
2838                AUTOCASH_HIERARCHY_ID,AUTOCASH_HIERARCHY_ID_FOR_ADR,
2839                CLEARING_DAYS,PAYMENT_GRACE_DAYS,GROUPING_RULE_ID,
2840                TAX_PRINTING_OPTION,
2841                REVIEW_CYCLE,LAST_CREDIT_REVIEW_DATE,NEXT_CREDIT_REVIEW_DATE,PARTY_ID,
2842                CREDIT_CLASSIFICATION, LATE_CHARGE_CALCULATION_TRX, CREDIT_ITEMS_FLAG,
2843                DISPUTED_TRANSACTIONS_FLAG, LATE_CHARGE_TYPE, LATE_CHARGE_TERM_ID,
2844                INTEREST_CALCULATION_PERIOD, HOLD_CHARGED_INVOICES_FLAG, MESSAGE_TEXT_ID,
2845                MULTIPLE_INTEREST_RATES_FLAG, CHARGE_BEGIN_DATE
2846         INTO l_cust_account_id, l_site_use_id, l_created_by_module, l_application_id,
2847              l_credit_rating, l_risk_code, l_status,l_discount_terms,
2848              l_discount_grace_days,l_dunning_letters,l_dunning_letter_set_id,
2849              l_send_statements,l_statement_cycle_id,l_credit_balance_statements,
2850              l_interest_charges,l_finance_charge_flag,
2851              l_interest_period_days,l_account_status,l_tolerance,l_percent_collectable,
2852              l_standard_terms,l_override_terms,l_lockbox_matching_option,
2853              l_autocash_hierarchy_id,l_autocash_hierarchy_id_for_ad,
2854              l_clearing_days,l_payment_grace_days,l_grouping_rule_id,
2855              l_tax_printing_option,
2856              l_review_cycle,l_last_credit_review_date,l_next_credit_review_date,l_party_id,
2857              l_credit_classification, l_late_charge_calculation_trx, l_credit_items_flag,
2858              l_disputed_transactions_flag, l_late_charge_type, l_late_charge_term_id,
2859              l_interest_calculation_period, l_hold_charged_invoices_flag, l_message_text_id,
2860              l_multiple_interest_rates_flag, l_charge_begin_date
2861         FROM HZ_CUSTOMER_PROFILES
2862         WHERE ROWID = p_rowid;
2863     END IF;
2864 
2865     --------------------------------------
2866     -- validate cust_account_profile_id
2867     --------------------------------------
2868 /****Logical APIs - validation not required****/
2869   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2870     IF p_create_update_flag = 'C' THEN
2871 
2872         -- If primary key value is passed, check for uniqueness.
2873         -- If primary key value is not passed, it will be generated
2874         -- from sequence by table handler.
2875 
2876         IF p_customer_profile_rec.cust_account_profile_id IS NOT NULL AND
2877            p_customer_profile_rec.cust_account_profile_id <> FND_API.G_MISS_NUM
2878         THEN
2879         BEGIN
2880             SELECT 'Y' INTO l_dummy
2881             FROM   HZ_CUSTOMER_PROFILES
2882             WHERE  CUST_ACCOUNT_PROFILE_ID = p_customer_profile_rec.cust_account_profile_id;
2883 
2884             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
2885             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id' );
2886             FND_MSG_PUB.ADD;
2887             x_return_status := FND_API.G_RET_STS_ERROR;
2888         EXCEPTION
2889             WHEN NO_DATA_FOUND THEN
2890                 NULL;
2891         END;
2892 
2893         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2894            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is unique during creation if passed in. ' ||
2895                                                 'x_return_status = ' || x_return_status,
2896                                   p_prefix =>l_debug_prefix,
2897                                   p_msg_level=>fnd_log.level_statement);
2898         END IF;
2899 
2900         END IF;
2901     END IF;
2902 
2903     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2904            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_profile_id ... ' ||
2905                                              'x_return_status = ' || x_return_status,
2906                                   p_prefix =>l_debug_prefix,
2907                                   p_msg_level=>fnd_log.level_statement);
2908     END IF;
2909   END IF;
2910 
2911     ----------------------------------------------
2912     -- validate cust_account_id
2913     ----------------------------------------------
2914 /****Logical APIs - validation not required****/
2915   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2916     -- cust_account_id is mandatory field
2917     -- Since cust_account_id is non-updateable, we only need to check mandatory
2918     -- during creation.
2919     --
2920     -- 2310474: cust_account_id can be equal = -1 if the profile is related to party
2921     -- and not a customer account.
2922     --
2923 
2924 
2925     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2926            hz_utility_v2pub.debug(p_message=>'cust_account_id = ' || p_customer_profile_rec.cust_account_id || ' ' ||
2927             'x_return_status = ' || x_return_status,
2928                                   p_prefix =>l_debug_prefix,
2929                                   p_msg_level=>fnd_log.level_statement);
2930     END IF;
2931 
2932 
2933     IF p_create_update_flag = 'C' THEN
2934         validate_mandatory (
2935             p_create_update_flag                    => p_create_update_flag,
2936             p_column                                => 'cust_account_id',
2937             p_column_value                          => p_customer_profile_rec.cust_account_id,
2938             x_return_status                         => x_return_status );
2939 
2940         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2941            hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
2942                                    'x_return_status = ' || x_return_status,
2943                                   p_prefix =>l_debug_prefix,
2944                                   p_msg_level=>fnd_log.level_statement);
2945         END IF;
2946 
2947     END IF;
2948 
2949     -- 2310474 party_id is mandatory field
2950     IF p_create_update_flag = 'C'
2951     THEN
2952         validate_mandatory (
2953             p_create_update_flag                    => p_create_update_flag,
2954             p_column                                => 'party_id',
2955             p_column_value                          => p_customer_profile_rec.party_id,
2956             x_return_status                         => x_return_status );
2957 
2958         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2959            hz_utility_v2pub.debug(p_message=>'party_id is mandatory. ' ||
2960                                         'x_return_status = ' || x_return_status,
2961                                   p_prefix =>l_debug_prefix,
2962                                   p_msg_level=>fnd_log.level_statement);
2963         END IF;
2964 
2965     END IF;
2966 
2967     -- cust_account_id is non-updateable field.
2968     IF p_create_update_flag = 'U' AND
2969        p_customer_profile_rec.cust_account_id IS NOT NULL
2970     THEN
2971         validate_nonupdateable (
2972             p_column                                => 'cust_account_id',
2973             p_column_value                          => p_customer_profile_rec.cust_account_id,
2974             p_old_column_value                      => l_cust_account_id,
2975             x_return_status                         => x_return_status );
2976 
2977         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2978            hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
2979                                                 'x_return_status = ' || x_return_status,
2980                                   p_prefix =>l_debug_prefix,
2981                                   p_msg_level=>fnd_log.level_statement);
2982         END IF;
2983 
2984     END IF;
2985 
2986     -- 2310474 After the migration script to fill up party_id for all exiting customer profiles arhucppt.sql
2987     -- the party_id is not updeatable
2988 
2989     IF p_create_update_flag = 'U' AND
2990        p_customer_profile_rec.party_id IS NOT NULL
2991     THEN
2992         validate_nonupdateable (
2993             p_column                                => 'party_id',
2994             p_column_value                          => p_customer_profile_rec.party_id,
2995             p_old_column_value                      => l_party_id,
2996             x_return_status                         => x_return_status );
2997 
2998         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2999            hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
3000                                         'x_return_status = ' || x_return_status,
3001                                   p_prefix =>l_debug_prefix,
3002                                   p_msg_level=>fnd_log.level_statement);
3003         END IF;
3004 
3005     END IF;
3006 
3007 
3008     -- cust_account_id is foreign key to hz_cust_accounts
3009     -- Since cust_acocunt_id is non-updateable, we only need to
3010     -- check FK during creation.
3011 
3012     IF p_create_update_flag = 'C' AND
3013        p_customer_profile_rec.cust_account_id IS NOT NULL AND
3014        p_customer_profile_rec.cust_account_id <> FND_API.G_MISS_NUM
3015     THEN
3016         check_cust_account_fk (
3017             p_column                                 => 'cust_account_id',
3018             p_column_value                           => p_customer_profile_rec.cust_account_id,
3019             x_return_status                          => x_return_status );
3020 
3021 
3022         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3023            hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
3024                                                 'x_return_status = ' || x_return_status,
3025                                   p_prefix =>l_debug_prefix,
3026                                   p_msg_level=>fnd_log.level_statement);
3027         END IF;
3028 
3029     END IF;
3030   END IF;
3031 
3032     -- We can only have one customer profile for one account
3033     -- Because cust_account_id is non-updateable, we only need to do this check during
3034     -- creation.
3035     -------------------------------------
3036     -- 2310474: p_cust_account_rec.cust_account_id = -1 if we are creating the profile for a party
3037     --      One party can only have 1 only 1 customer profile directly attached to it
3038     -------------------------------------
3039 
3040     IF p_create_update_flag = 'C' AND
3041        ( p_customer_profile_rec.site_use_id IS NULL OR
3042          p_customer_profile_rec.site_use_id = FND_API.G_MISS_NUM ) AND
3043        p_customer_profile_rec.cust_account_id <> -1
3044     THEN
3045       BEGIN
3046           SELECT 'Y' INTO l_dummy
3047           FROM HZ_CUSTOMER_PROFILES
3048           WHERE CUST_ACCOUNT_ID = p_customer_profile_rec.cust_account_id
3049           AND SITE_USE_ID IS NULL
3050           AND ROWNUM = 1;
3051 
3052           FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
3053           FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
3054           FND_MSG_PUB.ADD;
3055           x_return_status := FND_API.G_RET_STS_ERROR;
3056       EXCEPTION
3057           WHEN NO_DATA_FOUND THEN
3058               NULL;
3059       END;
3060 
3061 
3062       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3063            hz_utility_v2pub.debug(p_message=>'only one customer profile for one account. ' ||
3064                                              'x_return_status = ' || x_return_status,
3065                                   p_prefix =>l_debug_prefix,
3066                                   p_msg_level=>fnd_log.level_statement);
3067       END IF;
3068 
3069 
3070     ELSIF p_create_update_flag = 'C' AND
3071          ( p_customer_profile_rec.site_use_id IS NULL OR
3072            p_customer_profile_rec.site_use_id = FND_API.G_MISS_NUM ) AND
3073           p_customer_profile_rec.cust_account_id = -1
3074     THEN
3075       -- 2310474 in this case we are creating a customer profile for party
3076       -- One party can only have 1 and only 1 profile directly attachment to the party
3077       -- At party level
3078       BEGIN
3079          SELECT 'Y' INTO l_dummy
3080          FROM HZ_CUSTOMER_PROFILES
3081          WHERE PARTY_ID = p_customer_profile_rec.party_id
3082          AND CUST_ACCOUNT_ID = -1;
3083 
3084          FND_MESSAGE.SET_NAME( 'AR', 'HZ_ONLY_ONE_PROF_AT_PARTY_LEV' );
3085          FND_MESSAGE.SET_TOKEN( 'PARTY_ID', p_customer_profile_rec.party_id );
3086          FND_MSG_PUB.ADD;
3087          x_return_status := FND_API.G_RET_STS_ERROR;
3088       EXCEPTION
3089          WHEN NO_DATA_FOUND THEN
3090                 NULL;
3091       END;
3092 
3093 
3094       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3095            hz_utility_v2pub.debug(p_message=>'only one customer profile for one party at party level. ' ||
3096                                         'x_return_status = ' || x_return_status,
3097                                   p_prefix =>l_debug_prefix,
3098                                   p_msg_level=>fnd_log.level_statement);
3099       END IF;
3100 
3101 
3102     END IF;
3103 
3104 
3105     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3106            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
3107             'x_return_status = ' || x_return_status,
3108                                   p_prefix =>l_debug_prefix,
3109                                   p_msg_level=>fnd_log.level_statement);
3110     END IF;
3111 
3112     ---------------------------------
3113     -- 2310474 Validation of review_cycle
3114     -- The last_credit_review_date and next_credit_review_date are not part of TCA API management
3115     -- Credit Management team take care of them
3116     -- V2 API does not do any validation on Last_Review_date and Next_review_date
3117     ---------------------------------
3118 
3119     -- Validate lookup_code of the REVIEW_CYCLE
3120     IF p_customer_profile_rec.review_cycle IS NOT NULL AND
3121        p_customer_profile_rec.review_cycle <> FND_API.G_MISS_CHAR AND
3122        ( p_create_update_flag = 'C' OR
3123          ( p_create_update_flag = 'U'  AND
3124            p_customer_profile_rec.review_cycle <> NVL( l_review_cycle, FND_API.G_MISS_CHAR ) ) )
3125     THEN
3126         validate_lookup (
3127             p_column                                => 'review_cycle',
3128             p_lookup_table                          => 'AR_LOOKUPS',
3129             p_lookup_type                           => 'PERIODIC_REVIEW_CYCLE',
3130             p_column_value                          => p_customer_profile_rec.review_cycle,
3131             x_return_status                         => x_return_status );
3132 
3133         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3134            hz_utility_v2pub.debug(p_message=>'review_cycle is lookup code in lookup type PERIODIC_REVIEW_CYCLE in ar_lookups. ' ||
3135                                                 'x_return_status = ' || x_return_status,
3136                                   p_prefix =>l_debug_prefix,
3137                                   p_msg_level=>fnd_log.level_statement);
3138         END IF;
3139 
3140 
3141     END IF;
3142 
3143 
3144     ----------------------------------------------
3145     -- validate collector_id
3146     ----------------------------------------------
3147 
3148     -- collector_id is mandatory field.
3149 
3150     -- Since we are defaulting to default profile class if profile_class_id
3151     -- has not been passed in, the collector_id can be null or G_MISS during
3152     -- creation and it will default to collect_id of default profile class if
3153     -- it is NULL. We can have G_MISS checking to make it mandatory.
3154 
3155     check_partial_mandatory_column (
3156         p_column                                 => 'collector_id',
3157         p_column_value                           => p_customer_profile_rec.collector_id,
3158         x_return_status                          => x_return_status );
3159 
3160 
3161     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3162            hz_utility_v2pub.debug(p_message=>'collector_id is mandatory : it can be null but not G_MISS. ' ||
3163                                 'x_return_status = ' || x_return_status,
3164                                   p_prefix =>l_debug_prefix,
3165                                   p_msg_level=>fnd_log.level_statement);
3166     END IF;
3167 
3168     -- collector_id is foreign key to ar_collectors
3169     IF p_customer_profile_rec.collector_id IS NOT NULL AND
3170        p_customer_profile_rec.collector_id <> FND_API.G_MISS_NUM
3171     THEN
3172         check_collector_fk (
3173             p_column                                 => 'collector_id',
3174             p_column_value                           => p_customer_profile_rec.collector_id,
3175             x_return_status                          => x_return_status );
3176 
3177 
3178         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3179            hz_utility_v2pub.debug(p_message=>'collector_id is foreign key to ar_collectors. ' ||
3180                                                   'x_return_status = ' || x_return_status,
3181                                   p_prefix =>l_debug_prefix,
3182                                   p_msg_level=>fnd_log.level_statement);
3183         END IF;
3184 
3185     END IF;
3186 
3187     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3188            hz_utility_v2pub.debug(p_message=>'(+) after validate collector_id ... ' ||
3189                                                  'x_return_status = ' || x_return_status,
3190                                   p_prefix =>l_debug_prefix,
3191                                   p_msg_level=>fnd_log.level_statement);
3192     END IF;
3193 
3194     ----------------------------------------------
3195     -- validate credit_checking
3196     ----------------------------------------------
3197 
3198     -- credit_checking is mandatory field.
3199 
3200     -- Since we are defaulting to default profile class if profile_class_id
3201     -- has not been passed in, the credit_checking can be null or G_MISS during
3202     -- creation and it will default to credit_checking of default profile class if
3203     -- it is NULL. We can have G_MISS checking to make it mandatory.
3204 
3205     check_partial_mandatory_column (
3206         p_column                                 => 'credit_checking',
3207         p_column_value                           => p_customer_profile_rec.credit_checking,
3208         x_return_status                          => x_return_status );
3209 
3210 
3211     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3212            hz_utility_v2pub.debug(p_message=>'credit_checking is mandatory : it can be null but not G_MISS. ' ||
3213                                                 'x_return_status = ' || x_return_status,
3214                                   p_prefix =>l_debug_prefix,
3215                                   p_msg_level=>fnd_log.level_statement);
3216     END IF;
3217 
3218 
3219     -- credit_checking is lookup code in lookup type YES/NO
3220     IF p_customer_profile_rec.credit_checking IS NOT NULL AND
3221        p_customer_profile_rec.credit_checking <> FND_API.G_MISS_CHAR
3222     THEN
3223         validate_lookup (
3224             p_column                                => 'credit_checking',
3225             p_lookup_type                           => 'YES/NO',
3226             p_column_value                          => p_customer_profile_rec.credit_checking,
3227             x_return_status                         => x_return_status );
3228 
3229         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3230            hz_utility_v2pub.debug(p_message=>'credit_checking is lookup code in lookup type YES/NO. ' ||
3231                                                 'x_return_status = ' || x_return_status,
3232                                   p_prefix =>l_debug_prefix,
3233                                   p_msg_level=>fnd_log.level_statement);
3234          END IF;
3235 
3236     END IF;
3237 
3238     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3239            hz_utility_v2pub.debug(p_message=>'(+) after validate credit_checking ... ' ||
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     ----------------------------------------------
3247     -- validate discount_terms
3248     ----------------------------------------------
3249 
3250     -- discount_terms is mandatory field.
3251 
3252     -- Since we are defaulting to default profile class if profile_class_id
3253     -- has not been passed in, the discount_terms can be null or G_MISS during
3254     -- creation and it will default to discount_terms of default profile class if
3255     -- it is NULL. We can have G_MISS checking to make it mandatory.
3256 
3257     check_partial_mandatory_column (
3258         p_column                                 => 'discount_terms',
3259         p_column_value                           => p_customer_profile_rec.discount_terms,
3260         x_return_status                          => x_return_status );
3261 
3262     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3263            hz_utility_v2pub.debug(p_message=>'discount_terms is mandatory : it can be null but not G_MISS. ' ||
3264                                                 'x_return_status = ' || x_return_status,
3265                                   p_prefix =>l_debug_prefix,
3266                                   p_msg_level=>fnd_log.level_statement);
3267     END IF;
3268 
3269 
3270 /****Logical APIs - validation not required****/
3271   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3272     -- discount_terms is lookup code in lookup type YES/NO
3273     IF p_customer_profile_rec.discount_terms IS NOT NULL AND
3274        p_customer_profile_rec.discount_terms <> FND_API.G_MISS_CHAR
3275        AND ( p_create_update_flag = 'C' OR
3276          ( p_create_update_flag = 'U'  AND
3277            p_customer_profile_rec.discount_terms <> NVL( l_discount_terms, FND_API.G_MISS_CHAR ) ) )
3278     THEN
3279         validate_lookup (
3280             p_column                                => 'discount_terms',
3281             p_lookup_type                           => 'YES/NO',
3282             p_column_value                          => p_customer_profile_rec.discount_terms,
3283             x_return_status                         => x_return_status );
3284 
3285 
3286         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3287            hz_utility_v2pub.debug(p_message=>'discount_terms is lookup code in lookup type YES/NO. ' ||
3288                            'x_return_status = ' || x_return_status,
3289                                   p_prefix =>l_debug_prefix,
3290                                   p_msg_level=>fnd_log.level_statement);
3291         END IF;
3292 
3293     END IF;
3294   END IF;
3295 
3296     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3297            hz_utility_v2pub.debug(p_message=>'(+) after validate discount_terms ... ' ||
3298             'x_return_status = ' || x_return_status,
3299                                   p_prefix =>l_debug_prefix,
3300                                   p_msg_level=>fnd_log.level_statement);
3301     END IF;
3302 
3303     ----------------------------------------------
3304     -- validate tolerance
3305     ----------------------------------------------
3306 
3307     -- tolerance is mandatory field.
3308 
3309     -- Since we are defaulting to default profile class if profile_class_id
3310     -- has not been passed in, the tolerance can be null or G_MISS during
3311     -- creation and it will default to tolerance of default profile class if
3312     -- it is NULL. We can have G_MISS checking to make it mandatory.
3313 
3314     check_partial_mandatory_column (
3315         p_column                                 => 'tolerance',
3316         p_column_value                           => p_customer_profile_rec.tolerance,
3317         x_return_status                          => x_return_status );
3318 
3319 
3320     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3321            hz_utility_v2pub.debug(p_message=>'tolerance is mandatory : it can be null but not G_MISS. ' ||
3322             'x_return_status = ' || x_return_status,
3323                                   p_prefix =>l_debug_prefix,
3324                                   p_msg_level=>fnd_log.level_statement);
3325     END IF;
3326 
3327 
3328     ----------------------------------------------
3329     -- validate profile_class_id
3330     ----------------------------------------------
3331 
3332     -- profile_class_id is foreign key to hz_cust_profile_classes
3333     IF p_customer_profile_rec.profile_class_id IS NOT NULL AND
3334        p_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM
3335     THEN
3336         IF p_customer_profile_rec.profile_class_id < 0 THEN
3337             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NEGATIVE_PROFILE_CLASS' );
3338             FND_MSG_PUB.ADD;
3339             x_return_status := FND_API.G_RET_STS_ERROR;
3340         ELSE
3341         BEGIN
3342             SELECT STATUS, NAME INTO l_class_status, l_profile_class_name
3343             FROM HZ_CUST_PROFILE_CLASSES
3344             WHERE PROFILE_CLASS_ID = p_customer_profile_rec.profile_class_id;
3345 
3346             IF l_class_status <> 'A' THEN
3347                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INACTIVE_PROFILE_CLASS' );
3348                 FND_MESSAGE.SET_TOKEN( 'NAME', l_profile_class_name );
3349                 FND_MSG_PUB.ADD;
3350                 x_return_status := FND_API.G_RET_STS_ERROR;
3351             END IF;
3352         EXCEPTION
3353             WHEN NO_DATA_FOUND THEN
3354                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
3355                 FND_MESSAGE.SET_TOKEN( 'FK', 'profile_class_id' );
3356                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'profile_class_id' );
3357                 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_profile_classes');
3358                 FND_MSG_PUB.ADD;
3359                 x_return_status := FND_API.G_RET_STS_ERROR;
3360         END;
3361         END IF;
3362 
3363         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3364            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. ' ||
3365                 'x_return_status = ' || x_return_status,
3366                                   p_prefix =>l_debug_prefix,
3367                                   p_msg_level=>fnd_log.level_statement);
3368         END IF;
3369 
3370     END IF;
3371 
3372     -- profile_class_id cannot be set to null during update
3373     IF p_create_update_flag = 'U' AND
3374        p_customer_profile_rec.profile_class_id IS NOT NULL
3375     THEN
3376         validate_cannot_update_to_null (
3377             p_column                                => 'profile_class_id',
3378             p_column_value                          => p_customer_profile_rec.profile_class_id,
3379             x_return_status                         => x_return_status );
3380 
3381 
3382         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3383            hz_utility_v2pub.debug(p_message=>'profile_class_id cannot be updated to null. ' ||
3384                 'x_return_status = ' || x_return_status,
3385                                   p_prefix =>l_debug_prefix,
3386                                   p_msg_level=>fnd_log.level_statement);
3387         END IF;
3388 
3389     END IF;
3390 
3391 
3392     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3393            hz_utility_v2pub.debug(p_message=>'(+) after validate profile_class_id ... ' ||
3394             'x_return_status = ' || x_return_status,
3395                                   p_prefix =>l_debug_prefix,
3396                                   p_msg_level=>fnd_log.level_statement);
3397     END IF;
3398 
3399     ----------------------------------------------
3400     -- validate site_use_id
3401     ----------------------------------------------
3402 
3403     -- site_use_id is non-updateable field.
3404     IF p_create_update_flag = 'U' AND
3405        p_customer_profile_rec.site_use_id IS NOT NULL
3406     THEN
3407         validate_nonupdateable (
3408             p_column                                => 'site_use_id',
3409             p_column_value                          => p_customer_profile_rec.site_use_id,
3410             p_old_column_value                      => l_site_use_id,
3411             x_return_status                         => x_return_status );
3412 
3413 
3414         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3415            hz_utility_v2pub.debug(p_message=>'site_use_id is non-updateable. ' ||
3416                                          'x_return_status = ' || x_return_status,
3417                                   p_prefix =>l_debug_prefix,
3418                                   p_msg_level=>fnd_log.level_statement);
3419         END IF;
3420 
3421     END IF;
3422 
3423     ------------------
3424     -- site_use_id is foreign key to hz_cust_site_uses.
3425     -- one site use can only have one profile.
3426     -- Since site_use_id is non-updateable, we only need to check
3427     -- FK during creation.
3428     ------------------
3429     -- 2310474: User can create a customer profile at site level
3430     -- only if the profile is created for at account level
3431     -- and not at party level
3432     ------------------
3433 
3434 
3435     IF p_create_update_flag = 'C' AND
3436        p_customer_profile_rec.site_use_id IS NOT NULL AND
3437        p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM AND
3438        p_customer_profile_rec.cust_account_id <> -1
3439     THEN
3440         BEGIN
3441 
3442             SELECT CUST_ACCT_SITE_ID,SITE_USE_CODE,ORG_ID
3443             INTO l_cust_acct_site_id,l_cust_acct_site_use_code,l_org_id
3444             FROM HZ_CUST_SITE_USES_ALL
3445             WHERE SITE_USE_ID = p_customer_profile_rec.site_use_id;
3446 
3447            -- Bug 4650473. Check if org is accessible.
3448            BEGIN
3449             MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
3450            EXCEPTION
3451            WHEN OTHERS
3452            THEN
3453              x_return_status := FND_API.G_RET_STS_ERROR;
3454            END;
3455 
3456             -- cust_account_id should be same as cust_account_id site_use_id belongs to.
3457             SELECT CUST_ACCOUNT_ID INTO l_cust_account_id
3458             FROM HZ_CUST_ACCT_SITES_ALL
3459             WHERE CUST_ACCT_SITE_ID = l_cust_acct_site_id;
3460 
3461             IF l_cust_account_id <> p_customer_profile_rec.cust_account_id THEN
3462               FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_SITEUSE_MISMATCH' );
3463               FND_MSG_PUB.ADD;
3464               x_return_status := FND_API.G_RET_STS_ERROR;
3465             END IF;
3466 
3467             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3468                hz_utility_v2pub.debug(p_message=>'cust_account_id should be same as cust_account_id site_use_id belongs to. ' ||
3469                 'x_return_status = ' || x_return_status,
3470                                   p_prefix =>l_debug_prefix,
3471                                   p_msg_level=>fnd_log.level_statement);
3472              END IF;
3473 
3474         EXCEPTION
3475             WHEN NO_DATA_FOUND THEN
3476                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
3477                 FND_MESSAGE.SET_TOKEN( 'FK', 'site_use_id' );
3478                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'site_use_id' );
3479                 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_site_uses' );
3480                 FND_MSG_PUB.ADD;
3481                 x_return_status := FND_API.G_RET_STS_ERROR;
3482         END;
3483 
3484         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3485            hz_utility_v2pub.debug(p_message=>'site_use_id is foreign key to hz_cust_site_uses. ' ||
3486                 'x_return_status = ' || x_return_status,
3487                                   p_prefix =>l_debug_prefix,
3488                                   p_msg_level=>fnd_log.level_statement);
3489         END IF;
3490 
3491 
3492         BEGIN
3493             SELECT 'Y' INTO l_dummy
3494             FROM HZ_CUSTOMER_PROFILES
3495             WHERE CUST_ACCOUNT_ID = p_customer_profile_rec.cust_account_id
3496             AND SITE_USE_ID = p_customer_profile_rec.site_use_id
3497             AND ROWNUM = 1;
3498 
3499             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
3500             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
3501             FND_MSG_PUB.ADD;
3502             x_return_status := FND_API.G_RET_STS_ERROR;
3503         EXCEPTION
3504             WHEN NO_DATA_FOUND THEN
3505                 NULL;
3506         END;
3507 
3508 
3509         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3510            hz_utility_v2pub.debug(p_message=>'one site use can only have one profile. ' ||
3511                 'x_return_status = ' || x_return_status,
3512                                   p_prefix =>l_debug_prefix,
3513                                   p_msg_level=>fnd_log.level_statement);
3514         END IF;
3515 
3516 
3517     -- 2310474: Profile can not be at account site level if it is created at party level
3518     ELSIF p_create_update_flag = 'C' AND
3519           p_customer_profile_rec.site_use_id IS NOT NULL AND
3520           p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM AND
3521           p_customer_profile_rec.cust_account_id = -1
3522     THEN
3523           FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NO_SITE_PROF_AT_PTY_LEV' );
3524           FND_MESSAGE.SET_TOKEN( 'PARTY_ID', p_customer_profile_rec.party_id );
3525           FND_MESSAGE.SET_TOKEN( 'SITE_USE_ID', p_customer_profile_rec.site_use_id );
3526           FND_MSG_PUB.ADD;
3527           x_return_status := FND_API.G_RET_STS_ERROR;
3528 
3529 
3530         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3531            hz_utility_v2pub.debug(p_message=>'profile at party level cannot be assign to a site. ' ||
3532                 'x_return_status = ' || x_return_status,
3533                                   p_prefix =>l_debug_prefix,
3534                                   p_msg_level=>fnd_log.level_statement);
3535         END IF;
3536 
3537 
3538     END IF;
3539 
3540 
3541     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3542            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
3543             'x_return_status = ' || x_return_status,
3544                                   p_prefix =>l_debug_prefix,
3545                                   p_msg_level=>fnd_log.level_statement);
3546     END IF;
3547 
3548     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3549            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
3550             'x_return_status = ' || x_return_status,
3551                                   p_prefix =>l_debug_prefix,
3552                                   p_msg_level=>fnd_log.level_statement);
3553     END IF;
3554 
3555 
3556     ----------------------------------------------
3557     -- validate credit_rating
3558     ----------------------------------------------
3559 
3560     -- credit_rating is lookup code in lookup type CREDIT_RATING
3561     IF p_customer_profile_rec.credit_rating IS NOT NULL AND
3562        p_customer_profile_rec.credit_rating <> FND_API.G_MISS_CHAR AND
3563         ( p_create_update_flag = 'C' OR
3564           ( p_create_update_flag = 'U'  AND
3565             p_customer_profile_rec.credit_rating <> NVL( l_credit_rating, FND_API.G_MISS_CHAR ) ) )
3566     THEN
3567         validate_lookup (
3568             p_column                                => 'credit_rating',
3569             p_lookup_type                           => 'CREDIT_RATING',
3570             p_column_value                          => p_customer_profile_rec.credit_rating,
3571             x_return_status                         => x_return_status );
3572 
3573         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3574            hz_utility_v2pub.debug(p_message=>'credit_rating is lookup code in lookup type CREDIT_RATING. ' ||
3575                 'x_return_status = ' || x_return_status,
3576                                   p_prefix =>l_debug_prefix,
3577                                   p_msg_level=>fnd_log.level_statement);
3578         END IF;
3579 
3580     END IF;
3581 
3582 
3583     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3584            hz_utility_v2pub.debug(p_message=>'(+) after validate credit_rating ... ' ||
3585             'x_return_status = ' || x_return_status,
3586                                   p_prefix =>l_debug_prefix,
3587                                   p_msg_level=>fnd_log.level_statement);
3588     END IF;
3589 
3590 
3591     ----------------------------------------------
3592     -- validate risk_code
3593     ----------------------------------------------
3594 
3595     -- risk_code is lookup code in lookup type RISK_CODE
3596     IF p_customer_profile_rec.risk_code IS NOT NULL AND
3597        p_customer_profile_rec.risk_code <> FND_API.G_MISS_CHAR AND
3598         ( p_create_update_flag = 'C' OR
3599           ( p_create_update_flag = 'U'  AND
3600             p_customer_profile_rec.risk_code <> NVL( l_risk_code, FND_API.G_MISS_CHAR ) ) )
3601     THEN
3602         validate_lookup (
3603             p_column                                => 'risk_code',
3604             p_lookup_type                           => 'RISK_CODE',
3605             p_column_value                          => p_customer_profile_rec.risk_code,
3606             x_return_status                         => x_return_status );
3607 
3608         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3609            hz_utility_v2pub.debug(p_message=>'risk_code is lookup code in lookup type RISK_CODE. ' ||
3610                 'x_return_status = ' || x_return_status,
3611                                   p_prefix =>l_debug_prefix,
3612                                   p_msg_level=>fnd_log.level_statement);
3613         END IF;
3614 
3615     END IF;
3616 
3617     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3618            hz_utility_v2pub.debug(p_message=>'(+) after validate risk_code ... ' ||
3619             'x_return_status = ' || x_return_status,
3620                                   p_prefix =>l_debug_prefix,
3621                                   p_msg_level=>fnd_log.level_statement);
3622     END IF;
3623 
3624 
3625     ----------------------------------------------
3626     -- validate auto_rec_incl_disputed_flag
3627     ----------------------------------------------
3628 
3629     -- auto_rec_incl_disputed_flag is mandatory field.
3630 
3631     -- Since we are defaulting to default profile class if profile_class_id
3632     -- has not been passed in, the auto_rec_incl_disputed_flag can be null or G_MISS during
3633     -- creation and it will default to auto_rec_incl_disputed_flag of default profile class if
3634     -- it is NULL. We can have G_MISS checking to make it mandatory.
3635 
3636     check_partial_mandatory_column (
3637         p_column                                 => 'auto_rec_incl_disputed_flag',
3638         p_column_value                           => p_customer_profile_rec.auto_rec_incl_disputed_flag,
3639         x_return_status                          => x_return_status );
3640 
3641     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3642            hz_utility_v2pub.debug(p_message=>'auto_rec_incl_disputed_flag is mandatory : it can be null but not G_MISS. ' ||
3643             'x_return_status = ' || x_return_status,
3644                                   p_prefix =>l_debug_prefix,
3645                                   p_msg_level=>fnd_log.level_statement);
3646     END IF;
3647 
3648 
3649     -- auto_rec_incl_disputed_flag is lookup code in lookup type YES/NO
3650     IF p_customer_profile_rec.auto_rec_incl_disputed_flag IS NOT NULL AND
3651        p_customer_profile_rec.auto_rec_incl_disputed_flag <> FND_API.G_MISS_CHAR
3652     THEN
3653         validate_lookup (
3654             p_column                                => 'auto_rec_incl_disputed_flag',
3655             p_lookup_type                           => 'YES/NO',
3656             p_column_value                          => p_customer_profile_rec.auto_rec_incl_disputed_flag,
3657             x_return_status                         => x_return_status );
3658 
3659 
3660         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3661            hz_utility_v2pub.debug(p_message=>'auto_rec_incl_disputed_flag is lookup code in lookup type YES/NO. ' ||
3662                 'x_return_status = ' || x_return_status,
3663                                   p_prefix =>l_debug_prefix,
3664                                   p_msg_level=>fnd_log.level_statement);
3665         END IF;
3666 
3667     END IF;
3668 
3669 
3670     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3671            hz_utility_v2pub.debug(p_message=>'(+) after validate auto_rec_incl_disputed_flag ... ' ||
3672             'x_return_status = ' || x_return_status,
3673                                   p_prefix =>l_debug_prefix,
3674                                   p_msg_level=>fnd_log.level_statement);
3675     END IF;
3676 
3677 
3678     ----------------------------------------------
3679     -- validate charge_on_finance_charge_flag
3680     ----------------------------------------------
3681 /****Logical APIs - validation not required****/
3682   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3683     -- charge_on_finance_charge_flag is lookup code in lookup type YES/NO
3684     -- As a part of late charge policy project changing the lookup type to AR_FORMULAE (bug # 5065436)
3685     IF p_customer_profile_rec.charge_on_finance_charge_flag IS NOT NULL AND
3686        p_customer_profile_rec.charge_on_finance_charge_flag <> FND_API.G_MISS_CHAR
3687     THEN
3688         validate_lookup (
3689             p_column                                => 'charge_on_finance_charge_flag',
3690             p_lookup_type                           => 'AR_FORMULAE',
3691             p_column_value                          => p_customer_profile_rec.charge_on_finance_charge_flag,
3692             x_return_status                         => x_return_status );
3693 
3694         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3695            hz_utility_v2pub.debug(p_message=>'charge_on_finance_charge_flag is lookup code in lookup type AR_FORMULAE. ' ||
3696                 'x_return_status = ' || x_return_status,
3697                                   p_prefix =>l_debug_prefix,
3698                                   p_msg_level=>fnd_log.level_statement);
3699         END IF;
3700 
3701     END IF;
3702 
3703     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3704            hz_utility_v2pub.debug(p_message=>'(+) after charge_on_finance_charge_flag ... ' ||
3705             'x_return_status = ' || x_return_status,
3706                                   p_prefix =>l_debug_prefix,
3707                                   p_msg_level=>fnd_log.level_statement);
3708     END IF;
3709   END IF;
3710 
3711     ----------------------------------------------
3712     -- validate cons_inv_flag
3713     ----------------------------------------------
3714 /****Logical APIs - validation not required****/
3715   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3716     -- cons_inv_flag is lookup code in lookup type YES/NO
3717     IF p_customer_profile_rec.cons_inv_flag IS NOT NULL AND
3718        p_customer_profile_rec.cons_inv_flag <> FND_API.G_MISS_CHAR
3719     THEN
3720         validate_lookup (
3721             p_column                                => 'cons_inv_flag',
3722             p_lookup_type                           => 'YES/NO',
3723             p_column_value                          => p_customer_profile_rec.cons_inv_flag,
3724             x_return_status                         => x_return_status );
3725 
3726 
3727         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3728            hz_utility_v2pub.debug(p_message=>'cons_inv_flag is lookup code in lookup type YES/NO. ' ||
3729                  'x_return_status = ' || x_return_status,
3730                                   p_prefix =>l_debug_prefix,
3731                                   p_msg_level=>fnd_log.level_statement);
3732         END IF;
3733 
3734     END IF;
3735 
3736 
3737     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3738            hz_utility_v2pub.debug(p_message=>'(+) after cons_inv_flag ... ' ||
3739             'x_return_status = ' || x_return_status,
3740                                   p_prefix =>l_debug_prefix,
3741                                   p_msg_level=>fnd_log.level_statement);
3742     END IF;
3743   END IF;
3744 
3745     ----------------------------------------------
3746     -- validate cons_bill_level
3747     ----------------------------------------------
3748 /****Logical APIs - validation not required****/
3749   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3750 
3751     validate_bill_level (
3752             p_create_update_flag         => p_create_update_flag,
3753             p_customer_profile_rec       => p_customer_profile_rec,
3754             x_return_status              => x_return_status );
3755 
3756     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3757            hz_utility_v2pub.debug(p_message=>'(+) after cons_bill_level ... ' ||
3758             'x_return_status = ' || x_return_status,
3759                                   p_prefix =>l_debug_prefix,
3760                                   p_msg_level=>fnd_log.level_statement);
3761     END IF;
3762   END IF;
3763 
3764     ----------------------------------------------
3765     -- validate status
3766     ----------------------------------------------
3767 
3768     -- status cannot be set to null during update
3769     IF p_create_update_flag = 'U' AND
3770        p_customer_profile_rec.status IS NOT NULL
3771     THEN
3772         validate_cannot_update_to_null (
3773             p_column                                => 'status',
3774             p_column_value                          => p_customer_profile_rec.status,
3775             x_return_status                         => x_return_status );
3776 
3777         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3778            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
3779                 'x_return_status = ' || x_return_status,
3780                                   p_prefix =>l_debug_prefix,
3781                                   p_msg_level=>fnd_log.level_statement);
3782         END IF;
3783 
3784     END IF;
3785 
3786 /****Logical APIs - validation not required****/
3787   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3788     -- status is lookup code in lookup type CODE_STATUS
3789     IF p_customer_profile_rec.status IS NOT NULL AND
3790        p_customer_profile_rec.status <> FND_API.G_MISS_CHAR AND
3791         ( p_create_update_flag = 'C' OR
3792           ( p_create_update_flag = 'U'  AND
3793             p_customer_profile_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
3794     THEN
3795         validate_lookup (
3796             p_column                                => 'status',
3797             p_lookup_type                           => 'CODE_STATUS',
3798             p_column_value                          => p_customer_profile_rec.status,
3799             x_return_status                         => x_return_status );
3800 
3801         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3802            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
3803                 'x_return_status = ' || x_return_status,
3804                                   p_prefix =>l_debug_prefix,
3805                                   p_msg_level=>fnd_log.level_statement);
3806         END IF;
3807 
3808     END IF;
3809   END IF;
3810 
3811     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3812            hz_utility_v2pub.debug(p_message=>'(+) after status ... ' ||
3813             'x_return_status = ' || x_return_status,
3814                                   p_prefix =>l_debug_prefix,
3815                                   p_msg_level=>fnd_log.level_statement);
3816     END IF;
3817 
3818 
3819     ----------------------------------------------
3820     -- validate dunning_letters
3821     ----------------------------------------------
3822 
3823     -- dunning_letters is mandatory field.
3824 
3825     -- Since we are defaulting to default profile class if profile_class_id
3826     -- has not been passed in, the dunning_letters can be null or G_MISS during
3827     -- creation and it will default to dunning_letters of default profile class if
3828     -- it is NULL. We can have G_MISS checking to make it mandatory.
3829 
3830     check_partial_mandatory_column (
3831         p_column                                 => 'dunning_letters',
3832         p_column_value                           => p_customer_profile_rec.dunning_letters,
3833         x_return_status                          => x_return_status );
3834 
3835     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3836            hz_utility_v2pub.debug(p_message=>'dunning_letters is mandatory : it can be null but not G_MISS. ' ||
3837             'x_return_status = ' || x_return_status,
3838                                   p_prefix =>l_debug_prefix,
3839                                   p_msg_level=>fnd_log.level_statement);
3840     END IF;
3841 
3842 
3843     -- dunning_letters is lookup code in lookup type YES/NO
3844     IF p_customer_profile_rec.dunning_letters IS NOT NULL AND
3845        p_customer_profile_rec.dunning_letters <> FND_API.G_MISS_CHAR
3846        AND ( p_create_update_flag = 'C' OR
3847          ( p_create_update_flag = 'U'  AND
3848            p_customer_profile_rec.dunning_letters <> NVL( l_dunning_letters, FND_API.G_MISS_CHAR ) ) )
3849     THEN
3850         validate_lookup (
3851             p_column                                => 'dunning_letters',
3852             p_lookup_type                           => 'YES/NO',
3853             p_column_value                          => p_customer_profile_rec.dunning_letters,
3854             x_return_status                         => x_return_status );
3855 
3856         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3857            hz_utility_v2pub.debug(p_message=>'dunning_letters is lookup code in lookup type YES/NO. ' ||
3858                 'x_return_status = ' || x_return_status,
3859                                   p_prefix =>l_debug_prefix,
3860                                   p_msg_level=>fnd_log.level_statement);
3861         END IF;
3862 
3863     END IF;
3864 
3865     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3866            hz_utility_v2pub.debug(p_message=>'(+) after dunning_letters ... ' ||
3867                 'x_return_status = ' || x_return_status,
3868                                   p_prefix =>l_debug_prefix,
3869                                   p_msg_level=>fnd_log.level_statement);
3870     END IF;
3871 
3872 
3873     ----------------------------------------------
3874     -- validate interest_charges
3875     ----------------------------------------------
3876 
3877     -- interest_charges is mandatory field.
3878 
3879     -- Since we are defaulting to default profile class if profile_class_id
3880     -- has not been passed in, the interest_charges can be null or G_MISS during
3881     -- creation and it will default to interest_charges of default profile class if
3882     -- it is NULL. We can have G_MISS checking to make it mandatory.
3883 
3884     check_partial_mandatory_column (
3885         p_column                                 => 'interest_charges',
3886         p_column_value                           => p_customer_profile_rec.interest_charges,
3887         x_return_status                          => x_return_status );
3888 
3889     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3890            hz_utility_v2pub.debug(p_message=>'interest_charges is mandatory : it can be null but not G_MISS. ' ||
3891             'x_return_status = ' || x_return_status,
3892                                   p_prefix =>l_debug_prefix,
3893                                   p_msg_level=>fnd_log.level_statement);
3894     END IF;
3895 
3896 /****Logical APIs - validation not required****/
3897   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3898     -- interest_charges is lookup code in lookup type YES/NO
3899     IF p_customer_profile_rec.interest_charges IS NOT NULL AND
3900        p_customer_profile_rec.interest_charges <> FND_API.G_MISS_CHAR
3901        AND ( p_create_update_flag = 'C' OR
3902          ( p_create_update_flag = 'U'  AND
3903            p_customer_profile_rec.interest_charges <> NVL( l_interest_charges, FND_API.G_MISS_CHAR ) ) )
3904     THEN
3905         validate_lookup (
3906             p_column                                => 'interest_charges',
3907             p_lookup_type                           => 'YES/NO',
3908             p_column_value                          => p_customer_profile_rec.interest_charges,
3909             x_return_status                         => x_return_status );
3910 
3911         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3912            hz_utility_v2pub.debug(p_message=>'interest_charges is lookup code in lookup type YES/NO. ' ||
3913                 'x_return_status = ' || x_return_status,
3914                                   p_prefix =>l_debug_prefix,
3915                                   p_msg_level=>fnd_log.level_statement);
3916         END IF;
3917 
3918     END IF;
3919   END IF;
3920 
3921     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3922            hz_utility_v2pub.debug(p_message=>'(+) after interest_charges ... ' ||
3923             'x_return_status = ' || x_return_status,
3924                                   p_prefix =>l_debug_prefix,
3925                                   p_msg_level=>fnd_log.level_statement);
3926     END IF;
3927 
3928 
3929     ----------------------------------------------
3930     -- validate send_statements
3931     ----------------------------------------------
3932 
3933     -- send_statements is mandatory field.
3934 
3935     -- Since we are defaulting to default profile class if profile_class_id
3936     -- has not been passed in, the send_statements can be null or G_MISS during
3937     -- creation and it will default to send_statements of default profile class if
3938     -- it is NULL. We can have G_MISS checking to make it mandatory.
3939 
3940     check_partial_mandatory_column (
3941         p_column                                 => 'send_statements',
3942         p_column_value                           => p_customer_profile_rec.send_statements,
3943         x_return_status                          => x_return_status );
3944 
3945     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3946            hz_utility_v2pub.debug(p_message=>'send_statements is mandatory : it can be null but not G_MISS. ' ||
3947             'x_return_status = ' || x_return_status,
3948                                   p_prefix =>l_debug_prefix,
3949                                   p_msg_level=>fnd_log.level_statement);
3950     END IF;
3951 
3952 
3953 /****Logical APIs - validation not required****/
3954   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3955     -- send_statements is lookup code in lookup type YES/NO
3956     IF p_customer_profile_rec.send_statements IS NOT NULL AND
3957        p_customer_profile_rec.send_statements <> FND_API.G_MISS_CHAR
3958        AND ( p_create_update_flag = 'C' OR
3959          ( p_create_update_flag = 'U'  AND
3960            p_customer_profile_rec.send_statements <> NVL( l_send_statements, FND_API.G_MISS_CHAR ) ) )
3961     THEN
3962         validate_lookup (
3963             p_column                                => 'send_statements',
3964             p_lookup_type                           => 'YES/NO',
3965             p_column_value                          => p_customer_profile_rec.send_statements,
3966             x_return_status                         => x_return_status );
3967 
3968         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3969            hz_utility_v2pub.debug(p_message=>'send_statements is lookup code in lookup type YES/NO. ' ||
3970                 'x_return_status = ' || x_return_status,
3971                                   p_prefix =>l_debug_prefix,
3972                                   p_msg_level=>fnd_log.level_statement);
3973         END IF;
3974 
3975     END IF;
3976   END IF;
3977 
3978     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3979            hz_utility_v2pub.debug(p_message=>'(+) after send_statements ... ' ||
3980             'x_return_status = ' || x_return_status,
3981                                   p_prefix =>l_debug_prefix,
3982                                   p_msg_level=>fnd_log.level_statement);
3983     END IF;
3984 
3985 
3986     ----------------------------------------------
3987     -- validate credit_balance_statements
3988     ----------------------------------------------
3989 
3990     -- credit_balance_statements is mandatory field.
3991 
3992     -- Since we are defaulting to default profile class if profile_class_id
3993     -- has not been passed in, the credit_balance_statements can be null or G_MISS during
3994     -- creation and it will default to credit_balance_statements of default profile class if
3995     -- it is NULL. We can have G_MISS checking to make it mandatory.
3996 
3997     check_partial_mandatory_column (
3998         p_column                                 => 'credit_balance_statements',
3999         p_column_value                           => p_customer_profile_rec.credit_balance_statements,
4000         x_return_status                          => x_return_status );
4001 
4002 
4003     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4004            hz_utility_v2pub.debug(p_message=>'credit_balance_statements is mandatory : it can be null but not G_MISS. ' ||
4005             'x_return_status = ' || x_return_status,
4006                                   p_prefix =>l_debug_prefix,
4007                                   p_msg_level=>fnd_log.level_statement);
4008     END IF;
4009 
4010 
4011 /****Logical APIs - validation not required****/
4012   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4013     -- credit_balance_statements is lookup code in lookup type YES/NO
4014     IF p_customer_profile_rec.credit_balance_statements IS NOT NULL AND
4015        p_customer_profile_rec.credit_balance_statements <> FND_API.G_MISS_CHAR
4016     THEN
4017         validate_lookup (
4018             p_column                                => 'credit_balance_statements',
4019             p_lookup_type                           => 'YES/NO',
4020             p_column_value                          => p_customer_profile_rec.credit_balance_statements,
4021             x_return_status                         => x_return_status );
4022 
4023         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4024            hz_utility_v2pub.debug(p_message=>'credit_balance_statements is lookup code in lookup type YES/NO. ' ||
4025                 'x_return_status = ' || x_return_status,
4026                                   p_prefix =>l_debug_prefix,
4027                                   p_msg_level=>fnd_log.level_statement);
4028        END IF;
4029 
4030     END IF;
4031   END IF;
4032 
4033     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4034            hz_utility_v2pub.debug(p_message=>'(+) after credit_balance_statements ... ' ||
4035             'x_return_status = ' || x_return_status,
4036                                   p_prefix =>l_debug_prefix,
4037                                   p_msg_level=>fnd_log.level_statement);
4038     END IF;
4039 
4040 
4041     ----------------------------------------------
4042     -- validate credit_hold
4043     ----------------------------------------------
4044 
4045     -- credit_hold is mandatory field.
4046 
4047     -- Since we are defaulting to default profile class if profile_class_id
4048     -- has not been passed in, the credit_hold can be null or G_MISS during
4049     -- creation and it will default to credit_hold of default profile class if
4050     -- it is NULL. We can have G_MISS checking to make it mandatory.
4051 
4052     check_partial_mandatory_column (
4053         p_column                                 => 'credit_hold',
4054         p_column_value                           => p_customer_profile_rec.credit_hold,
4055         x_return_status                          => x_return_status );
4056 
4057     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4058            hz_utility_v2pub.debug(p_message=>'credit_hold is mandatory : it can be null but not G_MISS. ' ||
4059             'x_return_status = ' || x_return_status,
4060                                   p_prefix =>l_debug_prefix,
4061                                   p_msg_level=>fnd_log.level_statement);
4062     END IF;
4063 
4064 
4065 /****Logical APIs - validation not required****/
4066   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4067     -- credit_hold is lookup code in lookup type YES/NO
4068     IF p_customer_profile_rec.credit_hold IS NOT NULL AND
4069        p_customer_profile_rec.credit_hold <> FND_API.G_MISS_CHAR
4070     THEN
4071         validate_lookup (
4072             p_column                                => 'credit_hold',
4073             p_lookup_type                           => 'YES/NO',
4074             p_column_value                          => p_customer_profile_rec.credit_hold,
4075             x_return_status                         => x_return_status );
4076 
4077         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4078            hz_utility_v2pub.debug(p_message=>'credit_hold is lookup code in lookup type YES/NO. ' ||
4079                 'x_return_status = ' || x_return_status,
4080                                   p_prefix =>l_debug_prefix,
4081                                   p_msg_level=>fnd_log.level_statement);
4082         END IF;
4083 
4084     END IF;
4085   END IF;
4086 
4087     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4088            hz_utility_v2pub.debug(p_message=>'(+) after credit_hold ... ' ||
4089             'x_return_status = ' || x_return_status,
4090                                   p_prefix =>l_debug_prefix,
4091                                   p_msg_level=>fnd_log.level_statement);
4092     END IF;
4093 
4094 
4095     --------------------------------------
4096     -- validate created_by_module
4097     --------------------------------------
4098 
4099     validate_created_by_module(
4100       p_create_update_flag     => p_create_update_flag,
4101       p_created_by_module      => p_customer_profile_rec.created_by_module,
4102       p_old_created_by_module  => l_created_by_module,
4103       x_return_status          => x_return_status);
4104 
4105     --------------------------------------
4106     -- validate application_id
4107     --------------------------------------
4108 
4109     validate_application_id(
4110       p_create_update_flag     => p_create_update_flag,
4111       p_application_id         => p_customer_profile_rec.application_id,
4112       p_old_application_id     => l_application_id,
4113       x_return_status          => x_return_status);
4114 
4115     ------------------------------------------
4116     ----*** Select fields to validate  ***----
4117     ------------------------------------------
4118       IF  p_customer_profile_rec.profile_class_id IS NOT NULL AND
4119           p_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM
4120       THEN
4121 
4122           SELECT * INTO l_profile_class_rec
4123           FROM     HZ_CUST_PROFILE_CLASSES
4124           WHERE    PROFILE_CLASS_ID = p_customer_profile_rec.profile_class_id;
4125 
4126       END IF;
4127 
4128     ------------------------------------------
4129     ---***  Account Status Validation   ***---
4130     ------------------------------------------
4131    IF p_customer_profile_rec.account_status IS NOT NULL AND
4132       p_customer_profile_rec.account_status <> FND_API.G_MISS_CHAR
4133        AND ( p_create_update_flag = 'C' OR
4134          ( p_create_update_flag = 'U'  AND
4135            p_customer_profile_rec.account_status <> NVL( l_account_status, FND_API.G_MISS_CHAR ) ) )
4136    THEN
4137         validate_lookup (
4138             p_column                   => 'account_status',
4139             p_lookup_type              => 'ACCOUNT_STATUS',
4140             p_column_value             => p_customer_profile_rec.account_status,
4141             x_return_status            => x_return_status );
4142 
4143         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4144            hz_utility_v2pub.debug(p_message=>'account_status is lookup code in lookup type ACCOUNT_STATUS.' ||
4145                'x_return_status = ' || x_return_status,
4146                                   p_prefix =>l_debug_prefix,
4147                                   p_msg_level=>fnd_log.level_statement);
4148         END IF;
4149 
4150     END IF;
4151 
4152         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4153            hz_utility_v2pub.debug(p_message=>'(+) after validate account_status ... ' ||
4154               'x_return_status = ' || x_return_status,
4155                                   p_prefix =>l_debug_prefix,
4156                                   p_msg_level=>fnd_log.level_statement);
4157         END IF;
4158 
4159 
4160     ---------------------------------------
4161     ------***Tolerance Validation ***------
4162     ---------------------------------------
4163    IF p_customer_profile_rec.tolerance IS NOT NULL AND
4164       p_customer_profile_rec.tolerance <> FND_API.G_MISS_NUM
4165        AND ( p_create_update_flag = 'C' OR
4166          ( p_create_update_flag = 'U'  AND
4167            p_customer_profile_rec.tolerance <> NVL( l_tolerance, FND_API.G_MISS_NUM ) ) )
4168    THEN
4169        IF p_customer_profile_rec.tolerance > 100  OR
4170           p_customer_profile_rec.tolerance < -100
4171        THEN
4172             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VALUE_BETWEEN' );
4173             FND_MESSAGE.SET_TOKEN( 'COLUMN','tolerance');
4174             FND_MESSAGE.SET_TOKEN( 'VALUE1', '-100' );
4175             FND_MESSAGE.SET_TOKEN( 'VALUE2', '100' );
4176             FND_MSG_PUB.ADD;
4177             x_return_status := FND_API.G_RET_STS_ERROR;
4178            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4179                 hz_utility_v2pub.debug(p_message=>'Tolerance should be between -100 and 100 .' ||
4180                          'x_return_status = ' || x_return_status,
4181                                   p_prefix =>l_debug_prefix,
4182                                   p_msg_level=>fnd_log.level_statement);
4183             END IF;
4184 
4185        END IF;
4186    END IF;
4187 
4188    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4189            hz_utility_v2pub.debug(p_message=>'(+) after validate tolerance ... ' ||
4190               'x_return_status = ' || x_return_status,
4191                                   p_prefix =>l_debug_prefix,
4192                                   p_msg_level=>fnd_log.level_statement);
4193     END IF;
4194 
4195 
4196     -------------------------------------------------
4197     ---***   Validating Percent_Collectable    ***---
4198     -------------------------------------------------
4199    IF  p_customer_profile_rec.percent_collectable IS NOT NULL AND
4200        p_customer_profile_rec.percent_collectable <> FND_API.G_MISS_NUM
4201        AND ( p_create_update_flag = 'C' OR
4202          ( p_create_update_flag = 'U'  AND
4203            p_customer_profile_rec.percent_collectable <> NVL( l_percent_collectable, FND_API.G_MISS_NUM ) ) )
4204    THEN
4205        IF p_customer_profile_rec.percent_collectable > 100 OR
4206           p_customer_profile_rec.percent_collectable < 0
4207        THEN
4208             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VALUE_BETWEEN' );
4209             FND_MESSAGE.SET_TOKEN( 'COLUMN','percent_collectable');
4210             FND_MESSAGE.SET_TOKEN( 'VALUE1', '0' );
4211             FND_MESSAGE.SET_TOKEN( 'VALUE2', '100' );
4212             FND_MSG_PUB.ADD;
4213             x_return_status := FND_API.G_RET_STS_ERROR;
4214 
4215             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4216                 hz_utility_v2pub.debug(p_message=>'Percent_Collectable should be between 0 and 100 .' ||
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         END IF;
4223     END IF;
4224 
4225     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4226            hz_utility_v2pub.debug(p_message=>'(+) after validate percent_collectable ... ' ||
4227               'x_return_status = ' || x_return_status,
4228                                   p_prefix =>l_debug_prefix,
4229                                   p_msg_level=>fnd_log.level_statement);
4230     END IF;
4231 
4232 
4233     -----------------------------------------
4234     ---***  Validating Override_Terms  ***---
4235     -----------------------------------------
4236     -- override_terms is lookup code in lookup type YES/NO
4237     IF p_customer_profile_rec.override_terms IS NOT NULL AND
4238        p_customer_profile_rec.override_terms <> FND_API.G_MISS_CHAR
4239        AND ( p_create_update_flag = 'C' OR
4240          ( p_create_update_flag = 'U'  AND
4241            p_customer_profile_rec.override_terms <> NVL( l_override_terms, FND_API.G_MISS_CHAR) ) )
4242     THEN
4243         validate_lookup (
4244             p_column                   => 'override_terms',
4245             p_lookup_type              => 'YES/NO',
4246             p_column_value             => p_customer_profile_rec.override_terms,
4247             x_return_status            => x_return_status );
4248 
4249 
4250         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4251            hz_utility_v2pub.debug(p_message=>'override_terms is lookup code in lookup type YES/NO. ' ||
4252                 'x_return_status = ' || x_return_status,
4253                                   p_prefix =>l_debug_prefix,
4254                                   p_msg_level=>fnd_log.level_statement);
4255         END IF;
4256 
4257     END IF;
4258 
4259     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4260            hz_utility_v2pub.debug(p_message=>'(+) after override_terms ... ' ||
4261             'x_return_status = ' || x_return_status,
4262                                   p_prefix =>l_debug_prefix,
4263                                   p_msg_level=>fnd_log.level_statement);
4264     END IF;
4265 
4266 
4267      ----------------------------------------------
4268      ---***Validating lockbox_matching_option***---
4269      ----------------------------------------------
4270      IF p_customer_profile_rec.lockbox_matching_option IS NOT NULL AND
4271         p_customer_profile_rec.lockbox_matching_option <> FND_API.G_MISS_CHAR
4272        AND ( p_create_update_flag = 'C' OR
4273          ( p_create_update_flag = 'U'  AND
4274            p_customer_profile_rec.lockbox_matching_option <> NVL( l_lockbox_matching_option, FND_API.G_MISS_CHAR) ) )
4275      THEN
4276         validate_lookup (
4277             p_column          => 'lockbox_matching_option',
4278             p_lookup_type     => 'ARLPLB_MATCHING_OPTION',
4279             p_column_value    => p_customer_profile_rec.lockbox_matching_option,
4280             x_return_status   => x_return_status );
4281 
4282         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4283            hz_utility_v2pub.debug(p_message=>'lockbox_matching_option is lookup code in lookup type
4284                                         ARLPLB_MATCHING_OPTION.' ||'x_return_status = ' ||
4285                                         x_return_status,
4286                                   p_prefix =>l_debug_prefix,
4287                                   p_msg_level=>fnd_log.level_statement);
4288        END IF;
4289 
4290     END IF;
4291 
4292         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4293            hz_utility_v2pub.debug(p_message=>'(+) after validate lockbox_matching_option ... ' ||
4294               'x_return_status = ' || x_return_status,
4295                                   p_prefix =>l_debug_prefix,
4296                                   p_msg_level=>fnd_log.level_statement);
4297         END IF;
4298 
4299 
4300       --------------------------------------------
4301       --*** Validating autocash_hierarchy_id***---
4302       --------------------------------------------
4303     IF p_customer_profile_rec.autocash_hierarchy_id IS NOT NULL AND
4304         p_customer_profile_rec.autocash_hierarchy_id <> FND_API.G_MISS_NUM
4305        AND ( p_create_update_flag = 'C' OR
4306          ( p_create_update_flag = 'U'  AND
4307            p_customer_profile_rec.autocash_hierarchy_id <> NVL( l_autocash_hierarchy_id, FND_API.G_MISS_NUM) ) )
4308     THEN
4309         check_auto_hierid_fk (
4310            p_column             => 'autocash_hierarchy_id',
4311            p_column_value       => p_customer_profile_rec.autocash_hierarchy_id,
4312            x_return_status      => x_return_status );
4313 
4314         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4315            hz_utility_v2pub.debug(p_message=>'autocash_hierarchy_id is foreign key to
4316                                                  ar_autocash_hierarchies. ' || 'x_return_status = ' ||
4317                                                  x_return_status,
4318                                   p_prefix =>l_debug_prefix,
4319                                   p_msg_level=>fnd_log.level_statement);
4320         END IF;
4321 
4322     END IF;
4323 
4324     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4325            hz_utility_v2pub.debug(p_message=>'(+) after validate autocash_hierarchy_id ... ' ||
4326                                                 'x_return_status = ' || x_return_status,
4327                                   p_prefix =>l_debug_prefix,
4328                                   p_msg_level=>fnd_log.level_statement);
4329     END IF;
4330 
4331 
4332      ---------------------------------------------------------
4333      -----*** Validating autocash_hierarchy_id_for_adr***-----
4334      ---------------------------------------------------------
4335    IF p_customer_profile_rec.autocash_hierarchy_id_for_adr IS NOT NULL AND
4336       p_customer_profile_rec.autocash_hierarchy_id_for_adr <> FND_API.G_MISS_NUM
4337        AND ( p_create_update_flag = 'C' OR
4338          ( p_create_update_flag = 'U'  AND
4339            p_customer_profile_rec.autocash_hierarchy_id_for_adr<> NVL( l_autocash_hierarchy_id_for_ad, FND_API.G_MISS_NUM) ) )
4340    THEN
4341      check_auto_hierid_fk (
4342         p_column       => 'autocash_hierarchy_id_for_adr',
4343         p_column_value => p_customer_profile_rec.autocash_hierarchy_id_for_adr,
4344         x_return_status=> x_return_status );
4345 
4346         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4347            hz_utility_v2pub.debug(p_message=>'autocash_hierarchy_id_for_adr is foreign key to
4348                                                  ar_autocash_hierarchies . ' || 'x_return_status = ' ||
4349                                                  x_return_status,
4350                                   p_prefix =>l_debug_prefix,
4351                                   p_msg_level=>fnd_log.level_statement);
4352         END IF;
4353 
4354     END IF;
4355 
4356     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4357            hz_utility_v2pub.debug(p_message=>'(+) after validate autocash_hierarchy_id_for_adr ... ' ||
4358             'x_return_status = ' || x_return_status,
4359                                   p_prefix =>l_debug_prefix,
4360                                   p_msg_level=>fnd_log.level_statement);
4361     END IF;
4362 
4363      --------------------------------------------
4364      ---*** Validating statement_cycle_id  ***---
4365      --------------------------------------------
4366      IF p_customer_profile_rec.statement_cycle_id IS NOT NULL AND
4367         p_customer_profile_rec.statement_cycle_id <> FND_API.G_MISS_NUM
4368        AND ( p_create_update_flag = 'C' OR
4369          ( p_create_update_flag = 'U'  AND
4370            p_customer_profile_rec.statement_cycle_id <> NVL( l_statement_cycle_id, FND_API.G_MISS_NUM) ) )
4371      THEN
4372           check_stat_cycid_fk (
4373            p_column             => 'statement_cycle_id',
4374            p_column_value       => p_customer_profile_rec.statement_cycle_id,
4375            x_return_status      => x_return_status );
4376 
4377         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4378            hz_utility_v2pub.debug(p_message=>'statement_cycle_id is foreign key to
4379                                  ar_statement_cycles . ' || 'x_return_status = ' ||
4380                                  x_return_status,
4381                                   p_prefix =>l_debug_prefix,
4382                                   p_msg_level=>fnd_log.level_statement);
4383         END IF;
4384 
4385     END IF;
4386 
4387     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4388            hz_utility_v2pub.debug(p_message=>'(+) after validate statement_cycle_id ... ' ||
4389                                              'x_return_status = ' || x_return_status,
4390                                   p_prefix =>l_debug_prefix,
4391                                   p_msg_level=>fnd_log.level_statement);
4392     END IF;
4393 
4394 
4395     ---------------------------------------------
4396     --------------*** Clearing Days***-----------
4397     ---------------------------------------------
4398    IF p_customer_profile_rec.clearing_days IS NOT NULL            AND
4399       p_customer_profile_rec.clearing_days <> FND_API.G_MISS_NUM
4400        AND ( p_create_update_flag = 'C' OR
4401          ( p_create_update_flag = 'U'  AND
4402            p_customer_profile_rec.clearing_days <> NVL( l_clearing_days, FND_API.G_MISS_NUM) ) )
4403    THEN
4404      -- Error
4405        check_positive_value (
4406            p_column             => 'clearing_days',
4407            p_column_value       => p_customer_profile_rec.clearing_days,
4408            x_return_status      => x_return_status );
4409 
4410      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4411            hz_utility_v2pub.debug(p_message=>'clearing_days should be > 0.' ||'x_return_status = ' ||
4412                                                 x_return_status,
4413                                   p_prefix =>l_debug_prefix,
4414                                   p_msg_level=>fnd_log.level_statement);
4415     END IF;
4416 
4417 
4418    END IF;
4419        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4420            hz_utility_v2pub.debug(p_message=>'(+) after validate clearing_days... ' ||
4421                                  'x_return_status = ' || x_return_status,
4422                                   p_prefix =>l_debug_prefix,
4423                                   p_msg_level=>fnd_log.level_statement);
4424        END IF;
4425 
4426     ---------------------------------------------
4427     ------------*** Payment_grace_days***--------
4428     ---------------------------------------------
4429    IF p_customer_profile_rec.payment_grace_days IS NOT NULL            AND
4430       p_customer_profile_rec.payment_grace_days <> FND_API.G_MISS_NUM
4431        AND ( p_create_update_flag = 'C' OR
4432          ( p_create_update_flag = 'U'  AND
4433            p_customer_profile_rec.payment_grace_days <> NVL( l_payment_grace_days, FND_API.G_MISS_NUM) ) )
4434    THEN
4435        check_positive_value (
4436            p_column             => 'payment_grace_days',
4437            p_column_value       => p_customer_profile_rec.payment_grace_days,
4438            x_return_status      => x_return_status );
4439 
4440      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4441            hz_utility_v2pub.debug(p_message=>'payment_grace_days should be > 0.' ||'x_return_status = ' ||
4442                                                 x_return_status,
4443                                   p_prefix =>l_debug_prefix,
4444                                   p_msg_level=>fnd_log.level_statement);
4445     END IF;
4446 
4447    END IF;
4448 
4449        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4453                                   p_msg_level=>fnd_log.level_statement);
4450            hz_utility_v2pub.debug(p_message=>'(+) after validate payment_grace_days... ' ||
4451                                                 'x_return_status = ' || x_return_status,
4452                                   p_prefix =>l_debug_prefix,
4454        END IF;
4455 
4456 
4457     ---------------------------------------------
4458     -----------***Interest_period_day***---------
4459     ---------------------------------------------
4460    IF p_customer_profile_rec.interest_period_days IS NOT NULL            AND
4461       p_customer_profile_rec.interest_period_days <> FND_API.G_MISS_NUM
4462    THEN
4463        check_greater_than_zero (
4464            p_column             => 'interest_period_days',
4465            p_column_value       => p_customer_profile_rec.interest_period_days,
4466            x_return_status      => x_return_status );
4467 
4468      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4469            hz_utility_v2pub.debug(p_message=>'interest_period_days should be > 0.' ||'x_return_status = ' ||
4470                                          x_return_status,
4471                                   p_prefix =>l_debug_prefix,
4472                                   p_msg_level=>fnd_log.level_statement);
4473     END IF;
4474 
4475    END IF;
4476 
4477        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4478            hz_utility_v2pub.debug(p_message=>'(+) after validate interest_period_days... ' ||
4479                                              'x_return_status = ' || x_return_status,
4480                                   p_prefix =>l_debug_prefix,
4481                                   p_msg_level=>fnd_log.level_statement);
4482        END IF;
4483 
4484 
4485      --------------------------------------------
4486      ---***Validating dunning_letter_set_id***---
4487      --------------------------------------------
4488  IF p_customer_profile_rec.dunning_letter_set_id IS NOT NULL AND
4489     p_customer_profile_rec.dunning_letter_set_id <> FND_API.G_MISS_NUM
4490  THEN
4491  /* Bug 5095478. DUNNING_LETTER_SET_ID is obsoleted.
4492    This validation is changed to throw an error if user passes the
4493    DUNNING_LETTER_SET_ID
4494 
4495      check_dunning_letid_fk (
4496            p_column             => 'dunning_letter_set_id',
4497            p_column_value       => p_customer_profile_rec.dunning_letter_set_id,
4498            x_return_status      => x_return_status );
4499 
4500      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4501            hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id is foreign key to
4502                                          ar_dunning_letter_sets . ' || 'x_return_status = ' ||
4503                                          x_return_status,
4504                                   p_prefix =>l_debug_prefix,
4505                                   p_msg_level=>fnd_log.level_statement);
4506     END IF; */
4507     IF fnd_profile.value('HZ_API_ERR_ON_OBSOLETE_COLUMN')='Y'
4508     THEN
4509          FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_OBSOLETE_COLUMN');
4510          FND_MESSAGE.SET_TOKEN( 'COLUMN', 'dunning_letter_set_id' );
4511          FND_MSG_PUB.ADD;
4512          x_return_status := FND_API.G_RET_STS_ERROR;
4513     END IF;
4514 
4515  END IF;
4516 
4517     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4518            hz_utility_v2pub.debug(p_message=>'(+) after validate dunning_letter_set_id ... ' ||
4519                                                 'x_return_status = ' || x_return_status,
4520                                   p_prefix =>l_debug_prefix,
4521                                   p_msg_level=>fnd_log.level_statement);
4522     END IF;
4523 
4524      --------------------------------------------
4525      ---*** Validating tax_printing_option ***---
4526      --------------------------------------------
4527      IF p_customer_profile_rec.tax_printing_option IS NOT NULL AND
4528         p_customer_profile_rec.tax_printing_option <> FND_API.G_MISS_CHAR
4529         AND ( p_create_update_flag = 'C' OR
4530          ( p_create_update_flag = 'U'  AND
4531          p_customer_profile_rec.tax_printing_option <> NVL( l_tax_printing_option, FND_API.G_MISS_CHAR ) ))
4532      THEN
4533         validate_lookup (
4534             p_column          => 'tax_printing_option',
4535             p_lookup_type     => 'TAX_PRINTING_OPTION',
4536             p_column_value    => p_customer_profile_rec.tax_printing_option,
4537             x_return_status   => x_return_status );
4538 
4539         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4540            hz_utility_v2pub.debug(p_message=>'tax_printing_option is lookup code in lookup type
4541                                                 TAX_PRINTING_OPTION.' ||'x_return_status = ' ||
4542                                                 x_return_status,
4543                                   p_prefix =>l_debug_prefix,
4544                                   p_msg_level=>fnd_log.level_statement);
4545        END IF;
4546 
4547      END IF;
4548 
4549         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4550            hz_utility_v2pub.debug(p_message=>'(+) after validate tax_printing_option ... ' ||
4551                                          'x_return_status = ' || x_return_status,
4552                                   p_prefix =>l_debug_prefix,
4553                                   p_msg_level=>fnd_log.level_statement);
4554         END IF;
4555 
4556 
4557      ----------------------------------------
4558      ----***  Validating standard_terms***---
4559      ----------------------------------------
4560  IF p_customer_profile_rec.standard_terms IS NOT NULL AND
4561     p_customer_profile_rec.standard_terms <> FND_API.G_MISS_NUM
4562         AND ( p_create_update_flag = 'C' OR
4563          ( p_create_update_flag = 'U'  AND
4564          p_customer_profile_rec.standard_terms <> NVL( l_standard_terms, FND_API.G_MISS_NUM ) ))
4565  THEN
4566     l_ckeck_acc_bfb_enabled := 'N';
4567     /* Commented the below code and added new set of validations below
4568        for enhancement # 5529044
4569     -- When Updating a BFB enabled site use profile which has a null payment term id
4570     -- with a  new payment term id check  that the payment term id is a BFB payment term
4571     -- if  BFB is enabled for the account profile and check that the payment term is
4572     -- a non BFB payment term if BFB is disabled for the Account profile.
4573     if (p_customer_profile_rec.site_use_id is NOT NULL and p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM
4574         and p_create_update_flag = 'U' )then
4575       l_ckeck_acc_bfb_enabled := 'Y';
4576       ll_cons_inv_flag := 'N';
4577       begin
4578           select cons_inv_flag
4579           into   ll_cons_inv_flag
4580           from   hz_customer_profiles
4581           where  cust_account_id = p_customer_profile_rec.cust_account_id
4582           and    site_use_id is NULL;
4583        exception when others then
4584           ll_cons_inv_flag := 'N';
4585        end;
4586     else
4587        ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4588     end if;
4589     */
4590 
4591     ----------------
4592     -- Below validatins are added for enhancement # 5529044
4593     -- If BFB is enabled, check standard_terms is a BFB standard term
4594     -- If BFB is not enabled, any valid standard_terms ok irrespective of BFB
4595     -- For site profile, if Account level is BFB disabled,
4596     -- validate any valid standard_terms, irrespective of site level BFB
4597     if p_customer_profile_rec.site_use_id is NOT NULL then  -- Site profile
4598       ll_cons_inv_flag := 'N';
4599       begin
4600           select cons_inv_flag
4601           into   ll_cons_inv_flag
4602           from   hz_customer_profiles
4603           where  cust_account_id = p_customer_profile_rec.cust_account_id
4604           and    site_use_id is NULL;
4605        exception when others then
4606           ll_cons_inv_flag := 'N';
4607        end;
4608        if ll_cons_inv_flag = 'Y' then
4609           ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4610        else
4611           l_ckeck_acc_bfb_enabled := 'Y';
4612        end if;
4613     else -- Account profile
4614        ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4615     end if;
4616     ----------------
4617 
4618        check_standard_terms_fk (
4619            p_column             => 'standard_terms',
4620            p_column_value       => p_customer_profile_rec.standard_terms,
4621            p_cons_inv_flag      => ll_cons_inv_flag,
4622            p_ckeck_acc_bfb_enabled => l_ckeck_acc_bfb_enabled,
4623            x_return_status      => x_return_status );
4624 
4625      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4626            hz_utility_v2pub.debug(p_message=>'standard_terms is foreign key to ra_terms . ' ||
4627                                                   'x_return_status = ' || x_return_status,
4628                                   p_prefix =>l_debug_prefix,
4629                                   p_msg_level=>fnd_log.level_statement);
4630     END IF;
4631 
4632  END IF;
4633 
4634     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4635            hz_utility_v2pub.debug(p_message=>'(+) after validate standard_terms ... ' ||
4636                                            'x_return_status = ' || x_return_status,
4637                                   p_prefix =>l_debug_prefix,
4638                                   p_msg_level=>fnd_log.level_statement);
4639     END IF;
4640 
4641 
4642      -------------------------------------------
4643      ---*** Validating grouping_rule_id   ***---
4644      -------------------------------------------
4645  IF p_customer_profile_rec.grouping_rule_id IS NOT NULL AND
4646     p_customer_profile_rec.grouping_rule_id <> FND_API.G_MISS_NUM
4647         AND ( p_create_update_flag = 'C' OR
4648          ( p_create_update_flag = 'U'  AND
4649          p_customer_profile_rec.grouping_rule_id <> NVL( l_grouping_rule_id, FND_API.G_MISS_NUM ) ))
4650 
4651  THEN
4652      check_grouping_ruleid_fk (
4653            p_column             => 'grouping_rule_id',
4654            p_column_value       => p_customer_profile_rec.grouping_rule_id,
4655            x_return_status      => x_return_status );
4656 
4657      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4658            hz_utility_v2pub.debug(p_message=>'grouping_rule_id is foreign key to ra_grouping_rules  . ' ||
4659                                              'x_return_status = ' || x_return_status,
4660                                   p_prefix =>l_debug_prefix,
4661                                   p_msg_level=>fnd_log.level_statement);
4662     END IF;
4663 
4664  END IF;
4665 
4666  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4667            hz_utility_v2pub.debug(p_message=>'(+) after validate grouping_rule_id ... ' ||
4668             'x_return_status = ' || x_return_status,
4669                                   p_prefix =>l_debug_prefix,
4670                                   p_msg_level=>fnd_log.level_statement);
4671  END IF;
4672 
4673     -------------------------------------------------
4674     ------------*** Discount_grace_days **---------------
4675     -------------------------------------------------
4676 IF v_customer_profile_rec.discount_grace_days IS NOT NULL AND
4677    v_customer_profile_rec.discount_grace_days <> FND_API.G_MISS_NUM
4678         AND ( p_create_update_flag = 'C' OR
4679          ( p_create_update_flag = 'U'  AND
4680          p_customer_profile_rec.discount_grace_days <> NVL( l_discount_grace_days, FND_API.G_MISS_NUM ) ))
4681 THEN
4682     check_positive_value (
4683            p_column             => 'discount_grace_days',
4684            p_column_value       => v_customer_profile_rec.discount_grace_days,
4685            x_return_status      => x_return_status );
4686 
4687      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4688            hz_utility_v2pub.debug(p_message=>'discount_grace_days should be > 0.' ||'x_return_status = ' ||
4689                                  x_return_status,
4690                                   p_prefix =>l_debug_prefix,
4691                                   p_msg_level=>fnd_log.level_statement);
4692     END IF;
4693 
4694 END IF;
4695 
4696 IF p_create_update_flag = 'C' OR
4697    (p_create_update_flag = 'U' AND
4698    v_customer_profile_rec.profile_class_id IS NOT NULL AND
4699    v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM)
4700 THEN
4701 
4702    IF v_customer_profile_rec.discount_terms IS  NULL THEN
4703       v_customer_profile_rec.discount_terms :=
4704       l_profile_class_rec.discount_terms;
4705    END IF;
4706 
4707    IF v_customer_profile_rec.discount_grace_days IS NULL AND
4708       v_customer_profile_rec.discount_terms = 'Y'
4709    THEN
4710 
4711       v_customer_profile_rec.discount_grace_days :=
4712       l_profile_class_rec.discount_grace_days;
4713    END IF;
4714 END IF;
4715 
4716 IF p_create_update_flag = 'U' AND
4717    v_customer_profile_rec.profile_class_id  IS NULL THEN
4718    IF v_customer_profile_rec.discount_terms IS NULL
4719    THEN
4720       v_customer_profile_rec.discount_terms := l_discount_terms;
4721    END IF;
4722    IF v_customer_profile_rec.discount_grace_days IS NULL THEN
4723       v_customer_profile_rec.discount_grace_days := l_discount_grace_days;
4724    END IF;
4725 END IF;
4726 
4727 
4728  IF v_customer_profile_rec.discount_terms = 'N' OR
4729     v_customer_profile_rec.discount_terms is NULL
4730  THEN
4731       IF v_customer_profile_rec.discount_grace_days >= 0 AND
4732          v_customer_profile_rec.discount_grace_days <> FND_API.G_MISS_NUM
4733       THEN
4734             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4735             FND_MESSAGE.SET_TOKEN( 'COLUMN1', 'discount_terms' );
4736             FND_MESSAGE.SET_TOKEN( 'VALUE1', 'N' );
4737             FND_MESSAGE.SET_TOKEN( 'COLUMN2', 'discount_grace_days');
4738             FND_MESSAGE.SET_TOKEN( 'VALUE2', 'NULL' );
4739             FND_MSG_PUB.ADD;
4740             x_return_status := FND_API.G_RET_STS_ERROR;
4741 
4742             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4743                  hz_utility_v2pub.debug(p_message=>'discount_grace_days should be null when discount_terms is N.' ||
4744                                           'x_return_status = ' || x_return_status,
4745                                   p_prefix =>l_debug_prefix,
4746                                   p_msg_level=>fnd_log.level_statement);
4747             END IF;
4748 
4749       END IF;
4750  END IF;
4751 
4752  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4753            hz_utility_v2pub.debug(p_message=>'(+) after validate discount_terms ... ' ||
4754                         'x_return_status = ' || x_return_status,
4755                                   p_prefix =>l_debug_prefix,
4756                                   p_msg_level=>fnd_log.level_statement);
4757  END IF;
4758 
4759 
4760      -----------------------------------------------------------
4761      ------------*** dunning_letters ***------------------------
4762      ----------------------------------------------------------
4763 
4764 IF p_create_update_flag = 'C' OR
4765    (p_create_update_flag = 'U' AND
4766    v_customer_profile_rec.profile_class_id IS NOT NULL AND
4767    v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM)
4768 THEN
4769    IF v_customer_profile_rec.dunning_letters IS NULL THEN
4770       v_customer_profile_rec.dunning_letters :=
4771       l_profile_class_rec.dunning_letters;
4772    END IF;
4773    /* Bug Fix:2884220  Added "v_customer_profile_rec.dunning_letters='Y'" Condition
4774                        when initializing dunning_letter_set_id from hz_cust_profile_classes.
4775    */
4776    /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4777    IF v_customer_profile_rec.dunning_letters='Y' and
4778       v_customer_profile_rec.dunning_letter_set_id IS  NULL THEN
4779       v_customer_profile_rec.dunning_letter_set_id :=
4780       l_profile_class_rec.dunning_letter_set_id;
4781    END IF;*/
4782 END IF;
4783 
4784 IF p_create_update_flag = 'U' AND
4785    v_customer_profile_rec.profile_class_id IS NULL
4786 THEN
4787    IF v_customer_profile_rec.dunning_letters IS NULL THEN
4788       v_customer_profile_rec.dunning_letters := l_dunning_letters;
4789    END IF;
4790    /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4791    IF v_customer_profile_rec.dunning_letter_set_id IS NULL THEN
4792       v_customer_profile_rec.dunning_letter_set_id := l_dunning_letter_set_id;
4793    END IF; */
4794 END IF;
4795 
4796 /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4797  IF v_customer_profile_rec.dunning_letters = 'Y'
4798  THEN
4799      IF v_customer_profile_rec.dunning_letter_set_id = FND_API.G_MISS_NUM OR
4800         v_customer_profile_rec.dunning_letter_set_id IS NULL
4801      THEN
4802        FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4803        FND_MESSAGE.SET_TOKEN('COLUMN1', 'dunning_letters');
4804        FND_MESSAGE.SET_TOKEN('VALUE1', 'Y');
4805        FND_MESSAGE.SET_TOKEN('COLUMN2','dunning_letter_set_id');
4806        FND_MSG_PUB.ADD;
4807        x_return_status := FND_API.G_RET_STS_ERROR;
4808 
4809           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4810              hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id cannot be NULL when dunning_letters is Y.' ||
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        END IF;
4817  END IF;
4818 
4819  IF v_customer_profile_rec.dunning_letters = 'N' OR
4820     v_customer_profile_rec.dunning_letters IS NULL
4821  THEN
4822    IF v_customer_profile_rec.dunning_letter_set_id >= 0 AND
4823       v_customer_profile_rec.dunning_letter_set_id <> FND_API.G_MISS_NUM
4824    THEN
4825             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4826             FND_MESSAGE.SET_TOKEN('COLUMN1','dunning_letters');
4827             FND_MESSAGE.SET_TOKEN('VALUE1','N');
4828             FND_MESSAGE.SET_TOKEN('COLUMN2','dunning_letter_set_id');
4829             FND_MESSAGE.SET_TOKEN('VALUE2','NULL');
4830             FND_MSG_PUB.ADD;
4831             x_return_status := FND_API.G_RET_STS_ERROR;
4832 
4833             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4834                 hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id should be NULL when dunning_letters is N.' ||
4835                                         'x_return_status = ' || x_return_status,
4836                                   p_prefix =>l_debug_prefix,
4837                                   p_msg_level=>fnd_log.level_statement);
4838              END IF;
4839 
4840     END IF;
4841  END IF;*/
4842   IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4843            hz_utility_v2pub.debug(p_message=>'(+) after validate duning_letters ... ' ||
4844                                                 'x_return_status = ' || x_return_status,
4845                                   p_prefix =>l_debug_prefix,
4846                                   p_msg_level=>fnd_log.level_statement);
4847   END IF;
4848 
4849 
4850 ------------------------------------------------
4851 ---------*** send_statements ***----------------
4852 ------------------------------------------------
4853 
4854 IF p_create_update_flag = 'C' OR
4855    ( p_create_update_flag = 'U' AND
4856    v_customer_profile_rec.profile_class_id is not null AND
4857    v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM )
4858 THEN
4859 
4860    IF v_customer_profile_rec.send_statements IS  NULL   THEN
4861       v_customer_profile_rec.send_statements :=
4862       l_profile_class_rec.statements;
4863    END IF;
4864    /* Bug Fix:2884220  Added "v_customer_profile_rec.send_statements='Y'" Condition
4865                        when initializing statement_cycle_id from hz_cust_profile_classes.
4866    */
4867    IF v_customer_profile_rec.send_statements='Y' and
4868       v_customer_profile_rec.statement_cycle_id IS NULL THEN
4869       v_customer_profile_rec.statement_cycle_id :=
4870       l_profile_class_rec.statement_cycle_id;
4871    END IF;
4872    IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4873       v_customer_profile_rec.credit_balance_statements :=
4874       l_profile_class_rec.credit_balance_statements;
4875    END IF;
4876 
4877    --  Bug 5400422 : default from profile class
4878    IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
4879       v_customer_profile_rec.late_charge_calculation_trx :=
4880       l_profile_class_rec.late_charge_calculation_trx;
4881    END IF;
4882 
4883 END IF;
4884 
4885 IF p_create_update_flag = 'U' AND
4886    v_customer_profile_rec.profile_class_id is null
4887 THEN
4888    IF v_customer_profile_rec.send_statements IS NULL   THEN
4889       v_customer_profile_rec.send_statements := l_send_statements;
4890    END IF;
4891    IF v_customer_profile_rec.statement_cycle_id IS NULL THEN
4892       v_customer_profile_rec.statement_cycle_id := l_statement_cycle_id;
4893    END IF;
4894    IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4895       v_customer_profile_rec.credit_balance_statements := l_credit_balance_statements;
4896    END IF;
4897 END IF;
4898 
4899 IF v_customer_profile_rec.send_statements = 'Y' THEN
4900       IF v_customer_profile_rec.statement_cycle_id = FND_API.G_MISS_NUM OR
4901          v_customer_profile_rec.statement_cycle_id IS NULL
4902       THEN
4903             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4904             FND_MESSAGE.SET_TOKEN( 'COLUMN1','send_statements');
4905             FND_MESSAGE.SET_TOKEN( 'VALUE1','Y');
4906             FND_MESSAGE.SET_TOKEN( 'COLUMN2','statement_cycle_id');
4907             FND_MSG_PUB.ADD;
4908             x_return_status := FND_API.G_RET_STS_ERROR;
4909 
4910             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4911                    hz_utility_v2pub.debug(p_message=>'statement_cycle_id cannot be NULL when send_statements
4912                                                  is Y.' || 'x_return_status = ' || x_return_status,
4913                                   p_prefix =>l_debug_prefix,
4914                                   p_msg_level=>fnd_log.level_statement);
4915              END IF;
4916 
4917        END IF;
4918        IF  v_customer_profile_rec.credit_balance_statements IS NULL THEN
4919             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4920             FND_MESSAGE.SET_TOKEN( 'COLUMN1','send_statements');
4921             FND_MESSAGE.SET_TOKEN( 'VALUE1','Y');
4922             FND_MESSAGE.SET_TOKEN( 'COLUMN2','credit_balance_statements');
4923             FND_MSG_PUB.ADD;
4924             x_return_status := FND_API.G_RET_STS_ERROR;
4925 
4926             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4927                  hz_utility_v2pub.debug(p_message=>'credit_balance_statements cannot be NULL when
4928                                            send_statements is Y .' || 'x_return_status = ' ||
4929                                            x_return_status,
4930                                   p_prefix =>l_debug_prefix,
4931                                   p_msg_level=>fnd_log.level_statement);
4932             END IF;
4933 
4934         END IF;
4935 END IF;
4936 
4937 IF v_customer_profile_rec.send_statements = 'N' OR
4938       v_customer_profile_rec.send_statements IS NULL
4939 THEN
4940         IF v_customer_profile_rec.statement_cycle_id >= 0 AND
4941            v_customer_profile_rec.statement_cycle_id <> FND_API.G_MISS_NUM
4942         THEN
4943             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4944             FND_MESSAGE.SET_TOKEN('COLUMN1', 'send_statements');
4945             FND_MESSAGE.SET_TOKEN('VALUE1', 'N');
4946             FND_MESSAGE.SET_TOKEN('COLUMN2','statement_cycle_id');
4947             FND_MESSAGE.SET_TOKEN('VALUE2', 'NULL');
4948             FND_MSG_PUB.ADD;
4949             x_return_status := FND_API.G_RET_STS_ERROR;
4950 
4951             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4952                    hz_utility_v2pub.debug(p_message=>'statement_cycle_id should be NULL when send_statements
4953                                                          is N .' || 'x_return_status = ' || x_return_status,
4954                                   p_prefix =>l_debug_prefix,
4955                                   p_msg_level=>fnd_log.level_statement);
4956             END IF;
4957 
4958         END IF;
4959         IF v_customer_profile_rec.credit_balance_statements <> 'N' AND
4960            v_customer_profile_rec.credit_balance_statements IS NOT NULL
4961         THEN
4962             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4963             FND_MESSAGE.SET_TOKEN('COLUMN1','send_statements');
4964             FND_MESSAGE.SET_TOKEN('VALUE1','N');
4965             FND_MESSAGE.SET_TOKEN('COLUMN2','credit_balance_statements');
4966             FND_MESSAGE.SET_TOKEN('VALUE2','N');
4967             FND_MSG_PUB.ADD;
4968             x_return_status := FND_API.G_RET_STS_ERROR;
4969 
4970             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4971                  hz_utility_v2pub.debug(p_message=>'credit_balance_statements should be N when send_statements
4972                                               is N .' || 'x_return_status = ' || x_return_status,
4973                                   p_prefix =>l_debug_prefix,
4974                                   p_msg_level=>fnd_log.level_statement);
4975             END IF;
4976 
4977         END IF;
4978 END IF;
4979 
4980     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4981            hz_utility_v2pub.debug(p_message=>'(+) after validate send_statements ... ' ||
4982                                  'x_return_status = ' || x_return_status,
4983                                   p_prefix =>l_debug_prefix,
4984                                   p_msg_level=>fnd_log.level_statement);
4985     END IF;
4986 
4987 
4988 
4989     --------------------------------------------------
4990     ------------*** interest_charges ***--------------
4991     --------------------------------------------------
4992 
4993 IF p_create_update_flag = 'C' OR
4994    ( p_create_update_flag = 'U' AND
4995      v_customer_profile_rec.profile_class_id is not null AND
4996      v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM )
4997 THEN
4998 
4999    IF v_customer_profile_rec.interest_charges  IS NULL   THEN
5000       v_customer_profile_rec.interest_charges :=
5001       l_profile_class_rec.interest_charges;
5002    END IF;
5003    /* Bug Fix:2884220  Added "v_customer_profile_rec.interest_charges='Y'" Condition
5004                        when initializing interest_period_days from hz_cust_profile_classes.
5005    */
5006    IF v_customer_profile_rec.interest_charges='Y' and
5007        v_customer_profile_rec.interest_period_days IS NULL THEN
5008       v_customer_profile_rec.interest_period_days :=
5009       l_profile_class_rec.interest_period_days;
5010    END IF;
5011    IF v_customer_profile_rec.charge_on_finance_charge_flag IS  NULL THEN
5012       v_customer_profile_rec.charge_on_finance_charge_flag :=
5013       l_profile_class_rec.charge_on_finance_charge_flag;
5014    END IF;
5015 
5016    --  Bug 5400422 : Defalut from profile classes
5017    IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
5018       v_customer_profile_rec.late_charge_calculation_trx :=
5019       l_profile_class_rec.late_charge_calculation_trx;
5020    END IF;
5021 
5022 END IF;
5023 
5024 IF p_create_update_flag = 'U' AND
5025    v_customer_profile_rec.profile_class_id is null
5026 THEN
5027    IF v_customer_profile_rec.interest_charges  IS NULL  THEN
5028       v_customer_profile_rec.interest_charges := l_interest_charges;
5029    END IF;
5030    IF v_customer_profile_rec.interest_period_days IS NULL THEN
5031       v_customer_profile_rec.interest_period_days := l_interest_period_days;
5032    END IF;
5033    IF v_customer_profile_rec.charge_on_finance_charge_flag IS NULL THEN
5034       v_customer_profile_rec.charge_on_finance_charge_flag :=
5035       l_finance_charge_flag;
5036    END IF;
5037    --  Bug 5400422 : Defalut from existing record
5038    IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
5039       v_customer_profile_rec.late_charge_calculation_trx :=
5040       l_late_charge_calculation_trx;
5041    END IF;
5042 
5043 END IF;
5044 
5045 IF v_customer_profile_rec.interest_charges = 'Y' THEN
5046 --  Bug 5400422 : Validate only for few late_charge_calculation_trx
5047   IF v_customer_profile_rec.late_charge_calculation_trx IN
5048      ('LATE', 'OVERDUE_LATE', 'OVERDUE') THEN
5049       IF v_customer_profile_rec.interest_period_days = FND_API.G_MISS_NUM OR
5050          v_customer_profile_rec.interest_period_days IS  NULL
5051       THEN
5052             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_INT_CHARGES_Y' );
5053             FND_MSG_PUB.ADD;
5054             x_return_status := FND_API.G_RET_STS_ERROR;
5055          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5056              hz_utility_v2pub.debug(p_message=>'interest_period_days cannot be NULL when interest_charges is Y.' || 'x_return_status = ' || x_return_status,
5057                                   p_prefix =>l_debug_prefix,
5058                                   p_msg_level=>fnd_log.level_statement);
5059          END IF;
5060 
5061        END IF;
5062   END IF;
5063     /* Commented the mandatory check for 2125994.
5064         validate_mandatory (
5065             p_create_update_flag     => p_create_update_flag,
5066             p_column                 => 'charge_on_finance_charge_flag',
5067             p_column_value           => v_customer_profile_rec.charge_on_finance_charge_flag,
5068             x_return_status          => x_return_status );
5069 
5070 
5071         IF G_DEBUG THEN
5072             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5073                 'charge_on_finance_charge_flag is mandatory. ' ||
5074                 'x_return_status = ' || x_return_status, l_debug_prefix );
5075         END IF;
5076     */
5077 END IF;
5078 /*
5079 -- This validation is removed for based on bug # 5190290
5080 -- Confirmed from AR team that, by removing this validation, there is no
5081 -- impact on AR setup forms and there is no impact on AR late charges calculation.
5082 IF v_customer_profile_rec.interest_charges = 'N' OR
5083    v_customer_profile_rec.interest_charges IS NULL
5084 THEN
5085        IF v_customer_profile_rec.interest_period_days >= 0 AND
5086           v_customer_profile_rec.interest_period_days <> FND_API.G_MISS_NUM
5087        THEN
5088             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5089             FND_MESSAGE.SET_TOKEN( 'COLUMN1','interest_charges');
5090             FND_MESSAGE.SET_TOKEN( 'VALUE1','N');
5091             FND_MESSAGE.SET_TOKEN( 'COLUMN2','interest_period_days');
5092             FND_MESSAGE.SET_TOKEN( 'VALUE2','NULL');
5093             FND_MSG_PUB.ADD;
5094             x_return_status := FND_API.G_RET_STS_ERROR;
5095 
5096             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5097                 hz_utility_v2pub.debug(p_message=>'Interest_period_days should be NULL when interest_charges
5098                                                    is N .' || 'x_return_status = ' || x_return_status,
5099                                   p_prefix =>l_debug_prefix,
5100                                   p_msg_level=>fnd_log.level_statement);
5101             END IF;
5102 
5103         END IF;
5104         IF v_customer_profile_rec.charge_on_finance_charge_flag  = 'Y'
5105         THEN
5106             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5107             FND_MESSAGE.SET_TOKEN( 'COLUMN1','interest_charges');
5108             FND_MESSAGE.SET_TOKEN( 'VALUE1','N');
5109             FND_MESSAGE.SET_TOKEN( 'COLUMN2','charge_on_finance_charge_flag');
5110             FND_MESSAGE.SET_TOKEN( 'VALUE2','N');
5111             FND_MSG_PUB.ADD;
5112             x_return_status := FND_API.G_RET_STS_ERROR;
5113 
5114             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5115                    hz_utility_v2pub.debug(p_message=>'charge_on_finance_charge_flag cannot be Y when
5116                                       interest_charges is N .' || 'x_return_status ='
5117                                       || x_return_status,
5118                                   p_prefix =>l_debug_prefix,
5119                                   p_msg_level=>fnd_log.level_statement);
5120             END IF;
5121 
5122         END IF;
5123 END IF;
5124 */
5125        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5126            hz_utility_v2pub.debug(p_message=>'(+) after validate interest_charges ... ' ||
5127                                           'x_return_status = ' || x_return_status,
5128                                   p_prefix =>l_debug_prefix,
5129                                   p_msg_level=>fnd_log.level_statement);
5130        END IF;
5131 
5132 -----------------------------------------------------------------------
5133 --                          Credit_classification
5134 -----------------------------------------------------------------------
5135 -- Validate lookup_code of the CREDIT_CLASSIFICATION
5136     IF p_customer_profile_rec.credit_classification IS NOT NULL AND
5137        p_customer_profile_rec.credit_classification <> FND_API.G_MISS_CHAR AND
5138        ( p_create_update_flag = 'C' OR
5139          ( p_create_update_flag = 'U'  AND
5140            p_customer_profile_rec.credit_classification <> NVL( l_credit_classification, FND_API.G_MISS_CHAR ) ) )
5141     THEN
5142         validate_lookup (
5143             p_column                                => 'credit_classification',
5144             p_lookup_table                          => 'AR_LOOKUPS',
5145             p_lookup_type                           => 'AR_CMGT_CREDIT_CLASSIFICATION',
5146             p_column_value                          => p_customer_profile_rec.credit_classification,
5147             x_return_status                         => x_return_status );
5148 
5149         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5150            hz_utility_v2pub.debug(p_message=>'credit_classification is lookup code in lookup type AR_CMGT_CREDIT_CLASSIFICATION in ar_lookups. ' ||
5151                      'x_return_status = ' || x_return_status,
5152                                   p_prefix =>l_debug_prefix,
5153                                   p_msg_level=>fnd_log.level_statement);
5154         END IF;
5155 
5156 
5157     END IF;
5158 
5159 
5160     -- Debug info.
5161 
5162     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5163         hz_utility_v2pub.debug(p_message=>'validate_customer_profile (-)',
5164                                p_prefix=>l_debug_prefix,
5165                                p_msg_level=>fnd_log.level_procedure);
5166     END IF;
5167 
5168 
5169     ----------------------------------------------
5170     -- validate LATE_CHARGE_CALCULATION_TRX
5171     ----------------------------------------------
5172 
5173     -- LATE_CHARGE_CALCULATION_TRX is lookup code in lookup type AR_MANDATORY_LATE_CHARGES
5174     IF p_customer_profile_rec.late_charge_calculation_trx IS NOT NULL AND
5175        p_customer_profile_rec.late_charge_calculation_trx <> FND_API.G_MISS_CHAR AND
5176         ( p_create_update_flag = 'C' OR
5177           ( p_create_update_flag = 'U'  AND
5178             p_customer_profile_rec.late_charge_calculation_trx <> NVL( l_late_charge_calculation_trx, FND_API.G_MISS_CHAR ) ) )
5179     THEN
5180         validate_lookup (
5181             p_column                                => 'late_charge_calculation_trx',
5182             p_lookup_type                           => 'AR_MANDATORY_LATE_CHARGES',
5183             p_column_value                          => p_customer_profile_rec.late_charge_calculation_trx,
5184             x_return_status                         => x_return_status );
5185 
5186         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5187            hz_utility_v2pub.debug(p_message=>'late_charge_calculation_trx is lookup code in lookup type AR_MANDATORY_LATE_CHARGES. ' ||
5188                 'x_return_status = ' || x_return_status,
5189                                   p_prefix =>l_debug_prefix,
5190                                   p_msg_level=>fnd_log.level_statement);
5191         END IF;
5192 
5193     END IF;
5194 
5195     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5196            hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_calculation_trx ... ' ||
5197             'x_return_status = ' || x_return_status,
5198                                   p_prefix =>l_debug_prefix,
5199                                   p_msg_level=>fnd_log.level_statement);
5200     END IF;
5201 
5202     ----------------------------------------------
5203     -- validate CREDIT_ITEMS_FLAG
5204     ----------------------------------------------
5205 
5206     -- CREDIT_ITEMS_FLAG is lookup code in lookup type YES/NO
5207     IF p_customer_profile_rec.credit_items_flag IS NOT NULL AND
5208        p_customer_profile_rec.credit_items_flag <> FND_API.G_MISS_CHAR
5209        AND ( p_create_update_flag = 'C' OR
5210          ( p_create_update_flag = 'U'  AND
5211            p_customer_profile_rec.credit_items_flag <> NVL( l_credit_items_flag, FND_API.G_MISS_CHAR ) ) )
5212     THEN
5213         validate_lookup (
5214             p_column                                => 'credit_items_flag',
5215             p_lookup_type                           => 'YES/NO',
5216             p_column_value                          => p_customer_profile_rec.credit_items_flag,
5217             x_return_status                         => x_return_status );
5218 
5219 
5220         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5221            hz_utility_v2pub.debug(p_message=>'credit_items_flag is lookup code in lookup type YES/NO. ' ||
5222                            'x_return_status = ' || x_return_status,
5223                                   p_prefix =>l_debug_prefix,
5224                                   p_msg_level=>fnd_log.level_statement);
5225         END IF;
5226 
5227     END IF;
5228 
5229     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5230            hz_utility_v2pub.debug(p_message=>'(+) after validate credit_items_flag ... ' ||
5231             'x_return_status = ' || x_return_status,
5232                                   p_prefix =>l_debug_prefix,
5233                                   p_msg_level=>fnd_log.level_statement);
5234     END IF;
5235 
5236     ----------------------------------------------
5237     -- validate DISPUTED_TRANSACTIONS_FLAG
5238     ----------------------------------------------
5239 
5240     -- DISPUTED_TRANSACTIONS_FLAG is lookup code in lookup type YES/NO
5241     IF p_customer_profile_rec.disputed_transactions_flag IS NOT NULL AND
5242        p_customer_profile_rec.disputed_transactions_flag <> FND_API.G_MISS_CHAR
5243        AND ( p_create_update_flag = 'C' OR
5244          ( p_create_update_flag = 'U'  AND
5245            p_customer_profile_rec.disputed_transactions_flag <> NVL( l_disputed_transactions_flag, FND_API.G_MISS_CHAR ) ) )
5246     THEN
5247         validate_lookup (
5248             p_column                                => 'disputed_transactions_flag',
5249             p_lookup_type                           => 'YES/NO',
5250             p_column_value                          => p_customer_profile_rec.disputed_transactions_flag,
5251             x_return_status                         => x_return_status );
5252 
5253 
5254         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5255            hz_utility_v2pub.debug(p_message=>'disputed_transactions_flag is lookup code in lookup type YES/NO. ' ||
5256                            'x_return_status = ' || x_return_status,
5257                                   p_prefix =>l_debug_prefix,
5258                                   p_msg_level=>fnd_log.level_statement);
5259         END IF;
5260 
5261     END IF;
5262 
5263     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5264            hz_utility_v2pub.debug(p_message=>'(+) after validate disputed_transactions_flag ... ' ||
5265             'x_return_status = ' || x_return_status,
5266                                   p_prefix =>l_debug_prefix,
5267                                   p_msg_level=>fnd_log.level_statement);
5268     END IF;
5269 
5270     ----------------------------------------------
5271     -- validate LATE_CHARGE_TYPE
5272     ----------------------------------------------
5273 
5274     -- LATE_CHARGE_TYPE is lookup code in lookup type AR_LATE_CHARGE_TYPE
5275     IF p_customer_profile_rec.late_charge_type IS NOT NULL AND
5276        p_customer_profile_rec.late_charge_type <> FND_API.G_MISS_CHAR AND
5277         ( p_create_update_flag = 'C' OR
5278           ( p_create_update_flag = 'U'  AND
5279             p_customer_profile_rec.late_charge_type <> NVL( l_late_charge_type, FND_API.G_MISS_CHAR ) ) )
5280     THEN
5281         validate_lookup (
5282             p_column                                => 'late_charge_type',
5283             p_lookup_type                           => 'AR_LATE_CHARGE_TYPE',
5284             p_column_value                          => p_customer_profile_rec.late_charge_type,
5285             x_return_status                         => x_return_status );
5286 
5287         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5288            hz_utility_v2pub.debug(p_message=>'late_charge_type is lookup code in lookup type AR_LATE_CHARGE_TYPE. ' ||
5289                 'x_return_status = ' || x_return_status,
5290                                   p_prefix =>l_debug_prefix,
5291                                   p_msg_level=>fnd_log.level_statement);
5292         END IF;
5293 
5294     END IF;
5295 
5296     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5297            hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_type ... ' ||
5298             'x_return_status = ' || x_return_status,
5299                                   p_prefix =>l_debug_prefix,
5300                                   p_msg_level=>fnd_log.level_statement);
5301     END IF;
5302 
5303     ----------------------------------------------
5304     -- validate INTEREST_CALCULATION_PERIOD
5305     ----------------------------------------------
5306 
5307     -- INTEREST_CALCULATION_PERIOD is lookup code in lookup type AR_CALCULATION_PERIOD
5308     IF p_customer_profile_rec.interest_calculation_period IS NOT NULL AND
5309        p_customer_profile_rec.interest_calculation_period <> FND_API.G_MISS_CHAR AND
5310         ( p_create_update_flag = 'C' OR
5311           ( p_create_update_flag = 'U'  AND
5312             p_customer_profile_rec.interest_calculation_period <> NVL( l_interest_calculation_period, FND_API.G_MISS_CHAR ) ) )
5313     THEN
5314         validate_lookup (
5315             p_column                                => 'interest_calculation_period',
5316             p_lookup_type                           => 'AR_CALCULATION_PERIOD',
5317             p_column_value                          => p_customer_profile_rec.interest_calculation_period,
5318             x_return_status                         => x_return_status );
5319 
5320         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5321            hz_utility_v2pub.debug(p_message=>'interest_calculation_period is lookup code in lookup type AR_CALCULATION_PERIOD. ' ||
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     END IF;
5328 
5329     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5330            hz_utility_v2pub.debug(p_message=>'(+) after validate interest_calculation_period ... ' ||
5331             'x_return_status = ' || x_return_status,
5332                                   p_prefix =>l_debug_prefix,
5333                                   p_msg_level=>fnd_log.level_statement);
5334     END IF;
5335 
5336     ----------------------------------------------
5337     -- validate HOLD_CHARGED_INVOICES_FLAG
5338     ----------------------------------------------
5339 
5340     -- HOLD_CHARGED_INVOICES_FLAG is lookup code in lookup type YES/NO
5341     IF p_customer_profile_rec.hold_charged_invoices_flag IS NOT NULL AND
5342        p_customer_profile_rec.hold_charged_invoices_flag <> FND_API.G_MISS_CHAR
5343        AND ( p_create_update_flag = 'C' OR
5344          ( p_create_update_flag = 'U'  AND
5345            p_customer_profile_rec.hold_charged_invoices_flag <> NVL( l_hold_charged_invoices_flag, FND_API.G_MISS_CHAR ) ) )
5346     THEN
5347         validate_lookup (
5348             p_column                                => 'hold_charged_invoices_flag',
5349             p_lookup_type                           => 'YES/NO',
5350             p_column_value                          => p_customer_profile_rec.hold_charged_invoices_flag,
5351             x_return_status                         => x_return_status );
5352 
5353 
5354         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5355            hz_utility_v2pub.debug(p_message=>'hold_charged_invoices_flag is lookup code in lookup type YES/NO. ' ||
5356                            'x_return_status = ' || x_return_status,
5357                                   p_prefix =>l_debug_prefix,
5358                                   p_msg_level=>fnd_log.level_statement);
5359         END IF;
5360 
5361     END IF;
5362 
5363     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5364            hz_utility_v2pub.debug(p_message=>'(+) after validate hold_charged_invoices_flag ... ' ||
5365             'x_return_status = ' || x_return_status,
5366                                   p_prefix =>l_debug_prefix,
5367                                   p_msg_level=>fnd_log.level_statement);
5368     END IF;
5369 
5370     ----------------------------------------------
5371     -- validate MULTIPLE_INTEREST_RATES_FLAG
5372     ----------------------------------------------
5373 
5374     -- MULTIPLE_INTEREST_RATES_FLAG is lookup code in lookup type YES/NO
5375     IF p_customer_profile_rec.multiple_interest_rates_flag IS NOT NULL AND
5376        p_customer_profile_rec.multiple_interest_rates_flag <> FND_API.G_MISS_CHAR
5377        AND ( p_create_update_flag = 'C' OR
5378          ( p_create_update_flag = 'U'  AND
5379            p_customer_profile_rec.multiple_interest_rates_flag <> NVL( l_multiple_interest_rates_flag, FND_API.G_MISS_CHAR ) ) )
5380     THEN
5381         validate_lookup (
5382             p_column                                => 'multiple_interest_rates_flag',
5383             p_lookup_type                           => 'YES/NO',
5384             p_column_value                          => p_customer_profile_rec.multiple_interest_rates_flag,
5385             x_return_status                         => x_return_status );
5386 
5387 
5388         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5389            hz_utility_v2pub.debug(p_message=>'multiple_interest_rates_flag is lookup code in lookup type YES/NO. ' ||
5390                            'x_return_status = ' || x_return_status,
5391                                   p_prefix =>l_debug_prefix,
5392                                   p_msg_level=>fnd_log.level_statement);
5393         END IF;
5394 
5395     END IF;
5396 
5397     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5398            hz_utility_v2pub.debug(p_message=>'(+) after validate multiple_interest_rates_flag ... ' ||
5399             'x_return_status = ' || x_return_status,
5400                                   p_prefix =>l_debug_prefix,
5401                                   p_msg_level=>fnd_log.level_statement);
5402     END IF;
5403 
5404     ------------------------------------
5405     -- validate late_charge_term_id
5406     ------------------------------------
5407         -- 1. late_charge_term_id should be a valid value defined in RA_TERMS
5408         -- 2. Late charge payment term is required when late charge type is debit memo or interest invoice
5409 
5410         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
5411              (p_customer_profile_rec.late_charge_type = 'DM' OR
5412               p_customer_profile_rec.late_charge_type = 'INV')) OR
5413             ((p_customer_profile_rec.late_charge_type = 'ADJ') AND
5414              (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
5415                 -- Late charge payment term is required when
5416                 -- late charge type is debit memo or interest invoice
5417                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_LC_PAY_TERM' );
5418                 FND_MSG_PUB.ADD;
5419                 x_return_status := FND_API.G_RET_STS_ERROR;
5420         END IF;
5421 
5422         IF p_customer_profile_rec.late_charge_term_id is NOT NULL AND
5423            p_customer_profile_rec.late_charge_term_id <> FND_API.G_MISS_NUM
5424           AND ( p_create_update_flag = 'C' OR
5425            ( p_create_update_flag = 'U'  AND
5426             p_customer_profile_rec.late_charge_term_id <> NVL( l_late_charge_term_id, FND_API.G_MISS_NUM ) ) )
5427         THEN
5428             check_late_charge_term_id_fk(
5429                     p_column                                => 'payment_term_id',
5430                     p_column_value                          => p_customer_profile_rec.late_charge_term_id,
5431                     p_cons_inv_flag                         => p_customer_profile_rec.cons_inv_flag,
5432                     x_return_status                         => x_return_status );
5433 
5434             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5435                 hz_utility_v2pub.debug(p_message=>'late_charge_term_id should be a valid value defined in  RA_TERMS. '||
5436                   'x_return_status = ' || x_return_status,
5437                                   p_prefix =>l_debug_prefix,
5438                                   p_msg_level=>fnd_log.level_statement);
5439             END IF;
5440 
5441         END IF;
5442 
5443             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5444                    hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_term_id..' ||
5445                                                  'x_return_status = ' || x_return_status,
5446                                   p_prefix =>l_debug_prefix,
5447                                   p_msg_level=>fnd_log.level_statement);
5448             END IF;
5449 
5450     ------------------------------------
5451     -- validate message_text_id
5452     ------------------------------------
5453         -- 1. message_text_id should be a valid value defined in AR_STANDARD_TEXT
5454         -- 2. Message text can be entered only when late charge type is debit memo or interest invoice
5455 
5456         IF ((p_customer_profile_rec.late_charge_type = 'ADJ') AND
5457             (p_customer_profile_rec.message_text_id IS NOT NULL AND p_customer_profile_rec.message_text_id <> FND_API.G_MISS_NUM)) THEN
5458              -- Message text can be entered only when
5459              -- late charge type is debit memo or interest invoice
5460              FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_MSG_FOR_LC_TYPE' );
5461              FND_MSG_PUB.ADD;
5462              x_return_status := FND_API.G_RET_STS_ERROR;
5463         END IF;
5464 
5465         IF p_customer_profile_rec.message_text_id is NOT NULL AND
5466            p_customer_profile_rec.message_text_id <> FND_API.G_MISS_NUM
5467           AND ( p_create_update_flag = 'C' OR
5468            ( p_create_update_flag = 'U'  AND
5469             p_customer_profile_rec.message_text_id <> NVL( l_message_text_id, FND_API.G_MISS_NUM ) ) )
5470         THEN
5471 
5472             check_message_text_id_fk(
5473                     p_column                                => 'message_text_id',
5474                     p_column_value                          => p_customer_profile_rec.message_text_id,
5475                     x_return_status                         => x_return_status );
5476 
5477             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5478                 hz_utility_v2pub.debug(p_message=>'message_text_id should be a valid value defined in AR_STANDARD_TEXT. '||
5479                   'x_return_status = ' || x_return_status,
5480                                   p_prefix =>l_debug_prefix,
5481                                   p_msg_level=>fnd_log.level_statement);
5482             END IF;
5483 
5484         END IF;
5485 
5486         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5487                hz_utility_v2pub.debug(p_message=>'(+) after validate message_text_id..' ||
5488                                              'x_return_status = ' || x_return_status,
5489                               p_prefix =>l_debug_prefix,
5490                               p_msg_level=>fnd_log.level_statement);
5491         END IF;
5492 
5493     -- Check if API is called in debug mode. If yes, disable debug.
5494     --disable_debug;
5495 
5496 END validate_customer_profile;
5497 
5498 /**
5499  * PROCEDURE validate_cust_profile_amt
5500  *
5501  * DESCRIPTION
5502  *     Validates customer profile amount record. Checks for
5503  *         uniqueness
5504  *         lookup types
5505  *         mandatory columns
5506  *         non-updateable fields
5507  *         foreign key validations
5508  *         other validations
5509  *
5510  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
5511  *
5512  * ARGUMENTS
5513  *   IN:
5514  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
5515  *     p_check_foreign_key            If do foreign key checking on cust_account_id
5516  *                                    and cust_account_profile_id or not.
5517  *     p_cust_profile_amt_rec         Customer profile amount record.
5518  *     p_rowid                        Rowid of the record (used only in update mode).
5519  *   IN/OUT:
5520  *     x_return_status                Return status after the call. The status can
5521  *                                    be FND_API.G_RET_STS_SUCCESS (success),
5522  *                                    FND_API.G_RET_STS_ERROR (error),
5523  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
5524  *
5525  * NOTES
5526  *
5527  * MODIFICATION HISTORY
5528  *
5529  *   07-23-2001    Jianying Huang      o Created.
5530  *   11-08-2001    P.Suresh            * Bug Fix : 2001573. Validated overall_credit_limit.
5531  *                                       It should be greater or equal to trx_credit_limit.
5532  *
5533  */
5534 
5535 PROCEDURE validate_cust_profile_amt (
5536     p_create_update_flag                    IN     VARCHAR2,
5537     p_check_foreign_key                     IN     VARCHAR2,
5538     p_cust_profile_amt_rec                  IN     HZ_CUSTOMER_PROFILE_V2PUB.CUST_PROFILE_AMT_REC_TYPE,
5539     p_rowid                                 IN     ROWID,
5540     x_return_status                         IN OUT NOCOPY VARCHAR2
5541 ) IS
5542 
5543     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_profile_amt'
5544 
5545     l_dummy                                 VARCHAR2(1);
5546 
5547     l_cust_account_id                       NUMBER;
5548     l_site_use_id                           NUMBER;
5549     l_cust_account_profile_id               NUMBER;
5550     l_currency_code                         HZ_CUST_PROFILE_AMTS.currency_code%TYPE;
5551     l_created_by_module                     HZ_CUST_PROFILE_AMTS.created_by_module%TYPE;
5552     l_application_id                        NUMBER;
5553     l_overall_credit_limit                  HZ_CUST_PROFILE_AMTS.OVERALL_CREDIT_LIMIT%TYPE;
5554     l_trx_credit_limit                      HZ_CUST_PROFILE_AMTS.TRX_CREDIT_LIMIT%TYPE;
5555     --  Bug 4770111 : Added for CBM of customer profile
5556     l_prof_cbm HZ_CUST_PROFILE_AMTS.created_by_module%TYPE := 'TCA_V2_API';
5557 
5558     -- Added following variables for late charge policy project.
5559     v_cust_profile_amt_rec            HZ_CUSTOMER_PROFILE_V2PUB.CUST_PROFILE_AMT_REC_TYPE;
5560     l_min_fc_invoice_overdue_type     HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_OVERDUE_TYPE%TYPE;
5561     l_min_fc_balance_overdue_type     HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_OVERDUE_TYPE%TYPE;
5562     l_interest_type                   HZ_CUST_PROFILE_AMTS.INTEREST_TYPE%TYPE;
5563     l_penalty_type                    HZ_CUST_PROFILE_AMTS.PENALTY_TYPE%TYPE;
5564     l_exchange_rate_type              HZ_CUST_PROFILE_AMTS.EXCHANGE_RATE_TYPE%TYPE;
5565     l_min_fc_invoice_amount           HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_AMOUNT%TYPE;
5566     l_min_fc_invoice_percent          HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_PERCENT%TYPE;
5567     l_min_fc_balance_amount           HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_AMOUNT%TYPE;
5568     l_min_fc_balance_percent          HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_PERCENT%TYPE;
5569     l_interest_rate                   HZ_CUST_PROFILE_AMTS.INTEREST_RATE%TYPE;
5570     l_interest_fixed_amount           HZ_CUST_PROFILE_AMTS.INTEREST_FIXED_AMOUNT%TYPE;
5571     l_interest_schedule_id            HZ_CUST_PROFILE_AMTS.INTEREST_SCHEDULE_ID%TYPE;
5572     l_penalty_rate                    HZ_CUST_PROFILE_AMTS.PENALTY_RATE%TYPE;
5573     l_penalty_fixed_amount            HZ_CUST_PROFILE_AMTS.PENALTY_FIXED_AMOUNT%TYPE;
5574     l_penalty_schedule_id             HZ_CUST_PROFILE_AMTS.PENALTY_SCHEDULE_ID%TYPE;
5575 
5576 BEGIN
5577 
5578     -- Check if API is called in debug mode. If yes, enable debug.
5579     --enable_debug;
5580 
5581     -- Debug info.
5582 
5583     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5584         hz_utility_v2pub.debug(p_message=>'validate_cust_profile_amt (+)',
5585                                p_prefix=>l_debug_prefix,
5586                                p_msg_level=>fnd_log.level_procedure);
5587     END IF;
5588 
5589     v_cust_profile_amt_rec := p_cust_profile_amt_rec;
5590 
5591     -- Select fields for later use during update.
5592     IF p_create_update_flag = 'U' THEN
5593         SELECT CUST_ACCOUNT_ID, SITE_USE_ID,
5594                CUST_ACCOUNT_PROFILE_ID, CURRENCY_CODE,
5595                CREATED_BY_MODULE, APPLICATION_ID,
5596                OVERALL_CREDIT_LIMIT,TRX_CREDIT_LIMIT,
5597                MIN_FC_INVOICE_OVERDUE_TYPE, MIN_FC_BALANCE_OVERDUE_TYPE,
5598                INTEREST_TYPE, PENALTY_TYPE, EXCHANGE_RATE_TYPE,
5599                MIN_FC_INVOICE_AMOUNT, MIN_FC_INVOICE_PERCENT,
5600                MIN_FC_BALANCE_AMOUNT, MIN_FC_BALANCE_PERCENT,
5601                INTEREST_RATE, INTEREST_FIXED_AMOUNT, INTEREST_SCHEDULE_ID,
5602                PENALTY_RATE, PENALTY_FIXED_AMOUNT, PENALTY_SCHEDULE_ID
5603         INTO l_cust_account_id, l_site_use_id,
5604              l_cust_account_profile_id, l_currency_code,
5605              l_created_by_module, l_application_id,
5606              l_overall_credit_limit,l_trx_credit_limit,
5607              l_min_fc_invoice_overdue_type, l_min_fc_balance_overdue_type,
5608              l_interest_type, l_penalty_type, l_exchange_rate_type,
5609              l_min_fc_invoice_amount, l_min_fc_invoice_percent,
5610              l_min_fc_balance_amount, l_min_fc_balance_percent,
5611              l_interest_rate, l_interest_fixed_amount, l_interest_schedule_id,
5612              l_penalty_rate, l_penalty_fixed_amount, l_penalty_schedule_id
5613         FROM HZ_CUST_PROFILE_AMTS
5614         WHERE ROWID = p_rowid;
5615     END IF;
5616 
5617     --------------------------------------
5618     -- validate cust_acct_profile_amt_id
5619     --------------------------------------
5620 /****Logical APIs - validation not required****/
5621   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5622     IF p_create_update_flag = 'C' THEN
5623 
5624         -- If primary key value is passed, check for uniqueness.
5625         -- If primary key value is not passed, it will be generated
5626         -- from sequence by table handler.
5627 
5628         IF p_cust_profile_amt_rec.cust_acct_profile_amt_id IS NOT NULL AND
5629            p_cust_profile_amt_rec.cust_acct_profile_amt_id <> FND_API.G_MISS_NUM
5630         THEN
5631         BEGIN
5632             SELECT 'Y' INTO l_dummy
5633             FROM HZ_CUST_PROFILE_AMTS
5634             WHERE CUST_ACCT_PROFILE_AMT_ID = p_cust_profile_amt_rec.cust_acct_profile_amt_id;
5635 
5636             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
5637             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_profile_amt_id' );
5638             FND_MSG_PUB.ADD;
5639             x_return_status := FND_API.G_RET_STS_ERROR;
5640         EXCEPTION
5641             WHEN NO_DATA_FOUND THEN
5642                 NULL;
5643         END;
5644 
5645         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5646            hz_utility_v2pub.debug(p_message=>'cust_acct_profile_amt_id is unique during creation if passed in. ' ||
5647                                 'x_return_status = ' || x_return_status,
5648                                   p_prefix =>l_debug_prefix,
5649                                   p_msg_level=>fnd_log.level_statement);
5650         END IF;
5651         END IF;
5652     END IF;
5653 
5654     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5655            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_profile_amt_id ... ' ||
5656                                 'x_return_status = ' || x_return_status,
5657                                   p_prefix =>l_debug_prefix,
5658                                   p_msg_level=>fnd_log.level_statement);
5659     END IF;
5660   END IF;
5661 
5662     ----------------------------------------------
5663     -- validate cust_account_profile_id
5664     ----------------------------------------------
5665 /****Logical APIs - validation not required****/
5666   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5667     -- cust_account_profile_id is mandatory field
5668     -- Since cust_account_profile_id is non-updateable, we only need to check mandatory
5669     -- during creation.
5670 
5671     IF p_create_update_flag = 'C' THEN
5672         validate_mandatory (
5673             p_create_update_flag                    => p_create_update_flag,
5674             p_column                                => 'cust_account_profile_id',
5675             p_column_value                          => p_cust_profile_amt_rec.cust_account_profile_id,
5676             x_return_status                         => x_return_status );
5677 
5678         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5679            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is mandatory. ' ||
5680                                                  'x_return_status = ' || x_return_status,
5681                                   p_prefix =>l_debug_prefix,
5682                                   p_msg_level=>fnd_log.level_statement);
5683         END IF;
5684     END IF;
5685 
5686     -- cust_account_profile_id is non-updateable field
5687     IF p_create_update_flag = 'U' AND
5688        p_cust_profile_amt_rec.cust_account_profile_id IS NOT NULL
5689     THEN
5690         validate_nonupdateable (
5691             p_column                                => 'cust_account_profile_id',
5692             p_column_value                          => p_cust_profile_amt_rec.cust_account_profile_id,
5693             p_old_column_value                      => l_cust_account_profile_id,
5694             x_return_status                         => x_return_status );
5695 
5696         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5697            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is non-updateable. ' ||
5698                                   'x_return_status = ' || x_return_status,
5699                                   p_prefix =>l_debug_prefix,
5700                                   p_msg_level=>fnd_log.level_statement);
5701         END IF;
5702     END IF;
5703 
5704     -- cust_account_profile_id is foreign key to hz_customer_profiles
5705     -- Since cust_account_profile_id is mandatory and non-updateable,
5706     -- we only need to check FK during creation.
5707 
5708 
5709     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5710            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id = ' || p_cust_profile_amt_rec.cust_account_profile_id || ' ' ||
5711                                         'x_return_status = ' || x_return_status,
5712                                   p_prefix =>l_debug_prefix,
5713                                   p_msg_level=>fnd_log.level_statement);
5714     END IF;
5715 
5716     IF p_create_update_flag = 'C' AND
5717        p_check_foreign_key = FND_API.G_TRUE AND
5718        p_cust_profile_amt_rec.cust_account_profile_id IS NOT NULL AND
5719        p_cust_profile_amt_rec.cust_account_profile_id <> FND_API.G_MISS_NUM
5720     THEN
5721     BEGIN
5722         -- select cust_account_id, site_use_id for later cross reference checking
5723         --  Bug 4770111 : select created_by_module also
5724 
5725         SELECT CUST_ACCOUNT_ID, SITE_USE_ID, CREATED_BY_MODULE
5726         INTO l_cust_account_id, l_site_use_id, l_prof_cbm
5727         FROM HZ_CUSTOMER_PROFILES
5728         WHERE CUST_ACCOUNT_PROFILE_ID = p_cust_profile_amt_rec.cust_account_profile_id;
5729 
5730     EXCEPTION
5731         WHEN NO_DATA_FOUND THEN
5732             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
5733             FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_profile_id' );
5734             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id' );
5735             FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_customer_profiles' );
5736             FND_MSG_PUB.ADD;
5737             x_return_status := FND_API.G_RET_STS_ERROR;
5738     END;
5739 
5740     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5741            hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is foreign key to hz_customer_profiles. ' ||
5742                                                   'x_return_status = ' || x_return_status,
5743                                   p_prefix =>l_debug_prefix,
5744                                   p_msg_level=>fnd_log.level_statement);
5745     END IF;
5746 
5747     END IF;
5748 
5749     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5750            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_profile_id ... ' ||
5751                                                 'x_return_status = ' || x_return_status,
5752                                   p_prefix =>l_debug_prefix,
5753                                   p_msg_level=>fnd_log.level_statement);
5754     END IF;
5755   END IF;
5756 
5757     ----------------------------------------------
5758     -- validate cust_account_id
5759     ----------------------------------------------
5760 /****Logical APIs - validation not required****/
5761   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5762     -- cust_account_id is mandatory field
5763     -- Since cust_account_id is non-updateable, we only need to check mandatory
5764     -- during creation.
5765 
5766     IF p_create_update_flag = 'C' THEN
5767         validate_mandatory (
5768             p_create_update_flag                    => p_create_update_flag,
5769             p_column                                => 'cust_account_id',
5770             p_column_value                          => p_cust_profile_amt_rec.cust_account_id,
5771             x_return_status                         => x_return_status );
5772 
5773         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5774            hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
5775                  'x_return_status = ' || x_return_status,
5776                                   p_prefix =>l_debug_prefix,
5777                                   p_msg_level=>fnd_log.level_statement);
5778         END IF;
5779     END IF;
5780 
5781     -- cust_account_id is non-updateable field
5782     IF p_create_update_flag = 'U' AND
5783        p_cust_profile_amt_rec.cust_account_id IS NOT NULL
5784     THEN
5785         validate_nonupdateable (
5786             p_column                                => 'cust_account_id',
5787             p_column_value                          => p_cust_profile_amt_rec.cust_account_id,
5788             p_old_column_value                      => l_cust_account_id,
5789             x_return_status                         => x_return_status );
5790 
5791         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5792            hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
5793                                                 'x_return_status = ' || x_return_status,
5794                                   p_prefix =>l_debug_prefix,
5795                                   p_msg_level=>fnd_log.level_statement);
5796         END IF;
5797     END IF;
5798 
5799     -- cust_account_id is foreign key to hz_cust_accounts
5800     -- Since cust_account_id is mandatory and non-updateable,
5801     -- we only need to check FK during creation.
5802 
5803     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5804            hz_utility_v2pub.debug(p_message=>'cust_account_id = ' || p_cust_profile_amt_rec.cust_account_id || ' ' ||
5805                                            'x_return_status = ' || x_return_status,
5806                                   p_prefix =>l_debug_prefix,
5807                                   p_msg_level=>fnd_log.level_statement);
5808     END IF;
5809 
5810     IF p_create_update_flag = 'C' AND
5811        p_check_foreign_key = FND_API.G_TRUE AND
5812        p_cust_profile_amt_rec.cust_account_id IS NOT NULL AND
5813        p_cust_profile_amt_rec.cust_account_id <> FND_API.G_MISS_NUM
5814     THEN
5815         check_cust_account_fk (
5816             p_column                                 => 'cust_account_id',
5817             p_column_value                           => p_cust_profile_amt_rec.cust_account_id,
5818             x_return_status                          => x_return_status );
5819 
5820         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5821            hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
5822                                                 'x_return_status = ' || x_return_status,
5823                                   p_prefix =>l_debug_prefix,
5824                                   p_msg_level=>fnd_log.level_statement);
5825         END IF;
5826 
5827         -- cross reference checking
5828 
5829         IF p_cust_profile_amt_rec.cust_account_id <> l_cust_account_id THEN
5830             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_PROF_AMT_IDS_MISMATCH' );
5831             FND_MESSAGE.SET_TOKEN( 'ENTITY', 'customer' );
5832             FND_MSG_PUB.ADD;
5833             x_return_status := FND_API.G_RET_STS_ERROR;
5834         END IF;
5835 
5836         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5837            hz_utility_v2pub.debug(p_message=>'cust_account_id should be the same as cust_account_id in corresponding customer profile. ' ||
5838                                   'x_return_status = ' || x_return_status,
5839                                   p_prefix =>l_debug_prefix,
5840                                   p_msg_level=>fnd_log.level_statement);
5841         END IF;
5842 
5843     END IF;
5844 
5845     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5846            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
5847                                                  'x_return_status = ' || x_return_status,
5848                                   p_prefix =>l_debug_prefix,
5849                                   p_msg_level=>fnd_log.level_statement);
5850     END IF;
5851   END IF;
5852 
5853     ----------------------------------------------
5854     -- validate currency_code
5855     ----------------------------------------------
5856 
5857     -- currency_code is mandatory field
5858     -- Since currency_code is non-updateable, we only need to check mandatory
5859     -- during creation.
5860 
5861     IF p_create_update_flag = 'C' THEN
5862         validate_mandatory (
5863             p_create_update_flag                    => p_create_update_flag,
5864             p_column                                => 'currency_code',
5865             p_column_value                          => p_cust_profile_amt_rec.currency_code,
5866             x_return_status                         => x_return_status );
5867 
5868         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5869            hz_utility_v2pub.debug(p_message=>'currency_code is mandatory. ' ||
5870                                         'x_return_status = ' || x_return_status,
5871                                   p_prefix =>l_debug_prefix,
5872                                   p_msg_level=>fnd_log.level_statement);
5873         END IF;
5874     END IF;
5875 
5876     -- currency_code is non-updateable field
5877     IF p_create_update_flag = 'U' AND
5878        p_cust_profile_amt_rec.currency_code IS NOT NULL
5879     THEN
5880         validate_nonupdateable (
5881             p_column                                => 'currency_code',
5882             p_column_value                          => p_cust_profile_amt_rec.currency_code,
5883             p_old_column_value                      => l_currency_code,
5884             x_return_status                         => x_return_status );
5885 
5886         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5887             hz_utility_v2pub.debug(p_message=>'currency_code is non-updateable. ' ||
5888                                                  'x_return_status = ' || x_return_status,
5889                                   p_prefix =>l_debug_prefix,
5890                                   p_msg_level=>fnd_log.level_statement);
5891         END IF;
5892     END IF;
5893 
5894     -- currency_code is foreign key to fnd_currencies
5895     -- Since currency_code is mandatory and non-updateable,
5896     -- we only need to check FK during creation.
5897 
5898     IF p_create_update_flag = 'C' AND
5899        p_cust_profile_amt_rec.currency_code IS NOT NULL AND
5900        p_cust_profile_amt_rec.currency_code <> FND_API.G_MISS_CHAR
5901     THEN
5902         check_currency_fk (
5903             p_column                                => 'currency_code',
5904             p_column_value                          => p_cust_profile_amt_rec.currency_code,
5905             x_return_status                         => x_return_status );
5906 
5907         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5908            hz_utility_v2pub.debug(p_message=>'currency_code is foreign key to fnd_currencies. ' ||
5909                                  'x_return_status = ' || x_return_status,
5910                                   p_prefix =>l_debug_prefix,
5911                                   p_msg_level=>fnd_log.level_statement);
5912         END IF;
5913     END IF;
5914 
5915     -- For a given cust_account_profile_id and currency_code, only one
5916     -- record of the profile amount is allowed.
5917     -- Since cust_account_profile_id and currency_code are mandatory
5918     -- and non-updateable columns, we only need to do the checking
5919     -- during creation.
5920 
5921     IF p_create_update_flag = 'C' THEN
5922     BEGIN
5923         SELECT 'Y' INTO l_dummy
5924         FROM HZ_CUST_PROFILE_AMTS
5925         WHERE CUST_ACCOUNT_PROFILE_ID = p_cust_profile_amt_rec.cust_account_profile_id
5926         AND CURRENCY_CODE = p_cust_profile_amt_rec.currency_code
5927         AND ROWNUM = 1;
5928 
5929         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
5930         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id - currency_code' );
5931         FND_MSG_PUB.ADD;
5932         x_return_status := FND_API.G_RET_STS_ERROR;
5933     EXCEPTION
5934         WHEN NO_DATA_FOUND THEN
5935             NULL;
5936     END;
5937 
5938     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5939            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. ' ||
5940                                          'x_return_status = ' || x_return_status,
5941                                   p_prefix =>l_debug_prefix,
5942                                   p_msg_level=>fnd_log.level_statement);
5943     END IF;
5944     END IF;
5945 
5946     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5947            hz_utility_v2pub.debug(p_message=>'(+) after validate currency_code ... ' ||
5948                          'x_return_status = ' || x_return_status,
5949                                   p_prefix =>l_debug_prefix,
5950                                   p_msg_level=>fnd_log.level_statement);
5951     END IF;
5952 
5953     ----------------------------------------------
5954     -- validate site_use_id
5955     ----------------------------------------------
5956 /****Logical APIs - validation not required****/
5957   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5958     -- site_use_id is non-updateable field
5959     IF p_create_update_flag = 'U' AND
5960        p_cust_profile_amt_rec.site_use_id IS NOT NULL
5961     THEN
5962         validate_nonupdateable (
5963             p_column                                => 'site_use_id',
5964             p_column_value                          => p_cust_profile_amt_rec.site_use_id,
5965             p_old_column_value                      => l_site_use_id,
5966             x_return_status                         => x_return_status );
5967 
5968         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5969            hz_utility_v2pub.debug(p_message=>'site_use_id is non-updateable. ' ||
5970                                              'x_return_status = ' || x_return_status,
5971                                   p_prefix =>l_debug_prefix,
5972                                   p_msg_level=>fnd_log.level_statement);
5973        END IF;
5974     END IF;
5975 
5976     -- site_use_id is foreign key to hz_cust_site_uses
5977     -- Since site_use_id is non-updateable, we only need to
5978     -- check FK during creation.
5979 
5980     IF p_create_update_flag = 'C' AND
5981        p_check_foreign_key = FND_API.G_TRUE
5982     THEN
5983         IF p_cust_profile_amt_rec.site_use_id IS NOT NULL AND
5984            p_cust_profile_amt_rec.site_use_id <> FND_API.G_MISS_NUM
5985         THEN
5986             check_cust_site_use_fk (
5987                 p_column                                 => 'site_use_id',
5988                 p_column_value                           => p_cust_profile_amt_rec.site_use_id,
5989                 x_return_status                          => x_return_status );
5990 
5991             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5992                 hz_utility_v2pub.debug(p_message=>'site_use_id is foreign key to hz_cust_site_uses. ' ||
5993                                                 'x_return_status = ' || x_return_status,
5994                                   p_prefix =>l_debug_prefix,
5995                                   p_msg_level=>fnd_log.level_statement);
5996             END IF;
5997         END IF;
5998 
5999         -- cross reference checking
6000 
6001         IF ( p_cust_profile_amt_rec.site_use_id IS NOT NULL
6002              AND p_cust_profile_amt_rec.site_use_id <> FND_API.G_MISS_NUM AND
6003              ( l_site_use_id IS NULL OR
6004                l_site_use_id <> p_cust_profile_amt_rec.site_use_id ) ) OR
6005            ( ( p_cust_profile_amt_rec.site_use_id IS NULL OR
6006                p_cust_profile_amt_rec.site_use_id = FND_API.G_MISS_NUM ) AND
6007              l_site_use_id IS NOT NULL )
6008         THEN
6009             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_PROF_AMT_IDS_MISMATCH' );
6010             FND_MESSAGE.SET_TOKEN( 'ENTITY', 'site use' );
6011             FND_MSG_PUB.ADD;
6012             x_return_status := FND_API.G_RET_STS_ERROR;
6013         END IF;
6014 
6015         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6016            hz_utility_v2pub.debug(p_message=>'site_use_id should be the same as site_use_id site_use_id in corresponding customer profile. ' ||
6017                           'x_return_status = ' || x_return_status,
6018                                   p_prefix =>l_debug_prefix,
6019                                   p_msg_level=>fnd_log.level_statement);
6020         END IF;
6021     END IF;
6022 
6023     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6024            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
6025                                              'x_return_status = ' || x_return_status,
6026                                   p_prefix =>l_debug_prefix,
6027                                   p_msg_level=>fnd_log.level_statement);
6028     END IF;
6029   END IF;
6030 
6031     --------------------------------------
6032     -- validate created_by_module
6033     --------------------------------------
6034 
6035 --  Bug 4770111 : Validate CBM only if <> l_prof_cbm
6036     IF p_create_update_flag = 'C' THEN
6037       IF p_cust_profile_amt_rec.created_by_module <> nvl(l_prof_cbm, 'TCA_V2_API') THEN
6038       validate_created_by_module(
6039       p_create_update_flag     => p_create_update_flag,
6040       p_created_by_module      => p_cust_profile_amt_rec.created_by_module,
6041       p_old_created_by_module  => l_created_by_module,
6042       x_return_status          => x_return_status);
6043       END IF;
6044     ELSE
6045     validate_created_by_module(
6046       p_create_update_flag     => p_create_update_flag,
6047       p_created_by_module      => p_cust_profile_amt_rec.created_by_module,
6048       p_old_created_by_module  => l_created_by_module,
6049       x_return_status          => x_return_status);
6050     END IF;
6051 
6052     --------------------------------------
6053     -- validate application_id
6054     --------------------------------------
6055 
6056     validate_application_id(
6057       p_create_update_flag     => p_create_update_flag,
6058       p_application_id         => p_cust_profile_amt_rec.application_id,
6059       p_old_application_id     => l_application_id,
6060       x_return_status          => x_return_status);
6061 
6062     ------------------------------------
6063     --*** Credit Limit Validations ***--
6064     ------------------------------------
6065 
6066     IF p_cust_profile_amt_rec.overall_credit_limit   <> FND_API.G_MISS_NUM  AND
6067        p_cust_profile_amt_rec.overall_credit_limit   IS NOT NULL
6068     THEN
6069        IF  p_cust_profile_amt_rec.trx_credit_limit   <>  FND_API.G_MISS_NUM  AND
6070            p_cust_profile_amt_rec.trx_credit_limit   IS NOT NULL
6071        THEN
6072 
6073         IF ( p_create_update_flag = 'C' OR
6074            ( p_create_update_flag = 'U'  AND
6075             (
6076              (p_cust_profile_amt_rec.overall_credit_limit <> NVL( l_overall_credit_limit, FND_API.G_MISS_NUM ))
6077              OR
6078              (p_cust_profile_amt_rec.trx_credit_limit <> NVL(l_trx_credit_limit,FND_API.G_MISS_NUM))
6079             )
6080            )
6081            )
6082         THEN
6083            IF p_cust_profile_amt_rec.overall_credit_limit < p_cust_profile_amt_rec.trx_credit_limit
6084            THEN
6085               FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_OVERALL_CREDIT' );
6086               FND_MSG_PUB.ADD;
6087               x_return_status := FND_API.G_RET_STS_ERROR;
6088 
6089               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6090                  hz_utility_v2pub.debug(p_message=>'overall_credit_limit should be greater than the trx_credit_limit. ' ||
6091                                         'x_return_status = ' || x_return_status,
6092                                          p_prefix =>l_debug_prefix,
6093                                          p_msg_level=>fnd_log.level_statement);
6094               END IF;
6095            END IF;
6096         END IF;
6097        END IF;
6098     END IF;
6099 
6100         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6101            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,
6102                                   p_prefix =>l_debug_prefix,
6103                                   p_msg_level=>fnd_log.level_statement);
6104         END IF;
6105 
6106     ----------------------------------------------
6107     -- validate MIN_FC_INVOICE_OVERDUE_TYPE
6108     ----------------------------------------------
6109 
6110     -- MIN_FC_INVOICE_OVERDUE_TYPE is lookup code in lookup type AR_AMOUNT_PERCENT
6111     IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type IS NOT NULL AND
6112        p_cust_profile_amt_rec.min_fc_invoice_overdue_type <> FND_API.G_MISS_CHAR AND
6113         ( p_create_update_flag = 'C' OR
6114           ( p_create_update_flag = 'U'  AND
6115             p_cust_profile_amt_rec.min_fc_invoice_overdue_type <> NVL( l_min_fc_invoice_overdue_type, FND_API.G_MISS_CHAR ) ) )
6116     THEN
6117         validate_lookup (
6118             p_column                                => 'min_fc_invoice_overdue_type',
6119             p_lookup_table                          => 'AR_LOOKUPS',
6120             p_lookup_type                           => 'AR_AMOUNT_PERCENT',
6121             p_column_value                          => p_cust_profile_amt_rec.min_fc_invoice_overdue_type,
6122             x_return_status                         => x_return_status );
6123 
6124         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6125            hz_utility_v2pub.debug(p_message=>'min_fc_invoice_overdue_type is lookup code in lookup type AR_AMOUNT_PERCENT. ' ||
6126                 'x_return_status = ' || x_return_status,
6127                                   p_prefix =>l_debug_prefix,
6128                                   p_msg_level=>fnd_log.level_statement);
6129         END IF;
6130 
6131     END IF;
6132 
6133     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6134            hz_utility_v2pub.debug(p_message=>'(+) after validate min_fc_invoice_overdue_type ... ' ||
6135             'x_return_status = ' || x_return_status,
6136                                   p_prefix =>l_debug_prefix,
6137                                   p_msg_level=>fnd_log.level_statement);
6138     END IF;
6139 
6140     ----------------------------------------------
6141     -- validate MIN_FC_BALANCE_OVERDUE_TYPE
6142     ----------------------------------------------
6143 
6144     -- MIN_FC_BALANCE_OVERDUE_TYPE is lookup code in lookup type AR_AMOUNT_PERCENT
6145     IF p_cust_profile_amt_rec.min_fc_balance_overdue_type  IS NOT NULL AND
6146        p_cust_profile_amt_rec.min_fc_balance_overdue_type <> FND_API.G_MISS_CHAR AND
6147         ( p_create_update_flag = 'C' OR
6148           ( p_create_update_flag = 'U'  AND
6149             p_cust_profile_amt_rec.min_fc_balance_overdue_type <> NVL( l_min_fc_balance_overdue_type, FND_API.G_MISS_CHAR ) ) )
6150     THEN
6151         validate_lookup (
6152             p_column                                => 'min_fc_balance_overdue_type',
6153             p_lookup_table                          => 'AR_LOOKUPS',
6154             p_lookup_type                           => 'AR_AMOUNT_PERCENT',
6155             p_column_value                          => p_cust_profile_amt_rec.min_fc_balance_overdue_type,
6156             x_return_status                         => x_return_status );
6157 
6158         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6159            hz_utility_v2pub.debug(p_message=>'min_fc_balance_overdue_type is lookup code in lookup type AR_AMOUNT_PERCENT. ' ||
6160                 'x_return_status = ' || x_return_status,
6161                                   p_prefix =>l_debug_prefix,
6162                                   p_msg_level=>fnd_log.level_statement);
6163         END IF;
6164 
6165     END IF;
6166 
6167     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6168            hz_utility_v2pub.debug(p_message=>'(+) after validate min_fc_balance_overdue_type ... ' ||
6169             'x_return_status = ' || x_return_status,
6170                                   p_prefix =>l_debug_prefix,
6171                                   p_msg_level=>fnd_log.level_statement);
6172     END IF;
6173 
6174     ----------------------------------------------
6175     -- validate INTEREST_TYPE
6176     ----------------------------------------------
6177 
6178     -- INTEREST_TYPE is lookup code in lookup type AR_INTEREST_PENALTY_TYPE
6179     IF p_cust_profile_amt_rec.interest_type  IS NOT NULL AND
6180        p_cust_profile_amt_rec.interest_type <> FND_API.G_MISS_CHAR AND
6181         ( p_create_update_flag = 'C' OR
6182           ( p_create_update_flag = 'U'  AND
6183             p_cust_profile_amt_rec.interest_type <> NVL( l_interest_type, FND_API.G_MISS_CHAR ) ) )
6184     THEN
6185         validate_lookup (
6186             p_column                                => 'interest_type',
6187             p_lookup_table                          => 'AR_LOOKUPS',
6188             p_lookup_type                           => 'AR_INTEREST_PENALTY_TYPE',
6189             p_column_value                          => p_cust_profile_amt_rec.interest_type,
6190             x_return_status                         => x_return_status );
6191 
6192         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6193            hz_utility_v2pub.debug(p_message=>'interest_type is lookup code in lookup type AR_INTEREST_PENALTY_TYPE. ' ||
6194                 'x_return_status = ' || x_return_status,
6195                                   p_prefix =>l_debug_prefix,
6196                                   p_msg_level=>fnd_log.level_statement);
6197         END IF;
6198 
6199     END IF;
6200 
6201     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6202            hz_utility_v2pub.debug(p_message=>'(+) after validate interest_type ... ' ||
6203             'x_return_status = ' || x_return_status,
6204                                   p_prefix =>l_debug_prefix,
6205                                   p_msg_level=>fnd_log.level_statement);
6206     END IF;
6207 
6208     ----------------------------------------------
6209     -- validate PENALTY_TYPE
6210     ----------------------------------------------
6211 
6212     -- PENALTY_TYPE is lookup code in lookup type AR_INTEREST_PENALTY_TYPE
6213     IF p_cust_profile_amt_rec.penalty_type  IS NOT NULL AND
6214        p_cust_profile_amt_rec.penalty_type <> FND_API.G_MISS_CHAR AND
6215         ( p_create_update_flag = 'C' OR
6216           ( p_create_update_flag = 'U'  AND
6217             p_cust_profile_amt_rec.penalty_type <> NVL( l_penalty_type, FND_API.G_MISS_CHAR ) ) )
6218     THEN
6219         validate_lookup (
6220             p_column                                => 'penalty_type',
6221             p_lookup_table                          => 'AR_LOOKUPS',
6222             p_lookup_type                           => 'AR_INTEREST_PENALTY_TYPE',
6223             p_column_value                          => p_cust_profile_amt_rec.penalty_type,
6224             x_return_status                         => x_return_status );
6225 
6226         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6227            hz_utility_v2pub.debug(p_message=>'penalty_type is lookup code in lookup type AR_INTEREST_PENALTY_TYPE. ' ||
6228                 'x_return_status = ' || x_return_status,
6229                                   p_prefix =>l_debug_prefix,
6230                                   p_msg_level=>fnd_log.level_statement);
6231         END IF;
6232 
6233     END IF;
6234 
6235     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6236            hz_utility_v2pub.debug(p_message=>'(+) after validate penalty_type ... ' ||
6237             'x_return_status = ' || x_return_status,
6238                                   p_prefix =>l_debug_prefix,
6239                                   p_msg_level=>fnd_log.level_statement);
6240     END IF;
6241 
6242     -- Debug info.
6243 
6244     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6245         hz_utility_v2pub.debug(p_message=> 'validate_cust_profile_amt (-)',
6246                                p_prefix=>l_debug_prefix,
6247                                p_msg_level=>fnd_log.level_procedure);
6248     END IF;
6249 
6250     ------------------------------------
6251     -- validate exchange_rate_type
6252     ------------------------------------
6253     --  exchange_rate_type should be a valid value defined in GL_DAILY_CONVERSION_TYPES
6254     --  The type USER is excluded.
6255 
6256     IF p_cust_profile_amt_rec.exchange_rate_type is NOT NULL AND
6257        p_cust_profile_amt_rec.exchange_rate_type <> FND_API.G_MISS_CHAR
6258       AND ( p_create_update_flag = 'C' OR
6259           ( p_create_update_flag = 'U'  AND
6260             p_cust_profile_amt_rec.exchange_rate_type <> NVL( l_exchange_rate_type, FND_API.G_MISS_CHAR ) ) )
6261     THEN
6262 
6263         check_exchange_rate_type_fk(
6264                 p_column                                => 'exchange_rate_type',
6265                 p_column_value                          => p_cust_profile_amt_rec.exchange_rate_type,
6266                 x_return_status                         => x_return_status );
6267 
6268         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6269             hz_utility_v2pub.debug(p_message=>'exchange_rate_type should be a valid value defined in GL_DAILY_CONVERSION_TYPES. '||
6270               'x_return_status = ' || x_return_status,
6271                               p_prefix =>l_debug_prefix,
6272                               p_msg_level=>fnd_log.level_statement);
6273         END IF;
6274 
6275     END IF;
6276 
6277     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6278            hz_utility_v2pub.debug(p_message=>'(+) after validate exchange_rate_type..' ||
6279                                          'x_return_status = ' || x_return_status,
6280                           p_prefix =>l_debug_prefix,
6281                           p_msg_level=>fnd_log.level_statement);
6282     END IF;
6283 
6284     ---------------------------------------------------------
6285     -- validate min_fc_invoice_amount, min_fc_invoice_percent
6286     ---------------------------------------------------------
6287     -- min_fc_invoice_amount is populated and mandatory only if min_fc_invoice_overdue_type = AMOUNT.
6288     -- Must be null if (min_fc_invoice_overdue_type = 'PERCENT' OR
6289     -- min_fc_invoice_overdue_type is null)
6290     -- min_fc_invoice_percent is populated and mandatory only if min_fc_invoice_overdue_type = PERCENT.
6291     -- Must be null if (min_fc_invoice_overdue_type = 'AMOUNT' OR
6292     -- min_fc_invoice_overdue_type is null)
6293     -- min_fc_invoice_percent cannot exceed 100.
6294 
6295     IF p_create_update_flag = 'U' THEN
6296        IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type is NULL THEN
6297           v_cust_profile_amt_rec.min_fc_invoice_overdue_type := l_min_fc_invoice_overdue_type;
6298        END IF;
6299        IF p_cust_profile_amt_rec.min_fc_invoice_amount is NULL THEN
6300           v_cust_profile_amt_rec.min_fc_invoice_amount := l_min_fc_invoice_amount;
6301        ELSIF p_cust_profile_amt_rec.min_fc_invoice_amount = FND_API.G_MISS_NUM THEN
6302           v_cust_profile_amt_rec.min_fc_invoice_amount := NULL;
6303        END IF;
6304        IF p_cust_profile_amt_rec.min_fc_invoice_percent is NULL THEN
6305           v_cust_profile_amt_rec.min_fc_invoice_percent := l_min_fc_invoice_percent;
6306        ELSIF p_cust_profile_amt_rec.min_fc_invoice_percent = FND_API.G_MISS_NUM THEN
6307           v_cust_profile_amt_rec.min_fc_invoice_percent := NULL;
6308        END IF;
6309     END IF;
6310 
6311     IF p_create_update_flag = 'C' THEN
6312        IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type = FND_API.G_MISS_CHAR THEN
6313           v_cust_profile_amt_rec.min_fc_invoice_overdue_type := NULL;
6314        END IF;
6315        IF p_cust_profile_amt_rec.min_fc_invoice_amount = FND_API.G_MISS_NUM THEN
6316           v_cust_profile_amt_rec.min_fc_invoice_amount := NULL;
6317        END IF;
6318        IF p_cust_profile_amt_rec.min_fc_invoice_percent = FND_API.G_MISS_NUM THEN
6319           v_cust_profile_amt_rec.min_fc_invoice_percent := NULL;
6320        END IF;
6321     END IF;
6322 
6323     IF v_cust_profile_amt_rec.min_fc_invoice_overdue_type = 'AMOUNT' THEN
6324        IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NULL OR
6325            v_cust_profile_amt_rec.min_fc_invoice_percent IS NOT NULL) THEN
6326            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6327            FND_MSG_PUB.ADD;
6328            x_return_status := FND_API.G_RET_STS_ERROR;
6329        END IF;
6330     ELSIF v_cust_profile_amt_rec.min_fc_invoice_overdue_type = 'PERCENT' THEN
6331        IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NOT NULL OR
6332            v_cust_profile_amt_rec.min_fc_invoice_percent IS NULL) THEN
6333            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6334            FND_MSG_PUB.ADD;
6335            x_return_status := FND_API.G_RET_STS_ERROR;
6336        ELSE
6337           check_less_than_100 (
6338               p_column             => 'min_fc_invoice_percent',
6339               p_column_value       => v_cust_profile_amt_rec.min_fc_invoice_percent,
6340               x_return_status      => x_return_status );
6341 
6342           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6343               hz_utility_v2pub.debug(p_message=>'min_fc_invoice_percent should be < 100.' ||'x_return_status = ' ||
6344                                   x_return_status,
6345                                   p_prefix =>l_debug_prefix,
6346                                   p_msg_level=>fnd_log.level_statement);
6347           END IF;
6348        END IF;
6349     ELSE
6350        IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NOT NULL OR
6351            v_cust_profile_amt_rec.min_fc_invoice_percent IS NOT NULL) THEN
6352            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6353            FND_MSG_PUB.ADD;
6354            x_return_status := FND_API.G_RET_STS_ERROR;
6355        END IF;
6356     END IF;
6357 
6358     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6359            hz_utility_v2pub.debug(p_message=>' after validate min_fc_invoice_amount and min_fc_invoice_percent..' ||
6360                                          'x_return_status = ' || x_return_status,
6361                           p_prefix =>l_debug_prefix,
6362                           p_msg_level=>fnd_log.level_statement);
6363     END IF;
6364 
6365     ---------------------------------------------------------
6366     -- validate min_fc_balance_amount, min_fc_balance_percent
6367     ---------------------------------------------------------
6368     -- min_fc_balance_amount is populated and mandatory only if min_fc_balance_overdue_type = AMOUNT.
6369     -- Must be null if (min_fc_balance_overdue_type = 'PERCENT' OR
6370     -- min_fc_balance_overdue_type is null)
6371     -- min_fc_balance_percent is populated and mandatory only if min_fc_balance_overdue_type = PERCENT.
6372     -- Must be null if (min_fc_balance_overdue_type = 'AMOUNT' OR
6373     -- min_fc_balance_overdue_type is null)
6374     -- min_fc_balance_percent cannot exceed 100.
6375 
6376     IF p_create_update_flag = 'U' THEN
6377        IF p_cust_profile_amt_rec.min_fc_balance_overdue_type is NULL THEN
6378           v_cust_profile_amt_rec.min_fc_balance_overdue_type := l_min_fc_balance_overdue_type;
6379        END IF;
6380        IF p_cust_profile_amt_rec.min_fc_balance_amount is NULL THEN
6381           v_cust_profile_amt_rec.min_fc_balance_amount := l_min_fc_balance_amount;
6382        ELSIF p_cust_profile_amt_rec.min_fc_balance_amount = FND_API.G_MISS_NUM THEN
6383           v_cust_profile_amt_rec.min_fc_balance_amount := NULL;
6384        END IF;
6385        IF p_cust_profile_amt_rec.min_fc_balance_percent is NULL THEN
6386           v_cust_profile_amt_rec.min_fc_balance_percent := l_min_fc_balance_percent;
6387        ELSIF p_cust_profile_amt_rec.min_fc_balance_percent = FND_API.G_MISS_NUM THEN
6388           v_cust_profile_amt_rec.min_fc_balance_percent := NULL;
6389        END IF;
6390     END IF;
6391 
6392     IF p_create_update_flag = 'C' THEN
6393        IF p_cust_profile_amt_rec.min_fc_balance_overdue_type = FND_API.G_MISS_CHAR THEN
6394           v_cust_profile_amt_rec.min_fc_balance_overdue_type := NULL;
6395        END IF;
6396        IF p_cust_profile_amt_rec.min_fc_balance_amount = FND_API.G_MISS_NUM THEN
6397           v_cust_profile_amt_rec.min_fc_balance_amount := NULL;
6398        END IF;
6399        IF p_cust_profile_amt_rec.min_fc_balance_percent = FND_API.G_MISS_NUM THEN
6400           v_cust_profile_amt_rec.min_fc_balance_percent := NULL;
6401        END IF;
6402     END IF;
6403 
6404     IF v_cust_profile_amt_rec.min_fc_balance_overdue_type = 'AMOUNT' THEN
6405        IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NULL OR
6406            v_cust_profile_amt_rec.min_fc_balance_percent IS NOT NULL) THEN
6407            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6408            FND_MSG_PUB.ADD;
6409            x_return_status := FND_API.G_RET_STS_ERROR;
6410        END IF;
6411     ELSIF v_cust_profile_amt_rec.min_fc_balance_overdue_type = 'PERCENT' THEN
6412        IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NOT NULL OR
6413            v_cust_profile_amt_rec.min_fc_balance_percent IS NULL) THEN
6414            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6415            FND_MSG_PUB.ADD;
6416            x_return_status := FND_API.G_RET_STS_ERROR;
6417        ELSE
6418           check_less_than_100 (
6419               p_column             => 'min_fc_balance_percent',
6420               p_column_value       => v_cust_profile_amt_rec.min_fc_balance_percent,
6421               x_return_status      => x_return_status );
6422 
6423           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6424               hz_utility_v2pub.debug(p_message=>'min_fc_balance_percent should be < 100.' ||'x_return_status = ' ||
6425                                   x_return_status,
6426                                   p_prefix =>l_debug_prefix,
6427                                   p_msg_level=>fnd_log.level_statement);
6428           END IF;
6429        END IF;
6430     ELSE
6431        IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NOT NULL OR
6432            v_cust_profile_amt_rec.min_fc_balance_percent IS NOT NULL) THEN
6433            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6434            FND_MSG_PUB.ADD;
6435            x_return_status := FND_API.G_RET_STS_ERROR;
6436        END IF;
6437     END IF;
6438 
6439     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6440            hz_utility_v2pub.debug(p_message=>' after validate min_fc_balance_amount and min_fc_balance_percent..' ||
6441                                          'x_return_status = ' || x_return_status,
6442                           p_prefix =>l_debug_prefix,
6443                           p_msg_level=>fnd_log.level_statement);
6444     END IF;
6445 
6446     -------------------------------------------------------------------------
6447     -- validate interest_rate, interest_fixed_amount and interest_schedule_id
6448     -------------------------------------------------------------------------
6449     -- interest_rate cannot exceed 100. Is populated and mandatory only if interest_type = FIXED_RATE.
6450     -- Must be null if interest_type <> FIXED_RATE OR interest_type is null
6451     -- interest_fixed_amount is populated and mandatory only if interest_type = FIXED_AMOUNT.
6452     -- Must be null if interest_type <> FIXED_AMOUNT OR interest_type  is null
6453     -- interest_schedule_id is populated and mandatory if only if  interest_type is CHARGES_SCHEDULE or CHARGE_PER_TIER.
6454     -- Validated against ar_charge_schedules.schedule_id.
6455 
6456     IF p_create_update_flag = 'U' THEN
6457        IF p_cust_profile_amt_rec.interest_type is NULL THEN
6458           v_cust_profile_amt_rec.interest_type := l_interest_type;
6459        END IF;
6460        IF p_cust_profile_amt_rec.interest_rate is NULL THEN
6461           v_cust_profile_amt_rec.interest_rate := l_interest_rate;
6462        ELSIF p_cust_profile_amt_rec.interest_rate = FND_API.G_MISS_NUM THEN
6463           v_cust_profile_amt_rec.interest_rate := NULL;
6464        END IF;
6465        IF p_cust_profile_amt_rec.interest_fixed_amount is NULL THEN
6466           v_cust_profile_amt_rec.interest_fixed_amount := l_interest_fixed_amount;
6467        ELSIF p_cust_profile_amt_rec.interest_fixed_amount = FND_API.G_MISS_NUM THEN
6468           v_cust_profile_amt_rec.interest_fixed_amount := NULL;
6469        END IF;
6470        IF p_cust_profile_amt_rec.interest_schedule_id is NULL THEN
6471           v_cust_profile_amt_rec.interest_schedule_id := l_interest_schedule_id;
6472        ELSIF p_cust_profile_amt_rec.interest_schedule_id = FND_API.G_MISS_NUM THEN
6473           v_cust_profile_amt_rec.interest_schedule_id := NULL;
6474        END IF;
6475     END IF;
6476 
6477     IF p_create_update_flag = 'C' THEN
6478        IF p_cust_profile_amt_rec.interest_type = FND_API.G_MISS_CHAR THEN
6479           v_cust_profile_amt_rec.interest_type := NULL;
6480        END IF;
6481        IF p_cust_profile_amt_rec.interest_rate = FND_API.G_MISS_NUM THEN
6482           v_cust_profile_amt_rec.interest_rate := NULL;
6483        END IF;
6484        IF p_cust_profile_amt_rec.interest_fixed_amount = FND_API.G_MISS_NUM THEN
6485           v_cust_profile_amt_rec.interest_fixed_amount := NULL;
6486        END IF;
6487        IF p_cust_profile_amt_rec.interest_schedule_id = FND_API.G_MISS_NUM THEN
6488           v_cust_profile_amt_rec.interest_schedule_id := NULL;
6489        END IF;
6490     END IF;
6491 
6492     IF v_cust_profile_amt_rec.interest_type = 'FIXED_RATE' THEN
6493        IF (v_cust_profile_amt_rec.interest_rate IS NULL OR
6494            v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6495            v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6496            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6497            FND_MSG_PUB.ADD;
6498            x_return_status := FND_API.G_RET_STS_ERROR;
6499        ELSE
6500           check_less_than_100 (
6501               p_column             => 'interest_rate',
6502               p_column_value       => v_cust_profile_amt_rec.interest_rate,
6503               x_return_status      => x_return_status );
6504 
6505           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6506               hz_utility_v2pub.debug(p_message=>'interest_rate should be < 100.' ||'x_return_status = ' ||
6507                                   x_return_status,
6508                                   p_prefix =>l_debug_prefix,
6509                                   p_msg_level=>fnd_log.level_statement);
6510           END IF;
6511        END IF;
6512     ELSIF v_cust_profile_amt_rec.interest_type = 'FIXED_AMOUNT' THEN
6513        IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6514            v_cust_profile_amt_rec.interest_fixed_amount IS NULL OR
6515            v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6516            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6517            FND_MSG_PUB.ADD;
6518            x_return_status := FND_API.G_RET_STS_ERROR;
6519        END IF;
6520     /*6469663 Late charge enhacement handling case oftier basis calculation*/
6521     ELSIF v_cust_profile_amt_rec.interest_type IN ( 'CHARGES_SCHEDULE','CHARGE_PER_TIER') THEN
6522        IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6523            v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6524            v_cust_profile_amt_rec.interest_schedule_id IS NULL) THEN
6525            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6526            FND_MSG_PUB.ADD;
6527            x_return_status := FND_API.G_RET_STS_ERROR;
6528        ELSE
6529           check_charge_schedule_id_fk (
6530               p_column             => 'interest_schedule_id',
6531               p_column_value       => v_cust_profile_amt_rec.interest_schedule_id,
6532               x_return_status      => x_return_status );
6533 
6534           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6535               hz_utility_v2pub.debug(p_message=>'interest_schedule_id should be a valid value defined in ar_charge_schedules' ||'x_return_status = ' ||
6536                                   x_return_status,
6537                                   p_prefix =>l_debug_prefix,
6538                                   p_msg_level=>fnd_log.level_statement);
6539           END IF;
6540        END IF;
6541     ELSE
6542        IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6543            v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6544            v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6545            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6546            FND_MSG_PUB.ADD;
6547            x_return_status := FND_API.G_RET_STS_ERROR;
6548        END IF;
6549     END IF;
6550 
6551     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6552            hz_utility_v2pub.debug(p_message=>' after validate interest_rate, interest_fixed_amount and interest_schedule_id.' ||
6553                                          'x_return_status = ' || x_return_status,
6554                           p_prefix =>l_debug_prefix,
6555                           p_msg_level=>fnd_log.level_statement);
6556     END IF;
6557 
6558     -------------------------------------------------------------------------
6559     -- validate penalty_rate, penalty_fixed_amount and penalty_schedule_id
6560     -------------------------------------------------------------------------
6561     -- penalty_rate cannot exceed 100. Is populated and mandatory only if penalty_type = FIXED_RATE.
6562     -- Must be null if penalty_type <> FIXED_RATE OR penalty_type is null
6563     -- penalty_fixed_amount is populated and mandatory only if penalty_type = FIXED_AMOUNT.
6564     -- Must be null if penalty_type <> FIXED_AMOUNT OR penalty_type  is null
6565     -- penalty_schedule_id is populated and mandatory if only if  penalty_type in  CHARGES_SCHEDULE or CHARGE_PER_TIER.
6566     -- Validated against ar_charge_schedules.schedule_id.
6567 
6568     IF p_create_update_flag = 'U' THEN
6569        IF p_cust_profile_amt_rec.penalty_type is NULL THEN
6570           v_cust_profile_amt_rec.penalty_type := l_penalty_type;
6571        END IF;
6572        IF p_cust_profile_amt_rec.penalty_rate is NULL THEN
6573           v_cust_profile_amt_rec.penalty_rate := l_penalty_rate;
6574        ELSIF p_cust_profile_amt_rec.penalty_rate = FND_API.G_MISS_NUM THEN
6575           v_cust_profile_amt_rec.penalty_rate := NULL;
6576        END IF;
6577        IF p_cust_profile_amt_rec.penalty_fixed_amount is NULL THEN
6578           v_cust_profile_amt_rec.penalty_fixed_amount := l_penalty_fixed_amount;
6579        ELSIF p_cust_profile_amt_rec.penalty_fixed_amount = FND_API.G_MISS_NUM THEN
6580           v_cust_profile_amt_rec.penalty_fixed_amount := NULL;
6581        END IF;
6582        IF p_cust_profile_amt_rec.penalty_schedule_id is NULL THEN
6583           v_cust_profile_amt_rec.penalty_schedule_id := l_penalty_schedule_id;
6584        ELSIF p_cust_profile_amt_rec.penalty_schedule_id = FND_API.G_MISS_NUM THEN
6585           v_cust_profile_amt_rec.penalty_schedule_id := NULL;
6586        END IF;
6587     END IF;
6588 
6589     IF p_create_update_flag = 'C' THEN
6590        IF p_cust_profile_amt_rec.penalty_type = FND_API.G_MISS_CHAR THEN
6591           v_cust_profile_amt_rec.penalty_type := NULL;
6592        END IF;
6593        IF p_cust_profile_amt_rec.penalty_rate = FND_API.G_MISS_NUM THEN
6594           v_cust_profile_amt_rec.penalty_rate := NULL;
6595        END IF;
6596        IF p_cust_profile_amt_rec.penalty_fixed_amount = FND_API.G_MISS_NUM THEN
6597           v_cust_profile_amt_rec.penalty_fixed_amount := NULL;
6598        END IF;
6599        IF p_cust_profile_amt_rec.penalty_schedule_id = FND_API.G_MISS_NUM THEN
6600           v_cust_profile_amt_rec.penalty_schedule_id := NULL;
6601        END IF;
6602     END IF;
6603 
6604     IF v_cust_profile_amt_rec.penalty_type = 'FIXED_RATE' THEN
6605        IF (v_cust_profile_amt_rec.penalty_rate IS NULL OR
6606            v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6607            v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6608            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6609            FND_MSG_PUB.ADD;
6610            x_return_status := FND_API.G_RET_STS_ERROR;
6611        ELSE
6612           check_less_than_100 (
6613               p_column             => 'penalty_rate',
6614               p_column_value       => v_cust_profile_amt_rec.penalty_rate,
6615               x_return_status      => x_return_status );
6616 
6617           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6618               hz_utility_v2pub.debug(p_message=>'penalty_rate should be < 100.' ||'x_return_status = ' ||
6619                                   x_return_status,
6620                                   p_prefix =>l_debug_prefix,
6621                                   p_msg_level=>fnd_log.level_statement);
6622           END IF;
6623        END IF;
6624     ELSIF v_cust_profile_amt_rec.penalty_type = 'FIXED_AMOUNT' THEN
6625        IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6626            v_cust_profile_amt_rec.penalty_fixed_amount IS NULL OR
6627            v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6628            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6629            FND_MSG_PUB.ADD;
6630            x_return_status := FND_API.G_RET_STS_ERROR;
6631        END IF;
6632        /*6469663 Late charge enhacement handling case oftier basis calculation*/
6633     ELSIF v_cust_profile_amt_rec.penalty_type IN ('CHARGES_SCHEDULE','CHARGE_PER_TIER') THEN
6634        IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6635            v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6636            v_cust_profile_amt_rec.penalty_schedule_id IS NULL) THEN
6637            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6638            FND_MSG_PUB.ADD;
6639            x_return_status := FND_API.G_RET_STS_ERROR;
6640        ELSE
6641           check_charge_schedule_id_fk (
6642               p_column             => 'penalty_schedule_id',
6643               p_column_value       => v_cust_profile_amt_rec.penalty_schedule_id,
6644               x_return_status      => x_return_status );
6645 
6646           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6647               hz_utility_v2pub.debug(p_message=>'penalty_schedule_id should be a valid value defined in ar_charge_schedules' ||'x_return_status = ' ||
6648                                   x_return_status,
6649                                   p_prefix =>l_debug_prefix,
6650                                   p_msg_level=>fnd_log.level_statement);
6651           END IF;
6652        END IF;
6653     ELSE
6654        IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6655            v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6656            v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6657            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6658            FND_MSG_PUB.ADD;
6659            x_return_status := FND_API.G_RET_STS_ERROR;
6660        END IF;
6661     END IF;
6662 
6663     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6664            hz_utility_v2pub.debug(p_message=>' after validate penalty_rate, penalty_fixed_amount and penalty_schedule_id.' ||
6665                                          'x_return_status = ' || x_return_status,
6666                           p_prefix =>l_debug_prefix,
6667                           p_msg_level=>fnd_log.level_statement);
6668     END IF;
6669 
6670 END validate_cust_profile_amt;
6671 
6672 /**
6673  * PROCEDURE validate_cust_acct_site
6674  *
6675  * DESCRIPTION
6676  *     Validates customer account site record. Checks for
6677  *         uniqueness
6678  *         lookup types
6679  *         mandatory columns
6680  *         non-updateable fields
6681  *         foreign key validations
6682  *         other validations
6683  *
6684  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
6685  *
6686  * ARGUMENTS
6687  *   IN:
6688  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
6689  *     p_cust_acct_site_rec           Customer account site record.
6690  *     p_rowid                        Rowid of the record (used only in update mode).
6691  *   IN/OUT:
6692  *     x_return_status                Return status after the call. The status can
6693  *                                    be FND_API.G_RET_STS_SUCCESS (success),
6694  *                                    FND_API.G_RET_STS_ERROR (error),
6695  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6696  *
6697  * NOTES
6698  *
6699  * MODIFICATION HISTORY
6700  *
6701  *   07-23-2001    Jianying Huang      o Created.
6702  *   10-25-2002    P.Suresh            o Bug No : 2528119. Added validation for ece_tp_location_code
6703  *                                       in validate_cust_acct_site procedure.
6704  *   12-MAY-2005   Rajib Ranjan Borah  o TCA SSA Uptake (Bug 3456489)
6705  */
6706 
6707 PROCEDURE validate_cust_acct_site (
6708     p_create_update_flag                    IN     VARCHAR2,
6709     p_cust_acct_site_rec                    IN     HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_ACCT_SITE_REC_TYPE,
6710     p_rowid                                 IN     ROWID,
6711     x_return_status                         IN OUT NOCOPY VARCHAR2
6712 ) IS
6713 
6714     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_acct_site'
6715 
6716     l_dummy                                 VARCHAR2(1);
6717     l_rowid                                 ROWID := NULL;
6718 
6719     l_cust_account_id                       NUMBER;
6720     l_party_site_id                         NUMBER;
6721     l_orig_system_reference                 HZ_CUST_ACCT_SITES.orig_system_reference%TYPE;
6722     l_orig_system_reference1                 HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
6723     l_created_by_module                     HZ_CUST_ACCT_SITES.created_by_module%TYPE;
6724     l_application_id                        NUMBER;
6725     l_status                                HZ_CUST_ACCT_SITES.status%TYPE;
6726     l_customer_category_code                HZ_CUST_ACCT_SITES.customer_category_code%TYPE;
6727     l_count                                 NUMBER := 0;
6728     l_instr_length  number := 0;
6729     l_validate_flag varchar2(1) := 'Y';
6730     l_mosr_owner_table_id number;
6731 
6732     l_temp_return_status   VARCHAR2(10); -- for storing return status from
6733                                          -- hz_orig_system_ref_pub.get_owner_table_id
6734 
6735 BEGIN
6736 
6737     -- Check if API is called in debug mode. If yes, enable debug.
6738     --enable_debug;
6739 
6740     -- Debug info.
6741 
6742     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6743         hz_utility_v2pub.debug(p_message=>'validate_cust_acct_site (+)',
6744                                p_prefix=>l_debug_prefix,
6745                                p_msg_level=>fnd_log.level_procedure);
6746     END IF;
6747 
6748 
6749     -- Select fields for later use during update.
6750     IF p_create_update_flag = 'U' THEN
6751         SELECT CUST_ACCOUNT_ID, PARTY_SITE_ID, ORIG_SYSTEM_REFERENCE,
6752                CREATED_BY_MODULE, APPLICATION_ID, STATUS, CUSTOMER_CATEGORY_CODE
6753         INTO l_cust_account_id, l_party_site_id, l_orig_system_reference,
6754              l_created_by_module, l_application_id, l_status, l_customer_category_code
6755         FROM HZ_CUST_ACCT_SITES_ALL   -- Bug 3456489
6756         WHERE ROWID = p_rowid;
6757     END IF;
6758 
6759     --------------------------------------
6760     -- validate cust_acct_site_id
6761     --------------------------------------
6762 /****Logical APIs - validation not required****/
6763   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6764     IF p_create_update_flag = 'C' THEN
6765 
6766         -- If primary key value is passed, check for uniqueness.
6767         -- If primary key value is not passed, it will be generated
6768         -- from sequence by table handler.
6769 
6770         IF p_cust_acct_site_rec.cust_acct_site_id IS NOT NULL AND
6771            p_cust_acct_site_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
6772         THEN
6773         BEGIN
6774             SELECT 'Y' INTO l_dummy
6775             FROM HZ_CUST_ACCT_SITES_ALL   -- Bug 3456489
6776             WHERE CUST_ACCT_SITE_ID = p_cust_acct_site_rec.cust_acct_site_id;
6777 
6778             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
6779             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id' );
6780             FND_MSG_PUB.ADD;
6781             x_return_status := FND_API.G_RET_STS_ERROR;
6782         EXCEPTION
6783             WHEN NO_DATA_FOUND THEN
6784                 NULL;
6785         END;
6786 
6787         -- Debug info.
6788 
6789         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6790            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is unique during creation if passed in. ' ||
6791                                                 'x_return_status = ' || x_return_status,
6792                                   p_prefix =>l_debug_prefix,
6793                                   p_msg_level=>fnd_log.level_statement);
6794         END IF;
6795         END IF;
6796     END IF;
6797 
6798     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6799            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
6800                                              'x_return_status = ' || x_return_status,
6801                                   p_prefix =>l_debug_prefix,
6802                                   p_msg_level=>fnd_log.level_statement);
6803     END IF;
6804   END IF;
6805 
6806     ----------------------------------------------
6807     -- validate cust_account_id
6808     ----------------------------------------------
6809 /****Logical APIs - validation not required****/
6810   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6811     -- cust_account_id is mandatory field
6812     -- Since cust_account_id is non-updateable filed, we only need to check mandatory
6813     -- during creation.
6814 
6815     IF p_create_update_flag = 'C' THEN
6816         validate_mandatory (
6817             p_create_update_flag                    => p_create_update_flag,
6818             p_column                                => 'cust_account_id',
6819             p_column_value                          => p_cust_acct_site_rec.cust_account_id,
6820             x_return_status                         => x_return_status );
6821 
6822         -- Debug info.
6823 
6824         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6825             hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
6826                                                   'x_return_status = ' || x_return_status,
6827                                   p_prefix =>l_debug_prefix,
6828                                   p_msg_level=>fnd_log.level_statement);
6829         END IF;
6830     END IF;
6831 
6832     -- cust_account_id is non-updateable field
6833     IF p_create_update_flag = 'U' AND
6834        p_cust_acct_site_rec.cust_account_id IS NOT NULL
6835     THEN
6836         validate_nonupdateable (
6837             p_column                                => 'cust_account_id',
6838             p_column_value                          => p_cust_acct_site_rec.cust_account_id,
6839             p_old_column_value                      => l_cust_account_id,
6840             x_return_status                         => x_return_status );
6841 
6842         -- Debug info.
6843 
6844         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6845             hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
6846                                            'x_return_status = ' || x_return_status,
6847                                   p_prefix =>l_debug_prefix,
6848                                   p_msg_level=>fnd_log.level_statement);
6849         END IF;
6850     END IF;
6851 
6852     -- cust_account_id is foreign key of hz_cust_accounts
6853     -- Do not need to check during update because cust_account_id is
6854     -- non-updateable.
6855     IF p_create_update_flag = 'C' THEN
6856         IF p_cust_acct_site_rec.cust_account_id <> -1 AND
6857            p_cust_acct_site_rec.cust_account_id IS NOT NULL AND
6858            p_cust_acct_site_rec.cust_account_id <> FND_API.G_MISS_NUM
6859         THEN
6860             check_cust_account_fk (
6861                 p_column                                 => 'cust_account_id',
6862                 p_column_value                           => p_cust_acct_site_rec.cust_account_id,
6863                 x_return_status                          => x_return_status );
6864 
6865             -- Debug info.
6866 
6867             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6868                  hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key of hz_cust_accounts. ' ||
6869                                                    'x_return_status = ' || x_return_status,
6870                                   p_prefix =>l_debug_prefix,
6871                                   p_msg_level=>fnd_log.level_statement);
6872             END IF;
6873         END IF;
6874     END IF;
6875 
6876     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6877            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
6878                                              'x_return_status = ' || x_return_status,
6879                                   p_prefix =>l_debug_prefix,
6880                                   p_msg_level=>fnd_log.level_statement);
6881     END IF;
6882   END IF;
6883 
6884     ----------------------------------------------
6885     -- validate party_site_id
6886     ----------------------------------------------
6887 /****Logical APIs - validation not required****/
6888   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6889     -- party_site_id is mandatory field
6890     -- Since party_site_id is non-updateable filed, we only need to check mandatory
6891     -- during creation.
6892 
6893     IF p_create_update_flag = 'C' THEN
6894         validate_mandatory (
6895             p_create_update_flag                    => p_create_update_flag,
6896             p_column                                => 'party_site_id',
6897             p_column_value                          => p_cust_acct_site_rec.party_site_id,
6898             x_return_status                         => x_return_status );
6899 
6900         -- Debug info.
6901 
6902         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6903            hz_utility_v2pub.debug(p_message=>'party_site_id is mandatory. ' ||
6904                                                 'x_return_status = ' || x_return_status,
6905                                   p_prefix =>l_debug_prefix,
6906                                   p_msg_level=>fnd_log.level_statement);
6907         END IF;
6908     END IF;
6909 
6910     -- party_site_id is non-updateable field
6911     IF p_create_update_flag = 'U' AND
6912        p_cust_acct_site_rec.party_site_id IS NOT NULL
6913     THEN
6914         validate_nonupdateable (
6915             p_column                                => 'party_site_id',
6916             p_column_value                          => p_cust_acct_site_rec.party_site_id,
6917             p_old_column_value                      => l_party_site_id,
6918             x_return_status                         => x_return_status );
6919 
6920         -- Debug info.
6921 
6922         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6923            hz_utility_v2pub.debug(p_message=>'party_site_id is non-updateable. ' ||
6924                                              'x_return_status = ' || x_return_status,
6925                                   p_prefix =>l_debug_prefix,
6926                                   p_msg_level=>fnd_log.level_statement);
6927         END IF;
6928     END IF;
6929 
6930     -- party_site_id is foreign key of hz_party_sites
6931     -- Do not need to check during update because party_site_id is
6932     -- non-updateable.
6933     IF p_create_update_flag = 'C' AND
6934        p_cust_acct_site_rec.party_site_id IS NOT NULL AND
6935        p_cust_acct_site_rec.party_site_id <> FND_API.G_MISS_NUM
6936     THEN
6937         check_party_site_fk (
6938             p_column                                => 'party_site_id',
6939             p_column_value                          => p_cust_acct_site_rec.party_site_id,
6940             x_return_status                         => x_return_status );
6941 
6942         -- Debug info.
6943 
6944         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6945            hz_utility_v2pub.debug(p_message=>'party_site_id is foreign key of hz_party_sites. ' ||
6946                                                  'x_return_status = ' || x_return_status,
6947                                   p_prefix =>l_debug_prefix,
6948                                   p_msg_level=>fnd_log.level_statement);
6949         END IF;
6950 
6951 
6952 
6953        -- Bug 2197181: Because of Mix-n-Match project, location from 3rd party content
6954        -- providers can now be used in the business flow. Therefore, removing restriction
6955        -- that the "party_site_id must link to a 'USER_ENTERED' location".
6956 
6957 /*
6958 
6959         --- party_site_id must link to a 'USER_ENTERED' location
6960         BEGIN
6961             SELECT 'Y' INTO l_dummy
6962             FROM HZ_LOCATIONS
6963             WHERE LOCATION_ID = (
6964                 SELECT LOCATION_ID
6965                 FROM HZ_PARTY_SITES
6966                 WHERE PARTY_SITE_ID = p_cust_acct_site_rec.party_site_id )
6967             AND CONTENT_SOURCE_TYPE = HZ_PARTY_V2PUB.G_MISS_CONTENT_SOURCE_TYPE;
6968 
6969         EXCEPTION
6970             WHEN NO_DATA_FOUND THEN
6971                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_LOC_CONTENT_INVALID' );
6972                 FND_MSG_PUB.ADD;
6973                 x_return_status := FND_API.G_RET_STS_ERROR;
6974         END;
6975 
6976         -- Debug info.
6977         IF G_DEBUG THEN
6978             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6979                 'party_site_id must link to a USER_ENTERED location. ' ||
6980                 'x_return_status = ' || x_return_status, l_debug_prefix );
6981         END IF;
6982 
6983 */
6984 
6985 
6986         -- cust_account_id and party_site_id together should be unique.
6987         -- Bug 3456489. Post MOAC, this uniqueness should be within orgs.
6988         BEGIN
6989             SELECT 'Y' INTO l_dummy
6990             FROM HZ_CUST_ACCT_SITES_ALL   -- Bug 3456489
6991             WHERE CUST_ACCOUNT_ID = p_cust_acct_site_rec.cust_account_id
6992             AND PARTY_SITE_ID = p_cust_acct_site_rec.party_site_id
6993             AND ORG_ID = p_cust_acct_site_rec.org_id   -- Bug 3456489
6994             AND ROWNUM = 1;
6995 
6996             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
6997             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_site_id' );
6998             FND_MSG_PUB.ADD;
6999             x_return_status := FND_API.G_RET_STS_ERROR;
7000         EXCEPTION
7001             WHEN NO_DATA_FOUND THEN
7002                 NULL;
7003         END;
7004 
7005         -- Debug info.
7006 
7007         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7008            hz_utility_v2pub.debug(p_message=>'cust_account_id and party_site_id together should be unique. ' ||
7009                                                 'x_return_status = ' || x_return_status,
7010                                   p_prefix =>l_debug_prefix,
7011                                   p_msg_level=>fnd_log.level_statement);
7012         END IF;
7013     END IF;
7014 
7015     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7016            hz_utility_v2pub.debug(p_message=>'(+) after validate party_site_id ... ' ||
7017                                         'x_return_status = ' || x_return_status,
7018                                   p_prefix =>l_debug_prefix,
7019                                   p_msg_level=>fnd_log.level_statement);
7020     END IF;
7021   END IF;
7022 
7023     ----------------------------------------------
7024     -- validate orig_system_reference
7025     ----------------------------------------------
7026 /****Logical APIs - validation not required****/
7027   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7028     -- orig_system_reference is unique. Since orig_system_refence is defaulting to
7029     -- primary key, we only need to check the uniqueness if user passes some value.
7030     -- database constraints can catch unique error when we defaulting.
7031     -- orig_system_reference is non-updateable, we only need to check uniqueness
7032     -- during creation.
7036        p_cust_acct_site_rec.orig_system_reference IS NOT NULL AND
7033 
7034     -- Bug 3456489. Post MOAC, this uniqeness should be within orgs.
7035     IF p_create_update_flag = 'C' AND
7037        p_cust_acct_site_rec.orig_system_reference <> FND_API.G_MISS_CHAR
7038     THEN
7039     BEGIN
7040         SELECT 'Y' INTO l_dummy
7041         FROM HZ_CUST_ACCT_SITES_ALL
7042         WHERE ORIG_SYSTEM_REFERENCE = p_cust_acct_site_rec.orig_system_reference
7043         AND   ORG_ID = p_cust_acct_site_rec.org_id;
7044 
7045         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7046         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'orig_system_reference' );
7047         FND_MSG_PUB.ADD;
7048         x_return_status := FND_API.G_RET_STS_ERROR;
7049     EXCEPTION
7050         WHEN NO_DATA_FOUND THEN
7051             NULL;
7052     END;
7053 
7054     -- Debug info.
7055 
7056     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7057            hz_utility_v2pub.debug(p_message=>'orig_system_reference is unique if passed in. ' ||
7058                          'x_return_status = ' || x_return_status,
7059                                   p_prefix =>l_debug_prefix,
7060                                   p_msg_level=>fnd_log.level_statement);
7061     END IF;
7062 
7063     END IF;
7064 
7065     -- orig_system_reference is non-updateable field
7066     l_instr_length := instr(l_orig_system_reference,'#@');
7067     if l_instr_length > 0
7068     then
7069         l_orig_system_reference1 := null;
7070         if  substr(l_orig_system_reference,1,l_instr_length-1) <> p_cust_acct_site_rec.orig_system_reference
7071         then
7072                 l_validate_flag := 'N';
7073         end if;
7074     else
7075         l_orig_system_reference1 := p_cust_acct_site_rec.orig_system_reference;
7076     end if;
7077 
7078    IF (p_cust_acct_site_rec.orig_system is not null and p_cust_acct_site_rec.orig_system <>fnd_api.g_miss_char)
7079     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)
7080     and p_create_update_flag = 'U'
7081    then
7082         hz_orig_system_ref_pub.get_owner_table_id
7083         (p_orig_system => p_cust_acct_site_rec.orig_system,
7084         p_orig_system_reference => p_cust_acct_site_rec.orig_system_reference,
7085         p_owner_table_name => 'HZ_CUST_ACCT_SITES_ALL',
7086         x_owner_table_id => l_mosr_owner_table_id,
7087         x_return_status => l_temp_return_status);
7088 
7089         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
7090 		    l_mosr_owner_table_id= nvl(p_cust_acct_site_rec.cust_acct_site_id,l_mosr_owner_table_id))
7091         THEN
7092                 l_validate_flag := 'N';
7093         END IF;
7094 
7095         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
7096 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
7097 		-- In case of success, leave it to carry over previous value as before this call.
7098 		-- Fix for Bug 5498116 (29-AUG-2006)
7099         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
7100           x_return_status := l_temp_return_status;
7101         END IF;
7102 
7103     end if;
7104     -- orig_system_reference is non-updateable field
7105     IF p_create_update_flag = 'U' AND
7106        p_cust_acct_site_rec.orig_system_reference IS NOT NULL
7107        and l_validate_flag = 'Y'
7108     THEN
7109         validate_nonupdateable (
7110             p_column                                => 'orig_system_reference',
7111             p_column_value                          => p_cust_acct_site_rec.orig_system_reference,
7112             p_old_column_value                      => l_orig_system_reference,
7113             x_return_status                         => x_return_status );
7114 
7115         -- Debug info.
7116 
7117         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7118            hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
7119                            'x_return_status = ' || x_return_status,
7120                                   p_prefix =>l_debug_prefix,
7121                                   p_msg_level=>fnd_log.level_statement);
7122         END IF;
7123     END IF;
7124 
7125     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7126            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
7127             'x_return_status = ' || x_return_status,
7128                                   p_prefix =>l_debug_prefix,
7129                                   p_msg_level=>fnd_log.level_statement);
7130     END IF;
7131   END IF;
7132 
7133     --------------------------------------
7134     -- validate tp_header_id
7135     --------------------------------------
7136 
7137     -- We have unique index on tp_header_id
7138 
7139     IF p_cust_acct_site_rec.tp_header_id IS NOT NULL AND
7140        p_cust_acct_site_rec.tp_header_id <> FND_API.G_MISS_NUM
7141     THEN
7142     BEGIN
7143         SELECT ROWID INTO l_rowid
7144         FROM HZ_CUST_ACCT_SITES_ALL
7145         WHERE TP_HEADER_ID = p_cust_acct_site_rec.tp_header_id
7146           AND ORG_ID = p_cust_acct_site_rec.org_id;  -- Bug 3456489
7147 
7148         IF p_create_update_flag = 'C' OR
7149            ( p_create_update_flag = 'U' AND l_rowid <> p_rowid )
7150         THEN
7151             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7152             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'tp_header_id' );
7153             FND_MSG_PUB.ADD;
7154             x_return_status := FND_API.G_RET_STS_ERROR;
7155         END IF;
7156     EXCEPTION
7157         WHEN NO_DATA_FOUND THEN
7158             NULL;
7159     END;
7160 
7161     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7162            hz_utility_v2pub.debug(p_message=>'tp_header_id is unique if passed in. ' ||
7163                                                  'x_return_status = ' || x_return_status,
7164                                   p_prefix =>l_debug_prefix,
7165                                   p_msg_level=>fnd_log.level_statement);
7166     END IF;
7167 
7168     END IF;
7169 
7170     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7171            hz_utility_v2pub.debug(p_message=>'(+) after validate tp_header_id ... ' ||
7172                                                  'x_return_status = ' || x_return_status,
7173                                   p_prefix =>l_debug_prefix,
7174                                   p_msg_level=>fnd_log.level_statement);
7175     END IF;
7176 
7177     --------------------------------------
7178     -- validate status
7179     --------------------------------------
7180 
7181     -- status cannot be set to null during update
7182     IF p_create_update_flag = 'U' AND
7183        p_cust_acct_site_rec.status IS NOT NULL
7184     THEN
7185         validate_cannot_update_to_null (
7186             p_column                                => 'status',
7187             p_column_value                          => p_cust_acct_site_rec.status,
7188             x_return_status                         => x_return_status );
7189 
7190         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7191            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
7192                                                  'x_return_status = ' || x_return_status,
7193                                   p_prefix =>l_debug_prefix,
7194                                   p_msg_level=>fnd_log.level_statement);
7195         END IF;
7196     END IF;
7197 
7198 /****Logical APIs - validation not required****/
7199   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7200     -- status is lookup code in lookup type CODE_STATUS
7201     IF p_cust_acct_site_rec.status IS NOT NULL AND
7202        p_cust_acct_site_rec.status <> FND_API.G_MISS_CHAR AND
7203        ( p_create_update_flag = 'C' OR
7204          ( p_create_update_flag = 'U'  AND
7205            p_cust_acct_site_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
7206     THEN
7207         validate_lookup (
7208             p_column                                => 'status',
7209             p_lookup_type                           => 'CODE_STATUS',
7210             p_column_value                          => p_cust_acct_site_rec.status,
7211             x_return_status                         => x_return_status );
7212 
7213         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7214            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
7215                                                 'x_return_status = ' || x_return_status,
7216                                   p_prefix =>l_debug_prefix,
7217                                   p_msg_level=>fnd_log.level_statement);
7218         END IF;
7219 
7220     END IF;
7221 
7222     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7223            hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
7224                                                  'x_return_status = ' || x_return_status,
7225                                   p_prefix =>l_debug_prefix,
7226                                   p_msg_level=>fnd_log.level_statement);
7227     END IF;
7228   END IF;
7229 
7230     ----------------------------------------------
7231     -- validate customer_category_code
7232     ----------------------------------------------
7233 
7234     -- customer_category_code is lookup code in lookup type ADDRESS_CATEGORY
7235     IF p_cust_acct_site_rec.customer_category_code IS NOT NULL AND
7236        p_cust_acct_site_rec.customer_category_code <> FND_API.G_MISS_CHAR AND
7237        ( p_create_update_flag = 'C' OR
7238          ( p_create_update_flag = 'U'  AND
7239            p_cust_acct_site_rec.customer_category_code <> NVL( l_customer_category_code, FND_API.G_MISS_CHAR ) ) )
7240     THEN
7241         validate_lookup (
7242             p_column                                => 'customer_category_code',
7243             p_lookup_type                           => 'ADDRESS_CATEGORY',
7244             p_column_value                          => p_cust_acct_site_rec.customer_category_code,
7245             x_return_status                         => x_return_status );
7246 
7247         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7248            hz_utility_v2pub.debug(p_message=>'customer_category_code is lookup code in lookup type ADDRESS_CATEGORY. ' ||
7249                                                  'x_return_status = ' || x_return_status,
7250                                   p_prefix =>l_debug_prefix,
7251                                   p_msg_level=>fnd_log.level_statement);
7252         END IF;
7253     END IF;
7254 
7255     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7256            hz_utility_v2pub.debug(p_message=>'(+) after validate customer_category_code ... ' ||
7257                                                 'x_return_status = ' || x_return_status,
7258                                   p_prefix =>l_debug_prefix,
7259                                   p_msg_level=>fnd_log.level_statement);
7260     END IF;
7261 
7262     /* comment out the validation as the language column is obsoleted in r12
7263     ----------------------------------------------
7264     -- validate language
7265     ----------------------------------------------
7266 
7267     -- language is foreign key of fnd installed languages
7268     IF p_cust_acct_site_rec.language IS NOT NULL AND
7269        p_cust_acct_site_rec.language <> FND_API.G_MISS_CHAR
7270     THEN
7271     BEGIN
7272         SELECT 'Y' INTO l_dummy
7273         FROM FND_LANGUAGES
7274         WHERE LANGUAGE_CODE = p_cust_acct_site_rec.language
7275         AND INSTALLED_FLAG IN ('B', 'I')
7276         AND ROWNUM = 1;
7277     EXCEPTION
7278         WHEN NO_DATA_FOUND THEN
7279             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
7280             FND_MESSAGE.SET_TOKEN( 'FK', 'language' );
7281             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'language_code' );
7282             FND_MESSAGE.SET_TOKEN( 'TABLE', 'fnd_languages(installed)' );
7283             FND_MSG_PUB.ADD;
7284             x_return_status := FND_API.G_RET_STS_ERROR;
7285     END;
7286 
7287     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7288            hz_utility_v2pub.debug(p_message=>'language is foreign key of fnd installed languages. ' ||
7289                                          'x_return_status = ' || x_return_status,
7290                                   p_prefix =>l_debug_prefix,
7291                                   p_msg_level=>fnd_log.level_statement);
7292     END IF;
7293 
7294     END IF;
7295 
7296     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7297            hz_utility_v2pub.debug(p_message=>'(+) after validate language ... ' ||
7298                                                 'x_return_status = ' || x_return_status,
7299                                   p_prefix =>l_debug_prefix,
7300                                   p_msg_level=>fnd_log.level_statement);
7301     END IF;
7302     */
7303 
7304     --------------------------------------
7305     -- validate primary_specialist_id
7306     --------------------------------------
7307 
7308     -- primary_specialist_id is foreign key to per_all_people_f
7309     IF p_cust_acct_site_rec.primary_specialist_id IS NOT NULL AND
7310        p_cust_acct_site_rec.primary_specialist_id <> FND_API.G_MISS_NUM
7311     THEN
7312         check_per_all_people_f_fk (
7313             p_column                                 => 'primary_specialist_id',
7314             p_column_value                           => p_cust_acct_site_rec.primary_specialist_id,
7315             x_return_status                          => x_return_status );
7316 
7317         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7318            hz_utility_v2pub.debug(p_message=>'primary_specialist_id is foreign key to per_all_people_f. ' ||
7319                                                 'x_return_status = ' || x_return_status,
7320                                   p_prefix =>l_debug_prefix,
7321                                   p_msg_level=>fnd_log.level_statement);
7322         END IF;
7323     END IF;
7324 
7325     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7326            hz_utility_v2pub.debug(p_message=>'(+) after validate primary_specialist_id ... ' ||
7327                                                  'x_return_status = ' || x_return_status,
7328                                   p_prefix =>l_debug_prefix,
7329                                   p_msg_level=>fnd_log.level_statement);
7330     END IF;
7331 
7332     --------------------------------------
7333     -- validate secondary_specialist_id
7334     --------------------------------------
7335 
7336     -- secondary_specialist_id is foreign key to per_all_people_f
7337     IF p_cust_acct_site_rec.secondary_specialist_id IS NOT NULL AND
7338        p_cust_acct_site_rec.secondary_specialist_id <> FND_API.G_MISS_NUM
7339     THEN
7340     /* Bug 3591694 Changed foreign key validation from check_cust_account_fk to
7341                    check_per_all_people_f_fk.
7342     */
7343     --   check_cust_account_fk (
7344          check_per_all_people_f_fk(
7345             p_column                                 => 'secondary_specialist_id',
7346             p_column_value                           => p_cust_acct_site_rec.secondary_specialist_id,
7347             x_return_status                          => x_return_status );
7348 
7349         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7350            hz_utility_v2pub.debug(p_message=>'secondary_specialist_id is foreign key to per_all_people_f. ' ||
7351                               'x_return_status = ' || x_return_status,
7352                                   p_prefix =>l_debug_prefix,
7353                                   p_msg_level=>fnd_log.level_statement);
7354         END IF;
7355     END IF;
7356 
7357     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7358            hz_utility_v2pub.debug(p_message=>'(+) after validate secondary_specialist_id ... ' ||
7359                                    'x_return_status = ' || x_return_status,
7360                                   p_prefix =>l_debug_prefix,
7361                                   p_msg_level=>fnd_log.level_statement);
7362     END IF;
7363 
7364     --------------------------------------
7365     -- validate created_by_module
7366     --------------------------------------
7367 
7368     validate_created_by_module(
7369       p_create_update_flag     => p_create_update_flag,
7370       p_created_by_module      => p_cust_acct_site_rec.created_by_module,
7371       p_old_created_by_module  => l_created_by_module,
7372       x_return_status          => x_return_status);
7373 
7374     --------------------------------------
7375     -- validate application_id
7376     --------------------------------------
7377 
7378     validate_application_id(
7379       p_create_update_flag     => p_create_update_flag,
7380       p_application_id         => p_cust_acct_site_rec.application_id,
7381       p_old_application_id     => l_application_id,
7382       x_return_status          => x_return_status);
7383 
7384     --------------------------------------
7385     -- validate ece_tp_location_code
7386     --------------------------------------
7387      IF p_create_update_flag = 'C' THEN
7388         IF p_cust_acct_site_rec.cust_account_id <> -1 AND
7389            p_cust_acct_site_rec.cust_account_id IS NOT NULL AND
7390            p_cust_acct_site_rec.cust_account_id <> FND_API.G_MISS_NUM
7391         THEN
7392           IF p_cust_acct_site_rec.ece_tp_location_code IS NOT NULL AND
7393              p_cust_acct_site_rec.ece_tp_location_code <> FND_API.G_MISS_CHAR
7394           THEN
7395              select  count(1)
7396              into    l_count
7397              from    hz_cust_acct_sites_all addr  -- Bug 3456489
7398              where   addr.cust_account_id        = p_cust_acct_site_rec.cust_account_id
7399              and     addr.ece_tp_location_code   = p_cust_acct_site_rec.ece_tp_location_code
7400              and     org_id                      = p_cust_acct_site_rec.org_id; -- Bug 3456489
7401 
7402              IF l_count > 0 THEN
7403                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ADDR_EDI_LOC_EXISTS' );
7404                 FND_MSG_PUB.ADD;
7405                 x_return_status := FND_API.G_RET_STS_ERROR;
7406              END IF;
7407           END IF;
7408         END IF;
7409      ELSIF p_create_update_flag = 'U' THEN
7410         IF p_cust_acct_site_rec.ece_tp_location_code IS NOT NULL AND
7411            p_cust_acct_site_rec.ece_tp_location_code <> FND_API.G_MISS_CHAR
7412         THEN
7413              select  count(1)
7414              into    l_count
7415              from    hz_cust_acct_sites_all addr   -- Bug 3456489
7416              where   addr.cust_account_id        = l_cust_account_id
7417              and     addr.ece_tp_location_code   = p_cust_acct_site_rec.ece_tp_location_code
7418              and     addr.cust_acct_site_id      <> p_cust_acct_site_rec.cust_acct_site_id
7419              and     org_id                      = p_cust_acct_site_rec.org_id;  -- Bug 3456489
7420 
7421              IF l_count > 0 THEN
7422                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ADDR_EDI_LOC_EXISTS' );
7423                 FND_MSG_PUB.ADD;
7424                 x_return_status := FND_API.G_RET_STS_ERROR;
7425              END IF;
7426          END IF;
7427      END IF;
7428 
7429      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7430            hz_utility_v2pub.debug(p_message=>'The ece_tp_location_code should be unique for a customer ' ||
7431                                                  'x_return_status = ' || x_return_status,
7432                                   p_prefix =>l_debug_prefix,
7433                                   p_msg_level=>fnd_log.level_statement);
7434     END IF;
7435 
7436     -- Debug info.
7437 
7438     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7439         hz_utility_v2pub.debug(p_message=>'validate_cust_acct_site (-)',
7440                                p_prefix=>l_debug_prefix,
7441                                p_msg_level=>fnd_log.level_procedure);
7442     END IF;
7443 
7444     -- Check if API is called in debug mode. If yes, disable debug.
7445     --disable_debug;
7446 
7447 END validate_cust_acct_site;
7448 
7449 /**
7450  * PROCEDURE validate_cust_site_use
7451  *
7452  * DESCRIPTION
7453  *     Validates customer account site use record. Checks for
7454  *         uniqueness
7455  *         lookup types
7456  *         mandatory columns
7457  *         non-updateable fields
7458  *         foreign key validations
7459  *         other validations
7460  *
7461  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
7462  *
7463  * ARGUMENTS
7464  *   IN:
7465  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
7466  *     p_cust_site_use_rec            Customer account site use record.
7467  *     p_rowid                        Rowid of the record (used only in update mode).
7468  *   IN/OUT:
7469  *     x_return_status                Return status after the call. The status can
7470  *                                    be FND_API.G_RET_STS_SUCCESS (success),
7471  *                                    FND_API.G_RET_STS_ERROR (error),
7472  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
7473  *
7474  * NOTES
7475  *
7476  * MODIFICATION HISTORY
7477  *
7478  *   07-23-2001    Jianying Huang      o Created.
7479  *   11-08-2001    Rajeshwari P          Added validations  for fields, tax_code,payment_term_id,
7480  *                                       demand_class_codeprimary_salesrep_id,finchrg_receivables_trx_id,
7481  *                                       order_type_id,order_type_id,ship_partial,item_cross_ref_pref,
7482  *                                       warehouse_id,date_type_preference,
7483  *                                       ship_sets_include_lines_flag and arrivalsets_include_lines_flag
7484  *                                       in procedure VALIDATE_CUST_SITE_USE.
7485  *   03-26-2002    P.Suresh              Bug No : 2266165. Added the check that bill_to_flag of
7486  *                                       hz_cust_acct_relate_all table should be Y when validating
7487  *                                       bill_to_site_use_id.
7488  *   04-11-2002    P.Suresh              Bug No : 2260832. Added the check for the status
7489  *                                       when validating that only one primary is allowed for
7490  *                                       one site use type per account in the procedure
7491  *                                       validate_cust_site_use.
7492  *   21-05-2002   Rajeshwari P           Bug fix 2311760.Commented the code which validates the
7493  *                                       Obsolete column ship_partial.
7494  *   06-13-2002    P.Suresh              Bug No : 2403263. Added validation that the contact_id
7495  *                                       should be a foreign key to hz_cust_account_roles.
7496  *                                       cust_account_role_id.
7497  *   06-19-2002   Rajeshwari P           Bug 2399491.Validating site_use_id for duplicates
7498  *                                       against hz_cust_site_uses_all table instead of the
7499  *                                       org stripped view, hz_cust_site_uses.
7500  *   03-May-3004 Venkata Sowjanya S      Bug No : 3609601. Commented the statements which sets tokens Column1,Column2
7501  *                                        for message HZ_API_INACTIVE_CANNOT_PRIM
7502  *   12-MAY-2005   Rajib Ranjan Borah  o TCA SSA Uptake (Bug 3456489)
7503  */
7504 
7505 PROCEDURE validate_cust_site_use (
7506     p_create_update_flag                    IN     VARCHAR2,
7507     p_cust_site_use_rec                     IN     HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE,
7508     p_rowid                                 IN     ROWID,
7509     x_return_status                         IN OUT NOCOPY VARCHAR2
7510 ) IS
7511 
7512     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_site_use'
7513 
7514     l_dummy                                 VARCHAR2(1);
7515     l_profile                               AR_SYSTEM_PARAMETERS.auto_site_numbering%TYPE;
7516 
7517     l_cust_acct_site_id                     NUMBER;
7518     l_site_use_code                         HZ_CUST_SITE_USES.site_use_code%TYPE;
7519     l_cust_account_id                       NUMBER;
7520     l_orig_system_reference                 HZ_CUST_SITE_USES.orig_system_reference%TYPE;
7521     l_created_by_module                     HZ_CUST_SITE_USES.created_by_module%TYPE;
7522     l_application_id                        NUMBER;
7523     l_status                                HZ_CUST_SITE_USES.status%TYPE;
7524     l_ship_via                              HZ_CUST_SITE_USES.ship_via%TYPE;
7525     l_freight_term                          HZ_CUST_SITE_USES.freight_term%TYPE;
7526     l_ship_sets_inc_lines_f                 HZ_CUST_SITE_USES.ship_sets_include_lines_flag%TYPE;
7527     l_arrivalsets_inc_lines_f               HZ_CUST_SITE_USES.arrivalsets_include_lines_flag%TYPE;
7528     l_tax_code                              HZ_CUST_SITE_USES.tax_code%TYPE;
7529     l_payment_term_id                       HZ_CUST_SITE_USES.payment_term_id%TYPE;
7530     l_demand_class_code                     HZ_CUST_SITE_USES.demand_class_code%TYPE;
7531     l_primary_salesrep_id                   HZ_CUST_SITE_USES.primary_salesrep_id%TYPE;
7532     l_finchrg_receivables_trx_id            HZ_CUST_SITE_USES.FINCHRG_RECEIVABLES_TRX_ID%TYPE;
7533     l_order_type_id                         HZ_CUST_SITE_USES.ORDER_TYPE_ID%TYPE;
7534     l_price_list_id                         HZ_CUST_SITE_USES.PRICE_LIST_ID%TYPE;
7535 --    l_ship_partial                          HZ_CUST_SITE_USES.SHIP_PARTIAL%TYPE;
7536     l_fob_point                             HZ_CUST_SITE_USES.FOB_POINT%TYPE;
7537     l_item_cross_ref_pref                   HZ_CUST_SITE_USES.ITEM_CROSS_REF_PREF%TYPE;
7538     l_warehouse_id                          HZ_CUST_SITE_USES.WAREHOUSE_ID%TYPE;
7539     l_date_type_preference                  HZ_CUST_SITE_USES.DATE_TYPE_PREFERENCE%TYPE;
7540 --    l_ship_sets_include_lines_flag          HZ_CUST_SITE_USES.SHIP_SETS_INCLUDE_LINES_FLAG%TYPE;
7541     l_primary_flag                          HZ_CUST_SITE_USES.PRIMARY_FLAG%TYPE;
7542     l_error                                 BOOLEAN := FALSE;
7543     l_validate_flag                         varchar2(1) := 'Y';
7544     l_mosr_owner_table_id                   number;
7545     l_coa_id                                NUMBER;
7546     l_exist_flag                            VARCHAR2(1);
7547 
7548     l_temp_return_status                    VARCHAR2(10); -- for storing return status from
7549 	                                                      -- hz_orig_system_ref_pub.get_owner_table_id
7550 
7551 BEGIN
7552 
7553     -- Check if API is called in debug mode. If yes, enable debug.
7554     --enable_debug;
7555     -- Debug info.
7556 
7557     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7558         hz_utility_v2pub.debug(p_message=>'validate_cust_site_use (+)',
7559                                p_prefix=>l_debug_prefix,
7560                                p_msg_level=>fnd_log.level_procedure);
7561     END IF;
7562 
7563 
7564 
7565     -- Select fields for later use during update.
7566     IF p_create_update_flag = 'U' THEN
7567         SELECT CUST_ACCT_SITE_ID, SITE_USE_CODE, ORIG_SYSTEM_REFERENCE,
7568                CREATED_BY_MODULE, APPLICATION_ID, STATUS, SHIP_VIA, FREIGHT_TERM,
7569                SHIP_SETS_INCLUDE_LINES_FLAG,ARRIVALSETS_INCLUDE_LINES_FLAG,
7570                TAX_CODE,DEMAND_CLASS_CODE,PRIMARY_SALESREP_ID,FINCHRG_RECEIVABLES_TRX_ID,
7571                ORDER_TYPE_ID,PRICE_LIST_ID,FOB_POINT,ITEM_CROSS_REF_PREF,
7572                WAREHOUSE_ID,DATE_TYPE_PREFERENCE
7573         INTO l_cust_acct_site_id, l_site_use_code, l_orig_system_reference,
7574              l_created_by_module, l_application_id, l_status, l_ship_via, l_freight_term,
7575              l_ship_sets_inc_lines_f,l_arrivalsets_inc_lines_f,l_tax_code,l_demand_class_code,
7576              l_primary_salesrep_id,l_finchrg_receivables_trx_id,l_order_type_id,l_price_list_id,
7577              l_fob_point,l_item_cross_ref_pref,l_warehouse_id,l_date_type_preference
7578              FROM HZ_CUST_SITE_USES_ALL    -- Bug 3456489
7579         WHERE ROWID = p_rowid;
7580     END IF;
7581 
7582     --------------------------------------
7583     -- validate site_use_id
7584     --------------------------------------
7585 /****Logical APIs - validation not required****/
7586   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7587     IF p_create_update_flag = 'C' THEN
7588 
7589         -- If primary key value is passed, check for uniqueness.
7590         -- If primary key value is not passed, it will be generated
7591         -- from sequence by table handler.
7592 
7593 --Bug Fix 2399491, Checking for duplicates in the _all table.
7594 
7595         IF p_cust_site_use_rec.site_use_id IS NOT NULL AND
7596            p_cust_site_use_rec.site_use_id <> FND_API.G_MISS_NUM
7597         THEN
7598         BEGIN
7599             SELECT 'Y' INTO l_dummy
7600             FROM HZ_CUST_SITE_USES_ALL
7601             WHERE SITE_USE_ID = p_cust_site_use_rec.site_use_id;
7602 
7603             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7604             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_site_use_id' );
7605             FND_MSG_PUB.ADD;
7606             x_return_status := FND_API.G_RET_STS_ERROR;
7607         EXCEPTION
7608             WHEN NO_DATA_FOUND THEN
7609                 NULL;
7610         END;
7611 
7612         -- Debug info.
7613 
7614         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7615            hz_utility_v2pub.debug(p_message=>'site_use_id is unique during creation if passed in. ' ||
7616                                            'x_return_status = ' || x_return_status,
7617                                   p_prefix =>l_debug_prefix,
7618                                   p_msg_level=>fnd_log.level_statement);
7619         END IF;
7620 
7621         END IF;
7622     END IF;
7623 
7624     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7625            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
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     ----------------------------------------------
7633     -- validate cust_acct_site_id
7634     ----------------------------------------------
7635 /****Logical APIs - validation not required****/
7636   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7637     -- cust_acct_site_id is mandatory field
7638     -- Since cust_acct_site_id is non-updateable, we only need to check mandatory
7639     -- during creation.
7640 
7641     IF p_create_update_flag = 'C' THEN
7642         validate_mandatory (
7643             p_create_update_flag                    => p_create_update_flag,
7644             p_column                                => 'cust_acct_site_id',
7645             p_column_value                          => p_cust_site_use_rec.cust_acct_site_id,
7646             x_return_status                         => x_return_status );
7647 
7648         -- for later use. It is selected from database during update.
7649         l_cust_acct_site_id := p_cust_site_use_rec.cust_acct_site_id;
7650 
7651         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7652            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is mandatory. ' ||
7653                                            'x_return_status = ' || x_return_status,
7654                                   p_prefix =>l_debug_prefix,
7655                                   p_msg_level=>fnd_log.level_statement);
7656         END IF;
7657     END IF;
7658 
7659     -- cust_acct_site_id is non-updateable field
7660     IF p_create_update_flag = 'U' AND
7661        p_cust_site_use_rec.cust_acct_site_id IS NOT NULL
7662     THEN
7663         validate_nonupdateable (
7664             p_column                                => 'cust_acct_site_id',
7665             p_column_value                          => p_cust_site_use_rec.cust_acct_site_id,
7666             p_old_column_value                      => l_cust_acct_site_id,
7667             x_return_status                         => x_return_status );
7668 
7669         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7670            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is non-updateable. ' ||
7671                                                  'x_return_status = ' || x_return_status,
7672                                   p_prefix =>l_debug_prefix,
7673                                   p_msg_level=>fnd_log.level_statement);
7674         END IF;
7675     END IF;
7676 
7677     -- Since cust_acct_site_id is mandatory and non-updateable, we only need
7678     -- to check FK during site use creation.
7679 
7680     -- cust_acct_site_id is foreign key to hz_cust_acct_sites
7681     IF p_create_update_flag = 'C' AND
7682        p_cust_site_use_rec.cust_acct_site_id IS NOT NULL AND
7683        p_cust_site_use_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
7684     THEN
7685         check_cust_acct_site_fk (
7686             p_column                                 => 'cust_acct_site_id',
7687             p_column_value                           => p_cust_site_use_rec.cust_acct_site_id,
7688             p_org_id                                 => p_cust_site_use_rec.org_id,   -- Bug 3456489
7689             x_return_status                          => x_return_status );
7690 
7691         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7692            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is foreign key to hz_cust_acct_sites. ' ||
7693                                          'x_return_status = ' || x_return_status,
7694                                   p_prefix =>l_debug_prefix,
7695                                   p_msg_level=>fnd_log.level_statement);
7696         END IF;
7697     END IF;
7698 
7699     -- Find customer account id this site use belongs to.
7700     -- For later use.
7701 
7702     SELECT CUST_ACCOUNT_ID INTO l_cust_account_id
7703     FROM HZ_CUST_ACCT_SITES_ALL  -- Bug 3456489
7704     WHERE CUST_ACCT_SITE_ID = l_cust_acct_site_id;
7705 
7706     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7707            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
7708                             'x_return_status = ' || x_return_status,
7709                                   p_prefix =>l_debug_prefix,
7710                                   p_msg_level=>fnd_log.level_statement);
7711     END IF;
7712   END IF;
7713 
7714     --------------------------------------
7715     -- validate status
7716     --------------------------------------
7717 
7718     -- status cannot be set to null during update
7719     IF p_create_update_flag = 'U' AND
7720        p_cust_site_use_rec.status IS NOT NULL
7721     THEN
7722         validate_cannot_update_to_null (
7723             p_column                                => 'status',
7724             p_column_value                          => p_cust_site_use_rec.status,
7725             x_return_status                         => x_return_status );
7726 
7727         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7728            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
7729                                                 'x_return_status = ' || x_return_status,
7730                                   p_prefix =>l_debug_prefix,
7731                                   p_msg_level=>fnd_log.level_statement);
7732         END IF;
7733     END IF;
7734 
7735 /****Logical APIs - validation not required****/
7736   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7737     -- status is lookup code in lookup type CODE_STATUS
7738     IF p_cust_site_use_rec.status IS NOT NULL AND
7739        p_cust_site_use_rec.status <> FND_API.G_MISS_CHAR AND
7740        ( p_create_update_flag = 'C' OR
7741          ( p_create_update_flag = 'U'  AND
7742            p_cust_site_use_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
7743     THEN
7744         validate_lookup (
7745             p_column                                => 'status',
7746             p_lookup_type                           => 'CODE_STATUS',
7747             p_column_value                          => p_cust_site_use_rec.status,
7748             x_return_status                         => x_return_status );
7749 
7750         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7751            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
7752                                                  'x_return_status = ' || x_return_status,
7753                                   p_prefix =>l_debug_prefix,
7754                                   p_msg_level=>fnd_log.level_statement);
7755         END IF;
7756     END IF;
7757   END IF;
7758 
7759     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7760            hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
7761             'x_return_status = ' || x_return_status,
7762                                   p_prefix =>l_debug_prefix,
7763                                   p_msg_level=>fnd_log.level_statement);
7764     END IF;
7765 
7766     ----------------------------------------------
7767     -- validate site_use_code
7768     ----------------------------------------------
7769 
7770     -- site_use_code is mandatory field
7771     -- Since site_use_code is non-updateable, we only need to check mandatory
7772     -- during creation.
7773 
7774     IF p_create_update_flag = 'C' THEN
7775         validate_mandatory (
7776             p_create_update_flag                    => p_create_update_flag,
7777             p_column                                => 'site_use_code',
7778             p_column_value                          => p_cust_site_use_rec.site_use_code,
7779             x_return_status                         => x_return_status );
7780 
7781         -- for later use. It is selected from database during update.
7782         l_site_use_code := p_cust_site_use_rec.site_use_code;
7783 
7784         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7785            hz_utility_v2pub.debug(p_message=>'site_use_code is mandatory. ' ||
7786                       'x_return_status = ' || x_return_status,
7787                                   p_prefix =>l_debug_prefix,
7788                                   p_msg_level=>fnd_log.level_statement);
7789        END IF;
7790     END IF;
7791 
7792     -- site_use_code is non-updateable field
7793     IF p_create_update_flag = 'U' AND
7794        p_cust_site_use_rec.site_use_code IS NOT NULL
7795     THEN
7796         validate_nonupdateable (
7797             p_column                                => 'site_use_code',
7798             p_column_value                          => p_cust_site_use_rec.site_use_code,
7799             p_old_column_value                      => l_site_use_code,
7800             x_return_status                         => x_return_status );
7801 
7802         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7803            hz_utility_v2pub.debug(p_message=>'site_use_code is non-updateable. ' ||
7804                                            'x_return_status = ' || x_return_status,
7805                                   p_prefix =>l_debug_prefix,
7806                                   p_msg_level=>fnd_log.level_statement);
7807         END IF;
7808     END IF;
7809 
7810     -- site_use_code is lookup code in lookup type SITE_USE_CODE
7811     -- Since site_use_code is non-updateable, we only need to do the checking
7812     -- during creation.
7813 
7814     IF p_create_update_flag = 'C' AND
7815        p_cust_site_use_rec.site_use_code IS NOT NULL AND
7816        p_cust_site_use_rec.site_use_code <> FND_API.G_MISS_CHAR
7817     THEN
7818         validate_lookup (
7819             p_column                                => 'site_use_code',
7820             p_lookup_type                           => 'SITE_USE_CODE',
7821             p_column_value                          => p_cust_site_use_rec.site_use_code,
7822             x_return_status                         => x_return_status );
7823 
7824         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7825            hz_utility_v2pub.debug(p_message=>'site_use_code is lookup code in lookup type SITE_USE_CODE. ' ||
7826                                         'x_return_status = ' || x_return_status,
7827                                   p_prefix =>l_debug_prefix,
7828                                   p_msg_level=>fnd_log.level_statement);
7829         END IF;
7830     END IF;
7831 
7832     -- l_status is selected from database during update.
7833 
7834     IF p_cust_site_use_rec.status = 'A' OR
7835        ( p_create_update_flag = 'C' AND
7836          ( p_cust_site_use_rec.status IS NULL OR
7837            p_cust_site_use_rec.status = FND_API.G_MISS_CHAR ) ) OR
7838        ( p_create_update_flag = 'U' AND
7839          p_cust_site_use_rec.status IS NULL AND
7840          l_status = 'A' )
7841     THEN
7842 
7843         -- A customer can have only one active DUN, STMTS, LEGAL site use
7844 
7845         IF l_site_use_code IN ( 'DUN', 'STMTS', 'LEGAL' ) THEN
7846         BEGIN
7847             SELECT 'Y' INTO l_dummy
7848             FROM HZ_CUST_ACCT_SITES_ALL site,
7849                  HZ_CUST_SITE_USES_ALL su
7850             WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
7851             AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
7852             AND su.SITE_USE_CODE = l_site_use_code
7853             AND su.STATUS = 'A'
7854             AND ( p_create_update_flag = 'C' OR
7855                   p_create_update_flag = 'U' AND su.ROWID <> p_rowid )
7856             AND site.org_id = p_cust_site_use_rec.org_id   -- Bug 3456489
7857             AND su.org_id   = p_cust_site_use_rec.org_id   -- Bug 3456489
7858             AND ROWNUM = 1;
7859 
7860             IF l_site_use_code = 'DUN' THEN
7861                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_DUN_SITE' );
7862             ELSIF l_site_use_code = 'LEGAL' THEN
7863                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_LEGAL_SITE' );
7864             ELSIF l_site_use_code = 'STMTS' THEN
7865                 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_STMTS_SITE' );
7866             END IF;
7867 
7868             FND_MSG_PUB.ADD;
7869             x_return_status := FND_API.G_RET_STS_ERROR;
7870 
7871         EXCEPTION
7872             WHEN NO_DATA_FOUND THEN
7873                 NULL;
7874         END;
7875         END IF;
7876 
7877         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7878            hz_utility_v2pub.debug(p_message=>'A customer can have only one active DUN, STMTS, LEGAL site use. ' ||
7879                                                  'x_return_status = ' || x_return_status,
7880                                   p_prefix =>l_debug_prefix,
7881                                   p_msg_level=>fnd_log.level_statement);
7882         END IF;
7883     END IF;
7884 
7885     -- cust_acct_site_id and site_use_code together should be unique.
7886 
7887     -- Bug 3988537.
7888     BEGIN
7889         SELECT 'Y' INTO l_dummy
7890         FROM HZ_CUST_SITE_USES_ALL    -- Bug 3456489
7891         WHERE CUST_ACCT_SITE_ID = nvl(p_cust_site_use_rec.cust_acct_site_id,l_cust_acct_site_id)
7892         AND SITE_USE_CODE = nvl(p_cust_site_use_rec.site_use_code,l_site_use_code)
7893         AND SITE_USE_ID <> nvl(p_cust_site_use_rec.site_use_id,fnd_api.g_miss_num)
7894         AND STATUS = 'A'
7895         AND ORG_ID = p_cust_site_use_rec.org_id  -- Bug 3456489
7896         AND ROWNUM = 1;
7897 
7898         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7899         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - site_use_code' );
7900         FND_MSG_PUB.ADD;
7901         x_return_status := FND_API.G_RET_STS_ERROR;
7902     EXCEPTION
7903         WHEN NO_DATA_FOUND THEN
7904             NULL;
7905     END;
7906 
7907     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7908            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id and site_use_code together should be unique. ' ||
7909                                         'x_return_status = ' || x_return_status,
7910                                   p_prefix =>l_debug_prefix,
7911                                   p_msg_level=>fnd_log.level_statement);
7912     END IF;
7913 
7914 
7915     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7916            hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_code ... ' ||
7917                                          'x_return_status = ' || x_return_status,
7918                                   p_prefix =>l_debug_prefix,
7919                                   p_msg_level=>fnd_log.level_statement);
7920     END IF;
7921 
7922     ----------------------------------------------
7923     -- validate location
7924     ----------------------------------------------
7925 
7926     -- location should be mandatory.
7927 
7928     -- check if need generate location.
7929 --    BEGIN
7930 
7931    /* 3456489 Refer new HZ_Cache instead of AR System Parameters */
7932 
7933     BEGIN
7934         IF (p_create_update_flag = 'C') THEN
7935                 l_profile := HZ_MO_GLOBAL_CACHE.get_auto_site_numbering(
7936                                         p_cust_site_use_rec.org_id);
7937         END IF;
7938    EXCEPTION
7939    WHEN NO_DATA_FOUND THEN
7940         x_return_status := FND_API.G_RET_STS_ERROR;
7941    END ;
7942 
7943 
7944     IF p_create_update_flag = 'C' THEN
7945         IF p_cust_site_use_rec.location IS NULL OR
7946            p_cust_site_use_rec.location = FND_API.G_MISS_CHAR
7947         THEN
7948             IF l_profile = 'N' THEN
7949                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
7950                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'location' );
7951                 FND_MSG_PUB.ADD;
7952                 x_return_status := FND_API.G_RET_STS_ERROR;
7953             END IF;
7954 
7955             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7956                 hz_utility_v2pub.debug(p_message=>'location is mandatory if autonumbering is set to N. ' ||
7957                     'x_return_status = ' || x_return_status,
7958                                   p_prefix =>l_debug_prefix,
7959                                   p_msg_level=>fnd_log.level_statement);
7960             END IF;
7961 
7962         END IF;
7963     ELSIF p_create_update_flag = 'U' AND
7964           p_cust_site_use_rec.location IS NOT NULL
7965     THEN
7966         -- location cannot be set to null during update
7967         validate_cannot_update_to_null (
7968             p_column                                => 'location',
7969             p_column_value                          => p_cust_site_use_rec.location,
7970             x_return_status                         => x_return_status );
7971 
7972         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7973            hz_utility_v2pub.debug(p_message=>'location cannot be updated to null. ' ||
7974                 'x_return_status = ' || x_return_status,
7975                                   p_prefix =>l_debug_prefix,
7976                                   p_msg_level=>fnd_log.level_statement);
7977         END IF;
7978 
7979     END IF;
7980 
7981     -- location must be unique within a customer account/site_use_type
7982 
7983     IF p_cust_site_use_rec.location IS NOT NULL AND
7984        p_cust_site_use_rec.location <> FND_API.G_MISS_CHAR
7985     THEN
7986     BEGIN
7987 
7988 --Bug No : 2998504. Status check added to the where clause.
7989 
7990         SELECT 'Y' INTO l_dummy
7991         FROM HZ_CUST_ACCT_SITES_ALL site,
7992              HZ_CUST_SITE_USES_ALL su
7993         WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
7994         AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
7995         AND su.SITE_USE_CODE = l_site_use_code
7996         AND su.LOCATION = p_cust_site_use_rec.location
7997         AND ( p_create_update_flag = 'C' OR
7998               p_create_update_flag = 'U' AND su.ROWID <> p_rowid )
7999         AND su.STATUS = 'A'
8000         AND site.org_id     = p_cust_site_use_rec.org_id  -- Bug 3456489
8001         AND su.org_id       = p_cust_site_use_rec.org_id  -- Bug 3456489
8002         AND ROWNUM = 1;
8003 
8004 
8005         FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_DUP_CODE_LOCATION' );
8006         FND_MSG_PUB.ADD;
8007         x_return_status := FND_API.G_RET_STS_ERROR;
8008 
8009     EXCEPTION
8010         WHEN NO_DATA_FOUND THEN
8011             NULL;
8012     END;
8013 
8014     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8015            hz_utility_v2pub.debug(p_message=>'location must be unique within a customer account/site_use_type. ' ||
8016             'x_return_status = ' || x_return_status,
8017                                   p_prefix =>l_debug_prefix,
8018                                   p_msg_level=>fnd_log.level_statement);
8019     END IF;
8020 
8021     END IF;
8022 
8023     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8024            hz_utility_v2pub.debug(p_message=>'(+) after validate location ... ' ||
8025             'x_return_status = ' || x_return_status,
8026                                   p_prefix =>l_debug_prefix,
8027                                   p_msg_level=>fnd_log.level_statement);
8028     END IF;
8029 
8030     ----------------------------------------------
8031     -- validate contact_id
8032     ----------------------------------------------
8033     IF p_cust_site_use_rec.contact_id IS NOT NULL AND
8034        p_cust_site_use_rec.contact_id <> FND_API.G_MISS_NUM
8035     THEN
8036         check_cust_site_use_cont_fk (
8037             p_column                                 => 'cust_account_role_id',
8038             p_column_value                           => p_cust_site_use_rec.contact_id,
8039             p_customer_id                            => l_cust_account_id,
8040             x_return_status                          => x_return_status );
8041 
8042         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8043            hz_utility_v2pub.debug(p_message=>'contact_id is foreign key to hz_cust_account_roles. ' ||
8044                                          'x_return_status = ' || x_return_status,
8045                                   p_prefix =>l_debug_prefix,
8046                                   p_msg_level=>fnd_log.level_statement);
8047         END IF;
8048 
8049     END IF;
8050     ----------------------------------------------
8051     -- validate bill_to_site_use_id
8052     ----------------------------------------------
8053 
8054     -- For SHIP_TO site use, bill_to_site_use_id should be a valid
8055     -- BILL_TO site use of this account and its related account.
8056     -- For other type of site uses, this column should be NULL.
8057     -- Bug No : 2266165. Added the check for bill_to_flag.
8058     IF p_cust_site_use_rec.bill_to_site_use_id IS NOT NULL AND
8059        p_cust_site_use_rec.bill_to_site_use_id <> FND_API.G_MISS_NUM
8060     THEN
8061         IF l_site_use_code = 'SHIP_TO' THEN
8062         BEGIN
8063             SELECT 'Y' INTO l_dummy
8064             FROM HZ_CUST_ACCT_SITES_ALL site,
8065                  HZ_CUST_SITE_USES_ALL su
8066             WHERE su.SITE_USE_ID = p_cust_site_use_rec.bill_to_site_use_id
8067             AND su.SITE_USE_CODE = 'BILL_TO'
8068             AND su.STATUS = 'A'
8069             AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
8070             AND site.STATUS = 'A'
8071             AND site.org_id = p_cust_site_use_rec.org_id  -- Bug 3456489
8072             AND su.org_id   = p_cust_site_use_rec.org_id  -- Bug 3456489
8073             AND site.CUST_ACCOUNT_ID IN (
8074                 SELECT l_cust_account_id
8075                 FROM DUAL
8076                 UNION
8077                 SELECT CUST_ACCOUNT_ID
8078                 FROM HZ_CUST_ACCT_RELATE_ALL
8079                 WHERE RELATED_CUST_ACCOUNT_ID = l_cust_account_id
8080                 AND   BILL_TO_FLAG            = 'Y' );
8081         EXCEPTION
8082             WHEN NO_DATA_FOUND THEN
8083                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BILL_TO_SITE_USE_F' );
8084                 FND_MSG_PUB.ADD;
8085                 x_return_status := FND_API.G_RET_STS_ERROR;
8086         END;
8087 
8088         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8089            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. ' ||
8090                                 'x_return_status = ' || x_return_status,
8091                                   p_prefix =>l_debug_prefix,
8092                                   p_msg_level=>fnd_log.level_statement);
8093         END IF;
8094 
8095         ELSE
8096             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BILL_TO_SITE_USE_S' );
8097             FND_MSG_PUB.ADD;
8098             x_return_status := FND_API.G_RET_STS_ERROR;
8099         END IF;
8100     END IF;
8101 
8102 
8103     -- Bug 2836888.
8104     -- For BILL_TO site use, it should not be allowed
8105     -- to be inactivated if there exists active SHIP_TO uses
8106     -- with bill_to_site_id as the site_use_id of this 'BILL_TO'
8107     -- site use.
8108     IF p_create_update_flag = 'U'
8109     and p_cust_site_use_rec.status = 'I'
8110     and l_status = 'A'
8111     and nvl(p_cust_site_use_rec.site_use_code,l_site_use_code)='BILL_TO'
8112     THEN
8113        BEGIN
8114        SELECT 'Y'
8115        INTO l_exist_flag
8116        FROM hz_cust_site_uses_all hsu
8117        WHERE hsu.site_use_code = 'SHIP_TO'
8118        AND hsu.status = 'A'
8119        AND hsu.bill_to_site_use_id = p_cust_site_use_rec.site_use_id
8120        AND rownum = 1;
8121 
8122        FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_SHIP_TO_SITES_EXIST' );
8123        FND_MSG_PUB.ADD;
8124        x_return_status := FND_API.G_RET_STS_ERROR;
8125 
8126         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8127            hz_utility_v2pub.debug(p_message=>'For BILL_TO site use,  inactivation not allowed if a SHIP_TO address uses this BILL_TO address ' ||
8128                                 'x_return_status = ' || x_return_status,
8129                                   p_prefix =>l_debug_prefix,
8130                                   p_msg_level=>fnd_log.level_statement);
8131         END IF;
8132 
8133        EXCEPTION
8134        WHEN NO_DATA_FOUND THEN NULL;
8135        END;
8136     END IF;
8137 
8138     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8139            hz_utility_v2pub.debug(p_message=>'(+) after validate bill_to_site_use_id ... ' ||
8140                           'x_return_status = ' || x_return_status,
8141                                   p_prefix =>l_debug_prefix,
8142                                   p_msg_level=>fnd_log.level_statement);
8143     END IF;
8144 
8145 
8146 
8147 
8148     ----------------------------------------------
8149     -- validate orig_system_reference
8150     ----------------------------------------------
8151 /****Logical APIs - validation not required****/
8152   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8153     IF (p_cust_site_use_rec.orig_system is not null and p_cust_site_use_rec.orig_system <>fnd_api.g_miss_char)
8154     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)
8155      and p_create_update_flag = 'U'
8156     THEN
8157 
8158         hz_orig_system_ref_pub.get_owner_table_id
8159         (p_orig_system => p_cust_site_use_rec.orig_system,
8160         p_orig_system_reference => p_cust_site_use_rec.orig_system_reference,
8161         p_owner_table_name =>'HZ_CUST_SITE_USES_ALL',
8162         x_owner_table_id => l_mosr_owner_table_id,
8163         x_return_status => l_temp_return_status);
8164 
8165         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
8166 		    l_mosr_owner_table_id= nvl(p_cust_site_use_rec.site_use_id,l_mosr_owner_table_id))
8167         THEN
8168             l_validate_flag := 'N';
8169         END IF;
8170 
8171         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
8172 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
8173 		-- In case of success, leave it to carry over previous value as before this call.
8174 		-- Fix for Bug 5498116 (29-AUG-2006)
8175         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
8176           x_return_status := l_temp_return_status;
8177         END IF;
8178 
8179     end if;
8180     -- orig_system_reference is non-updateable field
8181     IF p_create_update_flag = 'U' AND
8182        p_cust_site_use_rec.orig_system_reference IS NOT NULL
8183        and l_validate_flag = 'Y'
8184     THEN
8185         validate_nonupdateable (
8186             p_column                                => 'orig_system_reference',
8187             p_column_value                          => p_cust_site_use_rec.orig_system_reference,
8188             p_old_column_value                      => l_orig_system_reference,
8189             x_return_status                         => x_return_status );
8190 
8191         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8192            hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
8193                                 'x_return_status = ' || x_return_status,
8194                                   p_prefix =>l_debug_prefix,
8195                                   p_msg_level=>fnd_log.level_statement);
8196         END IF;
8197 
8198     END IF;
8199     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8200            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
8201                          'x_return_status = ' || x_return_status,
8202                                   p_prefix =>l_debug_prefix,
8203                                   p_msg_level=>fnd_log.level_statement);
8204     END IF;
8205   END IF;
8206 
8207     ----------------------------------------------
8208     -- validate freight_term
8209     ----------------------------------------------
8210 
8211     -- freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups
8212     IF p_cust_site_use_rec.freight_term IS NOT NULL AND
8213        p_cust_site_use_rec.freight_term <> FND_API.G_MISS_CHAR AND
8214        ( p_create_update_flag = 'C' OR
8215          ( p_create_update_flag = 'U'  AND
8216            p_cust_site_use_rec.freight_term <> NVL( l_freight_term, FND_API.G_MISS_CHAR ) ) )
8217     THEN
8218         validate_lookup (
8219             p_column                                => 'freight_term',
8220             p_lookup_table                          => 'SO_LOOKUPS',
8221             p_lookup_type                           => 'FREIGHT_TERMS',
8222             p_column_value                          => p_cust_site_use_rec.freight_term,
8223             x_return_status                         => x_return_status );
8224 
8225         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8226            hz_utility_v2pub.debug(p_message=>'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
8227                 'x_return_status = ' || x_return_status,
8228                                   p_prefix =>l_debug_prefix,
8229                                   p_msg_level=>fnd_log.level_statement);
8230         END IF;
8231     END IF;
8232 
8233     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8234            hz_utility_v2pub.debug(p_message=>'(+) after validate freight_term ... ' ||
8235             'x_return_status = ' || x_return_status,
8236                                   p_prefix =>l_debug_prefix,
8237                                   p_msg_level=>fnd_log.level_statement);
8238     END IF;
8239 
8240     ----------------------------------------------
8241     -- validate primary_flag
8242     ----------------------------------------------
8243 
8244     -- primary_flag cannot be set to null during update
8245     IF p_create_update_flag = 'U' AND
8246        p_cust_site_use_rec.primary_flag IS NOT NULL
8247     THEN
8248         validate_cannot_update_to_null (
8249             p_column                                => 'primary_flag',
8250             p_column_value                          => p_cust_site_use_rec.primary_flag,
8251             x_return_status                         => x_return_status );
8252 
8253         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8254            hz_utility_v2pub.debug(p_message=>'primary_flag cannot be updated to NULL. ' ||
8255                          'x_return_status = ' || x_return_status,
8256                                   p_prefix =>l_debug_prefix,
8257                                   p_msg_level=>fnd_log.level_statement);
8258         END IF;
8259 
8260     END IF;
8261 
8262 /****Logical APIs - validation not required****/
8263   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8264     -- primary_flag is lookup code in lookup type YES/NO
8265     IF p_cust_site_use_rec.primary_flag IS NOT NULL AND
8266        p_cust_site_use_rec.primary_flag <> FND_API.G_MISS_CHAR
8267     THEN
8268         validate_lookup (
8269             p_column                                => 'primary_flag',
8270             p_lookup_type                           => 'YES/NO',
8271             p_column_value                          => p_cust_site_use_rec.primary_flag,
8272             x_return_status                         => x_return_status );
8273 
8274         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8275            hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
8276                                   'x_return_status = ' || x_return_status,
8277                                   p_prefix =>l_debug_prefix,
8278                                   p_msg_level=>fnd_log.level_statement);
8279         END IF;
8280 
8281     END IF;
8282   END IF;
8283 
8284     -- only one primary is allowed for one site use type per account
8285     -- Bug Fix : 2260832
8286     -- Bug 2643624  Removing the below validation so as to enable the setting
8287     --              of another site use as primary.
8288 /*
8289 
8290     IF p_cust_site_use_rec.primary_flag = 'Y'
8291     THEN
8292     BEGIN
8293         SELECT 'Y'  INTO l_dummy
8294         FROM HZ_CUST_ACCT_SITES site,
8295              HZ_CUST_SITE_USES su
8296         WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
8297         AND su.CUST_ACCT_SITE_ID = site.CUST_ACCT_SITE_ID
8298         AND su.SITE_USE_CODE = l_site_use_code
8299         AND su.PRIMARY_FLAG = 'Y'
8300 --Bug 2792589        AND su.STATUS       = 'Y'
8301         AND su.STATUS       = 'A'
8302         AND ( p_create_update_flag = 'C' OR
8303               (p_create_update_flag = 'U' AND su.ROWID <> p_rowid ))
8304         AND ROWNUM = 1;
8305 
8306         FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_PRIMARY_SU' );
8307         FND_MESSAGE.SET_TOKEN( 'SITE_CODE', l_site_use_code );
8308         FND_MSG_PUB.ADD;
8309         x_return_status := FND_API.G_RET_STS_ERROR;
8310 
8311     EXCEPTION
8312         WHEN NO_DATA_FOUND THEN
8313             NULL;
8314     END;
8315 
8316     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8317            hz_utility_v2pub.debug(p_message=>'only one primary is allowed for one site use type per account. ' ||
8318                                          'x_return_status = ' || x_return_status,
8319                                   p_prefix =>l_debug_prefix,
8320                                   p_msg_level=>fnd_log.level_statement);
8321     END IF;
8322 
8323     END IF;
8324 */
8325 
8326     -- check to ensure that an inactive site use is never marked
8327     -- as primary.
8328     IF p_create_update_flag = 'C' THEN
8329       IF p_cust_site_use_rec.primary_flag IS NULL OR
8330          p_cust_site_use_rec.primary_flag = fnd_api.g_miss_char
8331       THEN
8332         l_primary_flag := 'N';
8333       ELSE
8334         l_primary_flag := p_cust_site_use_rec.primary_flag;
8335       END IF;
8336 
8337       IF p_cust_site_use_rec.status IS NULL OR
8338          p_cust_site_use_rec.status = fnd_api.g_miss_char
8339       THEN
8340         l_status := 'A';
8341       ELSE
8342         l_status := p_cust_site_use_rec.status;
8343       END IF;
8344 
8345       IF l_primary_flag = 'Y' AND l_status <> 'A' THEN
8346         l_error := TRUE;
8347       END IF;
8348     ELSE
8349       IF p_cust_site_use_rec.primary_flag = 'Y' AND
8350          ((p_cust_site_use_rec.status IS NOT NULL AND
8351            p_cust_site_use_rec.status <> 'A') OR
8352           (p_cust_site_use_rec.status IS NULL AND
8353            l_status <> 'A'))
8354       THEN
8355         l_error := TRUE;
8356       END IF;
8357     END IF;
8358 
8359     IF l_error THEN
8360           fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8361           fnd_message.set_token('ENTITY', 'Site Use');
8362       --    fnd_message.set_token('COLUMN1', 'primary_flag');
8363       --    fnd_message.set_token('COLUMN2', 'status');
8364           fnd_msg_pub.add;
8365           x_return_status := FND_API.G_RET_STS_ERROR;
8366       -- reset l_error for later use.
8367           l_error := FALSE;
8368     END IF;
8369 
8370     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8371            hz_utility_v2pub.debug(p_message=>'an inactive site use is never marked as primary. ' ||
8372                                          'x_return_status = ' || x_return_status,
8373                                   p_prefix =>l_debug_prefix,
8374                                   p_msg_level=>fnd_log.level_statement);
8375     END IF;
8376 
8377 
8378     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8379            hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
8380                                          'x_return_status = ' || x_return_status,
8381                                   p_prefix =>l_debug_prefix,
8382                                   p_msg_level=>fnd_log.level_statement);
8383     END IF;
8384 
8385 
8386 --bug fix 2311760
8387 /***************************
8388     ----------------------------------------------
8389     -- validate ship_partial
8390     ----------------------------------------------
8391 
8392     -- ship_partial is lookup code in lookup type YES/NO
8393     IF p_cust_site_use_rec.ship_partial IS NOT NULL AND
8394        p_cust_site_use_rec.ship_partial <> FND_API.G_MISS_CHAR
8395     THEN
8396         validate_lookup (
8397             p_column                                => 'ship_partial',
8398             p_lookup_type                           => 'YES/NO',
8399             p_column_value                          => p_cust_site_use_rec.ship_partial,
8400             x_return_status                         => x_return_status );
8401 
8402         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8403            hz_utility_v2pub.debug(p_message=>'ship_partial is lookup code in lookup type YES/NO. ' ||
8404                                                 'x_return_status = ' || x_return_status,
8405                                   p_prefix =>l_debug_prefix,
8406                                   p_msg_level=>fnd_log.level_statement);
8407         END IF;
8408 
8409     END IF;
8410 
8411     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8412            hz_utility_v2pub.debug(p_message=>'(+) after validate ship_partial ... ' ||
8413                                                 'x_return_status = ' || x_return_status,
8414                                   p_prefix =>l_debug_prefix,
8415                                   p_msg_level=>fnd_log.level_statement);
8416     END IF;
8417 
8418 ***********************/
8419     ----------------------------------------------
8420     -- validate ship_sets_include_lines_flag
8421     ----------------------------------------------
8422 /****Logical APIs - validation not required****/
8423   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8424     -- ship_sets_include_lines_flag is lookup code in lookup type YES/NO
8425     IF p_cust_site_use_rec.ship_sets_include_lines_flag IS NOT NULL AND
8426        p_cust_site_use_rec.ship_sets_include_lines_flag <> FND_API.G_MISS_CHAR
8427     THEN
8428         validate_lookup (
8429             p_column                                => 'ship_sets_include_lines_flag',
8430             p_lookup_type                           => 'YES/NO',
8431             p_column_value                          => p_cust_site_use_rec.ship_sets_include_lines_flag,
8432             x_return_status                         => x_return_status );
8433 
8434         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8435            hz_utility_v2pub.debug(p_message=>'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
8436                                         'x_return_status = ' || x_return_status,
8437                                   p_prefix =>l_debug_prefix,
8438                                   p_msg_level=>fnd_log.level_statement);
8439         END IF;
8440 
8441     END IF;
8442   END IF;
8443 
8444 --If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag
8445 --is always set to N.
8446 IF (p_create_update_flag = 'C' or
8447    (p_create_update_flag ='U' and
8448     p_cust_site_use_rec.ship_sets_include_lines_flag <> NVL(l_ship_sets_inc_lines_f,FND_API.G_MISS_CHAR)))
8449 THEN
8450    IF p_cust_site_use_rec.ship_sets_include_lines_flag = 'Y'
8451    THEN
8452     BEGIN
8453        SELECT decode(p_cust_site_use_rec.ship_sets_include_lines_flag,p_cust_site_use_rec.arrivalsets_include_lines_flag,
8454                      'N',l_arrivalsets_inc_lines_f,
8455                                         decode(p_cust_site_use_rec.arrivalsets_include_lines_flag,l_ship_sets_inc_lines_f,
8456                                                'Y','N'),'Y')
8457        INTO l_dummy
8458        FROM DUAL;
8459        IF l_dummy <> 'Y'
8460        THEN
8461             FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
8462             FND_MESSAGE.SET_TOKEN('COLUMN1','ship_sets_include_lines_flag');
8463             FND_MESSAGE.SET_TOKEN('VALUE1','Y');
8464             FND_MESSAGE.SET_TOKEN('COLUMN2','arrivalsets_include_lines_flag');
8465             FND_MESSAGE.SET_TOKEN('VALUE2','N');
8466             FND_MSG_PUB.ADD;
8467             x_return_status := FND_API.G_RET_STS_ERROR;
8468         END IF;
8469     END ;
8470    END IF;
8471 END IF;
8472 
8473           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8474                 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. '||
8475                   'x_return_status = ' || x_return_status,
8476                                   p_prefix =>l_debug_prefix,
8477                                   p_msg_level=>fnd_log.level_statement);
8478           END IF;
8479 
8480           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8481                  hz_utility_v2pub.debug(p_message=>'(+) after validate ship_sets_include_lines_flag ... ' ||
8482                            'x_return_status = ' || x_return_status,
8483                                   p_prefix =>l_debug_prefix,
8484                                   p_msg_level=>fnd_log.level_statement);
8485            END IF;
8486 
8487     ----------------------------------------------
8488     -- validate arrivalsets_include_lines_flag
8489     ----------------------------------------------
8490 /****Logical APIs - validation not required****/
8491   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8492     -- arrivalsets_include_lines_flag is lookup code in lookup type YES/NO
8493     IF p_cust_site_use_rec.arrivalsets_include_lines_flag IS NOT NULL AND
8494        p_cust_site_use_rec.arrivalsets_include_lines_flag <> FND_API.G_MISS_CHAR
8495     THEN
8496         validate_lookup (
8497             p_column                                => 'arrivalsets_include_lines_flag',
8498             p_lookup_type                           => 'YES/NO',
8499             p_column_value                          => p_cust_site_use_rec.arrivalsets_include_lines_flag,
8500             x_return_status                         => x_return_status );
8501 
8502         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8503            hz_utility_v2pub.debug(p_message=>'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
8504                    'x_return_status = ' || x_return_status,
8505                                   p_prefix =>l_debug_prefix,
8506                                   p_msg_level=>fnd_log.level_statement);
8507         END IF;
8508 
8509     END IF;
8510   END IF;
8511 
8512 --If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag
8513 --is always set to N.
8514 
8515 IF (p_create_update_flag ='C' or
8516     (p_create_update_flag ='U' and
8517     p_cust_site_use_rec.arrivalsets_include_lines_flag <> NVL(l_arrivalsets_inc_lines_f,FND_API.G_MISS_CHAR)))
8518 THEN
8519  IF p_cust_site_use_rec.arrivalsets_include_lines_flag = 'Y'
8520  THEN
8521    BEGIN
8522      SELECT decode(p_cust_site_use_rec.arrivalsets_include_lines_flag,p_cust_site_use_rec.ship_sets_include_lines_flag,
8523                    'N',l_ship_sets_inc_lines_f,
8524                                        decode(p_cust_site_use_rec.ship_sets_include_lines_flag,l_arrivalsets_inc_lines_f,
8525                                                'Y','N'),'Y')
8526      INTO l_dummy
8527      FROM DUAL;
8528      IF l_dummy <> 'Y'
8529      THEN
8530             FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
8531             FND_MESSAGE.SET_TOKEN('COLUMN1','arrivalsets_include_lines_flag');
8532             FND_MESSAGE.SET_TOKEN('VALUE1','Y');
8533             FND_MESSAGE.SET_TOKEN('COLUMN2','ship_sets_include_lines_flag');
8534             FND_MESSAGE.SET_TOKEN('VALUE2','N');
8535             FND_MSG_PUB.ADD;
8536             x_return_status := FND_API.G_RET_STS_ERROR;
8537      END IF;
8538    END ;
8539   END IF;
8540 END IF;
8541 
8542         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8543            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. ' ||
8544                          'x_return_status = ' || x_return_status,
8545                                   p_prefix =>l_debug_prefix,
8546                                   p_msg_level=>fnd_log.level_statement);
8547         END IF;
8548 
8549         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8550            hz_utility_v2pub.debug(p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
8551                                         'x_return_status = ' || x_return_status,
8552                                   p_prefix =>l_debug_prefix,
8553                                   p_msg_level=>fnd_log.level_statement);
8554         END IF;
8555 
8556         ------------------------------------------
8557         -- validate tax_code
8558         ------------------------------------------
8559         --Tax_code should be a valid value defined in zx_output_classifications_v
8560 
8561         IF p_cust_site_use_rec.tax_code is NOT NULL AND
8562            p_cust_site_use_rec.tax_code <> FND_API.G_MISS_CHAR
8563           AND ( p_create_update_flag = 'C' OR
8564            ( p_create_update_flag = 'U'  AND
8565             p_cust_site_use_rec.tax_code <> NVL( l_tax_code, FND_API.G_MISS_CHAR ) ) )
8566         THEN
8567            check_tax_code(
8568                p_column                                => 'tax_code',
8569                p_column_value                          => p_cust_site_use_rec.tax_code,
8570 	       -- Bug 4713150
8571                -- p_org_id                                => p_cust_site_use_rec.org_id,  -- Bug 3456489
8572 	       p_called_from                           => 'validate_cust_site_use',
8573                x_return_status                         => x_return_status );
8574 
8575            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8576               hz_utility_v2pub.debug(p_message=>'Tax_code should be a valid value defined in view zx_output_classifications_v. '||
8577                                                  'x_return_status = ' || x_return_status,
8578                                   p_prefix =>l_debug_prefix,
8579                                   p_msg_level=>fnd_log.level_statement);
8580            END IF;
8581 
8582         END IF;
8583 
8584            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8585                    hz_utility_v2pub.debug(p_message=>'(+) after validate tax_code..' ||
8586                                         'x_return_status = ' || x_return_status,
8587                                   p_prefix =>l_debug_prefix,
8588                                   p_msg_level=>fnd_log.level_statement);
8589            END IF;
8590         ------------------------------------
8591         --validate payment_term_id
8592         ------------------------------------
8593         --Payment_term_id should be a valid value defined in RA_TERMS
8594 
8595         IF p_cust_site_use_rec.payment_term_id is NOT NULL AND
8596            p_cust_site_use_rec.payment_term_id <> FND_API.G_MISS_NUM
8597           AND ( p_create_update_flag = 'C' OR
8598            ( p_create_update_flag = 'U'  AND
8599             p_cust_site_use_rec.payment_term_id <> NVL( l_payment_term_id, FND_API.G_MISS_NUM ) ) )
8600         THEN
8601             check_payterm_id_fk(
8602                     p_column                                => 'payment_term_id',
8603                     p_column_value                          => p_cust_site_use_rec.payment_term_id,
8604                     x_return_status                         => x_return_status );
8605 
8606             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8607                 hz_utility_v2pub.debug(p_message=>'Payment_term_id should be a valid value defined in  RA_TERMS. '||
8608                   'x_return_status = ' || x_return_status,
8609                                   p_prefix =>l_debug_prefix,
8610                                   p_msg_level=>fnd_log.level_statement);
8611             END IF;
8612 
8613         END IF;
8614 
8615             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8616                    hz_utility_v2pub.debug(p_message=>'(+) after validate payment_term_id..' ||
8617                                                  'x_return_status = ' || x_return_status,
8618                                   p_prefix =>l_debug_prefix,
8619                                   p_msg_level=>fnd_log.level_statement);
8620             END IF;
8621         ---------------------------------------------
8622         --validate demand_class_code
8623         ---------------------------------------------
8624         --Demand_class_code is lookup_code in lookup_type DEMAND_CLASS in fnd_common_lookups
8625 
8626         IF p_cust_site_use_rec.demand_class_code is NOT NULL AND
8627            p_cust_site_use_rec.demand_class_code <> FND_API.G_MISS_CHAR
8628           AND ( p_create_update_flag = 'C' OR
8629            ( p_create_update_flag = 'U'  AND
8630             p_cust_site_use_rec.demand_class_code <> NVL(l_demand_class_code,FND_API.G_MISS_CHAR) ) )
8631         THEN
8632             validate_lookup(
8633                 p_column               =>'demand_class_code',
8634                 p_lookup_table         =>'FND_COMMON_LOOKUPS',
8635                 p_lookup_type           =>'DEMAND_CLASS',
8636                 p_column_value         =>p_cust_site_use_rec.demand_class_code,
8637                 x_return_status        =>x_return_status   );
8638             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8639                   hz_utility_v2pub.debug(p_message=>'Demand_class_code is lookup_code in lookup_type DEMAND_CLASS in fnd_common_lookups. '||
8640                           'x_return_status = ' || x_return_status,
8641                                   p_prefix =>l_debug_prefix,
8642                                   p_msg_level=>fnd_log.level_statement);
8643              END IF;
8644         END IF;
8645 
8646             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8647                  hz_utility_v2pub.debug(p_message=>'(+) after validate demand_class_code..' ||
8648                                   'x_return_status = ' || x_return_status,
8649                                   p_prefix =>l_debug_prefix,
8650                                   p_msg_level=>fnd_log.level_statement);
8651             END IF;
8652 
8653         -----------------------------------------------
8654         --validate primary_salesrep_id
8655         -----------------------------------------------
8656         --Primary_salesrep_id should be a valid value defined in RA_SALESREPS
8657 
8658         IF p_cust_site_use_rec.primary_salesrep_id is NOT NULL AND
8659            p_cust_site_use_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
8660           AND ( p_create_update_flag = 'C' OR
8661            ( p_create_update_flag = 'U'  AND
8662             p_cust_site_use_rec.primary_salesrep_id <> NVL(l_primary_salesrep_id,FND_API.G_MISS_NUM) ) )
8663         THEN
8664             check_prim_salesrep(
8665                    p_column                                => 'primary_salesrep_id',
8666                    p_column_value                          => p_cust_site_use_rec.primary_salesrep_id,
8667                    p_org_id                                => p_cust_site_use_rec.org_id,  -- Bug 3456489
8668                    x_return_status                         => x_return_status );
8669 
8670             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8671                 hz_utility_v2pub.debug(p_message=>'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
8672                   'x_return_status = ' || x_return_status,
8673                                   p_prefix =>l_debug_prefix,
8674                                   p_msg_level=>fnd_log.level_statement);
8675              END IF;
8676 
8677         END IF;
8678              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8679                 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_salesrep_id..' ||
8680                          'x_return_status = ' || x_return_status,
8681                                   p_prefix =>l_debug_prefix,
8682                                   p_msg_level=>fnd_log.level_statement);
8683              END IF;
8684 
8685 ----------------------------------------------------
8686 --validate finchrg_receivables_trx_id
8687 ----------------------------------------------------
8688 IF p_cust_site_use_rec.finchrg_receivables_trx_id is NOT NULL AND
8689    p_cust_site_use_rec.finchrg_receivables_trx_id <> FND_API.G_MISS_NUM
8690           AND ( p_create_update_flag = 'C' OR
8691            ( p_create_update_flag = 'U'  AND
8692             p_cust_site_use_rec.finchrg_receivables_trx_id <> NVL(l_finchrg_receivables_trx_id,FND_API.G_MISS_NUM) ) )
8693 THEN
8694               check_finchrg_trx_fk(
8695                    p_column                 => 'finchrg_receivables_trx_id',
8696                    p_column_value           => p_cust_site_use_rec.finchrg_receivables_trx_id,
8697                    p_org_id                 => p_cust_site_use_rec.org_id,  -- Bug 3456489
8698                    x_return_status          => x_return_status );
8699 
8700 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8701            hz_utility_v2pub.debug(p_message=>'finchrg_receivables_trx_id should be a valid value defined in AR_RECEIVABLES_TRX. '||
8702                          'x_return_status = ' || x_return_status,
8703                                   p_prefix =>l_debug_prefix,
8704                                   p_msg_level=>fnd_log.level_statement);
8705  END IF;
8706 
8707 
8708 END IF;
8709 
8710  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8711            hz_utility_v2pub.debug(p_message=>'(+) after validate finchrg_receivables_trx_id..' ||
8712                                          'x_return_status = ' || x_return_status,
8713                                   p_prefix =>l_debug_prefix,
8714                                   p_msg_level=>fnd_log.level_statement);
8715  END IF;
8716 
8717 
8718 
8719         -------------------------------------------
8720         --validate order_Type_id
8721         -------------------------------------------
8722         --order_type_id should be a valid value defined in OE_ORDER_TYPES_V
8723 
8724         IF p_cust_site_use_rec.order_type_id is NOT NULL AND
8725            p_cust_site_use_rec.order_type_id <> FND_API.G_MISS_NUM
8726           AND ( p_create_update_flag = 'C' OR
8727            ( p_create_update_flag = 'U'  AND
8728             p_cust_site_use_rec.order_type_id <> NVL(l_order_type_id,FND_API.G_MISS_NUM) ) )
8729         THEN
8730             check_ord_type(
8731                    p_column                                => 'order_type_id',
8732                    p_column_value                          => p_cust_site_use_rec.order_type_id,
8733                    p_org_id                                => p_cust_site_use_rec.org_id,  -- Bug 3456489
8734                    x_return_status                         => x_return_status );
8735 
8736             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8737                 hz_utility_v2pub.debug(p_message=>'order_type_id should be a valid value defined in OE_ORDER_TYPES_V. '||
8738                          'x_return_status = ' || x_return_status,
8739                                   p_prefix =>l_debug_prefix,
8740                                   p_msg_level=>fnd_log.level_statement);
8741             END IF;
8742 
8743         END IF;
8744 
8745             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8746                   hz_utility_v2pub.debug(p_message=>'(+) after validate order_type_id..' ||
8747                                                 'x_return_status = ' || x_return_status,
8748                                   p_prefix =>l_debug_prefix,
8749                                   p_msg_level=>fnd_log.level_statement);
8750             END IF;
8751 
8752 
8753         ----------------------------------------------------------
8754         --validate price_list_id
8755         ----------------------------------------------------------
8756         --price_list_id should be a valid value defined in SO_PRICE_LISTS
8757 
8758         IF p_cust_site_use_rec.price_list_id is NOT NULL AND
8759            p_cust_site_use_rec.price_list_id <> FND_API.G_MISS_NUM
8760           AND ( p_create_update_flag = 'C' OR
8761            ( p_create_update_flag = 'U'  AND
8762             p_cust_site_use_rec.price_list_id <> NVL(l_price_list_id,FND_API.G_MISS_NUM) ) )
8763         THEN
8764             check_price_list_fk(
8765                  p_column                           => 'price_list_id',
8766                  p_column_value                     => p_cust_site_use_rec.price_list_id,
8767                  x_return_status                    => x_return_status );
8768 
8769             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8770                 hz_utility_v2pub.debug(p_message=>'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
8771                                  'x_return_status = ' || x_return_status,
8772                                   p_prefix =>l_debug_prefix,
8773                                   p_msg_level=>fnd_log.level_statement);
8774             END IF;
8775 
8776         END IF;
8777 
8778             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8779                 hz_utility_v2pub.debug(p_message=>'(+) after validate price_list_id..' ||
8780                    'x_return_status = ' || x_return_status,
8781                                   p_prefix =>l_debug_prefix,
8782                                   p_msg_level=>fnd_log.level_statement);
8783             END IF;
8784 
8785 
8786         ----------------------------------------------
8787         --validate item_cross_ref_pref
8788         ----------------------------------------------
8789         --item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should have value 'INT' or 'CUST'
8790 
8791         IF p_cust_site_use_rec.item_cross_ref_pref IS NOT NULL AND
8792            p_cust_site_use_rec.item_cross_ref_pref <> FND_API.G_MISS_CHAR
8793           AND ( p_create_update_flag = 'C' OR
8794            ( p_create_update_flag = 'U'  AND
8795             p_cust_site_use_rec.item_cross_ref_pref <> NVL(l_item_cross_ref_pref,FND_API.G_MISS_CHAR) ) )
8796         THEN
8797           IF p_cust_site_use_rec.item_cross_ref_pref NOT IN('INT','CUST')
8798           THEN
8799              check_item_cross_ref(
8800                     p_column                           => 'price_list_id',
8801                     p_column_value                     => p_cust_site_use_rec.item_cross_ref_pref,
8802                     x_return_status                    => x_return_status );
8803 
8804              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8805                 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 . ' ||
8806                    'x_return_status = ' || x_return_status,
8807                                   p_prefix =>l_debug_prefix,
8808                                   p_msg_level=>fnd_log.level_statement);
8809              END IF;
8810 
8811           END IF;
8812         END IF;
8813 
8814             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8815                  hz_utility_v2pub.debug(p_message=>'(+) after validate item_cross_ref_pref..' ||
8816                                                 'x_return_status = ' || x_return_status,
8817                                   p_prefix =>l_debug_prefix,
8818                                   p_msg_level=>fnd_log.level_statement);
8819             END IF;
8820 
8821         --------------------------------------------------
8822         --validate warehouse_id
8823         --------------------------------------------------
8824         --warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS
8825 
8826         IF p_cust_site_use_rec.warehouse_id is NOT NULL AND
8827            p_cust_site_use_rec.warehouse_id <> FND_API.G_MISS_NUM
8828           AND ( p_create_update_flag = 'C' OR
8829            ( p_create_update_flag = 'U'  AND
8830             p_cust_site_use_rec.warehouse_id <> NVL(l_warehouse_id,FND_API.G_MISS_NUM) ) )
8831         THEN
8832             check_warehouse(
8833                   p_column                           => 'warehouse_id',
8834                   p_column_value                     => p_cust_site_use_rec.warehouse_id,
8835                   x_return_status                    => x_return_status );
8836 
8837             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8838                 hz_utility_v2pub.debug(p_message=>'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
8839                           'x_return_status = ' || x_return_status,
8840                                   p_prefix =>l_debug_prefix,
8841                                   p_msg_level=>fnd_log.level_statement);
8842             END IF;
8843 
8844         END IF;
8845 
8846             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8847                 hz_utility_v2pub.debug(p_message=>'(+) after validate warehouse_id..' ||
8848                                         'x_return_status = ' || x_return_status,
8849                                   p_prefix =>l_debug_prefix,
8850                                   p_msg_level=>fnd_log.level_statement);
8851             END IF;
8852 
8853 
8854 
8855          ----------------------------------------------
8856          --validate fob_point
8857          ----------------------------------------------
8858         --fob_point is lookup_code in lookup type FOB
8859 
8860         IF p_cust_site_use_rec.fob_point is NOT NULL AND
8861            p_cust_site_use_rec.fob_point <> FND_API.G_MISS_CHAR
8862           AND ( p_create_update_flag = 'C' OR
8863            ( p_create_update_flag = 'U'  AND
8864             p_cust_site_use_rec.fob_point <> NVL(l_fob_point,FND_API.G_MISS_CHAR) ) )
8865         THEN
8866             validate_lookup(
8867                 p_column        =>'fob_point',
8868                 p_lookup_type   =>'FOB',
8869                 p_column_value  =>p_cust_site_use_rec.fob_point,
8870                 x_return_status =>x_return_status  );
8871 
8872             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8873                 hz_utility_v2pub.debug(p_message=>'fob_point is lookup_code in lookup type FOB. '||
8874                                                 'x_return_status = ' || x_return_status,
8875                                   p_prefix =>l_debug_prefix,
8876                                   p_msg_level=>fnd_log.level_statement);
8877             END IF;
8878 
8879         END IF;
8880 
8881              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8882                 hz_utility_v2pub.debug(p_message=>'(+) after validate fob_point..' ||
8883                          'x_return_status = ' || x_return_status,
8884                                   p_prefix =>l_debug_prefix,
8885                                   p_msg_level=>fnd_log.level_statement);
8886             END IF;
8887 
8888 
8889 
8890         ----------------------------------------------------------
8891         --validate date_type_preference
8892         ----------------------------------------------------------
8893         --date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups
8894 
8895         IF p_cust_site_use_rec.date_type_preference IS NOT NULL AND
8896            p_cust_site_use_rec.date_type_preference <> FND_API.G_MISS_CHAR
8897           AND ( p_create_update_flag = 'C' OR
8898            ( p_create_update_flag = 'U'  AND
8899             p_cust_site_use_rec.date_type_preference <> NVL(l_date_type_preference,FND_API.G_MISS_CHAR) ) )
8900         THEN
8901             validate_lookup(
8902                  p_column               =>'date_type_preference',
8903                  p_lookup_table         =>'OE_LOOKUPS',
8904                  p_lookup_type          =>'REQUEST_DATE_TYPE',
8905                  p_column_value         =>p_cust_site_use_rec.date_type_preference,
8906                  x_return_status        =>x_return_status   );
8907 
8908              IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8909                 hz_utility_v2pub.debug(p_message=>'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
8910                                  'x_return_status = ' || x_return_status,
8911                                   p_prefix =>l_debug_prefix,
8912                                   p_msg_level=>fnd_log.level_statement);
8913             END IF;
8914 
8915         END IF;
8916 
8917            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8918                 hz_utility_v2pub.debug(p_message=>'(+) after validate date_type_preference..' ||
8919                                         'x_return_status = ' || x_return_status,
8920                                   p_prefix =>l_debug_prefix,
8921                                   p_msg_level=>fnd_log.level_statement);
8922            END IF;
8923 
8924 --Bug fix 2311760
8925 /***************************
8926     ----------------------------------------------
8927     -- validate ship_partial
8928     ----------------------------------------------
8929 
8930     -- ship_partial is lookup code in lookup type YES/NO
8931     IF p_cust_site_use_rec.ship_partial IS NOT NULL AND
8932        p_cust_site_use_rec.ship_partial <> FND_API.G_MISS_CHAR
8933           AND ( p_create_update_flag = 'C' OR
8934            ( p_create_update_flag = 'U'  AND
8935             p_cust_site_use_rec.ship_partial <> NVL(l_ship_partial,FND_API.G_MISS_CHAR) ) )
8936     THEN
8937         validate_lookup (
8938             p_column                                => 'ship_partial',
8939             p_lookup_type                           => 'YES/NO',
8940             p_column_value                          => p_cust_site_use_rec.ship_partial,
8941             x_return_status                         => x_return_status );
8942 
8943         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8944            hz_utility_v2pub.debug(p_message=>'ship_partial is lookup code in lookup type YES/NO. ' ||
8945                                                  'x_return_status = ' || x_return_status,
8946                                   p_prefix =>l_debug_prefix,
8947                                   p_msg_level=>fnd_log.level_statement);
8948         END IF;
8949 
8950     END IF;
8951 
8952     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8953            hz_utility_v2pub.debug(p_message=>'(+) after validate ship_partial ... ' ||
8954                                              'x_return_status = ' || x_return_status,
8955                                   p_prefix =>l_debug_prefix,
8956                                   p_msg_level=>fnd_log.level_statement);
8957     END IF;
8958 
8959 ******************************/
8960     ----------------------------------------------
8961     -- validate sched_date_push_flag
8962     ----------------------------------------------
8963 /****Logical APIs - validation not required****/
8964   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8965     -- sched_date_push_flag is lookup code in lookup type YES/NO
8966     IF p_cust_site_use_rec.sched_date_push_flag IS NOT NULL AND
8967        p_cust_site_use_rec.sched_date_push_flag <> FND_API.G_MISS_CHAR
8968     THEN
8969         validate_lookup (
8970             p_column                                => 'sched_date_push_flag',
8971             p_lookup_type                           => 'YES/NO',
8972             p_column_value                          => p_cust_site_use_rec.sched_date_push_flag,
8973             x_return_status                         => x_return_status );
8974 
8975         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8976            hz_utility_v2pub.debug(p_message=>'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
8977                         'x_return_status = ' || x_return_status,
8978                                   p_prefix =>l_debug_prefix,
8979                                   p_msg_level=>fnd_log.level_statement);
8980         END IF;
8981 
8982     END IF;
8983 
8984     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8985            hz_utility_v2pub.debug(p_message=>'(+) after validate sched_date_push_flag ... ' ||
8986                                                  'x_return_status = ' || x_return_status,
8987                                   p_prefix =>l_debug_prefix,
8988                                   p_msg_level=>fnd_log.level_statement);
8989     END IF;
8990   END IF;
8991 
8992     ----------------------------------------------
8993     -- validate gsa_indicator
8994     ----------------------------------------------
8995 /****Logical APIs - validation not required****/
8996   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8997     -- gsa_indicator is lookup code in lookup type YES/NO
8998     IF p_cust_site_use_rec.gsa_indicator IS NOT NULL AND
8999        p_cust_site_use_rec.gsa_indicator <> FND_API.G_MISS_CHAR
9000     THEN
9001         validate_lookup (
9002             p_column                                => 'gsa_indicator',
9003             p_lookup_type                           => 'YES/NO',
9004             p_column_value                          => p_cust_site_use_rec.gsa_indicator,
9005             x_return_status                         => x_return_status );
9006 
9007         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9008            hz_utility_v2pub.debug(p_message=>'gsa_indicator is lookup code in lookup type YES/NO. ' ||
9009                                                  'x_return_status = ' || x_return_status,
9010                                   p_prefix =>l_debug_prefix,
9011                                   p_msg_level=>fnd_log.level_statement);
9012         END IF;
9013 
9014     END IF;
9015 
9016     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9017            hz_utility_v2pub.debug(p_message=>'(+) after validate gsa_indicator ... ' ||
9018                  'x_return_status = ' || x_return_status,
9019                                   p_prefix =>l_debug_prefix,
9020                                   p_msg_level=>fnd_log.level_statement);
9021     END IF;
9022   END IF;
9023 
9024     ----------------------------------------------
9025     -- validate gl_id_xxx fields
9026     ----------------------------------------------
9027     -- Bug 2553286
9028     -- If site_use_code is not 'BILL_TO', then Revenue, Tax, Freight, Clearing,
9029     -- Unbilled Receivable and Unearned Revenue fields should not be populated.
9030 
9031     IF p_cust_site_use_rec.site_use_code <> 'BILL_TO' OR
9032        ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code <> 'BILL_TO' )
9033     THEN
9034         IF ( p_cust_site_use_rec.gl_id_rev IS NOT NULL AND
9035              p_cust_site_use_rec.gl_id_rev <> FND_API.G_MISS_NUM ) OR
9036            ( p_cust_site_use_rec.gl_id_tax IS NOT NULL AND
9037              p_cust_site_use_rec.gl_id_tax <> FND_API.G_MISS_NUM ) OR
9038            ( p_cust_site_use_rec.gl_id_freight IS NOT NULL AND
9039              p_cust_site_use_rec.gl_id_freight <> FND_API.G_MISS_NUM ) OR
9040            ( p_cust_site_use_rec.gl_id_clearing IS NOT NULL AND
9041              p_cust_site_use_rec.gl_id_clearing <> FND_API.G_MISS_NUM ) OR
9042            ( p_cust_site_use_rec.gl_id_unbilled IS NOT NULL AND
9043              p_cust_site_use_rec.gl_id_unbilled <> FND_API.G_MISS_NUM ) OR
9044            ( p_cust_site_use_rec.gl_id_unearned IS NOT NULL AND
9045              p_cust_site_use_rec.gl_id_unearned <> FND_API.G_MISS_NUM )
9046         THEN
9047             FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9048             FND_MSG_PUB.ADD;
9049             x_return_status := FND_API.G_RET_STS_ERROR;
9050         END IF;
9051 
9052         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9053            hz_utility_v2pub.debug(p_message=>'If site_use_code is not BILL_TO, then Revenue, Tax, Freight, Clearing, ' ||
9054                                         'Unbilled Receivable and Unearned Revenue fields should not be populated. ' ||
9055                                         'x_return_status = ' || x_return_status,
9056                                   p_prefix =>l_debug_prefix,
9057                                   p_msg_level=>fnd_log.level_statement);
9058         END IF;
9059 
9060     END IF;
9061     -- Bug 2553286
9062     -- If site_use_code is not 'DRAWEE', then Unpaid Bills Receivables,
9063     -- Remitted Bills Receivables and Factored Bills Receivables fields should not be populated.
9064 
9065     IF p_cust_site_use_rec.site_use_code <> 'DRAWEE' OR
9066        ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code <> 'DRAWEE' )
9067     THEN
9068         IF ( p_cust_site_use_rec.gl_id_unpaid_rec IS NOT NULL AND
9069              p_cust_site_use_rec.gl_id_unpaid_rec <> FND_API.G_MISS_NUM ) OR
9070            ( p_cust_site_use_rec.gl_id_remittance IS NOT NULL AND
9071              p_cust_site_use_rec.gl_id_remittance <> FND_API.G_MISS_NUM ) OR
9072            ( p_cust_site_use_rec.gl_id_factor IS NOT NULL AND
9073              p_cust_site_use_rec.gl_id_factor <> FND_API.G_MISS_NUM )
9074         THEN
9075             FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9076             FND_MSG_PUB.ADD;
9077             x_return_status := FND_API.G_RET_STS_ERROR;
9078         END IF;
9079 
9080         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9081            hz_utility_v2pub.debug(p_message=>'If site_use_code is not DRAWEE, then Unpaid Bills Receivables, ' ||
9082                                         'Remitted Bills Receivables and Factored Bills Receivables fields should not be populated. ' ||
9083                                         'x_return_status = ' || x_return_status,
9084                                   p_prefix =>l_debug_prefix,
9085                                   p_msg_level=>fnd_log.level_statement);
9086         END IF;
9087 
9088     END IF;
9089     -- Bug 2553286
9090     -- If site_use_code is not 'BILL_TO OR DRAWEE', then Bills Receivables field should not be populated.
9091 
9092     IF p_cust_site_use_rec.site_use_code NOT IN ('BILL_TO', 'DRAWEE') OR
9093         ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code NOT IN ('BILL_TO', 'DRAWEE') )
9094     THEN
9095         IF ( p_cust_site_use_rec.gl_id_rec IS NOT NULL AND
9096              p_cust_site_use_rec.gl_id_rec <> FND_API.G_MISS_NUM )
9097         THEN
9098             FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9099             FND_MSG_PUB.ADD;
9100             x_return_status := FND_API.G_RET_STS_ERROR;
9101         END IF;
9102 
9103         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9104            hz_utility_v2pub.debug(p_message=>'If site_use_code is not BILL_TO OR DRAWEE, then Bills Receivables field should not be populated. ' ||
9105                                                 'x_return_status = ' || x_return_status,
9106                                   p_prefix =>l_debug_prefix,
9107                                   p_msg_level=>fnd_log.level_statement);
9108         END IF;
9109 
9110     END IF;
9111 
9112 
9113     /* 3456489. Get chart of accounts ID. */
9114     BEGIN
9115         l_coa_id := HZ_MO_GLOBAL_CACHE.get_chart_of_accounts_id(
9116                                                 p_cust_site_use_rec.org_id);
9117     EXCEPTION
9118         WHEN NO_DATA_FOUND THEN
9119                 x_return_status := FND_API.G_RET_STS_ERROR;
9120     END;
9121 
9122     /* 3456489. Validate accounts only if Chart of Accounts ID is not null. */
9123     IF (l_coa_id IS NOT NULL) THEN
9124 
9125         ----------------------------------------------
9126         -- validate gl_id_rec
9127         ----------------------------------------------
9128 
9129 
9130        -- gl_id_rec is validate gl field.
9131        IF p_cust_site_use_rec.gl_id_rec IS NOT NULL AND
9132           p_cust_site_use_rec.gl_id_rec <> FND_API.G_MISS_NUM
9133        THEN
9134            validate_gl_id (
9135                p_gl_name                               => 'REC',
9136                p_column_value                          => p_cust_site_use_rec.gl_id_rec,
9137                p_coa_id                                   => l_coa_id,    -- Bug 3456489
9138                x_return_status                         => x_return_status );
9139 
9140            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9141                hz_utility_v2pub.debug(p_message=>'gl_id_rec is validate gl field. ' ||
9142                        'x_return_status = ' || x_return_status,
9143                                       p_prefix =>l_debug_prefix,
9144                                       p_msg_level=>fnd_log.level_statement);
9145            END IF;
9146 
9147        END IF;
9148 
9149         ----------------------------------------------
9150         -- validate gl_id_rev
9151         ----------------------------------------------
9152 
9153         -- gl_id_rev is validate gl field.
9154         IF p_cust_site_use_rec.gl_id_rev IS NOT NULL AND
9155            p_cust_site_use_rec.gl_id_rev <> FND_API.G_MISS_NUM
9156         THEN
9157             validate_gl_id (
9158                 p_gl_name                               => 'REV',
9159                 p_column_value                          => p_cust_site_use_rec.gl_id_rev,
9160                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9161                 x_return_status                         => x_return_status );
9162 
9163             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9164                hz_utility_v2pub.debug(p_message=>'gl_id_rev is validate gl field. ' ||
9165                       'x_return_status = ' || x_return_status,
9166                                       p_prefix =>l_debug_prefix,
9167                                       p_msg_level=>fnd_log.level_statement);
9168             END IF;
9169 
9170         END IF;
9171 
9172         ----------------------------------------------
9173         -- validate gl_id_tax
9174         ----------------------------------------------
9175 
9176         -- gl_id_tax is validate gl field.
9177         IF p_cust_site_use_rec.gl_id_tax IS NOT NULL AND
9178            p_cust_site_use_rec.gl_id_tax <> FND_API.G_MISS_NUM
9179         THEN
9180             validate_gl_id (
9181                 p_gl_name                               => 'TAX',
9182                 p_column_value                          => p_cust_site_use_rec.gl_id_tax,
9183                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9184                 x_return_status                         => x_return_status );
9185 
9186            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9187                hz_utility_v2pub.debug(p_message=>'gl_id_tax is validate gl field. ' ||
9188                    'x_return_status = ' || x_return_status,
9189                                   p_prefix =>l_debug_prefix,
9190                                   p_msg_level=>fnd_log.level_statement);
9191            END IF;
9192 
9193         END IF;
9194 
9195         ----------------------------------------------
9196         -- validate gl_id_freight
9197         ----------------------------------------------
9198 
9199         -- gl_id_freight is validate gl field.
9200         IF p_cust_site_use_rec.gl_id_freight IS NOT NULL AND
9201            p_cust_site_use_rec.gl_id_freight <> FND_API.G_MISS_NUM
9202         THEN
9203             validate_gl_id (
9204                 p_gl_name                               => 'FREIGHT',
9205                 p_column_value                          => p_cust_site_use_rec.gl_id_freight,
9206                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9207                 x_return_status                         => x_return_status );
9208 
9209             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9210                hz_utility_v2pub.debug(p_message=>'gl_id_freight is validate gl field. ' ||
9211                    'x_return_status = ' || x_return_status,
9212                                       p_prefix =>l_debug_prefix,
9213                                       p_msg_level=>fnd_log.level_statement);
9214             END IF;
9215 
9216         END IF;
9217 
9218         ----------------------------------------------
9219         -- validate gl_id_clearing
9220         ----------------------------------------------
9221 
9222         -- gl_id_clearing is validate gl field.
9223         IF p_cust_site_use_rec.gl_id_clearing IS NOT NULL AND
9224            p_cust_site_use_rec.gl_id_clearing <> FND_API.G_MISS_NUM
9225         THEN
9226             validate_gl_id (
9227                 p_gl_name                               => 'CLEARING',
9228                 p_column_value                          => p_cust_site_use_rec.gl_id_clearing,
9229                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9230                 x_return_status                         => x_return_status );
9231 
9232             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9233                hz_utility_v2pub.debug(p_message=>'gl_id_clearing is validate gl field. ' ||
9234                              'x_return_status = ' || x_return_status,
9235                                       p_prefix =>l_debug_prefix,
9236                                       p_msg_level=>fnd_log.level_statement);
9237             END IF;
9238 
9239         END IF;
9240 
9241         ----------------------------------------------
9242         -- validate gl_id_unbilled
9243         ----------------------------------------------
9244 
9245         -- gl_id_unbilled is validate gl field.
9246         IF p_cust_site_use_rec.gl_id_unbilled IS NOT NULL AND
9247            p_cust_site_use_rec.gl_id_unbilled <> FND_API.G_MISS_NUM
9248         THEN
9249             validate_gl_id (
9250                 p_gl_name                               => 'UNBILLED',
9251                 p_column_value                          => p_cust_site_use_rec.gl_id_unbilled,
9252                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9253                 x_return_status                         => x_return_status );
9254 
9255             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9256                hz_utility_v2pub.debug(p_message=>'gl_id_unbilled is validate gl field. ' ||
9257                      'x_return_status = ' || x_return_status,
9258                                       p_prefix =>l_debug_prefix,
9259                                       p_msg_level=>fnd_log.level_statement);
9260             END IF;
9261 
9262         END IF;
9263 
9264         ----------------------------------------------
9265         -- validate gl_id_unearned
9266         ----------------------------------------------
9267 
9268         -- gl_id_unearned is validate gl field.
9269         IF p_cust_site_use_rec.gl_id_unearned IS NOT NULL AND
9270            p_cust_site_use_rec.gl_id_unearned <> FND_API.G_MISS_NUM
9271         THEN
9272             validate_gl_id (
9273                 p_gl_name                               => 'UNEARNED',
9274                 p_column_value                          => p_cust_site_use_rec.gl_id_unearned,
9275                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9276                 x_return_status                         => x_return_status );
9277 
9278             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9279                    hz_utility_v2pub.debug(p_message=>'gl_id_unearned is validate gl field. ' ||
9280                          'x_return_status = ' || x_return_status,
9281                                           p_prefix =>l_debug_prefix,
9282                                           p_msg_level=>fnd_log.level_statement);
9283             END IF;
9284 
9285         END IF;
9286 
9287         ----------------------------------------------
9288             -- validate gl_id_unpaid_rec
9289         ----------------------------------------------
9290 
9291         -- gl_id_unpaid_rec is validate gl field.
9292         IF p_cust_site_use_rec.gl_id_unpaid_rec IS NOT NULL AND
9293            p_cust_site_use_rec.gl_id_unpaid_rec <> FND_API.G_MISS_NUM
9294         THEN
9295             validate_gl_id (
9296                 p_gl_name                               => 'UNPAID_REC',
9297                 p_column_value                          => p_cust_site_use_rec.gl_id_unpaid_rec,
9298                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9299                 x_return_status                         => x_return_status );
9300 
9301                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9302                    hz_utility_v2pub.debug(p_message=>'gl_id_unpaid_rec is validate gl field. ' ||
9303                                   'x_return_status = ' || x_return_status,
9304                                           p_prefix =>l_debug_prefix,
9305                                           p_msg_level=>fnd_log.level_statement);
9306                 END IF;
9307 
9308         END IF;
9309 
9310         ----------------------------------------------
9311         -- validate gl_id_remittance
9312         ----------------------------------------------
9313 
9314         -- gl_id_remittance is validate gl field.
9315         IF p_cust_site_use_rec.gl_id_remittance IS NOT NULL AND
9316            p_cust_site_use_rec.gl_id_remittance <> FND_API.G_MISS_NUM
9317         THEN
9318             validate_gl_id (
9319                 p_gl_name                               => 'REMITTANCE',
9320                 p_column_value                          => p_cust_site_use_rec.gl_id_remittance,
9321                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9322                 x_return_status                         => x_return_status );
9323 
9324                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9325                    hz_utility_v2pub.debug(p_message=>'gl_id_remittance is validate gl field. ' ||
9326                                                  'x_return_status = ' || x_return_status,
9327                                           p_prefix =>l_debug_prefix,
9328                                           p_msg_level=>fnd_log.level_statement);
9329                 END IF;
9330 
9331         END IF;
9332 
9333         ----------------------------------------------
9334             -- validate gl_id_factor
9335         ----------------------------------------------
9336 
9337         -- gl_id_factor is validate gl field.
9338         IF p_cust_site_use_rec.gl_id_factor IS NOT NULL AND
9339            p_cust_site_use_rec.gl_id_factor <> FND_API.G_MISS_NUM
9340         THEN
9341             validate_gl_id (
9342                 p_gl_name                               => 'FACTOR',
9343                 p_column_value                          => p_cust_site_use_rec.gl_id_factor,
9344                 p_coa_id                                   => l_coa_id,    -- Bug 3456489
9345                 x_return_status                         => x_return_status );
9346 
9347             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9348                    hz_utility_v2pub.debug(p_message=>'gl_id_factor is validate gl field. ' ||
9349                          'x_return_status = ' || x_return_status,
9350                                           p_prefix =>l_debug_prefix,
9351                                           p_msg_level=>fnd_log.level_statement);
9352             END IF;
9353 
9354         END IF;
9355 
9356         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9357            hz_utility_v2pub.debug(p_message=>'(+) after validate gl_xxx ... ' ||
9358                          'x_return_status = ' || x_return_status,
9359                                   p_prefix =>l_debug_prefix,
9360                                   p_msg_level=>fnd_log.level_statement);
9361         END IF;
9362 
9363     END IF; -- Corresponding to IF l_coa_id IS NOT NULL  (Bug 3456489)
9364     --------------------------------------
9365     -- validate ship_via
9366     --------------------------------------
9367 
9368     -- ship_via is foreign key to oe_ship_methods_v
9369     -- can be used in both single and multi org case.
9370     IF p_cust_site_use_rec.ship_via IS NOT NULL AND
9371        p_cust_site_use_rec.ship_via <> FND_API.G_MISS_CHAR AND
9372        ( p_create_update_flag = 'C' OR
9373          ( p_create_update_flag = 'U'  AND
9374            p_cust_site_use_rec.ship_via <> NVL( l_ship_via, FND_API.G_MISS_CHAR ) ) )
9375     THEN
9376         check_oe_ship_methods_v_fk (
9377             p_entity                                 => 'SITE_USE',
9378             p_column                                 => 'ship_via',
9379             p_column_value                           => p_cust_site_use_rec.ship_via,
9380             x_return_status                          => x_return_status );
9381 
9382         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9383            hz_utility_v2pub.debug(p_message=>'ship_via is foreign key to oe_ship_methods_v. ' ||
9384                           'x_return_status = ' || x_return_status,
9385                                   p_prefix =>l_debug_prefix,
9386                                   p_msg_level=>fnd_log.level_statement);
9387         END IF;
9388 
9389     END IF;
9390 
9391     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9392            hz_utility_v2pub.debug(p_message=>'(+) after validate ship_via ... ' ||
9393                         'x_return_status = ' || x_return_status,
9394                                   p_prefix =>l_debug_prefix,
9395                                   p_msg_level=>fnd_log.level_statement);
9396     END IF;
9397 
9398 
9399     --------------------------------------
9400     -- validate created_by_module
9401     --------------------------------------
9402 
9403     validate_created_by_module(
9404       p_create_update_flag     => p_create_update_flag,
9405       p_created_by_module      => p_cust_site_use_rec.created_by_module,
9406       p_old_created_by_module  => l_created_by_module,
9407       x_return_status          => x_return_status);
9408 
9409     --------------------------------------
9410     -- validate application_id
9411     --------------------------------------
9412 
9413     validate_application_id(
9414       p_create_update_flag     => p_create_update_flag,
9415       p_application_id         => p_cust_site_use_rec.application_id,
9416       p_old_application_id     => l_application_id,
9417       x_return_status          => x_return_status);
9418 
9419     -- Debug info.
9420 
9421     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9422         hz_utility_v2pub.debug(p_message=>'validate_cust_site_use (-)',
9423                                p_prefix=>l_debug_prefix,
9424                                p_msg_level=>fnd_log.level_procedure);
9425     END IF;
9426 
9427 END validate_cust_site_use;
9428 
9429 /**
9430  * PROCEDURE validate_cust_account_role
9431  *
9432  * DESCRIPTION
9433  *     Validates customer account role record. Checks for
9434  *         uniqueness
9435  *         lookup types
9436  *         mandatory columns
9437  *         non-updateable fields
9438  *         foreign key validations
9439  *         other validations
9440  *
9441  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
9442  *
9443  * ARGUMENTS
9444  *   IN:
9445  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
9446  *     p_cust_account_role_rec        Customer account role record.
9447  *     p_rowid                        Rowid of the record (used only in update mode).
9448  *   IN/OUT:
9449  *     x_return_status                Return status after the call. The status can
9450  *                                    be FND_API.G_RET_STS_SUCCESS (success),
9451  *                                    FND_API.G_RET_STS_ERROR (error),
9452  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
9453  *
9454  * NOTES
9455  *
9456  * MODIFICATION HISTORY
9457  *
9458  *   07-23-2001    Jianying Huang      o Created.
9459  *
9460  */
9461 
9462 PROCEDURE validate_cust_account_role (
9463     p_create_update_flag                    IN     VARCHAR2,
9464     p_cust_account_role_rec                 IN     HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE,
9465     p_rowid                                 IN     ROWID,
9466     x_return_status                         IN OUT NOCOPY VARCHAR2
9467 ) IS
9468 
9469     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_cust_account_role'
9470 
9471     l_dummy                                 VARCHAR2(1);
9472 
9473     l_party_id                              NUMBER;
9474     l_cust_account_id                       NUMBER;
9475     l_cust_acct_site_id                     NUMBER;
9476     l_role_type                             HZ_CUST_ACCOUNT_ROLES.role_type%TYPE;
9477     l_created_by_module                     HZ_CUST_ACCOUNT_ROLES.created_by_module%TYPE;
9478     l_application_id                        NUMBER;
9479     l_orig_system_reference                 HZ_CUST_ACCOUNT_ROLES.orig_system_reference%TYPE;
9480     l_status                                HZ_CUST_ACCOUNT_ROLES.status%TYPE;
9481     l_validate_flag varchar2(1) := 'Y';
9482     l_mosr_owner_table_id number;
9483     l_return_status                         VARCHAR2(1);
9484     l_org_id                                HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
9485     l_temp_return_status   VARCHAR2(10); -- for storing return status from
9486                                          -- hz_orig_system_ref_pub.get_owner_table_id
9487 
9488 BEGIN
9489 
9490     -- Check if API is called in debug mode. If yes, enable debug.
9491     --enable_debug;
9492 
9493     -- Debug info.
9494 
9495     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9496         hz_utility_v2pub.debug(p_message=>'validate_cust_account_role (+)',
9497                                p_prefix=>l_debug_prefix,
9498                                p_msg_level=>fnd_log.level_procedure);
9499     END IF;
9500 
9501 
9502     -- Select fields for later use during update.
9503     IF p_create_update_flag = 'U' THEN
9504         SELECT PARTY_ID, CUST_ACCOUNT_ID, CUST_ACCT_SITE_ID,
9505                ROLE_TYPE, ORIG_SYSTEM_REFERENCE, CREATED_BY_MODULE,
9506                APPLICATION_ID, STATUS
9507         INTO l_party_id, l_cust_account_id, l_cust_acct_site_id,
9508              l_role_type, l_orig_system_reference, l_created_by_module,
9509              l_application_id, l_status
9510         FROM HZ_CUST_ACCOUNT_ROLES
9511         WHERE CUST_ACCOUNT_ROLE_ID = p_cust_account_role_rec.cust_account_role_id;
9512     END IF;
9513 
9514     --------------------------------------
9515     -- validate cust_account_role_id
9516     --------------------------------------
9517 /****Logical APIs - validation not required****/
9518   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9519     IF p_create_update_flag = 'C' THEN
9520 
9521         -- If primary key value is passed, check for uniqueness.
9522         -- If primary key value is not passed, it will be generated
9523         -- from sequence by table handler.
9524 
9525         IF p_cust_account_role_rec.cust_account_role_id IS NOT NULL AND
9526            p_cust_account_role_rec.cust_account_role_id <> FND_API.G_MISS_NUM
9527         THEN
9528         BEGIN
9529             SELECT 'Y' INTO l_dummy
9530             FROM HZ_CUST_ACCOUNT_ROLES
9531             WHERE CUST_ACCOUNT_ROLE_ID = p_cust_account_role_rec.cust_account_role_id;
9532 
9533             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9534             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_role_id' );
9535             FND_MSG_PUB.ADD;
9536             x_return_status := FND_API.G_RET_STS_ERROR;
9537         EXCEPTION
9538             WHEN NO_DATA_FOUND THEN
9539                 NULL;
9540         END;
9541 
9542         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9543            hz_utility_v2pub.debug(p_message=>'cust_account_role_id is unique during creation if passed in. ' ||
9544                                                 'x_return_status = ' || x_return_status,
9545                                   p_prefix =>l_debug_prefix,
9546                                   p_msg_level=>fnd_log.level_statement);
9547         END IF;
9548 
9549         END IF;
9550 
9551     END IF;
9552 
9553     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9554            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_role_id ... ' ||
9555                                                 'x_return_status = ' || x_return_status,
9556                                   p_prefix =>l_debug_prefix,
9557                                   p_msg_level=>fnd_log.level_statement);
9558     END IF;
9559   END IF;
9560 
9561     ----------------------------------------------
9562     -- validate party_id
9563     ----------------------------------------------
9564 /****Logical APIs - validation not required****/
9565   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9566     -- party_id is mandatory field
9567     -- Since party_id is non-updateable, we only need to check mandatory
9568     -- during creation.
9569 
9570     IF p_create_update_flag = 'C' THEN
9571         validate_mandatory (
9572             p_create_update_flag                    => p_create_update_flag,
9573             p_column                                => 'party_id',
9574             p_column_value                          => p_cust_account_role_rec.party_id,
9575             x_return_status                         => x_return_status );
9576 
9577         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9578            hz_utility_v2pub.debug(p_message=>'party_id is mandatory. ' ||
9579                                         'x_return_status = ' || x_return_status,
9580                                   p_prefix =>l_debug_prefix,
9581                                   p_msg_level=>fnd_log.level_statement);
9582         END IF;
9583 
9584     END IF;
9585 
9586     -- party_id is non-updateable field
9587     IF p_create_update_flag = 'U' AND
9588        p_cust_account_role_rec.party_id IS NOT NULL
9589     THEN
9590         validate_nonupdateable (
9591             p_column                                => 'party_id',
9592             p_column_value                          => p_cust_account_role_rec.party_id,
9593             p_old_column_value                      => l_party_id,
9594             x_return_status                         => x_return_status );
9595 
9596         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9597            hz_utility_v2pub.debug(p_message=>'party_id is non-updateable. ' ||
9598                                          'x_return_status = ' || x_return_status,
9599                                   p_prefix =>l_debug_prefix,
9600                                   p_msg_level=>fnd_log.level_statement);
9601         END IF;
9602 
9603     END IF;
9604 
9605     -- party_id is type of party_relationship.
9606     -- party_id is the object_id in the relationship. Subject_id is the party
9607     -- referened by cust_account_id.
9608     -- However, we decide donot add this validation for now since we may
9609     -- need migrate data. (Dylan's reply)
9610 
9611     -- party_id is foreign key to hz_parties
9612     -- Since party_id is mandatory and non-updateable, we only need to
9613     -- check FK during creation.
9614 
9615     IF p_create_update_flag = 'C' AND
9616        p_cust_account_role_rec.party_id IS NOT NULL AND
9617        p_cust_account_role_rec.party_id <> FND_API.G_MISS_NUM
9618     THEN
9619         check_party_fk (
9620             p_column                                => 'party_id',
9621             p_column_value                          => p_cust_account_role_rec.party_id,
9622             x_return_status                         => x_return_status );
9623 
9624         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9625            hz_utility_v2pub.debug(p_message=>'party_id is foreign key to hz_parties. ' ||
9626                                         'x_return_status = ' || x_return_status,
9627                                   p_prefix =>l_debug_prefix,
9628                                   p_msg_level=>fnd_log.level_statement);
9629         END IF;
9630 
9631     END IF;
9632 
9633     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9634            hz_utility_v2pub.debug(p_message=>'(+) after validate party_id ... ' ||
9635             'x_return_status = ' || x_return_status,
9636                                   p_prefix =>l_debug_prefix,
9637                                   p_msg_level=>fnd_log.level_statement);
9638     END IF;
9639   END IF;
9640 
9641     ----------------------------------------------
9642     -- validate cust_account_id
9643     ----------------------------------------------
9644 /****Logical APIs - validation not required****/
9645   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9646     -- cust_account_id is mandatory field
9647     -- Since cust_account_id is non-updateable, we only need to check mandatory
9648     -- during creation.
9649 
9650     IF p_create_update_flag = 'C' THEN
9651         validate_mandatory (
9652             p_create_update_flag                    => p_create_update_flag,
9653             p_column                                => 'cust_account_id',
9654             p_column_value                          => p_cust_account_role_rec.cust_account_id,
9655             x_return_status                         => x_return_status );
9656 
9657         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9658            hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
9659                                                 'x_return_status = ' || x_return_status,
9660                                   p_prefix =>l_debug_prefix,
9661                                   p_msg_level=>fnd_log.level_statement);
9662         END IF;
9663 
9664     END IF;
9665 
9666     -- cust_account_id is non-updateable field
9667     IF p_create_update_flag = 'U' AND
9668        p_cust_account_role_rec.cust_account_id IS NOT NULL
9669     THEN
9670         validate_nonupdateable (
9671             p_column                                => 'cust_account_id',
9672             p_column_value                          => p_cust_account_role_rec.cust_account_id,
9673             p_old_column_value                      => l_cust_account_id,
9674             x_return_status                         => x_return_status );
9675 
9676         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9677            hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
9678                                         'x_return_status = ' || x_return_status,
9679                                   p_prefix =>l_debug_prefix,
9680                                   p_msg_level=>fnd_log.level_statement);
9681         END IF;
9682 
9683     END IF;
9684 
9685     -- cust_account_id is foreign key to hz_cust_accounts
9686     -- Since cust_account_id is mandatory and non-updateable,
9687     -- we only need to check FK during creation.
9688 
9689     IF p_create_update_flag = 'C' AND
9690        p_cust_account_role_rec.cust_account_id IS NOT NULL AND
9691        p_cust_account_role_rec.cust_account_id <> FND_API.G_MISS_NUM
9692     THEN
9693         check_cust_account_fk (
9694             p_column                                 => 'cust_account_id',
9695             p_column_value                           => p_cust_account_role_rec.cust_account_id,
9696             x_return_status                          => x_return_status );
9697 
9698         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9699            hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
9700                                                 'x_return_status = ' || x_return_status,
9701                                   p_prefix =>l_debug_prefix,
9702                                   p_msg_level=>fnd_log.level_statement);
9703         END IF;
9704 
9705     END IF;
9706 
9707     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9708            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
9709             'x_return_status = ' || x_return_status,
9710                                   p_prefix =>l_debug_prefix,
9711                                   p_msg_level=>fnd_log.level_statement);
9712     END IF;
9713   END IF;
9714 
9715     ----------------------------------------------
9716     -- validate cust_acct_site_id
9717     ----------------------------------------------
9718 /****Logical APIs - validation not required****/
9719   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9720     -- cust_acct_site_id is non-updateable field
9721     IF p_create_update_flag = 'U' AND
9722        p_cust_account_role_rec.cust_acct_site_id IS NOT NULL
9723     THEN
9724         validate_nonupdateable (
9725             p_column                                => 'cust_acct_site_id',
9726             p_column_value                          => p_cust_account_role_rec.cust_acct_site_id,
9727             p_old_column_value                      => l_cust_acct_site_id,
9728             x_return_status                         => x_return_status );
9729 
9730         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9731            hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is non-updateable. ' ||
9732                                         'x_return_status = ' || x_return_status,
9733                                   p_prefix =>l_debug_prefix,
9734                                   p_msg_level=>fnd_log.level_statement);
9735         END IF;
9736 
9737     END IF;
9738 
9739     -- cust_acct_site_id is foreign key to hz_cust_acct_sites.
9740     -- The cust_account_id in hz_cust_acct_sites should be same
9741     -- as we put in cust_account_id in hz_cust_account_roles.
9742     -- Since cust_acct_site_id is non-updateable, we only need to
9743     -- check FK during creation.
9744 
9745     IF p_create_update_flag = 'C' AND
9746        p_cust_account_role_rec.cust_acct_site_id IS NOT NULL AND
9747        p_cust_account_role_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
9748     THEN
9749     BEGIN
9750 
9751         SELECT CUST_ACCOUNT_ID,ORG_ID
9752         INTO l_cust_account_id,l_org_id
9753         FROM HZ_CUST_ACCT_SITES_ALL
9754         WHERE CUST_ACCT_SITE_ID = p_cust_account_role_rec.cust_acct_site_id;
9755 
9756         -- Bug 4650473. Check if org is accessible.
9757         BEGIN
9758           MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
9759         EXCEPTION
9760         WHEN OTHERS
9761         THEN
9762            x_return_status := FND_API.G_RET_STS_ERROR;
9763         END;
9764 
9765        IF l_cust_account_id <> p_cust_account_role_rec.cust_account_id THEN
9766             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_SITE_MISSMATCH' );
9767             FND_MSG_PUB.ADD;
9768             x_return_status := FND_API.G_RET_STS_ERROR;
9769         END IF;
9770 
9771     EXCEPTION
9772         WHEN NO_DATA_FOUND THEN
9773             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
9774             FND_MESSAGE.SET_TOKEN( 'FK', 'cust_acct_site_id' );
9775             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id' );
9776             FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_acct_sites' );
9777             FND_MSG_PUB.ADD;
9778             x_return_status := FND_API.G_RET_STS_ERROR;
9779     END;
9780 
9781         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9782            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.' ||
9783                           'x_return_status = ' || x_return_status,
9784                                   p_prefix =>l_debug_prefix,
9785                                   p_msg_level=>fnd_log.level_statement);
9786         END IF;
9787 
9788     END IF;
9789 
9790     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9791            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
9792                         'x_return_status = ' || x_return_status,
9793                                   p_prefix =>l_debug_prefix,
9794                                   p_msg_level=>fnd_log.level_statement);
9795     END IF;
9796   END IF;
9797 
9798     ----------------------------------------------
9799     -- validate role_type
9800     ----------------------------------------------
9801 
9802     -- role_type is mandatory field
9803     -- Since role_type is non-updateable, we only need to check mandatory
9804     -- during creation.
9805 
9806     IF p_create_update_flag = 'C' THEN
9807         validate_mandatory (
9808             p_create_update_flag                    => p_create_update_flag,
9809             p_column                                => 'role_type',
9810             p_column_value                          => p_cust_account_role_rec.role_type,
9811             x_return_status                         => x_return_status );
9812 
9813         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9814            hz_utility_v2pub.debug(p_message=>'role_type is mandatory. ' ||
9815                 'x_return_status = ' || x_return_status,
9816                                   p_prefix =>l_debug_prefix,
9817                                   p_msg_level=>fnd_log.level_statement);
9818         END IF;
9819 
9820     END IF;
9821 
9822     -- role_type is non-updateable field
9823     IF p_create_update_flag = 'U' AND
9824        p_cust_account_role_rec.role_type IS NOT NULL
9825     THEN
9826         validate_nonupdateable (
9827             p_column                                => 'role_type',
9828             p_column_value                          => p_cust_account_role_rec.role_type,
9829             p_old_column_value                      => l_role_type,
9830             x_return_status                         => x_return_status );
9831 
9832         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9833            hz_utility_v2pub.debug(p_message=>'role_type is non-updateable. ' ||
9834                                                  'x_return_status = ' || x_return_status,
9835                                   p_prefix =>l_debug_prefix,
9836                                   p_msg_level=>fnd_log.level_statement);
9837         END IF;
9838 
9839     END IF;
9840 
9841     -- role_type is lookup code in lookup type ACCT_ROLE_TYPE
9842     -- Since role_type is non-updateable, we only need to do the checking
9843     -- during creation.
9844 
9845     IF p_create_update_flag = 'C' AND
9846        p_cust_account_role_rec.role_type IS NOT NULL AND
9847        p_cust_account_role_rec.role_type <> FND_API.G_MISS_CHAR
9848     THEN
9849         validate_lookup (
9850             p_column                                => 'role_type',
9851             p_lookup_type                           => 'ACCT_ROLE_TYPE',
9852             p_column_value                          => p_cust_account_role_rec.role_type,
9853             x_return_status                         => x_return_status );
9854 
9855         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9856            hz_utility_v2pub.debug(p_message=>'role_type is lookup code in lookup type ACCT_ROLE_TYPE. ' ||
9857                                                 'x_return_status = ' || x_return_status,
9858                                   p_prefix =>l_debug_prefix,
9859                                   p_msg_level=>fnd_log.level_statement);
9860         END IF;
9861 
9862     END IF;
9863 
9864     -- The combination of CUST_ACCOUNT_ID, PARTY_ID, ROLE_TYPE should be unique.
9865     -- Or the combination of CUST_ACCT_SITE_ID, PARTY_ID, ROLE_TYPE should be unique.
9866     -- We only need to check this during creation because all of these
9867     -- three columns are non-updateable.
9868 
9869     IF p_create_update_flag = 'C' THEN
9870         IF p_cust_account_role_rec.cust_acct_site_id IS NULL OR
9871            p_cust_account_role_rec.cust_acct_site_id = FND_API.G_MISS_NUM
9872         THEN
9873         BEGIN
9874             SELECT 'Y' INTO l_dummy
9875             FROM HZ_CUST_ACCOUNT_ROLES
9876             WHERE CUST_ACCOUNT_ID = p_cust_account_role_rec.cust_account_id
9877             AND PARTY_ID = p_cust_account_role_rec.party_id
9878             AND CUST_ACCT_SITE_ID IS NULL
9879             AND ROLE_TYPE = p_cust_account_role_rec.role_type
9880             AND STATUS='A' -- Bug 4624292
9881             AND ROWNUM = 1;
9882 
9883             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9884             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_id - role_type' );
9885             FND_MSG_PUB.ADD;
9886             x_return_status := FND_API.G_RET_STS_ERROR;
9887         EXCEPTION
9888             WHEN NO_DATA_FOUND THEN
9889                 NULL;
9890         END;
9891 
9892         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9893            hz_utility_v2pub.debug(p_message=>'the combination of cust_account_id, party_id, role_type should be unique. ' ||
9894                                   'x_return_status = ' || x_return_status,
9895                                   p_prefix =>l_debug_prefix,
9896                                   p_msg_level=>fnd_log.level_statement);
9897         END IF;
9898 
9899         ELSE
9900         BEGIN
9901             SELECT 'Y' INTO l_dummy
9902             FROM HZ_CUST_ACCOUNT_ROLES
9903             WHERE CUST_ACCT_SITE_ID = p_cust_account_role_rec.cust_acct_site_id
9904             AND PARTY_ID = p_cust_account_role_rec.party_id
9905             AND ROLE_TYPE = p_cust_account_role_rec.role_type
9906             AND STATUS='A' -- Bug 4624292
9907             AND ROWNUM = 1;
9908 
9909             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9910             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - party_id - role_type' );
9911             FND_MSG_PUB.ADD;
9912             x_return_status := FND_API.G_RET_STS_ERROR;
9913         EXCEPTION
9914             WHEN NO_DATA_FOUND THEN
9915                 NULL;
9916         END;
9917 
9918         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9919            hz_utility_v2pub.debug(p_message=>'the combination of cust_acct_site_id, party_id, role_type should be unique. ' ||
9920                                                   'x_return_status = ' || x_return_status,
9921                                   p_prefix =>l_debug_prefix,
9922                                   p_msg_level=>fnd_log.level_statement);
9923         END IF;
9924 
9925         END IF;
9926 
9927     ELSE -- Update case (Bug 4624292)
9928       IF p_cust_account_role_rec.status='A'
9929          AND l_status='I'
9930       THEN
9931         IF l_cust_acct_site_id IS NOT NULL
9932         THEN
9933         BEGIN
9934             SELECT 'Y' INTO l_dummy
9935             FROM HZ_CUST_ACCOUNT_ROLES
9936             WHERE
9937             CUST_ACCT_SITE_ID = nvl(p_cust_account_role_rec.cust_acct_site_id,l_cust_acct_site_id)
9938             AND PARTY_ID = nvl(p_cust_account_role_rec.party_id,l_party_id)
9939             AND ROLE_TYPE = nvl(p_cust_account_role_rec.role_type,l_role_type)
9940             AND STATUS='A'
9941             AND ROWID<>p_rowid
9942             AND ROWNUM = 1;
9943 
9944             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9945             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - party_id - role_type' );
9946             FND_MSG_PUB.ADD;
9947             x_return_status := FND_API.G_RET_STS_ERROR;
9948         EXCEPTION
9949             WHEN NO_DATA_FOUND THEN
9950                 NULL;
9951         END;
9952 
9953         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9954            hz_utility_v2pub.debug(p_message=>'the combination of cust_acct_site_id, party_id, role_type should be unique. ' ||
9955                                                   'x_return_status = ' || x_return_status,
9956                                   p_prefix =>l_debug_prefix,
9957                                   p_msg_level=>fnd_log.level_statement);
9958         END IF;
9959 
9960         ELSE
9961         BEGIN
9962             SELECT 'Y' INTO l_dummy
9963             FROM HZ_CUST_ACCOUNT_ROLES
9964             WHERE
9965             CUST_ACCT_SITE_ID IS NULL
9966             AND CUST_ACCOUNT_ID = nvl(p_cust_account_role_rec.cust_account_id,l_cust_account_id)
9967             AND PARTY_ID = nvl(p_cust_account_role_rec.party_id,l_party_id)
9968             AND ROLE_TYPE = nvl(p_cust_account_role_rec.role_type,l_role_type)
9969             AND STATUS='A'
9970             AND ROWID<>p_rowid
9971             AND ROWNUM = 1;
9972 
9973             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9974             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_id - role_type' );
9975             FND_MSG_PUB.ADD;
9976             x_return_status := FND_API.G_RET_STS_ERROR;
9977         EXCEPTION
9978             WHEN NO_DATA_FOUND THEN
9979                 NULL;
9980         END;
9981 
9982         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9983            hz_utility_v2pub.debug(p_message=>'the combination of cust_account_id, party_id, role_type should be unique. ' ||
9984                                   'x_return_status = ' || x_return_status,
9985                                   p_prefix =>l_debug_prefix,
9986                                   p_msg_level=>fnd_log.level_statement);
9987         END IF;
9988 
9989         END IF;
9990       END IF;
9991     END IF;
9992 
9993     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9994            hz_utility_v2pub.debug(p_message=>'(+) after validate role_type ... ' ||
9995                                          'x_return_status = ' || x_return_status,
9996                                   p_prefix =>l_debug_prefix,
9997                                   p_msg_level=>fnd_log.level_statement);
9998     END IF;
9999 
10000 
10001     ----------------------------------------------
10002     -- validate orig_system_reference
10003     ----------------------------------------------
10004 /****Logical APIs - validation not required****/
10005   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10006        IF (p_cust_account_role_rec.orig_system is not null and p_cust_account_role_rec.orig_system <>fnd_api.g_miss_char)
10007     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)
10008     and p_create_update_flag = 'U'
10009    then
10010         hz_orig_system_ref_pub.get_owner_table_id
10011         (p_orig_system => p_cust_account_role_rec.orig_system,
10012         p_orig_system_reference => p_cust_account_role_rec.orig_system_reference,
10013         p_owner_table_name =>  'HZ_CUST_ACCOUNT_ROLES',
10014         x_owner_table_id => l_mosr_owner_table_id,
10015         x_return_status => l_temp_return_status);
10016 
10017         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
10018 		    l_mosr_owner_table_id= nvl(p_cust_account_role_rec.cust_account_role_id,l_mosr_owner_table_id))
10019         THEN
10020                 l_validate_flag := 'N';
10021         END IF;
10022 
10023         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
10024 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
10025 		-- In case of success, leave it to carry over previous value as before this call.
10026 		-- Fix for Bug 5498116 (29-AUG-2006)
10027         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
10028           x_return_status := l_temp_return_status;
10029         END IF;
10030 
10031     end if;
10032     -- orig_system_reference is non-updateable field
10033     IF p_create_update_flag = 'U' AND
10034        p_cust_account_role_rec.orig_system_reference IS NOT NULL
10035        and l_validate_flag = 'Y'
10036     THEN
10037         validate_nonupdateable (
10038             p_column                                => 'orig_system_reference',
10039             p_column_value                          => p_cust_account_role_rec.orig_system_reference,
10040             p_old_column_value                      => l_orig_system_reference,
10041             x_return_status                         => x_return_status );
10042 
10043         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10044            hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
10045                                                 'x_return_status = ' || x_return_status,
10046                                   p_prefix =>l_debug_prefix,
10047                                   p_msg_level=>fnd_log.level_statement);
10048         END IF;
10049 
10050     END IF;
10051 
10052     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10053            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
10054                                         'x_return_status = ' || x_return_status,
10055                                   p_prefix =>l_debug_prefix,
10056                                   p_msg_level=>fnd_log.level_statement);
10057     END IF;
10058   END IF;
10059 
10060     ----------------------------------------------
10061     -- validate primary_flag
10062     ----------------------------------------------
10063 /****Logical APIs - validation not required****/
10064   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10065 
10066     -- primary_flag is lookup code in lookup type YES/NO
10067     IF p_cust_account_role_rec.primary_flag IS NOT NULL AND
10068        p_cust_account_role_rec.primary_flag <> FND_API.G_MISS_CHAR
10069     THEN
10070         validate_lookup (
10071             p_column                                => 'primary_flag',
10072             p_lookup_type                           => 'YES/NO',
10073             p_column_value                          => p_cust_account_role_rec.primary_flag,
10074             x_return_status                         => x_return_status );
10075 
10076         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10077            hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
10078                                         'x_return_status = ' || x_return_status,
10079                                   p_prefix =>l_debug_prefix,
10080                                   p_msg_level=>fnd_log.level_statement);
10081         END IF;
10082 
10083     END IF;
10084   END IF;
10085 
10086     -- primary_flag is unique per cust_account_id or cust_acct_site_id
10087 
10088     IF p_cust_account_role_rec.primary_flag = 'Y' THEN
10089         IF p_create_update_flag = 'C' THEN
10090             l_cust_account_id := p_cust_account_role_rec.cust_account_id;
10091             l_cust_acct_site_id := p_cust_account_role_rec.cust_acct_site_id;
10092         END IF;
10093 
10094         IF l_cust_acct_site_id IS NULL OR
10095            l_cust_acct_site_id = FND_API.G_MISS_NUM
10096         THEN
10097         BEGIN
10098             SELECT 'Y' INTO l_dummy
10099             FROM HZ_CUST_ACCOUNT_ROLES
10100             WHERE CUST_ACCOUNT_ID = l_cust_account_id
10101             AND CUST_ACCT_SITE_ID IS NULL
10102             AND PRIMARY_FLAG = 'Y'
10103             AND ( p_create_update_flag = 'C' OR
10104                   p_create_update_flag = 'U' AND ROWID <> p_rowid )
10105             AND ROWNUM = 1;
10106 
10107             FND_MESSAGE.SET_NAME( 'AR', 'HZ_CUST_ACCT_ROLE_PRIMARY' );
10108             FND_MESSAGE.SET_TOKEN( 'ENTITY', 'account' );
10109             FND_MSG_PUB.ADD;
10110             x_return_status := FND_API.G_RET_STS_ERROR;
10111         EXCEPTION
10112             WHEN NO_DATA_FOUND THEN
10113                 NULL;
10114         END;
10115 
10116         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10117            hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_account_id. ' ||
10118                                  'x_return_status = ' || x_return_status,
10119                                   p_prefix =>l_debug_prefix,
10120                                   p_msg_level=>fnd_log.level_statement);
10121         END IF;
10122 
10123         ELSE
10124         BEGIN
10125             SELECT 'Y' INTO l_dummy
10126             FROM HZ_CUST_ACCOUNT_ROLES
10127             WHERE CUST_ACCOUNT_ID = l_cust_account_id
10128             AND CUST_ACCT_SITE_ID = l_cust_acct_site_id
10129             AND PRIMARY_FLAG = 'Y'
10130             AND ( p_create_update_flag = 'C' OR
10131                   p_create_update_flag = 'U' AND ROWID <> p_rowid )
10132             AND ROWNUM = 1;
10133 
10134             FND_MESSAGE.SET_NAME( 'AR', 'HZ_CUST_ACCT_ROLE_PRIMARY' );
10135             FND_MESSAGE.SET_TOKEN( 'ENTITY', 'account site' );
10136             FND_MSG_PUB.ADD;
10137             x_return_status := FND_API.G_RET_STS_ERROR;
10138         EXCEPTION
10139             WHEN NO_DATA_FOUND THEN
10140                 NULL;
10141         END;
10142 
10143         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10144            hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_acct_site_id. ' ||
10145                                         'x_return_status = ' || x_return_status,
10146                                   p_prefix =>l_debug_prefix,
10147                                   p_msg_level=>fnd_log.level_statement);
10148         END IF;
10149 
10150         END IF;
10151     END IF;
10152 
10153     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10154            hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
10155                                         'x_return_status = ' || x_return_status,
10156                                   p_prefix =>l_debug_prefix,
10157                                   p_msg_level=>fnd_log.level_statement);
10158     END IF;
10159 
10160 
10161     --------------------------------------
10162     -- validate status
10163     --------------------------------------
10164 
10165     -- status cannot be set to null during update
10166     IF p_create_update_flag = 'U' AND
10167        p_cust_account_role_rec.status IS NOT NULL
10168     THEN
10169         validate_cannot_update_to_null (
10170             p_column                                => 'status',
10171             p_column_value                          => p_cust_account_role_rec.status,
10172             x_return_status                         => x_return_status );
10173 
10174         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10175            hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
10176                 'x_return_status = ' || x_return_status,
10177                                   p_prefix =>l_debug_prefix,
10178                                   p_msg_level=>fnd_log.level_statement);
10179         END IF;
10180 
10181     END IF;
10182 
10183 /****Logical APIs - validation not required****/
10184   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10185     -- status is lookup code in lookup type REGISTRY_STATUS because
10186     -- the status is used in party merge.
10187     IF p_cust_account_role_rec.status IS NOT NULL AND
10188        p_cust_account_role_rec.status <> FND_API.G_MISS_CHAR AND
10189        ( p_create_update_flag = 'C' OR
10190          ( p_create_update_flag = 'U' AND
10191            p_cust_account_role_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
10192     THEN
10193         validate_lookup (
10194             p_column                                => 'status',
10195             p_lookup_type                           => 'REGISTRY_STATUS',
10196             p_column_value                          => p_cust_account_role_rec.status,
10197             x_return_status                         => x_return_status );
10198 
10199         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10200            hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10201                 'x_return_status = ' || x_return_status,
10202                                   p_prefix =>l_debug_prefix,
10203                                   p_msg_level=>fnd_log.level_statement);
10204         END IF;
10205 
10206     END IF;
10207   END IF;
10208 
10209     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10210            hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
10211             'x_return_status = ' || x_return_status,
10212                                   p_prefix =>l_debug_prefix,
10213                                   p_msg_level=>fnd_log.level_statement);
10214     END IF;
10215 
10216 
10217     --------------------------------------
10218     -- validate created_by_module
10219     --------------------------------------
10220 
10221     validate_created_by_module(
10222       p_create_update_flag     => p_create_update_flag,
10223       p_created_by_module      => p_cust_account_role_rec.created_by_module,
10224       p_old_created_by_module  => l_created_by_module,
10225       x_return_status          => x_return_status);
10226 
10227     --------------------------------------
10228     -- validate application_id
10229     --------------------------------------
10230 
10231     validate_application_id(
10232       p_create_update_flag     => p_create_update_flag,
10233       p_application_id         => p_cust_account_role_rec.application_id,
10234       p_old_application_id     => l_application_id,
10235       x_return_status          => x_return_status);
10236 
10237     -- Debug info.
10238     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10239         hz_utility_v2pub.debug(p_message=>'validate_cust_account_role (-)',
10240                                p_prefix=>l_debug_prefix,
10241                                p_msg_level=>fnd_log.level_procedure);
10242     END IF;
10243 
10244 END validate_cust_account_role;
10245 
10246 /**
10247  * PROCEDURE validate_role_responsibility
10248  *
10249  * DESCRIPTION
10250  *     Validates customer account role responsibility record. Checks for
10251  *         uniqueness
10252  *         lookup types
10253  *         mandatory columns
10254  *         non-updateable fields
10255  *         foreign key validations
10256  *         other validations
10257  *
10258  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10259  *
10260  * ARGUMENTS
10261  *   IN:
10262  *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
10263  *     p_role_responsibility_rec      Customer account role responsibility record.
10264  *     p_rowid                        Rowid of the record (used only in update mode).
10265  *   IN/OUT:
10266  *     x_return_status                Return status after the call. The status can
10267  *                                    be FND_API.G_RET_STS_SUCCESS (success),
10268  *                                    FND_API.G_RET_STS_ERROR (error),
10269  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
10270  *
10271  * NOTES
10272  *
10273  * MODIFICATION HISTORY
10274  *
10275  *   07-23-2001    Jianying Huang      o Created.
10276  *
10277  */
10278 
10279 PROCEDURE validate_role_responsibility (
10280     p_create_update_flag                    IN     VARCHAR2,
10281     p_role_responsibility_rec               IN     HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE,
10282     p_rowid                                 IN     ROWID,
10283     x_return_status                         IN OUT NOCOPY VARCHAR2
10284 ) IS
10285 
10286     l_debug_prefix                          VARCHAR2(30) := ''; -- 'validate_role_repsonsibility'
10287 
10288     l_dummy                                 VARCHAR2(1);
10289 
10290     l_responsibility_type                   HZ_ROLE_RESPONSIBILITY.responsibility_type%TYPE;
10291     l_cust_account_role_id                  NUMBER;
10292     l_orig_system_reference                 HZ_ROLE_RESPONSIBILITY.orig_system_reference%TYPE;
10293     l_created_by_module                     HZ_ROLE_RESPONSIBILITY.created_by_module%TYPE;
10294     l_application_id                        NUMBER;
10295 
10296 BEGIN
10297 
10298     -- Check if API is called in debug mode. If yes, enable debug.
10299     --enable_debug;
10300 
10301     -- Debug info.
10302     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10303         hz_utility_v2pub.debug(p_message=>'validate_role_responsibility (+)',
10304                                p_prefix=>l_debug_prefix,
10305                                p_msg_level=>fnd_log.level_procedure);
10306     END IF;
10307 
10308     -- Select fields for later use during update.
10309     IF p_create_update_flag = 'U' THEN
10310         SELECT RESPONSIBILITY_TYPE, CUST_ACCOUNT_ROLE_ID, ORIG_SYSTEM_REFERENCE ,
10311                CREATED_BY_MODULE, APPLICATION_ID
10312         INTO l_responsibility_type, l_cust_account_role_id, l_orig_system_reference,
10313              l_created_by_module, l_application_id
10314         FROM HZ_ROLE_RESPONSIBILITY
10315         WHERE ROWID = p_rowid;
10316     END IF;
10317 
10318     --------------------------------------
10319     -- validate responsibility_id
10320     --------------------------------------
10321 /****Logical APIs - validation not required****/
10322   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10323     IF p_create_update_flag = 'C' THEN
10324 
10325         -- If primary key value is passed, check for uniqueness.
10326         -- If primary key value is not passed, it will be generated
10327         -- from sequence by table handler.
10328 
10329         IF p_role_responsibility_rec.responsibility_id IS NOT NULL AND
10330            p_role_responsibility_rec.responsibility_id <> FND_API.G_MISS_NUM
10331         THEN
10332         BEGIN
10333             SELECT 'Y' INTO l_dummy
10334             FROM HZ_ROLE_RESPONSIBILITY
10335             WHERE RESPONSIBILITY_ID = p_role_responsibility_rec.responsibility_id;
10336 
10337             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10338             FND_MESSAGE.SET_TOKEN( 'COLUMN', 'responsibility_id' );
10339             FND_MSG_PUB.ADD;
10340             x_return_status := FND_API.G_RET_STS_ERROR;
10341         EXCEPTION
10342             WHEN NO_DATA_FOUND THEN
10343                 NULL;
10344         END;
10345 
10346         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10347            hz_utility_v2pub.debug(p_message=>'responsibility_id is unique during creation if passed in. ' ||
10348                 'x_return_status = ' || x_return_status,
10349                                   p_prefix =>l_debug_prefix,
10350                                   p_msg_level=>fnd_log.level_statement);
10351         END IF;
10352 
10353 
10354         END IF;
10355     END IF;
10356 
10357     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10358            hz_utility_v2pub.debug(p_message=>'(+) after validate responsibility_id ... ' ||
10359             'x_return_status = ' || x_return_status,
10360                                   p_prefix =>l_debug_prefix,
10361                                   p_msg_level=>fnd_log.level_statement);
10362     END IF;
10363   END IF;
10364 
10365     ----------------------------------------------
10366     -- validate responsibility_type
10367     ----------------------------------------------
10368 
10369     -- responsibility_type is mandatory field
10370 
10371     validate_mandatory (
10372         p_create_update_flag                    => p_create_update_flag,
10373         p_column                                => 'responsibility_type',
10374         p_column_value                          => p_role_responsibility_rec.responsibility_type,
10375         x_return_status                         => x_return_status );
10376 
10377     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10378            hz_utility_v2pub.debug(p_message=>'responsibility_type is mandatory. ' ||
10379             'x_return_status = ' || x_return_status,
10380                                   p_prefix =>l_debug_prefix,
10381                                   p_msg_level=>fnd_log.level_statement);
10382     END IF;
10383 
10384 
10385     -- responsibility_type is lookup code in lookup type SITE_USE_CODE
10386 
10387     IF p_role_responsibility_rec.responsibility_type IS NOT NULL AND
10388        p_role_responsibility_rec.responsibility_type <> FND_API.G_MISS_CHAR AND
10389        ( p_create_update_flag = 'C' OR
10390          ( p_create_update_flag = 'U' AND
10391            p_role_responsibility_rec.responsibility_type <> NVL( l_responsibility_type, FND_API.G_MISS_CHAR ) ) )
10392     THEN
10393         validate_lookup (
10394             p_column                                => 'responsibility_type',
10395             p_lookup_type                           => 'SITE_USE_CODE',
10396             p_column_value                          => p_role_responsibility_rec.responsibility_type,
10397             x_return_status                         => x_return_status );
10398 
10399         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10400            hz_utility_v2pub.debug(p_message=>'responsibility_type is lookup code in lookup type SITE_USE_CODE. ' ||
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 
10407         l_responsibility_type := p_role_responsibility_rec.responsibility_type;
10408     END IF;
10409 
10410     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10411            hz_utility_v2pub.debug(p_message=>'(+) after validate responsibility_type ... ' ||
10412             'x_return_status = ' || x_return_status,
10413                                   p_prefix =>l_debug_prefix,
10414                                   p_msg_level=>fnd_log.level_statement);
10415     END IF;
10416 
10417 
10418     ----------------------------------------------
10419     -- validate cust_account_role_id
10420     ----------------------------------------------
10421 /****Logical APIs - validation not required****/
10422   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10423     -- cust_account_role_id is mandatory field
10424     -- Since cust_account_role_id is non-updateable, we only need to check mandatory
10425     -- during creation.
10426 
10427     IF p_create_update_flag = 'C' THEN
10428         validate_mandatory (
10429             p_create_update_flag                    => p_create_update_flag,
10430             p_column                                => 'cust_account_role_id',
10431             p_column_value                          => p_role_responsibility_rec.cust_account_role_id,
10432             x_return_status                         => x_return_status );
10433 
10434         l_cust_account_role_id := p_role_responsibility_rec.cust_account_role_id;
10435 
10436         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10437            hz_utility_v2pub.debug(p_message=>'cust_account_role_id is mandatory. ' ||
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     END IF;
10443 
10444     -- cust_account_role_id is non-updateable
10445     IF p_create_update_flag = 'U' AND
10446        p_role_responsibility_rec.cust_account_role_id IS NOT NULL
10447     THEN
10448         validate_nonupdateable (
10449             p_column                                => 'cust_account_role_id',
10450             p_column_value                          => p_role_responsibility_rec.cust_account_role_id,
10451             p_old_column_value                      => l_cust_account_role_id,
10452             x_return_status                         => x_return_status );
10453 
10454         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10455            hz_utility_v2pub.debug(p_message=>'cust_account_role_id is non-updateable. ' ||
10456                 'x_return_status = ' || x_return_status,
10457                                   p_prefix =>l_debug_prefix,
10458                                   p_msg_level=>fnd_log.level_statement);
10459         END IF;
10460 
10461     END IF;
10462 
10463     -- cust_account_role_id is foreign key to hz_cust_account_roles.
10464     -- Since cust_account_role_id is mandatory and non-updateable,
10465     -- we only need to check FK during creation.
10466 
10467     IF p_create_update_flag = 'C' AND
10468        p_role_responsibility_rec.cust_account_role_id IS NOT NULL AND
10469        p_role_responsibility_rec.cust_account_role_id <> FND_API.G_MISS_NUM
10470     THEN
10471         check_cust_account_role_fk (
10472             p_column                                => 'cust_account_role_id',
10473             p_column_value                          => p_role_responsibility_rec.cust_account_role_id,
10474             x_return_status                         => x_return_status );
10475 
10476         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10477            hz_utility_v2pub.debug(p_message=>'cust_account_role_id is foreign key to hz_cust_account_roles. ' ||
10478                 'x_return_status = ' || x_return_status,
10479                                   p_prefix =>l_debug_prefix,
10480                                   p_msg_level=>fnd_log.level_statement);
10481         END IF;
10482 
10483     END IF;
10484 
10485     -- The combination of cust_account_role_id and responsibility_type
10486     -- should be unique.
10487 
10488     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10489            hz_utility_v2pub.debug(p_message=>'cust_account_role_id = ' || l_cust_account_role_id || ' ' ||
10490                                     'role_responsibility_id = ' || l_responsibility_type || ' ' ||
10491                                     'create_update_flag = ' || p_create_update_flag || ' ' ||
10492                                     'p_rowid = ' || p_rowid || ' ' ||
10493                                     'x_return_status = ' || x_return_status,
10494                                   p_prefix =>l_debug_prefix,
10495                                   p_msg_level=>fnd_log.level_statement);
10496     END IF;
10497   END IF;
10498 
10499     BEGIN
10500         SELECT 'Y' INTO l_dummy
10501         FROM HZ_ROLE_RESPONSIBILITY
10502         WHERE CUST_ACCOUNT_ROLE_ID = l_cust_account_role_id
10503         AND RESPONSIBILITY_TYPE = l_responsibility_type
10504         AND ( p_create_update_flag = 'C' OR
10505             ( p_create_update_flag = 'U' AND ROWID <> p_rowid ) )
10506         AND ROWNUM = 1;
10507 
10508         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10509         FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_role_id - responsibility_type' );
10510         FND_MSG_PUB.ADD;
10511         x_return_status := FND_API.G_RET_STS_ERROR;
10512     EXCEPTION
10513         WHEN NO_DATA_FOUND THEN
10514             NULL;
10515     END;
10516 
10517     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10518            hz_utility_v2pub.debug(p_message=>'combination of cust_account_role_id and responsibility_type should be unique. ' ||
10519                                         'x_return_status = ' || x_return_status,
10520                                   p_prefix =>l_debug_prefix,
10521                                   p_msg_level=>fnd_log.level_statement);
10522     END IF;
10523 
10524     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10525            hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_role_id ... ' ||
10526             'x_return_status = ' || x_return_status,
10527                                   p_prefix =>l_debug_prefix,
10528                                   p_msg_level=>fnd_log.level_statement);
10529     END IF;
10530 
10531 
10532     ----------------------------------------------
10533     -- validate orig_system_reference
10534     ----------------------------------------------
10535 /****Logical APIs - validation not required****/
10536   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10537     -- orig_system_reference is non-updateable field
10538     IF p_create_update_flag = 'U' AND
10539        p_role_responsibility_rec.orig_system_reference IS NOT NULL
10540     THEN
10541         validate_nonupdateable (
10542             p_column                                => 'orig_system_reference',
10543             p_column_value                          => p_role_responsibility_rec.orig_system_reference,
10544             p_old_column_value                      => l_orig_system_reference,
10545             x_return_status                         => x_return_status );
10546 
10547         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10548            hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
10549                 'x_return_status = ' || x_return_status,
10550                                   p_prefix =>l_debug_prefix,
10551                                   p_msg_level=>fnd_log.level_statement);
10552         END IF;
10553 
10554 
10555     END IF;
10556 
10557     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10558            hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
10559             'x_return_status = ' || x_return_status,
10560                                   p_prefix =>l_debug_prefix,
10561                                   p_msg_level=>fnd_log.level_statement);
10562     END IF;
10563   END IF;
10564 
10565     ----------------------------------------------
10566     -- validate primary_flag
10567     ----------------------------------------------
10568 /****Logical APIs - validation not required****/
10569   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10570     -- primary_flag is lookup code in lookup type YES/NO
10571     IF p_role_responsibility_rec.primary_flag IS NOT NULL AND
10572        p_role_responsibility_rec.primary_flag <> FND_API.G_MISS_CHAR
10573     THEN
10574         validate_lookup (
10575             p_column                                => 'primary_flag',
10576             p_lookup_type                           => 'YES/NO',
10577             p_column_value                          => p_role_responsibility_rec.primary_flag,
10578             x_return_status                         => x_return_status );
10579 
10580         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10581            hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
10582                 'x_return_status = ' || x_return_status,
10583                                   p_prefix =>l_debug_prefix,
10584                                   p_msg_level=>fnd_log.level_statement);
10585         END IF;
10586 
10587     END IF;
10588   END IF;
10589 
10590     -- primary_flag is unique per cust_account_role_id
10591     IF p_role_responsibility_rec.primary_flag = 'Y' THEN
10592         IF p_create_update_flag = 'C' THEN
10593             l_cust_account_role_id := p_role_responsibility_rec.cust_account_role_id;
10594         END IF;
10595 
10596         BEGIN
10597             SELECT 'Y' INTO l_dummy
10598             FROM HZ_ROLE_RESPONSIBILITY
10599             WHERE CUST_ACCOUNT_ROLE_ID = l_cust_account_role_id
10600             AND PRIMARY_FLAG = 'Y'
10601             AND ( p_create_update_flag = 'C' OR
10602                   p_create_update_flag = 'U' AND ROWID <> p_rowid )
10603             AND ROWNUM = 1;
10604 
10605             FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ROLE_PRIMARY' );
10606             FND_MSG_PUB.ADD;
10607             x_return_status := FND_API.G_RET_STS_ERROR;
10608         EXCEPTION
10609             WHEN NO_DATA_FOUND THEN
10610                 NULL;
10611         END;
10612 
10613         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10614            hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_account_role_id. ' ||
10615                 'x_return_status = ' || x_return_status,
10616                                   p_prefix =>l_debug_prefix,
10617                                   p_msg_level=>fnd_log.level_statement);
10618         END IF;
10619 
10620     END IF;
10621 
10622     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10623            hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
10624             'x_return_status = ' || x_return_status,
10625                                   p_prefix =>l_debug_prefix,
10626                                   p_msg_level=>fnd_log.level_statement);
10627     END IF;
10628 
10629 
10630     --------------------------------------
10631     -- validate created_by_module
10632     --------------------------------------
10633 
10634     validate_created_by_module(
10635       p_create_update_flag     => p_create_update_flag,
10636       p_created_by_module      => p_role_responsibility_rec.created_by_module,
10637       p_old_created_by_module  => l_created_by_module,
10638       x_return_status          => x_return_status);
10639 
10640     --------------------------------------
10641     -- validate application_id
10642     --------------------------------------
10643 
10644     validate_application_id(
10645       p_create_update_flag     => p_create_update_flag,
10646       p_application_id         => p_role_responsibility_rec.application_id,
10647       p_old_application_id     => l_application_id,
10648       x_return_status          => x_return_status);
10649 
10650     -- Debug info.
10651 
10652     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10653         hz_utility_v2pub.debug(p_message=>'validate_role_responsibility (-)',
10654                                p_prefix=>l_debug_prefix,
10655                                p_msg_level=>fnd_log.level_procedure);
10656     END IF;
10657 
10658 END validate_role_responsibility;
10659 
10660 --------------------------------------
10661 -- private procedures and functions
10662 --------------------------------------
10663 
10664 PROCEDURE check_cust_account_fk (
10665     p_column                                IN     VARCHAR2,
10666     p_column_value                          IN     NUMBER,
10667     x_return_status                         IN OUT NOCOPY VARCHAR2
10668 ) IS
10669 
10670     l_dummy                                 VARCHAR2(1);
10671 
10672 BEGIN
10673 
10674 -- 2310474 : cust_account_id = -1 for profile at party level
10675 
10676   IF p_column_value <> -1 THEN
10677 
10678     SELECT 'Y' INTO l_dummy
10679     FROM HZ_CUST_ACCOUNTS
10680     WHERE CUST_ACCOUNT_ID = p_column_value;
10681 
10682   END IF;
10683 
10684 EXCEPTION
10685     WHEN NO_DATA_FOUND THEN
10686         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10687         FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_id' );
10688         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10689         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_accounts' );
10690         FND_MSG_PUB.ADD;
10691         x_return_status := FND_API.G_RET_STS_ERROR;
10692 
10693 END check_cust_account_fk;
10694 
10695 PROCEDURE check_cust_acct_site_fk (
10696     p_column                                IN     VARCHAR2,
10697     p_column_value                          IN     NUMBER,
10698     p_org_id                                IN     NUMBER,    -- 3456489
10699     x_return_status                         IN OUT NOCOPY VARCHAR2
10700 ) IS
10701 
10702     l_dummy                                 VARCHAR2(1);
10703 
10704 BEGIN
10705 
10706     SELECT 'Y' INTO l_dummy
10707     FROM HZ_CUST_ACCT_SITES_ALL  -- Bug 3456489
10708     WHERE CUST_ACCT_SITE_ID = p_column_value
10709       AND ORG_ID = p_org_id;  -- Bug 3456489
10710 
10711 EXCEPTION
10712     WHEN NO_DATA_FOUND THEN
10713         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10714         FND_MESSAGE.SET_TOKEN( 'FK', 'cust_acct_site_id' );
10715         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10716         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_acct_sites' );
10717         FND_MSG_PUB.ADD;
10718         x_return_status := FND_API.G_RET_STS_ERROR;
10719 
10720 END check_cust_acct_site_fk;
10721 
10722 PROCEDURE check_cust_site_use_fk (
10723     p_column                                IN     VARCHAR2,
10724     p_column_value                          IN     NUMBER,
10725     x_return_status                         IN OUT NOCOPY VARCHAR2
10726 ) IS
10727 
10728     l_return_status                         VARCHAR2(1);
10729     l_org_id                                HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
10730 BEGIN
10731 
10732     SELECT org_id INTO l_org_id
10733     FROM HZ_CUST_SITE_USES_ALL
10734     WHERE SITE_USE_ID = p_column_value;
10735 
10736     -- Bug 4650473. Check if org is accessible.
10737     BEGIN
10738     MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
10739     EXCEPTION
10740     WHEN OTHERS
10741     THEN
10742      x_return_status := FND_API.G_RET_STS_ERROR;
10743     END;
10744 
10745 EXCEPTION
10746     WHEN NO_DATA_FOUND THEN
10747         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10748         FND_MESSAGE.SET_TOKEN( 'FK', 'site_use_id' );
10749         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10750         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_site_uses' );
10751         FND_MSG_PUB.ADD;
10752         x_return_status := FND_API.G_RET_STS_ERROR;
10753 
10754 END check_cust_site_use_fk;
10755 PROCEDURE check_cust_site_use_cont_fk(
10756    p_column                                IN     VARCHAR2,
10757    p_column_value                          IN     NUMBER,
10758    p_customer_id                           IN     NUMBER,
10759    x_return_status                         IN OUT NOCOPY VARCHAR2
10760 ) IS
10761 
10762     l_dummy                                 VARCHAR2(1);
10763 BEGIN
10764     SELECT 'Y' INTO l_dummy
10765     FROM HZ_CUST_ACCOUNT_ROLES
10766     WHERE CUST_ACCOUNT_ROLE_ID = p_column_value
10767     AND   CUST_ACCOUNT_ID      = p_customer_id;
10768 
10769 EXCEPTION
10770     WHEN NO_DATA_FOUND THEN
10771         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10772         FND_MESSAGE.SET_TOKEN( 'FK', 'contact_id' );
10773         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10774         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_account_roles' );
10775         FND_MSG_PUB.ADD;
10776         x_return_status := FND_API.G_RET_STS_ERROR;
10777 
10778 END check_cust_site_use_cont_fk;
10779 
10780 PROCEDURE check_cust_account_role_fk (
10781     p_column                                IN     VARCHAR2,
10782     p_column_value                          IN     NUMBER,
10783     x_return_status                         IN OUT NOCOPY VARCHAR2
10784 ) IS
10785 
10786     l_dummy                                 VARCHAR2(1);
10787 
10788 BEGIN
10789     SELECT 'Y' INTO l_dummy
10790     FROM HZ_CUST_ACCOUNT_ROLES
10791     WHERE CUST_ACCOUNT_ROLE_ID = p_column_value;
10792 
10793 EXCEPTION
10794     WHEN NO_DATA_FOUND THEN
10795         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10796         FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_role_id' );
10797         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10798         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_account_roles' );
10799         FND_MSG_PUB.ADD;
10800         x_return_status := FND_API.G_RET_STS_ERROR;
10801 
10802 END check_cust_account_role_fk;
10803 
10804 PROCEDURE check_per_all_people_f_fk (
10805     p_column                                IN     VARCHAR2,
10806     p_column_value                          IN     NUMBER,
10807     x_return_status                         IN OUT NOCOPY VARCHAR2
10808 ) IS
10809 
10810     l_dummy                                 VARCHAR2(1);
10811 
10812 BEGIN
10813 
10814     SELECT 'Y' INTO l_dummy
10815     FROM PER_ALL_PEOPLE_F
10816     WHERE PERSON_ID = p_column_value
10817       /* Bug 3591694.
10818          Retrieve only those records, which are effective on sysdate.
10819          Both effective_start_date and effective_end_date are not null columns and
10820          as such there is no need to explicitely do a NVL.
10821        */
10822       AND EFFECTIVE_START_DATE <= SYSDATE
10823       AND EFFECTIVE_END_DATE >= SYSDATE
10824       AND ROWNUM = 1;
10825 
10826 EXCEPTION
10827     WHEN NO_DATA_FOUND THEN
10828         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10829         FND_MESSAGE.SET_TOKEN( 'FK', 'person_id' );
10830         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10831         FND_MESSAGE.SET_TOKEN( 'TABLE', 'per_all_people_f' );
10832         FND_MSG_PUB.ADD;
10833         x_return_status := FND_API.G_RET_STS_ERROR;
10834 
10835 END check_per_all_people_f_fk;
10836 
10837 PROCEDURE check_collector_fk (
10838     p_column                                IN     VARCHAR2,
10839     p_column_value                          IN     NUMBER,
10840     x_return_status                         IN OUT NOCOPY VARCHAR2
10841 ) IS
10842 
10843     l_dummy                                 VARCHAR2(1);
10844 
10845 BEGIN
10846 
10847     SELECT 'Y' INTO l_dummy
10848     FROM AR_COLLECTORS
10849     WHERE COLLECTOR_ID = p_column_value;
10850 
10851 EXCEPTION
10852     WHEN NO_DATA_FOUND THEN
10853         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10854         FND_MESSAGE.SET_TOKEN( 'FK', 'collector_id' );
10855         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10856         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_collectors');
10857         FND_MSG_PUB.ADD;
10858         x_return_status := FND_API.G_RET_STS_ERROR;
10859 
10860 END check_collector_fk;
10861 
10862 PROCEDURE check_party_fk (
10863     p_column                                IN     VARCHAR2,
10864     p_column_value                          IN     NUMBER,
10865     x_return_status                         IN OUT NOCOPY VARCHAR2
10866 ) IS
10867 
10868     l_dummy                                 VARCHAR2(1);
10869 
10870 BEGIN
10871 
10872     SELECT 'Y' INTO l_dummy
10873     FROM HZ_PARTIES
10874     WHERE PARTY_ID = p_column_value;
10875 
10876 EXCEPTION
10877     WHEN NO_DATA_FOUND THEN
10878         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10879         FND_MESSAGE.SET_TOKEN( 'FK', 'party_id' );
10880         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10881         FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_parties' );
10882         FND_MSG_PUB.ADD;
10883         x_return_status := FND_API.G_RET_STS_ERROR;
10884 
10885 END check_party_fk;
10886 
10887 PROCEDURE check_party_site_fk (
10888     p_column                                IN     VARCHAR2,
10889     p_column_value                          IN     NUMBER,
10890     x_return_status                         IN OUT NOCOPY VARCHAR2
10891 ) IS
10892 
10893     l_dummy                                 VARCHAR2(1);
10894 
10895 BEGIN
10896 
10897     BEGIN
10898         SELECT 'Y' INTO l_dummy
10899         FROM HZ_PARTY_SITES
10900         WHERE PARTY_SITE_ID = p_column_value;
10901     EXCEPTION
10902         WHEN NO_DATA_FOUND THEN
10903             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10904             FND_MESSAGE.SET_TOKEN( 'FK', 'party_site_id' );
10905             FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10906             FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_party_sites' );
10907             FND_MSG_PUB.ADD;
10908             x_return_status := FND_API.G_RET_STS_ERROR;
10909     END;
10910 
10911 END check_party_site_fk;
10912 
10913 PROCEDURE check_currency_fk (
10914     p_column                                IN     VARCHAR2,
10915     p_column_value                          IN     VARCHAR2,
10916     x_return_status                         IN OUT NOCOPY VARCHAR2
10917 ) IS
10918 
10919     l_dummy                                 VARCHAR2(1);
10920 
10921 BEGIN
10922     -- Bug Fix: 3877782
10923     SELECT 'Y' INTO l_dummy
10924     FROM FND_CURRENCIES
10925     WHERE CURRENCY_CODE = p_column_value
10926     AND   CURRENCY_FLAG = 'Y'
10927     AND   ENABLED_FLAG  = 'Y'
10928     AND   TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE,SYSDATE))
10929                          AND     TRUNC(NVL(END_DATE_ACTIVE,SYSDATE));
10930 
10931 EXCEPTION
10932     WHEN NO_DATA_FOUND THEN
10933         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10934         FND_MESSAGE.SET_TOKEN( 'FK', 'currency_code' );
10935         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10936         FND_MESSAGE.SET_TOKEN( 'TABLE', 'fnd_currencies' );
10937         FND_MSG_PUB.ADD;
10938         x_return_status := FND_API.G_RET_STS_ERROR;
10939 
10940 END check_currency_fk;
10941 
10942 PROCEDURE check_oe_ship_methods_v_fk (
10943     p_entity                                IN     VARCHAR2,
10944     p_column                                IN     VARCHAR2,
10945     p_column_value                          IN     VARCHAR2,
10946     x_return_status                         IN OUT NOCOPY VARCHAR2
10947 ) IS
10948 
10949     l_org_id                                NUMBER;
10950 
10951 BEGIN
10952     --Bug Fix 2262248, API should NOT DISALLOW the specification of a value for
10953     --ship-via based on multi-org installation status for ACOUNT and SITE USE levels.
10954     /**************************************************************************
10955     IF p_entity = 'ACCOUNT' THEN
10956 
10957      BEGIN
10958         SELECT MIN(ORG_ID) INTO l_org_id
10959         FROM AR_SYSTEM_PARAMETERS;
10960 
10961         IF l_org_id IS NOT NULL THEN
10962             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_COLUMN_SHOULD_BE_NULL' );
10963             FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10964             FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_accounts' );
10965             FND_MSG_PUB.ADD;
10966             x_return_status := FND_API.G_RET_STS_ERROR;
10967 
10968             RETURN;
10969         END IF;
10970 
10971  --Bug Fix 2183072 Handled the exception
10972      EXCEPTION
10973      WHEN NO_DATA_FOUND THEN
10974           FND_MESSAGE.SET_NAME( 'AR', 'AR_NO_ROW_IN_SYSTEM_PARAMETERS');
10975           FND_MSG_PUB.ADD;
10976           x_return_status := FND_API.G_RET_STS_ERROR;
10977     END ;
10978     END IF;
10979     **************************************************************************/
10980     validate_lookup (
10981         p_column                                => p_column,
10982         p_lookup_table                          => 'OE_SHIP_METHODS_V',
10983         p_lookup_type                           => 'SHIP_METHOD',
10984         p_column_value                          => p_column_value,
10985         x_return_status                         => x_return_status );
10986 
10987 END check_oe_ship_methods_v_fk;
10988 
10989 PROCEDURE check_payterm_id_fk (
10990     p_column                                IN     VARCHAR2,
10991     p_column_value                          IN     VARCHAR2,
10992     x_return_status                         IN OUT NOCOPY VARCHAR2
10993 ) IS
10994         l_dummy                                 VARCHAR2(1);
10995   BEGIN
10996 
10997      -- Modified the below query for bug # 5529044
10998      -- Now this will validate only for a valid payment term.
10999      -- Validate that the payment_term_id passed should be a non Balance Forwarded Billing payment term.
11000      -- Changed as a part of Balance Forwarded Billing enhancement. bug # 4935721
11001      SELECT 'Y'
11002      into  l_dummy
11003      from  ra_terms_b
11004      where term_id = p_column_value
11005 --     and   billing_cycle_id is null
11006      and   trunc(sysdate) between
11007            start_date_active and nvl(end_date_active,trunc(sysdate));
11008 /*
11009      SELECT 'Y' INTO l_dummy
11010      FROM RA_TERMS ra
11011      WHERE ra.term_id = p_column_value
11012      AND   trunc(sysdate) between START_DATE_ACTIVE and nvl(END_DATE_ACTIVE,trunc(sysdate));
11013 */
11014 EXCEPTION
11015     WHEN NO_DATA_FOUND THEN
11016         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11017         FND_MESSAGE.SET_TOKEN( 'FK', 'payment_term_id' );
11018         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11019         FND_MESSAGE.SET_TOKEN( 'TABLE', 'RA_TERMS' );
11020         FND_MSG_PUB.ADD;
11021         x_return_status := FND_API.G_RET_STS_ERROR;
11022 END check_payterm_id_fk;
11023 
11024 PROCEDURE check_late_charge_term_id_fk (
11025     p_column                                IN     VARCHAR2,
11026     p_column_value                          IN     NUMBER,
11027     p_cons_inv_flag                         IN     VARCHAR2,
11028     x_return_status                         IN OUT NOCOPY VARCHAR2
11029 ) IS
11030         l_dummy                                 VARCHAR2(1);
11031   BEGIN
11032 
11033    -- if cons_inv_flag = 'N' validate that the late charge payment term that
11034    -- does not have a balance forward billing cycle. If cons_inv_flag = 'Y' then,
11035    -- Validate that late charge payment term that has a balance forward billing cycle.
11036    if p_cons_inv_flag = 'N' then
11037       begin
11038          SELECT 'Y'
11039          into  l_dummy
11040          from  ra_terms_b
11041          where term_id = p_column_value
11042          and   billing_cycle_id is null
11043          and   trunc(sysdate) between
11044                start_date_active and nvl(end_date_active,trunc(sysdate));
11045 
11046          EXCEPTION
11047          WHEN NO_DATA_FOUND THEN
11048            -- Balance forward billing has not been enabled.
11049            -- Pass a late charge payment term that does not have a balance forward billing cycle.
11050            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_PAY_TERM_DISABLED' );
11051            FND_MSG_PUB.ADD;
11052            x_return_status := FND_API.G_RET_STS_ERROR;
11053       end;
11054    elsif p_cons_inv_flag = 'Y' then
11055       begin
11056          SELECT 'Y'
11057          into  l_dummy
11058          from  ra_terms_b t
11059          where t.term_id = p_column_value
11060          and   t.billing_cycle_id is not null
11061          and   trunc(sysdate) between
11062                t.start_date_active  and nvl(t.end_date_active,trunc(sysdate));
11063 
11064          EXCEPTION
11065          WHEN NO_DATA_FOUND THEN
11066            -- Balance forward billing has been enabled.
11067            -- Pass a late charge payment term that has a balance forward billing cycle.
11068            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_PAY_TERM_ENABLED' );
11069            FND_MSG_PUB.ADD;
11070            x_return_status := FND_API.G_RET_STS_ERROR;
11071       end;
11072    end if;
11073 
11074 END check_late_charge_term_id_fk;
11075 
11076 PROCEDURE check_message_text_id_fk (
11077     p_column                                IN     VARCHAR2,
11078     p_column_value                          IN     NUMBER,
11079     x_return_status                         IN OUT NOCOPY VARCHAR2
11080 ) IS
11081         l_dummy                                 VARCHAR2(1);
11082   BEGIN
11083 
11084      -- Validate that the message_text_id passed should be a valid
11085      -- value in AR_STANDARD_TEXT.STANDARD_TEXT_ID. bug # 5065436
11086      SELECT 'Y'
11087      into  l_dummy
11088      from  AR_STANDARD_TEXT
11089      where STANDARD_TEXT_ID = p_column_value
11090      and   trunc(sysdate) between
11091            start_date and nvl(end_date,trunc(sysdate));
11092 EXCEPTION
11093     WHEN NO_DATA_FOUND THEN
11094         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11095         FND_MESSAGE.SET_TOKEN( 'FK', 'standard_text_id' );
11096         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11097         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_standard_text' );
11098         FND_MSG_PUB.ADD;
11099         x_return_status := FND_API.G_RET_STS_ERROR;
11100 END check_message_text_id_fk;
11101 
11102 PROCEDURE check_exchange_rate_type_fk (
11103     p_column                                IN     VARCHAR2,
11104     p_column_value                          IN     VARCHAR2,
11105     x_return_status                         IN OUT NOCOPY VARCHAR2
11106 ) IS
11107         l_dummy                                 VARCHAR2(1);
11108   BEGIN
11109 
11110      -- Validate that the exchange_rate_type passed should be a valid
11111      -- value in GL_DAILY_CONVERSION_TYPES. where type is not USER. bug # 5065436
11112      SELECT 'Y'
11113      into  l_dummy
11114      from  gl_daily_conversion_types
11115      where conversion_type <> 'USER'
11116      and   conversion_type = p_column_value;
11117 
11118 EXCEPTION
11119     WHEN NO_DATA_FOUND THEN
11120         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11121         FND_MESSAGE.SET_TOKEN( 'FK', 'conversion_type' );
11122         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11123         FND_MESSAGE.SET_TOKEN( 'TABLE', 'gl_daily_conversion_types' );
11124         FND_MSG_PUB.ADD;
11125         x_return_status := FND_API.G_RET_STS_ERROR;
11126 END check_exchange_rate_type_fk;
11127 
11128 PROCEDURE check_charge_schedule_id_fk (
11129     p_column                                IN     VARCHAR2,
11130     p_column_value                          IN     NUMBER,
11131     x_return_status                         IN OUT NOCOPY VARCHAR2
11132 ) IS
11133         l_dummy                                 VARCHAR2(1);
11134   BEGIN
11135 
11136      -- Validate that the schedule_id passed should be a valid
11137      -- value in ar_charge_schedules. bug # 5065436
11138      SELECT 'Y'
11139      into  l_dummy
11140      from  ar_charge_schedules
11141      where schedule_id = p_column_value;
11142 
11143 EXCEPTION
11144     WHEN NO_DATA_FOUND THEN
11145         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11146         FND_MESSAGE.SET_TOKEN( 'FK', 'schedule_id' );
11147         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11148         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_charge_schedules' );
11149         FND_MSG_PUB.ADD;
11150         x_return_status := FND_API.G_RET_STS_ERROR;
11151 END check_charge_schedule_id_fk;
11152 
11153 PROCEDURE check_finchrg_trx_fk (
11154     p_column                                IN     VARCHAR2,
11155     p_column_value                          IN     VARCHAR2,
11156     p_org_id                                IN     NUMBER,   -- Bug 3456489
11157     x_return_status                         IN OUT NOCOPY VARCHAR2
11158 ) IS
11159         l_dummy                                 VARCHAR2(1);
11160   BEGIN
11161     SELECT 'Y' INTO l_dummy
11162      FROM AR_RECEIVABLES_TRX_ALL art
11163      WHERE art.receivables_trx_id = p_column_value
11164      AND   status = 'A'
11165      AND   art.org_id = p_org_id;  -- Bug 3456489
11166 EXCEPTION
11167     WHEN NO_DATA_FOUND THEN
11168         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11169         FND_MESSAGE.SET_TOKEN( 'FK', 'finchrg_receivables_trx_id' );
11170         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11171         FND_MESSAGE.SET_TOKEN( 'TABLE', 'AR_RECEIVABLES_TRX' );
11172         FND_MSG_PUB.ADD;
11173         x_return_status := FND_API.G_RET_STS_ERROR;
11174 END check_finchrg_trx_fk;
11175 
11176 PROCEDURE check_price_list_fk (
11177     p_column                                IN     VARCHAR2,
11178     p_column_value                          IN     VARCHAR2,
11179     x_return_status                         IN OUT NOCOPY VARCHAR2
11180 ) IS
11181         l_dummy                                 VARCHAR2(1);
11182   BEGIN
11183   --Bug Fix 2262616, changed the query, which was lookong at SO_PRICE_LISTS
11184   --to query qp_list_headers_b with active_flag
11185   /**************************************************************************
11186      SELECT 'Y' INTO l_dummy
11187      FROM  SO_PRICE_LISTS pl
11188      WHERE pl.price_list_id = p_column_value
11189      AND   sysdate between nvl(pl.start_date_active,sysdate) and nvl(pl.end_date_active,sysdate);
11190   ***************************************************************************/
11191      SELECT  'Y'
11192      INTO    l_dummy
11193      FROM    qp_list_headers_b lh
11194      WHERE   list_header_id = p_column_value
11195      AND     list_type_code = 'PRL'
11196      AND     (sysdate between nvl(lh.start_date_active,sysdate) and nvl(lh.end_date_active,sysdate)
11197      AND     nvl(active_flag, 'N') = 'Y');
11198 EXCEPTION
11199     WHEN NO_DATA_FOUND THEN
11200         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11201         FND_MESSAGE.SET_TOKEN( 'FK', 'price_list_id' );
11202         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11203 -- Bug 3591694        FND_MESSAGE.SET_TOKEN( 'TABLE', 'SO_PRICE_LISTS' );
11204         FND_MESSAGE.SET_TOKEN( 'TABLE', 'QP_LIST_HEADERS_B' );
11205 
11206         FND_MSG_PUB.ADD;
11207         x_return_status := FND_API.G_RET_STS_ERROR;
11208 END check_price_list_fk;
11209 
11210 PROCEDURE check_item_cross_ref(
11211           p_column                                IN     VARCHAR2,
11212           p_column_value                          IN     VARCHAR2,
11213           x_return_status                         IN OUT NOCOPY VARCHAR2
11214 ) IS
11215         l_dummy                                 VARCHAR2(1);
11216   BEGIN
11217      SELECT 'Y' INTO l_dummy
11218      FROM MTL_CROSS_REFERENCE_TYPES mtl
11219      WHERE mtl.cross_reference_type = p_column_value;
11220 EXCEPTION
11221     WHEN NO_DATA_FOUND THEN
11222         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11223         FND_MESSAGE.SET_TOKEN( 'FK', 'item_cross_ref_pref' );
11224         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11225         FND_MESSAGE.SET_TOKEN( 'TABLE', 'mtl_cross_reference_types' );
11226         FND_MSG_PUB.ADD;
11227         x_return_status := FND_API.G_RET_STS_ERROR;
11228 END check_item_cross_ref;
11229 
11230 PROCEDURE check_tax_code(
11231     p_column                                IN     VARCHAR2,
11232     p_column_value                          IN     VARCHAR2,
11233     -- Bug 4713150
11234     -- p_org_id                                IN     NUMBER,   -- Bug 3456489
11235     -- Bug 5136396: to indicate from where this procedure is called from
11236     p_called_from                           IN     VARCHAR2,
11237     x_return_status                         IN OUT NOCOPY VARCHAR2
11238 ) IS
11239 
11240     l_dummy         varchar2(1);
11241     l_org_id        number;
11242     -- l_sob_id        NUMBER;
11243 BEGIN
11244     -- Bug 5136396
11245     IF p_called_from = 'validate_cust_account' THEN
11246         l_org_id := nvl(mo_global.get_current_org_id, mo_utils.get_default_org_id);
11247     ELSE
11248     -- if from validate_cust_site_use
11249         l_org_id := mo_global.get_current_org_id;
11250     END IF;
11251 
11252     -- Bug 4713150
11253     SELECT 'Y' INTO l_dummy
11254     FROM zx_output_classifications_v
11255     WHERE lookup_type = 'ZX_OUTPUT_CLASSIFICATIONS'
11256     AND lookup_code = p_column_value
11257     AND trunc(sysdate) BETWEEN trunc(start_date_active) AND nvl(trunc(end_date_active),trunc(sysdate))
11258     AND enabled_flag = 'Y'
11259     -- Bug 5136396
11260     AND org_id IN (l_org_id, -99)
11261     AND ROWNUM = 1;
11262 
11263 /*
11264     -- Bug 3456489
11265     l_sob_id := HZ_MO_GLOBAL_CACHE.get_set_of_books_id(p_org_id);
11266 
11267     SELECT 'Y' INTO l_dummy
11268     FROM AR_VAT_TAX_ALL avt
11269     WHERE avt.tax_code = p_column_value
11270     AND trunc(SYSDATE) BETWEEN START_DATE AND NVL(END_DATE,trunc(sysdate))
11271     AND avt.enabled_flag = 'Y'
11272     AND avt.tax_class = 'O'
11273     AND avt.displayed_flag = 'Y'
11274     AND avt.set_of_books_id = l_sob_id
11275     AND avt.org_id = p_org_id;
11276 */
11277 EXCEPTION
11278     WHEN NO_DATA_FOUND THEN
11279         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11280         FND_MESSAGE.SET_TOKEN( 'FK', 'tax_code' );
11281         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11282         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ZX_OUTPUT_CLASSIFICATIONS_V' );
11283         FND_MSG_PUB.ADD;
11284         x_return_status := FND_API.G_RET_STS_ERROR;
11285 END check_tax_code;
11286 
11287 PROCEDURE check_warehouse(
11288           p_column                                IN     VARCHAR2,
11289           p_column_value                          IN     VARCHAR2,
11290           x_return_status                         IN OUT NOCOPY VARCHAR2
11291 ) IS
11292         l_dummy                                 VARCHAR2(1);
11293   BEGIN
11294     SELECT 'Y' INTO l_dummy
11295     FROM ORG_ORGANIZATION_DEFINITIONS org
11296     WHERE org.organization_id = p_column_value
11297     AND trunc(sysdate) <= nvl(trunc(org.disable_date),trunc(sysdate));
11298 EXCEPTION
11299     WHEN NO_DATA_FOUND THEN
11300         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11301         FND_MESSAGE.SET_TOKEN( 'FK', 'warehouse_id' );
11302         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11303         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ORG_ORGANIZATION_DEFINITIONS' );
11304         FND_MSG_PUB.ADD;
11305         x_return_status := FND_API.G_RET_STS_ERROR;
11306 END check_warehouse;
11307 
11308 PROCEDURE check_prim_salesrep(
11309         p_column                                IN     VARCHAR2,
11310         p_column_value                          IN     VARCHAR2,
11311         p_org_id                                IN     NUMBER,  -- Bug 3456489
11312         x_return_status                         IN OUT NOCOPY VARCHAR2
11313 ) IS
11314 
11315     l_dummy         varchar2(1);
11316 BEGIN
11317 
11318 /*
11319 show err;
11320 SELECT 'Y' INTO l_dummy
11321      -- FROM RA_SALESREPS ras   -- Bug 3456489
11322      FROM  JTF_RS_SALESREP ras
11323      WHERE ras.salesrep_id = p_column_value
11324      AND   ras.org_id = p_org_id
11325      AND sysdate between nvl(start_date_active,sysdate) and nvl(end_date_active,sysdate)
11326      AND nvl(status, 'A') = 'A'
11327      AND salesrep_id NOT IN( -1,-2);
11328 EXCEPTION
11329     WHEN NO_DATA_FOUND THEN
11330         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11331         FND_MESSAGE.SET_TOKEN( 'FK', 'primary_salesrep_id' );
11332         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11333         FND_MESSAGE.SET_TOKEN( 'TABLE', 'JTF_RS_SALESREPS' );
11334         FND_MSG_PUB.ADD;
11335         x_return_status := FND_API.G_RET_STS_ERROR;
11336 */
11337 x_return_status := FND_API.G_RET_STS_SUCCESS;
11338 END check_prim_salesrep;
11339 
11340 PROCEDURE check_ord_type(
11341         p_column                                IN     VARCHAR2,
11342         p_column_value                          IN     VARCHAR2,
11343         p_org_id                                IN     NUMBER,  -- Bug 3456489
11344         x_return_status                         IN OUT NOCOPY VARCHAR2
11345 ) IS
11346 
11347     l_dummy         varchar2(1);
11348 BEGIN
11349 
11350 /* Bug 3456489
11351      SELECT 'Y' INTO l_dummy
11352      FROM   OE_ORDER_TYPES_V ot
11353      WHERE ot.order_type_id = p_column_value
11354      AND   sysdate between nvl(ot.start_date_active,sysdate) and nvl(ot.end_date_active,sysdate);
11355 */
11356 /*
11357 show err;
11358 temporarily commenting this out as this table has not been created
11359         SELECT 'Y' INTO l_dummy
11360         FROM    OE_TRANSACTION_TYPES_ALL ot
11361         WHERE   ot.order_type_id = p_column_value
11362         AND     ot.transaction_type_code = 'ORDER'
11363         AND     ot.org_id = p_org_id
11364         AND     sysdate between nvl(ot.start_date_active,sysdate)
11365                 and nvl(ot.end_date_active,sysdate);
11366 
11367 EXCEPTION
11368     WHEN NO_DATA_FOUND THEN
11369         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11370         FND_MESSAGE.SET_TOKEN( 'FK', 'order_type_id' );
11371         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11372         FND_MESSAGE.SET_TOKEN( 'TABLE', 'OE_TRANSACTIONS_TYPES_VL' );
11373         FND_MSG_PUB.ADD;
11374         x_return_status := FND_API.G_RET_STS_ERROR;
11375 */
11376 x_return_status := FND_API.G_RET_STS_SUCCESS;
11377 END check_ord_type;
11378 
11379 PROCEDURE check_partial_mandatory_column (
11380     p_column                                IN     VARCHAR2,
11381     p_column_value                          IN     NUMBER,
11382     x_return_status                         IN OUT NOCOPY VARCHAR2
11383 ) IS
11384 
11385 BEGIN
11386 
11387     IF p_column_value = FND_API.G_MISS_NUM THEN
11388         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
11389         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11390         FND_MSG_PUB.ADD;
11391         x_return_status := FND_API.G_RET_STS_ERROR;
11392     END IF;
11393 
11394 END check_partial_mandatory_column;
11395 
11396 PROCEDURE check_partial_mandatory_column (
11397     p_column                                IN     VARCHAR2,
11398     p_column_value                          IN     VARCHAR2,
11399     x_return_status                         IN OUT NOCOPY VARCHAR2
11400 ) IS
11401 
11402 BEGIN
11403 
11404     IF p_column_value = FND_API.G_MISS_CHAR THEN
11405         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
11406         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11407         FND_MSG_PUB.ADD;
11408         x_return_status := FND_API.G_RET_STS_ERROR;
11409     END IF;
11410 
11411 END check_partial_mandatory_column;
11412 
11413 PROCEDURE validate_gl_id (
11414     p_gl_name                               IN     VARCHAR2,
11415     p_column_value                          IN     NUMBER,
11416     p_coa_id                                IN     NUMBER,  -- Bug 3456489
11417     x_return_status                         IN OUT NOCOPY VARCHAR2
11418 ) IS
11419 
11420 BEGIN
11421 
11422     IF p_column_value IS NOT NULL AND
11423        p_column_value <> FND_API.G_MISS_NUM
11424     THEN
11425         IF NOT FND_FLEX_KEYVAL.validate_ccid (
11426             appl_short_name               => 'SQLGL',
11427             key_flex_code                 => 'GL#',
11428          -- Bug 3456489
11429          -- structure_number              => ARP_GLOBAL.chart_of_accounts_id,
11430             structure_number              => p_coa_id,
11431             combination_id                => p_column_value )
11432         THEN
11433             FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_' ||
11434                 UPPER( p_gl_name ) || '_CCID_INVALID' );
11435             FND_MSG_PUB.ADD;
11436             x_return_status := FND_API.G_RET_STS_ERROR;
11437         END IF;
11438     END IF;
11439 
11440 END validate_gl_id;
11441 
11442 PROCEDURE check_auto_hierid_fk (
11443     p_column                                IN     VARCHAR2,
11444     p_column_value                          IN     NUMBER,
11445     x_return_status                         IN OUT NOCOPY VARCHAR2
11446 ) IS
11447 
11448     l_dummy                                 VARCHAR2(1);
11449 
11450 BEGIN
11451 
11452     SELECT 'Y' into l_dummy
11453         FROM   ar_autocash_hierarchies h
11454         WHERE  h.status = 'A'
11455         AND    h.autocash_hierarchy_id =
11456                p_column_value;
11457 EXCEPTION
11458     WHEN NO_DATA_FOUND THEN
11459         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11460         FND_MESSAGE.SET_TOKEN( 'FK', p_column );
11461         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11462         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_autocash_hierarchies');
11463         FND_MSG_PUB.ADD;
11464         x_return_status := FND_API.G_RET_STS_ERROR;
11465 
11466 END check_auto_hierid_fk;
11467 
11468 PROCEDURE check_stat_cycid_fk (
11469     p_column                                IN     VARCHAR2,
11470     p_column_value                          IN     NUMBER,
11471     x_return_status                         IN OUT NOCOPY VARCHAR2
11472 ) IS
11473 
11474     l_dummy                                 VARCHAR2(1);
11475 
11476 BEGIN
11477     SELECT 'Y' into l_dummy
11478         FROM   ar_statement_cycles sc
11479         WHERE  sc.status = 'A'
11480         AND    sc.statement_cycle_id =
11481                p_column_value;
11482 EXCEPTION
11483     WHEN NO_DATA_FOUND THEN
11484         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11485         FND_MESSAGE.SET_TOKEN( 'FK', 'statement_cycle_id' );
11486         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11487         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_statement_cycles');
11488         FND_MSG_PUB.ADD;
11489         x_return_status := FND_API.G_RET_STS_ERROR;
11490 
11491 END check_stat_cycid_fk;
11492 
11493 PROCEDURE check_dunning_letid_fk (
11494     p_column                                IN     VARCHAR2,
11495     p_column_value                          IN     NUMBER,
11496     x_return_status                         IN OUT NOCOPY VARCHAR2
11497 ) IS
11498 
11499     l_dummy                                 VARCHAR2(1);
11500 
11501 BEGIN
11502       SELECT 'Y' into l_dummy
11503         FROM   ar_dunning_letter_sets dls
11504         WHERE  dls.status = 'A'
11505         AND    dls.dunning_letter_set_id =
11506                p_column_value;
11507 EXCEPTION
11508     WHEN NO_DATA_FOUND THEN
11509         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11510         FND_MESSAGE.SET_TOKEN( 'FK', 'dunning_letter_set_id' );
11511         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11512         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_dunning_letter_sets');
11513         FND_MSG_PUB.ADD;
11514         x_return_status := FND_API.G_RET_STS_ERROR;
11515 
11516 END check_dunning_letid_fk;
11517 
11518 PROCEDURE check_standard_terms_fk (
11519     p_column                                IN     VARCHAR2,
11520     p_column_value                          IN     NUMBER,
11521     p_cons_inv_flag                         IN     VARCHAR2,
11522     p_ckeck_acc_bfb_enabled                 IN     VARCHAR2,
11523     x_return_status                         IN OUT NOCOPY VARCHAR2
11524 ) IS
11525 
11526     l_dummy                                 VARCHAR2(1);
11527 
11528 BEGIN
11529 
11530    -- Modified the below validation for Balance Forwarded Billing
11531    -- if cons_inv_flag = 'N' validate that the payment term is a non Balanace
11532    -- Forward billing payment term. If cons_inv_flag = 'Y' then,
11533    -- Validate that the payment term is a Balance Forward billing payment term.
11534    if p_cons_inv_flag = 'N' then
11535       begin
11536          SELECT 'Y'
11537          into  l_dummy
11538          from  ra_terms_b
11539          where term_id = p_column_value
11540 --         and   billing_cycle_id is null
11541          and   trunc(sysdate) between
11542                start_date_active and nvl(end_date_active,trunc(sysdate));
11543 
11544          EXCEPTION
11545          WHEN NO_DATA_FOUND THEN
11546            /* Modified the below error message setting for bug # 5529044
11547               Now we will look for any valid term_id if BFB is not enabled.
11548            -- If Balance Forward Billing is enabled for the site but disabled for the
11549            -- account. Pass a payment term without a balance forward billing cycle associated.
11550            if p_ckeck_acc_bfb_enabled = 'Y' then
11551               FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_BAL_FWD_DISABLED' );
11552            -- Balance forward billing has not been enabled.
11553            -- Pass a payment term without a balance forward billing cycle associated.
11554            else
11555               FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BAL_FWD_BILL_DISABLED' );
11556            end if;
11557            */
11558            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11559            FND_MESSAGE.SET_TOKEN( 'FK', 'standard_terms' );
11560            FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11561            FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_terms_b');
11562            FND_MSG_PUB.ADD;
11563            x_return_status := FND_API.G_RET_STS_ERROR;
11564       end;
11565    elsif p_cons_inv_flag = 'Y' then
11566       begin
11567          SELECT 'Y'
11568          into  l_dummy
11569          from  ra_terms_b t
11570          where t.term_id = p_column_value
11571          and   t.billing_cycle_id is not null
11572          and   trunc(sysdate) between
11573                t.start_date_active  and nvl(t.end_date_active,trunc(sysdate));
11574 
11575          EXCEPTION
11576          WHEN NO_DATA_FOUND THEN
11577            -- Balance forward billing has been enabled. Pass a payment term
11578            -- with a balance forward billing cycle associated.
11579            FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BAL_FWD_BILL_ENABLED' );
11580            FND_MSG_PUB.ADD;
11581            x_return_status := FND_API.G_RET_STS_ERROR;
11582       end;
11583    end if;
11584 
11585 /*
11586       SELECT   'Y' into l_dummy
11587         FROM     ra_terms t
11588         WHERE    trunc(sysdate)
11589         BETWEEN  t.start_date_active AND
11590                  nvl(t.end_date_active,trunc(sysdate))
11591         AND      t.term_id =
11592                  p_column_value;
11593 EXCEPTION
11594     WHEN NO_DATA_FOUND THEN
11595         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11596         FND_MESSAGE.SET_TOKEN( 'FK', 'standard_terms' );
11597         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11598         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_terms');
11599         FND_MSG_PUB.ADD;
11600         x_return_status := FND_API.G_RET_STS_ERROR;
11601 */
11602 END check_standard_terms_fk;
11603 
11604 PROCEDURE check_grouping_ruleid_fk (
11605     p_column                                IN     VARCHAR2,
11606     p_column_value                          IN     NUMBER,
11607     x_return_status                         IN OUT NOCOPY VARCHAR2
11608 ) IS
11609 
11610     l_dummy                                 VARCHAR2(1);
11611 
11612 BEGIN
11613      SELECT   'Y' into l_dummy
11614         FROM     ra_grouping_rules gr
11615         WHERE    trunc(sysdate)
11616         BETWEEN  gr.start_date AND
11617                  nvl(gr.end_date,trunc(sysdate))
11618         AND      gr.grouping_rule_id =
11619                  p_column_value;
11620 EXCEPTION
11621     WHEN NO_DATA_FOUND THEN
11622         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11623         FND_MESSAGE.SET_TOKEN( 'FK', 'grouping_rule_id' );
11624         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11625         FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_grouping_rules');
11626         FND_MSG_PUB.ADD;
11627         x_return_status := FND_API.G_RET_STS_ERROR;
11628 
11629 END check_grouping_ruleid_fk;
11630 
11631 PROCEDURE check_positive_value (
11632     p_column                                IN     VARCHAR2,
11633     p_column_value                          IN     NUMBER,
11634     x_return_status                         IN OUT NOCOPY VARCHAR2
11635 ) IS
11636 
11637 BEGIN
11638       IF p_column_value < 0 THEN
11639         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LESS_THAN_ZERO' );
11640         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11641         FND_MSG_PUB.ADD;
11642         x_return_status := FND_API.G_RET_STS_ERROR;
11643       END IF;
11644 
11645 END check_positive_value;
11646 
11647 PROCEDURE check_greater_than_zero (
11648     p_column                                IN     VARCHAR2,
11649     p_column_value                          IN     NUMBER,
11650     x_return_status                         IN OUT NOCOPY VARCHAR2
11651 ) IS
11652 
11653 BEGIN
11654       IF p_column_value <= 0 THEN
11655         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_GREATER_THAN_ZERO' );
11656         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11657         FND_MSG_PUB.ADD;
11658         x_return_status := FND_API.G_RET_STS_ERROR;
11659       END IF;
11660 
11661 END check_greater_than_zero;
11662 
11663 PROCEDURE check_less_than_100 (
11664     p_column                                IN     VARCHAR2,
11665     p_column_value                          IN     NUMBER,
11666     x_return_status                         IN OUT NOCOPY VARCHAR2
11667 ) IS
11668 
11669 BEGIN
11670       IF p_column_value > 100 THEN
11671         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_GREATER_THAN_100' );
11672         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11673         FND_MSG_PUB.ADD;
11674         x_return_status := FND_API.G_RET_STS_ERROR;
11675       END IF;
11676 
11677 END check_less_than_100;
11678 
11679 /**
11680  * PRIVATE PROCEDURE enable_debug
11681  *
11682  * DESCRIPTION
11683  *     Turn on debug mode.
11684  *
11685  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11686  *     HZ_UTILITY_V2PUB.enable_debug
11687  *
11688  * MODIFICATION HISTORY
11689  *
11690  *   07-23-2001    Jianying Huang      o Created.
11691  *
11692  */
11693 
11694 /*PROCEDURE enable_debug IS
11695 
11696 BEGIN
11697 
11698     G_DEBUG_COUNT := G_DEBUG_COUNT + 1;
11699 
11700     IF G_DEBUG_COUNT = 1 THEN
11701         IF FND_PROFILE.value( 'HZ_API_FILE_DEBUG_ON' ) = 'Y' OR
11702            FND_PROFILE.value( 'HZ_API_DBMS_DEBUG_ON' ) = 'Y'
11703         THEN
11704            HZ_UTILITY_V2PUB.enable_debug;
11705            G_DEBUG := TRUE;
11706         END IF;
11707     END IF;
11708 
11709 END enable_debug;
11710 */
11711 
11712 
11713 /**
11714  * PRIVATE PROCEDURE disable_debug
11715  *
11716  * DESCRIPTION
11717  *     Turn off debug mode.
11718  *
11719  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11720  *     HZ_UTILITY_V2PUB.disable_debug
11721  *
11722  * MODIFICATION HISTORY
11723  *
11724  *   07-23-2001    Jianying Huang      o Created.
11725  *
11726  */
11727 
11728 /*PROCEDURE disable_debug IS
11729 
11730 BEGIN
11731 
11732     IF G_DEBUG THEN
11733         G_DEBUG_COUNT := G_DEBUG_COUNT - 1;
11734 
11735         IF G_DEBUG_COUNT = 0 THEN
11736             HZ_UTILITY_V2PUB.disable_debug;
11737             G_DEBUG := FALSE;
11738         END IF;
11739     END IF;
11740 
11741 END disable_debug;
11742 */
11743 
11744 
11745 FUNCTION get_index (
11746     p_val                               IN     VARCHAR2
11747 ) RETURN BINARY_INTEGER IS
11748 
11749     l_table_index                       BINARY_INTEGER;
11750     l_found                             BOOLEAN := FALSE;
11751     l_hash_value                        NUMBER;
11752 
11753 BEGIN
11754 
11755     l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
11756 
11757     IF VAL_TAB.EXISTS(l_table_index) THEN
11758         IF VAL_TAB(l_table_index) = p_val THEN
11759             RETURN l_table_index;
11760         ELSE
11761             l_hash_value := l_table_index;
11762             l_table_index := l_table_index + 1;
11763             l_found := FALSE;
11764 
11765             WHILE ( l_table_index < TABLE_SIZE ) AND ( NOT l_found ) LOOP
11766                 IF VAL_TAB.EXISTS(l_table_index) THEN
11767                     IF VAL_TAB(l_table_index) = p_val THEN
11768                         l_found := TRUE;
11769                     ELSE
11770                         l_table_index := l_table_index + 1;
11771                     END IF;
11772                 ELSE
11773                     RETURN TABLE_SIZE + 1;
11774                 END IF;
11775             END LOOP;
11776 
11777             IF NOT l_found THEN  -- Didn't find any till the end
11778                 l_table_index := 1;  -- Start from the beginning
11779 
11780                 WHILE ( l_table_index < l_hash_value ) AND ( NOT l_found ) LOOP
11781                     IF VAL_TAB.EXISTS(l_table_index) THEN
11782                         IF VAL_TAB(l_table_index) = p_val THEN
11783                             l_found := TRUE;
11784                         ELSE
11785                             l_table_index := l_table_index + 1;
11786                         END IF;
11787                     ELSE
11788                         RETURN TABLE_SIZE + 1;
11789                     END IF;
11790                 END LOOP;
11791             END IF;
11792 
11793             IF NOT l_found THEN
11794                 RETURN TABLE_SIZE + 1;  -- Return a higher value
11795             END IF;
11796         END IF;
11797     ELSE
11798         RETURN TABLE_SIZE + 1;
11799     END IF;
11800 
11801     RETURN l_table_index;
11802 
11803 EXCEPTION
11804     WHEN OTHERS THEN  -- The entry doesn't exists
11805         RETURN TABLE_SIZE + 1;
11806 
11807 END get_index;
11808 
11809 PROCEDURE put (
11810     p_val                               IN     VARCHAR2
11811 ) IS
11812 
11813     l_table_index                       BINARY_INTEGER;
11814     l_stored                            BOOLEAN := FALSE;
11815     l_hash_value                        NUMBER;
11816 
11817 BEGIN
11818 
11819     l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
11820 
11821     IF VAL_TAB.EXISTS(l_table_index) THEN
11822         IF VAL_TAB(l_table_index) <> p_val THEN --Collision
11823             l_hash_value := l_table_index;
11824             l_table_index := l_table_index + 1;
11825 
11826             WHILE (l_table_index < TABLE_SIZE) AND (NOT l_stored) LOOP
11827                 IF VAL_TAB.EXISTS(l_table_index) THEN
11828                     IF VAL_TAB(l_table_index) <> p_val THEN
11829                         l_table_index := l_table_index + 1;
11830                     END IF;
11831                 ELSE
11832                     VAL_TAB(l_table_index) := p_val;
11833                     l_stored := TRUE;
11834                 END IF;
11835             END LOOP;
11836 
11837             IF NOT l_stored THEN --Didn't find any free bucket till the end
11838                 l_table_index := 1;
11839 
11840                 WHILE (l_table_index < l_hash_value) AND (NOT l_stored) LOOP
11841                     IF VAL_TAB.EXISTS(l_table_index) THEN
11842                         IF VAL_TAB(l_table_index) <> p_val THEN
11843                             l_table_index := l_table_index + 1;
11844                         END IF;
11845                     ELSE
11846                         VAL_TAB(l_table_index) := p_val;
11847                         l_stored := TRUE;
11848                     END IF;
11849                 END LOOP;
11850             END IF;
11851 
11852         END IF;
11853     ELSE
11854         VAL_TAB(l_table_index) := p_val;
11855     END IF;
11856 
11857 EXCEPTION
11858     WHEN OTHERS THEN
11859         NULL;
11860 
11861 END put;
11862 
11863 FUNCTION search (
11864     p_val                               IN     VARCHAR2,
11865     p_category                          IN     VARCHAR2
11866 ) RETURN BOOLEAN IS
11867 
11868     l_table_index                       BINARY_INTEGER;
11869     l_return                            BOOLEAN;
11870 
11871     l_dummy                             VARCHAR2(1);
11872     l_position1                         NUMBER;
11873     l_position2                         NUMBER;
11874 
11875     l_lookup_table                      VARCHAR2(30);
11876     l_lookup_type                       AR_LOOKUPS.lookup_type%TYPE;
11877     l_lookup_code                       AR_LOOKUPS.lookup_code%TYPE;
11878 
11879 BEGIN
11880 
11881     -- search for the value
11882     l_table_index := get_index( p_val || G_SPECIAL_STRING || p_category );
11883 
11884     IF l_table_index < table_size THEN
11885          l_return := TRUE;
11886     ELSE
11887         --Can't find the value in the table; look in the database
11888         IF p_category = 'LOOKUP' THEN
11889 
11890             l_position1 := INSTRB( p_val, G_SPECIAL_STRING, 1, 1 );
11891             l_lookup_table := SUBSTRB( p_val, 1, l_position1 - 1 );
11892             l_position2 := INSTRB( p_val, G_SPECIAL_STRING, 1, 2 );
11893             l_lookup_type := SUBSTRB( p_val, l_position1 + G_LENGTH,
11894                                      l_position2  - l_position1 - G_LENGTH );
11895             l_lookup_code := SUBSTRB( p_val, l_position2 + G_LENGTH );
11896 
11897             IF UPPER( l_lookup_table ) = 'AR_LOOKUPS' THEN
11898             BEGIN
11899                 SELECT 'Y' INTO l_dummy
11900                 FROM   AR_LOOKUPS
11901                 WHERE  LOOKUP_TYPE = l_lookup_type
11902                 AND    LOOKUP_CODE = l_lookup_code
11903                 AND    ( ENABLED_FLAG = 'Y' AND
11904                          TRUNC( SYSDATE ) BETWEEN
11905                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11906                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
11907 
11908                 l_return := TRUE;
11909             EXCEPTION
11910                 WHEN NO_DATA_FOUND THEN
11911                     l_return := FALSE;
11912             END;
11913             ELSIF UPPER( l_lookup_table ) = 'SO_LOOKUPS' THEN
11914             BEGIN
11915                 SELECT 'Y' INTO l_dummy
11916                 FROM   SO_LOOKUPS
11917                 WHERE  LOOKUP_TYPE = l_lookup_type
11918                 AND    LOOKUP_CODE = l_lookup_code
11919                 AND    ( ENABLED_FLAG = 'Y' AND
11920                          TRUNC( SYSDATE ) BETWEEN
11921                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11922                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
11923 
11924                 l_return := TRUE;
11925             EXCEPTION
11926                 WHEN NO_DATA_FOUND THEN
11927                     l_return := FALSE;
11928             END;
11929             ELSIF UPPER( l_lookup_table ) = 'OE_SHIP_METHODS_V' THEN
11930             BEGIN
11931                 SELECT 'Y' INTO l_dummy
11932                 FROM   OE_SHIP_METHODS_V
11933                 WHERE  LOOKUP_TYPE = l_lookup_type
11934                 AND    LOOKUP_CODE = l_lookup_code
11935                 AND    ( ENABLED_FLAG = 'Y' AND
11936                          TRUNC( SYSDATE ) BETWEEN
11937                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11938                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
11939                 AND    ROWNUM = 1;
11940 
11941                 l_return := TRUE;
11942             EXCEPTION
11943                 WHEN NO_DATA_FOUND THEN
11944                     l_return := FALSE;
11945             END;
11946             ELSIF UPPER( l_lookup_table ) = 'OE_LOOKUPS' THEN
11947             BEGIN
11948                 SELECT 'Y' INTO l_dummy
11949                 FROM   OE_LOOKUPS
11950                 WHERE  LOOKUP_TYPE = l_lookup_type
11951                 AND    LOOKUP_CODE = l_lookup_code
11952                 AND    ( ENABLED_FLAG = 'Y' AND
11953                          TRUNC( SYSDATE ) BETWEEN
11954                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11955                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
11956                 AND    ROWNUM = 1;
11957 
11958                 l_return := TRUE;
11959             EXCEPTION
11960                 WHEN NO_DATA_FOUND THEN
11961                     l_return := FALSE;
11962             END;
11963             ELSIF UPPER( l_lookup_table ) = 'FND_COMMON_LOOKUPS' THEN
11964             BEGIN
11965                 SELECT 'Y' INTO l_dummy
11966                 FROM   FND_COMMON_LOOKUPS
11967                 WHERE  LOOKUP_TYPE = l_lookup_type
11968                 AND    LOOKUP_CODE = l_lookup_code
11969                 AND    ( ENABLED_FLAG = 'Y' AND
11970                          TRUNC( SYSDATE ) BETWEEN
11971                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11972                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
11973                 AND    ROWNUM = 1;
11974 
11975                 l_return := TRUE;
11976             EXCEPTION
11977                 WHEN NO_DATA_FOUND THEN
11978                     l_return := FALSE;
11979             END;
11980             ELSIF UPPER( l_lookup_table ) = 'FND_LOOKUP_VALUES' THEN
11981             BEGIN
11982                 SELECT 'Y' INTO l_dummy
11983                 FROM   FND_LOOKUP_VALUES
11984                 WHERE  LOOKUP_TYPE = l_lookup_type
11985                 AND    LOOKUP_CODE = l_lookup_code
11986                 AND    ( ENABLED_FLAG = 'Y' AND
11987                          TRUNC( SYSDATE ) BETWEEN
11988                          TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11989                          TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
11990                 AND    ROWNUM = 1;
11991 
11992                 l_return := TRUE;
11993             EXCEPTION
11994                 WHEN NO_DATA_FOUND THEN
11995                     l_return := FALSE;
11996             END;
11997             ELSE
11998                 l_return := FALSE;
11999             END IF;
12000         END IF;
12001 
12002         --Cache the value
12003         IF l_return THEN
12004            put( p_val || G_SPECIAL_STRING || p_category );
12005         END IF;
12006     END IF;
12007 
12008     RETURN l_return;
12009 
12010 END search;
12011 
12012 PROCEDURE validate_mandatory (
12013     p_create_update_flag                    IN     VARCHAR2,
12014     p_column                                IN     VARCHAR2,
12015     p_column_value                          IN     VARCHAR2,
12016     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
12017     x_return_status                         IN OUT NOCOPY VARCHAR2
12018 ) IS
12019 
12020     l_error                                 BOOLEAN := FALSE;
12021 
12022 BEGIN
12023 
12024     IF p_restricted = 'N' THEN
12025         IF ( p_create_update_flag = 'C' AND
12026              ( p_column_value IS NULL OR
12027                p_column_value = FND_API.G_MISS_CHAR ) ) OR
12028            ( p_create_update_flag = 'U' AND
12029              p_column_value = FND_API.G_MISS_CHAR )
12030         THEN
12031             l_error := TRUE;
12032         END IF;
12033     ELSE
12034         IF ( p_column_value IS NULL OR
12035              p_column_value = FND_API.G_MISS_CHAR )
12036         THEN
12037             l_error := TRUE;
12038         END IF;
12039     END IF;
12040 
12041     IF l_error THEN
12042         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12043         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12044         FND_MSG_PUB.ADD;
12045         x_return_status := FND_API.G_RET_STS_ERROR;
12046     END IF;
12047 
12048 END validate_mandatory;
12049 
12050 PROCEDURE validate_mandatory (
12051     p_create_update_flag                    IN     VARCHAR2,
12052     p_column                                IN     VARCHAR2,
12053     p_column_value                          IN     NUMBER,
12054     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
12055     x_return_status                         IN OUT NOCOPY VARCHAR2
12056 ) IS
12057 
12058     l_error                                 BOOLEAN := FALSE;
12059 
12060 BEGIN
12061 
12062     IF p_restricted = 'N' THEN
12063         IF ( p_create_update_flag = 'C' AND
12064              ( p_column_value IS NULL OR
12065                p_column_value = FND_API.G_MISS_NUM ) ) OR
12066            ( p_create_update_flag = 'U' AND
12067              p_column_value = FND_API.G_MISS_NUM )
12068         THEN
12069             l_error := TRUE;
12070         END IF;
12071     ELSE
12072         IF ( p_column_value IS NULL OR
12073              p_column_value = FND_API.G_MISS_NUM )
12074         THEN
12075             l_error := TRUE;
12076         END IF;
12077     END IF;
12078 
12079     IF l_error THEN
12080         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12081         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12082         FND_MSG_PUB.ADD;
12083         x_return_status := FND_API.G_RET_STS_ERROR;
12084     END IF;
12085 
12086 END validate_mandatory;
12087 
12088 PROCEDURE validate_mandatory (
12089     p_create_update_flag                    IN     VARCHAR2,
12090     p_column                                IN     VARCHAR2,
12091     p_column_value                          IN     DATE,
12092     p_restricted                            IN     VARCHAR2 DEFAULT 'N',
12093     x_return_status                         IN OUT NOCOPY VARCHAR2
12094 ) IS
12095 
12096     l_error                                 BOOLEAN := FALSE;
12097 
12098 BEGIN
12099 
12100     IF p_restricted = 'N' THEN
12101         IF ( p_create_update_flag = 'C' AND
12102              ( p_column_value IS NULL OR
12103                p_column_value = FND_API.G_MISS_DATE ) ) OR
12104            ( p_create_update_flag = 'U' AND
12105              p_column_value = FND_API.G_MISS_DATE )
12106         THEN
12107             l_error := TRUE;
12108         END IF;
12109     ELSE
12110         IF ( p_column_value IS NULL OR
12111              p_column_value = FND_API.G_MISS_DATE )
12112         THEN
12113             l_error := TRUE;
12114         END IF;
12115     END IF;
12116 
12117     IF l_error THEN
12118         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12119         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12120         FND_MSG_PUB.ADD;
12121         x_return_status := FND_API.G_RET_STS_ERROR;
12122     END IF;
12123 
12124 END validate_mandatory;
12125 
12126 PROCEDURE validate_nonupdateable (
12127     p_column                                IN     VARCHAR2,
12128     p_column_value                          IN     VARCHAR2,
12129     p_old_column_value                      IN     VARCHAR2,
12130     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
12131     x_return_status                         IN OUT NOCOPY VARCHAR2
12132 ) IS
12133 
12134     l_error                                 BOOLEAN := FALSE;
12135 
12136 BEGIN
12137 
12138     IF p_column_value IS NOT NULL THEN
12139         IF p_restricted = 'Y' THEN
12140             IF ( p_column_value <> FND_API.G_MISS_CHAR OR
12141                  p_old_column_value IS NOT NULL ) AND
12142                ( p_old_column_value IS NULL OR
12143                  p_column_value <> p_old_column_value )
12144             THEN
12145                l_error := TRUE;
12146             END IF;
12147         ELSE
12148             IF (p_old_column_value IS NOT NULL AND       -- Bug 3439053.
12149                 p_old_column_value <> FND_API.G_MISS_CHAR)
12150                AND
12151                ( p_column_value = FND_API.G_MISS_CHAR OR
12152                  p_column_value <> p_old_column_value )
12153             THEN
12154                l_error := TRUE;
12155             END IF;
12156         END IF;
12157     END IF;
12158 
12159     IF l_error THEN
12160         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12161         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12162         FND_MSG_PUB.ADD;
12163         x_return_status := FND_API.G_RET_STS_ERROR;
12164     END IF;
12165 
12166 END validate_nonupdateable;
12167 
12168 PROCEDURE validate_nonupdateable (
12169     p_column                                IN     VARCHAR2,
12170     p_column_value                          IN     NUMBER,
12171     p_old_column_value                      IN     NUMBER,
12172     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
12173     x_return_status                         IN OUT NOCOPY VARCHAR2
12174 ) IS
12175 
12176     l_error                                 BOOLEAN := FALSE;
12177 
12178 BEGIN
12179 
12180     IF p_column_value IS NOT NULL THEN
12181         IF p_restricted = 'Y' THEN
12182             IF ( p_column_value <> FND_API.G_MISS_NUM OR
12183                  p_old_column_value IS NOT NULL ) AND
12184                ( p_old_column_value IS NULL OR
12185                  p_column_value <> p_old_column_value )
12186             THEN
12187                l_error := TRUE;
12188             END IF;
12189         ELSE
12190             IF (p_old_column_value IS NOT NULL AND          -- Bug 3439053
12191                 p_old_column_value <> FND_API.G_MISS_NUM)
12192                 AND
12193                ( p_column_value = FND_API.G_MISS_NUM OR
12194                  p_column_value <> p_old_column_value )
12195             THEN
12196                l_error := TRUE;
12197             END IF;
12198         END IF;
12199     END IF;
12200 
12201     IF l_error THEN
12202         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12203         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12204         FND_MSG_PUB.ADD;
12205         x_return_status := FND_API.G_RET_STS_ERROR;
12206     END IF;
12207 
12208 END validate_nonupdateable;
12209 
12210 PROCEDURE validate_nonupdateable (
12211     p_column                                IN     VARCHAR2,
12212     p_column_value                          IN     DATE,
12213     p_old_column_value                      IN     DATE,
12214     p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
12215     x_return_status                         IN OUT NOCOPY VARCHAR2
12216 ) IS
12217 
12218     l_error                                 BOOLEAN := FALSE;
12219 
12220 BEGIN
12221 
12222     IF p_column_value IS NOT NULL THEN
12223         IF p_restricted = 'Y' THEN
12224             IF ( p_column_value <> FND_API.G_MISS_DATE OR
12225                  p_old_column_value IS NOT NULL ) AND
12226                ( p_old_column_value IS NULL OR
12227                  p_column_value <> p_old_column_value )
12228             THEN
12229                l_error := TRUE;
12230             END IF;
12231         ELSE
12232             IF (p_old_column_value IS NOT NULL AND       -- Bug 3439053
12233                 p_old_column_value <> FND_API.G_MISS_DATE)
12234                 AND
12235                ( p_column_value = FND_API.G_MISS_DATE OR
12236                  p_column_value <> p_old_column_value )
12237             THEN
12238                l_error := TRUE;
12239             END IF;
12240         END IF;
12241     END IF;
12242 
12243     IF l_error THEN
12244         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12245         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12246         FND_MSG_PUB.ADD;
12247         x_return_status := FND_API.G_RET_STS_ERROR;
12248     END IF;
12249 
12250 END validate_nonupdateable;
12251 
12252 PROCEDURE validate_start_end_date (
12253     p_create_update_flag                    IN     VARCHAR2,
12254     p_start_date_column_name                IN     VARCHAR2,
12255     p_start_date                            IN     DATE,
12256     p_old_start_date                        IN     DATE,
12257     p_end_date_column_name                  IN     VARCHAR2,
12258     p_end_date                              IN     DATE,
12259     p_old_end_date                          IN     DATE,
12260     x_return_status                         IN OUT NOCOPY VARCHAR2
12261 ) IS
12262 
12263     l_start_date                            DATE := p_old_start_date;
12264     l_end_date                              DATE := p_old_end_date;
12265 
12266 BEGIN
12267 
12268     IF p_create_update_flag = 'C' THEN
12269         l_start_date := p_start_date;
12270         l_end_date := p_end_date;
12271     ELSIF p_create_update_flag = 'U' THEN
12272         IF p_start_date IS NOT NULL
12273         THEN
12274             IF p_start_date = FND_API.G_MISS_DATE THEN
12275                 l_start_date := NULL;
12276             ELSE
12277                 l_start_date := p_start_date;
12278             END IF;
12279         END IF;
12280 
12281         IF p_end_date IS NOT NULL
12282         THEN
12283             IF p_end_date = FND_API.G_MISS_DATE THEN
12284                 l_end_date := NULL;
12285             ELSE
12286                 l_end_date := p_end_date;
12287             END IF;
12288         END IF;
12289     END IF;
12290 
12291     IF l_end_date IS NOT NULL AND
12292        l_end_date <> FND_API.G_MISS_DATE AND
12293        ( l_start_date IS NULL OR
12294          l_start_date = FND_API.G_MISS_DATE OR
12295          l_start_date > l_end_date )
12296     THEN
12297         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DATE_GREATER' );
12298         FND_MESSAGE.SET_TOKEN( 'DATE2', p_end_date_column_name );
12299         FND_MESSAGE.SET_TOKEN( 'DATE1', p_start_date_column_name );
12300         FND_MSG_PUB.ADD;
12301         x_return_status := FND_API.G_RET_STS_ERROR;
12302     END IF;
12303 
12304 END validate_start_end_date;
12305 
12306 PROCEDURE validate_cannot_update_to_null (
12307     p_column                                IN     VARCHAR2,
12308     p_column_value                          IN     VARCHAR2,
12309     x_return_status                         IN OUT NOCOPY VARCHAR2
12310 ) IS
12311 
12312 BEGIN
12313 
12314     IF p_column_value = FND_API.G_MISS_CHAR THEN
12315         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12316         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12317         FND_MSG_PUB.ADD;
12318         x_return_status := FND_API.G_RET_STS_ERROR;
12319     END IF;
12320 
12321 END validate_cannot_update_to_null;
12322 
12323 PROCEDURE validate_cannot_update_to_null (
12324     p_column                                IN     VARCHAR2,
12325     p_column_value                          IN     NUMBER,
12326     x_return_status                         IN OUT NOCOPY VARCHAR2
12327 ) IS
12328 
12329 BEGIN
12330 
12331     IF p_column_value = FND_API.G_MISS_NUM THEN
12332         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12333         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12334         FND_MSG_PUB.ADD;
12335         x_return_status := FND_API.G_RET_STS_ERROR;
12336     END IF;
12337 
12338 END validate_cannot_update_to_null;
12339 
12340 PROCEDURE validate_cannot_update_to_null (
12341     p_column                                IN     VARCHAR2,
12342     p_column_value                          IN     DATE,
12343     x_return_status                         IN OUT NOCOPY VARCHAR2
12344 ) IS
12345 
12346 BEGIN
12347 
12348     IF p_column_value = FND_API.G_MISS_DATE THEN
12349         FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12350         FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12351         FND_MSG_PUB.ADD;
12352         x_return_status := FND_API.G_RET_STS_ERROR;
12353     END IF;
12354 
12355 END validate_cannot_update_to_null;
12356 
12357 PROCEDURE validate_lookup (
12358     p_column                                IN     VARCHAR2,
12359     p_lookup_table                          IN     VARCHAR2 DEFAULT 'AR_LOOKUPS',
12360     p_lookup_type                           IN     VARCHAR2,
12361     p_column_value                          IN     VARCHAR2,
12362     x_return_status                         IN OUT NOCOPY VARCHAR2
12363 ) IS
12364 
12365     l_error                                 BOOLEAN := FALSE;
12366 
12367 BEGIN
12368 
12369     IF p_column_value IS NOT NULL AND
12370        p_column_value <> FND_API.G_MISS_CHAR THEN
12371 
12372         IF p_lookup_type = 'YES/NO' THEN
12373             IF p_column_value NOT IN ('Y', 'N') THEN
12374                 l_error := TRUE;
12375             END IF;
12376         ELSE
12377             IF NOT search(p_lookup_table || G_SPECIAL_STRING ||
12378                           p_lookup_type || G_SPECIAL_STRING || p_column_value,
12379                           'LOOKUP' )
12380             THEN
12381                 l_error := TRUE;
12382             END IF;
12383         END IF;
12384 
12385         IF l_error THEN
12386             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_LOOKUP' );
12387             FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12388             FND_MESSAGE.SET_TOKEN( 'LOOKUP_TYPE', p_lookup_type );
12389             FND_MSG_PUB.ADD;
12390             x_return_status := FND_API.G_RET_STS_ERROR;
12391         END IF;
12392     END IF;
12393 
12394 END validate_lookup;
12395 
12396 
12397 /**
12398  * PROCEDURE validate_created_by_module
12399  *
12400  * DESCRIPTION
12401  *    validate created by module
12402  * ARGUMENTS
12403  *   IN:
12404  *     p_create_update_flag      create update flag
12405  *     p_created_by_module       created by module
12406  *     p_old_created_by_module   old value of created by module
12407  *     x_return_status           return status
12408  */
12409 
12410 PROCEDURE validate_created_by_module (
12411     p_create_update_flag          IN     VARCHAR2,
12412     p_created_by_module           IN     VARCHAR2,
12413     p_old_created_by_module       IN     VARCHAR2,
12414     x_return_status               IN OUT NOCOPY VARCHAR2
12415 ) IS
12416 
12417     l_column                      CONSTANT VARCHAR2(30) := 'created_by_module';
12418 
12419 BEGIN
12420 
12421     -- skip mandatory and non-updateable check from logical API
12422     IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
12423       -- created_by_module is mandatory field
12424       -- Since created_by_module is non-updateable, we only need to check mandatory
12425       -- during creation.
12426 
12427       IF p_create_update_flag = 'C' THEN
12428         validate_mandatory (
12429           p_create_update_flag     => p_create_update_flag,
12433 
12430           p_column                 => l_column,
12431           p_column_value           => p_created_by_module,
12432           x_return_status          => x_return_status);
12434         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12435           hz_utility_v2pub.debug(
12436             p_prefix               => '',
12437             p_message              => l_column || ' is mandatory. ' ||
12438                                       'x_return_status = ' || x_return_status,
12439             p_msg_level            => fnd_log.level_statement);
12440         END IF;
12441       END IF;
12442 
12443       -- created_by_module is non-updateable field. But it can be updated from
12444       -- NULL to some value.
12445 
12446       IF p_create_update_flag = 'U' AND
12447          p_created_by_module IS NOT NULL
12448       THEN
12449         validate_nonupdateable (
12450           p_column                 => l_column,
12451           p_column_value           => p_created_by_module,
12452           p_old_column_value       => p_old_created_by_module,
12453           p_restricted             => 'N',
12454           x_return_status          => x_return_status);
12455 
12456         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12457           hz_utility_v2pub.debug(
12458             p_prefix               => '',
12459             p_message              => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
12460                                       'x_return_status = ' || x_return_status,
12461             p_msg_level            => fnd_log.level_statement);
12462         END IF;
12463       END IF;
12464     END IF;
12465 
12466     -- created_by_module is lookup code in lookup type HZ_CREATED_BY_MODULES
12467     IF p_created_by_module IS NOT NULL AND
12468        p_created_by_module <> fnd_api.g_miss_char AND
12469        (p_create_update_flag = 'C' OR
12470         (p_create_update_flag = 'U' AND
12471          (p_old_created_by_module IS NULL OR
12472           p_created_by_module <> p_old_created_by_module)))
12473     THEN
12474       validate_lookup (
12475         p_column                   => l_column,
12476         p_lookup_type              => 'HZ_CREATED_BY_MODULES',
12477         p_column_value             => p_created_by_module,
12478         x_return_status            => x_return_status);
12479 
12480       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12481         hz_utility_v2pub.debug(
12482           p_prefix                 => '',
12483           p_message                => l_column || ' is lookup code in lookup type HZ_CREATED_BY_MODULES. ' ||
12484                                       'x_return_status = ' || x_return_status,
12485           p_msg_level              => fnd_log.level_statement);
12486       END IF;
12487     END IF;
12488 
12489     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12490       hz_utility_v2pub.debug(
12491         p_prefix                   => '',
12492         p_message                  => 'after validate ' || l_column || ' ... ' ||
12493                                       'x_return_status = ' || x_return_status,
12494         p_msg_level                => fnd_log.level_statement);
12495     END IF;
12496 
12497 END validate_created_by_module;
12498 
12499 
12500 /**
12501  * PROCEDURE validate_application_id
12502  *
12503  * DESCRIPTION
12504  *    validate application id
12505  * ARGUMENTS
12506  *   IN:
12507  *     p_create_update_flag      create update flag
12508  *     p_application_id          application id
12509  *     p_old_application_id      old value of application id
12510  *     x_return_status           return status
12511  */
12512 
12513 PROCEDURE validate_application_id (
12514     p_create_update_flag          IN     VARCHAR2,
12515     p_application_id              IN     NUMBER,
12516     p_old_application_id          IN     NUMBER,
12517     x_return_status               IN OUT NOCOPY VARCHAR2
12518 ) IS
12519 
12520     l_column                      CONSTANT VARCHAR2(30) := 'application_id';
12521 
12522 BEGIN
12523 
12524     -- skip non-updateable check from logical API
12525     IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
12526       -- application_id is non-updateable field. But it can be updated from NULL
12527       -- to some value.
12528 
12529       IF p_create_update_flag = 'U' AND
12530          p_application_id IS NOT NULL
12531       THEN
12532         validate_nonupdateable (
12533           p_column                 => l_column,
12534           p_column_value           => p_application_id,
12535           p_old_column_value       => p_old_application_id,
12536           p_restricted             => 'N',
12537           x_return_status          => x_return_status);
12538 
12539         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12540           hz_utility_v2pub.debug(
12541             p_prefix               => '',
12542             p_message              => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
12543                                       'x_return_status = ' || x_return_status,
12544             p_msg_level            => fnd_log.level_statement);
12545         END IF;
12546       END IF;
12547     END IF;
12548 
12549     IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12550       hz_utility_v2pub.debug(
12551         p_prefix                   => '',
12552         p_message                  => 'after validate ' || l_column || ' ... ' ||
12553                                       'x_return_status = ' || x_return_status,
12554         p_msg_level                => fnd_log.level_statement);
12555     END IF;
12556 
12557 END validate_application_id;
12558 
12559 PROCEDURE validate_bill_level (
12560     p_create_update_flag                    IN     VARCHAR2,
12561     p_customer_profile_rec                  IN     HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
12562     x_return_status                         IN OUT NOCOPY VARCHAR2
12563 ) IS
12564 
12565     l_profile_class_rec                     HZ_CUST_PROFILE_CLASSES%ROWTYPE;
12566     l_error                                 BOOLEAN := FALSE;
12567 
12568     l_bill_level_count number;
12569     l_bill_type_count  number;
12570 
12571 BEGIN
12572 
12573    -- if cons_inv_flag is 'Y', do all validations
12574    if p_customer_profile_rec.cons_inv_flag = 'Y' then
12575       -- If Balance Forward billing is enabled,
12576       -- Bill Level and Type should have valid not null values
12577       if (p_customer_profile_rec.cons_bill_level IS NULL
12578           OR p_customer_profile_rec.cons_inv_type IS NULL) then
12579          FND_MESSAGE.SET_NAME('AR', 'HZ_API_BILL_LVL_TYPE_INVALID');
12580          FND_MSG_PUB.ADD;
12581          x_return_status := FND_API.G_RET_STS_ERROR;
12582       else
12583          if p_customer_profile_rec.cons_bill_level IS NOT NULL then
12584             SELECT COUNT(*)
12585             INTO  l_bill_level_count
12586             FROM  ar_lookups
12587             WHERE lookup_type = 'HZ_CONS_BILL_LEVEL'
12588             AND   lookup_code = p_customer_profile_rec.cons_bill_level
12589             AND   TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12590             AND   enabled_flag = 'Y';
12591 
12592             IF (l_bill_level_count = 0) THEN
12593                FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_BILL_LEVEL');
12594                FND_MSG_PUB.ADD;
12595                x_return_status := FND_API.G_RET_STS_ERROR;
12596             END IF;
12597          end if;
12598       end if;
12599 
12600       -- For Account use bill level, use Summary or Detail as bill type.
12601       if p_customer_profile_rec.cons_bill_level = 'ACCOUNT' THEN
12602          SELECT COUNT(*)
12603          INTO  l_bill_type_count
12604          FROM  ar_lookups
12605          WHERE lookup_type = 'HZ_CONS_INV_TYPE'
12606          AND   lookup_code = p_customer_profile_rec.cons_inv_type
12607          AND   TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12608          AND   enabled_flag = 'Y'
12609          AND   lookup_code <> 'IMPORTED';
12610 
12611          IF (l_bill_TYPE_count = 0) THEN
12612             FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ACCT_BILL_TYPE');
12613             FND_MSG_PUB.ADD;
12614             x_return_status := FND_API.G_RET_STS_ERROR;
12615          END IF;
12616       -- For Site use bill level, use Summary, Detail, or Imported as bill type.
12617       else
12618          SELECT COUNT(*)
12619          INTO  l_bill_type_count
12620          FROM  ar_lookups
12621          WHERE lookup_type = 'HZ_CONS_INV_TYPE'
12622          AND   lookup_code = p_customer_profile_rec.cons_inv_type
12623          AND   TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12624          AND   enabled_flag = 'Y';
12625 
12626          IF (l_bill_TYPE_count = 0) THEN
12627             FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ACCT_BILL_TYPE');
12628             FND_MSG_PUB.ADD;
12629             x_return_status := FND_API.G_RET_STS_ERROR;
12630          END IF;
12631       end if;
12632    end if;
12633 END validate_bill_level;
12634 
12635 END HZ_ACCOUNT_VALIDATE_V2PUB;