1 PACKAGE BODY HZ_ACCOUNT_VALIDATE_V2PUB AS
2 /*$Header: ARH2ACVB.pls 120.78 2011/12/22 17:41:21 rgokavar ship $ */
3
4 --------------------------------------
5 -- declaration of private global varibles
6 --------------------------------------
7
8 G_DEBUG_COUNT NUMBER := 0;
9 --G_DEBUG BOOLEAN := FALSE;
10
11 G_SPECIAL_STRING CONSTANT VARCHAR2(4):= '%#@*';
12 G_LENGTH CONSTANT NUMBER := LENGTHB( G_SPECIAL_STRING );
13
14 TYPE VAL_TAB_TYPE IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
15
16 --------------------------------------
17 -- define the internal table that will cache values
18 --------------------------------------
19
20 VAL_TAB VAL_TAB_TYPE; -- the table of values
21 TABLE_SIZE BINARY_INTEGER := 2048; -- the size of above tables
22
23 --------------------------------------
24 -- declaration of private procedures and functions
25 --------------------------------------
26
27 /*PROCEDURE enable_debug;
28
29 PROCEDURE disable_debug;
30 */
31
32
33 FUNCTION get_index (
34 p_val IN VARCHAR2
35 ) RETURN BINARY_INTEGER;
36
37 PROCEDURE put (
38 p_val IN VARCHAR2
39 );
40
41 FUNCTION search (
42 p_val IN VARCHAR2,
43 p_category IN VARCHAR2
44 ) RETURN BOOLEAN;
45
46 PROCEDURE validate_mandatory (
47 p_create_update_flag IN VARCHAR2,
48 p_column IN VARCHAR2,
49 p_column_value IN VARCHAR2,
50 p_restricted IN VARCHAR2 DEFAULT 'N',
51 x_return_status IN OUT NOCOPY VARCHAR2
52 );
53
54 PROCEDURE validate_mandatory (
55 p_create_update_flag IN VARCHAR2,
56 p_column IN VARCHAR2,
57 p_column_value IN NUMBER,
58 p_restricted IN VARCHAR2 DEFAULT 'N',
59 x_return_status IN OUT NOCOPY VARCHAR2
60 );
61
62 PROCEDURE validate_mandatory (
63 p_create_update_flag IN VARCHAR2,
64 p_column IN VARCHAR2,
65 p_column_value IN DATE,
66 p_restricted IN VARCHAR2 DEFAULT 'N',
67 x_return_status IN OUT NOCOPY VARCHAR2
68 );
69
70 PROCEDURE validate_nonupdateable (
71 p_column IN VARCHAR2,
72 p_column_value IN VARCHAR2,
73 p_old_column_value IN VARCHAR2,
74 p_restricted IN VARCHAR2 DEFAULT 'Y',
75 x_return_status IN OUT NOCOPY VARCHAR2
76 );
77
78 PROCEDURE validate_nonupdateable (
79 p_column IN VARCHAR2,
80 p_column_value IN NUMBER,
81 p_old_column_value IN NUMBER,
82 p_restricted IN VARCHAR2 DEFAULT 'Y',
83 x_return_status IN OUT NOCOPY VARCHAR2
84 );
85
86 PROCEDURE validate_nonupdateable (
87 p_column IN VARCHAR2,
88 p_column_value IN DATE,
89 p_old_column_value IN DATE,
90 p_restricted IN VARCHAR2 DEFAULT 'Y',
91 x_return_status IN OUT NOCOPY VARCHAR2
92 );
93
94 PROCEDURE validate_start_end_date (
95 p_create_update_flag IN VARCHAR2,
96 p_start_date_column_name IN VARCHAR2,
97 p_start_date IN DATE,
98 p_old_start_date IN DATE,
99 p_end_date_column_name IN VARCHAR2,
100 p_end_date IN DATE,
101 p_old_end_date IN DATE,
102 x_return_status IN OUT NOCOPY VARCHAR2
103 );
104
105 PROCEDURE validate_cannot_update_to_null (
106 p_column IN VARCHAR2,
107 p_column_value IN VARCHAR2,
108 x_return_status IN OUT NOCOPY VARCHAR2
109 );
110
111 PROCEDURE validate_cannot_update_to_null (
112 p_column IN VARCHAR2,
113 p_column_value IN NUMBER,
114 x_return_status IN OUT NOCOPY VARCHAR2
115 );
116
117 PROCEDURE validate_cannot_update_to_null (
118 p_column IN VARCHAR2,
119 p_column_value IN DATE,
120 x_return_status IN OUT NOCOPY VARCHAR2
121 );
122
123 PROCEDURE validate_lookup (
124 p_column IN VARCHAR2,
125 p_lookup_table IN VARCHAR2 DEFAULT 'AR_LOOKUPS',
126 p_lookup_type IN VARCHAR2,
127 p_column_value IN VARCHAR2,
128 x_return_status IN OUT NOCOPY VARCHAR2
129 );
130
131 PROCEDURE check_cust_account_fk (
132 p_column IN VARCHAR2,
133 p_column_value IN NUMBER,
134 x_return_status IN OUT NOCOPY VARCHAR2
135 );
136
137 PROCEDURE check_cust_acct_site_fk (
138 p_column IN VARCHAR2,
139 p_column_value IN NUMBER,
140 p_org_id IN NUMBER, -- Bug 3456489
141 x_return_status IN OUT NOCOPY VARCHAR2
142 );
143
144 PROCEDURE check_cust_site_use_fk (
145 p_column IN VARCHAR2,
146 p_column_value IN NUMBER,
147 x_return_status IN OUT NOCOPY VARCHAR2
148 );
149 PROCEDURE check_cust_site_use_cont_fk(
150 p_column IN VARCHAR2,
151 p_column_value IN NUMBER,
152 p_customer_id IN NUMBER,
153 x_return_status IN OUT NOCOPY VARCHAR2
154 );
155 PROCEDURE check_cust_account_role_fk (
156 p_column IN VARCHAR2,
157 p_column_value IN NUMBER,
158 x_return_status IN OUT NOCOPY VARCHAR2
159 );
160
161 PROCEDURE check_per_all_people_f_fk (
162 p_column IN VARCHAR2,
163 p_column_value IN NUMBER,
164 x_return_status IN OUT NOCOPY VARCHAR2
165 );
166
167 PROCEDURE check_collector_fk (
168 p_column IN VARCHAR2,
169 p_column_value IN NUMBER,
170 x_return_status IN OUT NOCOPY VARCHAR2
171 );
172
173 PROCEDURE check_party_fk (
174 p_column IN VARCHAR2,
175 p_column_value IN NUMBER,
176 x_return_status IN OUT NOCOPY VARCHAR2
177 );
178
179 PROCEDURE check_party_site_fk (
180 p_column IN VARCHAR2,
181 p_column_value IN NUMBER,
182 x_return_status IN OUT NOCOPY VARCHAR2
183 );
184
185 PROCEDURE check_currency_fk (
186 p_column IN VARCHAR2,
187 p_column_value IN VARCHAR2,
188 x_return_status IN OUT NOCOPY VARCHAR2
189 );
190
191 PROCEDURE check_oe_ship_methods_v_fk (
192 p_entity IN VARCHAR2,
193 p_column IN VARCHAR2,
194 p_column_value IN VARCHAR2,
195 x_return_status IN OUT NOCOPY VARCHAR2
196 );
197
198 PROCEDURE check_payterm_id_fk (
199 p_column IN VARCHAR2,
200 p_column_value IN VARCHAR2,
201 x_return_status IN OUT NOCOPY VARCHAR2
202 );
203
204 PROCEDURE check_late_charge_term_id_fk (
205 p_column IN VARCHAR2,
206 p_column_value IN NUMBER,
207 p_cons_inv_flag IN VARCHAR2,
208 x_return_status IN OUT NOCOPY VARCHAR2
209 );
210
211 PROCEDURE check_message_text_id_fk (
212 p_column IN VARCHAR2,
213 p_column_value IN NUMBER,
214 x_return_status IN OUT NOCOPY VARCHAR2
215 );
216
217 PROCEDURE check_exchange_rate_type_fk (
218 p_column IN VARCHAR2,
219 p_column_value IN VARCHAR2,
220 x_return_status IN OUT NOCOPY VARCHAR2
221 );
222
223 PROCEDURE check_charge_schedule_id_fk (
224 p_column IN VARCHAR2,
225 p_column_value IN NUMBER,
226 x_return_status IN OUT NOCOPY VARCHAR2
227 );
228
229 PROCEDURE check_finchrg_trx_fk (
230 p_column IN VARCHAR2,
231 p_column_value IN VARCHAR2,
232 p_org_id IN NUMBER, -- Bug 3456489
233 x_return_status IN OUT NOCOPY VARCHAR2
234 );
235
236
237 PROCEDURE check_price_list_fk (
238 p_column IN VARCHAR2,
239 p_column_value IN VARCHAR2,
240 x_return_status IN OUT NOCOPY VARCHAR2
241 );
242
243 PROCEDURE check_item_cross_ref(
244 p_column IN VARCHAR2,
245 p_column_value IN VARCHAR2,
246 x_return_status IN OUT NOCOPY VARCHAR2
247 );
248
249 PROCEDURE check_warehouse(
250 p_column IN VARCHAR2,
251 p_column_value IN VARCHAR2,
252 x_return_status IN OUT NOCOPY VARCHAR2
253 );
254
255 PROCEDURE check_ord_type(
256 p_column IN VARCHAR2,
257 p_column_value IN VARCHAR2,
258 p_org_id IN NUMBER, -- Bug 3456489
259 x_return_status IN OUT NOCOPY VARCHAR2
260 );
261
262 PROCEDURE check_prim_salesrep(
263 p_column IN VARCHAR2,
264 p_column_value IN VARCHAR2,
265 p_org_id IN NUMBER, -- Bug 3456489
266 x_return_status IN OUT NOCOPY VARCHAR2
267 );
268
269 PROCEDURE check_tax_code(
270 p_column IN VARCHAR2,
271 p_column_value IN VARCHAR2,
272 -- Bug 4713150
273 --p_org_id IN NUMBER, -- Bug 3456489
274 -- Bug 5136396: to indicate from where this procedure is called from.
275 p_called_from IN VARCHAR2,
276 x_return_status IN OUT NOCOPY VARCHAR2
277 );
278
279 PROCEDURE check_partial_mandatory_column (
280 p_column IN VARCHAR2,
281 p_column_value IN NUMBER,
282 x_return_status IN OUT NOCOPY VARCHAR2
283 );
284
285 PROCEDURE check_partial_mandatory_column (
286 p_column IN VARCHAR2,
287 p_column_value IN VARCHAR2,
288 x_return_status IN OUT NOCOPY VARCHAR2
289 );
290
291 PROCEDURE validate_gl_id (
292 p_gl_name IN VARCHAR2,
293 p_column_value IN NUMBER,
294 p_coa_id IN NUMBER, -- Bug 3456489
295 x_return_status IN OUT NOCOPY VARCHAR2
296 );
297
298 PROCEDURE check_auto_hierid_fk (
299 p_column IN VARCHAR2,
300 p_column_value IN NUMBER,
301 x_return_status IN OUT NOCOPY VARCHAR2
302 );
303
304 PROCEDURE check_stat_cycid_fk (
305 p_column IN VARCHAR2,
306 p_column_value IN NUMBER,
307 x_return_status IN OUT NOCOPY VARCHAR2
308 );
309
310 PROCEDURE check_dunning_letid_fk (
311 p_column IN VARCHAR2,
312 p_column_value IN NUMBER,
313 x_return_status IN OUT NOCOPY VARCHAR2
314 );
315
316 PROCEDURE check_standard_terms_fk (
317 p_column IN VARCHAR2,
318 p_column_value IN NUMBER,
319 p_cons_inv_flag IN VARCHAR2,
320 p_ckeck_acc_bfb_enabled IN VARCHAR2,
321 x_return_status IN OUT NOCOPY VARCHAR2
322 );
323
324 PROCEDURE check_grouping_ruleid_fk (
325 p_column IN VARCHAR2,
326 p_column_value IN NUMBER,
327 x_return_status IN OUT NOCOPY VARCHAR2
328 );
329
330 PROCEDURE check_automatch_set_id_fk (
331 p_column IN VARCHAR2,
332 p_column_value IN NUMBER,
333 x_return_status IN OUT NOCOPY VARCHAR2
334 );
335
336 PROCEDURE check_positive_value (
337 p_column IN VARCHAR2,
338 p_column_value IN NUMBER,
339 x_return_status IN OUT NOCOPY VARCHAR2
340 );
341 PROCEDURE check_greater_than_zero (
342 p_column IN VARCHAR2,
343 p_column_value IN NUMBER,
344 x_return_status IN OUT NOCOPY VARCHAR2
345 );
346
347 PROCEDURE check_less_than_100 (
348 p_column IN VARCHAR2,
349 p_column_value IN NUMBER,
350 x_return_status IN OUT NOCOPY VARCHAR2
351 );
352
353 PROCEDURE validate_created_by_module (
354 p_create_update_flag IN VARCHAR2,
355 p_created_by_module IN VARCHAR2,
356 p_old_created_by_module IN VARCHAR2,
357 x_return_status IN OUT NOCOPY VARCHAR2
358 );
359
360 PROCEDURE validate_application_id (
361 p_create_update_flag IN VARCHAR2,
362 p_application_id IN NUMBER,
363 p_old_application_id IN NUMBER,
364 x_return_status IN OUT NOCOPY VARCHAR2
365 );
366
367
368 PROCEDURE validate_bill_level (
369 p_create_update_flag IN VARCHAR2,
370 p_customer_profile_rec IN HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
371 x_return_status IN OUT NOCOPY VARCHAR2
372 );
373
374 PROCEDURE validate_fv_attributes(
375 p_create_update_flag IN VARCHAR2,
376 p_cust_account_rec IN HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE,
377 p_rowid IN ROWID,
378 x_return_status IN OUT NOCOPY VARCHAR2
379 );
380
381 --------------------------------------
382 -- public procedures and functions
383 --------------------------------------
384
385 /**
386 * PROCEDURE validate_cust_account
387 *
388 * DESCRIPTION
389 * Validates customer account record. Checks for
390 * uniqueness
391 * lookup types
392 * mandatory columns
393 * non-updateable fields
394 * foreign key validations
395 * other validations
396 *
397 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
398 *
399 * ARGUMENTS
400 * IN:
401 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
402 * p_cust_account_rec Customer account record.
403 * p_rowid Rowid of the record (used only in update mode).
404 * IN/OUT:
405 * x_return_status Return status after the call. The status can
406 * be FND_API.G_RET_STS_SUCCESS (success),
407 * FND_API.G_RET_STS_ERROR (error),
408 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
409 *
410 * NOTES
411 *
412 * MODIFICATION HISTORY
413 *
414 * 07-23-2001 Jianying Huang o Created.
415 * 11-08-2001 Rajeshwari P Included the validation for fields, tax_code,
416 * invoice_quantity_rule,customer_class_code,
417 * tax_rounding_rule,primary_salesrep_id,
418 * order_type_id,price_list_id,ship_partial,fob_point ,
419 * item_cross_ref_pref,warehouse_id,date_type_preference,
420 * ship_sets_include_lines_flag and
421 * arrivalsets_include_lines_flag in procedure
422 * VALIDATE_CUST_ACCOUNT.
423 * 21-05-2002 Rajeshwari P Bug fix 2311760.Commented the code which validates the
424 * Obsolete column ship_partial.
425 *
426 * 05-26-2003 Ramesh Ch Bug No:2441276. Added Validation to make
427 * account_number as non updateable.
428 * 12-MAY-2005 Rajib Ranjan Borah o TCA SSA Uptake (Bug 3456489)
429 * ~ HZ Cache will be used instead of querying from
430 * AR System Parameters.
431 * ~ Tax Code, Order Type and Sales Rep are no longer set
432 * at the Cust Account level.
433 */
434
435 PROCEDURE validate_cust_account (
436 p_create_update_flag IN VARCHAR2,
437 p_cust_account_rec IN HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE,
438 p_rowid IN ROWID,
439 x_return_status IN OUT NOCOPY VARCHAR2
440 ) IS
441
442 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_account'
443
444 l_dummy VARCHAR2(1);
445 l_rowid ROWID := NULL;
446
447 -- Bug 3456489
448 -- l_profile AR_SYSTEM_PARAMETERS.generate_customer_number%TYPE;
449 l_profile VARCHAR2(1);
450
451 l_orig_system_reference HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
452 l_orig_system_reference1 HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
453 l_account_established_date HZ_CUST_ACCOUNTS.account_established_date%TYPE;
454 -- l_account_termination_date HZ_CUST_ACCOUNTS.account_termination_date%TYPE;
455 -- l_account_activation_date HZ_CUST_ACCOUNTS.account_activation_date%TYPE;
456 l_created_by_module HZ_CUST_ACCOUNTS.created_by_module%TYPE;
457 l_application_id NUMBER;
458 l_status HZ_CUST_ACCOUNTS.status%TYPE;
459 l_customer_type HZ_CUST_ACCOUNTS.customer_type%TYPE;
460 l_sales_channel_code HZ_CUST_ACCOUNTS.sales_channel_code%TYPE;
461 l_freight_term HZ_CUST_ACCOUNTS.freight_term%TYPE;
462 l_ship_via HZ_CUST_ACCOUNTS.ship_via%TYPE;
463 l_ship_sets_inc_lines_f HZ_CUST_ACCOUNTS.ship_sets_include_lines_flag%TYPE;
464 l_arrivalsets_inc_lines_f HZ_CUST_ACCOUNTS.arrivalsets_include_lines_flag%TYPE;
465 l_tax_code HZ_CUST_ACCOUNTS.TAX_CODE%TYPE;
466 l_invoice_quantity_rule HZ_CUST_ACCOUNTS.INVOICE_QUANTITY_RULE%TYPE;
467 -- l_primary_salesrep_id HZ_CUST_ACCOUNTS.PRIMARY_SALESREP_ID%TYPE;
468 l_order_type_id HZ_CUST_ACCOUNTS.ORDER_TYPE_ID%TYPE;
469 l_price_list_id HZ_CUST_ACCOUNTS.PRICE_LIST_ID%TYPE;
470 -- l_ship_partial HZ_CUST_ACCOUNTS.SHIP_PARTIAL%TYPE;
471 l_fob_point HZ_CUST_ACCOUNTS.FOB_POINT%TYPE;
472 l_item_cross_ref_pref HZ_CUST_ACCOUNTS.ITEM_CROSS_REF_PREF%TYPE;
473 l_warehouse_id HZ_CUST_ACCOUNTS.WAREHOUSE_ID%TYPE;
474 l_date_type_preference HZ_CUST_ACCOUNTS.DATE_TYPE_PREFERENCE%TYPE;
475 l_customer_class_code HZ_CUST_ACCOUNTS.CUSTOMER_CLASS_CODE%TYPE;
476 l_tax_rounding_rule HZ_CUST_ACCOUNTS.TAX_ROUNDING_RULE%TYPE;
477 l_account_number HZ_CUST_ACCOUNTS.ACCOUNT_NUMBER%TYPE;
478 l_instr_length number := 0;
479 l_validate_flag varchar2(1) := 'Y';
480 l_mosr_owner_table_id number;
481
482 l_temp_return_status VARCHAR2(10); -- for storing return status from
483 -- hz_orig_system_ref_pub.get_owner_table_id
484
485 BEGIN
486
487 -- Check if API is called in debug mode. If yes, enable debug.
488 --enable_debug;
489
490 -- Debug info.
491 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
492 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_cust_account (+)',
493 p_msg_level=>fnd_log.level_procedure);
494 END IF;
495
496
497 -- Select fields for later use during update.
498 IF p_create_update_flag = 'U' THEN
499 SELECT ACCOUNT_NUMBER,ORIG_SYSTEM_REFERENCE, ACCOUNT_ESTABLISHED_DATE,
500 -- ACCOUNT_TERMINATION_DATE, --ACCOUNT_ACTIVATION_DATE,
501 CREATED_BY_MODULE, APPLICATION_ID,
502 STATUS, CUSTOMER_TYPE, SALES_CHANNEL_CODE, FREIGHT_TERM,
503 SHIP_VIA,SHIP_SETS_INCLUDE_LINES_FLAG,ARRIVALSETS_INCLUDE_LINES_FLAG,
504 TAX_CODE,INVOICE_QUANTITY_RULE,--PRIMARY_SALESREP_ID,
505 ORDER_TYPE_ID,PRICE_LIST_ID,FOB_POINT,
506 ITEM_CROSS_REF_PREF,WAREHOUSE_ID,DATE_TYPE_PREFERENCE,
507 CUSTOMER_CLASS_CODE,TAX_ROUNDING_RULE
508 INTO l_account_number,l_orig_system_reference, l_account_established_date,
509 -- l_account_termination_date, --l_account_activation_date,
510 l_created_by_module, l_application_id,
511 l_status, l_customer_type, l_sales_channel_code, l_freight_term,
512 l_ship_via,l_ship_sets_inc_lines_f,l_arrivalsets_inc_lines_f,
513 l_tax_code,l_invoice_quantity_rule,--l_primary_salesrep_id,
514 l_order_type_id,l_price_list_id,l_fob_point,
515 l_item_cross_ref_pref,l_warehouse_id,l_date_type_preference,
516 l_customer_class_code,l_tax_rounding_rule
517 FROM HZ_CUST_ACCOUNTS
518 WHERE ROWID = p_rowid;
519 END IF;
520
521 --------------------------------------
522 -- validate cust_account_id
523 --------------------------------------
524 /****Logical APIs - validation not required****/
525 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
526 IF p_create_update_flag = 'C' THEN
527
528 -- If primary key value is passed, check for uniqueness.
529 -- If primary key value is not passed, it will be generated
530 -- from sequence by table handler.
531
532 IF p_cust_account_rec.cust_account_id IS NOT NULL AND
533 p_cust_account_rec.cust_account_id <> FND_API.G_MISS_NUM
534 THEN
535 BEGIN
536 SELECT 'Y' INTO l_dummy
537 FROM HZ_CUST_ACCOUNTS
538 WHERE CUST_ACCOUNT_ID = p_cust_account_rec.cust_account_id;
539
540 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
541 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
542 FND_MSG_PUB.ADD;
543 x_return_status := FND_API.G_RET_STS_ERROR;
544 EXCEPTION
545 WHEN NO_DATA_FOUND THEN
546 NULL;
547 END;
548
549 /*IF G_DEBUG THEN
550 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
551 'cust_account_id is unique during creation if passed in. ' ||
552 'x_return_status = ' || x_return_status, l_debug_prefix );
553 END IF;
554 */
555 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
556 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
557 p_message=>'cust_account_id is unique during creation if passed in. ' ||
558 'x_return_status = ' || x_return_status,
559 p_msg_level=>fnd_log.level_statement);
560 END IF;
561
562 END IF;
563
564 END IF;
565
566 /*IF G_DEBUG THEN
567 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
568 '(+) after validate cust_account_id ... ' ||
569 'x_return_status = ' || x_return_status, l_debug_prefix );
570 END IF;
571 */
572 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
573 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate cust_account_id ... ' ||
574 'x_return_status = ' || x_return_status,
575 p_msg_level=>fnd_log.level_statement);
576 END IF;
577 END IF;
578
579 --------------------------------------
580 -- validate account_number
581 --------------------------------------
582
583 -- account_number should be mandatory and unique.
584
585 -- check if need generate account_number.
586 BEGIN
587
588 /* 3456489. Refer the new HZ_CACHE. */
589 --IF p_create_update_flag = 'C' THEN
590 l_profile := HZ_MO_GLOBAL_CACHE.Get_Generate_Customer_Number;
591 --END IF;
592
593 EXCEPTION
594 WHEN NO_DATA_FOUND THEN
595 x_return_status := FND_API.G_RET_STS_ERROR;
596 END ;
597
598 /* IF G_DEBUG THEN
599 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
600 'account_number autonumbering is ' || NVL( l_profile, 'N' ),
601 l_debug_prefix );
602 END IF;
603 */
604 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
605 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number autonumbering is ' || NVL( l_profile, 'N' ),
606 p_msg_level=>fnd_log.level_statement);
607 END IF;
608
609 IF p_create_update_flag = 'C' THEN
610
611 -- If autonumbering is on, if user has passed in an account_number,
612 -- error out. If autonumbering is off, if user has not passed in
613 -- value, error out;
614
615 IF l_profile = 'Y' THEN
616 IF p_cust_account_rec.account_number IS NOT NULL AND
617 p_cust_account_rec.account_number <> FND_API.G_MISS_CHAR
618 THEN
619 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCOUNT_NUMBER_AUTO_ON' );
620 FND_MSG_PUB.ADD;
621 x_return_status := FND_API.G_RET_STS_ERROR;
622 END IF;
623
624 -- the account_number will be generated from sequence by table handler.
625
626 /*IF G_DEBUG THEN
627 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
628 'account_number cannot be passed in if autonumbering is on. ' ||
629 'x_return_status = ' || x_return_status, l_debug_prefix );
630 END IF;
631 */
632 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
633 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
634 p_message=>'account_number cannot be passed in if autonumbering is on. ' ||
635 'x_return_status = ' || x_return_status,
636 p_msg_level=>fnd_log.level_statement);
637 END IF;
638
639 ELSIF l_profile = 'N' /* Bug 5118546 */
640 THEN
641 IF p_cust_account_rec.account_number IS NULL OR
642 p_cust_account_rec.account_number = FND_API.G_MISS_CHAR
643 THEN
644 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
645 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'account_number' );
646 FND_MSG_PUB.ADD;
647 x_return_status := FND_API.G_RET_STS_ERROR;
648 END IF;
649
650 /*IF G_DEBUG THEN
651 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
652 'account_number is mandatory if autonumbering is off. ' ||
653 'x_return_status = ' || x_return_status, l_debug_prefix );
654 END IF;
655 */
656 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
657 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is mandatory if autonumbering is off. ' ||
658 'x_return_status = ' || x_return_status,
659 p_msg_level=>fnd_log.level_statement);
660 END IF;
661
662 END IF;
663
664 ELSE -- in update
665 IF p_cust_account_rec.account_number IS NOT NULL THEN
666 validate_cannot_update_to_null (
667 p_column => 'account_number',
668 p_column_value => p_cust_account_rec.account_number,
669 x_return_status => x_return_status );
670
671 /*IF G_DEBUG THEN
672 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
673 'account_number cannot be updated to null. ' ||
674 'x_return_status = ' || x_return_status, l_debug_prefix );
675 END IF;
676 */
677 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
678 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number cannot be updated to null. ' ||
679 'x_return_status = ' || x_return_status,
680 p_msg_level=>fnd_log.level_statement);
681 END IF;
682
683 --------------------------------------
684 -- validate ACCOUNT NUMBER BugNo:2441276
685 --------------------------------------
686
687 -- bug 3969469. account_number is updatable if the system option
688 -- if AUTO_CUSTOMER_NUMBERING is OFF else it is not updatable.
689
690
691 IF (p_cust_account_rec.account_number<>l_account_number
692 AND l_profile='Y') -- bug 3969469
693 THEN
694
695 validate_nonupdateable (
696 p_column => 'account_number',
697 p_column_value => p_cust_account_rec.account_number,
698 p_old_column_value => l_account_number,
699 x_return_status => x_return_status );
700
701 /*IF G_DEBUG THEN
702 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
703 'account_number is non-updateable. ' ||
704 'x_return_status = ' || x_return_status, l_debug_prefix );
705 END IF;
706 */
707 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
708 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is non-updateable. ' ||
709 'x_return_status = ' || x_return_status,
710 p_msg_level=>fnd_log.level_statement);
711 END IF;
712
713 END IF;
714
715 END IF;
716
717 END IF;
718
719 -- account_number is unique.
720 IF p_cust_account_rec.account_number IS NOT NULL AND
721 p_cust_account_rec.account_number <> FND_API.G_MISS_CHAR
722 THEN
723 BEGIN
724 SELECT ROWID INTO l_rowid
725 FROM HZ_CUST_ACCOUNTS
726 WHERE ACCOUNT_NUMBER = p_cust_account_rec.account_number;
727
728 IF p_create_update_flag = 'C' OR
729 ( p_create_update_flag = 'U' AND l_rowid <> p_rowid )
730 THEN
731 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
732 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'account_number' );
733 FND_MSG_PUB.ADD;
734 x_return_status := FND_API.G_RET_STS_ERROR;
735 END IF;
736 EXCEPTION
737 WHEN NO_DATA_FOUND THEN
738 NULL;
739 END;
740
741 /*IF G_DEBUG THEN
742 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
743 'account_number is unique. ' ||
744 'x_return_status = ' || x_return_status, l_debug_prefix );
745 END IF;
746 */
747 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
748 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is unique. ' ||
749 'x_return_status = ' || x_return_status,
750 p_msg_level=>fnd_log.level_statement);
751 END IF;
752
753 END IF;
754
755
756
757
758 /*IF G_DEBUG THEN
759 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
760 '(+) after validate account_number ... ' ||
761 'x_return_status = ' || x_return_status, l_debug_prefix );
762 END IF;
763 */
764
765 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
766 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate account_number ... ' ||
767 'x_return_status = ' || x_return_status,
768 p_msg_level=>fnd_log.level_statement);
769 END IF;
770
771
772 --------------------------------------
773 -- validate orig_system_reference
774 --------------------------------------
775 /****Logical APIs - validation not required****/
776 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
777 -- orig_system_reference is unique. Since orig_system_refence is defaulting to
778 -- primary key, we only need to check the uniqueness if user passes some value.
779 -- database constraints can catch unique error when we defaulting.
780 -- orig_system_reference is non-updateable, we only need to check uniqueness
781 -- during creation.
782
783 IF p_create_update_flag = 'C' AND
784 p_cust_account_rec.orig_system_reference IS NOT NULL AND
785 p_cust_account_rec.orig_system_reference <> FND_API.G_MISS_CHAR
786 THEN
787 BEGIN
788 SELECT 'Y' INTO l_dummy
789 FROM HZ_CUST_ACCOUNTS
790 WHERE ORIG_SYSTEM_REFERENCE = p_cust_account_rec.orig_system_reference;
791
792 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
793 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'orig_system_reference' );
794 FND_MSG_PUB.ADD;
795 x_return_status := FND_API.G_RET_STS_ERROR;
796 EXCEPTION
797 WHEN NO_DATA_FOUND THEN
798 NULL;
799 END;
800
801 /*IF G_DEBUG THEN
802 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
803 'orig_system_reference is unique. ' ||
804 'x_return_status = ' || x_return_status, l_debug_prefix );
805 END IF;
806 */
807 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
808 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is unique. ' ||
809 'x_return_status = ' || x_return_status,
810 p_msg_level=>fnd_log.level_statement);
811 END IF;
812
813 END IF;
814
815 l_instr_length := instr(l_orig_system_reference,'#@');
816 if l_instr_length > 0
817 then
818 l_orig_system_reference1 := null;
819 if substr(l_orig_system_reference,1,l_instr_length-1) <> p_cust_account_rec.orig_system_reference
820 then
821 l_validate_flag := 'N';
822 end if;
823 else
824 l_orig_system_reference1 := p_cust_account_rec.orig_system_reference;
825 end if;
826
827 IF (p_cust_account_rec.orig_system is not null and p_cust_account_rec.orig_system <>fnd_api.g_miss_char)
828 and (p_cust_account_rec.orig_system_reference is not null and p_cust_account_rec.orig_system_reference <>fnd_api.g_miss_char)
829 and p_create_update_flag = 'U'
830 then
831 hz_orig_system_ref_pub.get_owner_table_id
832 (p_orig_system => p_cust_account_rec.orig_system,
833 p_orig_system_reference => p_cust_account_rec.orig_system_reference,
834 p_owner_table_name => 'HZ_CUST_ACCOUNTS',
835 x_owner_table_id => l_mosr_owner_table_id,
836 x_return_status => l_temp_return_status);
837
838 IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
839 l_mosr_owner_table_id= nvl(p_cust_account_rec.cust_account_id,l_mosr_owner_table_id))
840 THEN
841 l_validate_flag := 'N';
842 END IF;
843
844 -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
845 -- x_return_status. Set x_return_status to error, ONLY if there is error.
846 -- In case of success, leave it to carry over previous value as before this call.
847 -- Fix for Bug 5498116 (29-AUG-2006)
848 IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
849 x_return_status := l_temp_return_status;
850 END IF;
851
852 END IF;
853 -- orig_system_reference is non-updateable field
854 IF p_create_update_flag = 'U' AND
855 p_cust_account_rec.orig_system_reference IS NOT NULL
856 and l_validate_flag = 'Y'
857 THEN
858
859 validate_nonupdateable (
860 p_column => 'orig_system_reference',
861 p_column_value => l_orig_system_reference1,
862 p_old_column_value => l_orig_system_reference,
863 x_return_status => x_return_status );
864
865 /*IF G_DEBUG THEN
866 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
867 'orig_system_reference is non-updateable. ' ||
868 'x_return_status = ' || x_return_status, l_debug_prefix );
869 END IF;
870 */
871 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
872 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is non-updateable. ' ||
873 'x_return_status = ' || x_return_status,
874 p_msg_level=>fnd_log.level_statement);
875 END IF;
876
877 END IF;
878
879 /*IF G_DEBUG THEN
880 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
881 '(+) after validate orig_system_reference ... ' ||
882 'x_return_status = ' || x_return_status, l_debug_prefix );
883 END IF;
884 */
885 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
886 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
887 'x_return_status = ' || x_return_status,
888 p_prefix =>l_debug_prefix,
889 p_msg_level=>fnd_log.level_statement);
890 END IF;
891 END IF;
892
893
894
895 --------------------------------------
896 -- validate status
897 --------------------------------------
898
899 -- status cannot be set to null during update
900 IF p_create_update_flag = 'U' AND
901 p_cust_account_rec.status IS NOT NULL
902 THEN
903 validate_cannot_update_to_null (
904 p_column => 'status',
905 p_column_value => p_cust_account_rec.status,
906 x_return_status => x_return_status );
907
908 /*IF G_DEBUG THEN
909 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
910 'status cannot be updated to null. ' ||
911 'x_return_status = ' || x_return_status, l_debug_prefix );
912 END IF;
913 */
914 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
915 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be updated to null. ' ||
916 'x_return_status = ' || x_return_status,
917 p_msg_level=>fnd_log.level_statement);
918 END IF;
919
920 END IF;
921
922 /****Logical APIs - validation not required****/
923 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
924 -- status is lookup code in lookup type CODE_STATUS
925 IF p_cust_account_rec.status IS NOT NULL AND
926 p_cust_account_rec.status <> FND_API.G_MISS_CHAR AND
927 ( p_create_update_flag = 'C' OR
928 ( p_create_update_flag = 'U' AND
929 p_cust_account_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
930 THEN
931 validate_lookup (
932 p_column => 'status',
933 p_lookup_type => 'CODE_STATUS',
934 p_column_value => p_cust_account_rec.status,
935 x_return_status => x_return_status );
936
937 /*IF G_DEBUG THEN
938 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
939 'status is lookup code in lookup type CODE_STATUS. ' ||
940 'x_return_status = ' || x_return_status, l_debug_prefix );
941 END IF;
942 */
943
944 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
945 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
946 'x_return_status = ' || x_return_status,
947 p_msg_level=>fnd_log.level_statement);
948 END IF;
949
950 END IF;
951 END IF;
952
953 /*IF G_DEBUG THEN
954 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
955 '(+) after validate status ... ' ||
956 'x_return_status = ' || x_return_status, l_debug_prefix );
957 END IF;
958 */
959
960 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
961 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate status ... ' ||
962 'x_return_status = ' || x_return_status,
963 p_msg_level=>fnd_log.level_statement);
964 END IF;
965
966
967 --------------------------------------
968 -- validate customer_type
969 --------------------------------------
970
971 -- customer_type is lookup code in lookup type CUSTOMER_TYPE
972 IF p_cust_account_rec.customer_type IS NOT NULL AND
973 p_cust_account_rec.customer_type <> FND_API.G_MISS_CHAR AND
974 ( p_create_update_flag = 'C' OR
975 ( p_create_update_flag = 'U' AND
976 p_cust_account_rec.customer_type <> NVL( l_customer_type, FND_API.G_MISS_CHAR ) ) )
977 THEN
978 validate_lookup (
979 p_column => 'customer_type',
980 p_lookup_type => 'CUSTOMER_TYPE',
981 p_column_value => p_cust_account_rec.customer_type,
982 x_return_status => x_return_status );
983
984 /*IF G_DEBUG THEN
985 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
986 'customer_type is lookup code in lookup type CUSTOMER_TYPE. ' ||
987 'x_return_status = ' || x_return_status, l_debug_prefix );
988 END IF;
989 */
990 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
991 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'customer_type is lookup code in lookup type CUSTOMER_TYPE. ' ||
992 'x_return_status = ' || x_return_status,
993 p_msg_level=>fnd_log.level_statement);
994 END IF;
995
996 END IF;
997
998 /*IF G_DEBUG THEN
999 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1000 '(+) after validate customer_type ... ' ||
1001 'x_return_status = ' || x_return_status, l_debug_prefix );
1002 END IF;
1003 */
1004 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1005 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate customer_type ... ' ||
1006 'x_return_status = ' || x_return_status,
1007 p_msg_level=>fnd_log.level_statement);
1008 END IF;
1009
1010
1011 --------------------------------------
1012 -- validate sales_channel_code
1013 --------------------------------------
1014
1015 -- sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups
1016 IF p_cust_account_rec.sales_channel_code IS NOT NULL AND
1017 p_cust_account_rec.sales_channel_code <> FND_API.G_MISS_CHAR AND
1018 ( p_create_update_flag = 'C' OR
1019 ( p_create_update_flag = 'U' AND
1020 p_cust_account_rec.sales_channel_code <> NVL( l_sales_channel_code, FND_API.G_MISS_CHAR ) ) )
1021 THEN
1022 validate_lookup (
1023 p_column => 'sales_channel_code',
1024 p_lookup_table => 'SO_LOOKUPS',
1025 p_lookup_type => 'SALES_CHANNEL',
1026 p_column_value => p_cust_account_rec.sales_channel_code,
1027 x_return_status => x_return_status );
1028
1029 /*IF G_DEBUG THEN
1030 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1031 'sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups. ' ||
1032 'x_return_status = ' || x_return_status, l_debug_prefix );
1033 END IF;
1034 */
1035 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1036 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups. ' ||
1037 'x_return_status = ' || x_return_status,
1038 p_msg_level=>fnd_log.level_statement);
1039 END IF;
1040
1041 END IF;
1042
1043 /*IF G_DEBUG THEN
1044 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1045 '(+) after validate sales_channel_code ... ' ||
1046 'x_return_status = ' || x_return_status, l_debug_prefix );
1047 END IF;
1048 */
1049 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1050 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate sales_channel_code ... ' ||
1051 'x_return_status = ' || x_return_status,
1052 p_msg_level=>fnd_log.level_statement);
1053 END IF;
1054
1055
1056 --------------------------------------
1057 -- validate freight_term
1058 --------------------------------------
1059
1060 -- freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups
1061 IF p_cust_account_rec.freight_term IS NOT NULL AND
1062 p_cust_account_rec.freight_term <> FND_API.G_MISS_CHAR AND
1063 ( p_create_update_flag = 'C' OR
1064 ( p_create_update_flag = 'U' AND
1065 p_cust_account_rec.freight_term <> NVL( l_freight_term, FND_API.G_MISS_CHAR ) ) )
1066 THEN
1067 validate_lookup (
1068 p_column => 'freight_term',
1069 p_lookup_table => 'SO_LOOKUPS',
1070 p_lookup_type => 'FREIGHT_TERMS',
1071 p_column_value => p_cust_account_rec.freight_term,
1072 x_return_status => x_return_status );
1073
1074 /*IF G_DEBUG THEN
1075 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1076 'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
1077 'x_return_status = ' || x_return_status, l_debug_prefix );
1078 END IF;
1079 */
1080 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1081 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
1082 'x_return_status = ' || x_return_status,
1083 p_msg_level=>fnd_log.level_statement);
1084 END IF;
1085
1086
1087 END IF;
1088
1089 /*IF G_DEBUG THEN
1090 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1091 '(+) after validate freight_term ... ' ||
1092 'x_return_status = ' || x_return_status, l_debug_prefix );
1093 END IF;
1094 */
1095 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1096 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate freight_term ... ' ||
1097 'x_return_status = ' || x_return_status,
1098 p_msg_level=>fnd_log.level_statement);
1099 END IF;
1100
1101
1102 --------------------------------------
1103 -- validate tax_header_level_flag
1104 --------------------------------------
1105 /****Logical APIs - validation not required****/
1106 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1107 -- tax_header_level_flag is lookup code in lookup type YES/NO
1108 IF p_cust_account_rec.tax_header_level_flag IS NOT NULL AND
1109 p_cust_account_rec.tax_header_level_flag <> FND_API.G_MISS_CHAR
1110 THEN
1111 validate_lookup (
1112 p_column => 'tax_header_level_flag',
1113 p_lookup_type => 'YES/NO',
1114 p_column_value => p_cust_account_rec.tax_header_level_flag,
1115 x_return_status => x_return_status );
1116
1117 /*IF G_DEBUG THEN
1118 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1119 'tax_header_level_flag is lookup code in lookup type YES/NO. ' ||
1120 'x_return_status = ' || x_return_status, l_debug_prefix );
1121 END IF;
1122 */
1123
1124 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1125 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_header_level_flag is lookup code in lookup type YES/NO. ' ||
1126 'x_return_status = ' || x_return_status,
1127 p_msg_level=>fnd_log.level_statement);
1128 END IF;
1129
1130 END IF;
1131
1132 /*IF G_DEBUG THEN
1133 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1134 '(+) after validate tax_header_level_flag ... ' ||
1135 'x_return_status = ' || x_return_status, l_debug_prefix );
1136 END IF;
1137 */
1138 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1139 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_header_level_flag ... ' ||
1140 'x_return_status = ' || x_return_status,
1141 p_msg_level=>fnd_log.level_statement);
1142 END IF;
1143 END IF;
1144
1145 ----------------------------
1146 --validate tax_code
1147 ----------------------------
1148
1149 -- Bug 4713150 : tax_code is now validated against the view zx_output_classifications_v
1150 /*
1151 IF p_cust_account_rec.tax_code IS NOT NULL AND
1152 p_cust_account_rec.tax_code <> FND_API.G_MISS_CHAR
1153 THEN
1154 FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1155 FND_MESSAGE.SET_TOKEN('COLUMN','TAX_CODE');
1156 FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1157 FND_MSG_PUB.ADD;
1158 x_return_status := FND_API.G_RET_STS_ERROR;
1159 END IF;
1160 */
1161
1162 IF p_cust_account_rec.tax_code is NOT NULL AND
1163 p_cust_account_rec.tax_code <> FND_API.G_MISS_CHAR AND
1164 ( p_create_update_flag = 'C' OR
1165 ( p_create_update_flag = 'U' AND
1166 p_cust_account_rec.tax_code <> NVL( l_tax_code, FND_API.G_MISS_CHAR ) ) )
1167 THEN
1168 check_tax_code(
1169 p_column => 'tax_code',
1170 p_column_value => p_cust_account_rec.tax_code,
1171 p_called_from => 'validate_cust_account',
1172 x_return_status => x_return_status );
1173
1174 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1175 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Tax_code should be a valid value defined in view zx_output_classifications_v. '||
1176 'x_return_status = ' || x_return_status,
1177 p_msg_level=>fnd_log.level_statement);
1178 END IF;
1179
1180 END IF;
1181 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1182 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_code..' ||
1183 'x_return_status = ' || x_return_status,
1184 p_msg_level=>fnd_log.level_statement);
1185 END IF;
1186
1187
1188 ----------------------------------------------------------
1189 --validate order_type_id
1190 ----------------------------------------------------------
1191 /* 3456489. Order type is no longer set at the Customer Account Level. */
1192
1193 IF p_cust_account_rec.order_type_id IS NOT NULL AND
1194 p_cust_account_rec.order_type_id <> FND_API.G_MISS_NUM
1195 THEN
1196 FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1197 FND_MESSAGE.SET_TOKEN('COLUMN','ORDER_TYPE_ID');
1198 FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1199 FND_MSG_PUB.ADD;
1200 x_return_status := FND_API.G_RET_STS_ERROR;
1201 END IF;
1202
1203
1204 /*
1205 | --order_type_id should be a valid value defined in OE_ORDER_TYPES_V
1206 |
1207 | IF p_cust_account_rec.order_type_id is NOT NULL AND
1208 | p_cust_account_rec.order_type_id <> FND_API.G_MISS_NUM AND
1209 | ( p_create_update_flag = 'C' OR
1210 | ( p_create_update_flag = 'U' AND
1211 | p_cust_account_rec.order_type_id <> NVL( l_order_type_id, FND_API.G_MISS_NUM ) ) )
1212 | THEN
1213 | check_ord_type(
1214 | p_column => 'order_type_id',
1215 | p_column_value => p_cust_account_rec.order_type_id,
1216 | x_return_status => x_return_status );
1217 |
1218 | /*IF G_DEBUG THEN
1219 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1220 | 'order_type_id should be a valid value defined in OE_ORDER_TYPES_V..' ||
1221 | 'x_return_status = ' || x_return_status, l_debug_prefix);
1222 | END IF;
1223 | *//*
1224 | IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1225 | | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'order_type_id should be a valid value defined in OE_ORDER_TYPES_V..' ||
1226 | 'x_return_status = ' || x_return_status,
1227 | p_msg_level=>fnd_log.level_statement);
1228 | END IF;
1229 |
1230 | END IF;
1231 | /*IF G_DEBUG THEN
1232 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1233 | '(+) after validate order_type_id..' ||
1234 | 'x_return_status = ' || x_return_status, l_debug_prefix );
1235 | END IF;
1236 | *//*
1237 | IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1238 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate order_type_id..' ||
1239 | 'x_return_status = ' || x_return_status,
1240 | p_msg_level=>fnd_log.level_statement);
1241 | END IF;
1242 */
1243
1244 ----------------------------------------------------------
1245 --validate primary_salesrep_id
1246 ----------------------------------------------------------
1247 /* 3456489. Sales Rep is no longer set at the Customer Account Level. */
1248
1249 IF p_cust_account_rec.primary_salesrep_id IS NOT NULL AND
1250 p_cust_account_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
1251 THEN
1252 FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1253 FND_MESSAGE.SET_TOKEN('COLUMN','PRIMARY_SALESREP_ID');
1254 FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1255 FND_MSG_PUB.ADD;
1256 x_return_status := FND_API.G_RET_STS_ERROR;
1257 END IF;
1258
1259 /*
1260 | --Primary_salesrep_id should be a valid value defined in RA_SALESREPS
1261 |
1262 | IF p_cust_account_rec.primary_salesrep_id is NOT NULL AND
1263 | p_cust_account_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
1264 | AND ( p_create_update_flag = 'C' OR
1265 | ( p_create_update_flag = 'U' AND
1266 | p_cust_account_rec.primary_salesrep_id <> NVL( l_primary_salesrep_id, FND_API.G_MISS_NUM ) ) )
1267 | THEN
1268 | check_prim_salesrep(
1269 | p_column => 'primary_salesrep_id',
1270 | p_column_value => p_cust_account_rec.primary_salesrep_id,
1271 | x_return_status => x_return_status );
1272 |
1273 | /*IF G_DEBUG THEN
1274 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1275 | 'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
1276 | 'x_return_status = ' || x_return_status, l_debug_prefix);
1277 | | END IF;
1278 | | *//*
1279 | IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1280 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
1281 | 'x_return_status = ' || x_return_status,
1282 | p_msg_level=>fnd_log.level_statement);
1283 | END IF;
1284 |
1285 | END IF;
1286 | /*IF G_DEBUG THEN
1287 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1288 | '(+) after validate primary_salesrep_id..' ||
1289 | 'x_return_status = ' || x_return_status, l_debug_prefix );
1290 | END IF;
1291 | *//*
1292 | IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1293 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate primary_salesrep_id..' ||
1294 | 'x_return_status = ' || x_return_status,
1295 | p_msg_level=>fnd_log.level_statement);
1296 | END IF;
1297 */
1298
1299 --Bug fix 2311760
1300 /**********
1301 -------------------------------------------------------
1302 --validate ship_partial
1303 -------------------------------------------------------
1304 -- ship_partial is a lookup code in lookup type YES/NO
1305
1306 IF p_cust_account_rec.ship_partial IS NOT NULL AND
1307 p_cust_account_rec.ship_partial <> FND_API.G_MISS_CHAR
1308 AND ( p_create_update_flag = 'C' OR
1309 ( p_create_update_flag = 'U' AND
1310 p_cust_account_rec.ship_partial <> NVL( l_ship_partial, FND_API.G_MISS_CHAR) ) )
1311 THEN
1312 validate_lookup (
1313 p_column => 'ship_partial',
1314 p_lookup_type => 'YES/NO',
1315 p_column_value => p_cust_account_rec.ship_partial,
1316 x_return_status => x_return_status );
1317
1318 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1319 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ship_partial is a lookup code in lookup type YES/NO. ' ||
1320 'x_return_status = ' || x_return_status,
1321 p_msg_level=>fnd_log.level_statement);
1322 END IF;
1323
1324 END IF;
1325
1326 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1327 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate ship_partial ... ' ||
1328 'x_return_status = ' || x_return_status,
1329 p_msg_level=>fnd_log.level_statement);
1330 END IF;
1331
1332
1333 ***************/
1334 -----------------------------------------------------------
1335 --validate tax_rounding_rule
1336 -----------------------------------------------------------
1337 --tax_rounding_rule is a lookup_code in lookup type TAX_ROUNDING_RULE
1338
1339 IF p_cust_account_rec.tax_rounding_rule is NOT NULL AND
1340 p_cust_account_rec.tax_rounding_rule <> FND_API.G_MISS_CHAR
1341 AND ( p_create_update_flag = 'C' OR
1342 ( p_create_update_flag = 'U' AND
1343 p_cust_account_rec.tax_rounding_rule <> NVL( l_tax_rounding_rule, FND_API.G_MISS_CHAR) ) )
1344 THEN
1345 validate_lookup(
1346 p_column =>'tax_rounding_rule',
1347 p_lookup_type =>'TAX_ROUNDING_RULE',
1348 p_column_value =>p_cust_account_rec.tax_rounding_rule,
1349 x_return_status =>x_return_status );
1350
1351 /*IF G_DEBUG THEN
1352 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1353 'tax_rounding_rule is lookup_code in lookup type TAX_ROUNDING_RULE. '||
1354 'x_return_status = ' || x_return_status, l_debug_prefix);
1355 END IF;
1356 */
1357
1358 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1359 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_rounding_rule is lookup_code in lookup type TAX_ROUNDING_RULE. '||
1360 'x_return_status = ' || x_return_status,
1361 p_msg_level=>fnd_log.level_statement);
1362 END IF;
1363
1364 END IF;
1365 /*IF G_DEBUG THEN
1366 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1367 '(+) after validate tax_rounding_rule..' ||
1368 'x_return_status = ' || x_return_status, l_debug_prefix );
1369 END IF;
1370 */
1371 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1372 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_rounding_rule..' ||
1373 'x_return_status = ' || x_return_status,
1374 p_msg_level=>fnd_log.level_statement);
1375 END IF;
1376
1377
1378 -------------------------------------------------------
1379 --validate customer_class_code
1380 -------------------------------------------------------
1381 --Customer_class_code is a lookup_code in lookup type CUSTOMER_CLASS
1382
1383 IF p_cust_account_rec.customer_class_code is NOT NULL AND
1384 p_cust_account_rec.customer_class_code <> FND_API.G_MISS_CHAR
1385 AND ( p_create_update_flag = 'C' OR
1386 ( p_create_update_flag = 'U' AND
1387 p_cust_account_rec.customer_class_code <> NVL( l_customer_class_code, FND_API.G_MISS_CHAR) ) )
1388 THEN
1389 validate_lookup(
1390 p_column =>'customer_class_code',
1391 p_lookup_type =>'CUSTOMER CLASS',
1392 p_column_value =>p_cust_account_rec.customer_class_code,
1393 x_return_status =>x_return_status );
1394 /*IF G_DEBUG THEN
1395 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1396 'Customer_class_code is lookup_code in lookup type CUSTOMER_CLASS. '||
1397 'x_return_status = ' || x_return_status, l_debug_prefix);
1398 END IF;
1399 */
1400 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1401 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Customer_class_code is lookup_code in lookup type CUSTOMER_CLASS. '||
1402 'x_return_status = ' || x_return_status,
1403 p_msg_level=>fnd_log.level_statement);
1404 END IF;
1405
1406 END IF;
1407 /*IF G_DEBUG THEN
1408 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1409 '(+) after validate CUSTOMER_CLASS_CODE..' ||
1410 'x_return_status = ' || x_return_status, l_debug_prefix );
1411 END IF;
1412 */
1413 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1414 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate CUSTOMER_CLASS_CODE..' ||
1415 'x_return_status = ' || x_return_status,
1416 p_msg_level=>fnd_log.level_statement);
1417 END IF;
1418
1419
1420 ---------------------------------------------------
1421 --validate Invoice_quantity_rule
1422 ---------------------------------------------------
1423 --Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS
1424
1425 IF p_cust_account_rec.invoice_quantity_rule is NOT NULL AND
1426 p_cust_account_rec.invoice_quantity_rule <> FND_API.G_MISS_CHAR
1427 AND ( p_create_update_flag = 'C' OR
1428 ( p_create_update_flag = 'U' AND
1429 p_cust_account_rec.invoice_quantity_rule <> NVL( l_invoice_quantity_rule, FND_API.G_MISS_CHAR) ) )
1430 THEN
1431 validate_lookup(
1432 p_column =>'invoice_quantity_rule',
1433 p_lookup_table =>'OE_LOOKUPS',
1434 p_lookup_type =>'INVOICE_BASIS',
1435 p_column_value =>p_cust_account_rec.invoice_quantity_rule,
1436 x_return_status =>x_return_status );
1437
1438 /*IF G_DEBUG THEN
1439 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1440 'Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS. '||
1441 'x_return_status = ' || x_return_status, l_debug_prefix);
1442 END IF;
1443 */
1444 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1445 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=> 'Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS. '||
1446 'x_return_status = ' || x_return_status,
1447 p_msg_level=>fnd_log.level_statement);
1448 END IF;
1449
1450 END IF;
1451 /*IF G_DEBUG THEN
1452 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1453 '(+) after validate invoice_quantity_rule..' ||
1454 'x_return_status = ' || x_return_status, l_debug_prefix );
1455 END IF;
1456 */
1457
1458 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1459 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate invoice_quantity_rule..' ||
1460 'x_return_status = ' || x_return_status,
1461 p_msg_level=>fnd_log.level_statement);
1462 END IF;
1463
1464
1465 ----------------------------------------------------------
1466 --validate price_list_id
1467 ----------------------------------------------------------
1468 --price_list_id should be a valid value defined in SO_PRICE_LISTS
1469
1470 IF p_cust_account_rec.price_list_id is NOT NULL AND
1471 p_cust_account_rec.price_list_id <> FND_API.G_MISS_NUM
1472 AND ( p_create_update_flag = 'C' OR
1473 ( p_create_update_flag = 'U' AND
1474 p_cust_account_rec.price_list_id <> NVL( l_price_list_id, FND_API.G_MISS_NUM) ) )
1475 THEN
1476 check_price_list_fk(
1477 p_column => 'price_list_id',
1478 p_column_value => p_cust_account_rec.price_list_id,
1479 x_return_status => x_return_status );
1480 /*IF G_DEBUG THEN
1481 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1482 'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
1483 'x_return_status = ' || x_return_status, l_debug_prefix);
1484 END IF;
1485 */
1486 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1487 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
1488 'x_return_status = ' || x_return_status,
1489 p_msg_level=>fnd_log.level_statement);
1490 END IF;
1491
1492 END IF;
1493 /*IF G_DEBUG THEN
1494 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1495 '(+) after validate price_list_id..' ||
1496 'x_return_status = ' || x_return_status, l_debug_prefix );
1497 END IF;
1498 */
1499 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1500 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate price_list_id..' ||
1501 'x_return_status = ' || x_return_status,
1502 p_msg_level=>fnd_log.level_statement);
1503 END IF;
1504
1505
1506 ----------------------------------------------------------
1507 --validate fob_point
1508 ----------------------------------------------------------
1509 --fob_point is lookup_code in lookup type FOB
1510
1511 IF p_cust_account_rec.fob_point is NOT NULL AND
1512 p_cust_account_rec.fob_point <> FND_API.G_MISS_CHAR
1513 AND ( p_create_update_flag = 'C' OR
1514 ( p_create_update_flag = 'U' AND
1515 p_cust_account_rec.fob_point <> NVL( l_fob_point, FND_API.G_MISS_CHAR) ) )
1516 THEN
1517 validate_lookup(
1518 p_column =>'fob_point',
1519 p_lookup_type =>'FOB',
1520 p_column_value =>p_cust_account_rec.fob_point,
1521 x_return_status =>x_return_status );
1522
1523 /*IF G_DEBUG THEN
1524 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1525 'fob_point is lookup_code in lookup type FOB. '||
1526 'x_return_status = ' || x_return_status, l_debug_prefix);
1527 END IF;
1528 */
1529 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1530 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fob_point is lookup_code in lookup type FOB. '||
1531 'x_return_status = ' || x_return_status,
1532 p_msg_level=>fnd_log.level_statement);
1533 END IF;
1534
1535
1536 END IF;
1537 /*IF G_DEBUG THEN
1538 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1539 '(+) after validate fob_point..' ||
1540 'x_return_status = ' || x_return_status, l_debug_prefix );
1541 END IF;
1542 */
1543 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1544 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate fob_point..' ||
1545 'x_return_status = ' || x_return_status,
1546 p_msg_level=>fnd_log.level_statement);
1547 END IF;
1548
1549 ----------------------------------------------------------
1550 --validate item_cross_ref_pref
1551 ----------------------------------------------------------
1552 --item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should have value 'INT' or 'CUST'
1553
1554 IF p_cust_account_rec.item_cross_ref_pref is NOT NULL AND
1555 p_cust_account_rec.item_cross_ref_pref <> FND_API.G_MISS_CHAR
1556 AND ( p_create_update_flag = 'C' OR
1557 ( p_create_update_flag = 'U' AND
1558 p_cust_account_rec.item_cross_ref_pref <> NVL( l_item_cross_ref_pref, FND_API.G_MISS_CHAR) ) )
1559 THEN
1560 IF p_cust_account_rec.item_cross_ref_pref NOT IN('INT','CUST')
1561 THEN
1562 check_item_cross_ref(
1563 p_column => 'item_cross_ref_pref',
1564 p_column_value => p_cust_account_rec.item_cross_ref_pref,
1565 x_return_status => x_return_status );
1566
1567 /*IF G_DEBUG THEN
1568 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1569 'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . '||
1570 'x_return_status = ' || x_return_status, l_debug_prefix);
1571 END IF;
1572 */
1573 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1574 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . '||
1575 'x_return_status = ' || x_return_status,
1576 p_msg_level=>fnd_log.level_statement);
1577 END IF;
1578
1579 END IF;
1580 END IF;
1581 /*IF G_DEBUG THEN
1582 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1583 '(+) after validate item_cross_ref_pref..' ||
1584 'x_return_status = ' || x_return_status, l_debug_prefix );
1585 END IF;
1586 */
1587 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1588 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate item_cross_ref_pref..' ||
1589 'x_return_status = ' || x_return_status,
1590 p_msg_level=>fnd_log.level_statement);
1591 END IF;
1592
1593
1594 ----------------------------------------------------------
1595 --validate warehouse_id
1596 ----------------------------------------------------------
1597 --warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS
1598
1599 IF p_cust_account_rec.warehouse_id is NOT NULL AND
1600 p_cust_account_rec.warehouse_id <> FND_API.G_MISS_NUM
1601 AND ( p_create_update_flag = 'C' OR
1602 ( p_create_update_flag = 'U' AND
1603 p_cust_account_rec.warehouse_id <> NVL( l_warehouse_id, FND_API.G_MISS_NUM) ) )
1604 THEN
1605 check_warehouse(
1606 p_column => 'warehouse_id',
1607 p_column_value => p_cust_account_rec.warehouse_id,
1608 x_return_status => x_return_status );
1609 /*IF G_DEBUG THEN
1610 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1611 'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
1612 'x_return_status = ' || x_return_status, l_debug_prefix);
1613 END IF;
1614 */
1615
1616 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1617 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
1618 'x_return_status = ' || x_return_status,
1619 p_msg_level=>fnd_log.level_statement);
1620 END IF;
1621
1622 END IF;
1623 /*IF G_DEBUG THEN
1624 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1625 '(+) after validate warehouse_id..' ||
1626 'x_return_status = ' || x_return_status, l_debug_prefix );
1627 END IF;
1628 */
1629
1630 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1631 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate warehouse_id..' ||
1632 'x_return_status = ' || x_return_status,
1633 p_msg_level=>fnd_log.level_statement);
1634 END IF;
1635
1636
1637 ----------------------------------------------------------
1638 --validate date_type_preference
1639 ----------------------------------------------------------
1640 --date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups
1641
1642 IF p_cust_account_rec.date_type_preference is NOT NULL AND
1643 p_cust_account_rec.date_type_preference <> FND_API.G_MISS_CHAR
1644 AND ( p_create_update_flag = 'C' OR
1645 ( p_create_update_flag = 'U' AND
1646 p_cust_account_rec.date_type_preference <> NVL( l_date_type_preference, FND_API.G_MISS_CHAR) ) )
1647 THEN
1648 validate_lookup(
1649 p_column =>'date_type_preference',
1650 p_lookup_table =>'OE_LOOKUPS',
1651 p_lookup_type =>'REQUEST_DATE_TYPE',
1652 p_column_value =>p_cust_account_rec.date_type_preference,
1653 x_return_status =>x_return_status );
1654 /*IF G_DEBUG THEN
1655 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1656 'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
1657 'x_return_status = ' || x_return_status, l_debug_prefix);
1658 END IF;
1659 */
1660 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1661 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
1662 'x_return_status = ' || x_return_status,
1663 p_msg_level=>fnd_log.level_statement);
1664 END IF;
1665
1666 END IF;
1667 /*IF G_DEBUG THEN
1668 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1669 '(+) after validate date_type_preference..' ||
1670 'x_return_status = ' || x_return_status, l_debug_prefix );
1671 END IF;
1672 */
1673 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1674 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate date_type_preference..' ||
1675 'x_return_status = ' || x_return_status,
1676 p_msg_level=>fnd_log.level_statement);
1677 END IF;
1678
1679
1680 --------------------------------------
1681 -- validate primary_specialist_id
1682 --------------------------------------
1683
1684 -- primary_specialist_id is foreign key to per_all_people_f
1685 IF p_cust_account_rec.primary_specialist_id IS NOT NULL AND
1686 p_cust_account_rec.primary_specialist_id <> FND_API.G_MISS_NUM
1687 THEN
1688 check_per_all_people_f_fk (
1689 p_column => 'primary_specialist_id',
1690 p_column_value => p_cust_account_rec.primary_specialist_id,
1691 x_return_status => x_return_status );
1692
1693 /*IF G_DEBUG THEN
1694 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1695 'primary_specialist_id is foreign key to per_all_people_f. ' ||
1696 'x_return_status = ' || x_return_status, l_debug_prefix );
1697 END IF;
1698 */
1699 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1700 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'primary_specialist_id is foreign key to per_all_people_f. ' ||
1701 'x_return_status = ' || x_return_status,
1702 p_msg_level=>fnd_log.level_statement);
1703 END IF;
1704
1705
1706 END IF;
1707
1708 /*IF G_DEBUG THEN
1709 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1710 '(+) after validate primary_specialist_id ... ' ||
1711 'x_return_status = ' || x_return_status, l_debug_prefix );
1712 END IF;
1713 */
1714 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1715 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate primary_specialist_id ... ' ||
1716 'x_return_status = ' || x_return_status,
1717 p_msg_level=>fnd_log.level_statement);
1718 END IF;
1719
1720
1721 --------------------------------------
1722 -- validate secondary_specialist_id
1723 --------------------------------------
1724
1725 -- secondary_specialist_id is foreign key to per_all_people_f
1726 IF p_cust_account_rec.secondary_specialist_id IS NOT NULL AND
1727 p_cust_account_rec.secondary_specialist_id <> FND_API.G_MISS_NUM
1728 THEN
1729 check_per_all_people_f_fk (
1730 p_column => 'secondary_specialist_id',
1731 p_column_value => p_cust_account_rec.secondary_specialist_id,
1732 x_return_status => x_return_status );
1733
1734 /*IF G_DEBUG THEN
1735 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1736 'secondary_specialist_id is foreign key to per_all_people_f. ' ||
1737 'x_return_status = ' || x_return_status, l_debug_prefix );
1738 END IF;
1739 */
1740 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1741 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'secondary_specialist_id is foreign key to per_all_people_f. ' ||
1742 'x_return_status = ' || x_return_status,
1743 p_msg_level=>fnd_log.level_statement);
1744 END IF;
1745
1746 END IF;
1747
1748 /*IF G_DEBUG THEN
1749 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1750 '(+) after validate secondary_specialist_id ... ' ||
1751 'x_return_status = ' || x_return_status, l_debug_prefix );
1752 END IF;
1753 */
1754 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1755 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate secondary_specialist_id ... ' ||
1756 'x_return_status = ' || x_return_status,
1757 p_msg_level=>fnd_log.level_statement);
1758 END IF;
1759
1760 /* comment out the validation as the account_liable_flag column is obsoleted in r12
1761
1762 --------------------------------------
1763 -- validate account_liable_flag
1764 --------------------------------------
1765 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1766 -- account_liable_flag is lookup code in lookup type YES/NO
1767 IF p_cust_account_rec.account_liable_flag IS NOT NULL AND
1768 p_cust_account_rec.account_liable_flag <> FND_API.G_MISS_CHAR
1769 THEN
1770 validate_lookup (
1771 p_column => 'account_liable_flag',
1772 p_lookup_type => 'YES/NO',
1773 p_column_value => p_cust_account_rec.account_liable_flag,
1774 x_return_status => x_return_status );
1775
1776 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1777 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_liable_flag is lookup code in lookup type YES/NO. ' ||
1778 'x_return_status = ' || x_return_status,
1779 p_msg_level=>fnd_log.level_statement);
1780 END IF;
1781
1782 END IF;
1783
1784 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1785 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate account_liable_flag ... ' ||
1786 'x_return_status = ' || x_return_status,
1787 p_msg_level=>fnd_log.level_statement);
1788 END IF;
1789 END IF;
1790 */
1791
1792 --------------------------------------
1793 -- validate hold_bill_flag
1794 --------------------------------------
1795 /****Logical APIs - validation not required****/
1796 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1797 -- hold_bill_flag is lookup code in lookup type YES/NO
1798 IF p_cust_account_rec.hold_bill_flag IS NOT NULL AND
1799 p_cust_account_rec.hold_bill_flag <> FND_API.G_MISS_CHAR
1800 THEN
1801 validate_lookup (
1802 p_column => 'hold_bill_flag',
1803 p_lookup_type => 'YES/NO',
1804 p_column_value => p_cust_account_rec.hold_bill_flag,
1805 x_return_status => x_return_status );
1806
1807 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1808 hz_utility_v2pub.debug(p_message=>'hold_bill_flag is lookup code in lookup type YES/NO. ' ||
1809 'x_return_status = ' || x_return_status,
1810 p_prefix=>l_debug_prefix,
1811 p_msg_level=>fnd_log.level_statement);
1812 END IF;
1813
1814 END IF;
1815
1816 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1817 hz_utility_v2pub.debug(p_message=>'(+) after validate hold_bill_flag ... ' ||
1818 'x_return_status = ' || x_return_status,
1819 p_prefix=>l_debug_prefix,
1820 p_msg_level=>fnd_log.level_statement);
1821 END IF;
1822 END IF;
1823
1824 /* comment out the validation as the dormant_account_flag column is obsoleted in r12
1825
1826 --------------------------------------
1827 -- validate dormant_account_flag
1828 --------------------------------------
1829 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1830 -- dormant_account_flag is lookup code in lookup type YES/NO
1831 IF p_cust_account_rec.dormant_account_flag IS NOT NULL AND
1832 p_cust_account_rec.dormant_account_flag <> FND_API.G_MISS_CHAR
1833 THEN
1834 validate_lookup (
1835 p_column => 'dormant_account_flag',
1836 p_lookup_type => 'YES/NO',
1837 p_column_value => p_cust_account_rec.dormant_account_flag,
1838 x_return_status => x_return_status );
1839
1840 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1841 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'dormant_account_flag is lookup code in lookup type YES/NO. ' ||
1842 'x_return_status = ' || x_return_status,
1843 p_msg_level=>fnd_log.level_statement);
1844 END IF;
1845
1846 END IF;
1847
1848 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1849 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate dormant_account_flag ... ' ||
1850 'x_return_status = ' || x_return_status,
1851 p_msg_level=>fnd_log.level_statement);
1852 END IF;
1853 END IF;
1854 */
1855
1856 --------------------------------------
1857 -- validate ship_sets_include_lines_flag
1858 --------------------------------------
1859 /****Logical APIs - validation not required****/
1860 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1861 -- ship_sets_include_lines_flag is lookup code in lookup type YES/NO
1862 IF p_cust_account_rec.ship_sets_include_lines_flag IS NOT NULL AND
1863 p_cust_account_rec.ship_sets_include_lines_flag <> FND_API.G_MISS_CHAR
1864 AND ( p_create_update_flag = 'C' OR
1865 ( p_create_update_flag = 'U' AND
1866 p_cust_account_rec.ship_sets_include_lines_flag <> NVL( l_ship_sets_inc_lines_f, FND_API.G_MISS_CHAR) ) )
1867 THEN
1868 validate_lookup (
1869 p_column => 'ship_sets_include_lines_flag',
1870 p_lookup_type => 'YES/NO',
1871 p_column_value => p_cust_account_rec.ship_sets_include_lines_flag,
1872 x_return_status => x_return_status );
1873
1874 /*IF G_DEBUG THEN
1875 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1876 'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1877 'x_return_status = ' || x_return_status, l_debug_prefix );
1878 END IF;
1879 */
1880 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1881 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1882 'x_return_status = ' || x_return_status,
1883 p_msg_level=>fnd_log.level_statement);
1884 END IF;
1885
1886 END IF;
1887 END IF;
1888
1889 --if ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag
1890 --is always set to N.
1891
1892 IF (p_create_update_flag = 'C' or
1893 (p_create_update_flag ='U' and
1894 p_cust_account_rec.ship_sets_include_lines_flag <> NVL(l_ship_sets_inc_lines_f,FND_API.G_MISS_CHAR)))
1895 THEN
1896 IF p_cust_account_rec.ship_sets_include_lines_flag = 'Y'
1897 THEN
1898 BEGIN
1899 SELECT decode(p_cust_account_rec.ship_sets_include_lines_flag,p_cust_account_rec.arrivalsets_include_lines_flag,
1900 'N',l_arrivalsets_inc_lines_f,
1901 decode(p_cust_account_rec.arrivalsets_include_lines_flag,l_ship_sets_inc_lines_f, 'Y','N'),'Y')
1902 INTO l_dummy
1903 FROM DUAL;
1904 IF l_dummy <> 'Y'
1905 THEN
1906 FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
1907 FND_MESSAGE.SET_TOKEN('COLUMN1','ship_sets_include_lines_flag');
1908 FND_MESSAGE.SET_TOKEN('VALUE1','Y');
1909 FND_MESSAGE.SET_TOKEN('COLUMN2','arrivalsets_include_lines_flag');
1910 FND_MESSAGE.SET_TOKEN('VALUE2','N');
1911 FND_MSG_PUB.ADD;
1912 x_return_status := FND_API.G_RET_STS_ERROR;
1913 END IF;
1914 END ;
1915 END IF;
1916 END IF;
1917 /*IF G_DEBUG THEN
1918 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1919 'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
1920 'x_return_status = ' || x_return_status, l_debug_prefix);
1921 END IF;
1922 */
1923 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1924 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
1925 'x_return_status = ' || x_return_status,
1926 p_msg_level=>fnd_log.level_statement);
1927 END IF;
1928
1929
1930
1931 /*IF G_DEBUG THEN
1932 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1933 '(+) after validate arrivalsets_include_lines_flag ... ' ||
1934 'x_return_status = ' || x_return_status, l_debug_prefix );
1935 END IF;
1936 */
1937 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1938 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
1939 'x_return_status = ' || x_return_status,
1940 p_msg_level=>fnd_log.level_statement);
1941 END IF;
1942
1943
1944 --------------------------------------
1945 -- validate arrivalsets_include_lines_flag
1946 --------------------------------------
1947 /****Logical APIs - validation not required****/
1948 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1949 -- arrivalsets_include_lines_flag is lookup code in lookup type YES/NO
1950 IF p_cust_account_rec.arrivalsets_include_lines_flag IS NOT NULL AND
1951 p_cust_account_rec.arrivalsets_include_lines_flag <> FND_API.G_MISS_CHAR
1952 AND ( p_create_update_flag = 'C' OR
1953 ( p_create_update_flag = 'U' AND
1954 p_cust_account_rec.arrivalsets_include_lines_flag <> NVL( l_arrivalsets_inc_lines_f, FND_API.G_MISS_CHAR) ) )
1955 THEN
1956 validate_lookup (
1957 p_column => 'arrivalsets_include_lines_flag',
1958 p_lookup_type => 'YES/NO',
1959 p_column_value => p_cust_account_rec.arrivalsets_include_lines_flag,
1960 x_return_status => x_return_status );
1961
1962 /*IF G_DEBUG THEN
1963 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1964 'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1965 'x_return_status = ' || x_return_status, l_debug_prefix );
1966 END IF;
1967 */
1968 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1969 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1970 'x_return_status = ' || x_return_status,
1971 p_msg_level=>fnd_log.level_statement);
1972 END IF;
1973
1974 END IF;
1975 END IF;
1976
1977 --If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag
1978 --is always set to N.
1979
1980 IF (p_create_update_flag ='C' or
1981 (p_create_update_flag ='U' and
1982 p_cust_account_rec.arrivalsets_include_lines_flag <> NVL(l_arrivalsets_inc_lines_f,FND_API.G_MISS_CHAR)))
1983 THEN
1984 IF p_cust_account_rec.arrivalsets_include_lines_flag = 'Y'
1985 THEN
1986 BEGIN
1987 SELECT decode(p_cust_account_rec.arrivalsets_include_lines_flag,p_cust_account_rec.ship_sets_include_lines_flag,
1988 'N',l_ship_sets_inc_lines_f,
1989 decode(p_cust_account_rec.ship_sets_include_lines_flag,l_arrivalsets_inc_lines_f,
1990 'Y','N'),'Y')
1991 INTO l_dummy
1992 FROM DUAL;
1993 IF l_dummy <> 'Y'
1994 THEN
1995 FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
1996 FND_MESSAGE.SET_TOKEN('COLUMN1','arrivalsets_include_lines_flag');
1997 FND_MESSAGE.SET_TOKEN('VALUE1','Y');
1998 FND_MESSAGE.SET_TOKEN('COLUMN2','ship_sets_include_lines_flag');
1999 FND_MESSAGE.SET_TOKEN('VALUE2','N');
2000 FND_MSG_PUB.ADD;
2001 x_return_status := FND_API.G_RET_STS_ERROR;
2002 END IF;
2003 END ;
2004 END IF;
2005 END IF;
2006 /*IF G_DEBUG THEN
2007 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2008 'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always set to N. ' ||
2009 'x_return_status = ' || x_return_status, l_debug_prefix );
2010 END IF;
2011 */
2012 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2013 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always set to N. ' ||
2014 'x_return_status = ' || x_return_status,
2015 p_msg_level=>fnd_log.level_statement);
2016 END IF;
2017
2018
2019 /*IF G_DEBUG THEN
2020 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2021 '(+) after validate arrivalsets_include_lines_flag ... ' ||
2022 'x_return_status = ' || x_return_status, l_debug_prefix );
2023 END IF;
2024 */
2025 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2026 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
2027 'x_return_status = ' || x_return_status,
2028 p_msg_level=>fnd_log.level_statement);
2029 END IF;
2030
2031
2032 --------------------------------------
2033 -- validate sched_date_push_flag
2034 --------------------------------------
2035 /****Logical APIs - validation not required****/
2036 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2037 -- sched_date_push_flag is lookup code in lookup type YES/NO
2038 IF p_cust_account_rec.sched_date_push_flag IS NOT NULL AND
2039 p_cust_account_rec.sched_date_push_flag <> FND_API.G_MISS_CHAR
2040 THEN
2041 validate_lookup (
2042 p_column => 'sched_date_push_flag',
2043 p_lookup_type => 'YES/NO',
2044 p_column_value => p_cust_account_rec.sched_date_push_flag,
2045 x_return_status => x_return_status );
2046
2047 /*IF G_DEBUG THEN
2048 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2049 'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
2050 'x_return_status = ' || x_return_status, l_debug_prefix );
2051 END IF;
2052 */
2053 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2054 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
2055 'x_return_status = ' || x_return_status,
2056 p_msg_level=>fnd_log.level_statement);
2057 END IF;
2058
2059 END IF;
2060
2061 /*IF G_DEBUG THEN
2062 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2063 '(+) after validate sched_date_push_flag ... ' ||
2064 'x_return_status = ' || x_return_status, l_debug_prefix );
2065 END IF;
2066 */
2067 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2068 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate sched_date_push_flag ... ' ||
2069 'x_return_status = ' || x_return_status,
2070 p_msg_level=>fnd_log.level_statement);
2071 END IF;
2072 END IF;
2073
2074
2075 /* comment out the validation as the account_activation_date column
2076 and account_termination_date column are obsoleted in r12
2077
2078 ----------------------------------------------
2079 -- validate account_established_date and account_termination_date
2080 ----------------------------------------------
2081
2082 -- account_termination_date should be greater than account_established_date
2083 validate_start_end_date (
2084 p_create_update_flag => p_create_update_flag,
2085 p_start_date_column_name => 'account_established_date',
2086 p_start_date => p_cust_account_rec.account_established_date,
2087 p_old_start_date => l_account_established_date,
2088 p_end_date_column_name => 'account_termination_date',
2089 p_end_date => p_cust_account_rec.account_termination_date,
2090 p_old_end_date => l_account_termination_date,
2091 x_return_status => x_return_status );
2092
2093 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2094 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_termination_date should be greater than account_established_date. ' ||
2095 'x_return_status = ' || x_return_status,
2096 p_msg_level=>fnd_log.level_statement);
2097 END IF;
2098
2099 ----------------------------------------------
2100 -- validate account_established_date and account_activation_date
2101 ----------------------------------------------
2102
2103 -- account_activation_date should be greater than account_established_date
2104 validate_start_end_date (
2105 p_create_update_flag => p_create_update_flag,
2106 p_start_date_column_name => 'account_established_date',
2107 p_start_date => p_cust_account_rec.account_established_date,
2108 p_old_start_date => l_account_established_date,
2109 p_end_date_column_name => 'account_activation_date',
2110 p_end_date => p_cust_account_rec.account_activation_date,
2111 p_old_end_date => l_account_activation_date,
2112 x_return_status => x_return_status );
2113
2114 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2115 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_activation_date should be greater than account_established_date. ' ||
2116 'x_return_status = ' || x_return_status,
2117 p_msg_level=>fnd_log.level_statement);
2118 END IF;
2119
2120
2121 ----------------------------------------------
2122 -- validate account_activation_date and account_termination_date
2123 ----------------------------------------------
2124
2125 -- account_termination_date should be greater than account_activation_date
2126 validate_start_end_date (
2127 p_create_update_flag => p_create_update_flag,
2128 p_start_date_column_name => 'account_activation_date',
2129 p_start_date => p_cust_account_rec.account_activation_date,
2130 p_old_start_date => l_account_activation_date,
2131 p_end_date_column_name => 'account_termination_date',
2132 p_end_date => p_cust_account_rec.account_termination_date,
2133 p_old_end_date => l_account_termination_date,
2134 x_return_status => x_return_status );
2135
2136 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2137 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_termination_date should be greater than account_activation_date. ' ||
2138 'x_return_status = ' || x_return_status,
2139 p_msg_level=>fnd_log.level_statement);
2140 END IF;
2141 */
2142
2143 --------------------------------------
2144 -- validate autopay_flag
2145 --------------------------------------
2146 /****Logical APIs - validation not required****/
2147 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2148 -- autopay_flag is lookup code in lookup type YES/NO
2149 IF p_cust_account_rec.autopay_flag IS NOT NULL AND
2150 p_cust_account_rec.autopay_flag <> FND_API.G_MISS_CHAR
2151 THEN
2152 validate_lookup (
2153 p_column => 'autopay_flag',
2154 p_lookup_type => 'YES/NO',
2155 p_column_value => p_cust_account_rec.autopay_flag,
2156 x_return_status => x_return_status );
2157
2158 /*IF G_DEBUG THEN
2159 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2160 'autopay_flag is lookup code in lookup type YES/NO. ' ||
2161 'x_return_status = ' || x_return_status, l_debug_prefix );
2162 END IF;
2163 */
2164 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2165 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'autopay_flag is lookup code in lookup type YES/NO. ' ||
2166 'x_return_status = ' || x_return_status,
2167 p_msg_level=>fnd_log.level_statement);
2168 END IF;
2169
2170 END IF;
2171
2172 /*IF G_DEBUG THEN
2173 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2174 '(+) after validate autopay_flag ... ' ||
2175 'x_return_status = ' || x_return_status, l_debug_prefix );
2176 END IF;
2177 */
2178 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2179 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate autopay_flag ... ' ||
2180 'x_return_status = ' || x_return_status,
2181 p_msg_level=>fnd_log.level_statement);
2182 END IF;
2183 END IF;
2184
2185 /* comment out the validation as the title column is obsoleted in r12
2186
2187 --------------------------------------
2188 -- validate notify_flag
2189 --------------------------------------
2190 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2191 -- notify_flag is lookup code in lookup type YES/NO
2192 IF p_cust_account_rec.notify_flag IS NOT NULL AND
2193 p_cust_account_rec.notify_flag <> FND_API.G_MISS_CHAR
2194 THEN
2195 validate_lookup (
2196 p_column => 'notify_flag',
2197 p_lookup_type => 'YES/NO',
2198 p_column_value => p_cust_account_rec.notify_flag,
2199 x_return_status => x_return_status );
2200
2201 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2202 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'notify_flag is lookup code in lookup type YES/NO. ' ||
2203 'x_return_status = ' || x_return_status,
2204 p_msg_level=>fnd_log.level_statement);
2205 END IF;
2206
2207 END IF;
2208
2209 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2210 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate notify_flag ... ' ||
2211 'x_return_status = ' || x_return_status,
2212 p_msg_level=>fnd_log.level_statement);
2213 END IF;
2214 END IF;
2215 */
2216
2217 --------------------------------------
2218 -- validate ship_via
2219 --------------------------------------
2220
2221 -- ship_via is foreign key to oe_ship_methods_v
2222 -- can be used only in single org case.
2223 IF p_cust_account_rec.ship_via IS NOT NULL AND
2224 p_cust_account_rec.ship_via <> FND_API.G_MISS_CHAR AND
2225 ( p_create_update_flag = 'C' OR
2226 ( p_create_update_flag = 'U' AND
2227 p_cust_account_rec.ship_via <> NVL( l_ship_via, FND_API.G_MISS_CHAR ) ) )
2228 THEN
2229 check_oe_ship_methods_v_fk (
2230 p_entity => 'ACCOUNT',
2231 p_column => 'ship_via',
2232 p_column_value => p_cust_account_rec.ship_via,
2233 x_return_status => x_return_status );
2234
2235 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2236 hz_utility_v2pub.debug(p_message=>'ship_via is foreign key to oe_ship_methods_v and can be used only in single org case. ' ||
2237 'x_return_status = ' || x_return_status,
2238 p_prefix=>l_debug_prefix,
2239 p_msg_level=>fnd_log.level_statement);
2240 END IF;
2241
2242 END IF;
2243
2244 /*IF G_DEBUG THEN
2245 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2246 '(+) after validate ship_via ... ' ||
2247 'x_return_status = ' || x_return_status, l_debug_prefix );
2248 END IF;
2249 */
2250 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2251 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate ship_via ... ' ||
2252 'x_return_status = ' || x_return_status,
2253 p_msg_level=>fnd_log.level_statement);
2254 END IF;
2255
2256
2257 --------------------------------------
2258 -- validate selling_party_id
2259 --------------------------------------
2260
2261 -- selling_party_id is foreign key of hz_parties
2262 IF p_cust_account_rec.selling_party_id IS NOT NULL AND
2263 p_cust_account_rec.selling_party_id <> FND_API.G_MISS_NUM
2264 THEN
2265 check_party_fk (
2266 p_column => 'selling_party_id',
2267 p_column_value => p_cust_account_rec.selling_party_id,
2268 x_return_status => x_return_status );
2269
2270 /*IF G_DEBUG THEN
2271 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2272 'selling_party_id is foreign key of hz_parties. ' ||
2273 'x_return_status = ' || x_return_status, l_debug_prefix );
2274 END IF;
2275 */
2276 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2277 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'selling_party_id is foreign key of hz_parties. ' ||
2278 'x_return_status = ' || x_return_status,
2279 p_msg_level=>fnd_log.level_statement);
2280 END IF;
2281
2282 END IF;
2283
2284 /*IF G_DEBUG THEN
2285 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2286 '(+) after validate selling_party_id ... ' ||
2287 'x_return_status = ' || x_return_status, l_debug_prefix );
2288 END IF;
2289 */
2290 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2291 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate selling_party_id ... ' ||
2292 'x_return_status = ' || x_return_status,
2293 p_msg_level=>fnd_log.level_statement);
2294 END IF;
2295
2296
2297 --------------------------------------
2298 -- validate created_by_module
2299 --------------------------------------
2300
2301 validate_created_by_module(
2302 p_create_update_flag => p_create_update_flag,
2303 p_created_by_module => p_cust_account_rec.created_by_module,
2304 p_old_created_by_module => l_created_by_module,
2305 x_return_status => x_return_status);
2306
2307 --------------------------------------
2308 -- validate application_id
2309 --------------------------------------
2310
2311 validate_application_id(
2312 p_create_update_flag => p_create_update_flag,
2313 p_application_id => p_cust_account_rec.application_id,
2314 p_old_application_id => l_application_id,
2315 x_return_status => x_return_status);
2316
2317 --ER#13337184
2318 --Validate procedure called to validate FV attributes
2319 validate_fv_attributes(
2320 p_create_update_flag => p_create_update_flag,
2321 p_cust_account_rec => p_cust_account_rec,
2322 p_rowid => p_rowid,
2323 x_return_status => x_return_status);
2324 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2325 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate_fv_attributes call ' ||
2326 'x_return_status = ' || x_return_status,
2327 p_msg_level=>fnd_log.level_statement);
2328 END IF;
2329
2330 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2331 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_cust_account (-)',
2332 p_msg_level=>fnd_log.level_procedure);
2333 END IF;
2334
2335 END validate_cust_account;
2336
2337 /**
2338 * PROCEDURE validate_cust_acct_relate
2339 *
2340 * DESCRIPTION
2341 * Validates customer account relate record. Checks for
2342 * uniqueness
2343 * lookup types
2344 * mandatory columns
2345 * non-updateable fields
2346 * foreign key validations
2347 * other validations
2348 *
2349 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2350 *
2351 * ARGUMENTS
2352 * IN:
2353 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
2354 * p_cust_account_rec Customer account relate record.
2355 * p_rowid Rowid of the record (used only in update mode).
2356 * IN/OUT:
2357 * x_return_status Return status after the call. The status can
2358 * be FND_API.G_RET_STS_SUCCESS (success),
2359 * FND_API.G_RET_STS_ERROR (error),
2360 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2361 *
2362 * NOTES
2363 *
2364 * MODIFICATION HISTORY
2365 *
2366 * 07-23-2001 Jianying Huang o Created.
2367 * 10-04-2003 Rajib Ranjan Borah o Bug 2985448.Only active relationships will be considered
2368 * while checking for duplicates.
2369 * 12-MAY-2005 Rajib Ranjan Borah o TCA SSA Uptake (Bug 3456489)
2370 * 12-AUG-2205 Idris Ali o Bug 4529413:Replaced p_rowid with p_cust_acct_relate_id.
2371 */
2372
2373 PROCEDURE validate_cust_acct_relate (
2374 p_create_update_flag IN VARCHAR2,
2375 p_cust_acct_relate_rec IN HZ_CUST_ACCOUNT_V2PUB.CUST_ACCT_RELATE_REC_TYPE,
2376 p_cust_acct_relate_id IN NUMBER, -- Bug 4529413
2377 x_return_status IN OUT NOCOPY VARCHAR2
2378 ) IS
2379
2380 l_debug_prefix VARCHAR2(30) := '';
2381 l_dummy VARCHAR2(1);
2382 l_customer_reciprocal_flag HZ_CUST_ACCT_RELATE.customer_reciprocal_flag%TYPE;
2383 l_created_by_module HZ_CUST_ACCT_RELATE.created_by_module%TYPE;
2384 l_application_id NUMBER;
2385 l_relationship_type HZ_CUST_ACCT_RELATE.relationship_type%TYPE;
2386 l_status HZ_CUST_ACCT_RELATE.status%TYPE;
2387
2388 BEGIN
2389
2390 -- Check if API is called in debug mode. If yes, enable debug.
2391 --enable_debug;
2392
2393 -- Debug info.
2394
2395 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2396 hz_utility_v2pub.debug(p_message=>'validate_cust_acct_relate (+)',
2397 p_prefix=>l_debug_prefix,
2398 p_msg_level=>fnd_log.level_procedure);
2399 END IF;
2400
2401
2402 -- Select fields for later use during update.
2403 IF p_create_update_flag = 'U' THEN
2404 SELECT CUSTOMER_RECIPROCAL_FLAG, CREATED_BY_MODULE, APPLICATION_ID,
2405 RELATIONSHIP_TYPE, STATUS
2406 INTO l_customer_reciprocal_flag, l_created_by_module, l_application_id,
2407 l_relationship_type, l_status
2408 FROM HZ_CUST_ACCT_RELATE_ALL -- Bug 3456489
2409 WHERE CUST_ACCT_RELATE_ID = p_cust_acct_relate_id;
2410 END IF;
2411
2412 --------------------------------------
2413 -- validate cust_account_id
2414 --------------------------------------
2415 /****Logical APIs - validation not required****/
2416 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2417 -- cust_account_id is mandatory field
2418 IF (p_create_update_flag <> 'U') OR
2419 (p_cust_acct_relate_rec.cust_acct_relate_id is NULL) -- Bug 4529413
2420 THEN
2421 validate_mandatory (
2422 p_create_update_flag => p_create_update_flag,
2423 p_column => 'cust_account_id',
2424 p_column_value => p_cust_acct_relate_rec.cust_account_id,
2425 p_restricted => 'Y',
2426 x_return_status => x_return_status );
2427
2428 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2429 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'cust_account_id is mandatory. ' ||
2430 'x_return_status = ' || x_return_status,
2431 p_msg_level=>fnd_log.level_statement);
2432 END IF;
2433 END IF;
2434
2435 -- since cust account id is part of primary key, we do not need to
2436 -- check non-updateable.
2437
2438 -- cust_account_id is foreign key of hz_cust_accounts
2439 IF p_create_update_flag = 'C' AND
2440 p_cust_acct_relate_rec.cust_account_id IS NOT NULL AND
2441 p_cust_acct_relate_rec.cust_account_id <> FND_API.G_MISS_NUM
2442 THEN
2443 check_cust_account_fk (
2444 p_column => 'cust_account_id',
2445 p_column_value => p_cust_acct_relate_rec.cust_account_id,
2446 x_return_status => x_return_status );
2447
2448 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2449 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key of hz_cust_accounts. ' ||
2450 'x_return_status = ' || x_return_status,
2451 p_prefix=>l_debug_prefix,
2452 p_msg_level=>fnd_log.level_statement);
2453 END IF;
2454 END IF;
2455
2456 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2457 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate cust_account_id ... ' ||
2458 'x_return_status = ' || x_return_status,
2459 p_msg_level=>fnd_log.level_statement);
2460 END IF;
2461 END IF;
2462
2463 --------------------------------------
2464 -- validate related_cust_account_id
2465 --------------------------------------
2466 /****Logical APIs - validation not required****/
2467 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2468 -- related_cust_account_id is mandatory field
2469 IF (p_create_update_flag <> 'U') OR
2470 (p_cust_acct_relate_rec.cust_acct_relate_id is NULL) -- Bug 4529413
2471 THEN
2472 validate_mandatory (
2473 p_create_update_flag => p_create_update_flag,
2474 p_column => 'related_cust_account_id',
2475 p_column_value => p_cust_acct_relate_rec.related_cust_account_id,
2476 p_restricted => 'Y',
2477 x_return_status => x_return_status );
2478
2479 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2480 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'related_cust_account_id is mandatory. ' ||
2481 'x_return_status = ' || x_return_status,
2482 p_msg_level=>fnd_log.level_statement);
2483 END IF;
2484 END IF;
2485
2486 -- since related_cust account id is part of primary key, we do not need to
2487 -- check non-updateable.
2488
2489 -- related_cust_account_id is foreign key of hz_cust_accounts
2490 IF p_create_update_flag = 'C' AND
2491 p_cust_acct_relate_rec.related_cust_account_id IS NOT NULL AND
2492 p_cust_acct_relate_rec.related_cust_account_id <> FND_API.G_MISS_NUM
2493 THEN
2494 check_cust_account_fk (
2495 p_column => 'related_cust_account_id',
2496 p_column_value => p_cust_acct_relate_rec.related_cust_account_id,
2497 x_return_status => x_return_status );
2498
2499 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2500 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'related_cust_account_id is foreign key of hz_cust_accounts. ' ||
2501 'x_return_status = ' || x_return_status,
2502 p_msg_level=>fnd_log.level_statement);
2503 END IF;
2504
2505 END IF;
2506 END IF;
2507
2508 -- combination of cust_account_id and related_cust_account_id should be unique.
2509 -- we do not need to check this in update mode because there two columns
2510 -- are primary key.
2511 IF p_create_update_flag = 'C' THEN
2512 BEGIN
2513 SELECT 'Y' INTO l_dummy
2514 FROM HZ_CUST_ACCT_RELATE_ALL -- Bug 3456489
2515 WHERE CUST_ACCOUNT_ID = p_cust_acct_relate_rec.cust_account_id
2516 AND RELATED_CUST_ACCOUNT_ID = p_cust_acct_relate_rec.related_cust_account_id
2517 --Bug 2985448
2518 AND STATUS='A'
2519 AND ORG_ID = p_cust_acct_relate_rec.org_id; -- Bug 3456489
2520
2521 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_REL_ALREADY_EXISTS' );
2522 FND_MSG_PUB.ADD;
2523 x_return_status := FND_API.G_RET_STS_ERROR;
2524
2525 EXCEPTION
2526 WHEN NO_DATA_FOUND THEN
2527 NULL;
2528 END;
2529
2530 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2531 hz_utility_v2pub.debug(p_message=>'combination of cust_account_id and related_cust_account_id should be unique. ' ||
2532 'x_return_status = ' || x_return_status,
2533 p_prefix =>l_debug_prefix,
2534 p_msg_level=>fnd_log.level_statement);
2535 END IF;
2536 END IF;
2537
2538 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2539 hz_utility_v2pub.debug(p_message=>'(+) after validate related_cust_account_id ... ' ||
2540 'x_return_status = ' || x_return_status,
2541 p_prefix =>l_debug_prefix,
2542 p_msg_level=>fnd_log.level_statement);
2543 END IF;
2544
2545 --------------------------------------
2546 -- validate customer_reciprocal_flag
2547 --------------------------------------
2548
2549 /****Logical APIs - validation not required****/
2550 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2551 -- donot need to check customer_reciprocal_flag mandatory
2552 -- because customer_reciprocal_flag is non-updateable and it is defaulted
2553 -- to 'N' during insert
2554
2555 -- customer_reciprocal_flag is non-updateable
2556 IF p_create_update_flag = 'U' AND
2557 p_cust_acct_relate_rec.customer_reciprocal_flag IS NOT NULL
2558 THEN
2559 validate_nonupdateable (
2560 p_column => 'customer_reciprocal_flag',
2561 p_column_value => p_cust_acct_relate_rec.customer_reciprocal_flag,
2562 p_old_column_value => l_customer_reciprocal_flag,
2563 x_return_status => x_return_status );
2564
2565 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2566 hz_utility_v2pub.debug(p_message=>'customer_reciprocal_flag is non-updateable. ' ||
2567 'x_return_status = ' || x_return_status,
2568 p_prefix =>l_debug_prefix,
2569 p_msg_level=>fnd_log.level_statement);
2570 END IF;
2571
2572 END IF;
2573
2574 -- customer_reciprocal_flag is lookup code in lookup type YES/NO
2575 -- Since customer_reciprocal_flag is non-updateable, we only need to do
2576 -- checking during create.
2577
2578 IF p_create_update_flag = 'C' AND
2579 p_cust_acct_relate_rec.customer_reciprocal_flag IS NOT NULL AND
2580 p_cust_acct_relate_rec.customer_reciprocal_flag <> FND_API.G_MISS_CHAR
2581 THEN
2582 validate_lookup (
2583 p_column => 'customer_reciprocal_flag',
2584 p_lookup_type => 'YES/NO',
2585 p_column_value => p_cust_acct_relate_rec.customer_reciprocal_flag,
2586 x_return_status => x_return_status );
2587
2588
2589 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2590 hz_utility_v2pub.debug(p_message=>'customer_reciprocal_flag is lookup code in lookup type YES/NO. ' ||
2591 'x_return_status = ' || x_return_status,
2592 p_prefix =>l_debug_prefix,
2593 p_msg_level=>fnd_log.level_statement);
2594 END IF;
2595 END IF;
2596
2597
2598 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2599 hz_utility_v2pub.debug(p_message=>'(+) after validate customer_reciprocal_flag ... ' ||
2600 'x_return_status = ' || x_return_status,
2601 p_prefix =>l_debug_prefix,
2602 p_msg_level=>fnd_log.level_statement);
2603 END IF;
2604 END IF;
2605 --------------------------------------
2606 -- validate relationship_type
2607 --------------------------------------
2608
2609 -- relationship_type is lookup code in lookup type RELATIONSHIP_TYPE
2610 IF p_cust_acct_relate_rec.relationship_type IS NOT NULL AND
2611 p_cust_acct_relate_rec.relationship_type <> FND_API.G_MISS_CHAR AND
2612 ( p_create_update_flag = 'C' OR
2613 ( p_create_update_flag = 'U' AND
2614 p_cust_acct_relate_rec.relationship_type <> NVL( l_relationship_type, FND_API.G_MISS_CHAR ) ) )
2615 THEN
2616 validate_lookup (
2617 p_column => 'relationship_type',
2618 p_lookup_type => 'RELATIONSHIP_TYPE',
2619 p_column_value => p_cust_acct_relate_rec.relationship_type,
2620 x_return_status => x_return_status );
2621
2622
2623 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2624 hz_utility_v2pub.debug(p_message=>'relationship_type is lookup code in lookup type RELATIONSHIP_TYPE. ' ||
2625 'x_return_status = ' || x_return_status,
2626 p_prefix =>l_debug_prefix,
2627 p_msg_level=>fnd_log.level_statement);
2628 END IF;
2629 END IF;
2630
2631
2632 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2633 hz_utility_v2pub.debug(p_message=>'(+) after validate relationship_type ... ' ||
2634 'x_return_status = ' || x_return_status,
2635 p_prefix =>l_debug_prefix,
2636 p_msg_level=>fnd_log.level_statement);
2637 END IF;
2638 --------------------------------------
2639 -- validate status
2640 --------------------------------------
2641
2642 -- status cannot be set to null during update
2643 IF p_create_update_flag = 'U' AND
2644 p_cust_acct_relate_rec.status IS NOT NULL
2645 THEN
2646 validate_cannot_update_to_null (
2647 p_column => 'status',
2648 p_column_value => p_cust_acct_relate_rec.status,
2649 x_return_status => x_return_status );
2650
2651 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2652 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
2653 'x_return_status = ' || x_return_status,
2654 p_prefix =>l_debug_prefix,
2655 p_msg_level=>fnd_log.level_statement);
2656 END IF;
2657 END IF;
2658
2659 /****Logical APIs - validation not required****/
2660 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2661 -- status is lookup code in lookup type CODE_STATUS
2662 IF p_cust_acct_relate_rec.status IS NOT NULL AND
2663 p_cust_acct_relate_rec.status <> FND_API.G_MISS_CHAR AND
2664 ( p_create_update_flag = 'C' OR
2665 ( p_create_update_flag = 'U' AND
2666 p_cust_acct_relate_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
2667 THEN
2668 validate_lookup (
2669 p_column => 'status',
2670 p_lookup_type => 'CODE_STATUS',
2671 p_column_value => p_cust_acct_relate_rec.status,
2672 x_return_status => x_return_status );
2673
2674
2675 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2676 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
2677 'x_return_status = ' || x_return_status,
2678 p_prefix =>l_debug_prefix,
2679 p_msg_level=>fnd_log.level_statement);
2680 END IF;
2681 END IF;
2682 END IF;
2683
2684 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2685 hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
2686 'x_return_status = ' || x_return_status,
2687 p_prefix =>l_debug_prefix,
2688 p_msg_level=>fnd_log.level_statement);
2689 END IF;
2690 --------------------------------------
2691 -- validate created_by_module
2692 --------------------------------------
2693
2694 validate_created_by_module(
2695 p_create_update_flag => p_create_update_flag,
2696 p_created_by_module => p_cust_acct_relate_rec.created_by_module,
2697 p_old_created_by_module => l_created_by_module,
2698 x_return_status => x_return_status);
2699
2700 --------------------------------------
2701 -- validate application_id
2702 --------------------------------------
2703
2704 validate_application_id(
2705 p_create_update_flag => p_create_update_flag,
2706 p_application_id => p_cust_acct_relate_rec.application_id,
2707 p_old_application_id => l_application_id,
2708 x_return_status => x_return_status);
2709
2710 -- Debug info.
2711
2712 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2713 hz_utility_v2pub.debug(p_message=>' validate_cust_acct_relate (-)',
2714 p_prefix=>l_debug_prefix,
2715 p_msg_level=>fnd_log.level_procedure);
2716 END IF;
2717
2718 END validate_cust_acct_relate;
2719
2720 /**
2721 * PROCEDURE validate_customer_profile
2722 *
2723 * DESCRIPTION
2724 * Validates customer profile record. Checks for
2725 * uniqueness
2726 * lookup types
2727 * mandatory columns
2728 * non-updateable fields
2729 * foreign key validations
2730 * other validations
2731 *
2732 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2733 *
2734 * ARGUMENTS
2735 * IN:
2736 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
2737 * p_customer_profile_rec Customer profile record.
2738 * p_rowid Rowid of the record (used only in update mode).
2739 * IN/OUT:
2740 * x_return_status Return status after the call. The status can
2741 * be FND_API.G_RET_STS_SUCCESS (success),
2742 * FND_API.G_RET_STS_ERROR (error),
2743 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2744 *
2745 * NOTES
2746 *
2747 * MODIFICATION HISTORY
2748 *
2749 * 07-23-2001 Jianying Huang o Created.
2750 * 11-08-2001 P.Suresh * Bug No : 1999532. Added validations as present in
2751 * customer standard form and interface.
2752 * 12-05-2001 P.Suresh * Bug No : 2125994. Commented the mandatory check
2753 * on charge_on_finance_charge_flag when interest
2754 * charge is 'Y'.
2755 * 16-09-2002 P.Suresh * Bug No : 2441092. Added a condition that the
2756 * discount_terms should be 'Y' when defaulting the
2757 * discount_grace_days from the hz_cust_profile_classes.
2758 * 05-30-2003 Ramesh Ch * Bug No : 2884220. Added a condition that the
2759 * interest_charges should be 'Y' when initializing
2760 * the interest_period_days from the hz_cust_profile_classes.
2761 * 06-23-2003 Ramesh Ch Bug No : 2884220. Added a condition that the dunning_letters,send_statements
2762 * should be 'Y' when initializing the dunning_letter_set_id,statement_cycle_id resp
2763 * from the hz_cust_profile_classes.
2764 *
2765 */
2766
2767 PROCEDURE validate_customer_profile (
2768 p_create_update_flag IN VARCHAR2,
2769 p_customer_profile_rec IN HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
2770 p_rowid IN ROWID,
2771 x_return_status IN OUT NOCOPY VARCHAR2
2772 ) IS
2773
2774 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_customer_profile'
2775
2776 l_dummy VARCHAR2(1);
2777
2778 l_cust_account_id NUMBER;
2779 l_collector_id NUMBER;
2780 l_profile_class_id NUMBER;
2781 l_site_use_id NUMBER;
2782 l_cust_acct_site_id NUMBER;
2783 l_class_status HZ_CUST_PROFILE_CLASSES.status%TYPE;
2784 l_profile_class_name HZ_CUST_PROFILE_CLASSES.name%TYPE;
2785 l_created_by_module HZ_CUSTOMER_PROFILES.created_by_module%TYPE;
2786 l_application_id NUMBER;
2787 l_credit_rating HZ_CUSTOMER_PROFILES.credit_rating%TYPE;
2788 l_risk_code HZ_CUSTOMER_PROFILES.risk_code%TYPE;
2789 l_status HZ_CUSTOMER_PROFILES.status%TYPE;
2790 l_profile_class_rec HZ_CUST_PROFILE_CLASSES%ROWTYPE;
2791 v_customer_profile_rec HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE
2792 := p_customer_profile_rec;
2793 l_discount_terms HZ_CUSTOMER_PROFILES.discount_terms%TYPE;
2794 l_discount_grace_days HZ_CUSTOMER_PROFILES.discount_grace_days%TYPE;
2795 l_dunning_letters HZ_CUSTOMER_PROFILES.dunning_letters%TYPE;
2796 l_dunning_letter_set_id HZ_CUSTOMER_PROFILES.dunning_letter_set_id%TYPE;
2797 l_send_statements HZ_CUSTOMER_PROFILES.send_statements%TYPE;
2798 l_statement_cycle_id HZ_CUSTOMER_PROFILES.statement_cycle_id%TYPE;
2799 l_credit_balance_statements HZ_CUSTOMER_PROFILES.credit_balance_statements%TYPE;
2800 l_interest_charges HZ_CUSTOMER_PROFILES.interest_charges%TYPE;
2801 l_finance_charge_flag HZ_CUSTOMER_PROFILES.charge_on_finance_charge_flag%TYPE;
2802 l_interest_period_days HZ_CUSTOMER_PROFILES.interest_period_days%TYPE;
2803
2804 l_account_status HZ_CUSTOMER_PROFILES.ACCOUNT_STATUS%TYPE;
2805 l_tolerance HZ_CUSTOMER_PROFILES.TOLERANCE%TYPE;
2806 l_percent_collectable HZ_CUSTOMER_PROFILES.PERCENT_COLLECTABLE%TYPE;
2807 l_standard_terms HZ_CUSTOMER_PROFILES.STANDARD_TERMS%TYPE;
2808 l_override_terms HZ_CUSTOMER_PROFILES.OVERRIDE_TERMS%TYPE;
2809 l_lockbox_matching_option HZ_CUSTOMER_PROFILES.LOCKBOX_MATCHING_OPTION%TYPE;
2810 l_autocash_hierarchy_id HZ_CUSTOMER_PROFILES.AUTOCASH_HIERARCHY_ID%TYPE;
2811 l_autocash_hierarchy_id_for_ad HZ_CUSTOMER_PROFILES.AUTOCASH_HIERARCHY_ID_FOR_ADR%TYPE;
2812 l_clearing_days HZ_CUSTOMER_PROFILES.CLEARING_DAYS%TYPE;
2813 l_payment_grace_days HZ_CUSTOMER_PROFILES.PAYMENT_GRACE_DAYS%TYPE;
2814 l_grouping_rule_id HZ_CUSTOMER_PROFILES.GROUPING_RULE_ID%TYPE;
2815 l_tax_printing_option HZ_CUSTOMER_PROFILES.TAX_PRINTING_OPTION%TYPE;
2816 l_review_cycle HZ_CUSTOMER_PROFILES.REVIEW_CYCLE%TYPE;
2817 l_last_credit_review_date HZ_CUSTOMER_PROFILES.LAST_CREDIT_REVIEW_DATE%TYPE;
2818 l_next_credit_review_date HZ_CUSTOMER_PROFILES.NEXT_CREDIT_REVIEW_DATE%TYPE;
2819 l_party_id HZ_CUSTOMER_PROFILES.PARTY_ID%TYPE;
2820 l_credit_classification HZ_CUSTOMER_PROFILES.CREDIT_CLASSIFICATION%TYPE;
2821
2822 l_cust_acct_site_use_code HZ_CUST_SITE_USES.SITE_USE_CODE%TYPE;
2823 l_return_status VARCHAR2(1);
2824 l_org_id HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
2825
2826 l_ckeck_acc_bfb_enabled VARCHAR2(1);
2827 ll_cons_inv_flag VARCHAR2(1);
2828
2829 -- Added following variables for late charge policy project.
2830 l_late_charge_calculation_trx HZ_CUSTOMER_PROFILES.LATE_CHARGE_CALCULATION_TRX%TYPE;
2831 l_credit_items_flag HZ_CUSTOMER_PROFILES.CREDIT_ITEMS_FLAG%TYPE;
2832 l_disputed_transactions_flag HZ_CUSTOMER_PROFILES.DISPUTED_TRANSACTIONS_FLAG%TYPE;
2833 l_late_charge_type HZ_CUSTOMER_PROFILES.LATE_CHARGE_TYPE%TYPE;
2834 l_late_charge_term_id HZ_CUSTOMER_PROFILES.LATE_CHARGE_TERM_ID%TYPE;
2835 l_interest_calculation_period HZ_CUSTOMER_PROFILES.INTEREST_CALCULATION_PERIOD%TYPE;
2836 l_hold_charged_invoices_flag HZ_CUSTOMER_PROFILES.HOLD_CHARGED_INVOICES_FLAG%TYPE;
2837 l_message_Text_id HZ_CUSTOMER_PROFILES.MESSAGE_TEXT_ID%TYPE;
2838 l_multiple_Interest_Rates_flag HZ_CUSTOMER_PROFILES.MULTIPLE_INTEREST_RATES_FLAG%TYPE;
2839 l_charge_begin_date HZ_CUSTOMER_PROFILES.CHARGE_BEGIN_DATE%TYPE;
2840 l_automatch_set_id HZ_CUSTOMER_PROFILES.AUTOMATCH_SET_ID%TYPE;
2841
2842 BEGIN
2843
2844 -- Check if API is called in debug mode. If yes, enable debug.
2845 --enable_debug;
2846
2847 -- Debug info.
2848
2849 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2850 hz_utility_v2pub.debug(p_message=> 'validate_customer_profile (+)',
2851 p_prefix=>l_debug_prefix,
2852 p_msg_level=>fnd_log.level_procedure);
2853 END IF;
2854 -- Select fields for later use during update.
2855 IF p_create_update_flag = 'U'
2856 THEN
2857
2858 SELECT CUST_ACCOUNT_ID, SITE_USE_ID, CREATED_BY_MODULE, APPLICATION_ID,
2859 CREDIT_RATING, RISK_CODE, STATUS,DISCOUNT_TERMS,
2860 DISCOUNT_GRACE_DAYS,DUNNING_LETTERS,DUNNING_LETTER_SET_ID,
2861 SEND_STATEMENTS,STATEMENT_CYCLE_ID,CREDIT_BALANCE_STATEMENTS,
2862 INTEREST_CHARGES,CHARGE_ON_FINANCE_CHARGE_FLAG,
2863 INTEREST_PERIOD_DAYS,ACCOUNT_STATUS,TOLERANCE,PERCENT_COLLECTABLE,
2864 STANDARD_TERMS,OVERRIDE_TERMS,LOCKBOX_MATCHING_OPTION,
2865 AUTOCASH_HIERARCHY_ID,AUTOCASH_HIERARCHY_ID_FOR_ADR,
2866 CLEARING_DAYS,PAYMENT_GRACE_DAYS,GROUPING_RULE_ID,
2867 TAX_PRINTING_OPTION,
2868 REVIEW_CYCLE,LAST_CREDIT_REVIEW_DATE,NEXT_CREDIT_REVIEW_DATE,PARTY_ID,
2869 CREDIT_CLASSIFICATION, LATE_CHARGE_CALCULATION_TRX, CREDIT_ITEMS_FLAG,
2870 DISPUTED_TRANSACTIONS_FLAG, LATE_CHARGE_TYPE, LATE_CHARGE_TERM_ID,
2871 INTEREST_CALCULATION_PERIOD, HOLD_CHARGED_INVOICES_FLAG, MESSAGE_TEXT_ID,
2872 MULTIPLE_INTEREST_RATES_FLAG, CHARGE_BEGIN_DATE, AUTOMATCH_SET_ID
2873 INTO l_cust_account_id, l_site_use_id, l_created_by_module, l_application_id,
2874 l_credit_rating, l_risk_code, l_status,l_discount_terms,
2875 l_discount_grace_days,l_dunning_letters,l_dunning_letter_set_id,
2876 l_send_statements,l_statement_cycle_id,l_credit_balance_statements,
2877 l_interest_charges,l_finance_charge_flag,
2878 l_interest_period_days,l_account_status,l_tolerance,l_percent_collectable,
2879 l_standard_terms,l_override_terms,l_lockbox_matching_option,
2880 l_autocash_hierarchy_id,l_autocash_hierarchy_id_for_ad,
2881 l_clearing_days,l_payment_grace_days,l_grouping_rule_id,
2882 l_tax_printing_option,
2883 l_review_cycle,l_last_credit_review_date,l_next_credit_review_date,l_party_id,
2884 l_credit_classification, l_late_charge_calculation_trx, l_credit_items_flag,
2885 l_disputed_transactions_flag, l_late_charge_type, l_late_charge_term_id,
2886 l_interest_calculation_period, l_hold_charged_invoices_flag, l_message_text_id,
2887 l_multiple_interest_rates_flag, l_charge_begin_date,l_automatch_set_id
2888 FROM HZ_CUSTOMER_PROFILES
2889 WHERE ROWID = p_rowid;
2890 END IF;
2891
2892 --------------------------------------
2893 -- validate cust_account_profile_id
2894 --------------------------------------
2895 /****Logical APIs - validation not required****/
2896 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2897 IF p_create_update_flag = 'C' THEN
2898
2899 -- If primary key value is passed, check for uniqueness.
2900 -- If primary key value is not passed, it will be generated
2901 -- from sequence by table handler.
2902
2903 IF p_customer_profile_rec.cust_account_profile_id IS NOT NULL AND
2904 p_customer_profile_rec.cust_account_profile_id <> FND_API.G_MISS_NUM
2905 THEN
2906 BEGIN
2907 SELECT 'Y' INTO l_dummy
2908 FROM HZ_CUSTOMER_PROFILES
2909 WHERE CUST_ACCOUNT_PROFILE_ID = p_customer_profile_rec.cust_account_profile_id;
2910
2911 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
2912 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id' );
2913 FND_MSG_PUB.ADD;
2914 x_return_status := FND_API.G_RET_STS_ERROR;
2915 EXCEPTION
2916 WHEN NO_DATA_FOUND THEN
2917 NULL;
2918 END;
2919
2920 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2921 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is unique during creation if passed in. ' ||
2922 'x_return_status = ' || x_return_status,
2923 p_prefix =>l_debug_prefix,
2924 p_msg_level=>fnd_log.level_statement);
2925 END IF;
2926
2927 END IF;
2928 END IF;
2929
2930 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2931 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_profile_id ... ' ||
2932 'x_return_status = ' || x_return_status,
2933 p_prefix =>l_debug_prefix,
2934 p_msg_level=>fnd_log.level_statement);
2935 END IF;
2936 END IF;
2937
2938 ----------------------------------------------
2939 -- validate cust_account_id
2940 ----------------------------------------------
2941 /****Logical APIs - validation not required****/
2942 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2943 -- cust_account_id is mandatory field
2944 -- Since cust_account_id is non-updateable, we only need to check mandatory
2945 -- during creation.
2946 --
2947 -- 2310474: cust_account_id can be equal = -1 if the profile is related to party
2948 -- and not a customer account.
2949 --
2950
2951
2952 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2953 hz_utility_v2pub.debug(p_message=>'cust_account_id = ' || p_customer_profile_rec.cust_account_id || ' ' ||
2954 'x_return_status = ' || x_return_status,
2955 p_prefix =>l_debug_prefix,
2956 p_msg_level=>fnd_log.level_statement);
2957 END IF;
2958
2959
2960 IF p_create_update_flag = 'C' THEN
2961 validate_mandatory (
2962 p_create_update_flag => p_create_update_flag,
2963 p_column => 'cust_account_id',
2964 p_column_value => p_customer_profile_rec.cust_account_id,
2965 x_return_status => x_return_status );
2966
2967 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2968 hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
2969 'x_return_status = ' || x_return_status,
2970 p_prefix =>l_debug_prefix,
2971 p_msg_level=>fnd_log.level_statement);
2972 END IF;
2973
2974 END IF;
2975
2976 -- 2310474 party_id is mandatory field
2977 IF p_create_update_flag = 'C'
2978 THEN
2979 validate_mandatory (
2980 p_create_update_flag => p_create_update_flag,
2981 p_column => 'party_id',
2982 p_column_value => p_customer_profile_rec.party_id,
2983 x_return_status => x_return_status );
2984
2985 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2986 hz_utility_v2pub.debug(p_message=>'party_id is mandatory. ' ||
2987 'x_return_status = ' || x_return_status,
2988 p_prefix =>l_debug_prefix,
2989 p_msg_level=>fnd_log.level_statement);
2990 END IF;
2991
2992 END IF;
2993
2994 -- cust_account_id is non-updateable field.
2995 IF p_create_update_flag = 'U' AND
2996 p_customer_profile_rec.cust_account_id IS NOT NULL
2997 THEN
2998 validate_nonupdateable (
2999 p_column => 'cust_account_id',
3000 p_column_value => p_customer_profile_rec.cust_account_id,
3001 p_old_column_value => l_cust_account_id,
3002 x_return_status => x_return_status );
3003
3004 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3005 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
3006 'x_return_status = ' || x_return_status,
3007 p_prefix =>l_debug_prefix,
3008 p_msg_level=>fnd_log.level_statement);
3009 END IF;
3010
3011 END IF;
3012
3013 -- 2310474 After the migration script to fill up party_id for all exiting customer profiles arhucppt.sql
3014 -- the party_id is not updeatable
3015
3016 IF p_create_update_flag = 'U' AND
3017 p_customer_profile_rec.party_id IS NOT NULL
3018 THEN
3019 validate_nonupdateable (
3020 p_column => 'party_id',
3021 p_column_value => p_customer_profile_rec.party_id,
3022 p_old_column_value => l_party_id,
3023 x_return_status => x_return_status );
3024
3025 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3026 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
3027 'x_return_status = ' || x_return_status,
3028 p_prefix =>l_debug_prefix,
3029 p_msg_level=>fnd_log.level_statement);
3030 END IF;
3031
3032 END IF;
3033
3034
3035 -- cust_account_id is foreign key to hz_cust_accounts
3036 -- Since cust_acocunt_id is non-updateable, we only need to
3037 -- check FK during creation.
3038
3039 IF p_create_update_flag = 'C' AND
3040 p_customer_profile_rec.cust_account_id IS NOT NULL AND
3041 p_customer_profile_rec.cust_account_id <> FND_API.G_MISS_NUM
3042 THEN
3043 check_cust_account_fk (
3044 p_column => 'cust_account_id',
3045 p_column_value => p_customer_profile_rec.cust_account_id,
3046 x_return_status => x_return_status );
3047
3048
3049 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3050 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
3051 'x_return_status = ' || x_return_status,
3052 p_prefix =>l_debug_prefix,
3053 p_msg_level=>fnd_log.level_statement);
3054 END IF;
3055
3056 END IF;
3057 END IF;
3058
3059 -- We can only have one customer profile for one account
3060 -- Because cust_account_id is non-updateable, we only need to do this check during
3061 -- creation.
3062 -------------------------------------
3063 -- 2310474: p_cust_account_rec.cust_account_id = -1 if we are creating the profile for a party
3064 -- One party can only have 1 only 1 customer profile directly attached to it
3065 -------------------------------------
3066
3067 IF p_create_update_flag = 'C' AND
3068 ( p_customer_profile_rec.site_use_id IS NULL OR
3069 p_customer_profile_rec.site_use_id = FND_API.G_MISS_NUM ) AND
3070 p_customer_profile_rec.cust_account_id <> -1
3071 THEN
3072 BEGIN
3073 SELECT 'Y' INTO l_dummy
3074 FROM HZ_CUSTOMER_PROFILES
3075 WHERE CUST_ACCOUNT_ID = p_customer_profile_rec.cust_account_id
3076 AND SITE_USE_ID IS NULL
3077 AND ROWNUM = 1;
3078
3079 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
3080 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
3081 FND_MSG_PUB.ADD;
3082 x_return_status := FND_API.G_RET_STS_ERROR;
3083 EXCEPTION
3084 WHEN NO_DATA_FOUND THEN
3085 NULL;
3086 END;
3087
3088
3089 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3090 hz_utility_v2pub.debug(p_message=>'only one customer profile for one account. ' ||
3091 'x_return_status = ' || x_return_status,
3092 p_prefix =>l_debug_prefix,
3093 p_msg_level=>fnd_log.level_statement);
3094 END IF;
3095
3096
3097 ELSIF p_create_update_flag = 'C' AND
3098 ( p_customer_profile_rec.site_use_id IS NULL OR
3099 p_customer_profile_rec.site_use_id = FND_API.G_MISS_NUM ) AND
3100 p_customer_profile_rec.cust_account_id = -1
3101 THEN
3102 -- 2310474 in this case we are creating a customer profile for party
3103 -- One party can only have 1 and only 1 profile directly attachment to the party
3104 -- At party level
3105 BEGIN
3106 SELECT 'Y' INTO l_dummy
3107 FROM HZ_CUSTOMER_PROFILES
3108 WHERE PARTY_ID = p_customer_profile_rec.party_id
3109 AND CUST_ACCOUNT_ID = -1;
3110
3111 FND_MESSAGE.SET_NAME( 'AR', 'HZ_ONLY_ONE_PROF_AT_PARTY_LEV' );
3112 FND_MESSAGE.SET_TOKEN( 'PARTY_ID', p_customer_profile_rec.party_id );
3113 FND_MSG_PUB.ADD;
3114 x_return_status := FND_API.G_RET_STS_ERROR;
3115 EXCEPTION
3116 WHEN NO_DATA_FOUND THEN
3117 NULL;
3118 END;
3119
3120
3121 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3122 hz_utility_v2pub.debug(p_message=>'only one customer profile for one party at party level. ' ||
3123 'x_return_status = ' || x_return_status,
3124 p_prefix =>l_debug_prefix,
3125 p_msg_level=>fnd_log.level_statement);
3126 END IF;
3127
3128
3129 END IF;
3130
3131
3132 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3133 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
3134 'x_return_status = ' || x_return_status,
3135 p_prefix =>l_debug_prefix,
3136 p_msg_level=>fnd_log.level_statement);
3137 END IF;
3138
3139 ---------------------------------
3140 -- 2310474 Validation of review_cycle
3141 -- The last_credit_review_date and next_credit_review_date are not part of TCA API management
3142 -- Credit Management team take care of them
3143 -- V2 API does not do any validation on Last_Review_date and Next_review_date
3144 ---------------------------------
3145
3146 -- Validate lookup_code of the REVIEW_CYCLE
3147 IF p_customer_profile_rec.review_cycle IS NOT NULL AND
3148 p_customer_profile_rec.review_cycle <> FND_API.G_MISS_CHAR AND
3149 ( p_create_update_flag = 'C' OR
3150 ( p_create_update_flag = 'U' AND
3151 p_customer_profile_rec.review_cycle <> NVL( l_review_cycle, FND_API.G_MISS_CHAR ) ) )
3152 THEN
3153 validate_lookup (
3154 p_column => 'review_cycle',
3155 p_lookup_table => 'AR_LOOKUPS',
3156 p_lookup_type => 'PERIODIC_REVIEW_CYCLE',
3157 p_column_value => p_customer_profile_rec.review_cycle,
3158 x_return_status => x_return_status );
3159
3160 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3161 hz_utility_v2pub.debug(p_message=>'review_cycle is lookup code in lookup type PERIODIC_REVIEW_CYCLE in ar_lookups. ' ||
3162 'x_return_status = ' || x_return_status,
3163 p_prefix =>l_debug_prefix,
3164 p_msg_level=>fnd_log.level_statement);
3165 END IF;
3166
3167
3168 END IF;
3169
3170
3171 ----------------------------------------------
3172 -- validate collector_id
3173 ----------------------------------------------
3174
3175 -- collector_id is mandatory field.
3176
3177 -- Since we are defaulting to default profile class if profile_class_id
3178 -- has not been passed in, the collector_id can be null or G_MISS during
3179 -- creation and it will default to collect_id of default profile class if
3180 -- it is NULL. We can have G_MISS checking to make it mandatory.
3181
3182 check_partial_mandatory_column (
3183 p_column => 'collector_id',
3184 p_column_value => p_customer_profile_rec.collector_id,
3185 x_return_status => x_return_status );
3186
3187
3188 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3189 hz_utility_v2pub.debug(p_message=>'collector_id is mandatory : it can be null but not G_MISS. ' ||
3190 'x_return_status = ' || x_return_status,
3191 p_prefix =>l_debug_prefix,
3192 p_msg_level=>fnd_log.level_statement);
3193 END IF;
3194
3195 -- collector_id is foreign key to ar_collectors
3196 IF p_customer_profile_rec.collector_id IS NOT NULL AND
3197 p_customer_profile_rec.collector_id <> FND_API.G_MISS_NUM
3198 THEN
3199 check_collector_fk (
3200 p_column => 'collector_id',
3201 p_column_value => p_customer_profile_rec.collector_id,
3202 x_return_status => x_return_status );
3203
3204
3205 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3206 hz_utility_v2pub.debug(p_message=>'collector_id is foreign key to ar_collectors. ' ||
3207 'x_return_status = ' || x_return_status,
3208 p_prefix =>l_debug_prefix,
3209 p_msg_level=>fnd_log.level_statement);
3210 END IF;
3211
3212 END IF;
3213
3214 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3215 hz_utility_v2pub.debug(p_message=>'(+) after validate collector_id ... ' ||
3216 'x_return_status = ' || x_return_status,
3217 p_prefix =>l_debug_prefix,
3218 p_msg_level=>fnd_log.level_statement);
3219 END IF;
3220
3221 ----------------------------------------------
3222 -- validate credit_checking
3223 ----------------------------------------------
3224
3225 -- credit_checking is mandatory field.
3226
3227 -- Since we are defaulting to default profile class if profile_class_id
3228 -- has not been passed in, the credit_checking can be null or G_MISS during
3229 -- creation and it will default to credit_checking of default profile class if
3230 -- it is NULL. We can have G_MISS checking to make it mandatory.
3231
3232 check_partial_mandatory_column (
3233 p_column => 'credit_checking',
3234 p_column_value => p_customer_profile_rec.credit_checking,
3235 x_return_status => x_return_status );
3236
3237
3238 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3239 hz_utility_v2pub.debug(p_message=>'credit_checking is mandatory : it can be null but not G_MISS. ' ||
3240 'x_return_status = ' || x_return_status,
3241 p_prefix =>l_debug_prefix,
3242 p_msg_level=>fnd_log.level_statement);
3243 END IF;
3244
3245
3246 -- credit_checking is lookup code in lookup type YES/NO
3247 IF p_customer_profile_rec.credit_checking IS NOT NULL AND
3248 p_customer_profile_rec.credit_checking <> FND_API.G_MISS_CHAR
3249 THEN
3250 validate_lookup (
3251 p_column => 'credit_checking',
3252 p_lookup_type => 'YES/NO',
3253 p_column_value => p_customer_profile_rec.credit_checking,
3254 x_return_status => x_return_status );
3255
3256 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3257 hz_utility_v2pub.debug(p_message=>'credit_checking is lookup code in lookup type YES/NO. ' ||
3258 'x_return_status = ' || x_return_status,
3259 p_prefix =>l_debug_prefix,
3260 p_msg_level=>fnd_log.level_statement);
3261 END IF;
3262
3263 END IF;
3264
3265 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3266 hz_utility_v2pub.debug(p_message=>'(+) after validate credit_checking ... ' ||
3267 'x_return_status = ' || x_return_status,
3268 p_prefix =>l_debug_prefix,
3269 p_msg_level=>fnd_log.level_statement);
3270 END IF;
3271
3272
3273 ----------------------------------------------
3274 -- validate discount_terms
3275 ----------------------------------------------
3276
3277 -- discount_terms is mandatory field.
3278
3279 -- Since we are defaulting to default profile class if profile_class_id
3280 -- has not been passed in, the discount_terms can be null or G_MISS during
3281 -- creation and it will default to discount_terms of default profile class if
3282 -- it is NULL. We can have G_MISS checking to make it mandatory.
3283
3284 check_partial_mandatory_column (
3285 p_column => 'discount_terms',
3286 p_column_value => p_customer_profile_rec.discount_terms,
3287 x_return_status => x_return_status );
3288
3289 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3290 hz_utility_v2pub.debug(p_message=>'discount_terms is mandatory : it can be null but not G_MISS. ' ||
3291 'x_return_status = ' || x_return_status,
3292 p_prefix =>l_debug_prefix,
3293 p_msg_level=>fnd_log.level_statement);
3294 END IF;
3295
3296
3297 /****Logical APIs - validation not required****/
3298 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3299 -- discount_terms is lookup code in lookup type YES/NO
3300 IF p_customer_profile_rec.discount_terms IS NOT NULL AND
3301 p_customer_profile_rec.discount_terms <> FND_API.G_MISS_CHAR
3302 AND ( p_create_update_flag = 'C' OR
3303 ( p_create_update_flag = 'U' AND
3304 p_customer_profile_rec.discount_terms <> NVL( l_discount_terms, FND_API.G_MISS_CHAR ) ) )
3305 THEN
3306 validate_lookup (
3307 p_column => 'discount_terms',
3308 p_lookup_type => 'YES/NO',
3309 p_column_value => p_customer_profile_rec.discount_terms,
3310 x_return_status => x_return_status );
3311
3312
3313 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3314 hz_utility_v2pub.debug(p_message=>'discount_terms is lookup code in lookup type YES/NO. ' ||
3315 'x_return_status = ' || x_return_status,
3316 p_prefix =>l_debug_prefix,
3317 p_msg_level=>fnd_log.level_statement);
3318 END IF;
3319
3320 END IF;
3321 END IF;
3322
3323 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3324 hz_utility_v2pub.debug(p_message=>'(+) after validate discount_terms ... ' ||
3325 'x_return_status = ' || x_return_status,
3326 p_prefix =>l_debug_prefix,
3327 p_msg_level=>fnd_log.level_statement);
3328 END IF;
3329
3330 ----------------------------------------------
3331 -- validate tolerance
3332 ----------------------------------------------
3333
3334 -- tolerance is mandatory field.
3335
3336 -- Since we are defaulting to default profile class if profile_class_id
3337 -- has not been passed in, the tolerance can be null or G_MISS during
3338 -- creation and it will default to tolerance of default profile class if
3339 -- it is NULL. We can have G_MISS checking to make it mandatory.
3340
3341 check_partial_mandatory_column (
3342 p_column => 'tolerance',
3343 p_column_value => p_customer_profile_rec.tolerance,
3344 x_return_status => x_return_status );
3345
3346
3347 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3348 hz_utility_v2pub.debug(p_message=>'tolerance is mandatory : it can be null but not G_MISS. ' ||
3349 'x_return_status = ' || x_return_status,
3350 p_prefix =>l_debug_prefix,
3351 p_msg_level=>fnd_log.level_statement);
3352 END IF;
3353
3354
3355 ----------------------------------------------
3356 -- validate profile_class_id
3357 ----------------------------------------------
3358
3359 -- profile_class_id is foreign key to hz_cust_profile_classes
3360 IF p_customer_profile_rec.profile_class_id IS NOT NULL AND
3361 p_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM
3362 THEN
3363 IF p_customer_profile_rec.profile_class_id < 0 THEN
3364 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NEGATIVE_PROFILE_CLASS' );
3365 FND_MSG_PUB.ADD;
3366 x_return_status := FND_API.G_RET_STS_ERROR;
3367 ELSE
3368 BEGIN
3369 SELECT STATUS, NAME INTO l_class_status, l_profile_class_name
3370 FROM HZ_CUST_PROFILE_CLASSES
3371 WHERE PROFILE_CLASS_ID = p_customer_profile_rec.profile_class_id;
3372
3373 IF l_class_status <> 'A' THEN
3374 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INACTIVE_PROFILE_CLASS' );
3375 FND_MESSAGE.SET_TOKEN( 'NAME', l_profile_class_name );
3376 FND_MSG_PUB.ADD;
3377 x_return_status := FND_API.G_RET_STS_ERROR;
3378 END IF;
3379 EXCEPTION
3380 WHEN NO_DATA_FOUND THEN
3381 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
3382 FND_MESSAGE.SET_TOKEN( 'FK', 'profile_class_id' );
3383 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'profile_class_id' );
3384 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_profile_classes');
3385 FND_MSG_PUB.ADD;
3386 x_return_status := FND_API.G_RET_STS_ERROR;
3387 END;
3388 END IF;
3389
3390 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3391 hz_utility_v2pub.debug(p_message=>'profile_class_id should be positive, foreign key of hz_cust_profile_classes and point to an active profile class. ' ||
3392 'x_return_status = ' || x_return_status,
3393 p_prefix =>l_debug_prefix,
3394 p_msg_level=>fnd_log.level_statement);
3395 END IF;
3396
3397 END IF;
3398
3399 -- profile_class_id cannot be set to null during update
3400 IF p_create_update_flag = 'U' AND
3401 p_customer_profile_rec.profile_class_id IS NOT NULL
3402 THEN
3403 validate_cannot_update_to_null (
3404 p_column => 'profile_class_id',
3405 p_column_value => p_customer_profile_rec.profile_class_id,
3406 x_return_status => x_return_status );
3407
3408
3409 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3410 hz_utility_v2pub.debug(p_message=>'profile_class_id cannot be updated to null. ' ||
3411 'x_return_status = ' || x_return_status,
3412 p_prefix =>l_debug_prefix,
3413 p_msg_level=>fnd_log.level_statement);
3414 END IF;
3415
3416 END IF;
3417
3418
3419 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3420 hz_utility_v2pub.debug(p_message=>'(+) after validate profile_class_id ... ' ||
3421 'x_return_status = ' || x_return_status,
3422 p_prefix =>l_debug_prefix,
3423 p_msg_level=>fnd_log.level_statement);
3424 END IF;
3425
3426 ----------------------------------------------
3427 -- validate site_use_id
3428 ----------------------------------------------
3429
3430 -- site_use_id is non-updateable field.
3431 IF p_create_update_flag = 'U' AND
3432 p_customer_profile_rec.site_use_id IS NOT NULL
3433 THEN
3434 validate_nonupdateable (
3435 p_column => 'site_use_id',
3436 p_column_value => p_customer_profile_rec.site_use_id,
3437 p_old_column_value => l_site_use_id,
3438 x_return_status => x_return_status );
3439
3440
3441 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3442 hz_utility_v2pub.debug(p_message=>'site_use_id is non-updateable. ' ||
3443 'x_return_status = ' || x_return_status,
3444 p_prefix =>l_debug_prefix,
3445 p_msg_level=>fnd_log.level_statement);
3446 END IF;
3447
3448 END IF;
3449
3450 ------------------
3451 -- site_use_id is foreign key to hz_cust_site_uses.
3452 -- one site use can only have one profile.
3453 -- Since site_use_id is non-updateable, we only need to check
3454 -- FK during creation.
3455 ------------------
3456 -- 2310474: User can create a customer profile at site level
3457 -- only if the profile is created for at account level
3458 -- and not at party level
3459 ------------------
3460
3461
3462 IF p_create_update_flag = 'C' AND
3463 p_customer_profile_rec.site_use_id IS NOT NULL AND
3464 p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM AND
3465 p_customer_profile_rec.cust_account_id <> -1
3466 THEN
3467 BEGIN
3468
3469 SELECT CUST_ACCT_SITE_ID,SITE_USE_CODE,ORG_ID
3470 INTO l_cust_acct_site_id,l_cust_acct_site_use_code,l_org_id
3471 FROM HZ_CUST_SITE_USES_ALL
3472 WHERE SITE_USE_ID = p_customer_profile_rec.site_use_id;
3473
3474 -- Bug 4650473. Check if org is accessible.
3475 BEGIN
3476 MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
3477 EXCEPTION
3478 WHEN OTHERS
3479 THEN
3480 x_return_status := FND_API.G_RET_STS_ERROR;
3481 END;
3482
3483 -- cust_account_id should be same as cust_account_id site_use_id belongs to.
3484 SELECT CUST_ACCOUNT_ID INTO l_cust_account_id
3485 FROM HZ_CUST_ACCT_SITES_ALL
3486 WHERE CUST_ACCT_SITE_ID = l_cust_acct_site_id;
3487
3488 IF l_cust_account_id <> p_customer_profile_rec.cust_account_id THEN
3489 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_SITEUSE_MISMATCH' );
3490 FND_MSG_PUB.ADD;
3491 x_return_status := FND_API.G_RET_STS_ERROR;
3492 END IF;
3493
3494 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3495 hz_utility_v2pub.debug(p_message=>'cust_account_id should be same as cust_account_id site_use_id belongs to. ' ||
3496 'x_return_status = ' || x_return_status,
3497 p_prefix =>l_debug_prefix,
3498 p_msg_level=>fnd_log.level_statement);
3499 END IF;
3500
3501 EXCEPTION
3502 WHEN NO_DATA_FOUND THEN
3503 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
3504 FND_MESSAGE.SET_TOKEN( 'FK', 'site_use_id' );
3505 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'site_use_id' );
3506 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_site_uses' );
3507 FND_MSG_PUB.ADD;
3508 x_return_status := FND_API.G_RET_STS_ERROR;
3509 END;
3510
3511 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3512 hz_utility_v2pub.debug(p_message=>'site_use_id is foreign key to hz_cust_site_uses. ' ||
3513 'x_return_status = ' || x_return_status,
3514 p_prefix =>l_debug_prefix,
3515 p_msg_level=>fnd_log.level_statement);
3516 END IF;
3517
3518
3519 BEGIN
3520 SELECT 'Y' INTO l_dummy
3521 FROM HZ_CUSTOMER_PROFILES
3522 WHERE CUST_ACCOUNT_ID = p_customer_profile_rec.cust_account_id
3523 AND SITE_USE_ID = p_customer_profile_rec.site_use_id
3524 AND ROWNUM = 1;
3525
3526 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
3527 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
3528 FND_MSG_PUB.ADD;
3529 x_return_status := FND_API.G_RET_STS_ERROR;
3530 EXCEPTION
3531 WHEN NO_DATA_FOUND THEN
3532 NULL;
3533 END;
3534
3535
3536 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3537 hz_utility_v2pub.debug(p_message=>'one site use can only have one profile. ' ||
3538 'x_return_status = ' || x_return_status,
3539 p_prefix =>l_debug_prefix,
3540 p_msg_level=>fnd_log.level_statement);
3541 END IF;
3542
3543
3544 -- 2310474: Profile can not be at account site level if it is created at party level
3545 ELSIF p_create_update_flag = 'C' AND
3546 p_customer_profile_rec.site_use_id IS NOT NULL AND
3547 p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM AND
3548 p_customer_profile_rec.cust_account_id = -1
3549 THEN
3550 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NO_SITE_PROF_AT_PTY_LEV' );
3551 FND_MESSAGE.SET_TOKEN( 'PARTY_ID', p_customer_profile_rec.party_id );
3552 FND_MESSAGE.SET_TOKEN( 'SITE_USE_ID', p_customer_profile_rec.site_use_id );
3553 FND_MSG_PUB.ADD;
3554 x_return_status := FND_API.G_RET_STS_ERROR;
3555
3556
3557 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3558 hz_utility_v2pub.debug(p_message=>'profile at party level cannot be assign to a site. ' ||
3559 'x_return_status = ' || x_return_status,
3560 p_prefix =>l_debug_prefix,
3561 p_msg_level=>fnd_log.level_statement);
3562 END IF;
3563
3564
3565 END IF;
3566
3567
3568 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3569 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
3570 'x_return_status = ' || x_return_status,
3571 p_prefix =>l_debug_prefix,
3572 p_msg_level=>fnd_log.level_statement);
3573 END IF;
3574
3575 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3576 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
3577 'x_return_status = ' || x_return_status,
3578 p_prefix =>l_debug_prefix,
3579 p_msg_level=>fnd_log.level_statement);
3580 END IF;
3581
3582
3583 ----------------------------------------------
3584 -- validate credit_rating
3585 ----------------------------------------------
3586
3587 -- credit_rating is lookup code in lookup type CREDIT_RATING
3588 IF p_customer_profile_rec.credit_rating IS NOT NULL AND
3589 p_customer_profile_rec.credit_rating <> FND_API.G_MISS_CHAR AND
3590 ( p_create_update_flag = 'C' OR
3591 ( p_create_update_flag = 'U' AND
3592 p_customer_profile_rec.credit_rating <> NVL( l_credit_rating, FND_API.G_MISS_CHAR ) ) )
3593 THEN
3594 validate_lookup (
3595 p_column => 'credit_rating',
3596 p_lookup_type => 'CREDIT_RATING',
3597 p_column_value => p_customer_profile_rec.credit_rating,
3598 x_return_status => x_return_status );
3599
3600 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3601 hz_utility_v2pub.debug(p_message=>'credit_rating is lookup code in lookup type CREDIT_RATING. ' ||
3602 'x_return_status = ' || x_return_status,
3603 p_prefix =>l_debug_prefix,
3604 p_msg_level=>fnd_log.level_statement);
3605 END IF;
3606
3607 END IF;
3608
3609
3610 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3611 hz_utility_v2pub.debug(p_message=>'(+) after validate credit_rating ... ' ||
3612 'x_return_status = ' || x_return_status,
3613 p_prefix =>l_debug_prefix,
3614 p_msg_level=>fnd_log.level_statement);
3615 END IF;
3616
3617
3618 ----------------------------------------------
3619 -- validate risk_code
3620 ----------------------------------------------
3621
3622 -- risk_code is lookup code in lookup type RISK_CODE
3623 IF p_customer_profile_rec.risk_code IS NOT NULL AND
3624 p_customer_profile_rec.risk_code <> FND_API.G_MISS_CHAR AND
3625 ( p_create_update_flag = 'C' OR
3626 ( p_create_update_flag = 'U' AND
3627 p_customer_profile_rec.risk_code <> NVL( l_risk_code, FND_API.G_MISS_CHAR ) ) )
3628 THEN
3629 validate_lookup (
3630 p_column => 'risk_code',
3631 p_lookup_type => 'RISK_CODE',
3632 p_column_value => p_customer_profile_rec.risk_code,
3633 x_return_status => x_return_status );
3634
3635 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3636 hz_utility_v2pub.debug(p_message=>'risk_code is lookup code in lookup type RISK_CODE. ' ||
3637 'x_return_status = ' || x_return_status,
3638 p_prefix =>l_debug_prefix,
3639 p_msg_level=>fnd_log.level_statement);
3640 END IF;
3641
3642 END IF;
3643
3644 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3645 hz_utility_v2pub.debug(p_message=>'(+) after validate risk_code ... ' ||
3646 'x_return_status = ' || x_return_status,
3647 p_prefix =>l_debug_prefix,
3648 p_msg_level=>fnd_log.level_statement);
3649 END IF;
3650
3651
3652 ----------------------------------------------
3653 -- validate auto_rec_incl_disputed_flag
3654 ----------------------------------------------
3655
3656 -- auto_rec_incl_disputed_flag is mandatory field.
3657
3658 -- Since we are defaulting to default profile class if profile_class_id
3659 -- has not been passed in, the auto_rec_incl_disputed_flag can be null or G_MISS during
3660 -- creation and it will default to auto_rec_incl_disputed_flag of default profile class if
3661 -- it is NULL. We can have G_MISS checking to make it mandatory.
3662
3663 check_partial_mandatory_column (
3664 p_column => 'auto_rec_incl_disputed_flag',
3665 p_column_value => p_customer_profile_rec.auto_rec_incl_disputed_flag,
3666 x_return_status => x_return_status );
3667
3668 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3669 hz_utility_v2pub.debug(p_message=>'auto_rec_incl_disputed_flag is mandatory : it can be null but not G_MISS. ' ||
3670 'x_return_status = ' || x_return_status,
3671 p_prefix =>l_debug_prefix,
3672 p_msg_level=>fnd_log.level_statement);
3673 END IF;
3674
3675
3676 -- auto_rec_incl_disputed_flag is lookup code in lookup type YES/NO
3677 IF p_customer_profile_rec.auto_rec_incl_disputed_flag IS NOT NULL AND
3678 p_customer_profile_rec.auto_rec_incl_disputed_flag <> FND_API.G_MISS_CHAR
3679 THEN
3680 validate_lookup (
3681 p_column => 'auto_rec_incl_disputed_flag',
3682 p_lookup_type => 'YES/NO',
3683 p_column_value => p_customer_profile_rec.auto_rec_incl_disputed_flag,
3684 x_return_status => x_return_status );
3685
3686
3687 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3688 hz_utility_v2pub.debug(p_message=>'auto_rec_incl_disputed_flag is lookup code in lookup type YES/NO. ' ||
3689 'x_return_status = ' || x_return_status,
3690 p_prefix =>l_debug_prefix,
3691 p_msg_level=>fnd_log.level_statement);
3692 END IF;
3693
3694 END IF;
3695
3696
3697 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3698 hz_utility_v2pub.debug(p_message=>'(+) after validate auto_rec_incl_disputed_flag ... ' ||
3699 'x_return_status = ' || x_return_status,
3700 p_prefix =>l_debug_prefix,
3701 p_msg_level=>fnd_log.level_statement);
3702 END IF;
3703
3704
3705 ----------------------------------------------
3706 -- validate charge_on_finance_charge_flag
3707 ----------------------------------------------
3708 /****Logical APIs - validation not required****/
3709 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3710 -- charge_on_finance_charge_flag is lookup code in lookup type YES/NO
3711 -- As a part of late charge policy project changing the lookup type to AR_FORMULAE (bug # 5065436)
3712 IF p_customer_profile_rec.charge_on_finance_charge_flag IS NOT NULL AND
3713 p_customer_profile_rec.charge_on_finance_charge_flag <> FND_API.G_MISS_CHAR
3714 THEN
3715 validate_lookup (
3716 p_column => 'charge_on_finance_charge_flag',
3717 p_lookup_type => 'AR_FORMULAE',
3718 p_column_value => p_customer_profile_rec.charge_on_finance_charge_flag,
3719 x_return_status => x_return_status );
3720
3721 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3722 hz_utility_v2pub.debug(p_message=>'charge_on_finance_charge_flag is lookup code in lookup type AR_FORMULAE. ' ||
3723 'x_return_status = ' || x_return_status,
3724 p_prefix =>l_debug_prefix,
3725 p_msg_level=>fnd_log.level_statement);
3726 END IF;
3727
3728 END IF;
3729
3730 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3731 hz_utility_v2pub.debug(p_message=>'(+) after charge_on_finance_charge_flag ... ' ||
3732 'x_return_status = ' || x_return_status,
3733 p_prefix =>l_debug_prefix,
3734 p_msg_level=>fnd_log.level_statement);
3735 END IF;
3736 END IF;
3737
3738 ----------------------------------------------
3739 -- validate cons_inv_flag
3740 ----------------------------------------------
3741 /****Logical APIs - validation not required****/
3742 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3743 -- cons_inv_flag is lookup code in lookup type YES/NO
3744 IF p_customer_profile_rec.cons_inv_flag IS NOT NULL AND
3745 p_customer_profile_rec.cons_inv_flag <> FND_API.G_MISS_CHAR
3746 THEN
3747 validate_lookup (
3748 p_column => 'cons_inv_flag',
3749 p_lookup_type => 'YES/NO',
3750 p_column_value => p_customer_profile_rec.cons_inv_flag,
3751 x_return_status => x_return_status );
3752
3753
3754 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3755 hz_utility_v2pub.debug(p_message=>'cons_inv_flag is lookup code in lookup type YES/NO. ' ||
3756 'x_return_status = ' || x_return_status,
3757 p_prefix =>l_debug_prefix,
3758 p_msg_level=>fnd_log.level_statement);
3759 END IF;
3760
3761 END IF;
3762
3763
3764 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3765 hz_utility_v2pub.debug(p_message=>'(+) after cons_inv_flag ... ' ||
3766 'x_return_status = ' || x_return_status,
3767 p_prefix =>l_debug_prefix,
3768 p_msg_level=>fnd_log.level_statement);
3769 END IF;
3770 END IF;
3771
3772 ----------------------------------------------
3773 -- validate cons_bill_level
3774 ----------------------------------------------
3775 /****Logical APIs - validation not required****/
3776 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3777
3778 validate_bill_level (
3779 p_create_update_flag => p_create_update_flag,
3780 p_customer_profile_rec => p_customer_profile_rec,
3781 x_return_status => x_return_status );
3782
3783 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3784 hz_utility_v2pub.debug(p_message=>'(+) after cons_bill_level ... ' ||
3785 'x_return_status = ' || x_return_status,
3786 p_prefix =>l_debug_prefix,
3787 p_msg_level=>fnd_log.level_statement);
3788 END IF;
3789 END IF;
3790
3791 ----------------------------------------------
3792 -- validate status
3793 ----------------------------------------------
3794
3795 -- status cannot be set to null during update
3796 IF p_create_update_flag = 'U' AND
3797 p_customer_profile_rec.status IS NOT NULL
3798 THEN
3799 validate_cannot_update_to_null (
3800 p_column => 'status',
3801 p_column_value => p_customer_profile_rec.status,
3802 x_return_status => x_return_status );
3803
3804 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3805 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
3806 'x_return_status = ' || x_return_status,
3807 p_prefix =>l_debug_prefix,
3808 p_msg_level=>fnd_log.level_statement);
3809 END IF;
3810
3811 END IF;
3812
3813 /****Logical APIs - validation not required****/
3814 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3815 -- status is lookup code in lookup type CODE_STATUS
3816 IF p_customer_profile_rec.status IS NOT NULL AND
3817 p_customer_profile_rec.status <> FND_API.G_MISS_CHAR AND
3818 ( p_create_update_flag = 'C' OR
3819 ( p_create_update_flag = 'U' AND
3820 p_customer_profile_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
3821 THEN
3822 validate_lookup (
3823 p_column => 'status',
3824 p_lookup_type => 'CODE_STATUS',
3825 p_column_value => p_customer_profile_rec.status,
3826 x_return_status => x_return_status );
3827
3828 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3829 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
3830 'x_return_status = ' || x_return_status,
3831 p_prefix =>l_debug_prefix,
3832 p_msg_level=>fnd_log.level_statement);
3833 END IF;
3834
3835 END IF;
3836 END IF;
3837
3838 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3839 hz_utility_v2pub.debug(p_message=>'(+) after status ... ' ||
3840 'x_return_status = ' || x_return_status,
3841 p_prefix =>l_debug_prefix,
3842 p_msg_level=>fnd_log.level_statement);
3843 END IF;
3844
3845
3846 ----------------------------------------------
3847 -- validate dunning_letters
3848 ----------------------------------------------
3849
3850 -- dunning_letters is mandatory field.
3851
3852 -- Since we are defaulting to default profile class if profile_class_id
3853 -- has not been passed in, the dunning_letters can be null or G_MISS during
3854 -- creation and it will default to dunning_letters of default profile class if
3855 -- it is NULL. We can have G_MISS checking to make it mandatory.
3856
3857 check_partial_mandatory_column (
3858 p_column => 'dunning_letters',
3859 p_column_value => p_customer_profile_rec.dunning_letters,
3860 x_return_status => x_return_status );
3861
3862 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3863 hz_utility_v2pub.debug(p_message=>'dunning_letters is mandatory : it can be null but not G_MISS. ' ||
3864 'x_return_status = ' || x_return_status,
3865 p_prefix =>l_debug_prefix,
3866 p_msg_level=>fnd_log.level_statement);
3867 END IF;
3868
3869
3870 -- dunning_letters is lookup code in lookup type YES/NO
3871 IF p_customer_profile_rec.dunning_letters IS NOT NULL AND
3872 p_customer_profile_rec.dunning_letters <> FND_API.G_MISS_CHAR
3873 AND ( p_create_update_flag = 'C' OR
3874 ( p_create_update_flag = 'U' AND
3875 p_customer_profile_rec.dunning_letters <> NVL( l_dunning_letters, FND_API.G_MISS_CHAR ) ) )
3876 THEN
3877 validate_lookup (
3878 p_column => 'dunning_letters',
3879 p_lookup_type => 'YES/NO',
3880 p_column_value => p_customer_profile_rec.dunning_letters,
3881 x_return_status => x_return_status );
3882
3883 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3884 hz_utility_v2pub.debug(p_message=>'dunning_letters is lookup code in lookup type YES/NO. ' ||
3885 'x_return_status = ' || x_return_status,
3886 p_prefix =>l_debug_prefix,
3887 p_msg_level=>fnd_log.level_statement);
3888 END IF;
3889
3890 END IF;
3891
3892 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3893 hz_utility_v2pub.debug(p_message=>'(+) after dunning_letters ... ' ||
3894 'x_return_status = ' || x_return_status,
3895 p_prefix =>l_debug_prefix,
3896 p_msg_level=>fnd_log.level_statement);
3897 END IF;
3898
3899
3900 ----------------------------------------------
3901 -- validate interest_charges
3902 ----------------------------------------------
3903
3904 -- interest_charges is mandatory field.
3905
3906 -- Since we are defaulting to default profile class if profile_class_id
3907 -- has not been passed in, the interest_charges can be null or G_MISS during
3908 -- creation and it will default to interest_charges of default profile class if
3909 -- it is NULL. We can have G_MISS checking to make it mandatory.
3910
3911 check_partial_mandatory_column (
3912 p_column => 'interest_charges',
3913 p_column_value => p_customer_profile_rec.interest_charges,
3914 x_return_status => x_return_status );
3915
3916 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3917 hz_utility_v2pub.debug(p_message=>'interest_charges is mandatory : it can be null but not G_MISS. ' ||
3918 'x_return_status = ' || x_return_status,
3919 p_prefix =>l_debug_prefix,
3920 p_msg_level=>fnd_log.level_statement);
3921 END IF;
3922
3923 /****Logical APIs - validation not required****/
3924 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3925 -- interest_charges is lookup code in lookup type YES/NO
3926 IF p_customer_profile_rec.interest_charges IS NOT NULL AND
3927 p_customer_profile_rec.interest_charges <> FND_API.G_MISS_CHAR
3928 AND ( p_create_update_flag = 'C' OR
3929 ( p_create_update_flag = 'U' AND
3930 p_customer_profile_rec.interest_charges <> NVL( l_interest_charges, FND_API.G_MISS_CHAR ) ) )
3931 THEN
3932 validate_lookup (
3933 p_column => 'interest_charges',
3934 p_lookup_type => 'YES/NO',
3935 p_column_value => p_customer_profile_rec.interest_charges,
3936 x_return_status => x_return_status );
3937
3938 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3939 hz_utility_v2pub.debug(p_message=>'interest_charges is lookup code in lookup type YES/NO. ' ||
3940 'x_return_status = ' || x_return_status,
3941 p_prefix =>l_debug_prefix,
3942 p_msg_level=>fnd_log.level_statement);
3943 END IF;
3944
3945 END IF;
3946 END IF;
3947
3948 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3949 hz_utility_v2pub.debug(p_message=>'(+) after interest_charges ... ' ||
3950 'x_return_status = ' || x_return_status,
3951 p_prefix =>l_debug_prefix,
3952 p_msg_level=>fnd_log.level_statement);
3953 END IF;
3954
3955
3956 ----------------------------------------------
3957 -- validate send_statements
3958 ----------------------------------------------
3959
3960 -- send_statements is mandatory field.
3961
3962 -- Since we are defaulting to default profile class if profile_class_id
3963 -- has not been passed in, the send_statements can be null or G_MISS during
3964 -- creation and it will default to send_statements of default profile class if
3965 -- it is NULL. We can have G_MISS checking to make it mandatory.
3966
3967 check_partial_mandatory_column (
3968 p_column => 'send_statements',
3969 p_column_value => p_customer_profile_rec.send_statements,
3970 x_return_status => x_return_status );
3971
3972 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3973 hz_utility_v2pub.debug(p_message=>'send_statements is mandatory : it can be null but not G_MISS. ' ||
3974 'x_return_status = ' || x_return_status,
3975 p_prefix =>l_debug_prefix,
3976 p_msg_level=>fnd_log.level_statement);
3977 END IF;
3978
3979
3980 /****Logical APIs - validation not required****/
3981 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3982 -- send_statements is lookup code in lookup type YES/NO
3983 IF p_customer_profile_rec.send_statements IS NOT NULL AND
3984 p_customer_profile_rec.send_statements <> FND_API.G_MISS_CHAR
3985 AND ( p_create_update_flag = 'C' OR
3986 ( p_create_update_flag = 'U' AND
3987 p_customer_profile_rec.send_statements <> NVL( l_send_statements, FND_API.G_MISS_CHAR ) ) )
3988 THEN
3989 validate_lookup (
3990 p_column => 'send_statements',
3991 p_lookup_type => 'YES/NO',
3992 p_column_value => p_customer_profile_rec.send_statements,
3993 x_return_status => x_return_status );
3994
3995 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3996 hz_utility_v2pub.debug(p_message=>'send_statements is lookup code in lookup type YES/NO. ' ||
3997 'x_return_status = ' || x_return_status,
3998 p_prefix =>l_debug_prefix,
3999 p_msg_level=>fnd_log.level_statement);
4000 END IF;
4001
4002 END IF;
4003 END IF;
4004
4005 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4006 hz_utility_v2pub.debug(p_message=>'(+) after send_statements ... ' ||
4007 'x_return_status = ' || x_return_status,
4008 p_prefix =>l_debug_prefix,
4009 p_msg_level=>fnd_log.level_statement);
4010 END IF;
4011
4012
4013 ----------------------------------------------
4014 -- validate credit_balance_statements
4015 ----------------------------------------------
4016
4017 -- credit_balance_statements is mandatory field.
4018
4019 -- Since we are defaulting to default profile class if profile_class_id
4020 -- has not been passed in, the credit_balance_statements can be null or G_MISS during
4021 -- creation and it will default to credit_balance_statements of default profile class if
4022 -- it is NULL. We can have G_MISS checking to make it mandatory.
4023
4024 check_partial_mandatory_column (
4025 p_column => 'credit_balance_statements',
4026 p_column_value => p_customer_profile_rec.credit_balance_statements,
4027 x_return_status => x_return_status );
4028
4029
4030 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4031 hz_utility_v2pub.debug(p_message=>'credit_balance_statements is mandatory : it can be null but not G_MISS. ' ||
4032 'x_return_status = ' || x_return_status,
4033 p_prefix =>l_debug_prefix,
4034 p_msg_level=>fnd_log.level_statement);
4035 END IF;
4036
4037
4038 /****Logical APIs - validation not required****/
4039 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4040 -- credit_balance_statements is lookup code in lookup type YES/NO
4041 IF p_customer_profile_rec.credit_balance_statements IS NOT NULL AND
4042 p_customer_profile_rec.credit_balance_statements <> FND_API.G_MISS_CHAR
4043 THEN
4044 validate_lookup (
4045 p_column => 'credit_balance_statements',
4046 p_lookup_type => 'YES/NO',
4047 p_column_value => p_customer_profile_rec.credit_balance_statements,
4048 x_return_status => x_return_status );
4049
4050 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4051 hz_utility_v2pub.debug(p_message=>'credit_balance_statements is lookup code in lookup type YES/NO. ' ||
4052 'x_return_status = ' || x_return_status,
4053 p_prefix =>l_debug_prefix,
4054 p_msg_level=>fnd_log.level_statement);
4055 END IF;
4056
4057 END IF;
4058 END IF;
4059
4060 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4061 hz_utility_v2pub.debug(p_message=>'(+) after credit_balance_statements ... ' ||
4062 'x_return_status = ' || x_return_status,
4063 p_prefix =>l_debug_prefix,
4064 p_msg_level=>fnd_log.level_statement);
4065 END IF;
4066
4067
4068 ----------------------------------------------
4069 -- validate credit_hold
4070 ----------------------------------------------
4071
4072 -- credit_hold is mandatory field.
4073
4074 -- Since we are defaulting to default profile class if profile_class_id
4075 -- has not been passed in, the credit_hold can be null or G_MISS during
4076 -- creation and it will default to credit_hold of default profile class if
4077 -- it is NULL. We can have G_MISS checking to make it mandatory.
4078
4079 check_partial_mandatory_column (
4080 p_column => 'credit_hold',
4081 p_column_value => p_customer_profile_rec.credit_hold,
4082 x_return_status => x_return_status );
4083
4084 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4085 hz_utility_v2pub.debug(p_message=>'credit_hold is mandatory : it can be null but not G_MISS. ' ||
4086 'x_return_status = ' || x_return_status,
4087 p_prefix =>l_debug_prefix,
4088 p_msg_level=>fnd_log.level_statement);
4089 END IF;
4090
4091
4092 /****Logical APIs - validation not required****/
4093 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4094 -- credit_hold is lookup code in lookup type YES/NO
4095 IF p_customer_profile_rec.credit_hold IS NOT NULL AND
4096 p_customer_profile_rec.credit_hold <> FND_API.G_MISS_CHAR
4097 THEN
4098 validate_lookup (
4099 p_column => 'credit_hold',
4100 p_lookup_type => 'YES/NO',
4101 p_column_value => p_customer_profile_rec.credit_hold,
4102 x_return_status => x_return_status );
4103
4104 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4105 hz_utility_v2pub.debug(p_message=>'credit_hold is lookup code in lookup type YES/NO. ' ||
4106 'x_return_status = ' || x_return_status,
4107 p_prefix =>l_debug_prefix,
4108 p_msg_level=>fnd_log.level_statement);
4109 END IF;
4110
4111 END IF;
4112 END IF;
4113
4114 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4115 hz_utility_v2pub.debug(p_message=>'(+) after credit_hold ... ' ||
4116 'x_return_status = ' || x_return_status,
4117 p_prefix =>l_debug_prefix,
4118 p_msg_level=>fnd_log.level_statement);
4119 END IF;
4120
4121
4122 --------------------------------------
4123 -- validate created_by_module
4124 --------------------------------------
4125
4126 validate_created_by_module(
4127 p_create_update_flag => p_create_update_flag,
4128 p_created_by_module => p_customer_profile_rec.created_by_module,
4129 p_old_created_by_module => l_created_by_module,
4130 x_return_status => x_return_status);
4131
4132 --------------------------------------
4133 -- validate application_id
4134 --------------------------------------
4135
4136 validate_application_id(
4137 p_create_update_flag => p_create_update_flag,
4138 p_application_id => p_customer_profile_rec.application_id,
4139 p_old_application_id => l_application_id,
4140 x_return_status => x_return_status);
4141
4142 ------------------------------------------
4143 ----*** Select fields to validate ***----
4144 ------------------------------------------
4145 IF p_customer_profile_rec.profile_class_id IS NOT NULL AND
4146 p_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM
4147 THEN
4148
4149 SELECT * INTO l_profile_class_rec
4150 FROM HZ_CUST_PROFILE_CLASSES
4151 WHERE PROFILE_CLASS_ID = p_customer_profile_rec.profile_class_id;
4152
4153 END IF;
4154
4155 ------------------------------------------
4156 ---*** Account Status Validation ***---
4157 ------------------------------------------
4158 IF p_customer_profile_rec.account_status IS NOT NULL AND
4159 p_customer_profile_rec.account_status <> FND_API.G_MISS_CHAR
4160 AND ( p_create_update_flag = 'C' OR
4161 ( p_create_update_flag = 'U' AND
4162 p_customer_profile_rec.account_status <> NVL( l_account_status, FND_API.G_MISS_CHAR ) ) )
4163 THEN
4164 validate_lookup (
4165 p_column => 'account_status',
4166 p_lookup_type => 'ACCOUNT_STATUS',
4167 p_column_value => p_customer_profile_rec.account_status,
4168 x_return_status => x_return_status );
4169
4170 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4171 hz_utility_v2pub.debug(p_message=>'account_status is lookup code in lookup type ACCOUNT_STATUS.' ||
4172 'x_return_status = ' || x_return_status,
4173 p_prefix =>l_debug_prefix,
4174 p_msg_level=>fnd_log.level_statement);
4175 END IF;
4176
4177 END IF;
4178
4179 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4180 hz_utility_v2pub.debug(p_message=>'(+) after validate account_status ... ' ||
4181 'x_return_status = ' || x_return_status,
4182 p_prefix =>l_debug_prefix,
4183 p_msg_level=>fnd_log.level_statement);
4184 END IF;
4185
4186
4187 ---------------------------------------
4188 ------***Tolerance Validation ***------
4189 ---------------------------------------
4190 IF p_customer_profile_rec.tolerance IS NOT NULL AND
4191 p_customer_profile_rec.tolerance <> FND_API.G_MISS_NUM
4192 AND ( p_create_update_flag = 'C' OR
4193 ( p_create_update_flag = 'U' AND
4194 p_customer_profile_rec.tolerance <> NVL( l_tolerance, FND_API.G_MISS_NUM ) ) )
4195 THEN
4196 IF p_customer_profile_rec.tolerance > 100 OR
4197 p_customer_profile_rec.tolerance < -100
4198 THEN
4199 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VALUE_BETWEEN' );
4200 FND_MESSAGE.SET_TOKEN( 'COLUMN','tolerance');
4201 FND_MESSAGE.SET_TOKEN( 'VALUE1', '-100' );
4202 FND_MESSAGE.SET_TOKEN( 'VALUE2', '100' );
4203 FND_MSG_PUB.ADD;
4204 x_return_status := FND_API.G_RET_STS_ERROR;
4205 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4206 hz_utility_v2pub.debug(p_message=>'Tolerance should be between -100 and 100 .' ||
4207 'x_return_status = ' || x_return_status,
4208 p_prefix =>l_debug_prefix,
4209 p_msg_level=>fnd_log.level_statement);
4210 END IF;
4211
4212 END IF;
4213 END IF;
4214
4215 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4216 hz_utility_v2pub.debug(p_message=>'(+) after validate tolerance ... ' ||
4217 'x_return_status = ' || x_return_status,
4218 p_prefix =>l_debug_prefix,
4219 p_msg_level=>fnd_log.level_statement);
4220 END IF;
4221
4222
4223 -------------------------------------------------
4224 ---*** Validating Percent_Collectable ***---
4225 -------------------------------------------------
4226 IF p_customer_profile_rec.percent_collectable IS NOT NULL AND
4227 p_customer_profile_rec.percent_collectable <> FND_API.G_MISS_NUM
4228 AND ( p_create_update_flag = 'C' OR
4229 ( p_create_update_flag = 'U' AND
4230 p_customer_profile_rec.percent_collectable <> NVL( l_percent_collectable, FND_API.G_MISS_NUM ) ) )
4231 THEN
4232 IF p_customer_profile_rec.percent_collectable > 100 OR
4233 p_customer_profile_rec.percent_collectable < 0
4234 THEN
4235 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VALUE_BETWEEN' );
4236 FND_MESSAGE.SET_TOKEN( 'COLUMN','percent_collectable');
4237 FND_MESSAGE.SET_TOKEN( 'VALUE1', '0' );
4238 FND_MESSAGE.SET_TOKEN( 'VALUE2', '100' );
4239 FND_MSG_PUB.ADD;
4240 x_return_status := FND_API.G_RET_STS_ERROR;
4241
4242 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4243 hz_utility_v2pub.debug(p_message=>'Percent_Collectable should be between 0 and 100 .' ||
4244 'x_return_status = ' || x_return_status,
4245 p_prefix =>l_debug_prefix,
4246 p_msg_level=>fnd_log.level_statement);
4247 END IF;
4248
4249 END IF;
4250 END IF;
4251
4252 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4253 hz_utility_v2pub.debug(p_message=>'(+) after validate percent_collectable ... ' ||
4254 'x_return_status = ' || x_return_status,
4255 p_prefix =>l_debug_prefix,
4256 p_msg_level=>fnd_log.level_statement);
4257 END IF;
4258
4259
4260 -----------------------------------------
4261 ---*** Validating Override_Terms ***---
4262 -----------------------------------------
4263 -- override_terms is lookup code in lookup type YES/NO
4264 IF p_customer_profile_rec.override_terms IS NOT NULL AND
4265 p_customer_profile_rec.override_terms <> FND_API.G_MISS_CHAR
4266 AND ( p_create_update_flag = 'C' OR
4267 ( p_create_update_flag = 'U' AND
4268 p_customer_profile_rec.override_terms <> NVL( l_override_terms, FND_API.G_MISS_CHAR) ) )
4269 THEN
4270 validate_lookup (
4271 p_column => 'override_terms',
4272 p_lookup_type => 'YES/NO',
4273 p_column_value => p_customer_profile_rec.override_terms,
4274 x_return_status => x_return_status );
4275
4276
4277 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4278 hz_utility_v2pub.debug(p_message=>'override_terms is lookup code in lookup type YES/NO. ' ||
4279 'x_return_status = ' || x_return_status,
4280 p_prefix =>l_debug_prefix,
4281 p_msg_level=>fnd_log.level_statement);
4282 END IF;
4283
4284 END IF;
4285
4286 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4287 hz_utility_v2pub.debug(p_message=>'(+) after override_terms ... ' ||
4288 'x_return_status = ' || x_return_status,
4289 p_prefix =>l_debug_prefix,
4290 p_msg_level=>fnd_log.level_statement);
4291 END IF;
4292
4293
4294 ----------------------------------------------
4295 ---***Validating lockbox_matching_option***---
4296 ----------------------------------------------
4297 IF p_customer_profile_rec.lockbox_matching_option IS NOT NULL AND
4298 p_customer_profile_rec.lockbox_matching_option <> FND_API.G_MISS_CHAR
4299 AND ( p_create_update_flag = 'C' OR
4300 ( p_create_update_flag = 'U' AND
4301 p_customer_profile_rec.lockbox_matching_option <> NVL( l_lockbox_matching_option, FND_API.G_MISS_CHAR) ) )
4302 THEN
4303 validate_lookup (
4304 p_column => 'lockbox_matching_option',
4305 p_lookup_type => 'ARLPLB_MATCHING_OPTION',
4306 p_column_value => p_customer_profile_rec.lockbox_matching_option,
4307 x_return_status => x_return_status );
4308
4309 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4310 hz_utility_v2pub.debug(p_message=>'lockbox_matching_option is lookup code in lookup type
4311 ARLPLB_MATCHING_OPTION.' ||'x_return_status = ' ||
4312 x_return_status,
4313 p_prefix =>l_debug_prefix,
4314 p_msg_level=>fnd_log.level_statement);
4315 END IF;
4316
4317 END IF;
4318
4319 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4320 hz_utility_v2pub.debug(p_message=>'(+) after validate lockbox_matching_option ... ' ||
4321 'x_return_status = ' || x_return_status,
4322 p_prefix =>l_debug_prefix,
4323 p_msg_level=>fnd_log.level_statement);
4324 END IF;
4325
4326
4327 --------------------------------------------
4328 --*** Validating autocash_hierarchy_id***---
4329 --------------------------------------------
4330 IF p_customer_profile_rec.autocash_hierarchy_id IS NOT NULL AND
4331 p_customer_profile_rec.autocash_hierarchy_id <> FND_API.G_MISS_NUM
4332 AND ( p_create_update_flag = 'C' OR
4333 ( p_create_update_flag = 'U' AND
4334 p_customer_profile_rec.autocash_hierarchy_id <> NVL( l_autocash_hierarchy_id, FND_API.G_MISS_NUM) ) )
4335 THEN
4336 check_auto_hierid_fk (
4337 p_column => 'autocash_hierarchy_id',
4338 p_column_value => p_customer_profile_rec.autocash_hierarchy_id,
4339 x_return_status => x_return_status );
4340
4341 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4342 hz_utility_v2pub.debug(p_message=>'autocash_hierarchy_id is foreign key to
4343 ar_autocash_hierarchies. ' || 'x_return_status = ' ||
4344 x_return_status,
4345 p_prefix =>l_debug_prefix,
4346 p_msg_level=>fnd_log.level_statement);
4347 END IF;
4348
4349 END IF;
4350
4351 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4352 hz_utility_v2pub.debug(p_message=>'(+) after validate autocash_hierarchy_id ... ' ||
4353 'x_return_status = ' || x_return_status,
4354 p_prefix =>l_debug_prefix,
4355 p_msg_level=>fnd_log.level_statement);
4356 END IF;
4357
4358
4359 ---------------------------------------------------------
4360 -----*** Validating autocash_hierarchy_id_for_adr***-----
4361 ---------------------------------------------------------
4362 IF p_customer_profile_rec.autocash_hierarchy_id_for_adr IS NOT NULL AND
4363 p_customer_profile_rec.autocash_hierarchy_id_for_adr <> FND_API.G_MISS_NUM
4364 AND ( p_create_update_flag = 'C' OR
4365 ( p_create_update_flag = 'U' AND
4366 p_customer_profile_rec.autocash_hierarchy_id_for_adr<> NVL( l_autocash_hierarchy_id_for_ad, FND_API.G_MISS_NUM) ) )
4367 THEN
4368 check_auto_hierid_fk (
4369 p_column => 'autocash_hierarchy_id_for_adr',
4370 p_column_value => p_customer_profile_rec.autocash_hierarchy_id_for_adr,
4371 x_return_status=> x_return_status );
4372
4373 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4374 hz_utility_v2pub.debug(p_message=>'autocash_hierarchy_id_for_adr is foreign key to
4375 ar_autocash_hierarchies . ' || 'x_return_status = ' ||
4376 x_return_status,
4377 p_prefix =>l_debug_prefix,
4378 p_msg_level=>fnd_log.level_statement);
4379 END IF;
4380
4381 END IF;
4382
4383 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4384 hz_utility_v2pub.debug(p_message=>'(+) after validate autocash_hierarchy_id_for_adr ... ' ||
4385 'x_return_status = ' || x_return_status,
4386 p_prefix =>l_debug_prefix,
4387 p_msg_level=>fnd_log.level_statement);
4388 END IF;
4389
4390 --------------------------------------------
4391 ---*** Validating statement_cycle_id ***---
4392 --------------------------------------------
4393 IF p_customer_profile_rec.statement_cycle_id IS NOT NULL AND
4394 p_customer_profile_rec.statement_cycle_id <> FND_API.G_MISS_NUM
4395 AND ( p_create_update_flag = 'C' OR
4396 ( p_create_update_flag = 'U' AND
4397 p_customer_profile_rec.statement_cycle_id <> NVL( l_statement_cycle_id, FND_API.G_MISS_NUM) ) )
4398 THEN
4399 check_stat_cycid_fk (
4400 p_column => 'statement_cycle_id',
4401 p_column_value => p_customer_profile_rec.statement_cycle_id,
4402 x_return_status => x_return_status );
4403
4404 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4405 hz_utility_v2pub.debug(p_message=>'statement_cycle_id is foreign key to
4406 ar_statement_cycles . ' || 'x_return_status = ' ||
4407 x_return_status,
4408 p_prefix =>l_debug_prefix,
4409 p_msg_level=>fnd_log.level_statement);
4410 END IF;
4411
4412 END IF;
4413
4414 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4415 hz_utility_v2pub.debug(p_message=>'(+) after validate statement_cycle_id ... ' ||
4416 'x_return_status = ' || x_return_status,
4417 p_prefix =>l_debug_prefix,
4418 p_msg_level=>fnd_log.level_statement);
4419 END IF;
4420
4421
4422 ---------------------------------------------
4423 --------------*** Clearing Days***-----------
4424 ---------------------------------------------
4425 IF p_customer_profile_rec.clearing_days IS NOT NULL AND
4426 p_customer_profile_rec.clearing_days <> FND_API.G_MISS_NUM
4427 AND ( p_create_update_flag = 'C' OR
4428 ( p_create_update_flag = 'U' AND
4429 p_customer_profile_rec.clearing_days <> NVL( l_clearing_days, FND_API.G_MISS_NUM) ) )
4430 THEN
4431 -- Error
4432 check_positive_value (
4433 p_column => 'clearing_days',
4434 p_column_value => p_customer_profile_rec.clearing_days,
4435 x_return_status => x_return_status );
4436
4437 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4438 hz_utility_v2pub.debug(p_message=>'clearing_days should be > 0.' ||'x_return_status = ' ||
4439 x_return_status,
4440 p_prefix =>l_debug_prefix,
4441 p_msg_level=>fnd_log.level_statement);
4442 END IF;
4443
4444
4445 END IF;
4446 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4447 hz_utility_v2pub.debug(p_message=>'(+) after validate clearing_days... ' ||
4448 'x_return_status = ' || x_return_status,
4449 p_prefix =>l_debug_prefix,
4450 p_msg_level=>fnd_log.level_statement);
4451 END IF;
4452
4453 ---------------------------------------------
4454 ------------*** Payment_grace_days***--------
4455 ---------------------------------------------
4456 IF p_customer_profile_rec.payment_grace_days IS NOT NULL AND
4457 p_customer_profile_rec.payment_grace_days <> FND_API.G_MISS_NUM
4458 AND ( p_create_update_flag = 'C' OR
4459 ( p_create_update_flag = 'U' AND
4460 p_customer_profile_rec.payment_grace_days <> NVL( l_payment_grace_days, FND_API.G_MISS_NUM) ) )
4461 THEN
4462 check_positive_value (
4463 p_column => 'payment_grace_days',
4464 p_column_value => p_customer_profile_rec.payment_grace_days,
4465 x_return_status => x_return_status );
4466
4467 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4468 hz_utility_v2pub.debug(p_message=>'payment_grace_days should be > 0.' ||'x_return_status = ' ||
4469 x_return_status,
4470 p_prefix =>l_debug_prefix,
4471 p_msg_level=>fnd_log.level_statement);
4472 END IF;
4473
4474 END IF;
4475
4476 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4477 hz_utility_v2pub.debug(p_message=>'(+) after validate payment_grace_days... ' ||
4478 'x_return_status = ' || x_return_status,
4479 p_prefix =>l_debug_prefix,
4480 p_msg_level=>fnd_log.level_statement);
4481 END IF;
4482
4483
4484 ---------------------------------------------
4485 -----------***Interest_period_day***---------
4486 ---------------------------------------------
4487 IF p_customer_profile_rec.interest_period_days IS NOT NULL AND
4488 p_customer_profile_rec.interest_period_days <> FND_API.G_MISS_NUM
4489 THEN
4490 check_greater_than_zero (
4491 p_column => 'interest_period_days',
4492 p_column_value => p_customer_profile_rec.interest_period_days,
4493 x_return_status => x_return_status );
4494
4495 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4496 hz_utility_v2pub.debug(p_message=>'interest_period_days should be > 0.' ||'x_return_status = ' ||
4497 x_return_status,
4498 p_prefix =>l_debug_prefix,
4499 p_msg_level=>fnd_log.level_statement);
4500 END IF;
4501
4502 END IF;
4503
4504 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4505 hz_utility_v2pub.debug(p_message=>'(+) after validate interest_period_days... ' ||
4506 'x_return_status = ' || x_return_status,
4507 p_prefix =>l_debug_prefix,
4508 p_msg_level=>fnd_log.level_statement);
4509 END IF;
4510
4511
4512 --------------------------------------------
4513 ---***Validating dunning_letter_set_id***---
4514 --------------------------------------------
4515 IF p_customer_profile_rec.dunning_letter_set_id IS NOT NULL AND
4516 p_customer_profile_rec.dunning_letter_set_id <> FND_API.G_MISS_NUM
4517 THEN
4518 /* Bug 5095478. DUNNING_LETTER_SET_ID is obsoleted.
4519 This validation is changed to throw an error if user passes the
4520 DUNNING_LETTER_SET_ID */
4521
4522 check_dunning_letid_fk (
4523 p_column => 'dunning_letter_set_id',
4524 p_column_value => p_customer_profile_rec.dunning_letter_set_id,
4525 x_return_status => x_return_status );
4526
4527 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4528 hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id is foreign key to
4529 ar_dunning_letter_sets . ' || 'x_return_status = ' ||
4530 x_return_status,
4531 p_prefix =>l_debug_prefix,
4532 p_msg_level=>fnd_log.level_statement);
4533 END IF;
4534 /* IF fnd_profile.value('HZ_API_ERR_ON_OBSOLETE_COLUMN')='Y'
4535 THEN
4536 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_OBSOLETE_COLUMN');
4537 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'dunning_letter_set_id' );
4538 FND_MSG_PUB.ADD;
4539 x_return_status := FND_API.G_RET_STS_ERROR;
4540 END IF; */
4541
4542 END IF;
4543
4544 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4545 hz_utility_v2pub.debug(p_message=>'(+) after validate dunning_letter_set_id ... ' ||
4546 'x_return_status = ' || x_return_status,
4547 p_prefix =>l_debug_prefix,
4548 p_msg_level=>fnd_log.level_statement);
4549 END IF;
4550
4551 --------------------------------------------
4552 ---*** Validating tax_printing_option ***---
4553 --------------------------------------------
4554 IF p_customer_profile_rec.tax_printing_option IS NOT NULL AND
4555 p_customer_profile_rec.tax_printing_option <> FND_API.G_MISS_CHAR
4556 AND ( p_create_update_flag = 'C' OR
4557 ( p_create_update_flag = 'U' AND
4558 p_customer_profile_rec.tax_printing_option <> NVL( l_tax_printing_option, FND_API.G_MISS_CHAR ) ))
4559 THEN
4560 validate_lookup (
4561 p_column => 'tax_printing_option',
4562 p_lookup_type => 'TAX_PRINTING_OPTION',
4563 p_column_value => p_customer_profile_rec.tax_printing_option,
4564 x_return_status => x_return_status );
4565
4566 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4567 hz_utility_v2pub.debug(p_message=>'tax_printing_option is lookup code in lookup type
4568 TAX_PRINTING_OPTION.' ||'x_return_status = ' ||
4569 x_return_status,
4570 p_prefix =>l_debug_prefix,
4571 p_msg_level=>fnd_log.level_statement);
4572 END IF;
4573
4574 END IF;
4575
4576 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4577 hz_utility_v2pub.debug(p_message=>'(+) after validate tax_printing_option ... ' ||
4578 'x_return_status = ' || x_return_status,
4579 p_prefix =>l_debug_prefix,
4580 p_msg_level=>fnd_log.level_statement);
4581 END IF;
4582
4583
4584 ----------------------------------------
4585 ----*** Validating standard_terms***---
4586 ----------------------------------------
4587 IF p_customer_profile_rec.standard_terms IS NOT NULL AND
4588 p_customer_profile_rec.standard_terms <> FND_API.G_MISS_NUM
4589 AND ( p_create_update_flag = 'C' OR
4590 ( p_create_update_flag = 'U' AND
4591 p_customer_profile_rec.standard_terms <> NVL( l_standard_terms, FND_API.G_MISS_NUM ) ))
4592 THEN
4593 l_ckeck_acc_bfb_enabled := 'N';
4594 /* Commented the below code and added new set of validations below
4595 for enhancement # 5529044
4596 -- When Updating a BFB enabled site use profile which has a null payment term id
4597 -- with a new payment term id check that the payment term id is a BFB payment term
4598 -- if BFB is enabled for the account profile and check that the payment term is
4599 -- a non BFB payment term if BFB is disabled for the Account profile.
4600 if (p_customer_profile_rec.site_use_id is NOT NULL and p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM
4601 and p_create_update_flag = 'U' )then
4602 l_ckeck_acc_bfb_enabled := 'Y';
4603 ll_cons_inv_flag := 'N';
4604 begin
4605 select cons_inv_flag
4606 into ll_cons_inv_flag
4607 from hz_customer_profiles
4608 where cust_account_id = p_customer_profile_rec.cust_account_id
4609 and site_use_id is NULL;
4610 exception when others then
4611 ll_cons_inv_flag := 'N';
4612 end;
4613 else
4614 ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4615 end if;
4616 */
4617
4618 ----------------
4619 -- Below validatins are added for enhancement # 5529044
4620 -- If BFB is enabled, check standard_terms is a BFB standard term
4621 -- If BFB is not enabled, any valid standard_terms ok irrespective of BFB
4622 -- For site profile, if Account level is BFB disabled,
4623 -- validate any valid standard_terms, irrespective of site level BFB
4624 if p_customer_profile_rec.site_use_id is NOT NULL then -- Site profile
4625 ll_cons_inv_flag := 'N';
4626 begin
4627 select cons_inv_flag
4628 into ll_cons_inv_flag
4629 from hz_customer_profiles
4630 where cust_account_id = p_customer_profile_rec.cust_account_id
4631 and site_use_id is NULL;
4632 exception when others then
4633 ll_cons_inv_flag := 'N';
4634 end;
4635 if ll_cons_inv_flag = 'Y' then
4636 ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4637 else
4638 l_ckeck_acc_bfb_enabled := 'Y';
4639 end if;
4640 else -- Account profile
4641 ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4642 end if;
4643 ----------------
4644
4645 check_standard_terms_fk (
4646 p_column => 'standard_terms',
4647 p_column_value => p_customer_profile_rec.standard_terms,
4648 p_cons_inv_flag => ll_cons_inv_flag,
4649 p_ckeck_acc_bfb_enabled => l_ckeck_acc_bfb_enabled,
4650 x_return_status => x_return_status );
4651
4652 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4653 hz_utility_v2pub.debug(p_message=>'standard_terms is foreign key to ra_terms . ' ||
4654 'x_return_status = ' || x_return_status,
4655 p_prefix =>l_debug_prefix,
4656 p_msg_level=>fnd_log.level_statement);
4657 END IF;
4658
4659 END IF;
4660
4661 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4662 hz_utility_v2pub.debug(p_message=>'(+) after validate standard_terms ... ' ||
4663 'x_return_status = ' || x_return_status,
4664 p_prefix =>l_debug_prefix,
4665 p_msg_level=>fnd_log.level_statement);
4666 END IF;
4667
4668
4669 -------------------------------------------
4670 ---*** Validating grouping_rule_id ***---
4671 -------------------------------------------
4672 IF p_customer_profile_rec.grouping_rule_id IS NOT NULL AND
4673 p_customer_profile_rec.grouping_rule_id <> FND_API.G_MISS_NUM
4674 AND ( p_create_update_flag = 'C' OR
4675 ( p_create_update_flag = 'U' AND
4676 p_customer_profile_rec.grouping_rule_id <> NVL( l_grouping_rule_id, FND_API.G_MISS_NUM ) ))
4677
4678 THEN
4679 check_grouping_ruleid_fk (
4680 p_column => 'grouping_rule_id',
4681 p_column_value => p_customer_profile_rec.grouping_rule_id,
4682 x_return_status => x_return_status );
4683
4684 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4685 hz_utility_v2pub.debug(p_message=>'grouping_rule_id is foreign key to ra_grouping_rules . ' ||
4686 'x_return_status = ' || x_return_status,
4687 p_prefix =>l_debug_prefix,
4688 p_msg_level=>fnd_log.level_statement);
4689 END IF;
4690
4691 END IF;
4692
4693 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4694 hz_utility_v2pub.debug(p_message=>'(+) after validate grouping_rule_id ... ' ||
4695 'x_return_status = ' || x_return_status,
4696 p_prefix =>l_debug_prefix,
4697 p_msg_level=>fnd_log.level_statement);
4698 END IF;
4699 -------------------------------------------
4700 ---*** Validating Automatch Set Id ***---
4701 -------------------------------------------
4702 IF p_customer_profile_rec.automatch_set_id IS NOT NULL AND
4703 p_customer_profile_rec.automatch_set_id <> FND_API.G_MISS_NUM
4704 AND ( p_create_update_flag = 'C' OR
4705 ( p_create_update_flag = 'U' AND
4706 p_customer_profile_rec.automatch_set_id <> NVL( l_automatch_set_id, FND_API.G_MISS_NUM ) ))
4707
4708 THEN
4709 check_automatch_set_id_fk (
4710 p_column => 'automatch_set_id',
4711 p_column_value => p_customer_profile_rec.automatch_set_id,
4712 x_return_status => x_return_status );
4713
4714 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4715 hz_utility_v2pub.debug(p_message=>'automatch_set_id is foreign key to AR_CASH_AUTO_RULE_SETS. ' ||
4716 'x_return_status = ' || x_return_status,
4717 p_prefix =>l_debug_prefix,
4718 p_msg_level=>fnd_log.level_statement);
4719 END IF;
4720
4721 END IF;
4722
4723 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4724 hz_utility_v2pub.debug(p_message=>'(+) after validate automatch_set_id ... ' ||
4725 'x_return_status = ' || x_return_status,
4726 p_prefix =>l_debug_prefix,
4727 p_msg_level=>fnd_log.level_statement);
4728 END IF;
4729
4730 -------------------------------------------------
4731 ------------*** Discount_grace_days **---------------
4732 -------------------------------------------------
4733 IF v_customer_profile_rec.discount_grace_days IS NOT NULL AND
4734 v_customer_profile_rec.discount_grace_days <> FND_API.G_MISS_NUM
4735 AND ( p_create_update_flag = 'C' OR
4736 ( p_create_update_flag = 'U' AND
4737 p_customer_profile_rec.discount_grace_days <> NVL( l_discount_grace_days, FND_API.G_MISS_NUM ) ))
4738 THEN
4739 check_positive_value (
4740 p_column => 'discount_grace_days',
4741 p_column_value => v_customer_profile_rec.discount_grace_days,
4742 x_return_status => x_return_status );
4743
4744 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4745 hz_utility_v2pub.debug(p_message=>'discount_grace_days should be > 0.' ||'x_return_status = ' ||
4746 x_return_status,
4747 p_prefix =>l_debug_prefix,
4748 p_msg_level=>fnd_log.level_statement);
4749 END IF;
4750
4751 END IF;
4752
4753 IF p_create_update_flag = 'C' OR
4754 (p_create_update_flag = 'U' AND
4755 v_customer_profile_rec.profile_class_id IS NOT NULL AND
4756 v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM)
4757 THEN
4758
4759 IF v_customer_profile_rec.discount_terms IS NULL THEN
4760 v_customer_profile_rec.discount_terms :=
4761 l_profile_class_rec.discount_terms;
4762 END IF;
4763
4764 IF v_customer_profile_rec.discount_grace_days IS NULL AND
4765 v_customer_profile_rec.discount_terms = 'Y'
4766 THEN
4767
4768 v_customer_profile_rec.discount_grace_days :=
4769 l_profile_class_rec.discount_grace_days;
4770 END IF;
4771 END IF;
4772
4773 IF p_create_update_flag = 'U' AND
4774 v_customer_profile_rec.profile_class_id IS NULL THEN
4775 IF v_customer_profile_rec.discount_terms IS NULL
4776 THEN
4777 v_customer_profile_rec.discount_terms := l_discount_terms;
4778 END IF;
4779 IF v_customer_profile_rec.discount_grace_days IS NULL THEN
4780 v_customer_profile_rec.discount_grace_days := l_discount_grace_days;
4781 END IF;
4782 END IF;
4783
4784
4785 IF v_customer_profile_rec.discount_terms = 'N' OR
4786 v_customer_profile_rec.discount_terms is NULL
4787 THEN
4788 IF v_customer_profile_rec.discount_grace_days >= 0 AND
4789 v_customer_profile_rec.discount_grace_days <> FND_API.G_MISS_NUM
4790 THEN
4791 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4792 FND_MESSAGE.SET_TOKEN( 'COLUMN1', 'discount_terms' );
4793 FND_MESSAGE.SET_TOKEN( 'VALUE1', 'N' );
4794 FND_MESSAGE.SET_TOKEN( 'COLUMN2', 'discount_grace_days');
4795 FND_MESSAGE.SET_TOKEN( 'VALUE2', 'NULL' );
4796 FND_MSG_PUB.ADD;
4797 x_return_status := FND_API.G_RET_STS_ERROR;
4798
4799 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4800 hz_utility_v2pub.debug(p_message=>'discount_grace_days should be null when discount_terms is N.' ||
4801 'x_return_status = ' || x_return_status,
4802 p_prefix =>l_debug_prefix,
4803 p_msg_level=>fnd_log.level_statement);
4804 END IF;
4805
4806 END IF;
4807 END IF;
4808
4809 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4810 hz_utility_v2pub.debug(p_message=>'(+) after validate discount_terms ... ' ||
4811 'x_return_status = ' || x_return_status,
4812 p_prefix =>l_debug_prefix,
4813 p_msg_level=>fnd_log.level_statement);
4814 END IF;
4815
4816
4817 -----------------------------------------------------------
4818 ------------*** dunning_letters ***------------------------
4819 ----------------------------------------------------------
4820
4821 IF p_create_update_flag = 'C' OR
4822 (p_create_update_flag = 'U' AND
4823 v_customer_profile_rec.profile_class_id IS NOT NULL AND
4824 v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM)
4825 THEN
4826 IF v_customer_profile_rec.dunning_letters IS NULL THEN
4827 v_customer_profile_rec.dunning_letters :=
4828 l_profile_class_rec.dunning_letters;
4829 END IF;
4830 /* Bug Fix:2884220 Added "v_customer_profile_rec.dunning_letters='Y'" Condition
4831 when initializing dunning_letter_set_id from hz_cust_profile_classes.
4832 */
4833 /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4834 IF v_customer_profile_rec.dunning_letters='Y' and
4835 v_customer_profile_rec.dunning_letter_set_id IS NULL THEN
4836 v_customer_profile_rec.dunning_letter_set_id :=
4837 l_profile_class_rec.dunning_letter_set_id;
4838 END IF;*/
4839 END IF;
4840
4841 IF p_create_update_flag = 'U' AND
4842 v_customer_profile_rec.profile_class_id IS NULL
4843 THEN
4844 IF v_customer_profile_rec.dunning_letters IS NULL THEN
4845 v_customer_profile_rec.dunning_letters := l_dunning_letters;
4846 END IF;
4847 /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4848 IF v_customer_profile_rec.dunning_letter_set_id IS NULL THEN
4849 v_customer_profile_rec.dunning_letter_set_id := l_dunning_letter_set_id;
4850 END IF; */
4851 END IF;
4852
4853 /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4854 IF v_customer_profile_rec.dunning_letters = 'Y'
4855 THEN
4856 IF v_customer_profile_rec.dunning_letter_set_id = FND_API.G_MISS_NUM OR
4857 v_customer_profile_rec.dunning_letter_set_id IS NULL
4858 THEN
4859 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4860 FND_MESSAGE.SET_TOKEN('COLUMN1', 'dunning_letters');
4861 FND_MESSAGE.SET_TOKEN('VALUE1', 'Y');
4862 FND_MESSAGE.SET_TOKEN('COLUMN2','dunning_letter_set_id');
4863 FND_MSG_PUB.ADD;
4864 x_return_status := FND_API.G_RET_STS_ERROR;
4865
4866 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4867 hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id cannot be NULL when dunning_letters is Y.' ||
4868 'x_return_status = ' || x_return_status,
4869 p_prefix =>l_debug_prefix,
4870 p_msg_level=>fnd_log.level_statement);
4871 END IF;
4872
4873 END IF;
4874 END IF;
4875
4876 IF v_customer_profile_rec.dunning_letters = 'N' OR
4877 v_customer_profile_rec.dunning_letters IS NULL
4878 THEN
4879 IF v_customer_profile_rec.dunning_letter_set_id >= 0 AND
4880 v_customer_profile_rec.dunning_letter_set_id <> FND_API.G_MISS_NUM
4881 THEN
4882 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4883 FND_MESSAGE.SET_TOKEN('COLUMN1','dunning_letters');
4884 FND_MESSAGE.SET_TOKEN('VALUE1','N');
4885 FND_MESSAGE.SET_TOKEN('COLUMN2','dunning_letter_set_id');
4886 FND_MESSAGE.SET_TOKEN('VALUE2','NULL');
4887 FND_MSG_PUB.ADD;
4888 x_return_status := FND_API.G_RET_STS_ERROR;
4889
4890 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4891 hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id should be NULL when dunning_letters is N.' ||
4892 'x_return_status = ' || x_return_status,
4893 p_prefix =>l_debug_prefix,
4894 p_msg_level=>fnd_log.level_statement);
4895 END IF;
4896
4897 END IF;
4898 END IF;*/
4899 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4900 hz_utility_v2pub.debug(p_message=>'(+) after validate duning_letters ... ' ||
4901 'x_return_status = ' || x_return_status,
4902 p_prefix =>l_debug_prefix,
4903 p_msg_level=>fnd_log.level_statement);
4904 END IF;
4905
4906
4907 ------------------------------------------------
4908 ---------*** send_statements ***----------------
4909 ------------------------------------------------
4910
4911 IF p_create_update_flag = 'C' OR
4912 ( p_create_update_flag = 'U' AND
4913 v_customer_profile_rec.profile_class_id is not null AND
4914 v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM )
4915 THEN
4916
4917 IF v_customer_profile_rec.send_statements IS NULL THEN
4918 v_customer_profile_rec.send_statements :=
4919 l_profile_class_rec.statements;
4920 END IF;
4921 /* Bug Fix:2884220 Added "v_customer_profile_rec.send_statements='Y'" Condition
4922 when initializing statement_cycle_id from hz_cust_profile_classes.
4923 */
4924 IF v_customer_profile_rec.send_statements='Y' and
4925 v_customer_profile_rec.statement_cycle_id IS NULL THEN
4926 v_customer_profile_rec.statement_cycle_id :=
4927 l_profile_class_rec.statement_cycle_id;
4928 END IF;
4929 IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4930 v_customer_profile_rec.credit_balance_statements :=
4931 l_profile_class_rec.credit_balance_statements;
4932 END IF;
4933
4934 -- Bug 5400422 : default from profile class
4935 IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
4936 v_customer_profile_rec.late_charge_calculation_trx :=
4937 l_profile_class_rec.late_charge_calculation_trx;
4938 END IF;
4939
4940 END IF;
4941
4942 IF p_create_update_flag = 'U' AND
4943 v_customer_profile_rec.profile_class_id is null
4944 THEN
4945 IF v_customer_profile_rec.send_statements IS NULL THEN
4946 v_customer_profile_rec.send_statements := l_send_statements;
4947 END IF;
4948 IF v_customer_profile_rec.statement_cycle_id IS NULL THEN
4949 v_customer_profile_rec.statement_cycle_id := l_statement_cycle_id;
4950 END IF;
4951 IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4952 v_customer_profile_rec.credit_balance_statements := l_credit_balance_statements;
4953 END IF;
4954 END IF;
4955
4956 IF v_customer_profile_rec.send_statements = 'Y' THEN
4957 IF v_customer_profile_rec.statement_cycle_id = FND_API.G_MISS_NUM OR
4958 v_customer_profile_rec.statement_cycle_id IS NULL
4959 THEN
4960 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4961 FND_MESSAGE.SET_TOKEN( 'COLUMN1','send_statements');
4962 FND_MESSAGE.SET_TOKEN( 'VALUE1','Y');
4963 FND_MESSAGE.SET_TOKEN( 'COLUMN2','statement_cycle_id');
4964 FND_MSG_PUB.ADD;
4965 x_return_status := FND_API.G_RET_STS_ERROR;
4966
4967 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4968 hz_utility_v2pub.debug(p_message=>'statement_cycle_id cannot be NULL when send_statements
4969 is Y.' || 'x_return_status = ' || x_return_status,
4970 p_prefix =>l_debug_prefix,
4971 p_msg_level=>fnd_log.level_statement);
4972 END IF;
4973
4974 END IF;
4975 IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4976 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4977 FND_MESSAGE.SET_TOKEN( 'COLUMN1','send_statements');
4978 FND_MESSAGE.SET_TOKEN( 'VALUE1','Y');
4979 FND_MESSAGE.SET_TOKEN( 'COLUMN2','credit_balance_statements');
4980 FND_MSG_PUB.ADD;
4981 x_return_status := FND_API.G_RET_STS_ERROR;
4982
4983 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4984 hz_utility_v2pub.debug(p_message=>'credit_balance_statements cannot be NULL when
4985 send_statements is Y .' || 'x_return_status = ' ||
4986 x_return_status,
4987 p_prefix =>l_debug_prefix,
4988 p_msg_level=>fnd_log.level_statement);
4989 END IF;
4990
4991 END IF;
4992 END IF;
4993
4994 IF v_customer_profile_rec.send_statements = 'N' OR
4995 v_customer_profile_rec.send_statements IS NULL
4996 THEN
4997 IF v_customer_profile_rec.statement_cycle_id >= 0 AND
4998 v_customer_profile_rec.statement_cycle_id <> FND_API.G_MISS_NUM
4999 THEN
5000 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5001 FND_MESSAGE.SET_TOKEN('COLUMN1', 'send_statements');
5002 FND_MESSAGE.SET_TOKEN('VALUE1', 'N');
5003 FND_MESSAGE.SET_TOKEN('COLUMN2','statement_cycle_id');
5004 FND_MESSAGE.SET_TOKEN('VALUE2', 'NULL');
5005 FND_MSG_PUB.ADD;
5006 x_return_status := FND_API.G_RET_STS_ERROR;
5007
5008 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5009 hz_utility_v2pub.debug(p_message=>'statement_cycle_id should be NULL when send_statements
5010 is N .' || 'x_return_status = ' || x_return_status,
5011 p_prefix =>l_debug_prefix,
5012 p_msg_level=>fnd_log.level_statement);
5013 END IF;
5014
5015 END IF;
5016 IF v_customer_profile_rec.credit_balance_statements <> 'N' AND
5017 v_customer_profile_rec.credit_balance_statements IS NOT NULL
5018 THEN
5019 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5020 FND_MESSAGE.SET_TOKEN('COLUMN1','send_statements');
5021 FND_MESSAGE.SET_TOKEN('VALUE1','N');
5022 FND_MESSAGE.SET_TOKEN('COLUMN2','credit_balance_statements');
5023 FND_MESSAGE.SET_TOKEN('VALUE2','N');
5024 FND_MSG_PUB.ADD;
5025 x_return_status := FND_API.G_RET_STS_ERROR;
5026
5027 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5028 hz_utility_v2pub.debug(p_message=>'credit_balance_statements should be N when send_statements
5029 is N .' || 'x_return_status = ' || x_return_status,
5030 p_prefix =>l_debug_prefix,
5031 p_msg_level=>fnd_log.level_statement);
5032 END IF;
5033
5034 END IF;
5035 END IF;
5036
5037 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5038 hz_utility_v2pub.debug(p_message=>'(+) after validate send_statements ... ' ||
5039 'x_return_status = ' || x_return_status,
5040 p_prefix =>l_debug_prefix,
5041 p_msg_level=>fnd_log.level_statement);
5042 END IF;
5043
5044
5045
5046 --------------------------------------------------
5047 ------------*** interest_charges ***--------------
5048 --------------------------------------------------
5049
5050 IF p_create_update_flag = 'C' OR
5051 ( p_create_update_flag = 'U' AND
5052 v_customer_profile_rec.profile_class_id is not null AND
5053 v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM )
5054 THEN
5055
5056 IF v_customer_profile_rec.interest_charges IS NULL THEN
5057 v_customer_profile_rec.interest_charges :=
5058 l_profile_class_rec.interest_charges;
5059 END IF;
5060 /* Bug Fix:2884220 Added "v_customer_profile_rec.interest_charges='Y'" Condition
5061 when initializing interest_period_days from hz_cust_profile_classes.
5062 */
5063 IF v_customer_profile_rec.interest_charges='Y' and
5064 v_customer_profile_rec.interest_period_days IS NULL THEN
5065 v_customer_profile_rec.interest_period_days :=
5066 l_profile_class_rec.interest_period_days;
5067 END IF;
5068 IF v_customer_profile_rec.charge_on_finance_charge_flag IS NULL THEN
5069 v_customer_profile_rec.charge_on_finance_charge_flag :=
5070 l_profile_class_rec.charge_on_finance_charge_flag;
5071 END IF;
5072
5073 -- Bug 5400422 : Defalut from profile classes
5074 IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
5075 v_customer_profile_rec.late_charge_calculation_trx :=
5076 l_profile_class_rec.late_charge_calculation_trx;
5077 END IF;
5078
5079 END IF;
5080
5081 IF p_create_update_flag = 'U' AND
5082 v_customer_profile_rec.profile_class_id is null
5083 THEN
5084 IF v_customer_profile_rec.interest_charges IS NULL THEN
5085 v_customer_profile_rec.interest_charges := l_interest_charges;
5086 END IF;
5087 IF v_customer_profile_rec.interest_period_days IS NULL THEN
5088 v_customer_profile_rec.interest_period_days := l_interest_period_days;
5089 END IF;
5090 IF v_customer_profile_rec.charge_on_finance_charge_flag IS NULL THEN
5091 v_customer_profile_rec.charge_on_finance_charge_flag :=
5092 l_finance_charge_flag;
5093 END IF;
5094 -- Bug 5400422 : Defalut from existing record
5095 IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
5096 v_customer_profile_rec.late_charge_calculation_trx :=
5097 l_late_charge_calculation_trx;
5098 END IF;
5099
5100 END IF;
5101
5102 IF v_customer_profile_rec.interest_charges = 'Y' THEN
5103 -- Bug 5400422 : Validate only for few late_charge_calculation_trx
5104 IF v_customer_profile_rec.late_charge_calculation_trx IN
5105 ('LATE', 'OVERDUE_LATE', 'OVERDUE') THEN
5106 IF v_customer_profile_rec.interest_period_days = FND_API.G_MISS_NUM OR
5107 v_customer_profile_rec.interest_period_days IS NULL
5108 THEN
5109 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_INT_CHARGES_Y' );
5110 FND_MSG_PUB.ADD;
5111 x_return_status := FND_API.G_RET_STS_ERROR;
5112 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5113 hz_utility_v2pub.debug(p_message=>'interest_period_days cannot be NULL when interest_charges is Y.' || 'x_return_status = ' || x_return_status,
5114 p_prefix =>l_debug_prefix,
5115 p_msg_level=>fnd_log.level_statement);
5116 END IF;
5117
5118 END IF;
5119 END IF;
5120 /* Commented the mandatory check for 2125994.
5121 validate_mandatory (
5122 p_create_update_flag => p_create_update_flag,
5123 p_column => 'charge_on_finance_charge_flag',
5124 p_column_value => v_customer_profile_rec.charge_on_finance_charge_flag,
5125 x_return_status => x_return_status );
5126
5127
5128 IF G_DEBUG THEN
5129 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5130 'charge_on_finance_charge_flag is mandatory. ' ||
5131 'x_return_status = ' || x_return_status, l_debug_prefix );
5132 END IF;
5133 */
5134 END IF;
5135 /*
5136 -- This validation is removed for based on bug # 5190290
5137 -- Confirmed from AR team that, by removing this validation, there is no
5138 -- impact on AR setup forms and there is no impact on AR late charges calculation.
5139 IF v_customer_profile_rec.interest_charges = 'N' OR
5140 v_customer_profile_rec.interest_charges IS NULL
5141 THEN
5142 IF v_customer_profile_rec.interest_period_days >= 0 AND
5143 v_customer_profile_rec.interest_period_days <> FND_API.G_MISS_NUM
5144 THEN
5145 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5146 FND_MESSAGE.SET_TOKEN( 'COLUMN1','interest_charges');
5147 FND_MESSAGE.SET_TOKEN( 'VALUE1','N');
5148 FND_MESSAGE.SET_TOKEN( 'COLUMN2','interest_period_days');
5149 FND_MESSAGE.SET_TOKEN( 'VALUE2','NULL');
5150 FND_MSG_PUB.ADD;
5151 x_return_status := FND_API.G_RET_STS_ERROR;
5152
5153 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5154 hz_utility_v2pub.debug(p_message=>'Interest_period_days should be NULL when interest_charges
5155 is N .' || 'x_return_status = ' || x_return_status,
5156 p_prefix =>l_debug_prefix,
5157 p_msg_level=>fnd_log.level_statement);
5158 END IF;
5159
5160 END IF;
5161 IF v_customer_profile_rec.charge_on_finance_charge_flag = 'Y'
5162 THEN
5163 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5164 FND_MESSAGE.SET_TOKEN( 'COLUMN1','interest_charges');
5165 FND_MESSAGE.SET_TOKEN( 'VALUE1','N');
5166 FND_MESSAGE.SET_TOKEN( 'COLUMN2','charge_on_finance_charge_flag');
5167 FND_MESSAGE.SET_TOKEN( 'VALUE2','N');
5168 FND_MSG_PUB.ADD;
5169 x_return_status := FND_API.G_RET_STS_ERROR;
5170
5171 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5172 hz_utility_v2pub.debug(p_message=>'charge_on_finance_charge_flag cannot be Y when
5173 interest_charges is N .' || 'x_return_status ='
5174 || x_return_status,
5175 p_prefix =>l_debug_prefix,
5176 p_msg_level=>fnd_log.level_statement);
5177 END IF;
5178
5179 END IF;
5180 END IF;
5181 */
5182 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5183 hz_utility_v2pub.debug(p_message=>'(+) after validate interest_charges ... ' ||
5184 'x_return_status = ' || x_return_status,
5185 p_prefix =>l_debug_prefix,
5186 p_msg_level=>fnd_log.level_statement);
5187 END IF;
5188
5189 -----------------------------------------------------------------------
5190 -- Credit_classification
5191 -----------------------------------------------------------------------
5192 -- Validate lookup_code of the CREDIT_CLASSIFICATION
5193 IF p_customer_profile_rec.credit_classification IS NOT NULL AND
5194 p_customer_profile_rec.credit_classification <> FND_API.G_MISS_CHAR AND
5195 ( p_create_update_flag = 'C' OR
5196 ( p_create_update_flag = 'U' AND
5197 p_customer_profile_rec.credit_classification <> NVL( l_credit_classification, FND_API.G_MISS_CHAR ) ) )
5198 THEN
5199 validate_lookup (
5200 p_column => 'credit_classification',
5201 p_lookup_table => 'AR_LOOKUPS',
5202 p_lookup_type => 'AR_CMGT_CREDIT_CLASSIFICATION',
5203 p_column_value => p_customer_profile_rec.credit_classification,
5204 x_return_status => x_return_status );
5205
5206 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5207 hz_utility_v2pub.debug(p_message=>'credit_classification is lookup code in lookup type AR_CMGT_CREDIT_CLASSIFICATION in ar_lookups. ' ||
5208 'x_return_status = ' || x_return_status,
5209 p_prefix =>l_debug_prefix,
5210 p_msg_level=>fnd_log.level_statement);
5211 END IF;
5212
5213
5214 END IF;
5215
5216
5217 -- Debug info.
5218
5219 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5220 hz_utility_v2pub.debug(p_message=>'validate_customer_profile (-)',
5221 p_prefix=>l_debug_prefix,
5222 p_msg_level=>fnd_log.level_procedure);
5223 END IF;
5224
5225
5226 ----------------------------------------------
5227 -- validate LATE_CHARGE_CALCULATION_TRX
5228 ----------------------------------------------
5229
5230 -- LATE_CHARGE_CALCULATION_TRX is lookup code in lookup type AR_MANDATORY_LATE_CHARGES
5231 IF p_customer_profile_rec.late_charge_calculation_trx IS NOT NULL AND
5232 p_customer_profile_rec.late_charge_calculation_trx <> FND_API.G_MISS_CHAR AND
5233 ( p_create_update_flag = 'C' OR
5234 ( p_create_update_flag = 'U' AND
5235 p_customer_profile_rec.late_charge_calculation_trx <> NVL( l_late_charge_calculation_trx, FND_API.G_MISS_CHAR ) ) )
5236 THEN
5237 validate_lookup (
5238 p_column => 'late_charge_calculation_trx',
5239 p_lookup_type => 'AR_MANDATORY_LATE_CHARGES',
5240 p_column_value => p_customer_profile_rec.late_charge_calculation_trx,
5241 x_return_status => x_return_status );
5242
5243 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5244 hz_utility_v2pub.debug(p_message=>'late_charge_calculation_trx is lookup code in lookup type AR_MANDATORY_LATE_CHARGES. ' ||
5245 'x_return_status = ' || x_return_status,
5246 p_prefix =>l_debug_prefix,
5247 p_msg_level=>fnd_log.level_statement);
5248 END IF;
5249
5250 END IF;
5251
5252 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5253 hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_calculation_trx ... ' ||
5254 'x_return_status = ' || x_return_status,
5255 p_prefix =>l_debug_prefix,
5256 p_msg_level=>fnd_log.level_statement);
5257 END IF;
5258
5259 ----------------------------------------------
5260 -- validate CREDIT_ITEMS_FLAG
5261 ----------------------------------------------
5262
5263 -- CREDIT_ITEMS_FLAG is lookup code in lookup type YES/NO
5264 IF p_customer_profile_rec.credit_items_flag IS NOT NULL AND
5265 p_customer_profile_rec.credit_items_flag <> FND_API.G_MISS_CHAR
5266 AND ( p_create_update_flag = 'C' OR
5267 ( p_create_update_flag = 'U' AND
5268 p_customer_profile_rec.credit_items_flag <> NVL( l_credit_items_flag, FND_API.G_MISS_CHAR ) ) )
5269 THEN
5270 validate_lookup (
5271 p_column => 'credit_items_flag',
5272 p_lookup_type => 'YES/NO',
5273 p_column_value => p_customer_profile_rec.credit_items_flag,
5274 x_return_status => x_return_status );
5275
5276
5277 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5278 hz_utility_v2pub.debug(p_message=>'credit_items_flag is lookup code in lookup type YES/NO. ' ||
5279 'x_return_status = ' || x_return_status,
5280 p_prefix =>l_debug_prefix,
5281 p_msg_level=>fnd_log.level_statement);
5282 END IF;
5283
5284 END IF;
5285
5286 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5287 hz_utility_v2pub.debug(p_message=>'(+) after validate credit_items_flag ... ' ||
5288 'x_return_status = ' || x_return_status,
5289 p_prefix =>l_debug_prefix,
5290 p_msg_level=>fnd_log.level_statement);
5291 END IF;
5292
5293 ----------------------------------------------
5294 -- validate DISPUTED_TRANSACTIONS_FLAG
5295 ----------------------------------------------
5296
5297 -- DISPUTED_TRANSACTIONS_FLAG is lookup code in lookup type YES/NO
5298 IF p_customer_profile_rec.disputed_transactions_flag IS NOT NULL AND
5299 p_customer_profile_rec.disputed_transactions_flag <> FND_API.G_MISS_CHAR
5300 AND ( p_create_update_flag = 'C' OR
5301 ( p_create_update_flag = 'U' AND
5302 p_customer_profile_rec.disputed_transactions_flag <> NVL( l_disputed_transactions_flag, FND_API.G_MISS_CHAR ) ) )
5303 THEN
5304 validate_lookup (
5305 p_column => 'disputed_transactions_flag',
5306 p_lookup_type => 'YES/NO',
5307 p_column_value => p_customer_profile_rec.disputed_transactions_flag,
5308 x_return_status => x_return_status );
5309
5310
5311 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5312 hz_utility_v2pub.debug(p_message=>'disputed_transactions_flag is lookup code in lookup type YES/NO. ' ||
5313 'x_return_status = ' || x_return_status,
5314 p_prefix =>l_debug_prefix,
5315 p_msg_level=>fnd_log.level_statement);
5316 END IF;
5317
5318 END IF;
5319
5320 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5321 hz_utility_v2pub.debug(p_message=>'(+) after validate disputed_transactions_flag ... ' ||
5322 'x_return_status = ' || x_return_status,
5323 p_prefix =>l_debug_prefix,
5324 p_msg_level=>fnd_log.level_statement);
5325 END IF;
5326
5327 ----------------------------------------------
5328 -- validate LATE_CHARGE_TYPE
5329 ----------------------------------------------
5330
5331 -- LATE_CHARGE_TYPE is lookup code in lookup type AR_LATE_CHARGE_TYPE
5332 IF p_customer_profile_rec.late_charge_type IS NOT NULL AND
5333 p_customer_profile_rec.late_charge_type <> FND_API.G_MISS_CHAR AND
5334 ( p_create_update_flag = 'C' OR
5335 ( p_create_update_flag = 'U' AND
5336 p_customer_profile_rec.late_charge_type <> NVL( l_late_charge_type, FND_API.G_MISS_CHAR ) ) )
5337 THEN
5338 validate_lookup (
5339 p_column => 'late_charge_type',
5340 p_lookup_type => 'AR_LATE_CHARGE_TYPE',
5341 p_column_value => p_customer_profile_rec.late_charge_type,
5342 x_return_status => x_return_status );
5343
5344 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5345 hz_utility_v2pub.debug(p_message=>'late_charge_type is lookup code in lookup type AR_LATE_CHARGE_TYPE. ' ||
5346 'x_return_status = ' || x_return_status,
5347 p_prefix =>l_debug_prefix,
5348 p_msg_level=>fnd_log.level_statement);
5349 END IF;
5350
5351 END IF;
5352
5353 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5354 hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_type ... ' ||
5355 'x_return_status = ' || x_return_status,
5356 p_prefix =>l_debug_prefix,
5357 p_msg_level=>fnd_log.level_statement);
5358 END IF;
5359
5360 ----------------------------------------------
5361 -- validate INTEREST_CALCULATION_PERIOD
5362 ----------------------------------------------
5363
5364 -- INTEREST_CALCULATION_PERIOD is lookup code in lookup type AR_CALCULATION_PERIOD
5365 IF p_customer_profile_rec.interest_calculation_period IS NOT NULL AND
5366 p_customer_profile_rec.interest_calculation_period <> FND_API.G_MISS_CHAR AND
5367 ( p_create_update_flag = 'C' OR
5368 ( p_create_update_flag = 'U' AND
5369 p_customer_profile_rec.interest_calculation_period <> NVL( l_interest_calculation_period, FND_API.G_MISS_CHAR ) ) )
5370 THEN
5371 validate_lookup (
5372 p_column => 'interest_calculation_period',
5373 p_lookup_type => 'AR_CALCULATION_PERIOD',
5374 p_column_value => p_customer_profile_rec.interest_calculation_period,
5375 x_return_status => x_return_status );
5376
5377 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5378 hz_utility_v2pub.debug(p_message=>'interest_calculation_period is lookup code in lookup type AR_CALCULATION_PERIOD. ' ||
5379 'x_return_status = ' || x_return_status,
5380 p_prefix =>l_debug_prefix,
5381 p_msg_level=>fnd_log.level_statement);
5382 END IF;
5383
5384 END IF;
5385
5386 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5387 hz_utility_v2pub.debug(p_message=>'(+) after validate interest_calculation_period ... ' ||
5388 'x_return_status = ' || x_return_status,
5389 p_prefix =>l_debug_prefix,
5390 p_msg_level=>fnd_log.level_statement);
5391 END IF;
5392
5393 ----------------------------------------------
5394 -- validate HOLD_CHARGED_INVOICES_FLAG
5395 ----------------------------------------------
5396
5397 -- HOLD_CHARGED_INVOICES_FLAG is lookup code in lookup type YES/NO
5398 IF p_customer_profile_rec.hold_charged_invoices_flag IS NOT NULL AND
5399 p_customer_profile_rec.hold_charged_invoices_flag <> FND_API.G_MISS_CHAR
5400 AND ( p_create_update_flag = 'C' OR
5401 ( p_create_update_flag = 'U' AND
5402 p_customer_profile_rec.hold_charged_invoices_flag <> NVL( l_hold_charged_invoices_flag, FND_API.G_MISS_CHAR ) ) )
5403 THEN
5404 validate_lookup (
5405 p_column => 'hold_charged_invoices_flag',
5406 p_lookup_type => 'YES/NO',
5407 p_column_value => p_customer_profile_rec.hold_charged_invoices_flag,
5408 x_return_status => x_return_status );
5409
5410
5411 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5412 hz_utility_v2pub.debug(p_message=>'hold_charged_invoices_flag is lookup code in lookup type YES/NO. ' ||
5413 'x_return_status = ' || x_return_status,
5414 p_prefix =>l_debug_prefix,
5415 p_msg_level=>fnd_log.level_statement);
5416 END IF;
5417
5418 END IF;
5419
5420 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5421 hz_utility_v2pub.debug(p_message=>'(+) after validate hold_charged_invoices_flag ... ' ||
5422 'x_return_status = ' || x_return_status,
5423 p_prefix =>l_debug_prefix,
5424 p_msg_level=>fnd_log.level_statement);
5425 END IF;
5426
5427 ----------------------------------------------
5428 -- validate MULTIPLE_INTEREST_RATES_FLAG
5429 ----------------------------------------------
5430
5431 -- MULTIPLE_INTEREST_RATES_FLAG is lookup code in lookup type YES/NO
5432 IF p_customer_profile_rec.multiple_interest_rates_flag IS NOT NULL AND
5433 p_customer_profile_rec.multiple_interest_rates_flag <> FND_API.G_MISS_CHAR
5434 AND ( p_create_update_flag = 'C' OR
5435 ( p_create_update_flag = 'U' AND
5436 p_customer_profile_rec.multiple_interest_rates_flag <> NVL( l_multiple_interest_rates_flag, FND_API.G_MISS_CHAR ) ) )
5437 THEN
5438 validate_lookup (
5439 p_column => 'multiple_interest_rates_flag',
5440 p_lookup_type => 'YES/NO',
5441 p_column_value => p_customer_profile_rec.multiple_interest_rates_flag,
5442 x_return_status => x_return_status );
5443
5444
5445 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5446 hz_utility_v2pub.debug(p_message=>'multiple_interest_rates_flag is lookup code in lookup type YES/NO. ' ||
5447 'x_return_status = ' || x_return_status,
5448 p_prefix =>l_debug_prefix,
5449 p_msg_level=>fnd_log.level_statement);
5450 END IF;
5451
5452 END IF;
5453
5454 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5455 hz_utility_v2pub.debug(p_message=>'(+) after validate multiple_interest_rates_flag ... ' ||
5456 'x_return_status = ' || x_return_status,
5457 p_prefix =>l_debug_prefix,
5458 p_msg_level=>fnd_log.level_statement);
5459 END IF;
5460
5461 ------------------------------------
5462 -- validate late_charge_term_id
5463 ------------------------------------
5464 -- 1. late_charge_term_id should be a valid value defined in RA_TERMS
5465 -- 2. Late charge payment term is required when late charge type is debit memo or interest invoice
5466
5467 IF (((p_customer_profile_rec.late_charge_term_id IS NULL OR p_customer_profile_rec.late_charge_term_id = FND_API.G_MISS_NUM) AND
5468 (p_customer_profile_rec.late_charge_type = 'DM' OR
5469 p_customer_profile_rec.late_charge_type = 'INV')) OR
5470 ((p_customer_profile_rec.late_charge_type = 'ADJ') AND
5471 (p_customer_profile_rec.late_charge_term_id IS NOT NULL AND p_customer_profile_rec.late_charge_term_id <> FND_API.G_MISS_NUM))) THEN
5472 -- Late charge payment term is required when
5473 -- late charge type is debit memo or interest invoice
5474 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_LC_PAY_TERM' );
5475 FND_MSG_PUB.ADD;
5476 x_return_status := FND_API.G_RET_STS_ERROR;
5477 END IF;
5478
5479 IF p_customer_profile_rec.late_charge_term_id is NOT NULL AND
5480 p_customer_profile_rec.late_charge_term_id <> FND_API.G_MISS_NUM
5481 AND ( p_create_update_flag = 'C' OR
5482 ( p_create_update_flag = 'U' AND
5483 p_customer_profile_rec.late_charge_term_id <> NVL( l_late_charge_term_id, FND_API.G_MISS_NUM ) ) )
5484 THEN
5485 check_late_charge_term_id_fk(
5486 p_column => 'payment_term_id',
5487 p_column_value => p_customer_profile_rec.late_charge_term_id,
5488 p_cons_inv_flag => p_customer_profile_rec.cons_inv_flag,
5489 x_return_status => x_return_status );
5490
5491 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5492 hz_utility_v2pub.debug(p_message=>'late_charge_term_id should be a valid value defined in RA_TERMS. '||
5493 'x_return_status = ' || x_return_status,
5494 p_prefix =>l_debug_prefix,
5495 p_msg_level=>fnd_log.level_statement);
5496 END IF;
5497
5498 END IF;
5499
5500 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5501 hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_term_id..' ||
5502 'x_return_status = ' || x_return_status,
5503 p_prefix =>l_debug_prefix,
5504 p_msg_level=>fnd_log.level_statement);
5505 END IF;
5506
5507 ------------------------------------
5508 -- validate message_text_id
5509 ------------------------------------
5510 -- 1. message_text_id should be a valid value defined in AR_STANDARD_TEXT
5511 -- 2. Message text can be entered only when late charge type is debit memo or interest invoice
5512
5513 IF ((p_customer_profile_rec.late_charge_type = 'ADJ') AND
5514 (p_customer_profile_rec.message_text_id IS NOT NULL AND p_customer_profile_rec.message_text_id <> FND_API.G_MISS_NUM)) THEN
5515 -- Message text can be entered only when
5516 -- late charge type is debit memo or interest invoice
5517 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_MSG_FOR_LC_TYPE' );
5518 FND_MSG_PUB.ADD;
5519 x_return_status := FND_API.G_RET_STS_ERROR;
5520 END IF;
5521
5522 IF p_customer_profile_rec.message_text_id is NOT NULL AND
5523 p_customer_profile_rec.message_text_id <> FND_API.G_MISS_NUM
5524 AND ( p_create_update_flag = 'C' OR
5525 ( p_create_update_flag = 'U' AND
5526 p_customer_profile_rec.message_text_id <> NVL( l_message_text_id, FND_API.G_MISS_NUM ) ) )
5527 THEN
5528
5529 check_message_text_id_fk(
5530 p_column => 'message_text_id',
5531 p_column_value => p_customer_profile_rec.message_text_id,
5532 x_return_status => x_return_status );
5533
5534 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5535 hz_utility_v2pub.debug(p_message=>'message_text_id should be a valid value defined in AR_STANDARD_TEXT. '||
5536 'x_return_status = ' || x_return_status,
5537 p_prefix =>l_debug_prefix,
5538 p_msg_level=>fnd_log.level_statement);
5539 END IF;
5540
5541 END IF;
5542
5543 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5544 hz_utility_v2pub.debug(p_message=>'(+) after validate message_text_id..' ||
5545 'x_return_status = ' || x_return_status,
5546 p_prefix =>l_debug_prefix,
5547 p_msg_level=>fnd_log.level_statement);
5548 END IF;
5549
5550 -- Check if API is called in debug mode. If yes, disable debug.
5551 --disable_debug;
5552
5553 END validate_customer_profile;
5554
5555 /**
5556 * PROCEDURE validate_cust_profile_amt
5557 *
5558 * DESCRIPTION
5559 * Validates customer profile amount record. Checks for
5560 * uniqueness
5561 * lookup types
5562 * mandatory columns
5563 * non-updateable fields
5564 * foreign key validations
5565 * other validations
5566 *
5567 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
5568 *
5569 * ARGUMENTS
5570 * IN:
5571 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
5572 * p_check_foreign_key If do foreign key checking on cust_account_id
5573 * and cust_account_profile_id or not.
5574 * p_cust_profile_amt_rec Customer profile amount record.
5575 * p_rowid Rowid of the record (used only in update mode).
5576 * IN/OUT:
5577 * x_return_status Return status after the call. The status can
5578 * be FND_API.G_RET_STS_SUCCESS (success),
5579 * FND_API.G_RET_STS_ERROR (error),
5580 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
5581 *
5582 * NOTES
5583 *
5584 * MODIFICATION HISTORY
5585 *
5586 * 07-23-2001 Jianying Huang o Created.
5587 * 11-08-2001 P.Suresh * Bug Fix : 2001573. Validated overall_credit_limit.
5588 * It should be greater or equal to trx_credit_limit.
5589 *
5590 */
5591
5592 PROCEDURE validate_cust_profile_amt (
5593 p_create_update_flag IN VARCHAR2,
5594 p_check_foreign_key IN VARCHAR2,
5595 p_cust_profile_amt_rec IN HZ_CUSTOMER_PROFILE_V2PUB.CUST_PROFILE_AMT_REC_TYPE,
5596 p_rowid IN ROWID,
5597 x_return_status IN OUT NOCOPY VARCHAR2
5598 ) IS
5599
5600 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_profile_amt'
5601
5602 l_dummy VARCHAR2(1);
5603
5604 l_cust_account_id NUMBER;
5605 l_site_use_id NUMBER;
5606 l_cust_account_profile_id NUMBER;
5607 l_currency_code HZ_CUST_PROFILE_AMTS.currency_code%TYPE;
5608 l_created_by_module HZ_CUST_PROFILE_AMTS.created_by_module%TYPE;
5609 l_application_id NUMBER;
5610 l_overall_credit_limit HZ_CUST_PROFILE_AMTS.OVERALL_CREDIT_LIMIT%TYPE;
5611 l_trx_credit_limit HZ_CUST_PROFILE_AMTS.TRX_CREDIT_LIMIT%TYPE;
5612 -- Bug 4770111 : Added for CBM of customer profile
5613 l_prof_cbm HZ_CUST_PROFILE_AMTS.created_by_module%TYPE := 'TCA_V2_API';
5614
5615 -- Added following variables for late charge policy project.
5616 v_cust_profile_amt_rec HZ_CUSTOMER_PROFILE_V2PUB.CUST_PROFILE_AMT_REC_TYPE;
5617 l_min_fc_invoice_overdue_type HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_OVERDUE_TYPE%TYPE;
5618 l_min_fc_balance_overdue_type HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_OVERDUE_TYPE%TYPE;
5619 l_interest_type HZ_CUST_PROFILE_AMTS.INTEREST_TYPE%TYPE;
5620 l_penalty_type HZ_CUST_PROFILE_AMTS.PENALTY_TYPE%TYPE;
5621 l_exchange_rate_type HZ_CUST_PROFILE_AMTS.EXCHANGE_RATE_TYPE%TYPE;
5622 l_min_fc_invoice_amount HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_AMOUNT%TYPE;
5623 l_min_fc_invoice_percent HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_PERCENT%TYPE;
5624 l_min_fc_balance_amount HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_AMOUNT%TYPE;
5625 l_min_fc_balance_percent HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_PERCENT%TYPE;
5626 l_interest_rate HZ_CUST_PROFILE_AMTS.INTEREST_RATE%TYPE;
5627 l_interest_fixed_amount HZ_CUST_PROFILE_AMTS.INTEREST_FIXED_AMOUNT%TYPE;
5628 l_interest_schedule_id HZ_CUST_PROFILE_AMTS.INTEREST_SCHEDULE_ID%TYPE;
5629 l_penalty_rate HZ_CUST_PROFILE_AMTS.PENALTY_RATE%TYPE;
5630 l_penalty_fixed_amount HZ_CUST_PROFILE_AMTS.PENALTY_FIXED_AMOUNT%TYPE;
5631 l_penalty_schedule_id HZ_CUST_PROFILE_AMTS.PENALTY_SCHEDULE_ID%TYPE;
5632
5633 BEGIN
5634
5635 -- Check if API is called in debug mode. If yes, enable debug.
5636 --enable_debug;
5637
5638 -- Debug info.
5639
5640 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5641 hz_utility_v2pub.debug(p_message=>'validate_cust_profile_amt (+)',
5642 p_prefix=>l_debug_prefix,
5643 p_msg_level=>fnd_log.level_procedure);
5644 END IF;
5645
5646 v_cust_profile_amt_rec := p_cust_profile_amt_rec;
5647
5648 -- Select fields for later use during update.
5649 IF p_create_update_flag = 'U' THEN
5650 SELECT CUST_ACCOUNT_ID, SITE_USE_ID,
5651 CUST_ACCOUNT_PROFILE_ID, CURRENCY_CODE,
5652 CREATED_BY_MODULE, APPLICATION_ID,
5653 OVERALL_CREDIT_LIMIT,TRX_CREDIT_LIMIT,
5654 MIN_FC_INVOICE_OVERDUE_TYPE, MIN_FC_BALANCE_OVERDUE_TYPE,
5655 INTEREST_TYPE, PENALTY_TYPE, EXCHANGE_RATE_TYPE,
5656 MIN_FC_INVOICE_AMOUNT, MIN_FC_INVOICE_PERCENT,
5657 MIN_FC_BALANCE_AMOUNT, MIN_FC_BALANCE_PERCENT,
5658 INTEREST_RATE, INTEREST_FIXED_AMOUNT, INTEREST_SCHEDULE_ID,
5659 PENALTY_RATE, PENALTY_FIXED_AMOUNT, PENALTY_SCHEDULE_ID
5660 INTO l_cust_account_id, l_site_use_id,
5661 l_cust_account_profile_id, l_currency_code,
5662 l_created_by_module, l_application_id,
5663 l_overall_credit_limit,l_trx_credit_limit,
5664 l_min_fc_invoice_overdue_type, l_min_fc_balance_overdue_type,
5665 l_interest_type, l_penalty_type, l_exchange_rate_type,
5666 l_min_fc_invoice_amount, l_min_fc_invoice_percent,
5667 l_min_fc_balance_amount, l_min_fc_balance_percent,
5668 l_interest_rate, l_interest_fixed_amount, l_interest_schedule_id,
5669 l_penalty_rate, l_penalty_fixed_amount, l_penalty_schedule_id
5670 FROM HZ_CUST_PROFILE_AMTS
5671 WHERE ROWID = p_rowid;
5672 END IF;
5673
5674 --------------------------------------
5675 -- validate cust_acct_profile_amt_id
5676 --------------------------------------
5677 /****Logical APIs - validation not required****/
5678 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5679 IF p_create_update_flag = 'C' THEN
5680
5681 -- If primary key value is passed, check for uniqueness.
5682 -- If primary key value is not passed, it will be generated
5683 -- from sequence by table handler.
5684
5685 IF p_cust_profile_amt_rec.cust_acct_profile_amt_id IS NOT NULL AND
5686 p_cust_profile_amt_rec.cust_acct_profile_amt_id <> FND_API.G_MISS_NUM
5687 THEN
5688 BEGIN
5689 SELECT 'Y' INTO l_dummy
5690 FROM HZ_CUST_PROFILE_AMTS
5691 WHERE CUST_ACCT_PROFILE_AMT_ID = p_cust_profile_amt_rec.cust_acct_profile_amt_id;
5692
5693 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
5694 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_profile_amt_id' );
5695 FND_MSG_PUB.ADD;
5696 x_return_status := FND_API.G_RET_STS_ERROR;
5697 EXCEPTION
5698 WHEN NO_DATA_FOUND THEN
5699 NULL;
5700 END;
5701
5702 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5703 hz_utility_v2pub.debug(p_message=>'cust_acct_profile_amt_id is unique during creation if passed in. ' ||
5704 'x_return_status = ' || x_return_status,
5705 p_prefix =>l_debug_prefix,
5706 p_msg_level=>fnd_log.level_statement);
5707 END IF;
5708 END IF;
5709 END IF;
5710
5711 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5712 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_profile_amt_id ... ' ||
5713 'x_return_status = ' || x_return_status,
5714 p_prefix =>l_debug_prefix,
5715 p_msg_level=>fnd_log.level_statement);
5716 END IF;
5717 END IF;
5718
5719 ----------------------------------------------
5720 -- validate cust_account_profile_id
5721 ----------------------------------------------
5722 /****Logical APIs - validation not required****/
5723 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5724 -- cust_account_profile_id is mandatory field
5725 -- Since cust_account_profile_id is non-updateable, we only need to check mandatory
5726 -- during creation.
5727
5728 IF p_create_update_flag = 'C' THEN
5729 validate_mandatory (
5730 p_create_update_flag => p_create_update_flag,
5731 p_column => 'cust_account_profile_id',
5732 p_column_value => p_cust_profile_amt_rec.cust_account_profile_id,
5733 x_return_status => x_return_status );
5734
5735 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5736 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is mandatory. ' ||
5737 'x_return_status = ' || x_return_status,
5738 p_prefix =>l_debug_prefix,
5739 p_msg_level=>fnd_log.level_statement);
5740 END IF;
5741 END IF;
5742
5743 -- cust_account_profile_id is non-updateable field
5744 IF p_create_update_flag = 'U' AND
5745 p_cust_profile_amt_rec.cust_account_profile_id IS NOT NULL
5746 THEN
5747 validate_nonupdateable (
5748 p_column => 'cust_account_profile_id',
5749 p_column_value => p_cust_profile_amt_rec.cust_account_profile_id,
5750 p_old_column_value => l_cust_account_profile_id,
5751 x_return_status => x_return_status );
5752
5753 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5754 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is non-updateable. ' ||
5755 'x_return_status = ' || x_return_status,
5756 p_prefix =>l_debug_prefix,
5757 p_msg_level=>fnd_log.level_statement);
5758 END IF;
5759 END IF;
5760
5761 -- cust_account_profile_id is foreign key to hz_customer_profiles
5762 -- Since cust_account_profile_id is mandatory and non-updateable,
5763 -- we only need to check FK during creation.
5764
5765
5766 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5767 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id = ' || p_cust_profile_amt_rec.cust_account_profile_id || ' ' ||
5768 'x_return_status = ' || x_return_status,
5769 p_prefix =>l_debug_prefix,
5770 p_msg_level=>fnd_log.level_statement);
5771 END IF;
5772
5773 IF p_create_update_flag = 'C' AND
5774 p_check_foreign_key = FND_API.G_TRUE AND
5775 p_cust_profile_amt_rec.cust_account_profile_id IS NOT NULL AND
5776 p_cust_profile_amt_rec.cust_account_profile_id <> FND_API.G_MISS_NUM
5777 THEN
5778 BEGIN
5779 -- select cust_account_id, site_use_id for later cross reference checking
5780 -- Bug 4770111 : select created_by_module also
5781
5782 SELECT CUST_ACCOUNT_ID, SITE_USE_ID, CREATED_BY_MODULE
5783 INTO l_cust_account_id, l_site_use_id, l_prof_cbm
5784 FROM HZ_CUSTOMER_PROFILES
5785 WHERE CUST_ACCOUNT_PROFILE_ID = p_cust_profile_amt_rec.cust_account_profile_id;
5786
5787 EXCEPTION
5788 WHEN NO_DATA_FOUND THEN
5789 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
5790 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_profile_id' );
5791 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id' );
5792 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_customer_profiles' );
5793 FND_MSG_PUB.ADD;
5794 x_return_status := FND_API.G_RET_STS_ERROR;
5795 END;
5796
5797 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5798 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is foreign key to hz_customer_profiles. ' ||
5799 'x_return_status = ' || x_return_status,
5800 p_prefix =>l_debug_prefix,
5801 p_msg_level=>fnd_log.level_statement);
5802 END IF;
5803
5804 END IF;
5805
5806 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5807 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_profile_id ... ' ||
5808 'x_return_status = ' || x_return_status,
5809 p_prefix =>l_debug_prefix,
5810 p_msg_level=>fnd_log.level_statement);
5811 END IF;
5812 END IF;
5813
5814 ----------------------------------------------
5815 -- validate cust_account_id
5816 ----------------------------------------------
5817 /****Logical APIs - validation not required****/
5818 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5819 -- cust_account_id is mandatory field
5820 -- Since cust_account_id is non-updateable, we only need to check mandatory
5821 -- during creation.
5822
5823 IF p_create_update_flag = 'C' THEN
5824 validate_mandatory (
5825 p_create_update_flag => p_create_update_flag,
5826 p_column => 'cust_account_id',
5827 p_column_value => p_cust_profile_amt_rec.cust_account_id,
5828 x_return_status => x_return_status );
5829
5830 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5831 hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
5832 'x_return_status = ' || x_return_status,
5833 p_prefix =>l_debug_prefix,
5834 p_msg_level=>fnd_log.level_statement);
5835 END IF;
5836 END IF;
5837
5838 -- cust_account_id is non-updateable field
5839 IF p_create_update_flag = 'U' AND
5840 p_cust_profile_amt_rec.cust_account_id IS NOT NULL
5841 THEN
5842 validate_nonupdateable (
5843 p_column => 'cust_account_id',
5844 p_column_value => p_cust_profile_amt_rec.cust_account_id,
5845 p_old_column_value => l_cust_account_id,
5846 x_return_status => x_return_status );
5847
5848 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5849 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
5850 'x_return_status = ' || x_return_status,
5851 p_prefix =>l_debug_prefix,
5852 p_msg_level=>fnd_log.level_statement);
5853 END IF;
5854 END IF;
5855
5856 -- cust_account_id is foreign key to hz_cust_accounts
5857 -- Since cust_account_id is mandatory and non-updateable,
5858 -- we only need to check FK during creation.
5859
5860 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5861 hz_utility_v2pub.debug(p_message=>'cust_account_id = ' || p_cust_profile_amt_rec.cust_account_id || ' ' ||
5862 'x_return_status = ' || x_return_status,
5863 p_prefix =>l_debug_prefix,
5864 p_msg_level=>fnd_log.level_statement);
5865 END IF;
5866
5867 IF p_create_update_flag = 'C' AND
5868 p_check_foreign_key = FND_API.G_TRUE AND
5869 p_cust_profile_amt_rec.cust_account_id IS NOT NULL AND
5870 p_cust_profile_amt_rec.cust_account_id <> FND_API.G_MISS_NUM
5871 THEN
5872 check_cust_account_fk (
5873 p_column => 'cust_account_id',
5874 p_column_value => p_cust_profile_amt_rec.cust_account_id,
5875 x_return_status => x_return_status );
5876
5877 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5878 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
5879 'x_return_status = ' || x_return_status,
5880 p_prefix =>l_debug_prefix,
5881 p_msg_level=>fnd_log.level_statement);
5882 END IF;
5883
5884 -- cross reference checking
5885
5886 IF p_cust_profile_amt_rec.cust_account_id <> l_cust_account_id THEN
5887 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_PROF_AMT_IDS_MISMATCH' );
5888 FND_MESSAGE.SET_TOKEN( 'ENTITY', 'customer' );
5889 FND_MSG_PUB.ADD;
5890 x_return_status := FND_API.G_RET_STS_ERROR;
5891 END IF;
5892
5893 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5894 hz_utility_v2pub.debug(p_message=>'cust_account_id should be the same as cust_account_id in corresponding customer profile. ' ||
5895 'x_return_status = ' || x_return_status,
5896 p_prefix =>l_debug_prefix,
5897 p_msg_level=>fnd_log.level_statement);
5898 END IF;
5899
5900 END IF;
5901
5902 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5903 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
5904 'x_return_status = ' || x_return_status,
5905 p_prefix =>l_debug_prefix,
5906 p_msg_level=>fnd_log.level_statement);
5907 END IF;
5908 END IF;
5909
5910 ----------------------------------------------
5911 -- validate currency_code
5912 ----------------------------------------------
5913
5914 -- currency_code is mandatory field
5915 -- Since currency_code is non-updateable, we only need to check mandatory
5916 -- during creation.
5917
5918 IF p_create_update_flag = 'C' THEN
5919 validate_mandatory (
5920 p_create_update_flag => p_create_update_flag,
5921 p_column => 'currency_code',
5922 p_column_value => p_cust_profile_amt_rec.currency_code,
5923 x_return_status => x_return_status );
5924
5925 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5926 hz_utility_v2pub.debug(p_message=>'currency_code is mandatory. ' ||
5927 'x_return_status = ' || x_return_status,
5928 p_prefix =>l_debug_prefix,
5929 p_msg_level=>fnd_log.level_statement);
5930 END IF;
5931 END IF;
5932
5933 -- currency_code is non-updateable field
5934 IF p_create_update_flag = 'U' AND
5935 p_cust_profile_amt_rec.currency_code IS NOT NULL
5936 THEN
5937 validate_nonupdateable (
5938 p_column => 'currency_code',
5939 p_column_value => p_cust_profile_amt_rec.currency_code,
5940 p_old_column_value => l_currency_code,
5941 x_return_status => x_return_status );
5942
5943 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5944 hz_utility_v2pub.debug(p_message=>'currency_code is non-updateable. ' ||
5945 'x_return_status = ' || x_return_status,
5946 p_prefix =>l_debug_prefix,
5947 p_msg_level=>fnd_log.level_statement);
5948 END IF;
5949 END IF;
5950
5951 -- currency_code is foreign key to fnd_currencies
5952 -- Since currency_code is mandatory and non-updateable,
5953 -- we only need to check FK during creation.
5954
5955 IF p_create_update_flag = 'C' AND
5956 p_cust_profile_amt_rec.currency_code IS NOT NULL AND
5957 p_cust_profile_amt_rec.currency_code <> FND_API.G_MISS_CHAR
5958 THEN
5959 check_currency_fk (
5960 p_column => 'currency_code',
5961 p_column_value => p_cust_profile_amt_rec.currency_code,
5962 x_return_status => x_return_status );
5963
5964 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5965 hz_utility_v2pub.debug(p_message=>'currency_code is foreign key to fnd_currencies. ' ||
5966 'x_return_status = ' || x_return_status,
5967 p_prefix =>l_debug_prefix,
5968 p_msg_level=>fnd_log.level_statement);
5969 END IF;
5970 END IF;
5971
5972 -- For a given cust_account_profile_id and currency_code, only one
5973 -- record of the profile amount is allowed.
5974 -- Since cust_account_profile_id and currency_code are mandatory
5975 -- and non-updateable columns, we only need to do the checking
5976 -- during creation.
5977
5978 IF p_create_update_flag = 'C' THEN
5979 BEGIN
5980 SELECT 'Y' INTO l_dummy
5981 FROM HZ_CUST_PROFILE_AMTS
5982 WHERE CUST_ACCOUNT_PROFILE_ID = p_cust_profile_amt_rec.cust_account_profile_id
5983 AND CURRENCY_CODE = p_cust_profile_amt_rec.currency_code
5984 AND ROWNUM = 1;
5985
5986 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
5987 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id - currency_code' );
5988 FND_MSG_PUB.ADD;
5989 x_return_status := FND_API.G_RET_STS_ERROR;
5990 EXCEPTION
5991 WHEN NO_DATA_FOUND THEN
5992 NULL;
5993 END;
5994
5995 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5996 hz_utility_v2pub.debug(p_message=>'for a given cust_account_profile_id and currency_code, only one record of the profile amount is allowed. ' ||
5997 'x_return_status = ' || x_return_status,
5998 p_prefix =>l_debug_prefix,
5999 p_msg_level=>fnd_log.level_statement);
6000 END IF;
6001 END IF;
6002
6003 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6004 hz_utility_v2pub.debug(p_message=>'(+) after validate currency_code ... ' ||
6005 'x_return_status = ' || x_return_status,
6006 p_prefix =>l_debug_prefix,
6007 p_msg_level=>fnd_log.level_statement);
6008 END IF;
6009
6010 ----------------------------------------------
6011 -- validate site_use_id
6012 ----------------------------------------------
6013 /****Logical APIs - validation not required****/
6014 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6015 -- site_use_id is non-updateable field
6016 IF p_create_update_flag = 'U' AND
6017 p_cust_profile_amt_rec.site_use_id IS NOT NULL
6018 THEN
6019 validate_nonupdateable (
6020 p_column => 'site_use_id',
6021 p_column_value => p_cust_profile_amt_rec.site_use_id,
6022 p_old_column_value => l_site_use_id,
6023 x_return_status => x_return_status );
6024
6025 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6026 hz_utility_v2pub.debug(p_message=>'site_use_id is non-updateable. ' ||
6027 'x_return_status = ' || x_return_status,
6028 p_prefix =>l_debug_prefix,
6029 p_msg_level=>fnd_log.level_statement);
6030 END IF;
6031 END IF;
6032
6033 -- site_use_id is foreign key to hz_cust_site_uses
6034 -- Since site_use_id is non-updateable, we only need to
6035 -- check FK during creation.
6036
6037 IF p_create_update_flag = 'C' AND
6038 p_check_foreign_key = FND_API.G_TRUE
6039 THEN
6040 IF p_cust_profile_amt_rec.site_use_id IS NOT NULL AND
6041 p_cust_profile_amt_rec.site_use_id <> FND_API.G_MISS_NUM
6042 THEN
6043 check_cust_site_use_fk (
6044 p_column => 'site_use_id',
6045 p_column_value => p_cust_profile_amt_rec.site_use_id,
6046 x_return_status => x_return_status );
6047
6048 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6049 hz_utility_v2pub.debug(p_message=>'site_use_id is foreign key to hz_cust_site_uses. ' ||
6050 'x_return_status = ' || x_return_status,
6051 p_prefix =>l_debug_prefix,
6052 p_msg_level=>fnd_log.level_statement);
6053 END IF;
6054 END IF;
6055
6056 -- cross reference checking
6057
6058 IF ( p_cust_profile_amt_rec.site_use_id IS NOT NULL
6059 AND p_cust_profile_amt_rec.site_use_id <> FND_API.G_MISS_NUM AND
6060 ( l_site_use_id IS NULL OR
6061 l_site_use_id <> p_cust_profile_amt_rec.site_use_id ) ) OR
6062 ( ( p_cust_profile_amt_rec.site_use_id IS NULL OR
6063 p_cust_profile_amt_rec.site_use_id = FND_API.G_MISS_NUM ) AND
6064 l_site_use_id IS NOT NULL )
6065 THEN
6066 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_PROF_AMT_IDS_MISMATCH' );
6067 FND_MESSAGE.SET_TOKEN( 'ENTITY', 'site use' );
6068 FND_MSG_PUB.ADD;
6069 x_return_status := FND_API.G_RET_STS_ERROR;
6070 END IF;
6071
6072 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6073 hz_utility_v2pub.debug(p_message=>'site_use_id should be the same as site_use_id site_use_id in corresponding customer profile. ' ||
6074 'x_return_status = ' || x_return_status,
6075 p_prefix =>l_debug_prefix,
6076 p_msg_level=>fnd_log.level_statement);
6077 END IF;
6078 END IF;
6079
6080 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6081 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
6082 'x_return_status = ' || x_return_status,
6083 p_prefix =>l_debug_prefix,
6084 p_msg_level=>fnd_log.level_statement);
6085 END IF;
6086 END IF;
6087
6088 --------------------------------------
6089 -- validate created_by_module
6090 --------------------------------------
6091
6092 -- Bug 4770111 : Validate CBM only if <> l_prof_cbm
6093 IF p_create_update_flag = 'C' THEN
6094 IF p_cust_profile_amt_rec.created_by_module <> nvl(l_prof_cbm, 'TCA_V2_API') THEN
6095 validate_created_by_module(
6096 p_create_update_flag => p_create_update_flag,
6097 p_created_by_module => p_cust_profile_amt_rec.created_by_module,
6098 p_old_created_by_module => l_created_by_module,
6099 x_return_status => x_return_status);
6100 END IF;
6101 ELSE
6102 validate_created_by_module(
6103 p_create_update_flag => p_create_update_flag,
6104 p_created_by_module => p_cust_profile_amt_rec.created_by_module,
6105 p_old_created_by_module => l_created_by_module,
6106 x_return_status => x_return_status);
6107 END IF;
6108
6109 --------------------------------------
6110 -- validate application_id
6111 --------------------------------------
6112
6113 validate_application_id(
6114 p_create_update_flag => p_create_update_flag,
6115 p_application_id => p_cust_profile_amt_rec.application_id,
6116 p_old_application_id => l_application_id,
6117 x_return_status => x_return_status);
6118
6119 ------------------------------------
6120 --*** Credit Limit Validations ***--
6121 ------------------------------------
6122
6123 IF p_cust_profile_amt_rec.overall_credit_limit <> FND_API.G_MISS_NUM AND
6124 p_cust_profile_amt_rec.overall_credit_limit IS NOT NULL
6125 THEN
6126 IF p_cust_profile_amt_rec.trx_credit_limit <> FND_API.G_MISS_NUM AND
6127 p_cust_profile_amt_rec.trx_credit_limit IS NOT NULL
6128 THEN
6129
6130 IF ( p_create_update_flag = 'C' OR
6131 ( p_create_update_flag = 'U' AND
6132 (
6133 (p_cust_profile_amt_rec.overall_credit_limit <> NVL( l_overall_credit_limit, FND_API.G_MISS_NUM ))
6134 OR
6135 (p_cust_profile_amt_rec.trx_credit_limit <> NVL(l_trx_credit_limit,FND_API.G_MISS_NUM))
6136 )
6137 )
6138 )
6139 THEN
6140 IF p_cust_profile_amt_rec.overall_credit_limit < p_cust_profile_amt_rec.trx_credit_limit
6141 THEN
6142 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_OVERALL_CREDIT' );
6143 FND_MSG_PUB.ADD;
6144 x_return_status := FND_API.G_RET_STS_ERROR;
6145
6146 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6147 hz_utility_v2pub.debug(p_message=>'overall_credit_limit should be greater than the trx_credit_limit. ' ||
6148 'x_return_status = ' || x_return_status,
6149 p_prefix =>l_debug_prefix,
6150 p_msg_level=>fnd_log.level_statement);
6151 END IF;
6152 END IF;
6153 END IF;
6154 END IF;
6155 END IF;
6156
6157 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6158 hz_utility_v2pub.debug(p_message=>'Credit Limit Validation failure. Please check the overall_credit_limit and trx_credit_limit ' || 'x_return_status = ' || x_return_status,
6159 p_prefix =>l_debug_prefix,
6160 p_msg_level=>fnd_log.level_statement);
6161 END IF;
6162
6163 ----------------------------------------------
6164 -- validate MIN_FC_INVOICE_OVERDUE_TYPE
6165 ----------------------------------------------
6166
6167 -- MIN_FC_INVOICE_OVERDUE_TYPE is lookup code in lookup type AR_AMOUNT_PERCENT
6168 IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type IS NOT NULL AND
6169 p_cust_profile_amt_rec.min_fc_invoice_overdue_type <> FND_API.G_MISS_CHAR AND
6170 ( p_create_update_flag = 'C' OR
6171 ( p_create_update_flag = 'U' AND
6172 p_cust_profile_amt_rec.min_fc_invoice_overdue_type <> NVL( l_min_fc_invoice_overdue_type, FND_API.G_MISS_CHAR ) ) )
6173 THEN
6174 validate_lookup (
6175 p_column => 'min_fc_invoice_overdue_type',
6176 p_lookup_table => 'AR_LOOKUPS',
6177 p_lookup_type => 'AR_AMOUNT_PERCENT',
6178 p_column_value => p_cust_profile_amt_rec.min_fc_invoice_overdue_type,
6179 x_return_status => x_return_status );
6180
6181 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6182 hz_utility_v2pub.debug(p_message=>'min_fc_invoice_overdue_type is lookup code in lookup type AR_AMOUNT_PERCENT. ' ||
6183 'x_return_status = ' || x_return_status,
6184 p_prefix =>l_debug_prefix,
6185 p_msg_level=>fnd_log.level_statement);
6186 END IF;
6187
6188 END IF;
6189
6190 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6191 hz_utility_v2pub.debug(p_message=>'(+) after validate min_fc_invoice_overdue_type ... ' ||
6192 'x_return_status = ' || x_return_status,
6193 p_prefix =>l_debug_prefix,
6194 p_msg_level=>fnd_log.level_statement);
6195 END IF;
6196
6197 ----------------------------------------------
6198 -- validate MIN_FC_BALANCE_OVERDUE_TYPE
6199 ----------------------------------------------
6200
6201 -- MIN_FC_BALANCE_OVERDUE_TYPE is lookup code in lookup type AR_AMOUNT_PERCENT
6202 IF p_cust_profile_amt_rec.min_fc_balance_overdue_type IS NOT NULL AND
6203 p_cust_profile_amt_rec.min_fc_balance_overdue_type <> FND_API.G_MISS_CHAR AND
6204 ( p_create_update_flag = 'C' OR
6205 ( p_create_update_flag = 'U' AND
6206 p_cust_profile_amt_rec.min_fc_balance_overdue_type <> NVL( l_min_fc_balance_overdue_type, FND_API.G_MISS_CHAR ) ) )
6207 THEN
6208 validate_lookup (
6209 p_column => 'min_fc_balance_overdue_type',
6210 p_lookup_table => 'AR_LOOKUPS',
6211 p_lookup_type => 'AR_AMOUNT_PERCENT',
6212 p_column_value => p_cust_profile_amt_rec.min_fc_balance_overdue_type,
6213 x_return_status => x_return_status );
6214
6215 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6216 hz_utility_v2pub.debug(p_message=>'min_fc_balance_overdue_type is lookup code in lookup type AR_AMOUNT_PERCENT. ' ||
6217 'x_return_status = ' || x_return_status,
6218 p_prefix =>l_debug_prefix,
6219 p_msg_level=>fnd_log.level_statement);
6220 END IF;
6221
6222 END IF;
6223
6224 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6225 hz_utility_v2pub.debug(p_message=>'(+) after validate min_fc_balance_overdue_type ... ' ||
6226 'x_return_status = ' || x_return_status,
6227 p_prefix =>l_debug_prefix,
6228 p_msg_level=>fnd_log.level_statement);
6229 END IF;
6230
6231 ----------------------------------------------
6232 -- validate INTEREST_TYPE
6233 ----------------------------------------------
6234
6235 -- INTEREST_TYPE is lookup code in lookup type AR_INTEREST_PENALTY_TYPE
6236 IF p_cust_profile_amt_rec.interest_type IS NOT NULL AND
6237 p_cust_profile_amt_rec.interest_type <> FND_API.G_MISS_CHAR AND
6238 ( p_create_update_flag = 'C' OR
6239 ( p_create_update_flag = 'U' AND
6240 p_cust_profile_amt_rec.interest_type <> NVL( l_interest_type, FND_API.G_MISS_CHAR ) ) )
6241 THEN
6242 validate_lookup (
6243 p_column => 'interest_type',
6244 p_lookup_table => 'AR_LOOKUPS',
6245 p_lookup_type => 'AR_INTEREST_PENALTY_TYPE',
6246 p_column_value => p_cust_profile_amt_rec.interest_type,
6247 x_return_status => x_return_status );
6248
6249 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6250 hz_utility_v2pub.debug(p_message=>'interest_type is lookup code in lookup type AR_INTEREST_PENALTY_TYPE. ' ||
6251 'x_return_status = ' || x_return_status,
6252 p_prefix =>l_debug_prefix,
6253 p_msg_level=>fnd_log.level_statement);
6254 END IF;
6255
6256 END IF;
6257
6258 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6259 hz_utility_v2pub.debug(p_message=>'(+) after validate interest_type ... ' ||
6260 'x_return_status = ' || x_return_status,
6261 p_prefix =>l_debug_prefix,
6262 p_msg_level=>fnd_log.level_statement);
6263 END IF;
6264
6265 ----------------------------------------------
6266 -- validate PENALTY_TYPE
6267 ----------------------------------------------
6268
6269 -- PENALTY_TYPE is lookup code in lookup type AR_INTEREST_PENALTY_TYPE
6270 IF p_cust_profile_amt_rec.penalty_type IS NOT NULL AND
6271 p_cust_profile_amt_rec.penalty_type <> FND_API.G_MISS_CHAR AND
6272 ( p_create_update_flag = 'C' OR
6273 ( p_create_update_flag = 'U' AND
6274 p_cust_profile_amt_rec.penalty_type <> NVL( l_penalty_type, FND_API.G_MISS_CHAR ) ) )
6275 THEN
6276 validate_lookup (
6277 p_column => 'penalty_type',
6278 p_lookup_table => 'AR_LOOKUPS',
6279 p_lookup_type => 'AR_INTEREST_PENALTY_TYPE',
6280 p_column_value => p_cust_profile_amt_rec.penalty_type,
6281 x_return_status => x_return_status );
6282
6283 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6284 hz_utility_v2pub.debug(p_message=>'penalty_type is lookup code in lookup type AR_INTEREST_PENALTY_TYPE. ' ||
6285 'x_return_status = ' || x_return_status,
6286 p_prefix =>l_debug_prefix,
6287 p_msg_level=>fnd_log.level_statement);
6288 END IF;
6289
6290 END IF;
6291
6292 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6293 hz_utility_v2pub.debug(p_message=>'(+) after validate penalty_type ... ' ||
6294 'x_return_status = ' || x_return_status,
6295 p_prefix =>l_debug_prefix,
6296 p_msg_level=>fnd_log.level_statement);
6297 END IF;
6298
6299 -- Debug info.
6300
6301 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6302 hz_utility_v2pub.debug(p_message=> 'validate_cust_profile_amt (-)',
6303 p_prefix=>l_debug_prefix,
6304 p_msg_level=>fnd_log.level_procedure);
6305 END IF;
6306
6307 ------------------------------------
6308 -- validate exchange_rate_type
6309 ------------------------------------
6310 -- exchange_rate_type should be a valid value defined in GL_DAILY_CONVERSION_TYPES
6311 -- The type USER is excluded.
6312
6313 IF p_cust_profile_amt_rec.exchange_rate_type is NOT NULL AND
6314 p_cust_profile_amt_rec.exchange_rate_type <> FND_API.G_MISS_CHAR
6315 AND ( p_create_update_flag = 'C' OR
6316 ( p_create_update_flag = 'U' AND
6317 p_cust_profile_amt_rec.exchange_rate_type <> NVL( l_exchange_rate_type, FND_API.G_MISS_CHAR ) ) )
6318 THEN
6319
6320 check_exchange_rate_type_fk(
6321 p_column => 'exchange_rate_type',
6322 p_column_value => p_cust_profile_amt_rec.exchange_rate_type,
6323 x_return_status => x_return_status );
6324
6325 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6326 hz_utility_v2pub.debug(p_message=>'exchange_rate_type should be a valid value defined in GL_DAILY_CONVERSION_TYPES. '||
6327 'x_return_status = ' || x_return_status,
6328 p_prefix =>l_debug_prefix,
6329 p_msg_level=>fnd_log.level_statement);
6330 END IF;
6331
6332 END IF;
6333
6334 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6335 hz_utility_v2pub.debug(p_message=>'(+) after validate exchange_rate_type..' ||
6336 'x_return_status = ' || x_return_status,
6337 p_prefix =>l_debug_prefix,
6338 p_msg_level=>fnd_log.level_statement);
6339 END IF;
6340
6341 ---------------------------------------------------------
6342 -- validate min_fc_invoice_amount, min_fc_invoice_percent
6343 ---------------------------------------------------------
6344 -- min_fc_invoice_amount is populated and mandatory only if min_fc_invoice_overdue_type = AMOUNT.
6345 -- Must be null if (min_fc_invoice_overdue_type = 'PERCENT' OR
6346 -- min_fc_invoice_overdue_type is null)
6347 -- min_fc_invoice_percent is populated and mandatory only if min_fc_invoice_overdue_type = PERCENT.
6348 -- Must be null if (min_fc_invoice_overdue_type = 'AMOUNT' OR
6349 -- min_fc_invoice_overdue_type is null)
6350 -- min_fc_invoice_percent cannot exceed 100.
6351
6352 IF p_create_update_flag = 'U' THEN
6353 IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type is NULL THEN
6354 v_cust_profile_amt_rec.min_fc_invoice_overdue_type := l_min_fc_invoice_overdue_type;
6355 END IF;
6356 IF p_cust_profile_amt_rec.min_fc_invoice_amount is NULL THEN
6357 v_cust_profile_amt_rec.min_fc_invoice_amount := l_min_fc_invoice_amount;
6358 ELSIF p_cust_profile_amt_rec.min_fc_invoice_amount = FND_API.G_MISS_NUM THEN
6359 v_cust_profile_amt_rec.min_fc_invoice_amount := NULL;
6360 END IF;
6361 IF p_cust_profile_amt_rec.min_fc_invoice_percent is NULL THEN
6362 v_cust_profile_amt_rec.min_fc_invoice_percent := l_min_fc_invoice_percent;
6363 ELSIF p_cust_profile_amt_rec.min_fc_invoice_percent = FND_API.G_MISS_NUM THEN
6364 v_cust_profile_amt_rec.min_fc_invoice_percent := NULL;
6365 END IF;
6366 END IF;
6367
6368 IF p_create_update_flag = 'C' THEN
6369 IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type = FND_API.G_MISS_CHAR THEN
6370 v_cust_profile_amt_rec.min_fc_invoice_overdue_type := NULL;
6371 END IF;
6372 IF p_cust_profile_amt_rec.min_fc_invoice_amount = FND_API.G_MISS_NUM THEN
6373 v_cust_profile_amt_rec.min_fc_invoice_amount := NULL;
6374 END IF;
6375 IF p_cust_profile_amt_rec.min_fc_invoice_percent = FND_API.G_MISS_NUM THEN
6376 v_cust_profile_amt_rec.min_fc_invoice_percent := NULL;
6377 END IF;
6378 END IF;
6379
6380 IF v_cust_profile_amt_rec.min_fc_invoice_overdue_type = 'AMOUNT' THEN
6381 IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NULL OR
6382 v_cust_profile_amt_rec.min_fc_invoice_percent IS NOT NULL) THEN
6383 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6384 FND_MSG_PUB.ADD;
6385 x_return_status := FND_API.G_RET_STS_ERROR;
6386 END IF;
6387 ELSIF v_cust_profile_amt_rec.min_fc_invoice_overdue_type = 'PERCENT' THEN
6388 IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NOT NULL OR
6389 v_cust_profile_amt_rec.min_fc_invoice_percent IS NULL) THEN
6390 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6391 FND_MSG_PUB.ADD;
6392 x_return_status := FND_API.G_RET_STS_ERROR;
6393 ELSE
6394 check_less_than_100 (
6395 p_column => 'min_fc_invoice_percent',
6396 p_column_value => v_cust_profile_amt_rec.min_fc_invoice_percent,
6397 x_return_status => x_return_status );
6398
6399 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6400 hz_utility_v2pub.debug(p_message=>'min_fc_invoice_percent should be < 100.' ||'x_return_status = ' ||
6401 x_return_status,
6402 p_prefix =>l_debug_prefix,
6403 p_msg_level=>fnd_log.level_statement);
6404 END IF;
6405 END IF;
6406 ELSE
6407 IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NOT NULL OR
6408 v_cust_profile_amt_rec.min_fc_invoice_percent IS NOT NULL) THEN
6409 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6410 FND_MSG_PUB.ADD;
6411 x_return_status := FND_API.G_RET_STS_ERROR;
6412 END IF;
6413 END IF;
6414
6415 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6416 hz_utility_v2pub.debug(p_message=>' after validate min_fc_invoice_amount and min_fc_invoice_percent..' ||
6417 'x_return_status = ' || x_return_status,
6418 p_prefix =>l_debug_prefix,
6419 p_msg_level=>fnd_log.level_statement);
6420 END IF;
6421
6422 ---------------------------------------------------------
6423 -- validate min_fc_balance_amount, min_fc_balance_percent
6424 ---------------------------------------------------------
6425 -- min_fc_balance_amount is populated and mandatory only if min_fc_balance_overdue_type = AMOUNT.
6426 -- Must be null if (min_fc_balance_overdue_type = 'PERCENT' OR
6427 -- min_fc_balance_overdue_type is null)
6428 -- min_fc_balance_percent is populated and mandatory only if min_fc_balance_overdue_type = PERCENT.
6429 -- Must be null if (min_fc_balance_overdue_type = 'AMOUNT' OR
6430 -- min_fc_balance_overdue_type is null)
6431 -- min_fc_balance_percent cannot exceed 100.
6432
6433 IF p_create_update_flag = 'U' THEN
6434 IF p_cust_profile_amt_rec.min_fc_balance_overdue_type is NULL THEN
6435 v_cust_profile_amt_rec.min_fc_balance_overdue_type := l_min_fc_balance_overdue_type;
6436 END IF;
6437 IF p_cust_profile_amt_rec.min_fc_balance_amount is NULL THEN
6438 v_cust_profile_amt_rec.min_fc_balance_amount := l_min_fc_balance_amount;
6439 ELSIF p_cust_profile_amt_rec.min_fc_balance_amount = FND_API.G_MISS_NUM THEN
6440 v_cust_profile_amt_rec.min_fc_balance_amount := NULL;
6441 END IF;
6442 IF p_cust_profile_amt_rec.min_fc_balance_percent is NULL THEN
6443 v_cust_profile_amt_rec.min_fc_balance_percent := l_min_fc_balance_percent;
6444 ELSIF p_cust_profile_amt_rec.min_fc_balance_percent = FND_API.G_MISS_NUM THEN
6445 v_cust_profile_amt_rec.min_fc_balance_percent := NULL;
6446 END IF;
6447 END IF;
6448
6449 IF p_create_update_flag = 'C' THEN
6450 IF p_cust_profile_amt_rec.min_fc_balance_overdue_type = FND_API.G_MISS_CHAR THEN
6451 v_cust_profile_amt_rec.min_fc_balance_overdue_type := NULL;
6452 END IF;
6453 IF p_cust_profile_amt_rec.min_fc_balance_amount = FND_API.G_MISS_NUM THEN
6454 v_cust_profile_amt_rec.min_fc_balance_amount := NULL;
6455 END IF;
6456 IF p_cust_profile_amt_rec.min_fc_balance_percent = FND_API.G_MISS_NUM THEN
6457 v_cust_profile_amt_rec.min_fc_balance_percent := NULL;
6458 END IF;
6459 END IF;
6460
6461 IF v_cust_profile_amt_rec.min_fc_balance_overdue_type = 'AMOUNT' THEN
6462 IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NULL OR
6463 v_cust_profile_amt_rec.min_fc_balance_percent IS NOT NULL) THEN
6464 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6465 FND_MSG_PUB.ADD;
6466 x_return_status := FND_API.G_RET_STS_ERROR;
6467 END IF;
6468 ELSIF v_cust_profile_amt_rec.min_fc_balance_overdue_type = 'PERCENT' THEN
6469 IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NOT NULL OR
6470 v_cust_profile_amt_rec.min_fc_balance_percent IS NULL) THEN
6471 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6472 FND_MSG_PUB.ADD;
6473 x_return_status := FND_API.G_RET_STS_ERROR;
6474 ELSE
6475 check_less_than_100 (
6476 p_column => 'min_fc_balance_percent',
6477 p_column_value => v_cust_profile_amt_rec.min_fc_balance_percent,
6478 x_return_status => x_return_status );
6479
6480 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6481 hz_utility_v2pub.debug(p_message=>'min_fc_balance_percent should be < 100.' ||'x_return_status = ' ||
6482 x_return_status,
6483 p_prefix =>l_debug_prefix,
6484 p_msg_level=>fnd_log.level_statement);
6485 END IF;
6486 END IF;
6487 ELSE
6488 IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NOT NULL OR
6489 v_cust_profile_amt_rec.min_fc_balance_percent IS NOT NULL) THEN
6490 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6491 FND_MSG_PUB.ADD;
6492 x_return_status := FND_API.G_RET_STS_ERROR;
6493 END IF;
6494 END IF;
6495
6496 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6497 hz_utility_v2pub.debug(p_message=>' after validate min_fc_balance_amount and min_fc_balance_percent..' ||
6498 'x_return_status = ' || x_return_status,
6499 p_prefix =>l_debug_prefix,
6500 p_msg_level=>fnd_log.level_statement);
6501 END IF;
6502
6503 -------------------------------------------------------------------------
6504 -- validate interest_rate, interest_fixed_amount and interest_schedule_id
6505 -------------------------------------------------------------------------
6506 -- interest_rate cannot exceed 100. Is populated and mandatory only if interest_type = FIXED_RATE.
6507 -- Must be null if interest_type <> FIXED_RATE OR interest_type is null
6508 -- interest_fixed_amount is populated and mandatory only if interest_type = FIXED_AMOUNT.
6509 -- Must be null if interest_type <> FIXED_AMOUNT OR interest_type is null
6510 -- interest_schedule_id is populated and mandatory if only if interest_type is CHARGES_SCHEDULE or CHARGE_PER_TIER.
6511 -- Validated against ar_charge_schedules.schedule_id.
6512
6513 IF p_create_update_flag = 'U' THEN
6514 IF p_cust_profile_amt_rec.interest_type is NULL THEN
6515 v_cust_profile_amt_rec.interest_type := l_interest_type;
6516 END IF;
6517 IF p_cust_profile_amt_rec.interest_rate is NULL THEN
6518 v_cust_profile_amt_rec.interest_rate := l_interest_rate;
6519 ELSIF p_cust_profile_amt_rec.interest_rate = FND_API.G_MISS_NUM THEN
6520 v_cust_profile_amt_rec.interest_rate := NULL;
6521 END IF;
6522 IF p_cust_profile_amt_rec.interest_fixed_amount is NULL THEN
6523 v_cust_profile_amt_rec.interest_fixed_amount := l_interest_fixed_amount;
6524 ELSIF p_cust_profile_amt_rec.interest_fixed_amount = FND_API.G_MISS_NUM THEN
6525 v_cust_profile_amt_rec.interest_fixed_amount := NULL;
6526 END IF;
6527 IF p_cust_profile_amt_rec.interest_schedule_id is NULL THEN
6528 v_cust_profile_amt_rec.interest_schedule_id := l_interest_schedule_id;
6529 ELSIF p_cust_profile_amt_rec.interest_schedule_id = FND_API.G_MISS_NUM THEN
6530 v_cust_profile_amt_rec.interest_schedule_id := NULL;
6531 END IF;
6532 END IF;
6533
6534 IF p_create_update_flag = 'C' THEN
6535 IF p_cust_profile_amt_rec.interest_type = FND_API.G_MISS_CHAR THEN
6536 v_cust_profile_amt_rec.interest_type := NULL;
6537 END IF;
6538 IF p_cust_profile_amt_rec.interest_rate = FND_API.G_MISS_NUM THEN
6539 v_cust_profile_amt_rec.interest_rate := NULL;
6540 END IF;
6541 IF p_cust_profile_amt_rec.interest_fixed_amount = FND_API.G_MISS_NUM THEN
6542 v_cust_profile_amt_rec.interest_fixed_amount := NULL;
6543 END IF;
6544 IF p_cust_profile_amt_rec.interest_schedule_id = FND_API.G_MISS_NUM THEN
6545 v_cust_profile_amt_rec.interest_schedule_id := NULL;
6546 END IF;
6547 END IF;
6548
6549 IF v_cust_profile_amt_rec.interest_type = 'FIXED_RATE' THEN
6550 IF (v_cust_profile_amt_rec.interest_rate IS NULL OR
6551 v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6552 v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6553 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6554 FND_MSG_PUB.ADD;
6555 x_return_status := FND_API.G_RET_STS_ERROR;
6556 ELSE
6557 check_less_than_100 (
6558 p_column => 'interest_rate',
6559 p_column_value => v_cust_profile_amt_rec.interest_rate,
6560 x_return_status => x_return_status );
6561
6562 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6563 hz_utility_v2pub.debug(p_message=>'interest_rate should be < 100.' ||'x_return_status = ' ||
6564 x_return_status,
6565 p_prefix =>l_debug_prefix,
6566 p_msg_level=>fnd_log.level_statement);
6567 END IF;
6568 END IF;
6569 ELSIF v_cust_profile_amt_rec.interest_type = 'FIXED_AMOUNT' THEN
6570 IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6571 v_cust_profile_amt_rec.interest_fixed_amount IS NULL OR
6572 v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6573 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6574 FND_MSG_PUB.ADD;
6575 x_return_status := FND_API.G_RET_STS_ERROR;
6576 END IF;
6577 /*6469663 Late charge enhacement handling case oftier basis calculation*/
6578 ELSIF v_cust_profile_amt_rec.interest_type IN ( 'CHARGES_SCHEDULE','CHARGE_PER_TIER') THEN
6579 IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6580 v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6581 v_cust_profile_amt_rec.interest_schedule_id IS NULL) THEN
6582 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6583 FND_MSG_PUB.ADD;
6584 x_return_status := FND_API.G_RET_STS_ERROR;
6585 ELSE
6586 check_charge_schedule_id_fk (
6587 p_column => 'interest_schedule_id',
6588 p_column_value => v_cust_profile_amt_rec.interest_schedule_id,
6589 x_return_status => x_return_status );
6590
6591 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6592 hz_utility_v2pub.debug(p_message=>'interest_schedule_id should be a valid value defined in ar_charge_schedules' ||'x_return_status = ' ||
6593 x_return_status,
6594 p_prefix =>l_debug_prefix,
6595 p_msg_level=>fnd_log.level_statement);
6596 END IF;
6597 END IF;
6598 ELSE
6599 IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6600 v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6601 v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6602 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6603 FND_MSG_PUB.ADD;
6604 x_return_status := FND_API.G_RET_STS_ERROR;
6605 END IF;
6606 END IF;
6607
6608 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6609 hz_utility_v2pub.debug(p_message=>' after validate interest_rate, interest_fixed_amount and interest_schedule_id.' ||
6610 'x_return_status = ' || x_return_status,
6611 p_prefix =>l_debug_prefix,
6612 p_msg_level=>fnd_log.level_statement);
6613 END IF;
6614
6615 -------------------------------------------------------------------------
6616 -- validate penalty_rate, penalty_fixed_amount and penalty_schedule_id
6617 -------------------------------------------------------------------------
6618 -- penalty_rate cannot exceed 100. Is populated and mandatory only if penalty_type = FIXED_RATE.
6619 -- Must be null if penalty_type <> FIXED_RATE OR penalty_type is null
6620 -- penalty_fixed_amount is populated and mandatory only if penalty_type = FIXED_AMOUNT.
6621 -- Must be null if penalty_type <> FIXED_AMOUNT OR penalty_type is null
6622 -- penalty_schedule_id is populated and mandatory if only if penalty_type in CHARGES_SCHEDULE or CHARGE_PER_TIER.
6623 -- Validated against ar_charge_schedules.schedule_id.
6624
6625 IF p_create_update_flag = 'U' THEN
6626 IF p_cust_profile_amt_rec.penalty_type is NULL THEN
6627 v_cust_profile_amt_rec.penalty_type := l_penalty_type;
6628 END IF;
6629 IF p_cust_profile_amt_rec.penalty_rate is NULL THEN
6630 v_cust_profile_amt_rec.penalty_rate := l_penalty_rate;
6631 ELSIF p_cust_profile_amt_rec.penalty_rate = FND_API.G_MISS_NUM THEN
6632 v_cust_profile_amt_rec.penalty_rate := NULL;
6633 END IF;
6634 IF p_cust_profile_amt_rec.penalty_fixed_amount is NULL THEN
6635 v_cust_profile_amt_rec.penalty_fixed_amount := l_penalty_fixed_amount;
6636 ELSIF p_cust_profile_amt_rec.penalty_fixed_amount = FND_API.G_MISS_NUM THEN
6637 v_cust_profile_amt_rec.penalty_fixed_amount := NULL;
6638 END IF;
6639 IF p_cust_profile_amt_rec.penalty_schedule_id is NULL THEN
6640 v_cust_profile_amt_rec.penalty_schedule_id := l_penalty_schedule_id;
6641 ELSIF p_cust_profile_amt_rec.penalty_schedule_id = FND_API.G_MISS_NUM THEN
6642 v_cust_profile_amt_rec.penalty_schedule_id := NULL;
6643 END IF;
6644 END IF;
6645
6646 IF p_create_update_flag = 'C' THEN
6647 IF p_cust_profile_amt_rec.penalty_type = FND_API.G_MISS_CHAR THEN
6648 v_cust_profile_amt_rec.penalty_type := NULL;
6649 END IF;
6650 IF p_cust_profile_amt_rec.penalty_rate = FND_API.G_MISS_NUM THEN
6651 v_cust_profile_amt_rec.penalty_rate := NULL;
6652 END IF;
6653 IF p_cust_profile_amt_rec.penalty_fixed_amount = FND_API.G_MISS_NUM THEN
6654 v_cust_profile_amt_rec.penalty_fixed_amount := NULL;
6655 END IF;
6656 IF p_cust_profile_amt_rec.penalty_schedule_id = FND_API.G_MISS_NUM THEN
6657 v_cust_profile_amt_rec.penalty_schedule_id := NULL;
6658 END IF;
6659 END IF;
6660
6661 IF v_cust_profile_amt_rec.penalty_type = 'FIXED_RATE' THEN
6662 IF (v_cust_profile_amt_rec.penalty_rate IS NULL OR
6663 v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6664 v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6665 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6666 FND_MSG_PUB.ADD;
6667 x_return_status := FND_API.G_RET_STS_ERROR;
6668 ELSE
6669 check_less_than_100 (
6670 p_column => 'penalty_rate',
6671 p_column_value => v_cust_profile_amt_rec.penalty_rate,
6672 x_return_status => x_return_status );
6673
6674 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6675 hz_utility_v2pub.debug(p_message=>'penalty_rate should be < 100.' ||'x_return_status = ' ||
6676 x_return_status,
6677 p_prefix =>l_debug_prefix,
6678 p_msg_level=>fnd_log.level_statement);
6679 END IF;
6680 END IF;
6681 ELSIF v_cust_profile_amt_rec.penalty_type = 'FIXED_AMOUNT' THEN
6682 IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6683 v_cust_profile_amt_rec.penalty_fixed_amount IS NULL OR
6684 v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6685 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6686 FND_MSG_PUB.ADD;
6687 x_return_status := FND_API.G_RET_STS_ERROR;
6688 END IF;
6689 /*6469663 Late charge enhacement handling case oftier basis calculation*/
6690 ELSIF v_cust_profile_amt_rec.penalty_type IN ('CHARGES_SCHEDULE','CHARGE_PER_TIER') THEN
6691 IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6692 v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6693 v_cust_profile_amt_rec.penalty_schedule_id IS NULL) THEN
6694 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6695 FND_MSG_PUB.ADD;
6696 x_return_status := FND_API.G_RET_STS_ERROR;
6697 ELSE
6698 check_charge_schedule_id_fk (
6699 p_column => 'penalty_schedule_id',
6700 p_column_value => v_cust_profile_amt_rec.penalty_schedule_id,
6701 x_return_status => x_return_status );
6702
6703 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6704 hz_utility_v2pub.debug(p_message=>'penalty_schedule_id should be a valid value defined in ar_charge_schedules' ||'x_return_status = ' ||
6705 x_return_status,
6706 p_prefix =>l_debug_prefix,
6707 p_msg_level=>fnd_log.level_statement);
6708 END IF;
6709 END IF;
6710 ELSE
6711 IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6712 v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6713 v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6714 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6715 FND_MSG_PUB.ADD;
6716 x_return_status := FND_API.G_RET_STS_ERROR;
6717 END IF;
6718 END IF;
6719
6720 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6721 hz_utility_v2pub.debug(p_message=>' after validate penalty_rate, penalty_fixed_amount and penalty_schedule_id.' ||
6722 'x_return_status = ' || x_return_status,
6723 p_prefix =>l_debug_prefix,
6724 p_msg_level=>fnd_log.level_statement);
6725 END IF;
6726
6727 END validate_cust_profile_amt;
6728
6729 /**
6730 * PROCEDURE validate_accnt_party_site
6731 *
6732 * DESCRIPTION
6733 * Validates party_site adding to Customer Account Site.
6734 * If a party is directly related to another party (through active party relationship),
6735 * then account site creation between 2 parties is allowed.
6736 * Do not allow Account Site creation only if they are completely unrelated.
6737 *
6738 * Get Party information from Account and Party Site, if those are not equal then
6739 * look for Relationship between these two parties eiter directly or indirectly.
6740 * If no relation found then return error
6741 *
6742 * Private Procedure
6743 *
6744 * ARGUMENTS
6745 * IN:
6746 * p_cust_acct_site_rec Customer account site record.
6747 * IN/OUT:
6748 * x_return_status Return status after the call. The status can
6749 * be FND_API.G_RET_STS_SUCCESS (success),
6750 * FND_API.G_RET_STS_ERROR (error),
6751 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6752 *
6753 * NOTES
6754 *
6755 * MODIFICATION HISTORY
6756 *
6757 * 23rd Mar 11 Sudhir Gokavarapu o Created.
6758 */
6759
6760
6761 PROCEDURE validate_accnt_party_site (
6762 p_cust_acct_site_rec IN HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_ACCT_SITE_REC_TYPE,
6763 x_return_status IN OUT NOCOPY VARCHAR2
6764 ) IS
6765 l_site_party_id hz_party_sites.party_id%TYPE;
6766 l_account_party_id hz_cust_accounts.party_id%TYPE;
6767 l_account_number hz_cust_accounts.account_number%TYPE;
6768 l_party_type hz_parties.party_type%TYPE;
6769 l_site_party_name hz_parties.party_name%TYPE;
6770 l_account_party_name hz_parties.party_name%TYPE;
6771
6772 l_debug_prefix VARCHAR2(30) := '';
6773 l_dummy VARCHAR2(1);
6774 BEGIN
6775 BEGIN
6776 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6777 hz_utility_v2pub.debug(p_message=>'validate_accnt_party_site (+)',
6778 p_prefix=>l_debug_prefix,
6779 p_msg_level=>fnd_log.level_procedure);
6780 END IF;
6781
6782 SELECT party_id,account_number
6783 INTO l_account_party_id,l_account_number
6784 FROM hz_cust_accounts
6785 WHERE cust_account_id = p_cust_acct_site_rec.cust_account_id ;
6786
6787 -- Debug info.
6788 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6789 hz_utility_v2pub.debug(p_message=>' Account Party ID : '||l_account_party_id||' Account Number : '||l_account_number,
6790 p_prefix =>l_debug_prefix,
6791 p_msg_level=>fnd_log.level_statement);
6792 END IF;
6793
6794 SELECT party_id
6795 INTO l_site_party_id
6796 FROM hz_party_sites ps
6797 WHERE party_site_id = p_cust_acct_site_rec.party_site_id;
6798
6799 -- Debug info.
6800 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6801 hz_utility_v2pub.debug(p_message=>'Site Party ID : '||l_site_party_id,
6802 p_prefix =>l_debug_prefix,
6803 p_msg_level=>fnd_log.level_statement);
6804 END IF;
6805
6806
6807 IF l_account_party_id <> l_site_party_id THEN
6808 BEGIN
6809 -- Debug info.
6810 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6811 hz_utility_v2pub.debug(p_message=>'Parties are not equal, Site Party ID : '||l_site_party_id
6812 ||' and Account Party ID : '||l_account_party_id,
6813 p_prefix =>l_debug_prefix,
6814 p_msg_level=>fnd_log.level_statement);
6815 END IF;
6816
6817 SELECT party_type,party_name
6818 INTO l_party_type,l_site_party_name
6819 FROM hz_parties
6820 WHERE party_id = l_site_party_id ;
6821 -- Debug info.
6822 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6823 hz_utility_v2pub.debug(p_message=>' Site Party Type : '||l_party_type||' Site Party Name : '||l_site_party_name,
6824 p_prefix =>l_debug_prefix,
6825 p_msg_level=>fnd_log.level_statement);
6826 END IF;
6827
6828 SELECT party_name
6829 INTO l_account_party_name
6830 FROM hz_parties
6831 WHERE party_id = l_account_party_id ;
6832 -- Debug info.
6833 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6834 hz_utility_v2pub.debug(p_message=>' Account Party Name : '||l_account_party_name,
6835 p_prefix =>l_debug_prefix,
6836 p_msg_level=>fnd_log.level_statement);
6837 END IF;
6838
6839 IF l_party_type = 'PARTY_RELATIONSHIP' THEN
6840
6841 BEGIN
6842 SELECT 'X'
6843 INTO l_dummy
6844 FROM hz_relationships
6845 WHERE subject_id = l_account_party_id
6846 AND subject_table_name = 'HZ_PARTIES'
6847 AND party_id = l_site_party_id
6848 AND object_table_name = 'HZ_PARTIES'
6849 AND status = 'A'
6850 AND ROWNUM = 1;
6851 EXCEPTION
6852 WHEN NO_DATA_FOUND THEN
6853
6854 -- Debug info.
6855 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6856 hz_utility_v2pub.debug(p_message=>'Party Type is PARTY_RELATIONSHIP and no record found '||
6857 ' with combination of '||l_account_party_id||'(subject_id) and '||l_site_party_id||'(Party_id)',
6858 p_prefix =>l_debug_prefix,
6859 p_msg_level=>fnd_log.level_statement);
6860 END IF;
6861
6862 FND_MESSAGE.SET_NAME( 'AR', 'HZ_PARTY_SITE_MISSMATCH' );
6863 FND_MESSAGE.SET_TOKEN( 'ADDRESS_PARTY_NAME', l_site_party_name );
6864 FND_MESSAGE.SET_TOKEN( 'ACCOUNT_PARTY_NAME', l_account_party_name );
6865 FND_MESSAGE.SET_TOKEN( 'ACCOUNT_NUMBER', l_account_number );
6866 FND_MSG_PUB.ADD;
6867 x_return_status := FND_API.G_RET_STS_ERROR;
6868 END;
6869 ELSE
6870
6871 BEGIN
6872 SELECT 'X'
6873 INTO l_dummy
6874 FROM hz_relationships
6875 WHERE subject_id = l_account_party_id
6876 AND subject_table_name = 'HZ_PARTIES'
6877 AND object_id = l_site_party_id
6878 AND object_table_name = 'HZ_PARTIES'
6879 AND status = 'A'
6880 AND ROWNUM = 1;
6881 EXCEPTION
6882 WHEN NO_DATA_FOUND THEN
6883 -- Debug info.
6884 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6885 hz_utility_v2pub.debug(p_message=>'Party Type is not a PARTY_RELATIONSHIP and no record found '||
6886 ' with combination of '||l_account_party_id||'(subject_id) and '||l_site_party_id||'(object_id)',
6887 p_prefix =>l_debug_prefix,
6888 p_msg_level=>fnd_log.level_statement);
6889 END IF;
6890 FND_MESSAGE.SET_NAME( 'AR', 'HZ_PARTY_SITE_MISSMATCH' );
6891 FND_MESSAGE.SET_TOKEN( 'ADDRESS_PARTY_NAME', l_site_party_name );
6892 FND_MESSAGE.SET_TOKEN( 'ACCOUNT_PARTY_NAME', l_account_party_name );
6893 FND_MESSAGE.SET_TOKEN( 'ACCOUNT_NUMBER', l_account_number );
6894 FND_MSG_PUB.ADD;
6895 x_return_status := FND_API.G_RET_STS_ERROR;
6896 END;
6897 END IF;
6898
6899 EXCEPTION
6900 WHEN NO_DATA_FOUND THEN
6901 -- Debug info.
6902 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6903 hz_utility_v2pub.debug(p_message=>'Site Party ID : '||l_site_party_id
6904 ||' or Account Party ID : '||l_account_party_id||' is Invalid',
6905 p_prefix =>l_debug_prefix,
6906 p_msg_level=>fnd_log.level_statement);
6907 END IF;
6908 END;
6909
6910 END IF;
6911 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6912 hz_utility_v2pub.debug(p_message=>'validate_accnt_party_site (-)',
6913 p_prefix=>l_debug_prefix,
6914 p_msg_level=>fnd_log.level_procedure);
6915 END IF;
6916 EXCEPTION
6917 WHEN NO_DATA_FOUND THEN
6918 -- Debug info.
6919 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6920 hz_utility_v2pub.debug(p_message=>'Account Id '||p_cust_acct_site_rec.cust_account_id||
6921 ' or Party Site Id '||p_cust_acct_site_rec.party_site_id||' is Invalid',
6922 p_prefix =>l_debug_prefix,
6923 p_msg_level=>fnd_log.level_statement);
6924 END IF;
6925 END;
6926
6927 END validate_accnt_party_site;
6928
6929 /**
6930 * PROCEDURE validate_cust_acct_site
6931 *
6932 * DESCRIPTION
6933 * Validates customer account site record. Checks for
6934 * uniqueness
6935 * lookup types
6936 * mandatory columns
6937 * non-updateable fields
6938 * foreign key validations
6939 * other validations
6940 *
6941 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
6942 *
6943 * ARGUMENTS
6944 * IN:
6945 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
6946 * p_cust_acct_site_rec Customer account site record.
6947 * p_rowid Rowid of the record (used only in update mode).
6948 * IN/OUT:
6949 * x_return_status Return status after the call. The status can
6950 * be FND_API.G_RET_STS_SUCCESS (success),
6951 * FND_API.G_RET_STS_ERROR (error),
6952 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6953 *
6954 * NOTES
6955 *
6956 * MODIFICATION HISTORY
6957 *
6958 * 07-23-2001 Jianying Huang o Created.
6959 * 10-25-2002 P.Suresh o Bug No : 2528119. Added validation for ece_tp_location_code
6960 * in validate_cust_acct_site procedure.
6961 * 12-MAY-2005 Rajib Ranjan Borah o TCA SSA Uptake (Bug 3456489)
6962 */
6963
6964 PROCEDURE validate_cust_acct_site (
6965 p_create_update_flag IN VARCHAR2,
6966 p_cust_acct_site_rec IN HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_ACCT_SITE_REC_TYPE,
6967 p_rowid IN ROWID,
6968 x_return_status IN OUT NOCOPY VARCHAR2
6969 ) IS
6970
6971 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_acct_site'
6972
6973 l_dummy VARCHAR2(1);
6974 l_rowid ROWID := NULL;
6975
6976 l_cust_account_id NUMBER;
6977 l_party_site_id NUMBER;
6978 l_orig_system_reference HZ_CUST_ACCT_SITES.orig_system_reference%TYPE;
6979 l_orig_system_reference1 HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
6980 l_created_by_module HZ_CUST_ACCT_SITES.created_by_module%TYPE;
6981 l_application_id NUMBER;
6982 l_status HZ_CUST_ACCT_SITES.status%TYPE;
6983 l_customer_category_code HZ_CUST_ACCT_SITES.customer_category_code%TYPE;
6984 l_count NUMBER := 0;
6985 l_instr_length number := 0;
6986 l_validate_flag varchar2(1) := 'Y';
6987 l_mosr_owner_table_id number;
6988
6989 l_temp_return_status VARCHAR2(10); -- for storing return status from
6990 -- hz_orig_system_ref_pub.get_owner_table_id
6991
6992 BEGIN
6993
6994 -- Check if API is called in debug mode. If yes, enable debug.
6995 --enable_debug;
6996
6997 -- Debug info.
6998
6999 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7000 hz_utility_v2pub.debug(p_message=>'validate_cust_acct_site (+)',
7001 p_prefix=>l_debug_prefix,
7002 p_msg_level=>fnd_log.level_procedure);
7003 END IF;
7004
7005
7006 -- Select fields for later use during update.
7007 IF p_create_update_flag = 'U' THEN
7008 SELECT CUST_ACCOUNT_ID, PARTY_SITE_ID, ORIG_SYSTEM_REFERENCE,
7009 CREATED_BY_MODULE, APPLICATION_ID, STATUS, CUSTOMER_CATEGORY_CODE
7010 INTO l_cust_account_id, l_party_site_id, l_orig_system_reference,
7011 l_created_by_module, l_application_id, l_status, l_customer_category_code
7012 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
7013 WHERE ROWID = p_rowid;
7014 END IF;
7015
7016 --------------------------------------
7017 -- validate cust_acct_site_id
7018 --------------------------------------
7019 /****Logical APIs - validation not required****/
7020 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7021 IF p_create_update_flag = 'C' THEN
7022
7023 -- If primary key value is passed, check for uniqueness.
7024 -- If primary key value is not passed, it will be generated
7025 -- from sequence by table handler.
7026
7027 IF p_cust_acct_site_rec.cust_acct_site_id IS NOT NULL AND
7028 p_cust_acct_site_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
7029 THEN
7030 BEGIN
7031 SELECT 'Y' INTO l_dummy
7032 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
7033 WHERE CUST_ACCT_SITE_ID = p_cust_acct_site_rec.cust_acct_site_id;
7034
7035 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7036 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id' );
7037 FND_MSG_PUB.ADD;
7038 x_return_status := FND_API.G_RET_STS_ERROR;
7039 EXCEPTION
7040 WHEN NO_DATA_FOUND THEN
7041 NULL;
7042 END;
7043
7044 -- Debug info.
7045
7046 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7047 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is unique during creation if passed in. ' ||
7048 'x_return_status = ' || x_return_status,
7049 p_prefix =>l_debug_prefix,
7050 p_msg_level=>fnd_log.level_statement);
7051 END IF;
7052 END IF;
7053 END IF;
7054
7055 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7056 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
7057 'x_return_status = ' || x_return_status,
7058 p_prefix =>l_debug_prefix,
7059 p_msg_level=>fnd_log.level_statement);
7060 END IF;
7061 END IF;
7062
7063 ----------------------------------------------
7064 -- validate cust_account_id
7065 ----------------------------------------------
7066 /****Logical APIs - validation not required****/
7067 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7068 -- cust_account_id is mandatory field
7069 -- Since cust_account_id is non-updateable filed, we only need to check mandatory
7070 -- during creation.
7071
7072 IF p_create_update_flag = 'C' THEN
7073 validate_mandatory (
7074 p_create_update_flag => p_create_update_flag,
7075 p_column => 'cust_account_id',
7076 p_column_value => p_cust_acct_site_rec.cust_account_id,
7077 x_return_status => x_return_status );
7078
7079 -- Debug info.
7080
7081 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7082 hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
7083 'x_return_status = ' || x_return_status,
7084 p_prefix =>l_debug_prefix,
7085 p_msg_level=>fnd_log.level_statement);
7086 END IF;
7087 END IF;
7088
7089 -- cust_account_id is non-updateable field
7090 IF p_create_update_flag = 'U' AND
7091 p_cust_acct_site_rec.cust_account_id IS NOT NULL
7092 THEN
7093 validate_nonupdateable (
7094 p_column => 'cust_account_id',
7095 p_column_value => p_cust_acct_site_rec.cust_account_id,
7096 p_old_column_value => l_cust_account_id,
7097 x_return_status => x_return_status );
7098
7099 -- Debug info.
7100
7101 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7102 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
7103 'x_return_status = ' || x_return_status,
7104 p_prefix =>l_debug_prefix,
7105 p_msg_level=>fnd_log.level_statement);
7106 END IF;
7107 END IF;
7108
7109 -- cust_account_id is foreign key of hz_cust_accounts
7110 -- Do not need to check during update because cust_account_id is
7111 -- non-updateable.
7112 IF p_create_update_flag = 'C' THEN
7113 IF p_cust_acct_site_rec.cust_account_id <> -1 AND
7114 p_cust_acct_site_rec.cust_account_id IS NOT NULL AND
7115 p_cust_acct_site_rec.cust_account_id <> FND_API.G_MISS_NUM
7116 THEN
7117 check_cust_account_fk (
7118 p_column => 'cust_account_id',
7119 p_column_value => p_cust_acct_site_rec.cust_account_id,
7120 x_return_status => x_return_status );
7121
7122 -- Debug info.
7123
7124 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7125 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key of hz_cust_accounts. ' ||
7126 'x_return_status = ' || x_return_status,
7127 p_prefix =>l_debug_prefix,
7128 p_msg_level=>fnd_log.level_statement);
7129 END IF;
7130 END IF;
7131 END IF;
7132
7133 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7134 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
7135 'x_return_status = ' || x_return_status,
7136 p_prefix =>l_debug_prefix,
7137 p_msg_level=>fnd_log.level_statement);
7138 END IF;
7139 END IF;
7140
7141 ----------------------------------------------
7142 -- validate party_site_id
7143 ----------------------------------------------
7144 /****Logical APIs - validation not required****/
7145 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7146 -- party_site_id is mandatory field
7147 -- Since party_site_id is non-updateable filed, we only need to check mandatory
7148 -- during creation.
7149
7150 IF p_create_update_flag = 'C' THEN
7151 validate_mandatory (
7152 p_create_update_flag => p_create_update_flag,
7153 p_column => 'party_site_id',
7154 p_column_value => p_cust_acct_site_rec.party_site_id,
7155 x_return_status => x_return_status );
7156
7157 -- Debug info.
7158
7159 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7160 hz_utility_v2pub.debug(p_message=>'party_site_id is mandatory. ' ||
7161 'x_return_status = ' || x_return_status,
7162 p_prefix =>l_debug_prefix,
7163 p_msg_level=>fnd_log.level_statement);
7164 END IF;
7165 END IF;
7166
7167 -- party_site_id is non-updateable field
7168 IF p_create_update_flag = 'U' AND
7169 p_cust_acct_site_rec.party_site_id IS NOT NULL
7170 THEN
7171 validate_nonupdateable (
7172 p_column => 'party_site_id',
7173 p_column_value => p_cust_acct_site_rec.party_site_id,
7174 p_old_column_value => l_party_site_id,
7175 x_return_status => x_return_status );
7176
7177 -- Debug info.
7178
7179 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7180 hz_utility_v2pub.debug(p_message=>'party_site_id is non-updateable. ' ||
7181 'x_return_status = ' || x_return_status,
7182 p_prefix =>l_debug_prefix,
7183 p_msg_level=>fnd_log.level_statement);
7184 END IF;
7185 END IF;
7186
7187 -- party_site_id is foreign key of hz_party_sites
7188 -- Do not need to check during update because party_site_id is
7189 -- non-updateable.
7190 IF p_create_update_flag = 'C' AND
7191 p_cust_acct_site_rec.party_site_id IS NOT NULL AND
7192 p_cust_acct_site_rec.party_site_id <> FND_API.G_MISS_NUM
7193 THEN
7194 check_party_site_fk (
7195 p_column => 'party_site_id',
7196 p_column_value => p_cust_acct_site_rec.party_site_id,
7197 x_return_status => x_return_status );
7198
7199 -- Debug info.
7200
7201 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7202 hz_utility_v2pub.debug(p_message=>'party_site_id is foreign key of hz_party_sites. ' ||
7203 'x_return_status = ' || x_return_status,
7204 p_prefix =>l_debug_prefix,
7205 p_msg_level=>fnd_log.level_statement);
7206 END IF;
7207
7208
7209
7210 -- Bug 2197181: Because of Mix-n-Match project, location from 3rd party content
7211 -- providers can now be used in the business flow. Therefore, removing restriction
7212 -- that the "party_site_id must link to a 'USER_ENTERED' location".
7213
7214 /*
7215
7216 --- party_site_id must link to a 'USER_ENTERED' location
7217 BEGIN
7218 SELECT 'Y' INTO l_dummy
7219 FROM HZ_LOCATIONS
7220 WHERE LOCATION_ID = (
7221 SELECT LOCATION_ID
7222 FROM HZ_PARTY_SITES
7223 WHERE PARTY_SITE_ID = p_cust_acct_site_rec.party_site_id )
7224 AND CONTENT_SOURCE_TYPE = HZ_PARTY_V2PUB.G_MISS_CONTENT_SOURCE_TYPE;
7225
7226 EXCEPTION
7227 WHEN NO_DATA_FOUND THEN
7228 FND_MESSAGE.SET_NAME( 'AR', 'HZ_LOC_CONTENT_INVALID' );
7229 FND_MSG_PUB.ADD;
7230 x_return_status := FND_API.G_RET_STS_ERROR;
7231 END;
7232
7233 -- Debug info.
7234 IF G_DEBUG THEN
7235 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7236 'party_site_id must link to a USER_ENTERED location. ' ||
7237 'x_return_status = ' || x_return_status, l_debug_prefix );
7238 END IF;
7239
7240 */
7241 --Bug 9967304
7242 --Validating Party associated with address and party associated with account
7243 IF p_create_update_flag = 'C' THEN
7244
7245 validate_accnt_party_site(
7246 p_cust_acct_site_rec => p_cust_acct_site_rec,
7247 x_return_status => x_return_status);
7248
7249 -- Debug info.
7250 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7251 hz_utility_v2pub.debug(p_message=>'Account Party and Site Party are related. ' ||
7252 'x_return_status = ' || x_return_status,
7253 p_prefix =>l_debug_prefix,
7254 p_msg_level=>fnd_log.level_statement);
7255 END IF;
7256
7257 END IF;
7258 -- End of 9967304
7259
7260
7261 -- cust_account_id and party_site_id together should be unique.
7262 -- Bug 3456489. Post MOAC, this uniqueness should be within orgs.
7263 BEGIN
7264 SELECT 'Y' INTO l_dummy
7265 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
7266 WHERE CUST_ACCOUNT_ID = p_cust_acct_site_rec.cust_account_id
7267 AND PARTY_SITE_ID = p_cust_acct_site_rec.party_site_id
7268 AND ORG_ID = p_cust_acct_site_rec.org_id -- Bug 3456489
7269 AND ROWNUM = 1;
7270
7271 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7272 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_site_id' );
7273 FND_MSG_PUB.ADD;
7274 x_return_status := FND_API.G_RET_STS_ERROR;
7275 EXCEPTION
7276 WHEN NO_DATA_FOUND THEN
7277 NULL;
7278 END;
7279
7280 -- Debug info.
7281
7282 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7283 hz_utility_v2pub.debug(p_message=>'cust_account_id and party_site_id together should be unique. ' ||
7284 'x_return_status = ' || x_return_status,
7285 p_prefix =>l_debug_prefix,
7286 p_msg_level=>fnd_log.level_statement);
7287 END IF;
7288 END IF;
7289
7290 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7291 hz_utility_v2pub.debug(p_message=>'(+) after validate party_site_id ... ' ||
7292 'x_return_status = ' || x_return_status,
7293 p_prefix =>l_debug_prefix,
7294 p_msg_level=>fnd_log.level_statement);
7295 END IF;
7296 END IF;
7297
7298 ----------------------------------------------
7299 -- validate orig_system_reference
7300 ----------------------------------------------
7301 /****Logical APIs - validation not required****/
7302 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7303 -- orig_system_reference is unique. Since orig_system_refence is defaulting to
7304 -- primary key, we only need to check the uniqueness if user passes some value.
7305 -- database constraints can catch unique error when we defaulting.
7306 -- orig_system_reference is non-updateable, we only need to check uniqueness
7307 -- during creation.
7308
7309 -- Bug 3456489. Post MOAC, this uniqeness should be within orgs.
7310 IF p_create_update_flag = 'C' AND
7311 p_cust_acct_site_rec.orig_system_reference IS NOT NULL AND
7312 p_cust_acct_site_rec.orig_system_reference <> FND_API.G_MISS_CHAR
7313 THEN
7314 BEGIN
7315 SELECT 'Y' INTO l_dummy
7316 FROM HZ_CUST_ACCT_SITES_ALL
7317 WHERE ORIG_SYSTEM_REFERENCE = p_cust_acct_site_rec.orig_system_reference
7318 AND ORG_ID = p_cust_acct_site_rec.org_id;
7319
7320 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7321 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'orig_system_reference' );
7322 FND_MSG_PUB.ADD;
7323 x_return_status := FND_API.G_RET_STS_ERROR;
7324 EXCEPTION
7325 WHEN NO_DATA_FOUND THEN
7326 NULL;
7327 END;
7328
7329 -- Debug info.
7330
7331 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7332 hz_utility_v2pub.debug(p_message=>'orig_system_reference is unique if passed in. ' ||
7333 'x_return_status = ' || x_return_status,
7334 p_prefix =>l_debug_prefix,
7335 p_msg_level=>fnd_log.level_statement);
7336 END IF;
7337
7338 END IF;
7339
7340 -- orig_system_reference is non-updateable field
7341 l_instr_length := instr(l_orig_system_reference,'#@');
7342 if l_instr_length > 0
7343 then
7344 l_orig_system_reference1 := null;
7345 if substr(l_orig_system_reference,1,l_instr_length-1) <> p_cust_acct_site_rec.orig_system_reference
7346 then
7347 l_validate_flag := 'N';
7348 end if;
7349 else
7350 l_orig_system_reference1 := p_cust_acct_site_rec.orig_system_reference;
7351 end if;
7352
7353 IF (p_cust_acct_site_rec.orig_system is not null and p_cust_acct_site_rec.orig_system <>fnd_api.g_miss_char)
7354 and (p_cust_acct_site_rec.orig_system_reference is not null and p_cust_acct_site_rec.orig_system_reference <>fnd_api.g_miss_char)
7355 and p_create_update_flag = 'U'
7356 then
7357 hz_orig_system_ref_pub.get_owner_table_id
7358 (p_orig_system => p_cust_acct_site_rec.orig_system,
7359 p_orig_system_reference => p_cust_acct_site_rec.orig_system_reference,
7360 p_owner_table_name => 'HZ_CUST_ACCT_SITES_ALL',
7361 x_owner_table_id => l_mosr_owner_table_id,
7362 x_return_status => l_temp_return_status);
7363
7364 IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
7365 l_mosr_owner_table_id= nvl(p_cust_acct_site_rec.cust_acct_site_id,l_mosr_owner_table_id))
7366 THEN
7367 l_validate_flag := 'N';
7368 END IF;
7369
7370 -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
7371 -- x_return_status. Set x_return_status to error, ONLY if there is error.
7372 -- In case of success, leave it to carry over previous value as before this call.
7373 -- Fix for Bug 5498116 (29-AUG-2006)
7374 IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
7375 x_return_status := l_temp_return_status;
7376 END IF;
7377
7378 end if;
7379 -- orig_system_reference is non-updateable field
7380 IF p_create_update_flag = 'U' AND
7381 p_cust_acct_site_rec.orig_system_reference IS NOT NULL
7382 and l_validate_flag = 'Y'
7383 THEN
7384 validate_nonupdateable (
7385 p_column => 'orig_system_reference',
7386 p_column_value => p_cust_acct_site_rec.orig_system_reference,
7387 p_old_column_value => l_orig_system_reference,
7388 x_return_status => x_return_status );
7389
7390 -- Debug info.
7391
7392 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7393 hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
7394 'x_return_status = ' || x_return_status,
7395 p_prefix =>l_debug_prefix,
7396 p_msg_level=>fnd_log.level_statement);
7397 END IF;
7398 END IF;
7399
7400 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7401 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
7402 'x_return_status = ' || x_return_status,
7403 p_prefix =>l_debug_prefix,
7404 p_msg_level=>fnd_log.level_statement);
7405 END IF;
7406 END IF;
7407
7408 --------------------------------------
7409 -- validate tp_header_id
7410 --------------------------------------
7411
7412 -- We have unique index on tp_header_id
7413
7414 IF p_cust_acct_site_rec.tp_header_id IS NOT NULL AND
7415 p_cust_acct_site_rec.tp_header_id <> FND_API.G_MISS_NUM
7416 THEN
7417 BEGIN
7418 SELECT ROWID INTO l_rowid
7419 FROM HZ_CUST_ACCT_SITES_ALL
7420 WHERE TP_HEADER_ID = p_cust_acct_site_rec.tp_header_id
7421 AND ORG_ID = p_cust_acct_site_rec.org_id; -- Bug 3456489
7422
7423 IF p_create_update_flag = 'C' OR
7424 ( p_create_update_flag = 'U' AND l_rowid <> p_rowid )
7425 THEN
7426 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7427 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'tp_header_id' );
7428 FND_MSG_PUB.ADD;
7429 x_return_status := FND_API.G_RET_STS_ERROR;
7430 END IF;
7431 EXCEPTION
7432 WHEN NO_DATA_FOUND THEN
7433 NULL;
7434 END;
7435
7436 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7437 hz_utility_v2pub.debug(p_message=>'tp_header_id is unique if passed in. ' ||
7438 'x_return_status = ' || x_return_status,
7439 p_prefix =>l_debug_prefix,
7440 p_msg_level=>fnd_log.level_statement);
7441 END IF;
7442
7443 END IF;
7444
7445 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7446 hz_utility_v2pub.debug(p_message=>'(+) after validate tp_header_id ... ' ||
7447 'x_return_status = ' || x_return_status,
7448 p_prefix =>l_debug_prefix,
7449 p_msg_level=>fnd_log.level_statement);
7450 END IF;
7451
7452 --------------------------------------
7453 -- validate status
7454 --------------------------------------
7455
7456 -- status cannot be set to null during update
7457 IF p_create_update_flag = 'U' AND
7458 p_cust_acct_site_rec.status IS NOT NULL
7459 THEN
7460 validate_cannot_update_to_null (
7461 p_column => 'status',
7462 p_column_value => p_cust_acct_site_rec.status,
7463 x_return_status => x_return_status );
7464
7465 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7466 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
7467 'x_return_status = ' || x_return_status,
7468 p_prefix =>l_debug_prefix,
7469 p_msg_level=>fnd_log.level_statement);
7470 END IF;
7471 END IF;
7472
7473 /****Logical APIs - validation not required****/
7474 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7475 -- status is lookup code in lookup type CODE_STATUS
7476 IF p_cust_acct_site_rec.status IS NOT NULL AND
7477 p_cust_acct_site_rec.status <> FND_API.G_MISS_CHAR AND
7478 ( p_create_update_flag = 'C' OR
7479 ( p_create_update_flag = 'U' AND
7480 p_cust_acct_site_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
7481 THEN
7482 validate_lookup (
7483 p_column => 'status',
7484 p_lookup_type => 'CODE_STATUS',
7485 p_column_value => p_cust_acct_site_rec.status,
7486 x_return_status => x_return_status );
7487
7488 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7489 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
7490 'x_return_status = ' || x_return_status,
7491 p_prefix =>l_debug_prefix,
7492 p_msg_level=>fnd_log.level_statement);
7493 END IF;
7494
7495 END IF;
7496
7497 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7498 hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
7499 'x_return_status = ' || x_return_status,
7500 p_prefix =>l_debug_prefix,
7501 p_msg_level=>fnd_log.level_statement);
7502 END IF;
7503 END IF;
7504
7505 ----------------------------------------------
7506 -- validate customer_category_code
7507 ----------------------------------------------
7508
7509 -- customer_category_code is lookup code in lookup type ADDRESS_CATEGORY
7510 IF p_cust_acct_site_rec.customer_category_code IS NOT NULL AND
7511 p_cust_acct_site_rec.customer_category_code <> FND_API.G_MISS_CHAR AND
7512 ( p_create_update_flag = 'C' OR
7513 ( p_create_update_flag = 'U' AND
7514 p_cust_acct_site_rec.customer_category_code <> NVL( l_customer_category_code, FND_API.G_MISS_CHAR ) ) )
7515 THEN
7516 validate_lookup (
7517 p_column => 'customer_category_code',
7518 p_lookup_type => 'ADDRESS_CATEGORY',
7519 p_column_value => p_cust_acct_site_rec.customer_category_code,
7520 x_return_status => x_return_status );
7521
7522 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7523 hz_utility_v2pub.debug(p_message=>'customer_category_code is lookup code in lookup type ADDRESS_CATEGORY. ' ||
7524 'x_return_status = ' || x_return_status,
7525 p_prefix =>l_debug_prefix,
7526 p_msg_level=>fnd_log.level_statement);
7527 END IF;
7528 END IF;
7529
7530 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7531 hz_utility_v2pub.debug(p_message=>'(+) after validate customer_category_code ... ' ||
7532 'x_return_status = ' || x_return_status,
7533 p_prefix =>l_debug_prefix,
7534 p_msg_level=>fnd_log.level_statement);
7535 END IF;
7536
7537 /* comment out the validation as the language column is obsoleted in r12
7538 ----------------------------------------------
7539 -- validate language
7540 ----------------------------------------------
7541
7542 -- language is foreign key of fnd installed languages
7543 IF p_cust_acct_site_rec.language IS NOT NULL AND
7544 p_cust_acct_site_rec.language <> FND_API.G_MISS_CHAR
7545 THEN
7546 BEGIN
7547 SELECT 'Y' INTO l_dummy
7548 FROM FND_LANGUAGES
7549 WHERE LANGUAGE_CODE = p_cust_acct_site_rec.language
7550 AND INSTALLED_FLAG IN ('B', 'I')
7551 AND ROWNUM = 1;
7552 EXCEPTION
7553 WHEN NO_DATA_FOUND THEN
7554 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
7555 FND_MESSAGE.SET_TOKEN( 'FK', 'language' );
7556 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'language_code' );
7557 FND_MESSAGE.SET_TOKEN( 'TABLE', 'fnd_languages(installed)' );
7558 FND_MSG_PUB.ADD;
7559 x_return_status := FND_API.G_RET_STS_ERROR;
7560 END;
7561
7562 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7563 hz_utility_v2pub.debug(p_message=>'language is foreign key of fnd installed languages. ' ||
7564 'x_return_status = ' || x_return_status,
7565 p_prefix =>l_debug_prefix,
7566 p_msg_level=>fnd_log.level_statement);
7567 END IF;
7568
7569 END IF;
7570
7571 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7572 hz_utility_v2pub.debug(p_message=>'(+) after validate language ... ' ||
7573 'x_return_status = ' || x_return_status,
7574 p_prefix =>l_debug_prefix,
7575 p_msg_level=>fnd_log.level_statement);
7576 END IF;
7577 */
7578
7579 --------------------------------------
7580 -- validate primary_specialist_id
7581 --------------------------------------
7582
7583 -- primary_specialist_id is foreign key to per_all_people_f
7584 IF p_cust_acct_site_rec.primary_specialist_id IS NOT NULL AND
7585 p_cust_acct_site_rec.primary_specialist_id <> FND_API.G_MISS_NUM
7586 THEN
7587 check_per_all_people_f_fk (
7588 p_column => 'primary_specialist_id',
7589 p_column_value => p_cust_acct_site_rec.primary_specialist_id,
7590 x_return_status => x_return_status );
7591
7592 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7593 hz_utility_v2pub.debug(p_message=>'primary_specialist_id is foreign key to per_all_people_f. ' ||
7594 'x_return_status = ' || x_return_status,
7595 p_prefix =>l_debug_prefix,
7596 p_msg_level=>fnd_log.level_statement);
7597 END IF;
7598 END IF;
7599
7600 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7601 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_specialist_id ... ' ||
7602 'x_return_status = ' || x_return_status,
7603 p_prefix =>l_debug_prefix,
7604 p_msg_level=>fnd_log.level_statement);
7605 END IF;
7606
7607 --------------------------------------
7608 -- validate secondary_specialist_id
7609 --------------------------------------
7610
7611 -- secondary_specialist_id is foreign key to per_all_people_f
7612 IF p_cust_acct_site_rec.secondary_specialist_id IS NOT NULL AND
7613 p_cust_acct_site_rec.secondary_specialist_id <> FND_API.G_MISS_NUM
7614 THEN
7615 /* Bug 3591694 Changed foreign key validation from check_cust_account_fk to
7616 check_per_all_people_f_fk.
7617 */
7618 -- check_cust_account_fk (
7619 check_per_all_people_f_fk(
7620 p_column => 'secondary_specialist_id',
7621 p_column_value => p_cust_acct_site_rec.secondary_specialist_id,
7622 x_return_status => x_return_status );
7623
7624 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7625 hz_utility_v2pub.debug(p_message=>'secondary_specialist_id is foreign key to per_all_people_f. ' ||
7626 'x_return_status = ' || x_return_status,
7627 p_prefix =>l_debug_prefix,
7628 p_msg_level=>fnd_log.level_statement);
7629 END IF;
7630 END IF;
7631
7632 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7633 hz_utility_v2pub.debug(p_message=>'(+) after validate secondary_specialist_id ... ' ||
7634 'x_return_status = ' || x_return_status,
7635 p_prefix =>l_debug_prefix,
7636 p_msg_level=>fnd_log.level_statement);
7637 END IF;
7638
7639 --------------------------------------
7640 -- validate created_by_module
7641 --------------------------------------
7642
7643 validate_created_by_module(
7644 p_create_update_flag => p_create_update_flag,
7645 p_created_by_module => p_cust_acct_site_rec.created_by_module,
7646 p_old_created_by_module => l_created_by_module,
7647 x_return_status => x_return_status);
7648
7649 --------------------------------------
7650 -- validate application_id
7651 --------------------------------------
7652
7653 validate_application_id(
7654 p_create_update_flag => p_create_update_flag,
7655 p_application_id => p_cust_acct_site_rec.application_id,
7656 p_old_application_id => l_application_id,
7657 x_return_status => x_return_status);
7658
7659 --------------------------------------
7660 -- validate ece_tp_location_code
7661 --------------------------------------
7662 IF p_create_update_flag = 'C' THEN
7663 IF p_cust_acct_site_rec.cust_account_id <> -1 AND
7664 p_cust_acct_site_rec.cust_account_id IS NOT NULL AND
7665 p_cust_acct_site_rec.cust_account_id <> FND_API.G_MISS_NUM
7666 THEN
7667 IF p_cust_acct_site_rec.ece_tp_location_code IS NOT NULL AND
7668 p_cust_acct_site_rec.ece_tp_location_code <> FND_API.G_MISS_CHAR
7669 THEN
7670 select count(1)
7671 into l_count
7672 from hz_cust_acct_sites_all addr -- Bug 3456489
7673 where addr.cust_account_id = p_cust_acct_site_rec.cust_account_id
7674 and addr.ece_tp_location_code = p_cust_acct_site_rec.ece_tp_location_code
7675 and org_id = p_cust_acct_site_rec.org_id; -- Bug 3456489
7676
7677 IF l_count > 0 THEN
7678 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ADDR_EDI_LOC_EXISTS' );
7679 FND_MSG_PUB.ADD;
7680 x_return_status := FND_API.G_RET_STS_ERROR;
7681 END IF;
7682 END IF;
7683 END IF;
7684 ELSIF p_create_update_flag = 'U' THEN
7685 IF p_cust_acct_site_rec.ece_tp_location_code IS NOT NULL AND
7686 p_cust_acct_site_rec.ece_tp_location_code <> FND_API.G_MISS_CHAR
7687 THEN
7688 select count(1)
7689 into l_count
7690 from hz_cust_acct_sites_all addr -- Bug 3456489
7691 where addr.cust_account_id = l_cust_account_id
7692 and addr.ece_tp_location_code = p_cust_acct_site_rec.ece_tp_location_code
7693 and addr.cust_acct_site_id <> p_cust_acct_site_rec.cust_acct_site_id
7694 and org_id = p_cust_acct_site_rec.org_id; -- Bug 3456489
7695
7696 IF l_count > 0 THEN
7697 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ADDR_EDI_LOC_EXISTS' );
7698 FND_MSG_PUB.ADD;
7699 x_return_status := FND_API.G_RET_STS_ERROR;
7700 END IF;
7701 END IF;
7702 END IF;
7703
7704 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7705 hz_utility_v2pub.debug(p_message=>'The ece_tp_location_code should be unique for a customer ' ||
7706 'x_return_status = ' || x_return_status,
7707 p_prefix =>l_debug_prefix,
7708 p_msg_level=>fnd_log.level_statement);
7709 END IF;
7710
7711 -- Debug info.
7712
7713 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7714 hz_utility_v2pub.debug(p_message=>'validate_cust_acct_site (-)',
7715 p_prefix=>l_debug_prefix,
7716 p_msg_level=>fnd_log.level_procedure);
7717 END IF;
7718
7719 -- Check if API is called in debug mode. If yes, disable debug.
7720 --disable_debug;
7721
7722 END validate_cust_acct_site;
7723
7724 /**
7725 * PROCEDURE validate_cust_site_use
7726 *
7727 * DESCRIPTION
7728 * Validates customer account site use record. Checks for
7729 * uniqueness
7730 * lookup types
7731 * mandatory columns
7732 * non-updateable fields
7733 * foreign key validations
7734 * other validations
7735 *
7736 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
7737 *
7738 * ARGUMENTS
7739 * IN:
7740 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
7741 * p_cust_site_use_rec Customer account site use record.
7742 * p_rowid Rowid of the record (used only in update mode).
7743 * IN/OUT:
7744 * x_return_status Return status after the call. The status can
7745 * be FND_API.G_RET_STS_SUCCESS (success),
7746 * FND_API.G_RET_STS_ERROR (error),
7747 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
7748 *
7749 * NOTES
7750 *
7751 * MODIFICATION HISTORY
7752 *
7753 * 07-23-2001 Jianying Huang o Created.
7754 * 11-08-2001 Rajeshwari P Added validations for fields, tax_code,payment_term_id,
7755 * demand_class_codeprimary_salesrep_id,finchrg_receivables_trx_id,
7756 * order_type_id,order_type_id,ship_partial,item_cross_ref_pref,
7757 * warehouse_id,date_type_preference,
7758 * ship_sets_include_lines_flag and arrivalsets_include_lines_flag
7759 * in procedure VALIDATE_CUST_SITE_USE.
7760 * 03-26-2002 P.Suresh Bug No : 2266165. Added the check that bill_to_flag of
7761 * hz_cust_acct_relate_all table should be Y when validating
7762 * bill_to_site_use_id.
7763 * 04-11-2002 P.Suresh Bug No : 2260832. Added the check for the status
7764 * when validating that only one primary is allowed for
7765 * one site use type per account in the procedure
7766 * validate_cust_site_use.
7767 * 21-05-2002 Rajeshwari P Bug fix 2311760.Commented the code which validates the
7768 * Obsolete column ship_partial.
7769 * 06-13-2002 P.Suresh Bug No : 2403263. Added validation that the contact_id
7770 * should be a foreign key to hz_cust_account_roles.
7771 * cust_account_role_id.
7772 * 06-19-2002 Rajeshwari P Bug 2399491.Validating site_use_id for duplicates
7773 * against hz_cust_site_uses_all table instead of the
7774 * org stripped view, hz_cust_site_uses.
7775 * 03-May-3004 Venkata Sowjanya S Bug No : 3609601. Commented the statements which sets tokens Column1,Column2
7776 * for message HZ_API_INACTIVE_CANNOT_PRIM
7777 * 12-MAY-2005 Rajib Ranjan Borah o TCA SSA Uptake (Bug 3456489)
7778 */
7779
7780 PROCEDURE validate_cust_site_use (
7781 p_create_update_flag IN VARCHAR2,
7782 p_cust_site_use_rec IN HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE,
7783 p_rowid IN ROWID,
7784 x_return_status IN OUT NOCOPY VARCHAR2
7785 ) IS
7786
7787 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_site_use'
7788
7789 l_dummy VARCHAR2(1);
7790 l_profile AR_SYSTEM_PARAMETERS.auto_site_numbering%TYPE;
7791
7792 l_cust_acct_site_id NUMBER;
7793 l_site_use_code HZ_CUST_SITE_USES.site_use_code%TYPE;
7794 l_cust_account_id NUMBER;
7795 l_orig_system_reference HZ_CUST_SITE_USES.orig_system_reference%TYPE;
7796 l_created_by_module HZ_CUST_SITE_USES.created_by_module%TYPE;
7797 l_application_id NUMBER;
7798 l_status HZ_CUST_SITE_USES.status%TYPE;
7799 l_ship_via HZ_CUST_SITE_USES.ship_via%TYPE;
7800 l_freight_term HZ_CUST_SITE_USES.freight_term%TYPE;
7801 l_ship_sets_inc_lines_f HZ_CUST_SITE_USES.ship_sets_include_lines_flag%TYPE;
7802 l_arrivalsets_inc_lines_f HZ_CUST_SITE_USES.arrivalsets_include_lines_flag%TYPE;
7803 l_tax_code HZ_CUST_SITE_USES.tax_code%TYPE;
7804 l_payment_term_id HZ_CUST_SITE_USES.payment_term_id%TYPE;
7805 l_demand_class_code HZ_CUST_SITE_USES.demand_class_code%TYPE;
7806 l_primary_salesrep_id HZ_CUST_SITE_USES.primary_salesrep_id%TYPE;
7807 l_finchrg_receivables_trx_id HZ_CUST_SITE_USES.FINCHRG_RECEIVABLES_TRX_ID%TYPE;
7808 l_order_type_id HZ_CUST_SITE_USES.ORDER_TYPE_ID%TYPE;
7809 l_price_list_id HZ_CUST_SITE_USES.PRICE_LIST_ID%TYPE;
7810 -- l_ship_partial HZ_CUST_SITE_USES.SHIP_PARTIAL%TYPE;
7811 l_fob_point HZ_CUST_SITE_USES.FOB_POINT%TYPE;
7812 l_item_cross_ref_pref HZ_CUST_SITE_USES.ITEM_CROSS_REF_PREF%TYPE;
7813 l_warehouse_id HZ_CUST_SITE_USES.WAREHOUSE_ID%TYPE;
7814 l_date_type_preference HZ_CUST_SITE_USES.DATE_TYPE_PREFERENCE%TYPE;
7815 -- l_ship_sets_include_lines_flag HZ_CUST_SITE_USES.SHIP_SETS_INCLUDE_LINES_FLAG%TYPE;
7816 l_primary_flag HZ_CUST_SITE_USES.PRIMARY_FLAG%TYPE;
7817 l_error BOOLEAN := FALSE;
7818 l_validate_flag varchar2(1) := 'Y';
7819 l_mosr_owner_table_id number;
7820 l_coa_id NUMBER;
7821 l_exist_flag VARCHAR2(1);
7822
7823 l_temp_return_status VARCHAR2(10); -- for storing return status from
7824 -- hz_orig_system_ref_pub.get_owner_table_id
7825
7826 BEGIN
7827
7828 -- Check if API is called in debug mode. If yes, enable debug.
7829 --enable_debug;
7830 -- Debug info.
7831
7832 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7833 hz_utility_v2pub.debug(p_message=>'validate_cust_site_use (+)',
7834 p_prefix=>l_debug_prefix,
7835 p_msg_level=>fnd_log.level_procedure);
7836 END IF;
7837
7838
7839
7840 -- Select fields for later use during update.
7841 IF p_create_update_flag = 'U' THEN
7842 SELECT CUST_ACCT_SITE_ID, SITE_USE_CODE, ORIG_SYSTEM_REFERENCE,
7843 CREATED_BY_MODULE, APPLICATION_ID, STATUS, SHIP_VIA, FREIGHT_TERM,
7844 SHIP_SETS_INCLUDE_LINES_FLAG,ARRIVALSETS_INCLUDE_LINES_FLAG,
7845 TAX_CODE,DEMAND_CLASS_CODE,PRIMARY_SALESREP_ID,FINCHRG_RECEIVABLES_TRX_ID,
7846 ORDER_TYPE_ID,PRICE_LIST_ID,FOB_POINT,ITEM_CROSS_REF_PREF,
7847 WAREHOUSE_ID,DATE_TYPE_PREFERENCE
7848 INTO l_cust_acct_site_id, l_site_use_code, l_orig_system_reference,
7849 l_created_by_module, l_application_id, l_status, l_ship_via, l_freight_term,
7850 l_ship_sets_inc_lines_f,l_arrivalsets_inc_lines_f,l_tax_code,l_demand_class_code,
7851 l_primary_salesrep_id,l_finchrg_receivables_trx_id,l_order_type_id,l_price_list_id,
7852 l_fob_point,l_item_cross_ref_pref,l_warehouse_id,l_date_type_preference
7853 FROM HZ_CUST_SITE_USES_ALL -- Bug 3456489
7854 WHERE ROWID = p_rowid;
7855 END IF;
7856
7857 --------------------------------------
7858 -- validate site_use_id
7859 --------------------------------------
7860 /****Logical APIs - validation not required****/
7861 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7862 IF p_create_update_flag = 'C' THEN
7863
7864 -- If primary key value is passed, check for uniqueness.
7865 -- If primary key value is not passed, it will be generated
7866 -- from sequence by table handler.
7867
7868 --Bug Fix 2399491, Checking for duplicates in the _all table.
7869
7870 IF p_cust_site_use_rec.site_use_id IS NOT NULL AND
7871 p_cust_site_use_rec.site_use_id <> FND_API.G_MISS_NUM
7872 THEN
7873 BEGIN
7874 SELECT 'Y' INTO l_dummy
7875 FROM HZ_CUST_SITE_USES_ALL
7876 WHERE SITE_USE_ID = p_cust_site_use_rec.site_use_id;
7877
7878 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7879 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_site_use_id' );
7880 FND_MSG_PUB.ADD;
7881 x_return_status := FND_API.G_RET_STS_ERROR;
7882 EXCEPTION
7883 WHEN NO_DATA_FOUND THEN
7884 NULL;
7885 END;
7886
7887 -- Debug info.
7888
7889 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7890 hz_utility_v2pub.debug(p_message=>'site_use_id is unique during creation if passed in. ' ||
7891 'x_return_status = ' || x_return_status,
7892 p_prefix =>l_debug_prefix,
7893 p_msg_level=>fnd_log.level_statement);
7894 END IF;
7895
7896 END IF;
7897 END IF;
7898
7899 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7900 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
7901 'x_return_status = ' || x_return_status,
7902 p_prefix =>l_debug_prefix,
7903 p_msg_level=>fnd_log.level_statement);
7904 END IF;
7905 END IF;
7906
7907 ----------------------------------------------
7908 -- validate cust_acct_site_id
7909 ----------------------------------------------
7910 -- for later use. It is selected from database during update.
7911 l_cust_acct_site_id := p_cust_site_use_rec.cust_acct_site_id; -- move it out of IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) -- bug 8408630 no data found error
7912
7913 /****Logical APIs - validation not required****/
7914 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7915 -- cust_acct_site_id is mandatory field
7916 -- Since cust_acct_site_id is non-updateable, we only need to check mandatory
7917 -- during creation.
7918
7919 IF p_create_update_flag = 'C' THEN
7920 validate_mandatory (
7921 p_create_update_flag => p_create_update_flag,
7922 p_column => 'cust_acct_site_id',
7923 p_column_value => p_cust_site_use_rec.cust_acct_site_id,
7924 x_return_status => x_return_status );
7925
7926 -- for later use. It is selected from database during update.
7927 --l_cust_acct_site_id := p_cust_site_use_rec.cust_acct_site_id;
7928
7929 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7930 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is mandatory. ' ||
7931 'x_return_status = ' || x_return_status,
7932 p_prefix =>l_debug_prefix,
7933 p_msg_level=>fnd_log.level_statement);
7934 END IF;
7935 END IF;
7936
7937 -- cust_acct_site_id is non-updateable field
7938 IF p_create_update_flag = 'U' AND
7939 p_cust_site_use_rec.cust_acct_site_id IS NOT NULL
7940 THEN
7941 validate_nonupdateable (
7942 p_column => 'cust_acct_site_id',
7943 p_column_value => p_cust_site_use_rec.cust_acct_site_id,
7944 p_old_column_value => l_cust_acct_site_id,
7945 x_return_status => x_return_status );
7946
7947 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7948 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is non-updateable. ' ||
7949 'x_return_status = ' || x_return_status,
7950 p_prefix =>l_debug_prefix,
7951 p_msg_level=>fnd_log.level_statement);
7952 END IF;
7953 END IF;
7954
7955 -- Since cust_acct_site_id is mandatory and non-updateable, we only need
7956 -- to check FK during site use creation.
7957
7958 -- cust_acct_site_id is foreign key to hz_cust_acct_sites
7959 IF p_create_update_flag = 'C' AND
7960 p_cust_site_use_rec.cust_acct_site_id IS NOT NULL AND
7961 p_cust_site_use_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
7962 THEN
7963 check_cust_acct_site_fk (
7964 p_column => 'cust_acct_site_id',
7965 p_column_value => p_cust_site_use_rec.cust_acct_site_id,
7966 p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
7967 x_return_status => x_return_status );
7968
7969 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7970 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is foreign key to hz_cust_acct_sites. ' ||
7971 'x_return_status = ' || x_return_status,
7972 p_prefix =>l_debug_prefix,
7973 p_msg_level=>fnd_log.level_statement);
7974 END IF;
7975 END IF;
7976 END IF; -- 8295000
7977 -- Find customer account id this site use belongs to.
7978 -- For later use.
7979
7980 SELECT CUST_ACCOUNT_ID INTO l_cust_account_id
7981 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
7982 WHERE CUST_ACCT_SITE_ID = l_cust_acct_site_id;
7983
7984 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7985 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
7986 'x_return_status = ' || x_return_status,
7987 p_prefix =>l_debug_prefix,
7988 p_msg_level=>fnd_log.level_statement);
7989 END IF;
7990 -- END IF; Bug 8295000 - move select out of IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL)
7991
7992
7993 --------------------------------------
7994 -- validate status
7995 --------------------------------------
7996
7997 -- status cannot be set to null during update
7998 IF p_create_update_flag = 'U' AND
7999 p_cust_site_use_rec.status IS NOT NULL
8000 THEN
8001 validate_cannot_update_to_null (
8002 p_column => 'status',
8003 p_column_value => p_cust_site_use_rec.status,
8004 x_return_status => x_return_status );
8005
8006 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8007 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
8008 'x_return_status = ' || x_return_status,
8009 p_prefix =>l_debug_prefix,
8010 p_msg_level=>fnd_log.level_statement);
8011 END IF;
8012 END IF;
8013
8014 /****Logical APIs - validation not required****/
8015 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8016 -- status is lookup code in lookup type CODE_STATUS
8017 IF p_cust_site_use_rec.status IS NOT NULL AND
8018 p_cust_site_use_rec.status <> FND_API.G_MISS_CHAR AND
8019 ( p_create_update_flag = 'C' OR
8020 ( p_create_update_flag = 'U' AND
8021 p_cust_site_use_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
8022 THEN
8023 validate_lookup (
8024 p_column => 'status',
8025 p_lookup_type => 'CODE_STATUS',
8026 p_column_value => p_cust_site_use_rec.status,
8027 x_return_status => x_return_status );
8028
8029 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8030 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
8031 'x_return_status = ' || x_return_status,
8032 p_prefix =>l_debug_prefix,
8033 p_msg_level=>fnd_log.level_statement);
8034 END IF;
8035 END IF;
8036 END IF;
8037
8038 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8039 hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
8040 'x_return_status = ' || x_return_status,
8041 p_prefix =>l_debug_prefix,
8042 p_msg_level=>fnd_log.level_statement);
8043 END IF;
8044
8045 ----------------------------------------------
8046 -- validate site_use_code
8047 ----------------------------------------------
8048
8049 -- site_use_code is mandatory field
8050 -- Since site_use_code is non-updateable, we only need to check mandatory
8051 -- during creation.
8052
8053 IF p_create_update_flag = 'C' THEN
8054 validate_mandatory (
8055 p_create_update_flag => p_create_update_flag,
8056 p_column => 'site_use_code',
8057 p_column_value => p_cust_site_use_rec.site_use_code,
8058 x_return_status => x_return_status );
8059
8060 -- for later use. It is selected from database during update.
8061 l_site_use_code := p_cust_site_use_rec.site_use_code;
8062
8063 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8064 hz_utility_v2pub.debug(p_message=>'site_use_code is mandatory. ' ||
8065 'x_return_status = ' || x_return_status,
8066 p_prefix =>l_debug_prefix,
8067 p_msg_level=>fnd_log.level_statement);
8068 END IF;
8069 END IF;
8070
8071 -- site_use_code is non-updateable field
8072 IF p_create_update_flag = 'U' AND
8073 p_cust_site_use_rec.site_use_code IS NOT NULL
8074 THEN
8075 validate_nonupdateable (
8076 p_column => 'site_use_code',
8077 p_column_value => p_cust_site_use_rec.site_use_code,
8078 p_old_column_value => l_site_use_code,
8079 x_return_status => x_return_status );
8080
8081 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8082 hz_utility_v2pub.debug(p_message=>'site_use_code is non-updateable. ' ||
8083 'x_return_status = ' || x_return_status,
8084 p_prefix =>l_debug_prefix,
8085 p_msg_level=>fnd_log.level_statement);
8086 END IF;
8087 END IF;
8088
8089 -- site_use_code is lookup code in lookup type SITE_USE_CODE
8090 -- Since site_use_code is non-updateable, we only need to do the checking
8091 -- during creation.
8092
8093 IF p_create_update_flag = 'C' AND
8094 p_cust_site_use_rec.site_use_code IS NOT NULL AND
8095 p_cust_site_use_rec.site_use_code <> FND_API.G_MISS_CHAR
8096 THEN
8097 validate_lookup (
8098 p_column => 'site_use_code',
8099 p_lookup_type => 'SITE_USE_CODE',
8100 p_column_value => p_cust_site_use_rec.site_use_code,
8101 x_return_status => x_return_status );
8102
8103 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8104 hz_utility_v2pub.debug(p_message=>'site_use_code is lookup code in lookup type SITE_USE_CODE. ' ||
8105 'x_return_status = ' || x_return_status,
8106 p_prefix =>l_debug_prefix,
8107 p_msg_level=>fnd_log.level_statement);
8108 END IF;
8109 END IF;
8110
8111 -- l_status is selected from database during update.
8112
8113 IF p_cust_site_use_rec.status = 'A' OR
8114 ( p_create_update_flag = 'C' AND
8115 ( p_cust_site_use_rec.status IS NULL OR
8116 p_cust_site_use_rec.status = FND_API.G_MISS_CHAR ) ) OR
8117 ( p_create_update_flag = 'U' AND
8118 p_cust_site_use_rec.status IS NULL AND
8119 l_status = 'A' )
8120 THEN
8121
8122 -- A customer can have only one active DUN, STMTS, LEGAL site use
8123
8124 IF l_site_use_code IN ( 'DUN', 'STMTS', 'LEGAL' ) THEN
8125 BEGIN
8126 SELECT 'Y' INTO l_dummy
8127 FROM HZ_CUST_ACCT_SITES_ALL site,
8128 HZ_CUST_SITE_USES_ALL su
8129 WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
8130 AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
8131 AND su.SITE_USE_CODE = l_site_use_code
8132 AND su.STATUS = 'A'
8133 AND ( p_create_update_flag = 'C' OR
8134 p_create_update_flag = 'U' AND su.ROWID <> p_rowid )
8135 AND site.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8136 AND su.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8137 AND ROWNUM = 1;
8138
8139 IF l_site_use_code = 'DUN' THEN
8140 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_DUN_SITE' );
8141 ELSIF l_site_use_code = 'LEGAL' THEN
8142 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_LEGAL_SITE' );
8143 ELSIF l_site_use_code = 'STMTS' THEN
8144 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_STMTS_SITE' );
8145 END IF;
8146
8147 FND_MSG_PUB.ADD;
8148 x_return_status := FND_API.G_RET_STS_ERROR;
8149
8150 EXCEPTION
8151 WHEN NO_DATA_FOUND THEN
8152 NULL;
8153 END;
8154 END IF;
8155
8156 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8157 hz_utility_v2pub.debug(p_message=>'A customer can have only one active DUN, STMTS, LEGAL site use. ' ||
8158 'x_return_status = ' || x_return_status,
8159 p_prefix =>l_debug_prefix,
8160 p_msg_level=>fnd_log.level_statement);
8161 END IF;
8162 END IF;
8163
8164 -- cust_acct_site_id and site_use_code together should be unique.
8165 if p_cust_site_use_rec.status <> 'I' or (p_create_update_flag = 'C' and (p_cust_site_use_rec.status is null or p_cust_site_use_rec.status = fnd_api.g_miss_char ))
8166 -- bug 8331061, BO API allows to pass in multiple site uses at same time such as 'A', 'I', null for status
8167
8168 then
8169 -- Bug 3988537.
8170 BEGIN
8171 SELECT 'Y' INTO l_dummy
8172 FROM HZ_CUST_SITE_USES_ALL -- Bug 3456489
8173 WHERE CUST_ACCT_SITE_ID = nvl(p_cust_site_use_rec.cust_acct_site_id,l_cust_acct_site_id)
8174 AND SITE_USE_CODE = nvl(p_cust_site_use_rec.site_use_code,l_site_use_code)
8175 AND SITE_USE_ID <> nvl(p_cust_site_use_rec.site_use_id,fnd_api.g_miss_num)
8176 AND STATUS = 'A'
8177 AND ORG_ID = p_cust_site_use_rec.org_id -- Bug 3456489
8178 AND ROWNUM = 1;
8179
8180 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
8181 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - site_use_code' );
8182 FND_MSG_PUB.ADD;
8183 x_return_status := FND_API.G_RET_STS_ERROR;
8184 EXCEPTION
8185 WHEN NO_DATA_FOUND THEN
8186 NULL;
8187 END;
8188 end if;
8189
8190 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8191 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id and site_use_code together should be unique. ' ||
8192 'x_return_status = ' || x_return_status,
8193 p_prefix =>l_debug_prefix,
8194 p_msg_level=>fnd_log.level_statement);
8195 END IF;
8196
8197
8198 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8199 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_code ... ' ||
8200 'x_return_status = ' || x_return_status,
8201 p_prefix =>l_debug_prefix,
8202 p_msg_level=>fnd_log.level_statement);
8203 END IF;
8204
8205 ----------------------------------------------
8206 -- validate location
8207 ----------------------------------------------
8208
8209 -- location should be mandatory.
8210
8211 -- check if need generate location.
8212 -- BEGIN
8213
8214 /* 3456489 Refer new HZ_Cache instead of AR System Parameters */
8215
8216 BEGIN
8217 IF (p_create_update_flag = 'C') THEN
8218 l_profile := HZ_MO_GLOBAL_CACHE.get_auto_site_numbering(
8219 p_cust_site_use_rec.org_id);
8220 END IF;
8221 EXCEPTION
8222 WHEN NO_DATA_FOUND THEN
8223 x_return_status := FND_API.G_RET_STS_ERROR;
8224 END ;
8225
8226
8227 IF p_create_update_flag = 'C' THEN
8228 IF p_cust_site_use_rec.location IS NULL OR
8229 p_cust_site_use_rec.location = FND_API.G_MISS_CHAR
8230 THEN
8231 IF l_profile = 'N' THEN
8232 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
8233 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'location' );
8234 FND_MSG_PUB.ADD;
8235 x_return_status := FND_API.G_RET_STS_ERROR;
8236 END IF;
8237
8238 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8239 hz_utility_v2pub.debug(p_message=>'location is mandatory if autonumbering is set to N. ' ||
8240 'x_return_status = ' || x_return_status,
8241 p_prefix =>l_debug_prefix,
8242 p_msg_level=>fnd_log.level_statement);
8243 END IF;
8244
8245 END IF;
8246 ELSIF p_create_update_flag = 'U' AND
8247 p_cust_site_use_rec.location IS NOT NULL
8248 THEN
8249 -- location cannot be set to null during update
8250 validate_cannot_update_to_null (
8251 p_column => 'location',
8252 p_column_value => p_cust_site_use_rec.location,
8253 x_return_status => x_return_status );
8254
8255 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8256 hz_utility_v2pub.debug(p_message=>'location cannot be updated to null. ' ||
8257 'x_return_status = ' || x_return_status,
8258 p_prefix =>l_debug_prefix,
8259 p_msg_level=>fnd_log.level_statement);
8260 END IF;
8261
8262 END IF;
8263
8264 -- location must be unique within a customer account/site_use_type
8265
8266 IF p_cust_site_use_rec.location IS NOT NULL AND
8267 p_cust_site_use_rec.location <> FND_API.G_MISS_CHAR
8268 THEN
8269 BEGIN
8270
8271 --Bug No : 2998504. Status check added to the where clause.
8272
8273 SELECT 'Y' INTO l_dummy
8274 FROM HZ_CUST_ACCT_SITES_ALL site,
8275 HZ_CUST_SITE_USES_ALL su
8276 WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
8277 AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
8278 AND su.SITE_USE_CODE = l_site_use_code
8279 AND su.LOCATION = p_cust_site_use_rec.location
8280 AND ( p_create_update_flag = 'C' OR
8281 p_create_update_flag = 'U' AND su.ROWID <> p_rowid )
8282 AND su.STATUS = 'A'
8283 AND site.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8284 AND su.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8285 AND ROWNUM = 1;
8286
8287
8288 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_DUP_CODE_LOCATION' );
8289 FND_MSG_PUB.ADD;
8290 x_return_status := FND_API.G_RET_STS_ERROR;
8291
8292 EXCEPTION
8293 WHEN NO_DATA_FOUND THEN
8294 NULL;
8295 END;
8296
8297 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8298 hz_utility_v2pub.debug(p_message=>'location must be unique within a customer account/site_use_type. ' ||
8299 'x_return_status = ' || x_return_status,
8300 p_prefix =>l_debug_prefix,
8301 p_msg_level=>fnd_log.level_statement);
8302 END IF;
8303
8304 END IF;
8305
8306 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8307 hz_utility_v2pub.debug(p_message=>'(+) after validate location ... ' ||
8308 'x_return_status = ' || x_return_status,
8309 p_prefix =>l_debug_prefix,
8310 p_msg_level=>fnd_log.level_statement);
8311 END IF;
8312
8313 ----------------------------------------------
8314 -- validate contact_id
8315 ----------------------------------------------
8316 IF p_cust_site_use_rec.contact_id IS NOT NULL AND
8317 p_cust_site_use_rec.contact_id <> FND_API.G_MISS_NUM
8318 THEN
8319 check_cust_site_use_cont_fk (
8320 p_column => 'cust_account_role_id',
8321 p_column_value => p_cust_site_use_rec.contact_id,
8322 p_customer_id => l_cust_account_id,
8323 x_return_status => x_return_status );
8324
8325 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8326 hz_utility_v2pub.debug(p_message=>'contact_id is foreign key to hz_cust_account_roles. ' ||
8327 'x_return_status = ' || x_return_status,
8328 p_prefix =>l_debug_prefix,
8329 p_msg_level=>fnd_log.level_statement);
8330 END IF;
8331
8332 END IF;
8333 ----------------------------------------------
8334 -- validate bill_to_site_use_id
8335 ----------------------------------------------
8336
8337 -- For SHIP_TO site use, bill_to_site_use_id should be a valid
8338 -- BILL_TO site use of this account and its related account.
8339 -- For other type of site uses, this column should be NULL.
8340 -- Bug No : 2266165. Added the check for bill_to_flag.
8341 IF p_cust_site_use_rec.bill_to_site_use_id IS NOT NULL AND
8342 p_cust_site_use_rec.bill_to_site_use_id <> FND_API.G_MISS_NUM
8343 THEN
8344 IF l_site_use_code = 'SHIP_TO' THEN
8345 BEGIN
8346 SELECT 'Y' INTO l_dummy
8347 FROM HZ_CUST_ACCT_SITES_ALL site,
8348 HZ_CUST_SITE_USES_ALL su
8349 WHERE su.SITE_USE_ID = p_cust_site_use_rec.bill_to_site_use_id
8350 AND su.SITE_USE_CODE = 'BILL_TO'
8351 AND su.STATUS = 'A'
8352 AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
8353 AND site.STATUS = 'A'
8354 AND site.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8355 AND su.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8356 AND site.CUST_ACCOUNT_ID IN (
8357 SELECT l_cust_account_id
8358 FROM DUAL
8359 UNION
8360 SELECT CUST_ACCOUNT_ID
8361 FROM HZ_CUST_ACCT_RELATE_ALL
8362 WHERE RELATED_CUST_ACCOUNT_ID = l_cust_account_id
8363 AND BILL_TO_FLAG = 'Y' );
8364 EXCEPTION
8365 WHEN NO_DATA_FOUND THEN
8366 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BILL_TO_SITE_USE_F' );
8367 FND_MSG_PUB.ADD;
8368 x_return_status := FND_API.G_RET_STS_ERROR;
8369 END;
8370
8371 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8372 hz_utility_v2pub.debug(p_message=>'For SHIP_TO site use, bill_to_site_use_id should be a valid BILL_TO site use of this account and its related account. ' ||
8373 'x_return_status = ' || x_return_status,
8374 p_prefix =>l_debug_prefix,
8375 p_msg_level=>fnd_log.level_statement);
8376 END IF;
8377
8378 ELSE
8379 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BILL_TO_SITE_USE_S' );
8380 FND_MSG_PUB.ADD;
8381 x_return_status := FND_API.G_RET_STS_ERROR;
8382 END IF;
8383 END IF;
8384
8385
8386 -- Bug 2836888.
8387 -- For BILL_TO site use, it should not be allowed
8388 -- to be inactivated if there exists active SHIP_TO uses
8389 -- with bill_to_site_id as the site_use_id of this 'BILL_TO'
8390 -- site use.
8391 IF p_create_update_flag = 'U'
8392 and p_cust_site_use_rec.status = 'I'
8393 and l_status = 'A'
8394 and nvl(p_cust_site_use_rec.site_use_code,l_site_use_code)='BILL_TO'
8395 THEN
8396 BEGIN
8397 SELECT 'Y'
8398 INTO l_exist_flag
8399 FROM hz_cust_site_uses_all hsu
8400 WHERE hsu.site_use_code = 'SHIP_TO'
8401 AND hsu.status = 'A'
8402 AND hsu.bill_to_site_use_id = p_cust_site_use_rec.site_use_id
8403 AND rownum = 1;
8404
8405 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_SHIP_TO_SITES_EXIST' );
8406 FND_MSG_PUB.ADD;
8407 x_return_status := FND_API.G_RET_STS_ERROR;
8408
8409 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8410 hz_utility_v2pub.debug(p_message=>'For BILL_TO site use, inactivation not allowed if a SHIP_TO address uses this BILL_TO address ' ||
8411 'x_return_status = ' || x_return_status,
8412 p_prefix =>l_debug_prefix,
8413 p_msg_level=>fnd_log.level_statement);
8414 END IF;
8415
8416 EXCEPTION
8417 WHEN NO_DATA_FOUND THEN NULL;
8418 END;
8419 END IF;
8420
8421 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8422 hz_utility_v2pub.debug(p_message=>'(+) after validate bill_to_site_use_id ... ' ||
8423 'x_return_status = ' || x_return_status,
8424 p_prefix =>l_debug_prefix,
8425 p_msg_level=>fnd_log.level_statement);
8426 END IF;
8427
8428
8429
8430
8431 ----------------------------------------------
8432 -- validate orig_system_reference
8433 ----------------------------------------------
8434 /****Logical APIs - validation not required****/
8435 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8436 IF (p_cust_site_use_rec.orig_system is not null and p_cust_site_use_rec.orig_system <>fnd_api.g_miss_char)
8437 and (p_cust_site_use_rec.orig_system_reference is not null and p_cust_site_use_rec.orig_system_reference <>fnd_api.g_miss_char)
8438 and p_create_update_flag = 'U'
8439 THEN
8440
8441 hz_orig_system_ref_pub.get_owner_table_id
8442 (p_orig_system => p_cust_site_use_rec.orig_system,
8443 p_orig_system_reference => p_cust_site_use_rec.orig_system_reference,
8444 p_owner_table_name =>'HZ_CUST_SITE_USES_ALL',
8445 x_owner_table_id => l_mosr_owner_table_id,
8446 x_return_status => l_temp_return_status);
8447
8448 IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
8449 l_mosr_owner_table_id= nvl(p_cust_site_use_rec.site_use_id,l_mosr_owner_table_id))
8450 THEN
8451 l_validate_flag := 'N';
8452 END IF;
8453
8454 -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
8455 -- x_return_status. Set x_return_status to error, ONLY if there is error.
8456 -- In case of success, leave it to carry over previous value as before this call.
8457 -- Fix for Bug 5498116 (29-AUG-2006)
8458 IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
8459 x_return_status := l_temp_return_status;
8460 END IF;
8461
8462 end if;
8463 -- orig_system_reference is non-updateable field
8464 IF p_create_update_flag = 'U' AND
8465 p_cust_site_use_rec.orig_system_reference IS NOT NULL
8466 and l_validate_flag = 'Y'
8467 THEN
8468 validate_nonupdateable (
8469 p_column => 'orig_system_reference',
8470 p_column_value => p_cust_site_use_rec.orig_system_reference,
8471 p_old_column_value => l_orig_system_reference,
8472 x_return_status => x_return_status );
8473
8474 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8475 hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
8476 'x_return_status = ' || x_return_status,
8477 p_prefix =>l_debug_prefix,
8478 p_msg_level=>fnd_log.level_statement);
8479 END IF;
8480
8481 END IF;
8482 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8483 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
8484 'x_return_status = ' || x_return_status,
8485 p_prefix =>l_debug_prefix,
8486 p_msg_level=>fnd_log.level_statement);
8487 END IF;
8488 END IF;
8489
8490 ----------------------------------------------
8491 -- validate freight_term
8492 ----------------------------------------------
8493
8494 -- freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups
8495 IF p_cust_site_use_rec.freight_term IS NOT NULL AND
8496 p_cust_site_use_rec.freight_term <> FND_API.G_MISS_CHAR AND
8497 ( p_create_update_flag = 'C' OR
8498 ( p_create_update_flag = 'U' AND
8499 p_cust_site_use_rec.freight_term <> NVL( l_freight_term, FND_API.G_MISS_CHAR ) ) )
8500 THEN
8501 validate_lookup (
8502 p_column => 'freight_term',
8503 p_lookup_table => 'SO_LOOKUPS',
8504 p_lookup_type => 'FREIGHT_TERMS',
8505 p_column_value => p_cust_site_use_rec.freight_term,
8506 x_return_status => x_return_status );
8507
8508 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8509 hz_utility_v2pub.debug(p_message=>'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
8510 'x_return_status = ' || x_return_status,
8511 p_prefix =>l_debug_prefix,
8512 p_msg_level=>fnd_log.level_statement);
8513 END IF;
8514 END IF;
8515
8516 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8517 hz_utility_v2pub.debug(p_message=>'(+) after validate freight_term ... ' ||
8518 'x_return_status = ' || x_return_status,
8519 p_prefix =>l_debug_prefix,
8520 p_msg_level=>fnd_log.level_statement);
8521 END IF;
8522
8523 ----------------------------------------------
8524 -- validate primary_flag
8525 ----------------------------------------------
8526
8527 -- primary_flag cannot be set to null during update
8528 IF p_create_update_flag = 'U' AND
8529 p_cust_site_use_rec.primary_flag IS NOT NULL
8530 THEN
8531 validate_cannot_update_to_null (
8532 p_column => 'primary_flag',
8533 p_column_value => p_cust_site_use_rec.primary_flag,
8534 x_return_status => x_return_status );
8535
8536 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8537 hz_utility_v2pub.debug(p_message=>'primary_flag cannot be updated to NULL. ' ||
8538 'x_return_status = ' || x_return_status,
8539 p_prefix =>l_debug_prefix,
8540 p_msg_level=>fnd_log.level_statement);
8541 END IF;
8542
8543 END IF;
8544
8545 /****Logical APIs - validation not required****/
8546 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8547 -- primary_flag is lookup code in lookup type YES/NO
8548 IF p_cust_site_use_rec.primary_flag IS NOT NULL AND
8549 p_cust_site_use_rec.primary_flag <> FND_API.G_MISS_CHAR
8550 THEN
8551 validate_lookup (
8552 p_column => 'primary_flag',
8553 p_lookup_type => 'YES/NO',
8554 p_column_value => p_cust_site_use_rec.primary_flag,
8555 x_return_status => x_return_status );
8556
8557 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8558 hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
8559 'x_return_status = ' || x_return_status,
8560 p_prefix =>l_debug_prefix,
8561 p_msg_level=>fnd_log.level_statement);
8562 END IF;
8563
8564 END IF;
8565 END IF;
8566
8567 -- only one primary is allowed for one site use type per account
8568 -- Bug Fix : 2260832
8569 -- Bug 2643624 Removing the below validation so as to enable the setting
8570 -- of another site use as primary.
8571 /*
8572
8573 IF p_cust_site_use_rec.primary_flag = 'Y'
8574 THEN
8575 BEGIN
8576 SELECT 'Y' INTO l_dummy
8577 FROM HZ_CUST_ACCT_SITES site,
8578 HZ_CUST_SITE_USES su
8579 WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
8580 AND su.CUST_ACCT_SITE_ID = site.CUST_ACCT_SITE_ID
8581 AND su.SITE_USE_CODE = l_site_use_code
8582 AND su.PRIMARY_FLAG = 'Y'
8583 --Bug 2792589 AND su.STATUS = 'Y'
8584 AND su.STATUS = 'A'
8585 AND ( p_create_update_flag = 'C' OR
8586 (p_create_update_flag = 'U' AND su.ROWID <> p_rowid ))
8587 AND ROWNUM = 1;
8588
8589 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_PRIMARY_SU' );
8590 FND_MESSAGE.SET_TOKEN( 'SITE_CODE', l_site_use_code );
8591 FND_MSG_PUB.ADD;
8592 x_return_status := FND_API.G_RET_STS_ERROR;
8593
8594 EXCEPTION
8595 WHEN NO_DATA_FOUND THEN
8596 NULL;
8597 END;
8598
8599 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8600 hz_utility_v2pub.debug(p_message=>'only one primary is allowed for one site use type per account. ' ||
8601 'x_return_status = ' || x_return_status,
8602 p_prefix =>l_debug_prefix,
8603 p_msg_level=>fnd_log.level_statement);
8604 END IF;
8605
8606 END IF;
8607 */
8608
8609 -- check to ensure that an inactive site use is never marked
8610 -- as primary.
8611 IF p_create_update_flag = 'C' THEN
8612 IF p_cust_site_use_rec.primary_flag IS NULL OR
8613 p_cust_site_use_rec.primary_flag = fnd_api.g_miss_char
8614 THEN
8615 l_primary_flag := 'N';
8616 ELSE
8617 l_primary_flag := p_cust_site_use_rec.primary_flag;
8618 END IF;
8619
8620 IF p_cust_site_use_rec.status IS NULL OR
8621 p_cust_site_use_rec.status = fnd_api.g_miss_char
8622 THEN
8623 l_status := 'A';
8624 ELSE
8625 l_status := p_cust_site_use_rec.status;
8626 END IF;
8627
8628 IF l_primary_flag = 'Y' AND l_status <> 'A' THEN
8629 l_error := TRUE;
8630 END IF;
8631 ELSE
8632 IF p_cust_site_use_rec.primary_flag = 'Y' AND
8633 ((p_cust_site_use_rec.status IS NOT NULL AND
8634 p_cust_site_use_rec.status <> 'A') OR
8635 (p_cust_site_use_rec.status IS NULL AND
8636 l_status <> 'A'))
8637 THEN
8638 l_error := TRUE;
8639 END IF;
8640 END IF;
8641
8642 IF l_error THEN
8643 fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8644 fnd_message.set_token('ENTITY', 'Site Use');
8645 -- fnd_message.set_token('COLUMN1', 'primary_flag');
8646 -- fnd_message.set_token('COLUMN2', 'status');
8647 fnd_msg_pub.add;
8648 x_return_status := FND_API.G_RET_STS_ERROR;
8649 -- reset l_error for later use.
8650 l_error := FALSE;
8651 END IF;
8652
8653 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8654 hz_utility_v2pub.debug(p_message=>'an inactive site use is never marked as primary. ' ||
8655 'x_return_status = ' || x_return_status,
8656 p_prefix =>l_debug_prefix,
8657 p_msg_level=>fnd_log.level_statement);
8658 END IF;
8659
8660
8661 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8662 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
8663 'x_return_status = ' || x_return_status,
8664 p_prefix =>l_debug_prefix,
8665 p_msg_level=>fnd_log.level_statement);
8666 END IF;
8667
8668
8669 --bug fix 2311760
8670 /***************************
8671 ----------------------------------------------
8672 -- validate ship_partial
8673 ----------------------------------------------
8674
8675 -- ship_partial is lookup code in lookup type YES/NO
8676 IF p_cust_site_use_rec.ship_partial IS NOT NULL AND
8677 p_cust_site_use_rec.ship_partial <> FND_API.G_MISS_CHAR
8678 THEN
8679 validate_lookup (
8680 p_column => 'ship_partial',
8681 p_lookup_type => 'YES/NO',
8682 p_column_value => p_cust_site_use_rec.ship_partial,
8683 x_return_status => x_return_status );
8684
8685 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8686 hz_utility_v2pub.debug(p_message=>'ship_partial is lookup code in lookup type YES/NO. ' ||
8687 'x_return_status = ' || x_return_status,
8688 p_prefix =>l_debug_prefix,
8689 p_msg_level=>fnd_log.level_statement);
8690 END IF;
8691
8692 END IF;
8693
8694 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8695 hz_utility_v2pub.debug(p_message=>'(+) after validate ship_partial ... ' ||
8696 'x_return_status = ' || x_return_status,
8697 p_prefix =>l_debug_prefix,
8698 p_msg_level=>fnd_log.level_statement);
8699 END IF;
8700
8701 ***********************/
8702 ----------------------------------------------
8703 -- validate ship_sets_include_lines_flag
8704 ----------------------------------------------
8705 /****Logical APIs - validation not required****/
8706 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8707 -- ship_sets_include_lines_flag is lookup code in lookup type YES/NO
8708 IF p_cust_site_use_rec.ship_sets_include_lines_flag IS NOT NULL AND
8709 p_cust_site_use_rec.ship_sets_include_lines_flag <> FND_API.G_MISS_CHAR
8710 THEN
8711 validate_lookup (
8712 p_column => 'ship_sets_include_lines_flag',
8713 p_lookup_type => 'YES/NO',
8714 p_column_value => p_cust_site_use_rec.ship_sets_include_lines_flag,
8715 x_return_status => x_return_status );
8716
8717 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8718 hz_utility_v2pub.debug(p_message=>'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
8719 'x_return_status = ' || x_return_status,
8720 p_prefix =>l_debug_prefix,
8721 p_msg_level=>fnd_log.level_statement);
8722 END IF;
8723
8724 END IF;
8725 END IF;
8726
8727 --If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag
8728 --is always set to N.
8729 IF (p_create_update_flag = 'C' or
8730 (p_create_update_flag ='U' and
8731 p_cust_site_use_rec.ship_sets_include_lines_flag <> NVL(l_ship_sets_inc_lines_f,FND_API.G_MISS_CHAR)))
8732 THEN
8733 IF p_cust_site_use_rec.ship_sets_include_lines_flag = 'Y'
8734 THEN
8735 BEGIN
8736 SELECT decode(p_cust_site_use_rec.ship_sets_include_lines_flag,p_cust_site_use_rec.arrivalsets_include_lines_flag,
8737 'N',l_arrivalsets_inc_lines_f,
8738 decode(p_cust_site_use_rec.arrivalsets_include_lines_flag,l_ship_sets_inc_lines_f,
8739 'Y','N'),'Y')
8740 INTO l_dummy
8741 FROM DUAL;
8742 IF l_dummy <> 'Y'
8743 THEN
8744 FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
8745 FND_MESSAGE.SET_TOKEN('COLUMN1','ship_sets_include_lines_flag');
8746 FND_MESSAGE.SET_TOKEN('VALUE1','Y');
8747 FND_MESSAGE.SET_TOKEN('COLUMN2','arrivalsets_include_lines_flag');
8748 FND_MESSAGE.SET_TOKEN('VALUE2','N');
8749 FND_MSG_PUB.ADD;
8750 x_return_status := FND_API.G_RET_STS_ERROR;
8751 END IF;
8752 END ;
8753 END IF;
8754 END IF;
8755
8756 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8757 hz_utility_v2pub.debug(p_message=>'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
8758 'x_return_status = ' || x_return_status,
8759 p_prefix =>l_debug_prefix,
8760 p_msg_level=>fnd_log.level_statement);
8761 END IF;
8762
8763 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8764 hz_utility_v2pub.debug(p_message=>'(+) after validate ship_sets_include_lines_flag ... ' ||
8765 'x_return_status = ' || x_return_status,
8766 p_prefix =>l_debug_prefix,
8767 p_msg_level=>fnd_log.level_statement);
8768 END IF;
8769
8770 ----------------------------------------------
8771 -- validate arrivalsets_include_lines_flag
8772 ----------------------------------------------
8773 /****Logical APIs - validation not required****/
8774 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8775 -- arrivalsets_include_lines_flag is lookup code in lookup type YES/NO
8776 IF p_cust_site_use_rec.arrivalsets_include_lines_flag IS NOT NULL AND
8777 p_cust_site_use_rec.arrivalsets_include_lines_flag <> FND_API.G_MISS_CHAR
8778 THEN
8779 validate_lookup (
8780 p_column => 'arrivalsets_include_lines_flag',
8781 p_lookup_type => 'YES/NO',
8782 p_column_value => p_cust_site_use_rec.arrivalsets_include_lines_flag,
8783 x_return_status => x_return_status );
8784
8785 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8786 hz_utility_v2pub.debug(p_message=>'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
8787 'x_return_status = ' || x_return_status,
8788 p_prefix =>l_debug_prefix,
8789 p_msg_level=>fnd_log.level_statement);
8790 END IF;
8791
8792 END IF;
8793 END IF;
8794
8795 --If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag
8796 --is always set to N.
8797
8798 IF (p_create_update_flag ='C' or
8799 (p_create_update_flag ='U' and
8800 p_cust_site_use_rec.arrivalsets_include_lines_flag <> NVL(l_arrivalsets_inc_lines_f,FND_API.G_MISS_CHAR)))
8801 THEN
8802 IF p_cust_site_use_rec.arrivalsets_include_lines_flag = 'Y'
8803 THEN
8804 BEGIN
8805 SELECT decode(p_cust_site_use_rec.arrivalsets_include_lines_flag,p_cust_site_use_rec.ship_sets_include_lines_flag,
8806 'N',l_ship_sets_inc_lines_f,
8807 decode(p_cust_site_use_rec.ship_sets_include_lines_flag,l_arrivalsets_inc_lines_f,
8808 'Y','N'),'Y')
8809 INTO l_dummy
8810 FROM DUAL;
8811 IF l_dummy <> 'Y'
8812 THEN
8813 FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
8814 FND_MESSAGE.SET_TOKEN('COLUMN1','arrivalsets_include_lines_flag');
8815 FND_MESSAGE.SET_TOKEN('VALUE1','Y');
8816 FND_MESSAGE.SET_TOKEN('COLUMN2','ship_sets_include_lines_flag');
8817 FND_MESSAGE.SET_TOKEN('VALUE2','N');
8818 FND_MSG_PUB.ADD;
8819 x_return_status := FND_API.G_RET_STS_ERROR;
8820 END IF;
8821 END ;
8822 END IF;
8823 END IF;
8824
8825 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8826 hz_utility_v2pub.debug(p_message=>'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always setto N. ' ||
8827 'x_return_status = ' || x_return_status,
8828 p_prefix =>l_debug_prefix,
8829 p_msg_level=>fnd_log.level_statement);
8830 END IF;
8831
8832 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8833 hz_utility_v2pub.debug(p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
8834 'x_return_status = ' || x_return_status,
8835 p_prefix =>l_debug_prefix,
8836 p_msg_level=>fnd_log.level_statement);
8837 END IF;
8838
8839 ------------------------------------------
8840 -- validate tax_code
8841 ------------------------------------------
8842 --Tax_code should be a valid value defined in zx_output_classifications_v
8843
8844 IF p_cust_site_use_rec.tax_code is NOT NULL AND
8845 p_cust_site_use_rec.tax_code <> FND_API.G_MISS_CHAR
8846 AND ( p_create_update_flag = 'C' OR
8847 ( p_create_update_flag = 'U' AND
8848 p_cust_site_use_rec.tax_code <> NVL( l_tax_code, FND_API.G_MISS_CHAR ) ) )
8849 THEN
8850 check_tax_code(
8851 p_column => 'tax_code',
8852 p_column_value => p_cust_site_use_rec.tax_code,
8853 -- Bug 4713150
8854 -- p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
8855 p_called_from => 'validate_cust_site_use',
8856 x_return_status => x_return_status );
8857
8858 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8859 hz_utility_v2pub.debug(p_message=>'Tax_code should be a valid value defined in view zx_output_classifications_v. '||
8860 'x_return_status = ' || x_return_status,
8861 p_prefix =>l_debug_prefix,
8862 p_msg_level=>fnd_log.level_statement);
8863 END IF;
8864
8865 END IF;
8866
8867 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8868 hz_utility_v2pub.debug(p_message=>'(+) after validate tax_code..' ||
8869 'x_return_status = ' || x_return_status,
8870 p_prefix =>l_debug_prefix,
8871 p_msg_level=>fnd_log.level_statement);
8872 END IF;
8873 ------------------------------------
8874 --validate payment_term_id
8875 ------------------------------------
8876 --Payment_term_id should be a valid value defined in RA_TERMS
8877
8878 IF p_cust_site_use_rec.payment_term_id is NOT NULL AND
8879 p_cust_site_use_rec.payment_term_id <> FND_API.G_MISS_NUM
8880 AND ( p_create_update_flag = 'C' OR
8881 ( p_create_update_flag = 'U' AND
8882 p_cust_site_use_rec.payment_term_id <> NVL( l_payment_term_id, FND_API.G_MISS_NUM ) ) )
8883 THEN
8884 check_payterm_id_fk(
8885 p_column => 'payment_term_id',
8886 p_column_value => p_cust_site_use_rec.payment_term_id,
8887 x_return_status => x_return_status );
8888
8889 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8890 hz_utility_v2pub.debug(p_message=>'Payment_term_id should be a valid value defined in RA_TERMS. '||
8891 'x_return_status = ' || x_return_status,
8892 p_prefix =>l_debug_prefix,
8893 p_msg_level=>fnd_log.level_statement);
8894 END IF;
8895
8896 END IF;
8897
8898 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8899 hz_utility_v2pub.debug(p_message=>'(+) after validate payment_term_id..' ||
8900 'x_return_status = ' || x_return_status,
8901 p_prefix =>l_debug_prefix,
8902 p_msg_level=>fnd_log.level_statement);
8903 END IF;
8904 ---------------------------------------------
8905 --validate demand_class_code
8906 ---------------------------------------------
8907 --Demand_class_code is lookup_code in lookup_type DEMAND_CLASS in fnd_common_lookups
8908
8909 IF p_cust_site_use_rec.demand_class_code is NOT NULL AND
8910 p_cust_site_use_rec.demand_class_code <> FND_API.G_MISS_CHAR
8911 AND ( p_create_update_flag = 'C' OR
8912 ( p_create_update_flag = 'U' AND
8913 p_cust_site_use_rec.demand_class_code <> NVL(l_demand_class_code,FND_API.G_MISS_CHAR) ) )
8914 THEN
8915 validate_lookup(
8916 p_column =>'demand_class_code',
8917 p_lookup_table =>'FND_COMMON_LOOKUPS',
8918 p_lookup_type =>'DEMAND_CLASS',
8919 p_column_value =>p_cust_site_use_rec.demand_class_code,
8920 x_return_status =>x_return_status );
8921 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8922 hz_utility_v2pub.debug(p_message=>'Demand_class_code is lookup_code in lookup_type DEMAND_CLASS in fnd_common_lookups. '||
8923 'x_return_status = ' || x_return_status,
8924 p_prefix =>l_debug_prefix,
8925 p_msg_level=>fnd_log.level_statement);
8926 END IF;
8927 END IF;
8928
8929 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8930 hz_utility_v2pub.debug(p_message=>'(+) after validate demand_class_code..' ||
8931 'x_return_status = ' || x_return_status,
8932 p_prefix =>l_debug_prefix,
8933 p_msg_level=>fnd_log.level_statement);
8934 END IF;
8935
8936 -----------------------------------------------
8937 --validate primary_salesrep_id
8938 -----------------------------------------------
8939 --Primary_salesrep_id should be a valid value defined in RA_SALESREPS
8940
8941 IF p_cust_site_use_rec.primary_salesrep_id is NOT NULL AND
8942 p_cust_site_use_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
8943 AND ( p_create_update_flag = 'C' OR
8944 ( p_create_update_flag = 'U' AND
8945 p_cust_site_use_rec.primary_salesrep_id <> NVL(l_primary_salesrep_id,FND_API.G_MISS_NUM) ) )
8946 THEN
8947 check_prim_salesrep(
8948 p_column => 'primary_salesrep_id',
8949 p_column_value => p_cust_site_use_rec.primary_salesrep_id,
8950 p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
8951 x_return_status => x_return_status );
8952
8953 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8954 hz_utility_v2pub.debug(p_message=>'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
8955 'x_return_status = ' || x_return_status,
8956 p_prefix =>l_debug_prefix,
8957 p_msg_level=>fnd_log.level_statement);
8958 END IF;
8959
8960 END IF;
8961 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8962 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_salesrep_id..' ||
8963 'x_return_status = ' || x_return_status,
8964 p_prefix =>l_debug_prefix,
8965 p_msg_level=>fnd_log.level_statement);
8966 END IF;
8967
8968 ----------------------------------------------------
8969 --validate finchrg_receivables_trx_id
8970 ----------------------------------------------------
8971 IF p_cust_site_use_rec.finchrg_receivables_trx_id is NOT NULL AND
8972 p_cust_site_use_rec.finchrg_receivables_trx_id <> FND_API.G_MISS_NUM
8973 AND ( p_create_update_flag = 'C' OR
8974 ( p_create_update_flag = 'U' AND
8975 p_cust_site_use_rec.finchrg_receivables_trx_id <> NVL(l_finchrg_receivables_trx_id,FND_API.G_MISS_NUM) ) )
8976 THEN
8977 check_finchrg_trx_fk(
8978 p_column => 'finchrg_receivables_trx_id',
8979 p_column_value => p_cust_site_use_rec.finchrg_receivables_trx_id,
8980 p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
8981 x_return_status => x_return_status );
8982
8983 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8984 hz_utility_v2pub.debug(p_message=>'finchrg_receivables_trx_id should be a valid value defined in AR_RECEIVABLES_TRX. '||
8985 'x_return_status = ' || x_return_status,
8986 p_prefix =>l_debug_prefix,
8987 p_msg_level=>fnd_log.level_statement);
8988 END IF;
8989
8990
8991 END IF;
8992
8993 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8994 hz_utility_v2pub.debug(p_message=>'(+) after validate finchrg_receivables_trx_id..' ||
8995 'x_return_status = ' || x_return_status,
8996 p_prefix =>l_debug_prefix,
8997 p_msg_level=>fnd_log.level_statement);
8998 END IF;
8999
9000
9001
9002 -------------------------------------------
9003 --validate order_Type_id
9004 -------------------------------------------
9005 --order_type_id should be a valid value defined in OE_ORDER_TYPES_V
9006
9007 IF p_cust_site_use_rec.order_type_id is NOT NULL AND
9008 p_cust_site_use_rec.order_type_id <> FND_API.G_MISS_NUM
9009 AND ( p_create_update_flag = 'C' OR
9010 ( p_create_update_flag = 'U' AND
9011 p_cust_site_use_rec.order_type_id <> NVL(l_order_type_id,FND_API.G_MISS_NUM) ) )
9012 THEN
9013 check_ord_type(
9014 p_column => 'order_type_id',
9015 p_column_value => p_cust_site_use_rec.order_type_id,
9016 p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
9017 x_return_status => x_return_status );
9018
9019 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9020 hz_utility_v2pub.debug(p_message=>'order_type_id should be a valid value defined in OE_ORDER_TYPES_V. '||
9021 'x_return_status = ' || x_return_status,
9022 p_prefix =>l_debug_prefix,
9023 p_msg_level=>fnd_log.level_statement);
9024 END IF;
9025
9026 END IF;
9027
9028 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9029 hz_utility_v2pub.debug(p_message=>'(+) after validate order_type_id..' ||
9030 'x_return_status = ' || x_return_status,
9031 p_prefix =>l_debug_prefix,
9032 p_msg_level=>fnd_log.level_statement);
9033 END IF;
9034
9035
9036 ----------------------------------------------------------
9037 --validate price_list_id
9038 ----------------------------------------------------------
9039 --price_list_id should be a valid value defined in SO_PRICE_LISTS
9040
9041 IF p_cust_site_use_rec.price_list_id is NOT NULL AND
9042 p_cust_site_use_rec.price_list_id <> FND_API.G_MISS_NUM
9043 AND ( p_create_update_flag = 'C' OR
9044 ( p_create_update_flag = 'U' AND
9045 p_cust_site_use_rec.price_list_id <> NVL(l_price_list_id,FND_API.G_MISS_NUM) ) )
9046 THEN
9047 check_price_list_fk(
9048 p_column => 'price_list_id',
9049 p_column_value => p_cust_site_use_rec.price_list_id,
9050 x_return_status => x_return_status );
9051
9052 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9053 hz_utility_v2pub.debug(p_message=>'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
9054 'x_return_status = ' || x_return_status,
9055 p_prefix =>l_debug_prefix,
9056 p_msg_level=>fnd_log.level_statement);
9057 END IF;
9058
9059 END IF;
9060
9061 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9062 hz_utility_v2pub.debug(p_message=>'(+) after validate price_list_id..' ||
9063 'x_return_status = ' || x_return_status,
9064 p_prefix =>l_debug_prefix,
9065 p_msg_level=>fnd_log.level_statement);
9066 END IF;
9067
9068
9069 ----------------------------------------------
9070 --validate item_cross_ref_pref
9071 ----------------------------------------------
9072 --item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should have value 'INT' or 'CUST'
9073
9074 IF p_cust_site_use_rec.item_cross_ref_pref IS NOT NULL AND
9075 p_cust_site_use_rec.item_cross_ref_pref <> FND_API.G_MISS_CHAR
9076 AND ( p_create_update_flag = 'C' OR
9077 ( p_create_update_flag = 'U' AND
9078 p_cust_site_use_rec.item_cross_ref_pref <> NVL(l_item_cross_ref_pref,FND_API.G_MISS_CHAR) ) )
9079 THEN
9080 IF p_cust_site_use_rec.item_cross_ref_pref NOT IN('INT','CUST')
9081 THEN
9082 check_item_cross_ref(
9083 p_column => 'price_list_id',
9084 p_column_value => p_cust_site_use_rec.item_cross_ref_pref,
9085 x_return_status => x_return_status );
9086
9087 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9088 hz_utility_v2pub.debug(p_message=>'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . ' ||
9089 'x_return_status = ' || x_return_status,
9090 p_prefix =>l_debug_prefix,
9091 p_msg_level=>fnd_log.level_statement);
9092 END IF;
9093
9094 END IF;
9095 END IF;
9096
9097 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9098 hz_utility_v2pub.debug(p_message=>'(+) after validate item_cross_ref_pref..' ||
9099 'x_return_status = ' || x_return_status,
9100 p_prefix =>l_debug_prefix,
9101 p_msg_level=>fnd_log.level_statement);
9102 END IF;
9103
9104 --------------------------------------------------
9105 --validate warehouse_id
9106 --------------------------------------------------
9107 --warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS
9108
9109 IF p_cust_site_use_rec.warehouse_id is NOT NULL AND
9110 p_cust_site_use_rec.warehouse_id <> FND_API.G_MISS_NUM
9111 AND ( p_create_update_flag = 'C' OR
9112 ( p_create_update_flag = 'U' AND
9113 p_cust_site_use_rec.warehouse_id <> NVL(l_warehouse_id,FND_API.G_MISS_NUM) ) )
9114 THEN
9115 check_warehouse(
9116 p_column => 'warehouse_id',
9117 p_column_value => p_cust_site_use_rec.warehouse_id,
9118 x_return_status => x_return_status );
9119
9120 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9121 hz_utility_v2pub.debug(p_message=>'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
9122 'x_return_status = ' || x_return_status,
9123 p_prefix =>l_debug_prefix,
9124 p_msg_level=>fnd_log.level_statement);
9125 END IF;
9126
9127 END IF;
9128
9129 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9130 hz_utility_v2pub.debug(p_message=>'(+) after validate warehouse_id..' ||
9131 'x_return_status = ' || x_return_status,
9132 p_prefix =>l_debug_prefix,
9133 p_msg_level=>fnd_log.level_statement);
9134 END IF;
9135
9136
9137
9138 ----------------------------------------------
9139 --validate fob_point
9140 ----------------------------------------------
9141 --fob_point is lookup_code in lookup type FOB
9142
9143 IF p_cust_site_use_rec.fob_point is NOT NULL AND
9144 p_cust_site_use_rec.fob_point <> FND_API.G_MISS_CHAR
9145 AND ( p_create_update_flag = 'C' OR
9146 ( p_create_update_flag = 'U' AND
9147 p_cust_site_use_rec.fob_point <> NVL(l_fob_point,FND_API.G_MISS_CHAR) ) )
9148 THEN
9149 validate_lookup(
9150 p_column =>'fob_point',
9151 p_lookup_type =>'FOB',
9152 p_column_value =>p_cust_site_use_rec.fob_point,
9153 x_return_status =>x_return_status );
9154
9155 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9156 hz_utility_v2pub.debug(p_message=>'fob_point is lookup_code in lookup type FOB. '||
9157 'x_return_status = ' || x_return_status,
9158 p_prefix =>l_debug_prefix,
9159 p_msg_level=>fnd_log.level_statement);
9160 END IF;
9161
9162 END IF;
9163
9164 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9165 hz_utility_v2pub.debug(p_message=>'(+) after validate fob_point..' ||
9166 'x_return_status = ' || x_return_status,
9167 p_prefix =>l_debug_prefix,
9168 p_msg_level=>fnd_log.level_statement);
9169 END IF;
9170
9171
9172
9173 ----------------------------------------------------------
9174 --validate date_type_preference
9175 ----------------------------------------------------------
9176 --date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups
9177
9178 IF p_cust_site_use_rec.date_type_preference IS NOT NULL AND
9179 p_cust_site_use_rec.date_type_preference <> FND_API.G_MISS_CHAR
9180 AND ( p_create_update_flag = 'C' OR
9181 ( p_create_update_flag = 'U' AND
9182 p_cust_site_use_rec.date_type_preference <> NVL(l_date_type_preference,FND_API.G_MISS_CHAR) ) )
9183 THEN
9184 validate_lookup(
9185 p_column =>'date_type_preference',
9186 p_lookup_table =>'OE_LOOKUPS',
9187 p_lookup_type =>'REQUEST_DATE_TYPE',
9188 p_column_value =>p_cust_site_use_rec.date_type_preference,
9189 x_return_status =>x_return_status );
9190
9191 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9192 hz_utility_v2pub.debug(p_message=>'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
9193 'x_return_status = ' || x_return_status,
9194 p_prefix =>l_debug_prefix,
9195 p_msg_level=>fnd_log.level_statement);
9196 END IF;
9197
9198 END IF;
9199
9200 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9201 hz_utility_v2pub.debug(p_message=>'(+) after validate date_type_preference..' ||
9202 'x_return_status = ' || x_return_status,
9203 p_prefix =>l_debug_prefix,
9204 p_msg_level=>fnd_log.level_statement);
9205 END IF;
9206
9207 --Bug fix 2311760
9208 /***************************
9209 ----------------------------------------------
9210 -- validate ship_partial
9211 ----------------------------------------------
9212
9213 -- ship_partial is lookup code in lookup type YES/NO
9214 IF p_cust_site_use_rec.ship_partial IS NOT NULL AND
9215 p_cust_site_use_rec.ship_partial <> FND_API.G_MISS_CHAR
9216 AND ( p_create_update_flag = 'C' OR
9217 ( p_create_update_flag = 'U' AND
9218 p_cust_site_use_rec.ship_partial <> NVL(l_ship_partial,FND_API.G_MISS_CHAR) ) )
9219 THEN
9220 validate_lookup (
9221 p_column => 'ship_partial',
9222 p_lookup_type => 'YES/NO',
9223 p_column_value => p_cust_site_use_rec.ship_partial,
9224 x_return_status => x_return_status );
9225
9226 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9227 hz_utility_v2pub.debug(p_message=>'ship_partial is lookup code in lookup type YES/NO. ' ||
9228 'x_return_status = ' || x_return_status,
9229 p_prefix =>l_debug_prefix,
9230 p_msg_level=>fnd_log.level_statement);
9231 END IF;
9232
9233 END IF;
9234
9235 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9236 hz_utility_v2pub.debug(p_message=>'(+) after validate ship_partial ... ' ||
9237 'x_return_status = ' || x_return_status,
9238 p_prefix =>l_debug_prefix,
9239 p_msg_level=>fnd_log.level_statement);
9240 END IF;
9241
9242 ******************************/
9243 ----------------------------------------------
9244 -- validate sched_date_push_flag
9245 ----------------------------------------------
9246 /****Logical APIs - validation not required****/
9247 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9248 -- sched_date_push_flag is lookup code in lookup type YES/NO
9249 IF p_cust_site_use_rec.sched_date_push_flag IS NOT NULL AND
9250 p_cust_site_use_rec.sched_date_push_flag <> FND_API.G_MISS_CHAR
9251 THEN
9252 validate_lookup (
9253 p_column => 'sched_date_push_flag',
9254 p_lookup_type => 'YES/NO',
9255 p_column_value => p_cust_site_use_rec.sched_date_push_flag,
9256 x_return_status => x_return_status );
9257
9258 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9259 hz_utility_v2pub.debug(p_message=>'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
9260 'x_return_status = ' || x_return_status,
9261 p_prefix =>l_debug_prefix,
9262 p_msg_level=>fnd_log.level_statement);
9263 END IF;
9264
9265 END IF;
9266
9267 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9268 hz_utility_v2pub.debug(p_message=>'(+) after validate sched_date_push_flag ... ' ||
9269 'x_return_status = ' || x_return_status,
9270 p_prefix =>l_debug_prefix,
9271 p_msg_level=>fnd_log.level_statement);
9272 END IF;
9273 END IF;
9274
9275 ----------------------------------------------
9276 -- validate gsa_indicator
9277 ----------------------------------------------
9278 /****Logical APIs - validation not required****/
9279 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9280 -- gsa_indicator is lookup code in lookup type YES/NO
9281 IF p_cust_site_use_rec.gsa_indicator IS NOT NULL AND
9282 p_cust_site_use_rec.gsa_indicator <> FND_API.G_MISS_CHAR
9283 THEN
9284 validate_lookup (
9285 p_column => 'gsa_indicator',
9286 p_lookup_type => 'YES/NO',
9287 p_column_value => p_cust_site_use_rec.gsa_indicator,
9288 x_return_status => x_return_status );
9289
9290 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9291 hz_utility_v2pub.debug(p_message=>'gsa_indicator is lookup code in lookup type YES/NO. ' ||
9292 'x_return_status = ' || x_return_status,
9293 p_prefix =>l_debug_prefix,
9294 p_msg_level=>fnd_log.level_statement);
9295 END IF;
9296
9297 END IF;
9298
9299 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9300 hz_utility_v2pub.debug(p_message=>'(+) after validate gsa_indicator ... ' ||
9301 'x_return_status = ' || x_return_status,
9302 p_prefix =>l_debug_prefix,
9303 p_msg_level=>fnd_log.level_statement);
9304 END IF;
9305 END IF;
9306
9307 ----------------------------------------------
9308 -- validate gl_id_xxx fields
9309 ----------------------------------------------
9310 -- Bug 2553286
9311 -- If site_use_code is not 'BILL_TO', then Revenue, Tax, Freight, Clearing,
9312 -- Unbilled Receivable and Unearned Revenue fields should not be populated.
9313
9314 IF p_cust_site_use_rec.site_use_code <> 'BILL_TO' OR
9315 ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code <> 'BILL_TO' )
9316 THEN
9317 IF ( p_cust_site_use_rec.gl_id_rev IS NOT NULL AND
9318 p_cust_site_use_rec.gl_id_rev <> FND_API.G_MISS_NUM ) OR
9319 ( p_cust_site_use_rec.gl_id_tax IS NOT NULL AND
9320 p_cust_site_use_rec.gl_id_tax <> FND_API.G_MISS_NUM ) OR
9321 ( p_cust_site_use_rec.gl_id_freight IS NOT NULL AND
9322 p_cust_site_use_rec.gl_id_freight <> FND_API.G_MISS_NUM ) OR
9323 ( p_cust_site_use_rec.gl_id_clearing IS NOT NULL AND
9324 p_cust_site_use_rec.gl_id_clearing <> FND_API.G_MISS_NUM ) OR
9325 ( p_cust_site_use_rec.gl_id_unbilled IS NOT NULL AND
9326 p_cust_site_use_rec.gl_id_unbilled <> FND_API.G_MISS_NUM ) OR
9327 ( p_cust_site_use_rec.gl_id_unearned IS NOT NULL AND
9328 p_cust_site_use_rec.gl_id_unearned <> FND_API.G_MISS_NUM )
9329 THEN
9330 FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9331 FND_MSG_PUB.ADD;
9332 x_return_status := FND_API.G_RET_STS_ERROR;
9333 END IF;
9334
9335 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9336 hz_utility_v2pub.debug(p_message=>'If site_use_code is not BILL_TO, then Revenue, Tax, Freight, Clearing, ' ||
9337 'Unbilled Receivable and Unearned Revenue fields should not be populated. ' ||
9338 'x_return_status = ' || x_return_status,
9339 p_prefix =>l_debug_prefix,
9340 p_msg_level=>fnd_log.level_statement);
9341 END IF;
9342
9343 END IF;
9344 -- Bug 2553286
9345 -- If site_use_code is not 'DRAWEE', then Unpaid Bills Receivables,
9346 -- Remitted Bills Receivables and Factored Bills Receivables fields should not be populated.
9347
9348 IF p_cust_site_use_rec.site_use_code <> 'DRAWEE' OR
9349 ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code <> 'DRAWEE' )
9350 THEN
9351 IF ( p_cust_site_use_rec.gl_id_unpaid_rec IS NOT NULL AND
9352 p_cust_site_use_rec.gl_id_unpaid_rec <> FND_API.G_MISS_NUM ) OR
9353 ( p_cust_site_use_rec.gl_id_remittance IS NOT NULL AND
9354 p_cust_site_use_rec.gl_id_remittance <> FND_API.G_MISS_NUM ) OR
9355 ( p_cust_site_use_rec.gl_id_factor IS NOT NULL AND
9356 p_cust_site_use_rec.gl_id_factor <> FND_API.G_MISS_NUM )
9357 THEN
9358 FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9359 FND_MSG_PUB.ADD;
9360 x_return_status := FND_API.G_RET_STS_ERROR;
9361 END IF;
9362
9363 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9364 hz_utility_v2pub.debug(p_message=>'If site_use_code is not DRAWEE, then Unpaid Bills Receivables, ' ||
9365 'Remitted Bills Receivables and Factored Bills Receivables fields should not be populated. ' ||
9366 'x_return_status = ' || x_return_status,
9367 p_prefix =>l_debug_prefix,
9368 p_msg_level=>fnd_log.level_statement);
9369 END IF;
9370
9371 END IF;
9372 -- Bug 2553286
9373 -- If site_use_code is not 'BILL_TO OR DRAWEE', then Bills Receivables field should not be populated.
9374
9375 IF p_cust_site_use_rec.site_use_code NOT IN ('BILL_TO', 'DRAWEE') OR
9376 ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code NOT IN ('BILL_TO', 'DRAWEE') )
9377 THEN
9378 IF ( p_cust_site_use_rec.gl_id_rec IS NOT NULL AND
9379 p_cust_site_use_rec.gl_id_rec <> FND_API.G_MISS_NUM )
9380 THEN
9381 FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9382 FND_MSG_PUB.ADD;
9383 x_return_status := FND_API.G_RET_STS_ERROR;
9384 END IF;
9385
9386 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9387 hz_utility_v2pub.debug(p_message=>'If site_use_code is not BILL_TO OR DRAWEE, then Bills Receivables field should not be populated. ' ||
9388 'x_return_status = ' || x_return_status,
9389 p_prefix =>l_debug_prefix,
9390 p_msg_level=>fnd_log.level_statement);
9391 END IF;
9392
9393 END IF;
9394
9395
9396 /* 3456489. Get chart of accounts ID. */
9397 BEGIN
9398 l_coa_id := HZ_MO_GLOBAL_CACHE.get_chart_of_accounts_id(
9399 p_cust_site_use_rec.org_id);
9400 EXCEPTION
9401 WHEN NO_DATA_FOUND THEN
9402 x_return_status := FND_API.G_RET_STS_ERROR;
9403 END;
9404
9405 /* 3456489. Validate accounts only if Chart of Accounts ID is not null. */
9406 IF (l_coa_id IS NOT NULL) THEN
9407
9408 ----------------------------------------------
9409 -- validate gl_id_rec
9410 ----------------------------------------------
9411
9412
9413 -- gl_id_rec is validate gl field.
9414 IF p_cust_site_use_rec.gl_id_rec IS NOT NULL AND
9415 p_cust_site_use_rec.gl_id_rec <> FND_API.G_MISS_NUM
9416 THEN
9417 validate_gl_id (
9418 p_gl_name => 'REC',
9419 p_column_value => p_cust_site_use_rec.gl_id_rec,
9420 p_coa_id => l_coa_id, -- Bug 3456489
9421 x_return_status => x_return_status );
9422
9423 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9424 hz_utility_v2pub.debug(p_message=>'gl_id_rec is validate gl field. ' ||
9425 'x_return_status = ' || x_return_status,
9426 p_prefix =>l_debug_prefix,
9427 p_msg_level=>fnd_log.level_statement);
9428 END IF;
9429
9430 END IF;
9431
9432 ----------------------------------------------
9433 -- validate gl_id_rev
9434 ----------------------------------------------
9435
9436 -- gl_id_rev is validate gl field.
9437 IF p_cust_site_use_rec.gl_id_rev IS NOT NULL AND
9438 p_cust_site_use_rec.gl_id_rev <> FND_API.G_MISS_NUM
9439 THEN
9440 validate_gl_id (
9441 p_gl_name => 'REV',
9442 p_column_value => p_cust_site_use_rec.gl_id_rev,
9443 p_coa_id => l_coa_id, -- Bug 3456489
9444 x_return_status => x_return_status );
9445
9446 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9447 hz_utility_v2pub.debug(p_message=>'gl_id_rev is validate gl field. ' ||
9448 'x_return_status = ' || x_return_status,
9449 p_prefix =>l_debug_prefix,
9450 p_msg_level=>fnd_log.level_statement);
9451 END IF;
9452
9453 END IF;
9454
9455 ----------------------------------------------
9456 -- validate gl_id_tax
9457 ----------------------------------------------
9458
9459 -- gl_id_tax is validate gl field.
9460 IF p_cust_site_use_rec.gl_id_tax IS NOT NULL AND
9461 p_cust_site_use_rec.gl_id_tax <> FND_API.G_MISS_NUM
9462 THEN
9463 validate_gl_id (
9464 p_gl_name => 'TAX',
9465 p_column_value => p_cust_site_use_rec.gl_id_tax,
9466 p_coa_id => l_coa_id, -- Bug 3456489
9467 x_return_status => x_return_status );
9468
9469 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9470 hz_utility_v2pub.debug(p_message=>'gl_id_tax is validate gl field. ' ||
9471 'x_return_status = ' || x_return_status,
9472 p_prefix =>l_debug_prefix,
9473 p_msg_level=>fnd_log.level_statement);
9474 END IF;
9475
9476 END IF;
9477
9478 ----------------------------------------------
9479 -- validate gl_id_freight
9480 ----------------------------------------------
9481
9482 -- gl_id_freight is validate gl field.
9483 IF p_cust_site_use_rec.gl_id_freight IS NOT NULL AND
9484 p_cust_site_use_rec.gl_id_freight <> FND_API.G_MISS_NUM
9485 THEN
9486 validate_gl_id (
9487 p_gl_name => 'FREIGHT',
9488 p_column_value => p_cust_site_use_rec.gl_id_freight,
9489 p_coa_id => l_coa_id, -- Bug 3456489
9490 x_return_status => x_return_status );
9491
9492 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9493 hz_utility_v2pub.debug(p_message=>'gl_id_freight is validate gl field. ' ||
9494 'x_return_status = ' || x_return_status,
9495 p_prefix =>l_debug_prefix,
9496 p_msg_level=>fnd_log.level_statement);
9497 END IF;
9498
9499 END IF;
9500
9501 ----------------------------------------------
9502 -- validate gl_id_clearing
9503 ----------------------------------------------
9504
9505 -- gl_id_clearing is validate gl field.
9506 IF p_cust_site_use_rec.gl_id_clearing IS NOT NULL AND
9507 p_cust_site_use_rec.gl_id_clearing <> FND_API.G_MISS_NUM
9508 THEN
9509 validate_gl_id (
9510 p_gl_name => 'CLEARING',
9511 p_column_value => p_cust_site_use_rec.gl_id_clearing,
9512 p_coa_id => l_coa_id, -- Bug 3456489
9513 x_return_status => x_return_status );
9514
9515 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9516 hz_utility_v2pub.debug(p_message=>'gl_id_clearing is validate gl field. ' ||
9517 'x_return_status = ' || x_return_status,
9518 p_prefix =>l_debug_prefix,
9519 p_msg_level=>fnd_log.level_statement);
9520 END IF;
9521
9522 END IF;
9523
9524 ----------------------------------------------
9525 -- validate gl_id_unbilled
9526 ----------------------------------------------
9527
9528 -- gl_id_unbilled is validate gl field.
9529 IF p_cust_site_use_rec.gl_id_unbilled IS NOT NULL AND
9530 p_cust_site_use_rec.gl_id_unbilled <> FND_API.G_MISS_NUM
9531 THEN
9532 validate_gl_id (
9533 p_gl_name => 'UNBILLED',
9534 p_column_value => p_cust_site_use_rec.gl_id_unbilled,
9535 p_coa_id => l_coa_id, -- Bug 3456489
9536 x_return_status => x_return_status );
9537
9538 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9539 hz_utility_v2pub.debug(p_message=>'gl_id_unbilled is validate gl field. ' ||
9540 'x_return_status = ' || x_return_status,
9541 p_prefix =>l_debug_prefix,
9542 p_msg_level=>fnd_log.level_statement);
9543 END IF;
9544
9545 END IF;
9546
9547 ----------------------------------------------
9548 -- validate gl_id_unearned
9549 ----------------------------------------------
9550
9551 -- gl_id_unearned is validate gl field.
9552 IF p_cust_site_use_rec.gl_id_unearned IS NOT NULL AND
9553 p_cust_site_use_rec.gl_id_unearned <> FND_API.G_MISS_NUM
9554 THEN
9555 validate_gl_id (
9556 p_gl_name => 'UNEARNED',
9557 p_column_value => p_cust_site_use_rec.gl_id_unearned,
9558 p_coa_id => l_coa_id, -- Bug 3456489
9559 x_return_status => x_return_status );
9560
9561 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9562 hz_utility_v2pub.debug(p_message=>'gl_id_unearned is validate gl field. ' ||
9563 'x_return_status = ' || x_return_status,
9564 p_prefix =>l_debug_prefix,
9565 p_msg_level=>fnd_log.level_statement);
9566 END IF;
9567
9568 END IF;
9569
9570 ----------------------------------------------
9571 -- validate gl_id_unpaid_rec
9572 ----------------------------------------------
9573
9574 -- gl_id_unpaid_rec is validate gl field.
9575 IF p_cust_site_use_rec.gl_id_unpaid_rec IS NOT NULL AND
9576 p_cust_site_use_rec.gl_id_unpaid_rec <> FND_API.G_MISS_NUM
9577 THEN
9578 validate_gl_id (
9579 p_gl_name => 'UNPAID_REC',
9580 p_column_value => p_cust_site_use_rec.gl_id_unpaid_rec,
9581 p_coa_id => l_coa_id, -- Bug 3456489
9582 x_return_status => x_return_status );
9583
9584 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9585 hz_utility_v2pub.debug(p_message=>'gl_id_unpaid_rec is validate gl field. ' ||
9586 'x_return_status = ' || x_return_status,
9587 p_prefix =>l_debug_prefix,
9588 p_msg_level=>fnd_log.level_statement);
9589 END IF;
9590
9591 END IF;
9592
9593 ----------------------------------------------
9594 -- validate gl_id_remittance
9595 ----------------------------------------------
9596
9597 -- gl_id_remittance is validate gl field.
9598 IF p_cust_site_use_rec.gl_id_remittance IS NOT NULL AND
9599 p_cust_site_use_rec.gl_id_remittance <> FND_API.G_MISS_NUM
9600 THEN
9601 validate_gl_id (
9602 p_gl_name => 'REMITTANCE',
9603 p_column_value => p_cust_site_use_rec.gl_id_remittance,
9604 p_coa_id => l_coa_id, -- Bug 3456489
9605 x_return_status => x_return_status );
9606
9607 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9608 hz_utility_v2pub.debug(p_message=>'gl_id_remittance is validate gl field. ' ||
9609 'x_return_status = ' || x_return_status,
9610 p_prefix =>l_debug_prefix,
9611 p_msg_level=>fnd_log.level_statement);
9612 END IF;
9613
9614 END IF;
9615
9616 ----------------------------------------------
9617 -- validate gl_id_factor
9618 ----------------------------------------------
9619
9620 -- gl_id_factor is validate gl field.
9621 IF p_cust_site_use_rec.gl_id_factor IS NOT NULL AND
9622 p_cust_site_use_rec.gl_id_factor <> FND_API.G_MISS_NUM
9623 THEN
9624 validate_gl_id (
9625 p_gl_name => 'FACTOR',
9626 p_column_value => p_cust_site_use_rec.gl_id_factor,
9627 p_coa_id => l_coa_id, -- Bug 3456489
9628 x_return_status => x_return_status );
9629
9630 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9631 hz_utility_v2pub.debug(p_message=>'gl_id_factor is validate gl field. ' ||
9632 'x_return_status = ' || x_return_status,
9633 p_prefix =>l_debug_prefix,
9634 p_msg_level=>fnd_log.level_statement);
9635 END IF;
9636
9637 END IF;
9638
9639 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9640 hz_utility_v2pub.debug(p_message=>'(+) after validate gl_xxx ... ' ||
9641 'x_return_status = ' || x_return_status,
9642 p_prefix =>l_debug_prefix,
9643 p_msg_level=>fnd_log.level_statement);
9644 END IF;
9645
9646 END IF; -- Corresponding to IF l_coa_id IS NOT NULL (Bug 3456489)
9647 --------------------------------------
9648 -- validate ship_via
9649 --------------------------------------
9650
9651 -- ship_via is foreign key to oe_ship_methods_v
9652 -- can be used in both single and multi org case.
9653 IF p_cust_site_use_rec.ship_via IS NOT NULL AND
9654 p_cust_site_use_rec.ship_via <> FND_API.G_MISS_CHAR AND
9655 ( p_create_update_flag = 'C' OR
9656 ( p_create_update_flag = 'U' AND
9657 p_cust_site_use_rec.ship_via <> NVL( l_ship_via, FND_API.G_MISS_CHAR ) ) )
9658 THEN
9659 check_oe_ship_methods_v_fk (
9660 p_entity => 'SITE_USE',
9661 p_column => 'ship_via',
9662 p_column_value => p_cust_site_use_rec.ship_via,
9663 x_return_status => x_return_status );
9664
9665 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9666 hz_utility_v2pub.debug(p_message=>'ship_via is foreign key to oe_ship_methods_v. ' ||
9667 'x_return_status = ' || x_return_status,
9668 p_prefix =>l_debug_prefix,
9669 p_msg_level=>fnd_log.level_statement);
9670 END IF;
9671
9672 END IF;
9673
9674 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9675 hz_utility_v2pub.debug(p_message=>'(+) after validate ship_via ... ' ||
9676 'x_return_status = ' || x_return_status,
9677 p_prefix =>l_debug_prefix,
9678 p_msg_level=>fnd_log.level_statement);
9679 END IF;
9680
9681
9682 --------------------------------------
9683 -- validate created_by_module
9684 --------------------------------------
9685
9686 validate_created_by_module(
9687 p_create_update_flag => p_create_update_flag,
9688 p_created_by_module => p_cust_site_use_rec.created_by_module,
9689 p_old_created_by_module => l_created_by_module,
9690 x_return_status => x_return_status);
9691
9692 --------------------------------------
9693 -- validate application_id
9694 --------------------------------------
9695
9696 validate_application_id(
9697 p_create_update_flag => p_create_update_flag,
9698 p_application_id => p_cust_site_use_rec.application_id,
9699 p_old_application_id => l_application_id,
9700 x_return_status => x_return_status);
9701
9702 -- Debug info.
9703
9704 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9705 hz_utility_v2pub.debug(p_message=>'validate_cust_site_use (-)',
9706 p_prefix=>l_debug_prefix,
9707 p_msg_level=>fnd_log.level_procedure);
9708 END IF;
9709
9710 END validate_cust_site_use;
9711
9712 /**
9713 * PROCEDURE validate_cust_account_role
9714 *
9715 * DESCRIPTION
9716 * Validates customer account role record. Checks for
9717 * uniqueness
9718 * lookup types
9719 * mandatory columns
9720 * non-updateable fields
9721 * foreign key validations
9722 * other validations
9723 *
9724 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
9725 *
9726 * ARGUMENTS
9727 * IN:
9728 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
9729 * p_cust_account_role_rec Customer account role record.
9730 * p_rowid Rowid of the record (used only in update mode).
9731 * IN/OUT:
9732 * x_return_status Return status after the call. The status can
9733 * be FND_API.G_RET_STS_SUCCESS (success),
9734 * FND_API.G_RET_STS_ERROR (error),
9735 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
9736 *
9737 * NOTES
9738 *
9739 * MODIFICATION HISTORY
9740 *
9741 * 07-23-2001 Jianying Huang o Created.
9742 *
9743 */
9744
9745 PROCEDURE validate_cust_account_role (
9746 p_create_update_flag IN VARCHAR2,
9747 p_cust_account_role_rec IN HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE,
9748 p_rowid IN ROWID,
9749 x_return_status IN OUT NOCOPY VARCHAR2
9750 ) IS
9751
9752 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_account_role'
9753
9754 l_dummy VARCHAR2(1);
9755
9756 l_party_id NUMBER;
9757 l_cust_account_id NUMBER;
9758 l_cust_acct_site_id NUMBER;
9759 l_role_type HZ_CUST_ACCOUNT_ROLES.role_type%TYPE;
9760 l_created_by_module HZ_CUST_ACCOUNT_ROLES.created_by_module%TYPE;
9761 l_application_id NUMBER;
9762 l_orig_system_reference HZ_CUST_ACCOUNT_ROLES.orig_system_reference%TYPE;
9763 l_status HZ_CUST_ACCOUNT_ROLES.status%TYPE;
9764 l_validate_flag varchar2(1) := 'Y';
9765 l_mosr_owner_table_id number;
9766 l_return_status VARCHAR2(1);
9767 l_org_id HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
9768 l_temp_return_status VARCHAR2(10); -- for storing return status from
9769 -- hz_orig_system_ref_pub.get_owner_table_id
9770
9771 BEGIN
9772
9773 -- Check if API is called in debug mode. If yes, enable debug.
9774 --enable_debug;
9775
9776 -- Debug info.
9777
9778 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9779 hz_utility_v2pub.debug(p_message=>'validate_cust_account_role (+)',
9780 p_prefix=>l_debug_prefix,
9781 p_msg_level=>fnd_log.level_procedure);
9782 END IF;
9783
9784
9785 -- Select fields for later use during update.
9786 IF p_create_update_flag = 'U' THEN
9787 SELECT PARTY_ID, CUST_ACCOUNT_ID, CUST_ACCT_SITE_ID,
9788 ROLE_TYPE, ORIG_SYSTEM_REFERENCE, CREATED_BY_MODULE,
9789 APPLICATION_ID, STATUS
9790 INTO l_party_id, l_cust_account_id, l_cust_acct_site_id,
9791 l_role_type, l_orig_system_reference, l_created_by_module,
9792 l_application_id, l_status
9793 FROM HZ_CUST_ACCOUNT_ROLES
9794 WHERE CUST_ACCOUNT_ROLE_ID = p_cust_account_role_rec.cust_account_role_id;
9795 END IF;
9796
9797 --------------------------------------
9798 -- validate cust_account_role_id
9799 --------------------------------------
9800 /****Logical APIs - validation not required****/
9801 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9802 IF p_create_update_flag = 'C' THEN
9803
9804 -- If primary key value is passed, check for uniqueness.
9805 -- If primary key value is not passed, it will be generated
9806 -- from sequence by table handler.
9807
9808 IF p_cust_account_role_rec.cust_account_role_id IS NOT NULL AND
9809 p_cust_account_role_rec.cust_account_role_id <> FND_API.G_MISS_NUM
9810 THEN
9811 BEGIN
9812 SELECT 'Y' INTO l_dummy
9813 FROM HZ_CUST_ACCOUNT_ROLES
9814 WHERE CUST_ACCOUNT_ROLE_ID = p_cust_account_role_rec.cust_account_role_id;
9815
9816 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9817 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_role_id' );
9818 FND_MSG_PUB.ADD;
9819 x_return_status := FND_API.G_RET_STS_ERROR;
9820 EXCEPTION
9821 WHEN NO_DATA_FOUND THEN
9822 NULL;
9823 END;
9824
9825 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9826 hz_utility_v2pub.debug(p_message=>'cust_account_role_id is unique during creation if passed in. ' ||
9827 'x_return_status = ' || x_return_status,
9828 p_prefix =>l_debug_prefix,
9829 p_msg_level=>fnd_log.level_statement);
9830 END IF;
9831
9832 END IF;
9833
9834 END IF;
9835
9836 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9837 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_role_id ... ' ||
9838 'x_return_status = ' || x_return_status,
9839 p_prefix =>l_debug_prefix,
9840 p_msg_level=>fnd_log.level_statement);
9841 END IF;
9842 END IF;
9843
9844 ----------------------------------------------
9845 -- validate party_id
9846 ----------------------------------------------
9847 /****Logical APIs - validation not required****/
9848 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9849 -- party_id is mandatory field
9850 -- Since party_id is non-updateable, we only need to check mandatory
9851 -- during creation.
9852
9853 IF p_create_update_flag = 'C' THEN
9854 validate_mandatory (
9855 p_create_update_flag => p_create_update_flag,
9856 p_column => 'party_id',
9857 p_column_value => p_cust_account_role_rec.party_id,
9858 x_return_status => x_return_status );
9859
9860 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9861 hz_utility_v2pub.debug(p_message=>'party_id is mandatory. ' ||
9862 'x_return_status = ' || x_return_status,
9863 p_prefix =>l_debug_prefix,
9864 p_msg_level=>fnd_log.level_statement);
9865 END IF;
9866
9867 END IF;
9868
9869 -- party_id is non-updateable field
9870 IF p_create_update_flag = 'U' AND
9871 p_cust_account_role_rec.party_id IS NOT NULL
9872 THEN
9873 validate_nonupdateable (
9874 p_column => 'party_id',
9875 p_column_value => p_cust_account_role_rec.party_id,
9876 p_old_column_value => l_party_id,
9877 x_return_status => x_return_status );
9878
9879 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9880 hz_utility_v2pub.debug(p_message=>'party_id is non-updateable. ' ||
9881 'x_return_status = ' || x_return_status,
9882 p_prefix =>l_debug_prefix,
9883 p_msg_level=>fnd_log.level_statement);
9884 END IF;
9885
9886 END IF;
9887
9888 -- party_id is type of party_relationship.
9889 -- party_id is the object_id in the relationship. Subject_id is the party
9890 -- referened by cust_account_id.
9891 -- However, we decide donot add this validation for now since we may
9892 -- need migrate data. (Dylan's reply)
9893
9894 -- party_id is foreign key to hz_parties
9895 -- Since party_id is mandatory and non-updateable, we only need to
9896 -- check FK during creation.
9897
9898 IF p_create_update_flag = 'C' AND
9899 p_cust_account_role_rec.party_id IS NOT NULL AND
9900 p_cust_account_role_rec.party_id <> FND_API.G_MISS_NUM
9901 THEN
9902 check_party_fk (
9903 p_column => 'party_id',
9904 p_column_value => p_cust_account_role_rec.party_id,
9905 x_return_status => x_return_status );
9906
9907 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9908 hz_utility_v2pub.debug(p_message=>'party_id is foreign key to hz_parties. ' ||
9909 'x_return_status = ' || x_return_status,
9910 p_prefix =>l_debug_prefix,
9911 p_msg_level=>fnd_log.level_statement);
9912 END IF;
9913
9914 END IF;
9915
9916 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9917 hz_utility_v2pub.debug(p_message=>'(+) after validate party_id ... ' ||
9918 'x_return_status = ' || x_return_status,
9919 p_prefix =>l_debug_prefix,
9920 p_msg_level=>fnd_log.level_statement);
9921 END IF;
9922 END IF;
9923
9924 ----------------------------------------------
9925 -- validate cust_account_id
9926 ----------------------------------------------
9927 /****Logical APIs - validation not required****/
9928 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9929 -- cust_account_id is mandatory field
9930 -- Since cust_account_id is non-updateable, we only need to check mandatory
9931 -- during creation.
9932
9933 IF p_create_update_flag = 'C' THEN
9934 validate_mandatory (
9935 p_create_update_flag => p_create_update_flag,
9936 p_column => 'cust_account_id',
9937 p_column_value => p_cust_account_role_rec.cust_account_id,
9938 x_return_status => x_return_status );
9939
9940 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9941 hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
9942 'x_return_status = ' || x_return_status,
9943 p_prefix =>l_debug_prefix,
9944 p_msg_level=>fnd_log.level_statement);
9945 END IF;
9946
9947 END IF;
9948
9949 -- cust_account_id is non-updateable field
9950 IF p_create_update_flag = 'U' AND
9951 p_cust_account_role_rec.cust_account_id IS NOT NULL
9952 THEN
9953 validate_nonupdateable (
9954 p_column => 'cust_account_id',
9955 p_column_value => p_cust_account_role_rec.cust_account_id,
9956 p_old_column_value => l_cust_account_id,
9957 x_return_status => x_return_status );
9958
9959 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9960 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
9961 'x_return_status = ' || x_return_status,
9962 p_prefix =>l_debug_prefix,
9963 p_msg_level=>fnd_log.level_statement);
9964 END IF;
9965
9966 END IF;
9967
9968 -- cust_account_id is foreign key to hz_cust_accounts
9969 -- Since cust_account_id is mandatory and non-updateable,
9970 -- we only need to check FK during creation.
9971
9972 IF p_create_update_flag = 'C' AND
9973 p_cust_account_role_rec.cust_account_id IS NOT NULL AND
9974 p_cust_account_role_rec.cust_account_id <> FND_API.G_MISS_NUM
9975 THEN
9976 check_cust_account_fk (
9977 p_column => 'cust_account_id',
9978 p_column_value => p_cust_account_role_rec.cust_account_id,
9979 x_return_status => x_return_status );
9980
9981 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9982 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
9983 'x_return_status = ' || x_return_status,
9984 p_prefix =>l_debug_prefix,
9985 p_msg_level=>fnd_log.level_statement);
9986 END IF;
9987
9988 END IF;
9989
9990 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9991 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
9992 'x_return_status = ' || x_return_status,
9993 p_prefix =>l_debug_prefix,
9994 p_msg_level=>fnd_log.level_statement);
9995 END IF;
9996 END IF;
9997
9998 ----------------------------------------------
9999 -- validate cust_acct_site_id
10000 ----------------------------------------------
10001 /****Logical APIs - validation not required****/
10002 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10003 -- cust_acct_site_id is non-updateable field
10004 IF p_create_update_flag = 'U' AND
10005 p_cust_account_role_rec.cust_acct_site_id IS NOT NULL
10006 THEN
10007 validate_nonupdateable (
10008 p_column => 'cust_acct_site_id',
10009 p_column_value => p_cust_account_role_rec.cust_acct_site_id,
10010 p_old_column_value => l_cust_acct_site_id,
10011 x_return_status => x_return_status );
10012
10013 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10014 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is non-updateable. ' ||
10015 'x_return_status = ' || x_return_status,
10016 p_prefix =>l_debug_prefix,
10017 p_msg_level=>fnd_log.level_statement);
10018 END IF;
10019
10020 END IF;
10021
10022 -- cust_acct_site_id is foreign key to hz_cust_acct_sites.
10023 -- The cust_account_id in hz_cust_acct_sites should be same
10024 -- as we put in cust_account_id in hz_cust_account_roles.
10025 -- Since cust_acct_site_id is non-updateable, we only need to
10026 -- check FK during creation.
10027
10028 IF p_create_update_flag = 'C' AND
10029 p_cust_account_role_rec.cust_acct_site_id IS NOT NULL AND
10030 p_cust_account_role_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
10031 THEN
10032 BEGIN
10033
10034 SELECT CUST_ACCOUNT_ID,ORG_ID
10035 INTO l_cust_account_id,l_org_id
10036 FROM HZ_CUST_ACCT_SITES_ALL
10037 WHERE CUST_ACCT_SITE_ID = p_cust_account_role_rec.cust_acct_site_id;
10038
10039 -- Bug 4650473. Check if org is accessible.
10040 BEGIN
10041 MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
10042 EXCEPTION
10043 WHEN OTHERS
10044 THEN
10045 x_return_status := FND_API.G_RET_STS_ERROR;
10046 END;
10047
10048 IF l_cust_account_id <> p_cust_account_role_rec.cust_account_id THEN
10049 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_SITE_MISSMATCH' );
10050 FND_MSG_PUB.ADD;
10051 x_return_status := FND_API.G_RET_STS_ERROR;
10052 END IF;
10053
10054 EXCEPTION
10055 WHEN NO_DATA_FOUND THEN
10056 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10057 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_acct_site_id' );
10058 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id' );
10059 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_acct_sites' );
10060 FND_MSG_PUB.ADD;
10061 x_return_status := FND_API.G_RET_STS_ERROR;
10062 END;
10063
10064 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10065 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is foreign key to hz_cust_acct_sites and cust_account_id in hz_cust_acct_sites should be same as we put in cust_account_id in hz_cust_account_roles.' ||
10066 'x_return_status = ' || x_return_status,
10067 p_prefix =>l_debug_prefix,
10068 p_msg_level=>fnd_log.level_statement);
10069 END IF;
10070
10071 END IF;
10072
10073 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10074 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
10075 'x_return_status = ' || x_return_status,
10076 p_prefix =>l_debug_prefix,
10077 p_msg_level=>fnd_log.level_statement);
10078 END IF;
10079 END IF;
10080
10081 ----------------------------------------------
10082 -- validate role_type
10083 ----------------------------------------------
10084
10085 -- role_type is mandatory field
10086 -- Since role_type is non-updateable, we only need to check mandatory
10087 -- during creation.
10088
10089 IF p_create_update_flag = 'C' THEN
10090 validate_mandatory (
10091 p_create_update_flag => p_create_update_flag,
10092 p_column => 'role_type',
10093 p_column_value => p_cust_account_role_rec.role_type,
10094 x_return_status => x_return_status );
10095
10096 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10097 hz_utility_v2pub.debug(p_message=>'role_type is mandatory. ' ||
10098 'x_return_status = ' || x_return_status,
10099 p_prefix =>l_debug_prefix,
10100 p_msg_level=>fnd_log.level_statement);
10101 END IF;
10102
10103 END IF;
10104
10105 -- role_type is non-updateable field
10106 IF p_create_update_flag = 'U' AND
10107 p_cust_account_role_rec.role_type IS NOT NULL
10108 THEN
10109 validate_nonupdateable (
10110 p_column => 'role_type',
10111 p_column_value => p_cust_account_role_rec.role_type,
10112 p_old_column_value => l_role_type,
10113 x_return_status => x_return_status );
10114
10115 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10116 hz_utility_v2pub.debug(p_message=>'role_type is non-updateable. ' ||
10117 'x_return_status = ' || x_return_status,
10118 p_prefix =>l_debug_prefix,
10119 p_msg_level=>fnd_log.level_statement);
10120 END IF;
10121
10122 END IF;
10123
10124 -- role_type is lookup code in lookup type ACCT_ROLE_TYPE
10125 -- Since role_type is non-updateable, we only need to do the checking
10126 -- during creation.
10127
10128 IF p_create_update_flag = 'C' AND
10129 p_cust_account_role_rec.role_type IS NOT NULL AND
10130 p_cust_account_role_rec.role_type <> FND_API.G_MISS_CHAR
10131 THEN
10132 validate_lookup (
10133 p_column => 'role_type',
10134 p_lookup_type => 'ACCT_ROLE_TYPE',
10135 p_column_value => p_cust_account_role_rec.role_type,
10136 x_return_status => x_return_status );
10137
10138 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10139 hz_utility_v2pub.debug(p_message=>'role_type is lookup code in lookup type ACCT_ROLE_TYPE. ' ||
10140 'x_return_status = ' || x_return_status,
10141 p_prefix =>l_debug_prefix,
10142 p_msg_level=>fnd_log.level_statement);
10143 END IF;
10144
10145 END IF;
10146
10147 -- The combination of CUST_ACCOUNT_ID, PARTY_ID, ROLE_TYPE should be unique.
10148 -- Or the combination of CUST_ACCT_SITE_ID, PARTY_ID, ROLE_TYPE should be unique.
10149 -- We only need to check this during creation because all of these
10150 -- three columns are non-updateable.
10151
10152 IF p_create_update_flag = 'C' THEN
10153 IF p_cust_account_role_rec.cust_acct_site_id IS NULL OR
10154 p_cust_account_role_rec.cust_acct_site_id = FND_API.G_MISS_NUM
10155 THEN
10156 BEGIN
10157 SELECT 'Y' INTO l_dummy
10158 FROM HZ_CUST_ACCOUNT_ROLES
10159 WHERE CUST_ACCOUNT_ID = p_cust_account_role_rec.cust_account_id
10160 AND PARTY_ID = p_cust_account_role_rec.party_id
10161 AND CUST_ACCT_SITE_ID IS NULL
10162 AND ROLE_TYPE = p_cust_account_role_rec.role_type
10163 AND STATUS='A' -- Bug 4624292
10164 AND ROWNUM = 1;
10165
10166 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10167 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_id - role_type' );
10168 FND_MSG_PUB.ADD;
10169 x_return_status := FND_API.G_RET_STS_ERROR;
10170 EXCEPTION
10171 WHEN NO_DATA_FOUND THEN
10172 NULL;
10173 END;
10174
10175 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10176 hz_utility_v2pub.debug(p_message=>'the combination of cust_account_id, party_id, role_type should be unique. ' ||
10177 'x_return_status = ' || x_return_status,
10178 p_prefix =>l_debug_prefix,
10179 p_msg_level=>fnd_log.level_statement);
10180 END IF;
10181
10182 ELSE
10183 BEGIN
10184 SELECT 'Y' INTO l_dummy
10185 FROM HZ_CUST_ACCOUNT_ROLES
10186 WHERE CUST_ACCT_SITE_ID = p_cust_account_role_rec.cust_acct_site_id
10187 AND PARTY_ID = p_cust_account_role_rec.party_id
10188 AND ROLE_TYPE = p_cust_account_role_rec.role_type
10189 AND STATUS='A' -- Bug 4624292
10190 AND ROWNUM = 1;
10191
10192 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10193 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - party_id - role_type' );
10194 FND_MSG_PUB.ADD;
10195 x_return_status := FND_API.G_RET_STS_ERROR;
10196 EXCEPTION
10197 WHEN NO_DATA_FOUND THEN
10198 NULL;
10199 END;
10200
10201 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10202 hz_utility_v2pub.debug(p_message=>'the combination of cust_acct_site_id, party_id, role_type should be unique. ' ||
10203 'x_return_status = ' || x_return_status,
10204 p_prefix =>l_debug_prefix,
10205 p_msg_level=>fnd_log.level_statement);
10206 END IF;
10207
10208 END IF;
10209
10210 ELSE -- Update case (Bug 4624292)
10211 IF p_cust_account_role_rec.status='A'
10212 AND l_status='I'
10213 THEN
10214 IF l_cust_acct_site_id IS NOT NULL
10215 THEN
10216 BEGIN
10217 SELECT 'Y' INTO l_dummy
10218 FROM HZ_CUST_ACCOUNT_ROLES
10219 WHERE
10220 CUST_ACCT_SITE_ID = nvl(p_cust_account_role_rec.cust_acct_site_id,l_cust_acct_site_id)
10221 AND PARTY_ID = nvl(p_cust_account_role_rec.party_id,l_party_id)
10222 AND ROLE_TYPE = nvl(p_cust_account_role_rec.role_type,l_role_type)
10223 AND STATUS='A'
10224 AND ROWID<>p_rowid
10225 AND ROWNUM = 1;
10226
10227 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10228 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - party_id - role_type' );
10229 FND_MSG_PUB.ADD;
10230 x_return_status := FND_API.G_RET_STS_ERROR;
10231 EXCEPTION
10232 WHEN NO_DATA_FOUND THEN
10233 NULL;
10234 END;
10235
10236 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10237 hz_utility_v2pub.debug(p_message=>'the combination of cust_acct_site_id, party_id, role_type should be unique. ' ||
10238 'x_return_status = ' || x_return_status,
10239 p_prefix =>l_debug_prefix,
10240 p_msg_level=>fnd_log.level_statement);
10241 END IF;
10242
10243 ELSE
10244 BEGIN
10245 SELECT 'Y' INTO l_dummy
10246 FROM HZ_CUST_ACCOUNT_ROLES
10247 WHERE
10248 CUST_ACCT_SITE_ID IS NULL
10249 AND CUST_ACCOUNT_ID = nvl(p_cust_account_role_rec.cust_account_id,l_cust_account_id)
10250 AND PARTY_ID = nvl(p_cust_account_role_rec.party_id,l_party_id)
10251 AND ROLE_TYPE = nvl(p_cust_account_role_rec.role_type,l_role_type)
10252 AND STATUS='A'
10253 AND ROWID<>p_rowid
10254 AND ROWNUM = 1;
10255
10256 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10257 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_id - role_type' );
10258 FND_MSG_PUB.ADD;
10259 x_return_status := FND_API.G_RET_STS_ERROR;
10260 EXCEPTION
10261 WHEN NO_DATA_FOUND THEN
10262 NULL;
10263 END;
10264
10265 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10266 hz_utility_v2pub.debug(p_message=>'the combination of cust_account_id, party_id, role_type should be unique. ' ||
10267 'x_return_status = ' || x_return_status,
10268 p_prefix =>l_debug_prefix,
10269 p_msg_level=>fnd_log.level_statement);
10270 END IF;
10271
10272 END IF;
10273 END IF;
10274 END IF;
10275
10276 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10277 hz_utility_v2pub.debug(p_message=>'(+) after validate role_type ... ' ||
10278 'x_return_status = ' || x_return_status,
10279 p_prefix =>l_debug_prefix,
10280 p_msg_level=>fnd_log.level_statement);
10281 END IF;
10282
10283
10284 ----------------------------------------------
10285 -- validate orig_system_reference
10286 ----------------------------------------------
10287 /****Logical APIs - validation not required****/
10288 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10289 IF (p_cust_account_role_rec.orig_system is not null and p_cust_account_role_rec.orig_system <>fnd_api.g_miss_char)
10290 and (p_cust_account_role_rec.orig_system_reference is not null and p_cust_account_role_rec.orig_system_reference <>fnd_api.g_miss_char)
10291 and p_create_update_flag = 'U'
10292 then
10293 hz_orig_system_ref_pub.get_owner_table_id
10294 (p_orig_system => p_cust_account_role_rec.orig_system,
10295 p_orig_system_reference => p_cust_account_role_rec.orig_system_reference,
10296 p_owner_table_name => 'HZ_CUST_ACCOUNT_ROLES',
10297 x_owner_table_id => l_mosr_owner_table_id,
10298 x_return_status => l_temp_return_status);
10299
10300 IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
10301 l_mosr_owner_table_id= nvl(p_cust_account_role_rec.cust_account_role_id,l_mosr_owner_table_id))
10302 THEN
10303 l_validate_flag := 'N';
10304 END IF;
10305
10306 -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
10307 -- x_return_status. Set x_return_status to error, ONLY if there is error.
10308 -- In case of success, leave it to carry over previous value as before this call.
10309 -- Fix for Bug 5498116 (29-AUG-2006)
10310 IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
10311 x_return_status := l_temp_return_status;
10312 END IF;
10313
10314 end if;
10315 -- orig_system_reference is non-updateable field
10316 IF p_create_update_flag = 'U' AND
10317 p_cust_account_role_rec.orig_system_reference IS NOT NULL
10318 and l_validate_flag = 'Y'
10319 THEN
10320 validate_nonupdateable (
10321 p_column => 'orig_system_reference',
10322 p_column_value => p_cust_account_role_rec.orig_system_reference,
10323 p_old_column_value => l_orig_system_reference,
10324 x_return_status => x_return_status );
10325
10326 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10327 hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
10328 'x_return_status = ' || x_return_status,
10329 p_prefix =>l_debug_prefix,
10330 p_msg_level=>fnd_log.level_statement);
10331 END IF;
10332
10333 END IF;
10334
10335 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10336 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
10337 'x_return_status = ' || x_return_status,
10338 p_prefix =>l_debug_prefix,
10339 p_msg_level=>fnd_log.level_statement);
10340 END IF;
10341 END IF;
10342
10343 ----------------------------------------------
10344 -- validate primary_flag
10345 ----------------------------------------------
10346 /****Logical APIs - validation not required****/
10347 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10348
10349 -- primary_flag is lookup code in lookup type YES/NO
10350 IF p_cust_account_role_rec.primary_flag IS NOT NULL AND
10351 p_cust_account_role_rec.primary_flag <> FND_API.G_MISS_CHAR
10352 THEN
10353 validate_lookup (
10354 p_column => 'primary_flag',
10355 p_lookup_type => 'YES/NO',
10356 p_column_value => p_cust_account_role_rec.primary_flag,
10357 x_return_status => x_return_status );
10358
10359 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10360 hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
10361 'x_return_status = ' || x_return_status,
10362 p_prefix =>l_debug_prefix,
10363 p_msg_level=>fnd_log.level_statement);
10364 END IF;
10365
10366 END IF;
10367 END IF;
10368
10369 -- primary_flag is unique per cust_account_id or cust_acct_site_id
10370
10371 IF p_cust_account_role_rec.primary_flag = 'Y' THEN
10372 IF p_create_update_flag = 'C' THEN
10373 l_cust_account_id := p_cust_account_role_rec.cust_account_id;
10374 l_cust_acct_site_id := p_cust_account_role_rec.cust_acct_site_id;
10375 END IF;
10376
10377 IF l_cust_acct_site_id IS NULL OR
10378 l_cust_acct_site_id = FND_API.G_MISS_NUM
10379 THEN
10380 BEGIN
10381 SELECT 'Y' INTO l_dummy
10382 FROM HZ_CUST_ACCOUNT_ROLES
10383 WHERE CUST_ACCOUNT_ID = l_cust_account_id
10384 AND CUST_ACCT_SITE_ID IS NULL
10385 AND PRIMARY_FLAG = 'Y'
10386 AND ( p_create_update_flag = 'C' OR
10387 p_create_update_flag = 'U' AND ROWID <> p_rowid )
10388 AND ROWNUM = 1;
10389
10390 FND_MESSAGE.SET_NAME( 'AR', 'HZ_CUST_ACCT_ROLE_PRIMARY' );
10391 FND_MESSAGE.SET_TOKEN( 'ENTITY', 'account' );
10392 FND_MSG_PUB.ADD;
10393 x_return_status := FND_API.G_RET_STS_ERROR;
10394 EXCEPTION
10395 WHEN NO_DATA_FOUND THEN
10396 NULL;
10397 END;
10398
10399 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10400 hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_account_id. ' ||
10401 'x_return_status = ' || x_return_status,
10402 p_prefix =>l_debug_prefix,
10403 p_msg_level=>fnd_log.level_statement);
10404 END IF;
10405
10406 ELSE
10407 BEGIN
10408 SELECT 'Y' INTO l_dummy
10409 FROM HZ_CUST_ACCOUNT_ROLES
10410 WHERE CUST_ACCOUNT_ID = l_cust_account_id
10411 AND CUST_ACCT_SITE_ID = l_cust_acct_site_id
10412 AND PRIMARY_FLAG = 'Y'
10413 AND ( p_create_update_flag = 'C' OR
10414 p_create_update_flag = 'U' AND ROWID <> p_rowid )
10415 AND ROWNUM = 1;
10416
10417 FND_MESSAGE.SET_NAME( 'AR', 'HZ_CUST_ACCT_ROLE_PRIMARY' );
10418 FND_MESSAGE.SET_TOKEN( 'ENTITY', 'account site' );
10419 FND_MSG_PUB.ADD;
10420 x_return_status := FND_API.G_RET_STS_ERROR;
10421 EXCEPTION
10422 WHEN NO_DATA_FOUND THEN
10423 NULL;
10424 END;
10425
10426 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10427 hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_acct_site_id. ' ||
10428 'x_return_status = ' || x_return_status,
10429 p_prefix =>l_debug_prefix,
10430 p_msg_level=>fnd_log.level_statement);
10431 END IF;
10432
10433 END IF;
10434 END IF;
10435
10436 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10437 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
10438 'x_return_status = ' || x_return_status,
10439 p_prefix =>l_debug_prefix,
10440 p_msg_level=>fnd_log.level_statement);
10441 END IF;
10442
10443
10444 --------------------------------------
10445 -- validate status
10446 --------------------------------------
10447
10448 -- status cannot be set to null during update
10449 IF p_create_update_flag = 'U' AND
10450 p_cust_account_role_rec.status IS NOT NULL
10451 THEN
10452 validate_cannot_update_to_null (
10453 p_column => 'status',
10454 p_column_value => p_cust_account_role_rec.status,
10455 x_return_status => x_return_status );
10456
10457 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10458 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
10459 'x_return_status = ' || x_return_status,
10460 p_prefix =>l_debug_prefix,
10461 p_msg_level=>fnd_log.level_statement);
10462 END IF;
10463
10464 END IF;
10465
10466 /****Logical APIs - validation not required****/
10467 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10468 -- status is lookup code in lookup type REGISTRY_STATUS because
10469 -- the status is used in party merge.
10470 IF p_cust_account_role_rec.status IS NOT NULL AND
10471 p_cust_account_role_rec.status <> FND_API.G_MISS_CHAR AND
10472 ( p_create_update_flag = 'C' OR
10473 ( p_create_update_flag = 'U' AND
10474 p_cust_account_role_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
10475 THEN
10476 validate_lookup (
10477 p_column => 'status',
10478 p_lookup_type => 'REGISTRY_STATUS',
10479 p_column_value => p_cust_account_role_rec.status,
10480 x_return_status => x_return_status );
10481
10482 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10483 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10484 'x_return_status = ' || x_return_status,
10485 p_prefix =>l_debug_prefix,
10486 p_msg_level=>fnd_log.level_statement);
10487 END IF;
10488
10489 END IF;
10490 END IF;
10491
10492 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10493 hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
10494 'x_return_status = ' || x_return_status,
10495 p_prefix =>l_debug_prefix,
10496 p_msg_level=>fnd_log.level_statement);
10497 END IF;
10498
10499
10500 --------------------------------------
10501 -- validate created_by_module
10502 --------------------------------------
10503
10504 validate_created_by_module(
10505 p_create_update_flag => p_create_update_flag,
10506 p_created_by_module => p_cust_account_role_rec.created_by_module,
10507 p_old_created_by_module => l_created_by_module,
10508 x_return_status => x_return_status);
10509
10510 --------------------------------------
10511 -- validate application_id
10512 --------------------------------------
10513
10514 validate_application_id(
10515 p_create_update_flag => p_create_update_flag,
10516 p_application_id => p_cust_account_role_rec.application_id,
10517 p_old_application_id => l_application_id,
10518 x_return_status => x_return_status);
10519
10520 -- Debug info.
10521 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10522 hz_utility_v2pub.debug(p_message=>'validate_cust_account_role (-)',
10523 p_prefix=>l_debug_prefix,
10524 p_msg_level=>fnd_log.level_procedure);
10525 END IF;
10526
10527 END validate_cust_account_role;
10528
10529 /**
10530 * PROCEDURE validate_role_responsibility
10531 *
10532 * DESCRIPTION
10533 * Validates customer account role responsibility record. Checks for
10534 * uniqueness
10535 * lookup types
10536 * mandatory columns
10537 * non-updateable fields
10538 * foreign key validations
10539 * other validations
10540 *
10541 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10542 *
10543 * ARGUMENTS
10544 * IN:
10545 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
10546 * p_role_responsibility_rec Customer account role responsibility record.
10547 * p_rowid Rowid of the record (used only in update mode).
10548 * IN/OUT:
10549 * x_return_status Return status after the call. The status can
10550 * be FND_API.G_RET_STS_SUCCESS (success),
10551 * FND_API.G_RET_STS_ERROR (error),
10552 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
10553 *
10554 * NOTES
10555 *
10556 * MODIFICATION HISTORY
10557 *
10558 * 07-23-2001 Jianying Huang o Created.
10559 *
10560 */
10561
10562 PROCEDURE validate_role_responsibility (
10563 p_create_update_flag IN VARCHAR2,
10564 p_role_responsibility_rec IN HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE,
10565 p_rowid IN ROWID,
10566 x_return_status IN OUT NOCOPY VARCHAR2
10567 ) IS
10568
10569 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_role_repsonsibility'
10570
10571 l_dummy VARCHAR2(1);
10572
10573 l_responsibility_type HZ_ROLE_RESPONSIBILITY.responsibility_type%TYPE;
10574 l_cust_account_role_id NUMBER;
10575 l_orig_system_reference HZ_ROLE_RESPONSIBILITY.orig_system_reference%TYPE;
10576 l_created_by_module HZ_ROLE_RESPONSIBILITY.created_by_module%TYPE;
10577 l_application_id NUMBER;
10578
10579 BEGIN
10580
10581 -- Check if API is called in debug mode. If yes, enable debug.
10582 --enable_debug;
10583
10584 -- Debug info.
10585 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10586 hz_utility_v2pub.debug(p_message=>'validate_role_responsibility (+)',
10587 p_prefix=>l_debug_prefix,
10588 p_msg_level=>fnd_log.level_procedure);
10589 END IF;
10590
10591 -- Select fields for later use during update.
10592 IF p_create_update_flag = 'U' THEN
10593 SELECT RESPONSIBILITY_TYPE, CUST_ACCOUNT_ROLE_ID, ORIG_SYSTEM_REFERENCE ,
10594 CREATED_BY_MODULE, APPLICATION_ID
10595 INTO l_responsibility_type, l_cust_account_role_id, l_orig_system_reference,
10596 l_created_by_module, l_application_id
10597 FROM HZ_ROLE_RESPONSIBILITY
10598 WHERE ROWID = p_rowid;
10599 END IF;
10600
10601 --------------------------------------
10602 -- validate responsibility_id
10603 --------------------------------------
10604 /****Logical APIs - validation not required****/
10605 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10606 IF p_create_update_flag = 'C' THEN
10607
10608 -- If primary key value is passed, check for uniqueness.
10609 -- If primary key value is not passed, it will be generated
10610 -- from sequence by table handler.
10611
10612 IF p_role_responsibility_rec.responsibility_id IS NOT NULL AND
10613 p_role_responsibility_rec.responsibility_id <> FND_API.G_MISS_NUM
10614 THEN
10615 BEGIN
10616 SELECT 'Y' INTO l_dummy
10617 FROM HZ_ROLE_RESPONSIBILITY
10618 WHERE RESPONSIBILITY_ID = p_role_responsibility_rec.responsibility_id;
10619
10620 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10621 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'responsibility_id' );
10622 FND_MSG_PUB.ADD;
10623 x_return_status := FND_API.G_RET_STS_ERROR;
10624 EXCEPTION
10625 WHEN NO_DATA_FOUND THEN
10626 NULL;
10627 END;
10628
10629 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10630 hz_utility_v2pub.debug(p_message=>'responsibility_id is unique during creation if passed in. ' ||
10631 'x_return_status = ' || x_return_status,
10632 p_prefix =>l_debug_prefix,
10633 p_msg_level=>fnd_log.level_statement);
10634 END IF;
10635
10636
10637 END IF;
10638 END IF;
10639
10640 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10641 hz_utility_v2pub.debug(p_message=>'(+) after validate responsibility_id ... ' ||
10642 'x_return_status = ' || x_return_status,
10643 p_prefix =>l_debug_prefix,
10644 p_msg_level=>fnd_log.level_statement);
10645 END IF;
10646 END IF;
10647
10648 ----------------------------------------------
10649 -- validate responsibility_type
10650 ----------------------------------------------
10651
10652 -- responsibility_type is mandatory field
10653
10654 validate_mandatory (
10655 p_create_update_flag => p_create_update_flag,
10656 p_column => 'responsibility_type',
10657 p_column_value => p_role_responsibility_rec.responsibility_type,
10658 x_return_status => x_return_status );
10659
10660 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10661 hz_utility_v2pub.debug(p_message=>'responsibility_type is mandatory. ' ||
10662 'x_return_status = ' || x_return_status,
10663 p_prefix =>l_debug_prefix,
10664 p_msg_level=>fnd_log.level_statement);
10665 END IF;
10666
10667
10668 -- responsibility_type is lookup code in lookup type SITE_USE_CODE
10669
10670 IF p_role_responsibility_rec.responsibility_type IS NOT NULL AND
10671 p_role_responsibility_rec.responsibility_type <> FND_API.G_MISS_CHAR AND
10672 ( p_create_update_flag = 'C' OR
10673 ( p_create_update_flag = 'U' AND
10674 p_role_responsibility_rec.responsibility_type <> NVL( l_responsibility_type, FND_API.G_MISS_CHAR ) ) )
10675 THEN
10676 validate_lookup (
10677 p_column => 'responsibility_type',
10678 p_lookup_type => 'SITE_USE_CODE',
10679 p_column_value => p_role_responsibility_rec.responsibility_type,
10680 x_return_status => x_return_status );
10681
10682 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10683 hz_utility_v2pub.debug(p_message=>'responsibility_type is lookup code in lookup type SITE_USE_CODE. ' ||
10684 'x_return_status = ' || x_return_status,
10685 p_prefix =>l_debug_prefix,
10686 p_msg_level=>fnd_log.level_statement);
10687 END IF;
10688
10689
10690 l_responsibility_type := p_role_responsibility_rec.responsibility_type;
10691 END IF;
10692
10693 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10694 hz_utility_v2pub.debug(p_message=>'(+) after validate responsibility_type ... ' ||
10695 'x_return_status = ' || x_return_status,
10696 p_prefix =>l_debug_prefix,
10697 p_msg_level=>fnd_log.level_statement);
10698 END IF;
10699
10700
10701 ----------------------------------------------
10702 -- validate cust_account_role_id
10703 ----------------------------------------------
10704 /****Logical APIs - validation not required****/
10705 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10706 -- cust_account_role_id is mandatory field
10707 -- Since cust_account_role_id is non-updateable, we only need to check mandatory
10708 -- during creation.
10709
10710 IF p_create_update_flag = 'C' THEN
10711 validate_mandatory (
10712 p_create_update_flag => p_create_update_flag,
10713 p_column => 'cust_account_role_id',
10714 p_column_value => p_role_responsibility_rec.cust_account_role_id,
10715 x_return_status => x_return_status );
10716
10717 l_cust_account_role_id := p_role_responsibility_rec.cust_account_role_id;
10718
10719 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10720 hz_utility_v2pub.debug(p_message=>'cust_account_role_id is mandatory. ' ||
10721 'x_return_status = ' || x_return_status,
10722 p_prefix =>l_debug_prefix,
10723 p_msg_level=>fnd_log.level_statement);
10724 END IF;
10725 END IF;
10726
10727 -- cust_account_role_id is non-updateable
10728 IF p_create_update_flag = 'U' AND
10729 p_role_responsibility_rec.cust_account_role_id IS NOT NULL
10730 THEN
10731 validate_nonupdateable (
10732 p_column => 'cust_account_role_id',
10733 p_column_value => p_role_responsibility_rec.cust_account_role_id,
10734 p_old_column_value => l_cust_account_role_id,
10735 x_return_status => x_return_status );
10736
10737 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10738 hz_utility_v2pub.debug(p_message=>'cust_account_role_id is non-updateable. ' ||
10739 'x_return_status = ' || x_return_status,
10740 p_prefix =>l_debug_prefix,
10741 p_msg_level=>fnd_log.level_statement);
10742 END IF;
10743
10744 END IF;
10745
10746 -- cust_account_role_id is foreign key to hz_cust_account_roles.
10747 -- Since cust_account_role_id is mandatory and non-updateable,
10748 -- we only need to check FK during creation.
10749
10750 IF p_create_update_flag = 'C' AND
10751 p_role_responsibility_rec.cust_account_role_id IS NOT NULL AND
10752 p_role_responsibility_rec.cust_account_role_id <> FND_API.G_MISS_NUM
10753 THEN
10754 check_cust_account_role_fk (
10755 p_column => 'cust_account_role_id',
10756 p_column_value => p_role_responsibility_rec.cust_account_role_id,
10757 x_return_status => x_return_status );
10758
10759 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10760 hz_utility_v2pub.debug(p_message=>'cust_account_role_id is foreign key to hz_cust_account_roles. ' ||
10761 'x_return_status = ' || x_return_status,
10762 p_prefix =>l_debug_prefix,
10763 p_msg_level=>fnd_log.level_statement);
10764 END IF;
10765
10766 END IF;
10767
10768 -- The combination of cust_account_role_id and responsibility_type
10769 -- should be unique.
10770
10771 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10772 hz_utility_v2pub.debug(p_message=>'cust_account_role_id = ' || l_cust_account_role_id || ' ' ||
10773 'role_responsibility_id = ' || l_responsibility_type || ' ' ||
10774 'create_update_flag = ' || p_create_update_flag || ' ' ||
10775 'p_rowid = ' || p_rowid || ' ' ||
10776 'x_return_status = ' || x_return_status,
10777 p_prefix =>l_debug_prefix,
10778 p_msg_level=>fnd_log.level_statement);
10779 END IF;
10780 END IF;
10781
10782 BEGIN
10783 SELECT 'Y' INTO l_dummy
10784 FROM HZ_ROLE_RESPONSIBILITY
10785 WHERE CUST_ACCOUNT_ROLE_ID = l_cust_account_role_id
10786 AND RESPONSIBILITY_TYPE = l_responsibility_type
10787 AND ( p_create_update_flag = 'C' OR
10788 ( p_create_update_flag = 'U' AND ROWID <> p_rowid ) )
10789 AND ROWNUM = 1;
10790
10791 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10792 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_role_id - responsibility_type' );
10793 FND_MSG_PUB.ADD;
10794 x_return_status := FND_API.G_RET_STS_ERROR;
10795 EXCEPTION
10796 WHEN NO_DATA_FOUND THEN
10797 NULL;
10798 END;
10799
10800 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10801 hz_utility_v2pub.debug(p_message=>'combination of cust_account_role_id and responsibility_type should be unique. ' ||
10802 'x_return_status = ' || x_return_status,
10803 p_prefix =>l_debug_prefix,
10804 p_msg_level=>fnd_log.level_statement);
10805 END IF;
10806
10807 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10808 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_role_id ... ' ||
10809 'x_return_status = ' || x_return_status,
10810 p_prefix =>l_debug_prefix,
10811 p_msg_level=>fnd_log.level_statement);
10812 END IF;
10813
10814
10815 ----------------------------------------------
10816 -- validate orig_system_reference
10817 ----------------------------------------------
10818 /****Logical APIs - validation not required****/
10819 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10820 -- orig_system_reference is non-updateable field
10821 IF p_create_update_flag = 'U' AND
10822 p_role_responsibility_rec.orig_system_reference IS NOT NULL
10823 THEN
10824 validate_nonupdateable (
10825 p_column => 'orig_system_reference',
10826 p_column_value => p_role_responsibility_rec.orig_system_reference,
10827 p_old_column_value => l_orig_system_reference,
10828 x_return_status => x_return_status );
10829
10830 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10831 hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
10832 'x_return_status = ' || x_return_status,
10833 p_prefix =>l_debug_prefix,
10834 p_msg_level=>fnd_log.level_statement);
10835 END IF;
10836
10837
10838 END IF;
10839
10840 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10841 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
10842 'x_return_status = ' || x_return_status,
10843 p_prefix =>l_debug_prefix,
10844 p_msg_level=>fnd_log.level_statement);
10845 END IF;
10846 END IF;
10847
10848 ----------------------------------------------
10849 -- validate primary_flag
10850 ----------------------------------------------
10851 /****Logical APIs - validation not required****/
10852 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10853 -- primary_flag is lookup code in lookup type YES/NO
10854 IF p_role_responsibility_rec.primary_flag IS NOT NULL AND
10855 p_role_responsibility_rec.primary_flag <> FND_API.G_MISS_CHAR
10856 THEN
10857 validate_lookup (
10858 p_column => 'primary_flag',
10859 p_lookup_type => 'YES/NO',
10860 p_column_value => p_role_responsibility_rec.primary_flag,
10861 x_return_status => x_return_status );
10862
10863 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10864 hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
10865 'x_return_status = ' || x_return_status,
10866 p_prefix =>l_debug_prefix,
10867 p_msg_level=>fnd_log.level_statement);
10868 END IF;
10869
10870 END IF;
10871 END IF;
10872
10873 -- primary_flag is unique per cust_account_role_id
10874 IF p_role_responsibility_rec.primary_flag = 'Y' THEN
10875 IF p_create_update_flag = 'C' THEN
10876 l_cust_account_role_id := p_role_responsibility_rec.cust_account_role_id;
10877 END IF;
10878
10879 BEGIN
10880 SELECT 'Y' INTO l_dummy
10881 FROM HZ_ROLE_RESPONSIBILITY
10882 WHERE CUST_ACCOUNT_ROLE_ID = l_cust_account_role_id
10883 AND PRIMARY_FLAG = 'Y'
10884 AND ( p_create_update_flag = 'C' OR
10885 p_create_update_flag = 'U' AND ROWID <> p_rowid )
10886 AND ROWNUM = 1;
10887
10888 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ROLE_PRIMARY' );
10889 FND_MSG_PUB.ADD;
10890 x_return_status := FND_API.G_RET_STS_ERROR;
10891 EXCEPTION
10892 WHEN NO_DATA_FOUND THEN
10893 NULL;
10894 END;
10895
10896 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10897 hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_account_role_id. ' ||
10898 'x_return_status = ' || x_return_status,
10899 p_prefix =>l_debug_prefix,
10900 p_msg_level=>fnd_log.level_statement);
10901 END IF;
10902
10903 END IF;
10904
10905 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10906 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
10907 'x_return_status = ' || x_return_status,
10908 p_prefix =>l_debug_prefix,
10909 p_msg_level=>fnd_log.level_statement);
10910 END IF;
10911
10912
10913 --------------------------------------
10914 -- validate created_by_module
10915 --------------------------------------
10916
10917 validate_created_by_module(
10918 p_create_update_flag => p_create_update_flag,
10919 p_created_by_module => p_role_responsibility_rec.created_by_module,
10920 p_old_created_by_module => l_created_by_module,
10921 x_return_status => x_return_status);
10922
10923 --------------------------------------
10924 -- validate application_id
10925 --------------------------------------
10926
10927 validate_application_id(
10928 p_create_update_flag => p_create_update_flag,
10929 p_application_id => p_role_responsibility_rec.application_id,
10930 p_old_application_id => l_application_id,
10931 x_return_status => x_return_status);
10932
10933 -- Debug info.
10934
10935 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10936 hz_utility_v2pub.debug(p_message=>'validate_role_responsibility (-)',
10937 p_prefix=>l_debug_prefix,
10938 p_msg_level=>fnd_log.level_procedure);
10939 END IF;
10940
10941 END validate_role_responsibility;
10942
10943 --------------------------------------
10944 -- private procedures and functions
10945 --------------------------------------
10946
10947 PROCEDURE check_cust_account_fk (
10948 p_column IN VARCHAR2,
10949 p_column_value IN NUMBER,
10950 x_return_status IN OUT NOCOPY VARCHAR2
10951 ) IS
10952
10953 l_dummy VARCHAR2(1);
10954
10955 BEGIN
10956
10957 -- 2310474 : cust_account_id = -1 for profile at party level
10958
10959 IF p_column_value <> -1 THEN
10960
10961 SELECT 'Y' INTO l_dummy
10962 FROM HZ_CUST_ACCOUNTS
10963 WHERE CUST_ACCOUNT_ID = p_column_value;
10964
10965 END IF;
10966
10967 EXCEPTION
10968 WHEN NO_DATA_FOUND THEN
10969 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10970 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_id' );
10971 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10972 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_accounts' );
10973 FND_MSG_PUB.ADD;
10974 x_return_status := FND_API.G_RET_STS_ERROR;
10975
10976 END check_cust_account_fk;
10977
10978 PROCEDURE check_cust_acct_site_fk (
10979 p_column IN VARCHAR2,
10980 p_column_value IN NUMBER,
10981 p_org_id IN NUMBER, -- 3456489
10982 x_return_status IN OUT NOCOPY VARCHAR2
10983 ) IS
10984
10985 l_dummy VARCHAR2(1);
10986 l_debug_prefix VARCHAR2(30) := '';
10987
10988 BEGIN
10989
10990 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10991 hz_utility_v2pub.debug(p_message=>' check_cust_acct_site_fk (+) '||p_column_value
10992 ||' Org Id '||p_org_id,
10993 p_prefix=>l_debug_prefix,
10994 p_msg_level=>fnd_log.level_procedure);
10995 END IF;
10996
10997 SELECT 'Y' INTO l_dummy
10998 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
10999 WHERE CUST_ACCT_SITE_ID = p_column_value
11000 AND ORG_ID = p_org_id; -- Bug 3456489
11001
11002 EXCEPTION
11003 WHEN NO_DATA_FOUND THEN
11004 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11005 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_acct_site_id' );
11006 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11007 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_acct_sites' );
11008 FND_MSG_PUB.ADD;
11009 x_return_status := FND_API.G_RET_STS_ERROR;
11010
11011 END check_cust_acct_site_fk;
11012
11013 PROCEDURE check_cust_site_use_fk (
11014 p_column IN VARCHAR2,
11015 p_column_value IN NUMBER,
11016 x_return_status IN OUT NOCOPY VARCHAR2
11017 ) IS
11018
11019 l_return_status VARCHAR2(1);
11020 l_org_id HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
11021 BEGIN
11022
11023 SELECT org_id INTO l_org_id
11024 FROM HZ_CUST_SITE_USES_ALL
11025 WHERE SITE_USE_ID = p_column_value;
11026
11027 -- Bug 4650473. Check if org is accessible.
11028 BEGIN
11029 MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
11030 EXCEPTION
11031 WHEN OTHERS
11032 THEN
11033 x_return_status := FND_API.G_RET_STS_ERROR;
11034 END;
11035
11036 EXCEPTION
11037 WHEN NO_DATA_FOUND THEN
11038 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11039 FND_MESSAGE.SET_TOKEN( 'FK', 'site_use_id' );
11040 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11041 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_site_uses' );
11042 FND_MSG_PUB.ADD;
11043 x_return_status := FND_API.G_RET_STS_ERROR;
11044
11045 END check_cust_site_use_fk;
11046 PROCEDURE check_cust_site_use_cont_fk(
11047 p_column IN VARCHAR2,
11048 p_column_value IN NUMBER,
11049 p_customer_id IN NUMBER,
11050 x_return_status IN OUT NOCOPY VARCHAR2
11051 ) IS
11052
11053 l_dummy VARCHAR2(1);
11054 BEGIN
11055 SELECT 'Y' INTO l_dummy
11056 FROM HZ_CUST_ACCOUNT_ROLES
11057 WHERE CUST_ACCOUNT_ROLE_ID = p_column_value
11058 AND CUST_ACCOUNT_ID = p_customer_id;
11059
11060 EXCEPTION
11061 WHEN NO_DATA_FOUND THEN
11062 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11063 FND_MESSAGE.SET_TOKEN( 'FK', 'contact_id' );
11064 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11065 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_account_roles' );
11066 FND_MSG_PUB.ADD;
11067 x_return_status := FND_API.G_RET_STS_ERROR;
11068
11069 END check_cust_site_use_cont_fk;
11070
11071 PROCEDURE check_cust_account_role_fk (
11072 p_column IN VARCHAR2,
11073 p_column_value IN NUMBER,
11074 x_return_status IN OUT NOCOPY VARCHAR2
11075 ) IS
11076
11077 l_dummy VARCHAR2(1);
11078
11079 BEGIN
11080 SELECT 'Y' INTO l_dummy
11081 FROM HZ_CUST_ACCOUNT_ROLES
11082 WHERE CUST_ACCOUNT_ROLE_ID = p_column_value;
11083
11084 EXCEPTION
11085 WHEN NO_DATA_FOUND THEN
11086 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11087 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_role_id' );
11088 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11089 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_account_roles' );
11090 FND_MSG_PUB.ADD;
11091 x_return_status := FND_API.G_RET_STS_ERROR;
11092
11093 END check_cust_account_role_fk;
11094
11095 PROCEDURE check_per_all_people_f_fk (
11096 p_column IN VARCHAR2,
11097 p_column_value IN NUMBER,
11098 x_return_status IN OUT NOCOPY VARCHAR2
11099 ) IS
11100
11101 l_dummy VARCHAR2(1);
11102
11103 BEGIN
11104
11105 SELECT 'Y' INTO l_dummy
11106 FROM PER_ALL_PEOPLE_F
11107 WHERE PERSON_ID = p_column_value
11108 /* Bug 3591694.
11109 Retrieve only those records, which are effective on sysdate.
11110 Both effective_start_date and effective_end_date are not null columns and
11111 as such there is no need to explicitely do a NVL.
11112 */
11113 AND EFFECTIVE_START_DATE <= SYSDATE
11114 AND EFFECTIVE_END_DATE >= SYSDATE
11115 AND ROWNUM = 1;
11116
11117 EXCEPTION
11118 WHEN NO_DATA_FOUND THEN
11119 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11120 FND_MESSAGE.SET_TOKEN( 'FK', 'person_id' );
11121 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11122 FND_MESSAGE.SET_TOKEN( 'TABLE', 'per_all_people_f' );
11123 FND_MSG_PUB.ADD;
11124 x_return_status := FND_API.G_RET_STS_ERROR;
11125
11126 END check_per_all_people_f_fk;
11127
11128 PROCEDURE check_collector_fk (
11129 p_column IN VARCHAR2,
11130 p_column_value IN NUMBER,
11131 x_return_status IN OUT NOCOPY VARCHAR2
11132 ) IS
11133
11134 l_dummy VARCHAR2(1);
11135
11136 BEGIN
11137
11138 SELECT 'Y' INTO l_dummy
11139 FROM AR_COLLECTORS
11140 WHERE COLLECTOR_ID = p_column_value;
11141
11142 EXCEPTION
11143 WHEN NO_DATA_FOUND THEN
11144 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11145 FND_MESSAGE.SET_TOKEN( 'FK', 'collector_id' );
11146 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11147 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_collectors');
11148 FND_MSG_PUB.ADD;
11149 x_return_status := FND_API.G_RET_STS_ERROR;
11150
11151 END check_collector_fk;
11152
11153 PROCEDURE check_party_fk (
11154 p_column IN VARCHAR2,
11155 p_column_value IN NUMBER,
11156 x_return_status IN OUT NOCOPY VARCHAR2
11157 ) IS
11158
11159 l_dummy VARCHAR2(1);
11160
11161 BEGIN
11162
11163 SELECT 'Y' INTO l_dummy
11164 FROM HZ_PARTIES
11165 WHERE PARTY_ID = p_column_value;
11166
11167 EXCEPTION
11168 WHEN NO_DATA_FOUND THEN
11169 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11170 FND_MESSAGE.SET_TOKEN( 'FK', 'party_id' );
11171 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11172 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_parties' );
11173 FND_MSG_PUB.ADD;
11174 x_return_status := FND_API.G_RET_STS_ERROR;
11175
11176 END check_party_fk;
11177
11178 PROCEDURE check_party_site_fk (
11179 p_column IN VARCHAR2,
11180 p_column_value IN NUMBER,
11181 x_return_status IN OUT NOCOPY VARCHAR2
11182 ) IS
11183
11184 l_dummy VARCHAR2(1);
11185
11186 BEGIN
11187
11188 BEGIN
11189 SELECT 'Y' INTO l_dummy
11190 FROM HZ_PARTY_SITES
11191 WHERE PARTY_SITE_ID = p_column_value;
11192 EXCEPTION
11193 WHEN NO_DATA_FOUND THEN
11194 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11195 FND_MESSAGE.SET_TOKEN( 'FK', 'party_site_id' );
11196 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11197 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_party_sites' );
11198 FND_MSG_PUB.ADD;
11199 x_return_status := FND_API.G_RET_STS_ERROR;
11200 END;
11201
11202 END check_party_site_fk;
11203
11204 PROCEDURE check_currency_fk (
11205 p_column IN VARCHAR2,
11206 p_column_value IN VARCHAR2,
11207 x_return_status IN OUT NOCOPY VARCHAR2
11208 ) IS
11209
11210 l_dummy VARCHAR2(1);
11211
11212 BEGIN
11213 -- Bug Fix: 3877782
11214 SELECT 'Y' INTO l_dummy
11215 FROM FND_CURRENCIES
11216 WHERE CURRENCY_CODE = p_column_value
11217 AND CURRENCY_FLAG = 'Y'
11218 AND ENABLED_FLAG = 'Y'
11219 AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE,SYSDATE))
11220 AND TRUNC(NVL(END_DATE_ACTIVE,SYSDATE));
11221
11222 EXCEPTION
11223 WHEN NO_DATA_FOUND THEN
11224 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11225 FND_MESSAGE.SET_TOKEN( 'FK', 'currency_code' );
11226 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11227 FND_MESSAGE.SET_TOKEN( 'TABLE', 'fnd_currencies' );
11228 FND_MSG_PUB.ADD;
11229 x_return_status := FND_API.G_RET_STS_ERROR;
11230
11231 END check_currency_fk;
11232
11233 PROCEDURE check_oe_ship_methods_v_fk (
11234 p_entity IN VARCHAR2,
11235 p_column IN VARCHAR2,
11236 p_column_value IN VARCHAR2,
11237 x_return_status IN OUT NOCOPY VARCHAR2
11238 ) IS
11239
11240 l_org_id NUMBER;
11241
11242 BEGIN
11243 --Bug Fix 2262248, API should NOT DISALLOW the specification of a value for
11244 --ship-via based on multi-org installation status for ACOUNT and SITE USE levels.
11245 /**************************************************************************
11246 IF p_entity = 'ACCOUNT' THEN
11247
11248 BEGIN
11249 SELECT MIN(ORG_ID) INTO l_org_id
11250 FROM AR_SYSTEM_PARAMETERS;
11251
11252 IF l_org_id IS NOT NULL THEN
11253 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_COLUMN_SHOULD_BE_NULL' );
11254 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11255 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_accounts' );
11256 FND_MSG_PUB.ADD;
11257 x_return_status := FND_API.G_RET_STS_ERROR;
11258
11259 RETURN;
11260 END IF;
11261
11262 --Bug Fix 2183072 Handled the exception
11263 EXCEPTION
11264 WHEN NO_DATA_FOUND THEN
11265 FND_MESSAGE.SET_NAME( 'AR', 'AR_NO_ROW_IN_SYSTEM_PARAMETERS');
11266 FND_MSG_PUB.ADD;
11267 x_return_status := FND_API.G_RET_STS_ERROR;
11268 END ;
11269 END IF;
11270 **************************************************************************/
11271 validate_lookup (
11272 p_column => p_column,
11273 p_lookup_table => 'OE_SHIP_METHODS_V',
11274 p_lookup_type => 'SHIP_METHOD',
11275 p_column_value => p_column_value,
11276 x_return_status => x_return_status );
11277
11278 END check_oe_ship_methods_v_fk;
11279
11280 PROCEDURE check_payterm_id_fk (
11281 p_column IN VARCHAR2,
11282 p_column_value IN VARCHAR2,
11283 x_return_status IN OUT NOCOPY VARCHAR2
11284 ) IS
11285 l_dummy VARCHAR2(1);
11286 BEGIN
11287
11288 -- Modified the below query for bug # 5529044
11289 -- Now this will validate only for a valid payment term.
11290 -- Validate that the payment_term_id passed should be a non Balance Forwarded Billing payment term.
11291 -- Changed as a part of Balance Forwarded Billing enhancement. bug # 4935721
11292 SELECT 'Y'
11293 into l_dummy
11294 from ra_terms_b
11295 where term_id = p_column_value
11296 -- and billing_cycle_id is null
11297 and trunc(sysdate) between
11298 start_date_active and nvl(end_date_active,trunc(sysdate));
11299 /*
11300 SELECT 'Y' INTO l_dummy
11301 FROM RA_TERMS ra
11302 WHERE ra.term_id = p_column_value
11303 AND trunc(sysdate) between START_DATE_ACTIVE and nvl(END_DATE_ACTIVE,trunc(sysdate));
11304 */
11305 EXCEPTION
11306 WHEN NO_DATA_FOUND THEN
11307 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11308 FND_MESSAGE.SET_TOKEN( 'FK', 'payment_term_id' );
11309 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11310 FND_MESSAGE.SET_TOKEN( 'TABLE', 'RA_TERMS' );
11311 FND_MSG_PUB.ADD;
11312 x_return_status := FND_API.G_RET_STS_ERROR;
11313 END check_payterm_id_fk;
11314
11315 PROCEDURE check_late_charge_term_id_fk (
11316 p_column IN VARCHAR2,
11317 p_column_value IN NUMBER,
11318 p_cons_inv_flag IN VARCHAR2,
11319 x_return_status IN OUT NOCOPY VARCHAR2
11320 ) IS
11321 l_dummy VARCHAR2(1);
11322 BEGIN
11323
11324 -- if cons_inv_flag = 'N' validate that the late charge payment term that
11325 -- does not have a balance forward billing cycle. If cons_inv_flag = 'Y' then,
11326 -- Validate that late charge payment term that has a balance forward billing cycle.
11327 if p_cons_inv_flag = 'N' then
11328 begin
11329 SELECT 'Y'
11330 into l_dummy
11331 from ra_terms_b
11332 where term_id = p_column_value
11333 and billing_cycle_id is null
11334 and trunc(sysdate) between
11335 start_date_active and nvl(end_date_active,trunc(sysdate));
11336
11337 EXCEPTION
11338 WHEN NO_DATA_FOUND THEN
11339 -- Balance forward billing has not been enabled.
11340 -- Pass a late charge payment term that does not have a balance forward billing cycle.
11341 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_PAY_TERM_DISABLED' );
11342 FND_MSG_PUB.ADD;
11343 x_return_status := FND_API.G_RET_STS_ERROR;
11344 end;
11345 elsif p_cons_inv_flag = 'Y' then
11346 begin
11347 SELECT 'Y'
11348 into l_dummy
11349 from ra_terms_b t
11350 where t.term_id = p_column_value
11351 and t.billing_cycle_id is not null
11352 and trunc(sysdate) between
11353 t.start_date_active and nvl(t.end_date_active,trunc(sysdate));
11354
11355 EXCEPTION
11356 WHEN NO_DATA_FOUND THEN
11357 -- Balance forward billing has been enabled.
11358 -- Pass a late charge payment term that has a balance forward billing cycle.
11359 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_PAY_TERM_ENABLED' );
11360 FND_MSG_PUB.ADD;
11361 x_return_status := FND_API.G_RET_STS_ERROR;
11362 end;
11363 end if;
11364
11365 END check_late_charge_term_id_fk;
11366
11367 PROCEDURE check_message_text_id_fk (
11368 p_column IN VARCHAR2,
11369 p_column_value IN NUMBER,
11370 x_return_status IN OUT NOCOPY VARCHAR2
11371 ) IS
11372 l_dummy VARCHAR2(1);
11373 BEGIN
11374
11375 -- Validate that the message_text_id passed should be a valid
11376 -- value in AR_STANDARD_TEXT.STANDARD_TEXT_ID. bug # 5065436
11377 SELECT 'Y'
11378 into l_dummy
11379 from AR_STANDARD_TEXT
11380 where STANDARD_TEXT_ID = p_column_value
11381 and trunc(sysdate) between
11382 start_date and nvl(end_date,trunc(sysdate));
11383 EXCEPTION
11384 WHEN NO_DATA_FOUND THEN
11385 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11386 FND_MESSAGE.SET_TOKEN( 'FK', 'standard_text_id' );
11387 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11388 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_standard_text' );
11389 FND_MSG_PUB.ADD;
11390 x_return_status := FND_API.G_RET_STS_ERROR;
11391 END check_message_text_id_fk;
11392
11393 PROCEDURE check_exchange_rate_type_fk (
11394 p_column IN VARCHAR2,
11395 p_column_value IN VARCHAR2,
11396 x_return_status IN OUT NOCOPY VARCHAR2
11397 ) IS
11398 l_dummy VARCHAR2(1);
11399 BEGIN
11400
11401 -- Validate that the exchange_rate_type passed should be a valid
11402 -- value in GL_DAILY_CONVERSION_TYPES. where type is not USER. bug # 5065436
11403 SELECT 'Y'
11404 into l_dummy
11405 from gl_daily_conversion_types
11406 where conversion_type <> 'USER'
11407 and conversion_type = p_column_value;
11408
11409 EXCEPTION
11410 WHEN NO_DATA_FOUND THEN
11411 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11412 FND_MESSAGE.SET_TOKEN( 'FK', 'conversion_type' );
11413 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11414 FND_MESSAGE.SET_TOKEN( 'TABLE', 'gl_daily_conversion_types' );
11415 FND_MSG_PUB.ADD;
11416 x_return_status := FND_API.G_RET_STS_ERROR;
11417 END check_exchange_rate_type_fk;
11418
11419 PROCEDURE check_charge_schedule_id_fk (
11420 p_column IN VARCHAR2,
11421 p_column_value IN NUMBER,
11422 x_return_status IN OUT NOCOPY VARCHAR2
11423 ) IS
11424 l_dummy VARCHAR2(1);
11425 BEGIN
11426
11427 -- Validate that the schedule_id passed should be a valid
11428 -- value in ar_charge_schedules. bug # 5065436
11429 SELECT 'Y'
11430 into l_dummy
11431 from ar_charge_schedules
11432 where schedule_id = p_column_value;
11433
11434 EXCEPTION
11435 WHEN NO_DATA_FOUND THEN
11436 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11437 FND_MESSAGE.SET_TOKEN( 'FK', 'schedule_id' );
11438 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11439 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_charge_schedules' );
11440 FND_MSG_PUB.ADD;
11441 x_return_status := FND_API.G_RET_STS_ERROR;
11442 END check_charge_schedule_id_fk;
11443
11444 PROCEDURE check_finchrg_trx_fk (
11445 p_column IN VARCHAR2,
11446 p_column_value IN VARCHAR2,
11447 p_org_id IN NUMBER, -- Bug 3456489
11448 x_return_status IN OUT NOCOPY VARCHAR2
11449 ) IS
11450 l_dummy VARCHAR2(1);
11451 BEGIN
11452 SELECT 'Y' INTO l_dummy
11453 FROM AR_RECEIVABLES_TRX_ALL art
11454 WHERE art.receivables_trx_id = p_column_value
11455 AND status = 'A'
11456 AND art.org_id = p_org_id; -- Bug 3456489
11457 EXCEPTION
11458 WHEN NO_DATA_FOUND THEN
11459 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11460 FND_MESSAGE.SET_TOKEN( 'FK', 'finchrg_receivables_trx_id' );
11461 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11462 FND_MESSAGE.SET_TOKEN( 'TABLE', 'AR_RECEIVABLES_TRX' );
11463 FND_MSG_PUB.ADD;
11464 x_return_status := FND_API.G_RET_STS_ERROR;
11465 END check_finchrg_trx_fk;
11466
11467 PROCEDURE check_price_list_fk (
11468 p_column IN VARCHAR2,
11469 p_column_value IN VARCHAR2,
11470 x_return_status IN OUT NOCOPY VARCHAR2
11471 ) IS
11472 l_dummy VARCHAR2(1);
11473 BEGIN
11474 --Bug Fix 2262616, changed the query, which was lookong at SO_PRICE_LISTS
11475 --to query qp_list_headers_b with active_flag
11476 /**************************************************************************
11477 SELECT 'Y' INTO l_dummy
11478 FROM SO_PRICE_LISTS pl
11479 WHERE pl.price_list_id = p_column_value
11480 AND sysdate between nvl(pl.start_date_active,sysdate) and nvl(pl.end_date_active,sysdate);
11481 ***************************************************************************/
11482 SELECT 'Y'
11483 INTO l_dummy
11484 FROM qp_list_headers_b lh
11485 WHERE list_header_id = p_column_value
11486 AND list_type_code = 'PRL'
11487 AND (sysdate between nvl(lh.start_date_active,sysdate) and nvl(lh.end_date_active,sysdate)
11488 AND nvl(active_flag, 'N') = 'Y');
11489 EXCEPTION
11490 WHEN NO_DATA_FOUND THEN
11491 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11492 FND_MESSAGE.SET_TOKEN( 'FK', 'price_list_id' );
11493 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11494 -- Bug 3591694 FND_MESSAGE.SET_TOKEN( 'TABLE', 'SO_PRICE_LISTS' );
11495 FND_MESSAGE.SET_TOKEN( 'TABLE', 'QP_LIST_HEADERS_B' );
11496
11497 FND_MSG_PUB.ADD;
11498 x_return_status := FND_API.G_RET_STS_ERROR;
11499 END check_price_list_fk;
11500
11501 PROCEDURE check_item_cross_ref(
11502 p_column IN VARCHAR2,
11503 p_column_value IN VARCHAR2,
11504 x_return_status IN OUT NOCOPY VARCHAR2
11505 ) IS
11506 l_dummy VARCHAR2(1);
11507 BEGIN
11508 SELECT 'Y' INTO l_dummy
11509 FROM MTL_CROSS_REFERENCE_TYPES mtl
11510 WHERE mtl.cross_reference_type = p_column_value;
11511 EXCEPTION
11512 WHEN NO_DATA_FOUND THEN
11513 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11514 FND_MESSAGE.SET_TOKEN( 'FK', 'item_cross_ref_pref' );
11515 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11516 FND_MESSAGE.SET_TOKEN( 'TABLE', 'mtl_cross_reference_types' );
11517 FND_MSG_PUB.ADD;
11518 x_return_status := FND_API.G_RET_STS_ERROR;
11519 END check_item_cross_ref;
11520
11521 PROCEDURE check_tax_code(
11522 p_column IN VARCHAR2,
11523 p_column_value IN VARCHAR2,
11524 -- Bug 4713150
11525 -- p_org_id IN NUMBER, -- Bug 3456489
11526 -- Bug 5136396: to indicate from where this procedure is called from
11527 p_called_from IN VARCHAR2,
11528 x_return_status IN OUT NOCOPY VARCHAR2
11529 ) IS
11530
11531 l_dummy varchar2(1);
11532 l_org_id number;
11533 -- l_sob_id NUMBER;
11534 BEGIN
11535 -- Bug 5136396
11536 IF p_called_from = 'validate_cust_account' THEN
11537 l_org_id := nvl(mo_global.get_current_org_id, mo_utils.get_default_org_id);
11538 ELSE
11539 -- if from validate_cust_site_use
11540 l_org_id := mo_global.get_current_org_id;
11541 END IF;
11542
11543 -- Bug 4713150
11544 SELECT 'Y' INTO l_dummy
11545 FROM zx_output_classifications_v
11546 WHERE lookup_type = 'ZX_OUTPUT_CLASSIFICATIONS'
11547 AND lookup_code = p_column_value
11548 AND trunc(sysdate) BETWEEN trunc(start_date_active) AND nvl(trunc(end_date_active),trunc(sysdate))
11549 AND enabled_flag = 'Y'
11550 -- Bug 5136396
11551 AND org_id IN (l_org_id, -99)
11552 AND ROWNUM = 1;
11553
11554 /*
11555 -- Bug 3456489
11556 l_sob_id := HZ_MO_GLOBAL_CACHE.get_set_of_books_id(p_org_id);
11557
11558 SELECT 'Y' INTO l_dummy
11559 FROM AR_VAT_TAX_ALL avt
11560 WHERE avt.tax_code = p_column_value
11561 AND trunc(SYSDATE) BETWEEN START_DATE AND NVL(END_DATE,trunc(sysdate))
11562 AND avt.enabled_flag = 'Y'
11563 AND avt.tax_class = 'O'
11564 AND avt.displayed_flag = 'Y'
11565 AND avt.set_of_books_id = l_sob_id
11566 AND avt.org_id = p_org_id;
11567 */
11568 EXCEPTION
11569 WHEN NO_DATA_FOUND THEN
11570 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11571 FND_MESSAGE.SET_TOKEN( 'FK', 'tax_code' );
11572 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11573 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ZX_OUTPUT_CLASSIFICATIONS_V' );
11574 FND_MSG_PUB.ADD;
11575 x_return_status := FND_API.G_RET_STS_ERROR;
11576 END check_tax_code;
11577
11578 PROCEDURE check_warehouse(
11579 p_column IN VARCHAR2,
11580 p_column_value IN VARCHAR2,
11581 x_return_status IN OUT NOCOPY VARCHAR2
11582 ) IS
11583 l_dummy VARCHAR2(1);
11584 BEGIN
11585 SELECT 'Y' INTO l_dummy
11586 FROM ORG_ORGANIZATION_DEFINITIONS org
11587 WHERE org.organization_id = p_column_value
11588 AND trunc(sysdate) <= nvl(trunc(org.disable_date),trunc(sysdate));
11589 EXCEPTION
11590 WHEN NO_DATA_FOUND THEN
11591 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11592 FND_MESSAGE.SET_TOKEN( 'FK', 'warehouse_id' );
11593 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11594 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ORG_ORGANIZATION_DEFINITIONS' );
11595 FND_MSG_PUB.ADD;
11596 x_return_status := FND_API.G_RET_STS_ERROR;
11597 END check_warehouse;
11598
11599 PROCEDURE check_prim_salesrep(
11600 p_column IN VARCHAR2,
11601 p_column_value IN VARCHAR2,
11602 p_org_id IN NUMBER, -- Bug 3456489
11603 x_return_status IN OUT NOCOPY VARCHAR2
11604 ) IS
11605
11606 l_dummy varchar2(1);
11607 BEGIN
11608
11609 /*
11610 show err;
11611 SELECT 'Y' INTO l_dummy
11612 -- FROM RA_SALESREPS ras -- Bug 3456489
11613 FROM JTF_RS_SALESREP ras
11614 WHERE ras.salesrep_id = p_column_value
11615 AND ras.org_id = p_org_id
11616 AND sysdate between nvl(start_date_active,sysdate) and nvl(end_date_active,sysdate)
11617 AND nvl(status, 'A') = 'A'
11618 AND salesrep_id NOT IN( -1,-2);
11619 EXCEPTION
11620 WHEN NO_DATA_FOUND THEN
11621 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11622 FND_MESSAGE.SET_TOKEN( 'FK', 'primary_salesrep_id' );
11623 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11624 FND_MESSAGE.SET_TOKEN( 'TABLE', 'JTF_RS_SALESREPS' );
11625 FND_MSG_PUB.ADD;
11626 x_return_status := FND_API.G_RET_STS_ERROR;
11627 */
11628 x_return_status := FND_API.G_RET_STS_SUCCESS;
11629 END check_prim_salesrep;
11630 --Bug 7695461 : Commented x_return_status value setting and added NULL.
11631 PROCEDURE check_ord_type(
11632 p_column IN VARCHAR2,
11633 p_column_value IN VARCHAR2,
11634 p_org_id IN NUMBER, -- Bug 3456489
11635 x_return_status IN OUT NOCOPY VARCHAR2
11636 ) IS
11637
11638 l_dummy varchar2(1);
11639 BEGIN
11640
11641 /* Bug 3456489
11642 SELECT 'Y' INTO l_dummy
11643 FROM OE_ORDER_TYPES_V ot
11644 WHERE ot.order_type_id = p_column_value
11645 AND sysdate between nvl(ot.start_date_active,sysdate) and nvl(ot.end_date_active,sysdate);
11646 */
11647 /*
11648 show err;
11649 temporarily commenting this out as this table has not been created
11650 SELECT 'Y' INTO l_dummy
11651 FROM OE_TRANSACTION_TYPES_ALL ot
11652 WHERE ot.order_type_id = p_column_value
11653 AND ot.transaction_type_code = 'ORDER'
11654 AND ot.org_id = p_org_id
11655 AND sysdate between nvl(ot.start_date_active,sysdate)
11656 and nvl(ot.end_date_active,sysdate);
11657
11658 EXCEPTION
11659 WHEN NO_DATA_FOUND THEN
11660 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11661 FND_MESSAGE.SET_TOKEN( 'FK', 'order_type_id' );
11662 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11663 FND_MESSAGE.SET_TOKEN( 'TABLE', 'OE_TRANSACTIONS_TYPES_VL' );
11664 FND_MSG_PUB.ADD;
11665 x_return_status := FND_API.G_RET_STS_ERROR;
11666 */
11667 --x_return_status := FND_API.G_RET_STS_SUCCESS;
11668 NULL;
11669 END check_ord_type;
11670
11671 PROCEDURE check_partial_mandatory_column (
11672 p_column IN VARCHAR2,
11673 p_column_value IN NUMBER,
11674 x_return_status IN OUT NOCOPY VARCHAR2
11675 ) IS
11676
11677 BEGIN
11678
11679 IF p_column_value = FND_API.G_MISS_NUM THEN
11680 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
11681 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11682 FND_MSG_PUB.ADD;
11683 x_return_status := FND_API.G_RET_STS_ERROR;
11684 END IF;
11685
11686 END check_partial_mandatory_column;
11687
11688 PROCEDURE check_partial_mandatory_column (
11689 p_column IN VARCHAR2,
11690 p_column_value IN VARCHAR2,
11691 x_return_status IN OUT NOCOPY VARCHAR2
11692 ) IS
11693
11694 BEGIN
11695
11696 IF p_column_value = FND_API.G_MISS_CHAR THEN
11697 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
11698 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11699 FND_MSG_PUB.ADD;
11700 x_return_status := FND_API.G_RET_STS_ERROR;
11701 END IF;
11702
11703 END check_partial_mandatory_column;
11704
11705 PROCEDURE validate_gl_id (
11706 p_gl_name IN VARCHAR2,
11707 p_column_value IN NUMBER,
11708 p_coa_id IN NUMBER, -- Bug 3456489
11709 x_return_status IN OUT NOCOPY VARCHAR2
11710 ) IS
11711
11712 BEGIN
11713
11714 IF p_column_value IS NOT NULL AND
11715 p_column_value <> FND_API.G_MISS_NUM
11716 THEN
11717 IF NOT FND_FLEX_KEYVAL.validate_ccid (
11718 appl_short_name => 'SQLGL',
11719 key_flex_code => 'GL#',
11720 -- Bug 3456489
11721 -- structure_number => ARP_GLOBAL.chart_of_accounts_id,
11722 structure_number => p_coa_id,
11723 combination_id => p_column_value )
11724 THEN
11725 FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_' ||
11726 UPPER( p_gl_name ) || '_CCID_INVALID' );
11727 FND_MSG_PUB.ADD;
11728 x_return_status := FND_API.G_RET_STS_ERROR;
11729 END IF;
11730 END IF;
11731
11732 END validate_gl_id;
11733
11734 PROCEDURE check_auto_hierid_fk (
11735 p_column IN VARCHAR2,
11736 p_column_value IN NUMBER,
11737 x_return_status IN OUT NOCOPY VARCHAR2
11738 ) IS
11739
11740 l_dummy VARCHAR2(1);
11741
11742 BEGIN
11743
11744 SELECT 'Y' into l_dummy
11745 FROM ar_autocash_hierarchies h
11746 WHERE h.status = 'A'
11747 AND h.autocash_hierarchy_id =
11748 p_column_value;
11749 EXCEPTION
11750 WHEN NO_DATA_FOUND THEN
11751 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11752 FND_MESSAGE.SET_TOKEN( 'FK', p_column );
11753 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11754 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_autocash_hierarchies');
11755 FND_MSG_PUB.ADD;
11756 x_return_status := FND_API.G_RET_STS_ERROR;
11757
11758 END check_auto_hierid_fk;
11759
11760 PROCEDURE check_stat_cycid_fk (
11761 p_column IN VARCHAR2,
11762 p_column_value IN NUMBER,
11763 x_return_status IN OUT NOCOPY VARCHAR2
11764 ) IS
11765
11766 l_dummy VARCHAR2(1);
11767
11768 BEGIN
11769 SELECT 'Y' into l_dummy
11770 FROM ar_statement_cycles sc
11771 WHERE sc.status = 'A'
11772 AND sc.statement_cycle_id =
11773 p_column_value;
11774 EXCEPTION
11775 WHEN NO_DATA_FOUND THEN
11776 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11777 FND_MESSAGE.SET_TOKEN( 'FK', 'statement_cycle_id' );
11778 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11779 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_statement_cycles');
11780 FND_MSG_PUB.ADD;
11781 x_return_status := FND_API.G_RET_STS_ERROR;
11782
11783 END check_stat_cycid_fk;
11784
11785 PROCEDURE check_dunning_letid_fk (
11786 p_column IN VARCHAR2,
11787 p_column_value IN NUMBER,
11788 x_return_status IN OUT NOCOPY VARCHAR2
11789 ) IS
11790
11791 l_dummy VARCHAR2(1);
11792
11793 BEGIN
11794 SELECT 'Y' into l_dummy
11795 FROM ar_dunning_letter_sets dls
11796 WHERE dls.status = 'A'
11797 AND dls.dunning_letter_set_id =
11798 p_column_value;
11799 EXCEPTION
11800 WHEN NO_DATA_FOUND THEN
11801 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11802 FND_MESSAGE.SET_TOKEN( 'FK', 'dunning_letter_set_id' );
11803 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11804 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_dunning_letter_sets');
11805 FND_MSG_PUB.ADD;
11806 x_return_status := FND_API.G_RET_STS_ERROR;
11807
11808 END check_dunning_letid_fk;
11809
11810 PROCEDURE check_standard_terms_fk (
11811 p_column IN VARCHAR2,
11812 p_column_value IN NUMBER,
11813 p_cons_inv_flag IN VARCHAR2,
11814 p_ckeck_acc_bfb_enabled IN VARCHAR2,
11815 x_return_status IN OUT NOCOPY VARCHAR2
11816 ) IS
11817
11818 l_dummy VARCHAR2(1);
11819
11820 BEGIN
11821
11822 -- Modified the below validation for Balance Forwarded Billing
11823 -- if cons_inv_flag = 'N' validate that the payment term is a non Balanace
11824 -- Forward billing payment term. If cons_inv_flag = 'Y' then,
11825 -- Validate that the payment term is a Balance Forward billing payment term.
11826 if p_cons_inv_flag = 'N' then
11827 begin
11828 SELECT 'Y'
11829 into l_dummy
11830 from ra_terms_b
11831 where term_id = p_column_value
11832 -- and billing_cycle_id is null
11833 and trunc(sysdate) between
11834 start_date_active and nvl(end_date_active,trunc(sysdate));
11835
11836 EXCEPTION
11837 WHEN NO_DATA_FOUND THEN
11838 /* Modified the below error message setting for bug # 5529044
11839 Now we will look for any valid term_id if BFB is not enabled.
11840 -- If Balance Forward Billing is enabled for the site but disabled for the
11841 -- account. Pass a payment term without a balance forward billing cycle associated.
11842 if p_ckeck_acc_bfb_enabled = 'Y' then
11843 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_BAL_FWD_DISABLED' );
11844 -- Balance forward billing has not been enabled.
11845 -- Pass a payment term without a balance forward billing cycle associated.
11846 else
11847 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BAL_FWD_BILL_DISABLED' );
11848 end if;
11849 */
11850 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11851 FND_MESSAGE.SET_TOKEN( 'FK', 'standard_terms' );
11852 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11853 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_terms_b');
11854 FND_MSG_PUB.ADD;
11855 x_return_status := FND_API.G_RET_STS_ERROR;
11856 end;
11857 elsif p_cons_inv_flag = 'Y' then
11858 begin
11859 SELECT 'Y'
11860 into l_dummy
11861 from ra_terms_b t
11862 where t.term_id = p_column_value
11863 and t.billing_cycle_id is not null
11864 and trunc(sysdate) between
11865 t.start_date_active and nvl(t.end_date_active,trunc(sysdate));
11866
11867 EXCEPTION
11868 WHEN NO_DATA_FOUND THEN
11869 -- Balance forward billing has been enabled. Pass a payment term
11870 -- with a balance forward billing cycle associated.
11871 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BAL_FWD_BILL_ENABLED' );
11872 FND_MSG_PUB.ADD;
11873 x_return_status := FND_API.G_RET_STS_ERROR;
11874 end;
11875 end if;
11876
11877 /*
11878 SELECT 'Y' into l_dummy
11879 FROM ra_terms t
11880 WHERE trunc(sysdate)
11881 BETWEEN t.start_date_active AND
11882 nvl(t.end_date_active,trunc(sysdate))
11883 AND t.term_id =
11884 p_column_value;
11885 EXCEPTION
11886 WHEN NO_DATA_FOUND THEN
11887 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11888 FND_MESSAGE.SET_TOKEN( 'FK', 'standard_terms' );
11889 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11890 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_terms');
11891 FND_MSG_PUB.ADD;
11892 x_return_status := FND_API.G_RET_STS_ERROR;
11893 */
11894 END check_standard_terms_fk;
11895
11896 PROCEDURE check_grouping_ruleid_fk (
11897 p_column IN VARCHAR2,
11898 p_column_value IN NUMBER,
11899 x_return_status IN OUT NOCOPY VARCHAR2
11900 ) IS
11901
11902 l_dummy VARCHAR2(1);
11903
11904 BEGIN
11905 SELECT 'Y' into l_dummy
11906 FROM ra_grouping_rules gr
11907 WHERE trunc(sysdate)
11908 BETWEEN gr.start_date AND
11909 nvl(gr.end_date,trunc(sysdate))
11910 AND gr.grouping_rule_id =
11911 p_column_value;
11912 EXCEPTION
11913 WHEN NO_DATA_FOUND THEN
11914 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11915 FND_MESSAGE.SET_TOKEN( 'FK', 'grouping_rule_id' );
11916 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11917 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_grouping_rules');
11918 FND_MSG_PUB.ADD;
11919 x_return_status := FND_API.G_RET_STS_ERROR;
11920
11921 END check_grouping_ruleid_fk;
11922
11923 PROCEDURE check_automatch_set_id_fk (
11924 p_column IN VARCHAR2,
11925 p_column_value IN NUMBER,
11926 x_return_status IN OUT NOCOPY VARCHAR2
11927 ) IS
11928
11929 l_dummy VARCHAR2(1);
11930 BEGIN
11931
11932 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
11933 hz_utility_v2pub.debug(
11934 p_prefix => '',
11935 p_message => ' At check_automatch_set_id_fk '||p_column ||' is '||p_column_value,
11936 p_msg_level => fnd_log.level_statement);
11937 END IF;
11938
11939 SELECT 'x' into l_dummy
11940 FROM AR_CASH_AUTO_RULE_SETS
11941 WHERE active_flag = 'Y'
11942 AND automatch_set_id = p_column_value;
11943 EXCEPTION
11944 WHEN NO_DATA_FOUND THEN
11945 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11946 FND_MESSAGE.SET_TOKEN( 'FK', 'Automatch_Set_Id' );
11947 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11948 FND_MESSAGE.SET_TOKEN( 'TABLE', 'AR_CASH_AUTO_RULE_SETS');
11949 FND_MSG_PUB.ADD;
11950 x_return_status := FND_API.G_RET_STS_ERROR;
11951
11952 END check_automatch_set_id_fk;
11953
11954 PROCEDURE check_positive_value (
11955 p_column IN VARCHAR2,
11956 p_column_value IN NUMBER,
11957 x_return_status IN OUT NOCOPY VARCHAR2
11958 ) IS
11959
11960 BEGIN
11961 IF p_column_value < 0 THEN
11962 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LESS_THAN_ZERO' );
11963 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11964 FND_MSG_PUB.ADD;
11965 x_return_status := FND_API.G_RET_STS_ERROR;
11966 END IF;
11967
11968 END check_positive_value;
11969
11970 PROCEDURE check_greater_than_zero (
11971 p_column IN VARCHAR2,
11972 p_column_value IN NUMBER,
11973 x_return_status IN OUT NOCOPY VARCHAR2
11974 ) IS
11975
11976 BEGIN
11977 IF p_column_value <= 0 THEN
11978 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_GREATER_THAN_ZERO' );
11979 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11980 FND_MSG_PUB.ADD;
11981 x_return_status := FND_API.G_RET_STS_ERROR;
11982 END IF;
11983
11984 END check_greater_than_zero;
11985
11986 PROCEDURE check_less_than_100 (
11987 p_column IN VARCHAR2,
11988 p_column_value IN NUMBER,
11989 x_return_status IN OUT NOCOPY VARCHAR2
11990 ) IS
11991
11992 BEGIN
11993 IF p_column_value > 100 THEN
11994 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_GREATER_THAN_100' );
11995 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11996 FND_MSG_PUB.ADD;
11997 x_return_status := FND_API.G_RET_STS_ERROR;
11998 END IF;
11999
12000 END check_less_than_100;
12001
12002 /**
12003 * PRIVATE PROCEDURE enable_debug
12004 *
12005 * DESCRIPTION
12006 * Turn on debug mode.
12007 *
12008 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
12009 * HZ_UTILITY_V2PUB.enable_debug
12010 *
12011 * MODIFICATION HISTORY
12012 *
12013 * 07-23-2001 Jianying Huang o Created.
12014 *
12015 */
12016
12017 /*PROCEDURE enable_debug IS
12018
12019 BEGIN
12020
12021 G_DEBUG_COUNT := G_DEBUG_COUNT + 1;
12022
12023 IF G_DEBUG_COUNT = 1 THEN
12024 IF FND_PROFILE.value( 'HZ_API_FILE_DEBUG_ON' ) = 'Y' OR
12025 FND_PROFILE.value( 'HZ_API_DBMS_DEBUG_ON' ) = 'Y'
12026 THEN
12027 HZ_UTILITY_V2PUB.enable_debug;
12028 G_DEBUG := TRUE;
12029 END IF;
12030 END IF;
12031
12032 END enable_debug;
12033 */
12034
12035
12036 /**
12037 * PRIVATE PROCEDURE disable_debug
12038 *
12039 * DESCRIPTION
12040 * Turn off debug mode.
12041 *
12042 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
12043 * HZ_UTILITY_V2PUB.disable_debug
12044 *
12045 * MODIFICATION HISTORY
12046 *
12047 * 07-23-2001 Jianying Huang o Created.
12048 *
12049 */
12050
12051 /*PROCEDURE disable_debug IS
12052
12053 BEGIN
12054
12055 IF G_DEBUG THEN
12056 G_DEBUG_COUNT := G_DEBUG_COUNT - 1;
12057
12058 IF G_DEBUG_COUNT = 0 THEN
12059 HZ_UTILITY_V2PUB.disable_debug;
12060 G_DEBUG := FALSE;
12061 END IF;
12062 END IF;
12063
12064 END disable_debug;
12065 */
12066
12067
12068 FUNCTION get_index (
12069 p_val IN VARCHAR2
12070 ) RETURN BINARY_INTEGER IS
12071
12072 l_table_index BINARY_INTEGER;
12073 l_found BOOLEAN := FALSE;
12074 l_hash_value NUMBER;
12075
12076 BEGIN
12077
12078 l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
12079
12080 IF VAL_TAB.EXISTS(l_table_index) THEN
12081 IF VAL_TAB(l_table_index) = p_val THEN
12082 RETURN l_table_index;
12083 ELSE
12084 l_hash_value := l_table_index;
12085 l_table_index := l_table_index + 1;
12086 l_found := FALSE;
12087
12088 WHILE ( l_table_index < TABLE_SIZE ) AND ( NOT l_found ) LOOP
12089 IF VAL_TAB.EXISTS(l_table_index) THEN
12090 IF VAL_TAB(l_table_index) = p_val THEN
12091 l_found := TRUE;
12092 ELSE
12093 l_table_index := l_table_index + 1;
12094 END IF;
12095 ELSE
12096 RETURN TABLE_SIZE + 1;
12097 END IF;
12098 END LOOP;
12099
12100 IF NOT l_found THEN -- Didn't find any till the end
12101 l_table_index := 1; -- Start from the beginning
12102
12103 WHILE ( l_table_index < l_hash_value ) AND ( NOT l_found ) LOOP
12104 IF VAL_TAB.EXISTS(l_table_index) THEN
12105 IF VAL_TAB(l_table_index) = p_val THEN
12106 l_found := TRUE;
12107 ELSE
12108 l_table_index := l_table_index + 1;
12109 END IF;
12110 ELSE
12111 RETURN TABLE_SIZE + 1;
12112 END IF;
12113 END LOOP;
12114 END IF;
12115
12116 IF NOT l_found THEN
12117 RETURN TABLE_SIZE + 1; -- Return a higher value
12118 END IF;
12119 END IF;
12120 ELSE
12121 RETURN TABLE_SIZE + 1;
12122 END IF;
12123
12124 RETURN l_table_index;
12125
12126 EXCEPTION
12127 WHEN OTHERS THEN -- The entry doesn't exists
12128 RETURN TABLE_SIZE + 1;
12129
12130 END get_index;
12131
12132 PROCEDURE put (
12133 p_val IN VARCHAR2
12134 ) IS
12135
12136 l_table_index BINARY_INTEGER;
12137 l_stored BOOLEAN := FALSE;
12138 l_hash_value NUMBER;
12139
12140 BEGIN
12141
12142 l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
12143
12144 IF VAL_TAB.EXISTS(l_table_index) THEN
12145 IF VAL_TAB(l_table_index) <> p_val THEN --Collision
12146 l_hash_value := l_table_index;
12147 l_table_index := l_table_index + 1;
12148
12149 WHILE (l_table_index < TABLE_SIZE) AND (NOT l_stored) LOOP
12150 IF VAL_TAB.EXISTS(l_table_index) THEN
12151 IF VAL_TAB(l_table_index) <> p_val THEN
12152 l_table_index := l_table_index + 1;
12153 END IF;
12154 ELSE
12155 VAL_TAB(l_table_index) := p_val;
12156 l_stored := TRUE;
12157 END IF;
12158 END LOOP;
12159
12160 IF NOT l_stored THEN --Didn't find any free bucket till the end
12161 l_table_index := 1;
12162
12163 WHILE (l_table_index < l_hash_value) AND (NOT l_stored) LOOP
12164 IF VAL_TAB.EXISTS(l_table_index) THEN
12165 IF VAL_TAB(l_table_index) <> p_val THEN
12166 l_table_index := l_table_index + 1;
12167 END IF;
12168 ELSE
12169 VAL_TAB(l_table_index) := p_val;
12170 l_stored := TRUE;
12171 END IF;
12172 END LOOP;
12173 END IF;
12174
12175 END IF;
12176 ELSE
12177 VAL_TAB(l_table_index) := p_val;
12178 END IF;
12179
12180 EXCEPTION
12181 WHEN OTHERS THEN
12182 NULL;
12183
12184 END put;
12185
12186 FUNCTION search (
12187 p_val IN VARCHAR2,
12188 p_category IN VARCHAR2
12189 ) RETURN BOOLEAN IS
12190
12191 l_table_index BINARY_INTEGER;
12192 l_return BOOLEAN;
12193
12194 l_dummy VARCHAR2(1);
12195 l_position1 NUMBER;
12196 l_position2 NUMBER;
12197
12198 l_lookup_table VARCHAR2(30);
12199 l_lookup_type AR_LOOKUPS.lookup_type%TYPE;
12200 l_lookup_code AR_LOOKUPS.lookup_code%TYPE;
12201
12202 BEGIN
12203
12204 -- search for the value
12205 l_table_index := get_index( p_val || G_SPECIAL_STRING || p_category );
12206
12207 IF l_table_index < table_size THEN
12208 l_return := TRUE;
12209 ELSE
12210 --Can't find the value in the table; look in the database
12211 IF p_category = 'LOOKUP' THEN
12212
12213 l_position1 := INSTRB( p_val, G_SPECIAL_STRING, 1, 1 );
12214 l_lookup_table := SUBSTRB( p_val, 1, l_position1 - 1 );
12215 l_position2 := INSTRB( p_val, G_SPECIAL_STRING, 1, 2 );
12216 l_lookup_type := SUBSTRB( p_val, l_position1 + G_LENGTH,
12217 l_position2 - l_position1 - G_LENGTH );
12218 l_lookup_code := SUBSTRB( p_val, l_position2 + G_LENGTH );
12219
12220 IF UPPER( l_lookup_table ) = 'AR_LOOKUPS' THEN
12221 BEGIN
12222 SELECT 'Y' INTO l_dummy
12223 FROM AR_LOOKUPS
12224 WHERE LOOKUP_TYPE = l_lookup_type
12225 AND LOOKUP_CODE = l_lookup_code
12226 AND ( ENABLED_FLAG = 'Y' AND
12227 TRUNC( SYSDATE ) BETWEEN
12228 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12229 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
12230
12231 l_return := TRUE;
12232 EXCEPTION
12233 WHEN NO_DATA_FOUND THEN
12234 l_return := FALSE;
12235 END;
12236 ELSIF UPPER( l_lookup_table ) = 'SO_LOOKUPS' THEN
12237 BEGIN
12238 SELECT 'Y' INTO l_dummy
12239 FROM SO_LOOKUPS
12240 WHERE LOOKUP_TYPE = l_lookup_type
12241 AND LOOKUP_CODE = l_lookup_code
12242 AND ( ENABLED_FLAG = 'Y' AND
12243 TRUNC( SYSDATE ) BETWEEN
12244 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12245 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
12246
12247 l_return := TRUE;
12248 EXCEPTION
12249 WHEN NO_DATA_FOUND THEN
12250 l_return := FALSE;
12251 END;
12252 ELSIF UPPER( l_lookup_table ) = 'OE_SHIP_METHODS_V' THEN
12253 BEGIN
12254 SELECT 'Y' INTO l_dummy
12255 FROM OE_SHIP_METHODS_V
12256 WHERE LOOKUP_TYPE = l_lookup_type
12257 AND LOOKUP_CODE = l_lookup_code
12258 AND ( ENABLED_FLAG = 'Y' AND
12259 TRUNC( SYSDATE ) BETWEEN
12260 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12261 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12262 AND ROWNUM = 1;
12263
12264 l_return := TRUE;
12265 EXCEPTION
12266 WHEN NO_DATA_FOUND THEN
12267 l_return := FALSE;
12268 END;
12269 ELSIF UPPER( l_lookup_table ) = 'OE_LOOKUPS' THEN
12270 BEGIN
12271 SELECT 'Y' INTO l_dummy
12272 FROM OE_LOOKUPS
12273 WHERE LOOKUP_TYPE = l_lookup_type
12274 AND LOOKUP_CODE = l_lookup_code
12275 AND ( ENABLED_FLAG = 'Y' AND
12276 TRUNC( SYSDATE ) BETWEEN
12277 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12278 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12279 AND ROWNUM = 1;
12280
12281 l_return := TRUE;
12282 EXCEPTION
12283 WHEN NO_DATA_FOUND THEN
12284 l_return := FALSE;
12285 END;
12286 ELSIF UPPER( l_lookup_table ) = 'FND_COMMON_LOOKUPS' THEN
12287 BEGIN
12288 SELECT 'Y' INTO l_dummy
12289 FROM FND_COMMON_LOOKUPS
12290 WHERE LOOKUP_TYPE = l_lookup_type
12291 AND LOOKUP_CODE = l_lookup_code
12292 AND ( ENABLED_FLAG = 'Y' AND
12293 TRUNC( SYSDATE ) BETWEEN
12294 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12295 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12296 AND ROWNUM = 1;
12297
12298 l_return := TRUE;
12299 EXCEPTION
12300 WHEN NO_DATA_FOUND THEN
12301 l_return := FALSE;
12302 END;
12303 ELSIF UPPER( l_lookup_table ) = 'FND_LOOKUP_VALUES' THEN
12304 BEGIN
12305 SELECT 'Y' INTO l_dummy
12306 FROM FND_LOOKUP_VALUES
12307 WHERE LOOKUP_TYPE = l_lookup_type
12308 AND LOOKUP_CODE = l_lookup_code
12309 AND ( ENABLED_FLAG = 'Y' AND
12310 TRUNC( SYSDATE ) BETWEEN
12311 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12312 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12313 AND ROWNUM = 1;
12314
12315 l_return := TRUE;
12316 EXCEPTION
12317 WHEN NO_DATA_FOUND THEN
12318 l_return := FALSE;
12319 END;
12320 ELSIF UPPER(l_lookup_table ) = 'FV_LOOKUP_CODES' THEN
12321 BEGIN
12322 SELECT 'Y' INTO l_dummy
12323 FROM FV_LOOKUP_CODES
12324 WHERE LOOKUP_TYPE = l_lookup_type
12325 AND LOOKUP_CODE = l_lookup_code
12326 AND ( ENABLED_FLAG = 'Y' AND
12327 TRUNC( SYSDATE ) BETWEEN
12328 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
12329 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
12330 AND ROWNUM = 1;
12331
12332 l_return := TRUE;
12333 EXCEPTION
12334 WHEN NO_DATA_FOUND THEN
12335 l_return := FALSE;
12336 END;
12337 ELSE
12338 l_return := FALSE;
12339 END IF;
12340 END IF;
12341
12342 --Cache the value
12343 IF l_return THEN
12344 put( p_val || G_SPECIAL_STRING || p_category );
12345 END IF;
12346 END IF;
12347
12348 RETURN l_return;
12349
12350 END search;
12351
12352 PROCEDURE validate_mandatory (
12353 p_create_update_flag IN VARCHAR2,
12354 p_column IN VARCHAR2,
12355 p_column_value IN VARCHAR2,
12356 p_restricted IN VARCHAR2 DEFAULT 'N',
12357 x_return_status IN OUT NOCOPY VARCHAR2
12358 ) IS
12359
12360 l_error BOOLEAN := FALSE;
12361
12362 BEGIN
12363
12364 IF p_restricted = 'N' THEN
12365 IF ( p_create_update_flag = 'C' AND
12366 ( p_column_value IS NULL OR
12367 p_column_value = FND_API.G_MISS_CHAR ) ) OR
12368 ( p_create_update_flag = 'U' AND
12369 p_column_value = FND_API.G_MISS_CHAR )
12370 THEN
12371 l_error := TRUE;
12372 END IF;
12373 ELSE
12374 IF ( p_column_value IS NULL OR
12375 p_column_value = FND_API.G_MISS_CHAR )
12376 THEN
12377 l_error := TRUE;
12378 END IF;
12379 END IF;
12380
12381 IF l_error THEN
12382 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12383 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12384 FND_MSG_PUB.ADD;
12385 x_return_status := FND_API.G_RET_STS_ERROR;
12386 END IF;
12387
12388 END validate_mandatory;
12389
12390 PROCEDURE validate_mandatory (
12391 p_create_update_flag IN VARCHAR2,
12392 p_column IN VARCHAR2,
12393 p_column_value IN NUMBER,
12394 p_restricted IN VARCHAR2 DEFAULT 'N',
12395 x_return_status IN OUT NOCOPY VARCHAR2
12396 ) IS
12397
12398 l_error BOOLEAN := FALSE;
12399
12400 BEGIN
12401
12402 IF p_restricted = 'N' THEN
12403 IF ( p_create_update_flag = 'C' AND
12404 ( p_column_value IS NULL OR
12405 p_column_value = FND_API.G_MISS_NUM ) ) OR
12406 ( p_create_update_flag = 'U' AND
12407 p_column_value = FND_API.G_MISS_NUM )
12408 THEN
12409 l_error := TRUE;
12410 END IF;
12411 ELSE
12412 IF ( p_column_value IS NULL OR
12413 p_column_value = FND_API.G_MISS_NUM )
12414 THEN
12415 l_error := TRUE;
12416 END IF;
12417 END IF;
12418
12419 IF l_error THEN
12420 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12421 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12422 FND_MSG_PUB.ADD;
12423 x_return_status := FND_API.G_RET_STS_ERROR;
12424 END IF;
12425
12426 END validate_mandatory;
12427
12428 PROCEDURE validate_mandatory (
12429 p_create_update_flag IN VARCHAR2,
12430 p_column IN VARCHAR2,
12431 p_column_value IN DATE,
12432 p_restricted IN VARCHAR2 DEFAULT 'N',
12433 x_return_status IN OUT NOCOPY VARCHAR2
12434 ) IS
12435
12436 l_error BOOLEAN := FALSE;
12437
12438 BEGIN
12439
12440 IF p_restricted = 'N' THEN
12441 IF ( p_create_update_flag = 'C' AND
12442 ( p_column_value IS NULL OR
12443 p_column_value = FND_API.G_MISS_DATE ) ) OR
12444 ( p_create_update_flag = 'U' AND
12445 p_column_value = FND_API.G_MISS_DATE )
12446 THEN
12447 l_error := TRUE;
12448 END IF;
12449 ELSE
12450 IF ( p_column_value IS NULL OR
12451 p_column_value = FND_API.G_MISS_DATE )
12452 THEN
12453 l_error := TRUE;
12454 END IF;
12455 END IF;
12456
12457 IF l_error THEN
12458 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12459 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12460 FND_MSG_PUB.ADD;
12461 x_return_status := FND_API.G_RET_STS_ERROR;
12462 END IF;
12463
12464 END validate_mandatory;
12465
12466 PROCEDURE validate_nonupdateable (
12467 p_column IN VARCHAR2,
12468 p_column_value IN VARCHAR2,
12469 p_old_column_value IN VARCHAR2,
12470 p_restricted IN VARCHAR2 DEFAULT 'Y',
12471 x_return_status IN OUT NOCOPY VARCHAR2
12472 ) IS
12473
12474 l_error BOOLEAN := FALSE;
12475
12476 BEGIN
12477
12478 IF p_column_value IS NOT NULL THEN
12479 IF p_restricted = 'Y' THEN
12480 IF ( p_column_value <> FND_API.G_MISS_CHAR OR
12481 p_old_column_value IS NOT NULL ) AND
12482 ( p_old_column_value IS NULL OR
12483 p_column_value <> p_old_column_value )
12484 THEN
12485 l_error := TRUE;
12486 END IF;
12487 ELSE
12488 IF (p_old_column_value IS NOT NULL AND -- Bug 3439053.
12489 p_old_column_value <> FND_API.G_MISS_CHAR)
12490 AND
12491 ( p_column_value = FND_API.G_MISS_CHAR OR
12492 p_column_value <> p_old_column_value )
12493 THEN
12494 l_error := TRUE;
12495 END IF;
12496 END IF;
12497 END IF;
12498
12499 IF l_error THEN
12500 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12501 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12502 FND_MSG_PUB.ADD;
12503 x_return_status := FND_API.G_RET_STS_ERROR;
12504 END IF;
12505
12506 END validate_nonupdateable;
12507
12508 PROCEDURE validate_nonupdateable (
12509 p_column IN VARCHAR2,
12510 p_column_value IN NUMBER,
12511 p_old_column_value IN NUMBER,
12512 p_restricted IN VARCHAR2 DEFAULT 'Y',
12513 x_return_status IN OUT NOCOPY VARCHAR2
12514 ) IS
12515
12516 l_error BOOLEAN := FALSE;
12517
12518 BEGIN
12519
12520 IF p_column_value IS NOT NULL THEN
12521 IF p_restricted = 'Y' THEN
12522 IF ( p_column_value <> FND_API.G_MISS_NUM OR
12523 p_old_column_value IS NOT NULL ) AND
12524 ( p_old_column_value IS NULL OR
12525 p_column_value <> p_old_column_value )
12526 THEN
12527 l_error := TRUE;
12528 END IF;
12529 ELSE
12530 IF (p_old_column_value IS NOT NULL AND -- Bug 3439053
12531 p_old_column_value <> FND_API.G_MISS_NUM)
12532 AND
12533 ( p_column_value = FND_API.G_MISS_NUM OR
12534 p_column_value <> p_old_column_value )
12535 THEN
12536 l_error := TRUE;
12537 END IF;
12538 END IF;
12539 END IF;
12540
12541 IF l_error THEN
12542 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12543 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12544 FND_MSG_PUB.ADD;
12545 x_return_status := FND_API.G_RET_STS_ERROR;
12546 END IF;
12547
12548 END validate_nonupdateable;
12549
12550 PROCEDURE validate_nonupdateable (
12551 p_column IN VARCHAR2,
12552 p_column_value IN DATE,
12553 p_old_column_value IN DATE,
12554 p_restricted IN VARCHAR2 DEFAULT 'Y',
12555 x_return_status IN OUT NOCOPY VARCHAR2
12556 ) IS
12557
12558 l_error BOOLEAN := FALSE;
12559
12560 BEGIN
12561
12562 IF p_column_value IS NOT NULL THEN
12563 IF p_restricted = 'Y' THEN
12564 IF ( p_column_value <> FND_API.G_MISS_DATE OR
12565 p_old_column_value IS NOT NULL ) AND
12566 ( p_old_column_value IS NULL OR
12567 p_column_value <> p_old_column_value )
12568 THEN
12569 l_error := TRUE;
12570 END IF;
12571 ELSE
12572 IF (p_old_column_value IS NOT NULL AND -- Bug 3439053
12573 p_old_column_value <> FND_API.G_MISS_DATE)
12574 AND
12575 ( p_column_value = FND_API.G_MISS_DATE OR
12576 p_column_value <> p_old_column_value )
12577 THEN
12578 l_error := TRUE;
12579 END IF;
12580 END IF;
12581 END IF;
12582
12583 IF l_error THEN
12584 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12585 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12586 FND_MSG_PUB.ADD;
12587 x_return_status := FND_API.G_RET_STS_ERROR;
12588 END IF;
12589
12590 END validate_nonupdateable;
12591
12592 PROCEDURE validate_start_end_date (
12593 p_create_update_flag IN VARCHAR2,
12594 p_start_date_column_name IN VARCHAR2,
12595 p_start_date IN DATE,
12596 p_old_start_date IN DATE,
12597 p_end_date_column_name IN VARCHAR2,
12598 p_end_date IN DATE,
12599 p_old_end_date IN DATE,
12600 x_return_status IN OUT NOCOPY VARCHAR2
12601 ) IS
12602
12603 l_start_date DATE := p_old_start_date;
12604 l_end_date DATE := p_old_end_date;
12605
12606 BEGIN
12607
12608 IF p_create_update_flag = 'C' THEN
12609 l_start_date := p_start_date;
12610 l_end_date := p_end_date;
12611 ELSIF p_create_update_flag = 'U' THEN
12612 IF p_start_date IS NOT NULL
12613 THEN
12614 IF p_start_date = FND_API.G_MISS_DATE THEN
12615 l_start_date := NULL;
12616 ELSE
12617 l_start_date := p_start_date;
12618 END IF;
12619 END IF;
12620
12621 IF p_end_date IS NOT NULL
12622 THEN
12623 IF p_end_date = FND_API.G_MISS_DATE THEN
12624 l_end_date := NULL;
12625 ELSE
12626 l_end_date := p_end_date;
12627 END IF;
12628 END IF;
12629 END IF;
12630
12631 IF l_end_date IS NOT NULL AND
12632 l_end_date <> FND_API.G_MISS_DATE AND
12633 ( l_start_date IS NULL OR
12634 l_start_date = FND_API.G_MISS_DATE OR
12635 l_start_date > l_end_date )
12636 THEN
12637 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DATE_GREATER' );
12638 FND_MESSAGE.SET_TOKEN( 'DATE2', p_end_date_column_name );
12639 FND_MESSAGE.SET_TOKEN( 'DATE1', p_start_date_column_name );
12640 FND_MSG_PUB.ADD;
12641 x_return_status := FND_API.G_RET_STS_ERROR;
12642 END IF;
12643
12644 END validate_start_end_date;
12645
12646 PROCEDURE validate_cannot_update_to_null (
12647 p_column IN VARCHAR2,
12648 p_column_value IN VARCHAR2,
12649 x_return_status IN OUT NOCOPY VARCHAR2
12650 ) IS
12651
12652 BEGIN
12653
12654 IF p_column_value = FND_API.G_MISS_CHAR THEN
12655 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12656 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12657 FND_MSG_PUB.ADD;
12658 x_return_status := FND_API.G_RET_STS_ERROR;
12659 END IF;
12660
12661 END validate_cannot_update_to_null;
12662
12663 PROCEDURE validate_cannot_update_to_null (
12664 p_column IN VARCHAR2,
12665 p_column_value IN NUMBER,
12666 x_return_status IN OUT NOCOPY VARCHAR2
12667 ) IS
12668
12669 BEGIN
12670
12671 IF p_column_value = FND_API.G_MISS_NUM THEN
12672 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12673 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12674 FND_MSG_PUB.ADD;
12675 x_return_status := FND_API.G_RET_STS_ERROR;
12676 END IF;
12677
12678 END validate_cannot_update_to_null;
12679
12680 PROCEDURE validate_cannot_update_to_null (
12681 p_column IN VARCHAR2,
12682 p_column_value IN DATE,
12683 x_return_status IN OUT NOCOPY VARCHAR2
12684 ) IS
12685
12686 BEGIN
12687
12688 IF p_column_value = FND_API.G_MISS_DATE THEN
12689 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12690 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12691 FND_MSG_PUB.ADD;
12692 x_return_status := FND_API.G_RET_STS_ERROR;
12693 END IF;
12694
12695 END validate_cannot_update_to_null;
12696
12697 PROCEDURE validate_lookup (
12698 p_column IN VARCHAR2,
12699 p_lookup_table IN VARCHAR2 DEFAULT 'AR_LOOKUPS',
12700 p_lookup_type IN VARCHAR2,
12701 p_column_value IN VARCHAR2,
12702 x_return_status IN OUT NOCOPY VARCHAR2
12703 ) IS
12704
12705 l_error BOOLEAN := FALSE;
12706
12707 BEGIN
12708
12709 IF p_column_value IS NOT NULL AND
12710 p_column_value <> FND_API.G_MISS_CHAR THEN
12711
12712 IF p_lookup_type = 'YES/NO' THEN
12713 IF p_column_value NOT IN ('Y', 'N') THEN
12714 l_error := TRUE;
12715 END IF;
12716 ELSE
12717 IF NOT search(p_lookup_table || G_SPECIAL_STRING ||
12718 p_lookup_type || G_SPECIAL_STRING || p_column_value,
12719 'LOOKUP' )
12720 THEN
12721 l_error := TRUE;
12722 END IF;
12723 END IF;
12724
12725 IF l_error THEN
12726 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_LOOKUP' );
12727 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12728 FND_MESSAGE.SET_TOKEN( 'LOOKUP_TYPE', p_lookup_type );
12729 FND_MSG_PUB.ADD;
12730 x_return_status := FND_API.G_RET_STS_ERROR;
12731 END IF;
12732 END IF;
12733
12734 END validate_lookup;
12735
12736
12737 /**
12738 * PROCEDURE validate_created_by_module
12739 *
12740 * DESCRIPTION
12741 * validate created by module
12742 * ARGUMENTS
12743 * IN:
12744 * p_create_update_flag create update flag
12745 * p_created_by_module created by module
12746 * p_old_created_by_module old value of created by module
12747 * x_return_status return status
12748 */
12749
12750 PROCEDURE validate_created_by_module (
12751 p_create_update_flag IN VARCHAR2,
12752 p_created_by_module IN VARCHAR2,
12753 p_old_created_by_module IN VARCHAR2,
12754 x_return_status IN OUT NOCOPY VARCHAR2
12755 ) IS
12756
12757 l_column CONSTANT VARCHAR2(30) := 'created_by_module';
12758
12759 BEGIN
12760
12761 -- skip mandatory and non-updateable check from logical API
12762 IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
12763 -- created_by_module is mandatory field
12764 -- Since created_by_module is non-updateable, we only need to check mandatory
12765 -- during creation.
12766
12767 IF p_create_update_flag = 'C' THEN
12768 validate_mandatory (
12769 p_create_update_flag => p_create_update_flag,
12770 p_column => l_column,
12771 p_column_value => p_created_by_module,
12772 x_return_status => x_return_status);
12773
12774 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12775 hz_utility_v2pub.debug(
12776 p_prefix => '',
12777 p_message => l_column || ' is mandatory. ' ||
12778 'x_return_status = ' || x_return_status,
12779 p_msg_level => fnd_log.level_statement);
12780 END IF;
12781 END IF;
12782
12783 -- created_by_module is non-updateable field. But it can be updated from
12784 -- NULL to some value.
12785
12786 IF p_create_update_flag = 'U' AND
12787 p_created_by_module IS NOT NULL
12788 THEN
12789 validate_nonupdateable (
12790 p_column => l_column,
12791 p_column_value => p_created_by_module,
12792 p_old_column_value => p_old_created_by_module,
12793 p_restricted => 'N',
12794 x_return_status => x_return_status);
12795
12796 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12797 hz_utility_v2pub.debug(
12798 p_prefix => '',
12799 p_message => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
12800 'x_return_status = ' || x_return_status,
12801 p_msg_level => fnd_log.level_statement);
12802 END IF;
12803 END IF;
12804 END IF;
12805
12806 -- created_by_module is lookup code in lookup type HZ_CREATED_BY_MODULES
12807 IF p_created_by_module IS NOT NULL AND
12808 p_created_by_module <> fnd_api.g_miss_char AND
12809 (p_create_update_flag = 'C' OR
12810 (p_create_update_flag = 'U' AND
12811 (p_old_created_by_module IS NULL OR
12812 p_created_by_module <> p_old_created_by_module)))
12813 THEN
12814 validate_lookup (
12815 p_column => l_column,
12816 p_lookup_type => 'HZ_CREATED_BY_MODULES',
12817 p_column_value => p_created_by_module,
12818 x_return_status => x_return_status);
12819
12820 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12821 hz_utility_v2pub.debug(
12822 p_prefix => '',
12823 p_message => l_column || ' is lookup code in lookup type HZ_CREATED_BY_MODULES. ' ||
12824 'x_return_status = ' || x_return_status,
12825 p_msg_level => fnd_log.level_statement);
12826 END IF;
12827 END IF;
12828
12829 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12830 hz_utility_v2pub.debug(
12831 p_prefix => '',
12832 p_message => 'after validate ' || l_column || ' ... ' ||
12833 'x_return_status = ' || x_return_status,
12834 p_msg_level => fnd_log.level_statement);
12835 END IF;
12836
12837 END validate_created_by_module;
12838
12839
12840 /**
12841 * PROCEDURE validate_application_id
12842 *
12843 * DESCRIPTION
12844 * validate application id
12845 * ARGUMENTS
12846 * IN:
12847 * p_create_update_flag create update flag
12848 * p_application_id application id
12849 * p_old_application_id old value of application id
12850 * x_return_status return status
12851 */
12852
12853 PROCEDURE validate_application_id (
12854 p_create_update_flag IN VARCHAR2,
12855 p_application_id IN NUMBER,
12856 p_old_application_id IN NUMBER,
12857 x_return_status IN OUT NOCOPY VARCHAR2
12858 ) IS
12859
12860 l_column CONSTANT VARCHAR2(30) := 'application_id';
12861
12862 BEGIN
12863
12864 -- skip non-updateable check from logical API
12865 IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
12866 -- application_id is non-updateable field. But it can be updated from NULL
12867 -- to some value.
12868
12869 IF p_create_update_flag = 'U' AND
12870 p_application_id IS NOT NULL
12871 THEN
12872 validate_nonupdateable (
12873 p_column => l_column,
12874 p_column_value => p_application_id,
12875 p_old_column_value => p_old_application_id,
12876 p_restricted => 'N',
12877 x_return_status => x_return_status);
12878
12879 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12880 hz_utility_v2pub.debug(
12881 p_prefix => '',
12882 p_message => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
12883 'x_return_status = ' || x_return_status,
12884 p_msg_level => fnd_log.level_statement);
12885 END IF;
12886 END IF;
12887 END IF;
12888
12889 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12890 hz_utility_v2pub.debug(
12891 p_prefix => '',
12892 p_message => 'after validate ' || l_column || ' ... ' ||
12893 'x_return_status = ' || x_return_status,
12894 p_msg_level => fnd_log.level_statement);
12895 END IF;
12896
12897 END validate_application_id;
12898
12899 PROCEDURE validate_bill_level (
12900 p_create_update_flag IN VARCHAR2,
12901 p_customer_profile_rec IN HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
12902 x_return_status IN OUT NOCOPY VARCHAR2
12903 ) IS
12904
12905 l_profile_class_rec HZ_CUST_PROFILE_CLASSES%ROWTYPE;
12906 l_error BOOLEAN := FALSE;
12907
12908 l_bill_level_count number;
12909 l_bill_type_count number;
12910
12911 BEGIN
12912
12913 -- if cons_inv_flag is 'Y', do all validations
12914 if p_customer_profile_rec.cons_inv_flag = 'Y' then
12915 -- If Balance Forward billing is enabled,
12916 -- Bill Level and Type should have valid not null values
12917 if (p_customer_profile_rec.cons_bill_level IS NULL
12918 OR p_customer_profile_rec.cons_inv_type IS NULL) then
12919 FND_MESSAGE.SET_NAME('AR', 'HZ_API_BILL_LVL_TYPE_INVALID');
12920 FND_MSG_PUB.ADD;
12921 x_return_status := FND_API.G_RET_STS_ERROR;
12922 else
12923 if p_customer_profile_rec.cons_bill_level IS NOT NULL then
12924 SELECT COUNT(*)
12925 INTO l_bill_level_count
12926 FROM ar_lookups
12927 WHERE lookup_type = 'HZ_CONS_BILL_LEVEL'
12928 AND lookup_code = p_customer_profile_rec.cons_bill_level
12929 AND TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12930 AND enabled_flag = 'Y';
12931
12932 IF (l_bill_level_count = 0) THEN
12933 FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_BILL_LEVEL');
12934 FND_MSG_PUB.ADD;
12935 x_return_status := FND_API.G_RET_STS_ERROR;
12936 END IF;
12937 end if;
12938 end if;
12939
12940 -- For Account use bill level, use Summary or Detail as bill type.
12941 if p_customer_profile_rec.cons_bill_level = 'ACCOUNT' THEN
12942 SELECT COUNT(*)
12943 INTO l_bill_type_count
12944 FROM ar_lookups
12945 WHERE lookup_type = 'HZ_CONS_INV_TYPE'
12946 AND lookup_code = p_customer_profile_rec.cons_inv_type
12947 AND TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12948 AND enabled_flag = 'Y'
12949 AND lookup_code <> 'IMPORTED';
12950
12951 IF (l_bill_TYPE_count = 0) THEN
12952 FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ACCT_BILL_TYPE');
12953 FND_MSG_PUB.ADD;
12954 x_return_status := FND_API.G_RET_STS_ERROR;
12955 END IF;
12956 -- For Site use bill level, use Summary, Detail, or Imported as bill type.
12957 else
12958 SELECT COUNT(*)
12959 INTO l_bill_type_count
12960 FROM ar_lookups
12961 WHERE lookup_type = 'HZ_CONS_INV_TYPE'
12962 AND lookup_code = p_customer_profile_rec.cons_inv_type
12963 AND TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12964 AND enabled_flag = 'Y';
12965
12966 IF (l_bill_TYPE_count = 0) THEN
12967 FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ACCT_BILL_TYPE');
12968 FND_MSG_PUB.ADD;
12969 x_return_status := FND_API.G_RET_STS_ERROR;
12970 END IF;
12971 end if;
12972 end if;
12973 END validate_bill_level;
12974 --ER13337184
12975 PROCEDURE validate_fv_attributes (
12976 p_create_update_flag IN VARCHAR2,
12977 p_cust_account_rec IN HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE,
12978 p_rowid IN ROWID,
12979 x_return_status IN OUT NOCOPY VARCHAR2
12980 ) IS
12981 l_federal_entity_type HZ_CUST_ACCOUNTS.federal_entity_type%TYPE;
12982 l_trading_partner_agency_id HZ_CUST_ACCOUNTS.trading_partner_agency_id%TYPE;
12983 l_duns_extension HZ_CUST_ACCOUNTS.duns_extension%TYPE;
12984 l_advance_payment_indicator HZ_CUST_ACCOUNTS.advance_payment_indicator%TYPE;
12985 l_tpai_validate VARCHAR2(2);
12986 l_debug_prefix VARCHAR2(30) := '';
12987 l_temp VARCHAR2(1);
12988 BEGIN
12989
12990 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12991 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'FV Attributes Parameter values : '
12992 ||' Federal Entity Type ' || p_cust_account_rec.federal_entity_type
12993 ||' trading_partner_agency_id ' || p_cust_account_rec.trading_partner_agency_id
12994 ||' duns_extension ' || p_cust_account_rec.duns_extension
12995 ||' advance_payment_indicator ' || p_cust_account_rec.advance_payment_indicator,
12996 p_msg_level=>fnd_log.level_statement);
12997 END IF;
12998 -- Select fields for later use during update.
12999 IF p_create_update_flag = 'U' THEN
13000 SELECT federal_entity_type,
13001 trading_partner_agency_id,
13002 duns_extension,
13003 advance_payment_indicator
13004 INTO
13005 l_federal_entity_type,
13006 l_trading_partner_agency_id,
13007 l_duns_extension,
13008 l_advance_payment_indicator
13009 FROM HZ_CUST_ACCOUNTS
13010 WHERE ROWID = p_rowid;
13011
13012 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13013 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'FV Attributes Database values : '
13014 ||' Federal Entity Type ' || l_federal_entity_type
13015 ||' trading_partner_agency_id ' || l_trading_partner_agency_id
13016 ||' duns_extension ' || l_duns_extension
13017 ||' advance_payment_indicator ' || l_advance_payment_indicator,
13018 p_msg_level=>fnd_log.level_statement);
13019 END IF;
13020 END IF;
13021
13022 -- Federal Entity Type Validation
13023 IF p_cust_account_rec.federal_entity_type IS NOT NULL AND
13024 p_cust_account_rec.federal_entity_type <> FND_API.G_MISS_CHAR AND
13025 ( p_create_update_flag = 'C' OR
13026 ( p_create_update_flag = 'U' AND
13027 p_cust_account_rec.federal_entity_type <> NVL( l_federal_entity_type, FND_API.G_MISS_CHAR ) ) )
13028 THEN
13029 validate_lookup (
13030 p_column => 'federal_entity_type',
13031 p_lookup_table => 'fv_lookup_codes',
13032 p_lookup_type => 'FV_FED_NON_FED_CODE',
13033 p_column_value => p_cust_account_rec.federal_entity_type,
13034 x_return_status => x_return_status );
13035
13036 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13037 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Federal Entity Type is lookup code in lookup type FV_FED_NON_FED_CODE. ' ||
13038 'x_return_status = ' || x_return_status,
13039 p_msg_level=>fnd_log.level_statement);
13040 END IF;
13041
13042 END IF;
13043
13044 -- Trading Partner Agency Id Validation
13045 --If Federal Entity Type is null and trading partner agency id is not null then raise error
13046 IF ( p_create_update_flag = 'C' AND (p_cust_account_rec.federal_entity_type IS NULL
13047 OR p_cust_account_rec.federal_entity_type <> 'F'
13048 OR p_cust_account_rec.federal_entity_type = FND_API.G_MISS_CHAR)
13049 AND (p_cust_account_rec.trading_partner_agency_id IS NOT NULL
13050 AND p_cust_account_rec.trading_partner_agency_id <> FND_API.G_MISS_CHAR
13051 )
13052 )
13053 OR
13054 ( p_create_update_flag = 'U' AND (NVL(p_cust_account_rec.federal_entity_type,l_federal_entity_type) IS NULL
13055 OR NVL(p_cust_account_rec.federal_entity_type,l_federal_entity_type) <> 'F'
13056 OR p_cust_account_rec.federal_entity_type = FND_API.G_MISS_CHAR)
13057 AND (nvl(p_cust_account_rec.trading_partner_agency_id,l_trading_partner_agency_id) IS NOT NULL
13058 AND NVL(p_cust_account_rec.trading_partner_agency_id,l_trading_partner_agency_id) <> FND_API.G_MISS_CHAR )
13059 )
13060 THEN
13061 FND_MESSAGE.SET_NAME('AR', 'HZ_TPAI_IS_NOT_NULL');
13062 FND_MSG_PUB.ADD;
13063 x_return_status := FND_API.G_RET_STS_ERROR;
13064 --If Federal Entity Type is 'Federal' and trading partner agency id is null then raise error
13065 ELSIF ( p_create_update_flag = 'C' AND p_cust_account_rec.federal_entity_type = 'F'
13066 AND (p_cust_account_rec.trading_partner_agency_id IS NULL
13067 OR p_cust_account_rec.trading_partner_agency_id = FND_API.G_MISS_CHAR )
13068 )
13069 OR
13070 ( p_create_update_flag = 'U' AND NVL(p_cust_account_rec.federal_entity_type,l_federal_entity_type) = 'F'
13071 AND (nvl(p_cust_account_rec.trading_partner_agency_id,l_trading_partner_agency_id) IS NULL
13072 OR nvl(p_cust_account_rec.trading_partner_agency_id,l_trading_partner_agency_id) = FND_API.G_MISS_CHAR )
13073 )
13074 THEN
13075 FND_MESSAGE.SET_NAME('AR', 'HZ_TPAI_IS_NULL');
13076 FND_MSG_PUB.ADD;
13077 x_return_status := FND_API.G_RET_STS_ERROR;
13078 -- Verify FK value from FV_TP_TREASURY_SYMBOLS table
13079 ELSIF p_cust_account_rec.trading_partner_agency_id IS NOT NULL AND p_cust_account_rec.trading_partner_agency_id <> FND_API.G_MISS_CHAR THEN
13080 BEGIN
13081 SELECT 'Y'
13082 into l_temp
13083 FROM fv_tp_treasury_symbols
13084 WHERE agency_id = p_cust_account_rec.trading_partner_agency_id
13085 AND ROWNUM = 1;
13086
13087 EXCEPTION
13088 WHEN NO_DATA_FOUND THEN
13089 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
13090 FND_MESSAGE.SET_TOKEN( 'FK', 'Trading Partner Agency Id' );
13091 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'agency_id' );
13092 FND_MESSAGE.SET_TOKEN( 'TABLE', 'FV_TP_TREASURY_SYMBOLS');
13093 FND_MSG_PUB.ADD;
13094 x_return_status := FND_API.G_RET_STS_ERROR;
13095 END;
13096
13097 END IF;
13098
13099 -- DUNS Extension Validation
13100 IF p_cust_account_rec.duns_extension IS NOT NULL AND
13101 p_cust_account_rec.duns_extension <> FND_API.G_MISS_CHAR AND
13102 ( p_create_update_flag = 'C' OR
13103 ( p_create_update_flag = 'U' AND
13104 p_cust_account_rec.duns_extension <> NVL( l_duns_extension, FND_API.G_MISS_CHAR ) ) )
13105 THEN
13106 IF TRANSLATE(p_cust_account_rec.duns_extension, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') <> 'XXXX'
13107 THEN
13108 FND_MESSAGE.SET_NAME('AR', 'HZ_DUNS_EXTENSION_IS_INVALID');
13109 FND_MSG_PUB.ADD;
13110 x_return_status := FND_API.G_RET_STS_ERROR;
13111 END IF;
13112
13113 END IF;
13114
13115 -- Advance Payment Validation
13116 IF p_cust_account_rec.advance_payment_indicator IS NOT NULL AND
13117 p_cust_account_rec.advance_payment_indicator <> FND_API.G_MISS_CHAR AND
13118 ( p_create_update_flag = 'C' OR
13119 ( p_create_update_flag = 'U' AND
13120 p_cust_account_rec.advance_payment_indicator <> NVL( l_advance_payment_indicator, FND_API.G_MISS_CHAR ) ) )
13121 THEN
13122 validate_lookup (
13123 p_column => 'advance_payment_indicator',
13124 p_lookup_table => 'fv_lookup_codes',
13125 p_lookup_type => 'FV_ADV_PMT_INDICATOR',
13126 p_column_value => p_cust_account_rec.advance_payment_indicator,
13127 x_return_status => x_return_status );
13128
13129 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13130 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Advance payment indicator is lookup code in lookup type FV_ADV_PMT_INDICATOR. ' ||
13131 'x_return_status = ' || x_return_status,
13132 p_msg_level=>fnd_log.level_statement);
13133 END IF;
13134
13135 END IF;
13136
13137 END validate_fv_attributes;
13138
13139
13140 END HZ_ACCOUNT_VALIDATE_V2PUB;