1 PACKAGE BODY HZ_ACCOUNT_VALIDATE_V2PUB AS
2 /*$Header: ARH2ACVB.pls 120.70.12010000.1 2008/07/24 16:26:15 appldev ship $ */
3
4 --------------------------------------
5 -- declaration of private global varibles
6 --------------------------------------
7
8 G_DEBUG_COUNT NUMBER := 0;
9 --G_DEBUG BOOLEAN := FALSE;
10
11 G_SPECIAL_STRING CONSTANT VARCHAR2(4):= '%#@*';
12 G_LENGTH CONSTANT NUMBER := LENGTHB( G_SPECIAL_STRING );
13
14 TYPE VAL_TAB_TYPE IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
15
16 --------------------------------------
17 -- define the internal table that will cache values
18 --------------------------------------
19
20 VAL_TAB VAL_TAB_TYPE; -- the table of values
21 TABLE_SIZE BINARY_INTEGER := 2048; -- the size of above tables
22
23 --------------------------------------
24 -- declaration of private procedures and functions
25 --------------------------------------
26
27 /*PROCEDURE enable_debug;
28
29 PROCEDURE disable_debug;
30 */
31
32
33 FUNCTION get_index (
34 p_val IN VARCHAR2
35 ) RETURN BINARY_INTEGER;
36
37 PROCEDURE put (
38 p_val IN VARCHAR2
39 );
40
41 FUNCTION search (
42 p_val IN VARCHAR2,
43 p_category IN VARCHAR2
44 ) RETURN BOOLEAN;
45
46 PROCEDURE validate_mandatory (
47 p_create_update_flag IN VARCHAR2,
48 p_column IN VARCHAR2,
49 p_column_value IN VARCHAR2,
50 p_restricted IN VARCHAR2 DEFAULT 'N',
51 x_return_status IN OUT NOCOPY VARCHAR2
52 );
53
54 PROCEDURE validate_mandatory (
55 p_create_update_flag IN VARCHAR2,
56 p_column IN VARCHAR2,
57 p_column_value IN NUMBER,
58 p_restricted IN VARCHAR2 DEFAULT 'N',
59 x_return_status IN OUT NOCOPY VARCHAR2
60 );
61
62 PROCEDURE validate_mandatory (
63 p_create_update_flag IN VARCHAR2,
64 p_column IN VARCHAR2,
65 p_column_value IN DATE,
66 p_restricted IN VARCHAR2 DEFAULT 'N',
67 x_return_status IN OUT NOCOPY VARCHAR2
68 );
69
70 PROCEDURE validate_nonupdateable (
71 p_column IN VARCHAR2,
72 p_column_value IN VARCHAR2,
73 p_old_column_value IN VARCHAR2,
74 p_restricted IN VARCHAR2 DEFAULT 'Y',
75 x_return_status IN OUT NOCOPY VARCHAR2
76 );
77
78 PROCEDURE validate_nonupdateable (
79 p_column IN VARCHAR2,
80 p_column_value IN NUMBER,
81 p_old_column_value IN NUMBER,
82 p_restricted IN VARCHAR2 DEFAULT 'Y',
83 x_return_status IN OUT NOCOPY VARCHAR2
84 );
85
86 PROCEDURE validate_nonupdateable (
87 p_column IN VARCHAR2,
88 p_column_value IN DATE,
89 p_old_column_value IN DATE,
90 p_restricted IN VARCHAR2 DEFAULT 'Y',
91 x_return_status IN OUT NOCOPY VARCHAR2
92 );
93
94 PROCEDURE validate_start_end_date (
95 p_create_update_flag IN VARCHAR2,
96 p_start_date_column_name IN VARCHAR2,
97 p_start_date IN DATE,
98 p_old_start_date IN DATE,
99 p_end_date_column_name IN VARCHAR2,
100 p_end_date IN DATE,
101 p_old_end_date IN DATE,
102 x_return_status IN OUT NOCOPY VARCHAR2
103 );
104
105 PROCEDURE validate_cannot_update_to_null (
106 p_column IN VARCHAR2,
107 p_column_value IN VARCHAR2,
108 x_return_status IN OUT NOCOPY VARCHAR2
109 );
110
111 PROCEDURE validate_cannot_update_to_null (
112 p_column IN VARCHAR2,
113 p_column_value IN NUMBER,
114 x_return_status IN OUT NOCOPY VARCHAR2
115 );
116
117 PROCEDURE validate_cannot_update_to_null (
118 p_column IN VARCHAR2,
119 p_column_value IN DATE,
120 x_return_status IN OUT NOCOPY VARCHAR2
121 );
122
123 PROCEDURE validate_lookup (
124 p_column IN VARCHAR2,
125 p_lookup_table IN VARCHAR2 DEFAULT 'AR_LOOKUPS',
126 p_lookup_type IN VARCHAR2,
127 p_column_value IN VARCHAR2,
128 x_return_status IN OUT NOCOPY VARCHAR2
129 );
130
131 PROCEDURE check_cust_account_fk (
132 p_column IN VARCHAR2,
133 p_column_value IN NUMBER,
134 x_return_status IN OUT NOCOPY VARCHAR2
135 );
136
137 PROCEDURE check_cust_acct_site_fk (
138 p_column IN VARCHAR2,
139 p_column_value IN NUMBER,
140 p_org_id IN NUMBER, -- Bug 3456489
141 x_return_status IN OUT NOCOPY VARCHAR2
142 );
143
144 PROCEDURE check_cust_site_use_fk (
145 p_column IN VARCHAR2,
146 p_column_value IN NUMBER,
147 x_return_status IN OUT NOCOPY VARCHAR2
148 );
149 PROCEDURE check_cust_site_use_cont_fk(
150 p_column IN VARCHAR2,
151 p_column_value IN NUMBER,
152 p_customer_id IN NUMBER,
153 x_return_status IN OUT NOCOPY VARCHAR2
154 );
155 PROCEDURE check_cust_account_role_fk (
156 p_column IN VARCHAR2,
157 p_column_value IN NUMBER,
158 x_return_status IN OUT NOCOPY VARCHAR2
159 );
160
161 PROCEDURE check_per_all_people_f_fk (
162 p_column IN VARCHAR2,
163 p_column_value IN NUMBER,
164 x_return_status IN OUT NOCOPY VARCHAR2
165 );
166
167 PROCEDURE check_collector_fk (
168 p_column IN VARCHAR2,
169 p_column_value IN NUMBER,
170 x_return_status IN OUT NOCOPY VARCHAR2
171 );
172
173 PROCEDURE check_party_fk (
174 p_column IN VARCHAR2,
175 p_column_value IN NUMBER,
176 x_return_status IN OUT NOCOPY VARCHAR2
177 );
178
179 PROCEDURE check_party_site_fk (
180 p_column IN VARCHAR2,
181 p_column_value IN NUMBER,
182 x_return_status IN OUT NOCOPY VARCHAR2
183 );
184
185 PROCEDURE check_currency_fk (
186 p_column IN VARCHAR2,
187 p_column_value IN VARCHAR2,
188 x_return_status IN OUT NOCOPY VARCHAR2
189 );
190
191 PROCEDURE check_oe_ship_methods_v_fk (
192 p_entity IN VARCHAR2,
193 p_column IN VARCHAR2,
194 p_column_value IN VARCHAR2,
195 x_return_status IN OUT NOCOPY VARCHAR2
196 );
197
198 PROCEDURE check_payterm_id_fk (
199 p_column IN VARCHAR2,
200 p_column_value IN VARCHAR2,
201 x_return_status IN OUT NOCOPY VARCHAR2
202 );
203
204 PROCEDURE check_late_charge_term_id_fk (
205 p_column IN VARCHAR2,
206 p_column_value IN NUMBER,
207 p_cons_inv_flag IN VARCHAR2,
208 x_return_status IN OUT NOCOPY VARCHAR2
209 );
210
211 PROCEDURE check_message_text_id_fk (
212 p_column IN VARCHAR2,
213 p_column_value IN NUMBER,
214 x_return_status IN OUT NOCOPY VARCHAR2
215 );
216
217 PROCEDURE check_exchange_rate_type_fk (
218 p_column IN VARCHAR2,
219 p_column_value IN VARCHAR2,
220 x_return_status IN OUT NOCOPY VARCHAR2
221 );
222
223 PROCEDURE check_charge_schedule_id_fk (
224 p_column IN VARCHAR2,
225 p_column_value IN NUMBER,
226 x_return_status IN OUT NOCOPY VARCHAR2
227 );
228
229 PROCEDURE check_finchrg_trx_fk (
230 p_column IN VARCHAR2,
231 p_column_value IN VARCHAR2,
232 p_org_id IN NUMBER, -- Bug 3456489
233 x_return_status IN OUT NOCOPY VARCHAR2
234 );
235
236
237 PROCEDURE check_price_list_fk (
238 p_column IN VARCHAR2,
239 p_column_value IN VARCHAR2,
240 x_return_status IN OUT NOCOPY VARCHAR2
241 );
242
243 PROCEDURE check_item_cross_ref(
244 p_column IN VARCHAR2,
245 p_column_value IN VARCHAR2,
246 x_return_status IN OUT NOCOPY VARCHAR2
247 );
248
249 PROCEDURE check_warehouse(
250 p_column IN VARCHAR2,
251 p_column_value IN VARCHAR2,
252 x_return_status IN OUT NOCOPY VARCHAR2
253 );
254
255 PROCEDURE check_ord_type(
256 p_column IN VARCHAR2,
257 p_column_value IN VARCHAR2,
258 p_org_id IN NUMBER, -- Bug 3456489
259 x_return_status IN OUT NOCOPY VARCHAR2
260 );
261
262 PROCEDURE check_prim_salesrep(
263 p_column IN VARCHAR2,
264 p_column_value IN VARCHAR2,
265 p_org_id IN NUMBER, -- Bug 3456489
266 x_return_status IN OUT NOCOPY VARCHAR2
267 );
268
269 PROCEDURE check_tax_code(
270 p_column IN VARCHAR2,
271 p_column_value IN VARCHAR2,
272 -- Bug 4713150
273 --p_org_id IN NUMBER, -- Bug 3456489
274 -- Bug 5136396: to indicate from where this procedure is called from.
275 p_called_from IN VARCHAR2,
276 x_return_status IN OUT NOCOPY VARCHAR2
277 );
278
279 PROCEDURE check_partial_mandatory_column (
280 p_column IN VARCHAR2,
281 p_column_value IN NUMBER,
282 x_return_status IN OUT NOCOPY VARCHAR2
283 );
284
285 PROCEDURE check_partial_mandatory_column (
286 p_column IN VARCHAR2,
287 p_column_value IN VARCHAR2,
288 x_return_status IN OUT NOCOPY VARCHAR2
289 );
290
291 PROCEDURE validate_gl_id (
292 p_gl_name IN VARCHAR2,
293 p_column_value IN NUMBER,
294 p_coa_id IN NUMBER, -- Bug 3456489
295 x_return_status IN OUT NOCOPY VARCHAR2
296 );
297
298 PROCEDURE check_auto_hierid_fk (
299 p_column IN VARCHAR2,
300 p_column_value IN NUMBER,
301 x_return_status IN OUT NOCOPY VARCHAR2
302 );
303
304 PROCEDURE check_stat_cycid_fk (
305 p_column IN VARCHAR2,
306 p_column_value IN NUMBER,
307 x_return_status IN OUT NOCOPY VARCHAR2
308 );
309
310 PROCEDURE check_dunning_letid_fk (
311 p_column IN VARCHAR2,
312 p_column_value IN NUMBER,
313 x_return_status IN OUT NOCOPY VARCHAR2
314 );
315
316 PROCEDURE check_standard_terms_fk (
317 p_column IN VARCHAR2,
318 p_column_value IN NUMBER,
319 p_cons_inv_flag IN VARCHAR2,
320 p_ckeck_acc_bfb_enabled IN VARCHAR2,
321 x_return_status IN OUT NOCOPY VARCHAR2
322 );
323
324 PROCEDURE check_grouping_ruleid_fk (
325 p_column IN VARCHAR2,
326 p_column_value IN NUMBER,
327 x_return_status IN OUT NOCOPY VARCHAR2
328 );
329
330 PROCEDURE check_positive_value (
331 p_column IN VARCHAR2,
332 p_column_value IN NUMBER,
333 x_return_status IN OUT NOCOPY VARCHAR2
334 );
335 PROCEDURE check_greater_than_zero (
336 p_column IN VARCHAR2,
337 p_column_value IN NUMBER,
338 x_return_status IN OUT NOCOPY VARCHAR2
339 );
340
341 PROCEDURE check_less_than_100 (
342 p_column IN VARCHAR2,
343 p_column_value IN NUMBER,
344 x_return_status IN OUT NOCOPY VARCHAR2
345 );
346
347 PROCEDURE validate_created_by_module (
348 p_create_update_flag IN VARCHAR2,
349 p_created_by_module IN VARCHAR2,
350 p_old_created_by_module IN VARCHAR2,
351 x_return_status IN OUT NOCOPY VARCHAR2
352 );
353
354 PROCEDURE validate_application_id (
355 p_create_update_flag IN VARCHAR2,
356 p_application_id IN NUMBER,
357 p_old_application_id IN NUMBER,
358 x_return_status IN OUT NOCOPY VARCHAR2
359 );
360
361
362 PROCEDURE validate_bill_level (
363 p_create_update_flag IN VARCHAR2,
364 p_customer_profile_rec IN HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
365 x_return_status IN OUT NOCOPY VARCHAR2
366 );
367
368 --------------------------------------
369 -- public procedures and functions
370 --------------------------------------
371
372 /**
373 * PROCEDURE validate_cust_account
374 *
375 * DESCRIPTION
376 * Validates customer account record. Checks for
377 * uniqueness
378 * lookup types
379 * mandatory columns
380 * non-updateable fields
381 * foreign key validations
382 * other validations
383 *
384 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
385 *
386 * ARGUMENTS
387 * IN:
388 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
389 * p_cust_account_rec Customer account record.
390 * p_rowid Rowid of the record (used only in update mode).
391 * IN/OUT:
392 * x_return_status Return status after the call. The status can
393 * be FND_API.G_RET_STS_SUCCESS (success),
394 * FND_API.G_RET_STS_ERROR (error),
395 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
396 *
397 * NOTES
398 *
399 * MODIFICATION HISTORY
400 *
401 * 07-23-2001 Jianying Huang o Created.
402 * 11-08-2001 Rajeshwari P Included the validation for fields, tax_code,
403 * invoice_quantity_rule,customer_class_code,
404 * tax_rounding_rule,primary_salesrep_id,
405 * order_type_id,price_list_id,ship_partial,fob_point ,
406 * item_cross_ref_pref,warehouse_id,date_type_preference,
407 * ship_sets_include_lines_flag and
408 * arrivalsets_include_lines_flag in procedure
409 * VALIDATE_CUST_ACCOUNT.
410 * 21-05-2002 Rajeshwari P Bug fix 2311760.Commented the code which validates the
411 * Obsolete column ship_partial.
412 *
413 * 05-26-2003 Ramesh Ch Bug No:2441276. Added Validation to make
414 * account_number as non updateable.
415 * 12-MAY-2005 Rajib Ranjan Borah o TCA SSA Uptake (Bug 3456489)
416 * ~ HZ Cache will be used instead of querying from
417 * AR System Parameters.
418 * ~ Tax Code, Order Type and Sales Rep are no longer set
419 * at the Cust Account level.
420 */
421
422 PROCEDURE validate_cust_account (
423 p_create_update_flag IN VARCHAR2,
424 p_cust_account_rec IN HZ_CUST_ACCOUNT_V2PUB.CUST_ACCOUNT_REC_TYPE,
425 p_rowid IN ROWID,
426 x_return_status IN OUT NOCOPY VARCHAR2
427 ) IS
428
429 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_account'
430
431 l_dummy VARCHAR2(1);
432 l_rowid ROWID := NULL;
433
434 -- Bug 3456489
435 -- l_profile AR_SYSTEM_PARAMETERS.generate_customer_number%TYPE;
436 l_profile VARCHAR2(1);
437
438 l_orig_system_reference HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
439 l_orig_system_reference1 HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
440 l_account_established_date HZ_CUST_ACCOUNTS.account_established_date%TYPE;
441 -- l_account_termination_date HZ_CUST_ACCOUNTS.account_termination_date%TYPE;
442 -- l_account_activation_date HZ_CUST_ACCOUNTS.account_activation_date%TYPE;
443 l_created_by_module HZ_CUST_ACCOUNTS.created_by_module%TYPE;
444 l_application_id NUMBER;
445 l_status HZ_CUST_ACCOUNTS.status%TYPE;
446 l_customer_type HZ_CUST_ACCOUNTS.customer_type%TYPE;
447 l_sales_channel_code HZ_CUST_ACCOUNTS.sales_channel_code%TYPE;
448 l_freight_term HZ_CUST_ACCOUNTS.freight_term%TYPE;
449 l_ship_via HZ_CUST_ACCOUNTS.ship_via%TYPE;
450 l_ship_sets_inc_lines_f HZ_CUST_ACCOUNTS.ship_sets_include_lines_flag%TYPE;
451 l_arrivalsets_inc_lines_f HZ_CUST_ACCOUNTS.arrivalsets_include_lines_flag%TYPE;
452 l_tax_code HZ_CUST_ACCOUNTS.TAX_CODE%TYPE;
453 l_invoice_quantity_rule HZ_CUST_ACCOUNTS.INVOICE_QUANTITY_RULE%TYPE;
454 -- l_primary_salesrep_id HZ_CUST_ACCOUNTS.PRIMARY_SALESREP_ID%TYPE;
455 l_order_type_id HZ_CUST_ACCOUNTS.ORDER_TYPE_ID%TYPE;
456 l_price_list_id HZ_CUST_ACCOUNTS.PRICE_LIST_ID%TYPE;
457 -- l_ship_partial HZ_CUST_ACCOUNTS.SHIP_PARTIAL%TYPE;
458 l_fob_point HZ_CUST_ACCOUNTS.FOB_POINT%TYPE;
459 l_item_cross_ref_pref HZ_CUST_ACCOUNTS.ITEM_CROSS_REF_PREF%TYPE;
460 l_warehouse_id HZ_CUST_ACCOUNTS.WAREHOUSE_ID%TYPE;
461 l_date_type_preference HZ_CUST_ACCOUNTS.DATE_TYPE_PREFERENCE%TYPE;
462 l_customer_class_code HZ_CUST_ACCOUNTS.CUSTOMER_CLASS_CODE%TYPE;
463 l_tax_rounding_rule HZ_CUST_ACCOUNTS.TAX_ROUNDING_RULE%TYPE;
464 l_account_number HZ_CUST_ACCOUNTS.ACCOUNT_NUMBER%TYPE;
465 l_instr_length number := 0;
466 l_validate_flag varchar2(1) := 'Y';
467 l_mosr_owner_table_id number;
468
469 l_temp_return_status VARCHAR2(10); -- for storing return status from
470 -- hz_orig_system_ref_pub.get_owner_table_id
471
472 BEGIN
473
474 -- Check if API is called in debug mode. If yes, enable debug.
475 --enable_debug;
476
477 -- Debug info.
478 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
479 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_cust_account (+)',
480 p_msg_level=>fnd_log.level_procedure);
481 END IF;
482
483
484 -- Select fields for later use during update.
485 IF p_create_update_flag = 'U' THEN
486 SELECT ACCOUNT_NUMBER,ORIG_SYSTEM_REFERENCE, ACCOUNT_ESTABLISHED_DATE,
487 -- ACCOUNT_TERMINATION_DATE, --ACCOUNT_ACTIVATION_DATE,
488 CREATED_BY_MODULE, APPLICATION_ID,
489 STATUS, CUSTOMER_TYPE, SALES_CHANNEL_CODE, FREIGHT_TERM,
490 SHIP_VIA,SHIP_SETS_INCLUDE_LINES_FLAG,ARRIVALSETS_INCLUDE_LINES_FLAG,
491 TAX_CODE,INVOICE_QUANTITY_RULE,--PRIMARY_SALESREP_ID,
492 ORDER_TYPE_ID,PRICE_LIST_ID,FOB_POINT,
493 ITEM_CROSS_REF_PREF,WAREHOUSE_ID,DATE_TYPE_PREFERENCE,
494 CUSTOMER_CLASS_CODE,TAX_ROUNDING_RULE
495 INTO l_account_number,l_orig_system_reference, l_account_established_date,
496 -- l_account_termination_date, --l_account_activation_date,
497 l_created_by_module, l_application_id,
498 l_status, l_customer_type, l_sales_channel_code, l_freight_term,
499 l_ship_via,l_ship_sets_inc_lines_f,l_arrivalsets_inc_lines_f,
500 l_tax_code,l_invoice_quantity_rule,--l_primary_salesrep_id,
501 l_order_type_id,l_price_list_id,l_fob_point,
502 l_item_cross_ref_pref,l_warehouse_id,l_date_type_preference,
503 l_customer_class_code,l_tax_rounding_rule
504 FROM HZ_CUST_ACCOUNTS
505 WHERE ROWID = p_rowid;
506 END IF;
507
508 --------------------------------------
509 -- validate cust_account_id
510 --------------------------------------
511 /****Logical APIs - validation not required****/
512 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
513 IF p_create_update_flag = 'C' THEN
514
515 -- If primary key value is passed, check for uniqueness.
516 -- If primary key value is not passed, it will be generated
517 -- from sequence by table handler.
518
519 IF p_cust_account_rec.cust_account_id IS NOT NULL AND
520 p_cust_account_rec.cust_account_id <> FND_API.G_MISS_NUM
521 THEN
522 BEGIN
523 SELECT 'Y' INTO l_dummy
524 FROM HZ_CUST_ACCOUNTS
525 WHERE CUST_ACCOUNT_ID = p_cust_account_rec.cust_account_id;
526
527 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
528 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
529 FND_MSG_PUB.ADD;
530 x_return_status := FND_API.G_RET_STS_ERROR;
531 EXCEPTION
532 WHEN NO_DATA_FOUND THEN
533 NULL;
534 END;
535
536 /*IF G_DEBUG THEN
537 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
538 'cust_account_id is unique during creation if passed in. ' ||
539 'x_return_status = ' || x_return_status, l_debug_prefix );
540 END IF;
541 */
542 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
543 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
544 p_message=>'cust_account_id is unique during creation if passed in. ' ||
545 'x_return_status = ' || x_return_status,
546 p_msg_level=>fnd_log.level_statement);
547 END IF;
548
549 END IF;
550
551 END IF;
552
553 /*IF G_DEBUG THEN
554 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
555 '(+) after validate cust_account_id ... ' ||
556 'x_return_status = ' || x_return_status, l_debug_prefix );
557 END IF;
558 */
559 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
560 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate cust_account_id ... ' ||
561 'x_return_status = ' || x_return_status,
562 p_msg_level=>fnd_log.level_statement);
563 END IF;
564 END IF;
565
566 --------------------------------------
567 -- validate account_number
568 --------------------------------------
569
570 -- account_number should be mandatory and unique.
571
572 -- check if need generate account_number.
573 BEGIN
574
575 /* 3456489. Refer the new HZ_CACHE. */
576 --IF p_create_update_flag = 'C' THEN
577 l_profile := HZ_MO_GLOBAL_CACHE.Get_Generate_Customer_Number;
578 --END IF;
579
580 EXCEPTION
581 WHEN NO_DATA_FOUND THEN
582 x_return_status := FND_API.G_RET_STS_ERROR;
583 END ;
584
585 /* IF G_DEBUG THEN
586 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
587 'account_number autonumbering is ' || NVL( l_profile, 'N' ),
588 l_debug_prefix );
589 END IF;
590 */
591 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
592 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number autonumbering is ' || NVL( l_profile, 'N' ),
593 p_msg_level=>fnd_log.level_statement);
594 END IF;
595
596 IF p_create_update_flag = 'C' THEN
597
598 -- If autonumbering is on, if user has passed in an account_number,
599 -- error out. If autonumbering is off, if user has not passed in
600 -- value, error out;
601
602 IF l_profile = 'Y' THEN
603 IF p_cust_account_rec.account_number IS NOT NULL AND
604 p_cust_account_rec.account_number <> FND_API.G_MISS_CHAR
605 THEN
606 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCOUNT_NUMBER_AUTO_ON' );
607 FND_MSG_PUB.ADD;
608 x_return_status := FND_API.G_RET_STS_ERROR;
609 END IF;
610
611 -- the account_number will be generated from sequence by table handler.
612
613 /*IF G_DEBUG THEN
614 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
615 'account_number cannot be passed in if autonumbering is on. ' ||
616 'x_return_status = ' || x_return_status, l_debug_prefix );
617 END IF;
618 */
619 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
620 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
621 p_message=>'account_number cannot be passed in if autonumbering is on. ' ||
622 'x_return_status = ' || x_return_status,
623 p_msg_level=>fnd_log.level_statement);
624 END IF;
625
626 ELSIF l_profile = 'N' /* Bug 5118546 */
627 THEN
628 IF p_cust_account_rec.account_number IS NULL OR
629 p_cust_account_rec.account_number = FND_API.G_MISS_CHAR
630 THEN
631 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
632 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'account_number' );
633 FND_MSG_PUB.ADD;
634 x_return_status := FND_API.G_RET_STS_ERROR;
635 END IF;
636
637 /*IF G_DEBUG THEN
638 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
639 'account_number is mandatory if autonumbering is off. ' ||
640 'x_return_status = ' || x_return_status, l_debug_prefix );
641 END IF;
642 */
643 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
644 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is mandatory if autonumbering is off. ' ||
645 'x_return_status = ' || x_return_status,
646 p_msg_level=>fnd_log.level_statement);
647 END IF;
648
649 END IF;
650
651 ELSE -- in update
652 IF p_cust_account_rec.account_number IS NOT NULL THEN
653 validate_cannot_update_to_null (
654 p_column => 'account_number',
655 p_column_value => p_cust_account_rec.account_number,
656 x_return_status => x_return_status );
657
658 /*IF G_DEBUG THEN
659 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
660 'account_number cannot be updated to null. ' ||
661 'x_return_status = ' || x_return_status, l_debug_prefix );
662 END IF;
663 */
664 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
665 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number cannot be updated to null. ' ||
666 'x_return_status = ' || x_return_status,
667 p_msg_level=>fnd_log.level_statement);
668 END IF;
669
670 --------------------------------------
671 -- validate ACCOUNT NUMBER BugNo:2441276
672 --------------------------------------
673
674 -- bug 3969469. account_number is updatable if the system option
675 -- if AUTO_CUSTOMER_NUMBERING is OFF else it is not updatable.
676
677
678 IF (p_cust_account_rec.account_number<>l_account_number
679 AND l_profile='Y') -- bug 3969469
680 THEN
681
682 validate_nonupdateable (
683 p_column => 'account_number',
684 p_column_value => p_cust_account_rec.account_number,
685 p_old_column_value => l_account_number,
686 x_return_status => x_return_status );
687
688 /*IF G_DEBUG THEN
689 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
690 'account_number is non-updateable. ' ||
691 'x_return_status = ' || x_return_status, l_debug_prefix );
692 END IF;
693 */
694 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
695 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is non-updateable. ' ||
696 'x_return_status = ' || x_return_status,
697 p_msg_level=>fnd_log.level_statement);
698 END IF;
699
700 END IF;
701
702 END IF;
703
704 END IF;
705
706 -- account_number is unique.
707 IF p_cust_account_rec.account_number IS NOT NULL AND
708 p_cust_account_rec.account_number <> FND_API.G_MISS_CHAR
709 THEN
710 BEGIN
711 SELECT ROWID INTO l_rowid
712 FROM HZ_CUST_ACCOUNTS
713 WHERE ACCOUNT_NUMBER = p_cust_account_rec.account_number;
714
715 IF p_create_update_flag = 'C' OR
716 ( p_create_update_flag = 'U' AND l_rowid <> p_rowid )
717 THEN
718 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
719 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'account_number' );
720 FND_MSG_PUB.ADD;
721 x_return_status := FND_API.G_RET_STS_ERROR;
722 END IF;
723 EXCEPTION
724 WHEN NO_DATA_FOUND THEN
725 NULL;
726 END;
727
728 /*IF G_DEBUG THEN
729 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
730 'account_number is unique. ' ||
731 'x_return_status = ' || x_return_status, l_debug_prefix );
732 END IF;
733 */
734 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
735 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_number is unique. ' ||
736 'x_return_status = ' || x_return_status,
737 p_msg_level=>fnd_log.level_statement);
738 END IF;
739
740 END IF;
741
742
743
744
745 /*IF G_DEBUG THEN
746 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
747 '(+) after validate account_number ... ' ||
748 'x_return_status = ' || x_return_status, l_debug_prefix );
749 END IF;
750 */
751
752 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
753 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate account_number ... ' ||
754 'x_return_status = ' || x_return_status,
755 p_msg_level=>fnd_log.level_statement);
756 END IF;
757
758
759 --------------------------------------
760 -- validate orig_system_reference
761 --------------------------------------
762 /****Logical APIs - validation not required****/
763 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
764 -- orig_system_reference is unique. Since orig_system_refence is defaulting to
765 -- primary key, we only need to check the uniqueness if user passes some value.
766 -- database constraints can catch unique error when we defaulting.
767 -- orig_system_reference is non-updateable, we only need to check uniqueness
768 -- during creation.
769
770 IF p_create_update_flag = 'C' AND
771 p_cust_account_rec.orig_system_reference IS NOT NULL AND
772 p_cust_account_rec.orig_system_reference <> FND_API.G_MISS_CHAR
773 THEN
774 BEGIN
775 SELECT 'Y' INTO l_dummy
776 FROM HZ_CUST_ACCOUNTS
777 WHERE ORIG_SYSTEM_REFERENCE = p_cust_account_rec.orig_system_reference;
778
779 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
780 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'orig_system_reference' );
781 FND_MSG_PUB.ADD;
782 x_return_status := FND_API.G_RET_STS_ERROR;
783 EXCEPTION
784 WHEN NO_DATA_FOUND THEN
785 NULL;
786 END;
787
788 /*IF G_DEBUG THEN
789 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
790 'orig_system_reference is unique. ' ||
791 'x_return_status = ' || x_return_status, l_debug_prefix );
792 END IF;
793 */
794 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
795 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is unique. ' ||
796 'x_return_status = ' || x_return_status,
797 p_msg_level=>fnd_log.level_statement);
798 END IF;
799
800 END IF;
801
802 l_instr_length := instr(l_orig_system_reference,'#@');
803 if l_instr_length > 0
804 then
805 l_orig_system_reference1 := null;
806 if substr(l_orig_system_reference,1,l_instr_length-1) <> p_cust_account_rec.orig_system_reference
807 then
808 l_validate_flag := 'N';
809 end if;
810 else
811 l_orig_system_reference1 := p_cust_account_rec.orig_system_reference;
812 end if;
813
814 IF (p_cust_account_rec.orig_system is not null and p_cust_account_rec.orig_system <>fnd_api.g_miss_char)
815 and (p_cust_account_rec.orig_system_reference is not null and p_cust_account_rec.orig_system_reference <>fnd_api.g_miss_char)
816 and p_create_update_flag = 'U'
817 then
818 hz_orig_system_ref_pub.get_owner_table_id
819 (p_orig_system => p_cust_account_rec.orig_system,
820 p_orig_system_reference => p_cust_account_rec.orig_system_reference,
821 p_owner_table_name => 'HZ_CUST_ACCOUNTS',
822 x_owner_table_id => l_mosr_owner_table_id,
823 x_return_status => l_temp_return_status);
824
825 IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
826 l_mosr_owner_table_id= nvl(p_cust_account_rec.cust_account_id,l_mosr_owner_table_id))
827 THEN
828 l_validate_flag := 'N';
829 END IF;
830
831 -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
832 -- x_return_status. Set x_return_status to error, ONLY if there is error.
833 -- In case of success, leave it to carry over previous value as before this call.
834 -- Fix for Bug 5498116 (29-AUG-2006)
835 IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
836 x_return_status := l_temp_return_status;
837 END IF;
838
839 END IF;
840 -- orig_system_reference is non-updateable field
841 IF p_create_update_flag = 'U' AND
842 p_cust_account_rec.orig_system_reference IS NOT NULL
843 and l_validate_flag = 'Y'
844 THEN
845
846 validate_nonupdateable (
847 p_column => 'orig_system_reference',
848 p_column_value => l_orig_system_reference1,
849 p_old_column_value => l_orig_system_reference,
850 x_return_status => x_return_status );
851
852 /*IF G_DEBUG THEN
853 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
854 'orig_system_reference is non-updateable. ' ||
855 'x_return_status = ' || x_return_status, l_debug_prefix );
856 END IF;
857 */
858 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
859 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is non-updateable. ' ||
860 'x_return_status = ' || x_return_status,
861 p_msg_level=>fnd_log.level_statement);
862 END IF;
863
864 END IF;
865
866 /*IF G_DEBUG THEN
867 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
868 '(+) after validate orig_system_reference ... ' ||
869 'x_return_status = ' || x_return_status, l_debug_prefix );
870 END IF;
871 */
872 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
873 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
874 'x_return_status = ' || x_return_status,
875 p_prefix =>l_debug_prefix,
876 p_msg_level=>fnd_log.level_statement);
877 END IF;
878 END IF;
879
880
881
882 --------------------------------------
883 -- validate status
884 --------------------------------------
885
886 -- status cannot be set to null during update
887 IF p_create_update_flag = 'U' AND
888 p_cust_account_rec.status IS NOT NULL
889 THEN
890 validate_cannot_update_to_null (
891 p_column => 'status',
892 p_column_value => p_cust_account_rec.status,
893 x_return_status => x_return_status );
894
895 /*IF G_DEBUG THEN
896 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
897 'status cannot be updated to null. ' ||
898 'x_return_status = ' || x_return_status, l_debug_prefix );
899 END IF;
900 */
901 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
902 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be updated to null. ' ||
903 'x_return_status = ' || x_return_status,
904 p_msg_level=>fnd_log.level_statement);
905 END IF;
906
907 END IF;
908
909 /****Logical APIs - validation not required****/
910 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
911 -- status is lookup code in lookup type CODE_STATUS
912 IF p_cust_account_rec.status IS NOT NULL AND
913 p_cust_account_rec.status <> FND_API.G_MISS_CHAR AND
914 ( p_create_update_flag = 'C' OR
915 ( p_create_update_flag = 'U' AND
916 p_cust_account_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
917 THEN
918 validate_lookup (
919 p_column => 'status',
920 p_lookup_type => 'CODE_STATUS',
921 p_column_value => p_cust_account_rec.status,
922 x_return_status => x_return_status );
923
924 /*IF G_DEBUG THEN
925 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
926 'status is lookup code in lookup type CODE_STATUS. ' ||
927 'x_return_status = ' || x_return_status, l_debug_prefix );
928 END IF;
929 */
930
931 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
932 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
933 'x_return_status = ' || x_return_status,
934 p_msg_level=>fnd_log.level_statement);
935 END IF;
936
937 END IF;
938 END IF;
939
940 /*IF G_DEBUG THEN
941 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
942 '(+) after validate status ... ' ||
943 'x_return_status = ' || x_return_status, l_debug_prefix );
944 END IF;
945 */
946
947 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
948 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate status ... ' ||
949 'x_return_status = ' || x_return_status,
950 p_msg_level=>fnd_log.level_statement);
951 END IF;
952
953
954 --------------------------------------
955 -- validate customer_type
956 --------------------------------------
957
958 -- customer_type is lookup code in lookup type CUSTOMER_TYPE
959 IF p_cust_account_rec.customer_type IS NOT NULL AND
960 p_cust_account_rec.customer_type <> FND_API.G_MISS_CHAR AND
961 ( p_create_update_flag = 'C' OR
962 ( p_create_update_flag = 'U' AND
963 p_cust_account_rec.customer_type <> NVL( l_customer_type, FND_API.G_MISS_CHAR ) ) )
964 THEN
965 validate_lookup (
966 p_column => 'customer_type',
967 p_lookup_type => 'CUSTOMER_TYPE',
968 p_column_value => p_cust_account_rec.customer_type,
969 x_return_status => x_return_status );
970
971 /*IF G_DEBUG THEN
972 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
973 'customer_type is lookup code in lookup type CUSTOMER_TYPE. ' ||
974 'x_return_status = ' || x_return_status, l_debug_prefix );
975 END IF;
976 */
977 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
978 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'customer_type is lookup code in lookup type CUSTOMER_TYPE. ' ||
979 'x_return_status = ' || x_return_status,
980 p_msg_level=>fnd_log.level_statement);
981 END IF;
982
983 END IF;
984
985 /*IF G_DEBUG THEN
986 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
987 '(+) after validate customer_type ... ' ||
988 'x_return_status = ' || x_return_status, l_debug_prefix );
989 END IF;
990 */
991 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
992 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate customer_type ... ' ||
993 'x_return_status = ' || x_return_status,
994 p_msg_level=>fnd_log.level_statement);
995 END IF;
996
997
998 --------------------------------------
999 -- validate sales_channel_code
1000 --------------------------------------
1001
1002 -- sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups
1003 IF p_cust_account_rec.sales_channel_code IS NOT NULL AND
1004 p_cust_account_rec.sales_channel_code <> FND_API.G_MISS_CHAR AND
1005 ( p_create_update_flag = 'C' OR
1006 ( p_create_update_flag = 'U' AND
1007 p_cust_account_rec.sales_channel_code <> NVL( l_sales_channel_code, FND_API.G_MISS_CHAR ) ) )
1008 THEN
1009 validate_lookup (
1010 p_column => 'sales_channel_code',
1011 p_lookup_table => 'SO_LOOKUPS',
1012 p_lookup_type => 'SALES_CHANNEL',
1013 p_column_value => p_cust_account_rec.sales_channel_code,
1014 x_return_status => x_return_status );
1015
1016 /*IF G_DEBUG THEN
1017 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1018 'sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups. ' ||
1019 'x_return_status = ' || x_return_status, l_debug_prefix );
1020 END IF;
1021 */
1022 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1023 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sales_channel_code is lookup code in lookup type SALES_CHANNEL in so_lookups. ' ||
1024 'x_return_status = ' || x_return_status,
1025 p_msg_level=>fnd_log.level_statement);
1026 END IF;
1027
1028 END IF;
1029
1030 /*IF G_DEBUG THEN
1031 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1032 '(+) after validate sales_channel_code ... ' ||
1033 'x_return_status = ' || x_return_status, l_debug_prefix );
1034 END IF;
1035 */
1036 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1037 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate sales_channel_code ... ' ||
1038 'x_return_status = ' || x_return_status,
1039 p_msg_level=>fnd_log.level_statement);
1040 END IF;
1041
1042
1043 --------------------------------------
1044 -- validate freight_term
1045 --------------------------------------
1046
1047 -- freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups
1048 IF p_cust_account_rec.freight_term IS NOT NULL AND
1049 p_cust_account_rec.freight_term <> FND_API.G_MISS_CHAR AND
1050 ( p_create_update_flag = 'C' OR
1051 ( p_create_update_flag = 'U' AND
1052 p_cust_account_rec.freight_term <> NVL( l_freight_term, FND_API.G_MISS_CHAR ) ) )
1053 THEN
1054 validate_lookup (
1055 p_column => 'freight_term',
1056 p_lookup_table => 'SO_LOOKUPS',
1057 p_lookup_type => 'FREIGHT_TERMS',
1058 p_column_value => p_cust_account_rec.freight_term,
1059 x_return_status => x_return_status );
1060
1061 /*IF G_DEBUG THEN
1062 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1063 'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
1064 'x_return_status = ' || x_return_status, l_debug_prefix );
1065 END IF;
1066 */
1067 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1068 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
1069 'x_return_status = ' || x_return_status,
1070 p_msg_level=>fnd_log.level_statement);
1071 END IF;
1072
1073
1074 END IF;
1075
1076 /*IF G_DEBUG THEN
1077 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1078 '(+) after validate freight_term ... ' ||
1079 'x_return_status = ' || x_return_status, l_debug_prefix );
1080 END IF;
1081 */
1082 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1083 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate freight_term ... ' ||
1084 'x_return_status = ' || x_return_status,
1085 p_msg_level=>fnd_log.level_statement);
1086 END IF;
1087
1088
1089 --------------------------------------
1090 -- validate tax_header_level_flag
1091 --------------------------------------
1092 /****Logical APIs - validation not required****/
1093 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1094 -- tax_header_level_flag is lookup code in lookup type YES/NO
1095 IF p_cust_account_rec.tax_header_level_flag IS NOT NULL AND
1096 p_cust_account_rec.tax_header_level_flag <> FND_API.G_MISS_CHAR
1097 THEN
1098 validate_lookup (
1099 p_column => 'tax_header_level_flag',
1100 p_lookup_type => 'YES/NO',
1101 p_column_value => p_cust_account_rec.tax_header_level_flag,
1102 x_return_status => x_return_status );
1103
1104 /*IF G_DEBUG THEN
1105 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1106 'tax_header_level_flag is lookup code in lookup type YES/NO. ' ||
1107 'x_return_status = ' || x_return_status, l_debug_prefix );
1108 END IF;
1109 */
1110
1111 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1112 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_header_level_flag is lookup code in lookup type YES/NO. ' ||
1113 'x_return_status = ' || x_return_status,
1114 p_msg_level=>fnd_log.level_statement);
1115 END IF;
1116
1117 END IF;
1118
1119 /*IF G_DEBUG THEN
1120 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1121 '(+) after validate tax_header_level_flag ... ' ||
1122 'x_return_status = ' || x_return_status, l_debug_prefix );
1123 END IF;
1124 */
1125 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1126 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_header_level_flag ... ' ||
1127 'x_return_status = ' || x_return_status,
1128 p_msg_level=>fnd_log.level_statement);
1129 END IF;
1130 END IF;
1131
1132 ----------------------------
1133 --validate tax_code
1134 ----------------------------
1135
1136 -- Bug 4713150 : tax_code is now validated against the view zx_output_classifications_v
1137 /*
1138 IF p_cust_account_rec.tax_code IS NOT NULL AND
1139 p_cust_account_rec.tax_code <> FND_API.G_MISS_CHAR
1140 THEN
1141 FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1142 FND_MESSAGE.SET_TOKEN('COLUMN','TAX_CODE');
1143 FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1144 FND_MSG_PUB.ADD;
1145 x_return_status := FND_API.G_RET_STS_ERROR;
1146 END IF;
1147 */
1148
1149 IF p_cust_account_rec.tax_code is NOT NULL AND
1150 p_cust_account_rec.tax_code <> FND_API.G_MISS_CHAR AND
1151 ( p_create_update_flag = 'C' OR
1152 ( p_create_update_flag = 'U' AND
1153 p_cust_account_rec.tax_code <> NVL( l_tax_code, FND_API.G_MISS_CHAR ) ) )
1154 THEN
1155 check_tax_code(
1156 p_column => 'tax_code',
1157 p_column_value => p_cust_account_rec.tax_code,
1158 p_called_from => 'validate_cust_account',
1159 x_return_status => x_return_status );
1160
1161 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1162 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Tax_code should be a valid value defined in view zx_output_classifications_v. '||
1163 'x_return_status = ' || x_return_status,
1164 p_msg_level=>fnd_log.level_statement);
1165 END IF;
1166
1167 END IF;
1168 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1169 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_code..' ||
1170 'x_return_status = ' || x_return_status,
1171 p_msg_level=>fnd_log.level_statement);
1172 END IF;
1173
1174
1175 ----------------------------------------------------------
1176 --validate order_type_id
1177 ----------------------------------------------------------
1178 /* 3456489. Order type is no longer set at the Customer Account Level. */
1179
1180 IF p_cust_account_rec.order_type_id IS NOT NULL AND
1181 p_cust_account_rec.order_type_id <> FND_API.G_MISS_NUM
1182 THEN
1183 FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1184 FND_MESSAGE.SET_TOKEN('COLUMN','ORDER_TYPE_ID');
1185 FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1186 FND_MSG_PUB.ADD;
1187 x_return_status := FND_API.G_RET_STS_ERROR;
1188 END IF;
1189
1190
1191 /*
1192 | --order_type_id should be a valid value defined in OE_ORDER_TYPES_V
1193 |
1194 | IF p_cust_account_rec.order_type_id is NOT NULL AND
1195 | p_cust_account_rec.order_type_id <> FND_API.G_MISS_NUM AND
1196 | ( p_create_update_flag = 'C' OR
1197 | ( p_create_update_flag = 'U' AND
1198 | p_cust_account_rec.order_type_id <> NVL( l_order_type_id, FND_API.G_MISS_NUM ) ) )
1199 | THEN
1200 | check_ord_type(
1201 | p_column => 'order_type_id',
1202 | p_column_value => p_cust_account_rec.order_type_id,
1203 | x_return_status => x_return_status );
1204 |
1205 | /*IF G_DEBUG THEN
1206 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1207 | 'order_type_id should be a valid value defined in OE_ORDER_TYPES_V..' ||
1208 | 'x_return_status = ' || x_return_status, l_debug_prefix);
1209 | END IF;
1210 | *//*
1211 | IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1212 | | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'order_type_id should be a valid value defined in OE_ORDER_TYPES_V..' ||
1213 | 'x_return_status = ' || x_return_status,
1214 | p_msg_level=>fnd_log.level_statement);
1215 | END IF;
1216 |
1217 | END IF;
1218 | /*IF G_DEBUG THEN
1219 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1220 | '(+) after validate order_type_id..' ||
1221 | 'x_return_status = ' || x_return_status, l_debug_prefix );
1222 | END IF;
1223 | *//*
1224 | IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1225 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate order_type_id..' ||
1226 | 'x_return_status = ' || x_return_status,
1227 | p_msg_level=>fnd_log.level_statement);
1228 | END IF;
1229 */
1230
1231 ----------------------------------------------------------
1232 --validate primary_salesrep_id
1233 ----------------------------------------------------------
1234 /* 3456489. Sales Rep is no longer set at the Customer Account Level. */
1235
1236 IF p_cust_account_rec.primary_salesrep_id IS NOT NULL AND
1237 p_cust_account_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
1238 THEN
1239 FND_MESSAGE.SET_NAME('AR','HZ_API_COLUMN_SHOULD_BE_NULL');
1240 FND_MESSAGE.SET_TOKEN('COLUMN','PRIMARY_SALESREP_ID');
1241 FND_MESSAGE.SET_TOKEN('TABLE','HZ_CUST_ACCOUNTS');
1242 FND_MSG_PUB.ADD;
1243 x_return_status := FND_API.G_RET_STS_ERROR;
1244 END IF;
1245
1246 /*
1247 | --Primary_salesrep_id should be a valid value defined in RA_SALESREPS
1248 |
1249 | IF p_cust_account_rec.primary_salesrep_id is NOT NULL AND
1250 | p_cust_account_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
1251 | AND ( p_create_update_flag = 'C' OR
1252 | ( p_create_update_flag = 'U' AND
1253 | p_cust_account_rec.primary_salesrep_id <> NVL( l_primary_salesrep_id, FND_API.G_MISS_NUM ) ) )
1254 | THEN
1255 | check_prim_salesrep(
1256 | p_column => 'primary_salesrep_id',
1257 | p_column_value => p_cust_account_rec.primary_salesrep_id,
1258 | x_return_status => x_return_status );
1259 |
1260 | /*IF G_DEBUG THEN
1261 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1262 | 'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
1263 | 'x_return_status = ' || x_return_status, l_debug_prefix);
1264 | | END IF;
1265 | | *//*
1266 | IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1267 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
1268 | 'x_return_status = ' || x_return_status,
1269 | p_msg_level=>fnd_log.level_statement);
1270 | END IF;
1271 |
1272 | END IF;
1273 | /*IF G_DEBUG THEN
1274 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1275 | '(+) after validate primary_salesrep_id..' ||
1276 | 'x_return_status = ' || x_return_status, l_debug_prefix );
1277 | END IF;
1278 | *//*
1279 | IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1280 | hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate primary_salesrep_id..' ||
1281 | 'x_return_status = ' || x_return_status,
1282 | p_msg_level=>fnd_log.level_statement);
1283 | END IF;
1284 */
1285
1286 --Bug fix 2311760
1287 /**********
1288 -------------------------------------------------------
1289 --validate ship_partial
1290 -------------------------------------------------------
1291 -- ship_partial is a lookup code in lookup type YES/NO
1292
1293 IF p_cust_account_rec.ship_partial IS NOT NULL AND
1294 p_cust_account_rec.ship_partial <> FND_API.G_MISS_CHAR
1295 AND ( p_create_update_flag = 'C' OR
1296 ( p_create_update_flag = 'U' AND
1297 p_cust_account_rec.ship_partial <> NVL( l_ship_partial, FND_API.G_MISS_CHAR) ) )
1298 THEN
1299 validate_lookup (
1300 p_column => 'ship_partial',
1301 p_lookup_type => 'YES/NO',
1302 p_column_value => p_cust_account_rec.ship_partial,
1303 x_return_status => x_return_status );
1304
1305 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1306 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ship_partial is a lookup code in lookup type YES/NO. ' ||
1307 'x_return_status = ' || x_return_status,
1308 p_msg_level=>fnd_log.level_statement);
1309 END IF;
1310
1311 END IF;
1312
1313 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1314 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate ship_partial ... ' ||
1315 'x_return_status = ' || x_return_status,
1316 p_msg_level=>fnd_log.level_statement);
1317 END IF;
1318
1319
1320 ***************/
1321 -----------------------------------------------------------
1322 --validate tax_rounding_rule
1323 -----------------------------------------------------------
1324 --tax_rounding_rule is a lookup_code in lookup type TAX_ROUNDING_RULE
1325
1326 IF p_cust_account_rec.tax_rounding_rule is NOT NULL AND
1327 p_cust_account_rec.tax_rounding_rule <> FND_API.G_MISS_CHAR
1328 AND ( p_create_update_flag = 'C' OR
1329 ( p_create_update_flag = 'U' AND
1330 p_cust_account_rec.tax_rounding_rule <> NVL( l_tax_rounding_rule, FND_API.G_MISS_CHAR) ) )
1331 THEN
1332 validate_lookup(
1333 p_column =>'tax_rounding_rule',
1334 p_lookup_type =>'TAX_ROUNDING_RULE',
1335 p_column_value =>p_cust_account_rec.tax_rounding_rule,
1336 x_return_status =>x_return_status );
1337
1338 /*IF G_DEBUG THEN
1339 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1340 'tax_rounding_rule is lookup_code in lookup type TAX_ROUNDING_RULE. '||
1341 'x_return_status = ' || x_return_status, l_debug_prefix);
1342 END IF;
1343 */
1344
1345 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1346 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_rounding_rule is lookup_code in lookup type TAX_ROUNDING_RULE. '||
1347 'x_return_status = ' || x_return_status,
1348 p_msg_level=>fnd_log.level_statement);
1349 END IF;
1350
1351 END IF;
1352 /*IF G_DEBUG THEN
1353 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1354 '(+) after validate tax_rounding_rule..' ||
1355 'x_return_status = ' || x_return_status, l_debug_prefix );
1356 END IF;
1357 */
1358 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1359 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate tax_rounding_rule..' ||
1360 'x_return_status = ' || x_return_status,
1361 p_msg_level=>fnd_log.level_statement);
1362 END IF;
1363
1364
1365 -------------------------------------------------------
1366 --validate customer_class_code
1367 -------------------------------------------------------
1368 --Customer_class_code is a lookup_code in lookup type CUSTOMER_CLASS
1369
1370 IF p_cust_account_rec.customer_class_code is NOT NULL AND
1371 p_cust_account_rec.customer_class_code <> FND_API.G_MISS_CHAR
1372 AND ( p_create_update_flag = 'C' OR
1373 ( p_create_update_flag = 'U' AND
1374 p_cust_account_rec.customer_class_code <> NVL( l_customer_class_code, FND_API.G_MISS_CHAR) ) )
1375 THEN
1376 validate_lookup(
1377 p_column =>'customer_class_code',
1378 p_lookup_type =>'CUSTOMER CLASS',
1379 p_column_value =>p_cust_account_rec.customer_class_code,
1380 x_return_status =>x_return_status );
1381 /*IF G_DEBUG THEN
1382 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1383 'Customer_class_code is lookup_code in lookup type CUSTOMER_CLASS. '||
1384 'x_return_status = ' || x_return_status, l_debug_prefix);
1385 END IF;
1386 */
1387 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1388 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Customer_class_code is lookup_code in lookup type CUSTOMER_CLASS. '||
1389 'x_return_status = ' || x_return_status,
1390 p_msg_level=>fnd_log.level_statement);
1391 END IF;
1392
1393 END IF;
1394 /*IF G_DEBUG THEN
1395 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1396 '(+) after validate CUSTOMER_CLASS_CODE..' ||
1397 'x_return_status = ' || x_return_status, l_debug_prefix );
1398 END IF;
1399 */
1400 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1401 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate CUSTOMER_CLASS_CODE..' ||
1402 'x_return_status = ' || x_return_status,
1403 p_msg_level=>fnd_log.level_statement);
1404 END IF;
1405
1406
1407 ---------------------------------------------------
1408 --validate Invoice_quantity_rule
1409 ---------------------------------------------------
1410 --Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS
1411
1412 IF p_cust_account_rec.invoice_quantity_rule is NOT NULL AND
1413 p_cust_account_rec.invoice_quantity_rule <> FND_API.G_MISS_CHAR
1414 AND ( p_create_update_flag = 'C' OR
1415 ( p_create_update_flag = 'U' AND
1416 p_cust_account_rec.invoice_quantity_rule <> NVL( l_invoice_quantity_rule, FND_API.G_MISS_CHAR) ) )
1417 THEN
1418 validate_lookup(
1419 p_column =>'invoice_quantity_rule',
1420 p_lookup_table =>'OE_LOOKUPS',
1421 p_lookup_type =>'INVOICE_BASIS',
1422 p_column_value =>p_cust_account_rec.invoice_quantity_rule,
1423 x_return_status =>x_return_status );
1424
1425 /*IF G_DEBUG THEN
1426 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1427 'Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS. '||
1428 'x_return_status = ' || x_return_status, l_debug_prefix);
1429 END IF;
1430 */
1431 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1432 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=> 'Invoice_quantity_rule is lookup_code in lookup type INVOICE_BASIS. '||
1433 'x_return_status = ' || x_return_status,
1434 p_msg_level=>fnd_log.level_statement);
1435 END IF;
1436
1437 END IF;
1438 /*IF G_DEBUG THEN
1439 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1440 '(+) after validate invoice_quantity_rule..' ||
1441 'x_return_status = ' || x_return_status, l_debug_prefix );
1442 END IF;
1443 */
1444
1445 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1446 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate invoice_quantity_rule..' ||
1447 'x_return_status = ' || x_return_status,
1448 p_msg_level=>fnd_log.level_statement);
1449 END IF;
1450
1451
1452 ----------------------------------------------------------
1453 --validate price_list_id
1454 ----------------------------------------------------------
1455 --price_list_id should be a valid value defined in SO_PRICE_LISTS
1456
1457 IF p_cust_account_rec.price_list_id is NOT NULL AND
1458 p_cust_account_rec.price_list_id <> FND_API.G_MISS_NUM
1459 AND ( p_create_update_flag = 'C' OR
1460 ( p_create_update_flag = 'U' AND
1461 p_cust_account_rec.price_list_id <> NVL( l_price_list_id, FND_API.G_MISS_NUM) ) )
1462 THEN
1463 check_price_list_fk(
1464 p_column => 'price_list_id',
1465 p_column_value => p_cust_account_rec.price_list_id,
1466 x_return_status => x_return_status );
1467 /*IF G_DEBUG THEN
1468 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1469 'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
1470 'x_return_status = ' || x_return_status, l_debug_prefix);
1471 END IF;
1472 */
1473 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1474 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
1475 'x_return_status = ' || x_return_status,
1476 p_msg_level=>fnd_log.level_statement);
1477 END IF;
1478
1479 END IF;
1480 /*IF G_DEBUG THEN
1481 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1482 '(+) after validate price_list_id..' ||
1483 'x_return_status = ' || x_return_status, l_debug_prefix );
1484 END IF;
1485 */
1486 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1487 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate price_list_id..' ||
1488 'x_return_status = ' || x_return_status,
1489 p_msg_level=>fnd_log.level_statement);
1490 END IF;
1491
1492
1493 ----------------------------------------------------------
1494 --validate fob_point
1495 ----------------------------------------------------------
1496 --fob_point is lookup_code in lookup type FOB
1497
1498 IF p_cust_account_rec.fob_point is NOT NULL AND
1499 p_cust_account_rec.fob_point <> FND_API.G_MISS_CHAR
1500 AND ( p_create_update_flag = 'C' OR
1501 ( p_create_update_flag = 'U' AND
1502 p_cust_account_rec.fob_point <> NVL( l_fob_point, FND_API.G_MISS_CHAR) ) )
1503 THEN
1504 validate_lookup(
1505 p_column =>'fob_point',
1506 p_lookup_type =>'FOB',
1507 p_column_value =>p_cust_account_rec.fob_point,
1508 x_return_status =>x_return_status );
1509
1510 /*IF G_DEBUG THEN
1511 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1512 'fob_point is lookup_code in lookup type FOB. '||
1513 'x_return_status = ' || x_return_status, l_debug_prefix);
1514 END IF;
1515 */
1516 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1517 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fob_point is lookup_code in lookup type FOB. '||
1518 'x_return_status = ' || x_return_status,
1519 p_msg_level=>fnd_log.level_statement);
1520 END IF;
1521
1522
1523 END IF;
1524 /*IF G_DEBUG THEN
1525 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1526 '(+) after validate fob_point..' ||
1527 'x_return_status = ' || x_return_status, l_debug_prefix );
1528 END IF;
1529 */
1530 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1531 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate fob_point..' ||
1532 'x_return_status = ' || x_return_status,
1533 p_msg_level=>fnd_log.level_statement);
1534 END IF;
1535
1536 ----------------------------------------------------------
1537 --validate item_cross_ref_pref
1538 ----------------------------------------------------------
1539 --item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should have value 'INT' or 'CUST'
1540
1541 IF p_cust_account_rec.item_cross_ref_pref is NOT NULL AND
1542 p_cust_account_rec.item_cross_ref_pref <> FND_API.G_MISS_CHAR
1543 AND ( p_create_update_flag = 'C' OR
1544 ( p_create_update_flag = 'U' AND
1545 p_cust_account_rec.item_cross_ref_pref <> NVL( l_item_cross_ref_pref, FND_API.G_MISS_CHAR) ) )
1546 THEN
1547 IF p_cust_account_rec.item_cross_ref_pref NOT IN('INT','CUST')
1548 THEN
1549 check_item_cross_ref(
1550 p_column => 'item_cross_ref_pref',
1551 p_column_value => p_cust_account_rec.item_cross_ref_pref,
1552 x_return_status => x_return_status );
1553
1554 /*IF G_DEBUG THEN
1555 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1556 'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . '||
1557 'x_return_status = ' || x_return_status, l_debug_prefix);
1558 END IF;
1559 */
1560 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1561 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . '||
1562 'x_return_status = ' || x_return_status,
1563 p_msg_level=>fnd_log.level_statement);
1564 END IF;
1565
1566 END IF;
1567 END IF;
1568 /*IF G_DEBUG THEN
1569 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1570 '(+) after validate item_cross_ref_pref..' ||
1571 'x_return_status = ' || x_return_status, l_debug_prefix );
1572 END IF;
1573 */
1574 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1575 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate item_cross_ref_pref..' ||
1576 'x_return_status = ' || x_return_status,
1577 p_msg_level=>fnd_log.level_statement);
1578 END IF;
1579
1580
1581 ----------------------------------------------------------
1582 --validate warehouse_id
1583 ----------------------------------------------------------
1584 --warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS
1585
1586 IF p_cust_account_rec.warehouse_id is NOT NULL AND
1587 p_cust_account_rec.warehouse_id <> FND_API.G_MISS_NUM
1588 AND ( p_create_update_flag = 'C' OR
1589 ( p_create_update_flag = 'U' AND
1590 p_cust_account_rec.warehouse_id <> NVL( l_warehouse_id, FND_API.G_MISS_NUM) ) )
1591 THEN
1592 check_warehouse(
1593 p_column => 'warehouse_id',
1594 p_column_value => p_cust_account_rec.warehouse_id,
1595 x_return_status => x_return_status );
1596 /*IF G_DEBUG THEN
1597 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1598 'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
1599 'x_return_status = ' || x_return_status, l_debug_prefix);
1600 END IF;
1601 */
1602
1603 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1604 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
1605 'x_return_status = ' || x_return_status,
1606 p_msg_level=>fnd_log.level_statement);
1607 END IF;
1608
1609 END IF;
1610 /*IF G_DEBUG THEN
1611 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1612 '(+) after validate warehouse_id..' ||
1613 'x_return_status = ' || x_return_status, l_debug_prefix );
1614 END IF;
1615 */
1616
1617 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1618 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate warehouse_id..' ||
1619 'x_return_status = ' || x_return_status,
1620 p_msg_level=>fnd_log.level_statement);
1621 END IF;
1622
1623
1624 ----------------------------------------------------------
1625 --validate date_type_preference
1626 ----------------------------------------------------------
1627 --date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups
1628
1629 IF p_cust_account_rec.date_type_preference is NOT NULL AND
1630 p_cust_account_rec.date_type_preference <> FND_API.G_MISS_CHAR
1631 AND ( p_create_update_flag = 'C' OR
1632 ( p_create_update_flag = 'U' AND
1633 p_cust_account_rec.date_type_preference <> NVL( l_date_type_preference, FND_API.G_MISS_CHAR) ) )
1634 THEN
1635 validate_lookup(
1636 p_column =>'date_type_preference',
1637 p_lookup_table =>'OE_LOOKUPS',
1638 p_lookup_type =>'REQUEST_DATE_TYPE',
1639 p_column_value =>p_cust_account_rec.date_type_preference,
1640 x_return_status =>x_return_status );
1641 /*IF G_DEBUG THEN
1642 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1643 'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
1644 'x_return_status = ' || x_return_status, l_debug_prefix);
1645 END IF;
1646 */
1647 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1648 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
1649 'x_return_status = ' || x_return_status,
1650 p_msg_level=>fnd_log.level_statement);
1651 END IF;
1652
1653 END IF;
1654 /*IF G_DEBUG THEN
1655 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1656 '(+) after validate date_type_preference..' ||
1657 'x_return_status = ' || x_return_status, l_debug_prefix );
1658 END IF;
1659 */
1660 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1661 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate date_type_preference..' ||
1662 'x_return_status = ' || x_return_status,
1663 p_msg_level=>fnd_log.level_statement);
1664 END IF;
1665
1666
1667 --------------------------------------
1668 -- validate primary_specialist_id
1669 --------------------------------------
1670
1671 -- primary_specialist_id is foreign key to per_all_people_f
1672 IF p_cust_account_rec.primary_specialist_id IS NOT NULL AND
1673 p_cust_account_rec.primary_specialist_id <> FND_API.G_MISS_NUM
1674 THEN
1675 check_per_all_people_f_fk (
1676 p_column => 'primary_specialist_id',
1677 p_column_value => p_cust_account_rec.primary_specialist_id,
1678 x_return_status => x_return_status );
1679
1680 /*IF G_DEBUG THEN
1681 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1682 'primary_specialist_id is foreign key to per_all_people_f. ' ||
1683 'x_return_status = ' || x_return_status, l_debug_prefix );
1684 END IF;
1685 */
1686 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1687 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'primary_specialist_id is foreign key to per_all_people_f. ' ||
1688 'x_return_status = ' || x_return_status,
1689 p_msg_level=>fnd_log.level_statement);
1690 END IF;
1691
1692
1693 END IF;
1694
1695 /*IF G_DEBUG THEN
1696 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1697 '(+) after validate primary_specialist_id ... ' ||
1698 'x_return_status = ' || x_return_status, l_debug_prefix );
1699 END IF;
1700 */
1701 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1702 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate primary_specialist_id ... ' ||
1703 'x_return_status = ' || x_return_status,
1704 p_msg_level=>fnd_log.level_statement);
1705 END IF;
1706
1707
1708 --------------------------------------
1709 -- validate secondary_specialist_id
1710 --------------------------------------
1711
1712 -- secondary_specialist_id is foreign key to per_all_people_f
1713 IF p_cust_account_rec.secondary_specialist_id IS NOT NULL AND
1714 p_cust_account_rec.secondary_specialist_id <> FND_API.G_MISS_NUM
1715 THEN
1716 check_per_all_people_f_fk (
1717 p_column => 'secondary_specialist_id',
1718 p_column_value => p_cust_account_rec.secondary_specialist_id,
1719 x_return_status => x_return_status );
1720
1721 /*IF G_DEBUG THEN
1722 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1723 'secondary_specialist_id is foreign key to per_all_people_f. ' ||
1724 'x_return_status = ' || x_return_status, l_debug_prefix );
1725 END IF;
1726 */
1727 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1728 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'secondary_specialist_id is foreign key to per_all_people_f. ' ||
1729 'x_return_status = ' || x_return_status,
1730 p_msg_level=>fnd_log.level_statement);
1731 END IF;
1732
1733 END IF;
1734
1735 /*IF G_DEBUG THEN
1736 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1737 '(+) after validate secondary_specialist_id ... ' ||
1738 'x_return_status = ' || x_return_status, l_debug_prefix );
1739 END IF;
1740 */
1741 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1742 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate secondary_specialist_id ... ' ||
1743 'x_return_status = ' || x_return_status,
1744 p_msg_level=>fnd_log.level_statement);
1745 END IF;
1746
1747 /* comment out the validation as the account_liable_flag column is obsoleted in r12
1748
1749 --------------------------------------
1750 -- validate account_liable_flag
1751 --------------------------------------
1752 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1753 -- account_liable_flag is lookup code in lookup type YES/NO
1754 IF p_cust_account_rec.account_liable_flag IS NOT NULL AND
1755 p_cust_account_rec.account_liable_flag <> FND_API.G_MISS_CHAR
1756 THEN
1757 validate_lookup (
1758 p_column => 'account_liable_flag',
1759 p_lookup_type => 'YES/NO',
1760 p_column_value => p_cust_account_rec.account_liable_flag,
1761 x_return_status => x_return_status );
1762
1763 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1764 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_liable_flag is lookup code in lookup type YES/NO. ' ||
1765 'x_return_status = ' || x_return_status,
1766 p_msg_level=>fnd_log.level_statement);
1767 END IF;
1768
1769 END IF;
1770
1771 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1772 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate account_liable_flag ... ' ||
1773 'x_return_status = ' || x_return_status,
1774 p_msg_level=>fnd_log.level_statement);
1775 END IF;
1776 END IF;
1777 */
1778
1779 --------------------------------------
1780 -- validate hold_bill_flag
1781 --------------------------------------
1782 /****Logical APIs - validation not required****/
1783 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1784 -- hold_bill_flag is lookup code in lookup type YES/NO
1785 IF p_cust_account_rec.hold_bill_flag IS NOT NULL AND
1786 p_cust_account_rec.hold_bill_flag <> FND_API.G_MISS_CHAR
1787 THEN
1788 validate_lookup (
1789 p_column => 'hold_bill_flag',
1790 p_lookup_type => 'YES/NO',
1791 p_column_value => p_cust_account_rec.hold_bill_flag,
1792 x_return_status => x_return_status );
1793
1794 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1795 hz_utility_v2pub.debug(p_message=>'hold_bill_flag is lookup code in lookup type YES/NO. ' ||
1796 'x_return_status = ' || x_return_status,
1797 p_prefix=>l_debug_prefix,
1798 p_msg_level=>fnd_log.level_statement);
1799 END IF;
1800
1801 END IF;
1802
1803 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1804 hz_utility_v2pub.debug(p_message=>'(+) after validate hold_bill_flag ... ' ||
1805 'x_return_status = ' || x_return_status,
1806 p_prefix=>l_debug_prefix,
1807 p_msg_level=>fnd_log.level_statement);
1808 END IF;
1809 END IF;
1810
1811 /* comment out the validation as the dormant_account_flag column is obsoleted in r12
1812
1813 --------------------------------------
1814 -- validate dormant_account_flag
1815 --------------------------------------
1816 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1817 -- dormant_account_flag is lookup code in lookup type YES/NO
1818 IF p_cust_account_rec.dormant_account_flag IS NOT NULL AND
1819 p_cust_account_rec.dormant_account_flag <> FND_API.G_MISS_CHAR
1820 THEN
1821 validate_lookup (
1822 p_column => 'dormant_account_flag',
1823 p_lookup_type => 'YES/NO',
1824 p_column_value => p_cust_account_rec.dormant_account_flag,
1825 x_return_status => x_return_status );
1826
1827 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1828 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'dormant_account_flag is lookup code in lookup type YES/NO. ' ||
1829 'x_return_status = ' || x_return_status,
1830 p_msg_level=>fnd_log.level_statement);
1831 END IF;
1832
1833 END IF;
1834
1835 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1836 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate dormant_account_flag ... ' ||
1837 'x_return_status = ' || x_return_status,
1838 p_msg_level=>fnd_log.level_statement);
1839 END IF;
1840 END IF;
1841 */
1842
1843 --------------------------------------
1844 -- validate ship_sets_include_lines_flag
1845 --------------------------------------
1846 /****Logical APIs - validation not required****/
1847 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1848 -- ship_sets_include_lines_flag is lookup code in lookup type YES/NO
1849 IF p_cust_account_rec.ship_sets_include_lines_flag IS NOT NULL AND
1850 p_cust_account_rec.ship_sets_include_lines_flag <> FND_API.G_MISS_CHAR
1851 AND ( p_create_update_flag = 'C' OR
1852 ( p_create_update_flag = 'U' AND
1853 p_cust_account_rec.ship_sets_include_lines_flag <> NVL( l_ship_sets_inc_lines_f, FND_API.G_MISS_CHAR) ) )
1854 THEN
1855 validate_lookup (
1856 p_column => 'ship_sets_include_lines_flag',
1857 p_lookup_type => 'YES/NO',
1858 p_column_value => p_cust_account_rec.ship_sets_include_lines_flag,
1859 x_return_status => x_return_status );
1860
1861 /*IF G_DEBUG THEN
1862 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1863 'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1864 'x_return_status = ' || x_return_status, l_debug_prefix );
1865 END IF;
1866 */
1867 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1868 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1869 'x_return_status = ' || x_return_status,
1870 p_msg_level=>fnd_log.level_statement);
1871 END IF;
1872
1873 END IF;
1874 END IF;
1875
1876 --if ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag
1877 --is always set to N.
1878
1879 IF (p_create_update_flag = 'C' or
1880 (p_create_update_flag ='U' and
1881 p_cust_account_rec.ship_sets_include_lines_flag <> NVL(l_ship_sets_inc_lines_f,FND_API.G_MISS_CHAR)))
1882 THEN
1883 IF p_cust_account_rec.ship_sets_include_lines_flag = 'Y'
1884 THEN
1885 BEGIN
1886 SELECT decode(p_cust_account_rec.ship_sets_include_lines_flag,p_cust_account_rec.arrivalsets_include_lines_flag,
1887 'N',l_arrivalsets_inc_lines_f,
1888 decode(p_cust_account_rec.arrivalsets_include_lines_flag,l_ship_sets_inc_lines_f, 'Y','N'),'Y')
1889 INTO l_dummy
1890 FROM DUAL;
1891 IF l_dummy <> 'Y'
1892 THEN
1893 FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
1894 FND_MESSAGE.SET_TOKEN('COLUMN1','ship_sets_include_lines_flag');
1895 FND_MESSAGE.SET_TOKEN('VALUE1','Y');
1896 FND_MESSAGE.SET_TOKEN('COLUMN2','arrivalsets_include_lines_flag');
1897 FND_MESSAGE.SET_TOKEN('VALUE2','N');
1898 FND_MSG_PUB.ADD;
1899 x_return_status := FND_API.G_RET_STS_ERROR;
1900 END IF;
1901 END ;
1902 END IF;
1903 END IF;
1904 /*IF G_DEBUG THEN
1905 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1906 'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
1907 'x_return_status = ' || x_return_status, l_debug_prefix);
1908 END IF;
1909 */
1910 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1911 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
1912 'x_return_status = ' || x_return_status,
1913 p_msg_level=>fnd_log.level_statement);
1914 END IF;
1915
1916
1917
1918 /*IF G_DEBUG THEN
1919 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1920 '(+) after validate arrivalsets_include_lines_flag ... ' ||
1921 'x_return_status = ' || x_return_status, l_debug_prefix );
1922 END IF;
1923 */
1924 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1925 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
1926 'x_return_status = ' || x_return_status,
1927 p_msg_level=>fnd_log.level_statement);
1928 END IF;
1929
1930
1931 --------------------------------------
1932 -- validate arrivalsets_include_lines_flag
1933 --------------------------------------
1934 /****Logical APIs - validation not required****/
1935 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1936 -- arrivalsets_include_lines_flag is lookup code in lookup type YES/NO
1937 IF p_cust_account_rec.arrivalsets_include_lines_flag IS NOT NULL AND
1938 p_cust_account_rec.arrivalsets_include_lines_flag <> FND_API.G_MISS_CHAR
1939 AND ( p_create_update_flag = 'C' OR
1940 ( p_create_update_flag = 'U' AND
1941 p_cust_account_rec.arrivalsets_include_lines_flag <> NVL( l_arrivalsets_inc_lines_f, FND_API.G_MISS_CHAR) ) )
1942 THEN
1943 validate_lookup (
1944 p_column => 'arrivalsets_include_lines_flag',
1945 p_lookup_type => 'YES/NO',
1946 p_column_value => p_cust_account_rec.arrivalsets_include_lines_flag,
1947 x_return_status => x_return_status );
1948
1949 /*IF G_DEBUG THEN
1950 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1951 'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1952 'x_return_status = ' || x_return_status, l_debug_prefix );
1953 END IF;
1954 */
1955 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1956 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
1957 'x_return_status = ' || x_return_status,
1958 p_msg_level=>fnd_log.level_statement);
1959 END IF;
1960
1961 END IF;
1962 END IF;
1963
1964 --If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag
1965 --is always set to N.
1966
1967 IF (p_create_update_flag ='C' or
1968 (p_create_update_flag ='U' and
1969 p_cust_account_rec.arrivalsets_include_lines_flag <> NVL(l_arrivalsets_inc_lines_f,FND_API.G_MISS_CHAR)))
1970 THEN
1971 IF p_cust_account_rec.arrivalsets_include_lines_flag = 'Y'
1972 THEN
1973 BEGIN
1974 SELECT decode(p_cust_account_rec.arrivalsets_include_lines_flag,p_cust_account_rec.ship_sets_include_lines_flag,
1975 'N',l_ship_sets_inc_lines_f,
1976 decode(p_cust_account_rec.ship_sets_include_lines_flag,l_arrivalsets_inc_lines_f,
1977 'Y','N'),'Y')
1978 INTO l_dummy
1979 FROM DUAL;
1980 IF l_dummy <> 'Y'
1981 THEN
1982 FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
1983 FND_MESSAGE.SET_TOKEN('COLUMN1','arrivalsets_include_lines_flag');
1984 FND_MESSAGE.SET_TOKEN('VALUE1','Y');
1985 FND_MESSAGE.SET_TOKEN('COLUMN2','ship_sets_include_lines_flag');
1986 FND_MESSAGE.SET_TOKEN('VALUE2','N');
1987 FND_MSG_PUB.ADD;
1988 x_return_status := FND_API.G_RET_STS_ERROR;
1989 END IF;
1990 END ;
1991 END IF;
1992 END IF;
1993 /*IF G_DEBUG THEN
1994 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1995 'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always set to N. ' ||
1996 'x_return_status = ' || x_return_status, l_debug_prefix );
1997 END IF;
1998 */
1999 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2000 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always set to N. ' ||
2001 'x_return_status = ' || x_return_status,
2002 p_msg_level=>fnd_log.level_statement);
2003 END IF;
2004
2005
2006 /*IF G_DEBUG THEN
2007 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2008 '(+) after validate arrivalsets_include_lines_flag ... ' ||
2009 'x_return_status = ' || x_return_status, l_debug_prefix );
2010 END IF;
2011 */
2012 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2013 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
2014 'x_return_status = ' || x_return_status,
2015 p_msg_level=>fnd_log.level_statement);
2016 END IF;
2017
2018
2019 --------------------------------------
2020 -- validate sched_date_push_flag
2021 --------------------------------------
2022 /****Logical APIs - validation not required****/
2023 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2024 -- sched_date_push_flag is lookup code in lookup type YES/NO
2025 IF p_cust_account_rec.sched_date_push_flag IS NOT NULL AND
2026 p_cust_account_rec.sched_date_push_flag <> FND_API.G_MISS_CHAR
2027 THEN
2028 validate_lookup (
2029 p_column => 'sched_date_push_flag',
2030 p_lookup_type => 'YES/NO',
2031 p_column_value => p_cust_account_rec.sched_date_push_flag,
2032 x_return_status => x_return_status );
2033
2034 /*IF G_DEBUG THEN
2035 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2036 'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
2037 'x_return_status = ' || x_return_status, l_debug_prefix );
2038 END IF;
2039 */
2040 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2041 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
2042 'x_return_status = ' || x_return_status,
2043 p_msg_level=>fnd_log.level_statement);
2044 END IF;
2045
2046 END IF;
2047
2048 /*IF G_DEBUG THEN
2049 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2050 '(+) after validate sched_date_push_flag ... ' ||
2051 'x_return_status = ' || x_return_status, l_debug_prefix );
2052 END IF;
2053 */
2054 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2055 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate sched_date_push_flag ... ' ||
2056 'x_return_status = ' || x_return_status,
2057 p_msg_level=>fnd_log.level_statement);
2058 END IF;
2059 END IF;
2060
2061
2062 /* comment out the validation as the account_activation_date column
2063 and account_termination_date column are obsoleted in r12
2064
2065 ----------------------------------------------
2066 -- validate account_established_date and account_termination_date
2067 ----------------------------------------------
2068
2069 -- account_termination_date should be greater than account_established_date
2070 validate_start_end_date (
2071 p_create_update_flag => p_create_update_flag,
2072 p_start_date_column_name => 'account_established_date',
2073 p_start_date => p_cust_account_rec.account_established_date,
2074 p_old_start_date => l_account_established_date,
2075 p_end_date_column_name => 'account_termination_date',
2076 p_end_date => p_cust_account_rec.account_termination_date,
2077 p_old_end_date => l_account_termination_date,
2078 x_return_status => x_return_status );
2079
2080 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2081 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_termination_date should be greater than account_established_date. ' ||
2082 'x_return_status = ' || x_return_status,
2083 p_msg_level=>fnd_log.level_statement);
2084 END IF;
2085
2086 ----------------------------------------------
2087 -- validate account_established_date and account_activation_date
2088 ----------------------------------------------
2089
2090 -- account_activation_date should be greater than account_established_date
2091 validate_start_end_date (
2092 p_create_update_flag => p_create_update_flag,
2093 p_start_date_column_name => 'account_established_date',
2094 p_start_date => p_cust_account_rec.account_established_date,
2095 p_old_start_date => l_account_established_date,
2096 p_end_date_column_name => 'account_activation_date',
2097 p_end_date => p_cust_account_rec.account_activation_date,
2098 p_old_end_date => l_account_activation_date,
2099 x_return_status => x_return_status );
2100
2101 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2102 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_activation_date should be greater than account_established_date. ' ||
2103 'x_return_status = ' || x_return_status,
2104 p_msg_level=>fnd_log.level_statement);
2105 END IF;
2106
2107
2108 ----------------------------------------------
2109 -- validate account_activation_date and account_termination_date
2110 ----------------------------------------------
2111
2112 -- account_termination_date should be greater than account_activation_date
2113 validate_start_end_date (
2114 p_create_update_flag => p_create_update_flag,
2115 p_start_date_column_name => 'account_activation_date',
2116 p_start_date => p_cust_account_rec.account_activation_date,
2117 p_old_start_date => l_account_activation_date,
2118 p_end_date_column_name => 'account_termination_date',
2119 p_end_date => p_cust_account_rec.account_termination_date,
2120 p_old_end_date => l_account_termination_date,
2121 x_return_status => x_return_status );
2122
2123 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2124 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'account_termination_date should be greater than account_activation_date. ' ||
2125 'x_return_status = ' || x_return_status,
2126 p_msg_level=>fnd_log.level_statement);
2127 END IF;
2128 */
2129
2130 --------------------------------------
2131 -- validate autopay_flag
2132 --------------------------------------
2133 /****Logical APIs - validation not required****/
2134 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2135 -- autopay_flag is lookup code in lookup type YES/NO
2136 IF p_cust_account_rec.autopay_flag IS NOT NULL AND
2137 p_cust_account_rec.autopay_flag <> FND_API.G_MISS_CHAR
2138 THEN
2139 validate_lookup (
2140 p_column => 'autopay_flag',
2141 p_lookup_type => 'YES/NO',
2142 p_column_value => p_cust_account_rec.autopay_flag,
2143 x_return_status => x_return_status );
2144
2145 /*IF G_DEBUG THEN
2146 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2147 'autopay_flag is lookup code in lookup type YES/NO. ' ||
2148 'x_return_status = ' || x_return_status, l_debug_prefix );
2149 END IF;
2150 */
2151 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2152 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'autopay_flag is lookup code in lookup type YES/NO. ' ||
2153 'x_return_status = ' || x_return_status,
2154 p_msg_level=>fnd_log.level_statement);
2155 END IF;
2156
2157 END IF;
2158
2159 /*IF G_DEBUG THEN
2160 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2161 '(+) after validate autopay_flag ... ' ||
2162 'x_return_status = ' || x_return_status, l_debug_prefix );
2163 END IF;
2164 */
2165 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2166 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate autopay_flag ... ' ||
2167 'x_return_status = ' || x_return_status,
2168 p_msg_level=>fnd_log.level_statement);
2169 END IF;
2170 END IF;
2171
2172 /* comment out the validation as the title column is obsoleted in r12
2173
2174 --------------------------------------
2175 -- validate notify_flag
2176 --------------------------------------
2177 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2178 -- notify_flag is lookup code in lookup type YES/NO
2179 IF p_cust_account_rec.notify_flag IS NOT NULL AND
2180 p_cust_account_rec.notify_flag <> FND_API.G_MISS_CHAR
2181 THEN
2182 validate_lookup (
2183 p_column => 'notify_flag',
2184 p_lookup_type => 'YES/NO',
2185 p_column_value => p_cust_account_rec.notify_flag,
2186 x_return_status => x_return_status );
2187
2188 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2189 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'notify_flag is lookup code in lookup type YES/NO. ' ||
2190 'x_return_status = ' || x_return_status,
2191 p_msg_level=>fnd_log.level_statement);
2192 END IF;
2193
2194 END IF;
2195
2196 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2197 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate notify_flag ... ' ||
2198 'x_return_status = ' || x_return_status,
2199 p_msg_level=>fnd_log.level_statement);
2200 END IF;
2201 END IF;
2202 */
2203
2204 --------------------------------------
2205 -- validate ship_via
2206 --------------------------------------
2207
2208 -- ship_via is foreign key to oe_ship_methods_v
2209 -- can be used only in single org case.
2210 IF p_cust_account_rec.ship_via IS NOT NULL AND
2211 p_cust_account_rec.ship_via <> FND_API.G_MISS_CHAR AND
2212 ( p_create_update_flag = 'C' OR
2213 ( p_create_update_flag = 'U' AND
2214 p_cust_account_rec.ship_via <> NVL( l_ship_via, FND_API.G_MISS_CHAR ) ) )
2215 THEN
2216 check_oe_ship_methods_v_fk (
2217 p_entity => 'ACCOUNT',
2218 p_column => 'ship_via',
2219 p_column_value => p_cust_account_rec.ship_via,
2220 x_return_status => x_return_status );
2221
2222 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2223 hz_utility_v2pub.debug(p_message=>'ship_via is foreign key to oe_ship_methods_v and can be used only in single org case. ' ||
2224 'x_return_status = ' || x_return_status,
2225 p_prefix=>l_debug_prefix,
2226 p_msg_level=>fnd_log.level_statement);
2227 END IF;
2228
2229 END IF;
2230
2231 /*IF G_DEBUG THEN
2232 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2233 '(+) after validate ship_via ... ' ||
2234 'x_return_status = ' || x_return_status, l_debug_prefix );
2235 END IF;
2236 */
2237 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2238 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate ship_via ... ' ||
2239 'x_return_status = ' || x_return_status,
2240 p_msg_level=>fnd_log.level_statement);
2241 END IF;
2242
2243
2244 --------------------------------------
2245 -- validate selling_party_id
2246 --------------------------------------
2247
2248 -- selling_party_id is foreign key of hz_parties
2249 IF p_cust_account_rec.selling_party_id IS NOT NULL AND
2250 p_cust_account_rec.selling_party_id <> FND_API.G_MISS_NUM
2251 THEN
2252 check_party_fk (
2253 p_column => 'selling_party_id',
2254 p_column_value => p_cust_account_rec.selling_party_id,
2255 x_return_status => x_return_status );
2256
2257 /*IF G_DEBUG THEN
2258 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2259 'selling_party_id is foreign key of hz_parties. ' ||
2260 'x_return_status = ' || x_return_status, l_debug_prefix );
2261 END IF;
2262 */
2263 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2264 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'selling_party_id is foreign key of hz_parties. ' ||
2265 'x_return_status = ' || x_return_status,
2266 p_msg_level=>fnd_log.level_statement);
2267 END IF;
2268
2269 END IF;
2270
2271 /*IF G_DEBUG THEN
2272 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2273 '(+) after validate selling_party_id ... ' ||
2274 'x_return_status = ' || x_return_status, l_debug_prefix );
2275 END IF;
2276 */
2277 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2278 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate selling_party_id ... ' ||
2279 'x_return_status = ' || x_return_status,
2280 p_msg_level=>fnd_log.level_statement);
2281 END IF;
2282
2283
2284 --------------------------------------
2285 -- validate created_by_module
2286 --------------------------------------
2287
2288 validate_created_by_module(
2289 p_create_update_flag => p_create_update_flag,
2290 p_created_by_module => p_cust_account_rec.created_by_module,
2291 p_old_created_by_module => l_created_by_module,
2292 x_return_status => x_return_status);
2293
2294 --------------------------------------
2295 -- validate application_id
2296 --------------------------------------
2297
2298 validate_application_id(
2299 p_create_update_flag => p_create_update_flag,
2300 p_application_id => p_cust_account_rec.application_id,
2301 p_old_application_id => l_application_id,
2302 x_return_status => x_return_status);
2303
2304 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2305 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_cust_account (-)',
2306 p_msg_level=>fnd_log.level_procedure);
2307 END IF;
2308
2309 END validate_cust_account;
2310
2311 /**
2312 * PROCEDURE validate_cust_acct_relate
2313 *
2314 * DESCRIPTION
2315 * Validates customer account relate record. Checks for
2316 * uniqueness
2317 * lookup types
2318 * mandatory columns
2319 * non-updateable fields
2320 * foreign key validations
2321 * other validations
2322 *
2323 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2324 *
2325 * ARGUMENTS
2326 * IN:
2327 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
2328 * p_cust_account_rec Customer account relate record.
2329 * p_rowid Rowid of the record (used only in update mode).
2330 * IN/OUT:
2331 * x_return_status Return status after the call. The status can
2332 * be FND_API.G_RET_STS_SUCCESS (success),
2333 * FND_API.G_RET_STS_ERROR (error),
2334 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2335 *
2336 * NOTES
2337 *
2338 * MODIFICATION HISTORY
2339 *
2340 * 07-23-2001 Jianying Huang o Created.
2341 * 10-04-2003 Rajib Ranjan Borah o Bug 2985448.Only active relationships will be considered
2342 * while checking for duplicates.
2343 * 12-MAY-2005 Rajib Ranjan Borah o TCA SSA Uptake (Bug 3456489)
2344 * 12-AUG-2205 Idris Ali o Bug 4529413:Replaced p_rowid with p_cust_acct_relate_id.
2345 */
2346
2347 PROCEDURE validate_cust_acct_relate (
2348 p_create_update_flag IN VARCHAR2,
2349 p_cust_acct_relate_rec IN HZ_CUST_ACCOUNT_V2PUB.CUST_ACCT_RELATE_REC_TYPE,
2350 p_cust_acct_relate_id IN NUMBER, -- Bug 4529413
2351 x_return_status IN OUT NOCOPY VARCHAR2
2352 ) IS
2353
2354 l_debug_prefix VARCHAR2(30) := '';
2355 l_dummy VARCHAR2(1);
2356 l_customer_reciprocal_flag HZ_CUST_ACCT_RELATE.customer_reciprocal_flag%TYPE;
2357 l_created_by_module HZ_CUST_ACCT_RELATE.created_by_module%TYPE;
2358 l_application_id NUMBER;
2359 l_relationship_type HZ_CUST_ACCT_RELATE.relationship_type%TYPE;
2360 l_status HZ_CUST_ACCT_RELATE.status%TYPE;
2361
2362 BEGIN
2363
2364 -- Check if API is called in debug mode. If yes, enable debug.
2365 --enable_debug;
2366
2367 -- Debug info.
2368
2369 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2370 hz_utility_v2pub.debug(p_message=>'validate_cust_acct_relate (+)',
2371 p_prefix=>l_debug_prefix,
2372 p_msg_level=>fnd_log.level_procedure);
2373 END IF;
2374
2375
2376 -- Select fields for later use during update.
2377 IF p_create_update_flag = 'U' THEN
2378 SELECT CUSTOMER_RECIPROCAL_FLAG, CREATED_BY_MODULE, APPLICATION_ID,
2379 RELATIONSHIP_TYPE, STATUS
2380 INTO l_customer_reciprocal_flag, l_created_by_module, l_application_id,
2381 l_relationship_type, l_status
2382 FROM HZ_CUST_ACCT_RELATE_ALL -- Bug 3456489
2383 WHERE CUST_ACCT_RELATE_ID = p_cust_acct_relate_id;
2384 END IF;
2385
2386 --------------------------------------
2387 -- validate cust_account_id
2388 --------------------------------------
2389 /****Logical APIs - validation not required****/
2390 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2391 -- cust_account_id is mandatory field
2392 IF (p_create_update_flag <> 'U') OR
2393 (p_cust_acct_relate_rec.cust_acct_relate_id is NULL) -- Bug 4529413
2394 THEN
2395 validate_mandatory (
2396 p_create_update_flag => p_create_update_flag,
2397 p_column => 'cust_account_id',
2398 p_column_value => p_cust_acct_relate_rec.cust_account_id,
2399 p_restricted => 'Y',
2400 x_return_status => x_return_status );
2401
2402 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2403 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'cust_account_id is mandatory. ' ||
2404 'x_return_status = ' || x_return_status,
2405 p_msg_level=>fnd_log.level_statement);
2406 END IF;
2407 END IF;
2408
2409 -- since cust account id is part of primary key, we do not need to
2410 -- check non-updateable.
2411
2412 -- cust_account_id is foreign key of hz_cust_accounts
2413 IF p_create_update_flag = 'C' AND
2414 p_cust_acct_relate_rec.cust_account_id IS NOT NULL AND
2415 p_cust_acct_relate_rec.cust_account_id <> FND_API.G_MISS_NUM
2416 THEN
2417 check_cust_account_fk (
2418 p_column => 'cust_account_id',
2419 p_column_value => p_cust_acct_relate_rec.cust_account_id,
2420 x_return_status => x_return_status );
2421
2422 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2423 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key of hz_cust_accounts. ' ||
2424 'x_return_status = ' || x_return_status,
2425 p_prefix=>l_debug_prefix,
2426 p_msg_level=>fnd_log.level_statement);
2427 END IF;
2428 END IF;
2429
2430 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2431 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate cust_account_id ... ' ||
2432 'x_return_status = ' || x_return_status,
2433 p_msg_level=>fnd_log.level_statement);
2434 END IF;
2435 END IF;
2436
2437 --------------------------------------
2438 -- validate related_cust_account_id
2439 --------------------------------------
2440 /****Logical APIs - validation not required****/
2441 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2442 -- related_cust_account_id is mandatory field
2443 IF (p_create_update_flag <> 'U') OR
2444 (p_cust_acct_relate_rec.cust_acct_relate_id is NULL) -- Bug 4529413
2445 THEN
2446 validate_mandatory (
2447 p_create_update_flag => p_create_update_flag,
2448 p_column => 'related_cust_account_id',
2449 p_column_value => p_cust_acct_relate_rec.related_cust_account_id,
2450 p_restricted => 'Y',
2451 x_return_status => x_return_status );
2452
2453 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2454 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'related_cust_account_id is mandatory. ' ||
2455 'x_return_status = ' || x_return_status,
2456 p_msg_level=>fnd_log.level_statement);
2457 END IF;
2458 END IF;
2459
2460 -- since related_cust account id is part of primary key, we do not need to
2461 -- check non-updateable.
2462
2463 -- related_cust_account_id is foreign key of hz_cust_accounts
2464 IF p_create_update_flag = 'C' AND
2465 p_cust_acct_relate_rec.related_cust_account_id IS NOT NULL AND
2466 p_cust_acct_relate_rec.related_cust_account_id <> FND_API.G_MISS_NUM
2467 THEN
2468 check_cust_account_fk (
2469 p_column => 'related_cust_account_id',
2470 p_column_value => p_cust_acct_relate_rec.related_cust_account_id,
2471 x_return_status => x_return_status );
2472
2473 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2474 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'related_cust_account_id is foreign key of hz_cust_accounts. ' ||
2475 'x_return_status = ' || x_return_status,
2476 p_msg_level=>fnd_log.level_statement);
2477 END IF;
2478
2479 END IF;
2480 END IF;
2481
2482 -- combination of cust_account_id and related_cust_account_id should be unique.
2483 -- we do not need to check this in update mode because there two columns
2484 -- are primary key.
2485 IF p_create_update_flag = 'C' THEN
2486 BEGIN
2487 SELECT 'Y' INTO l_dummy
2488 FROM HZ_CUST_ACCT_RELATE_ALL -- Bug 3456489
2489 WHERE CUST_ACCOUNT_ID = p_cust_acct_relate_rec.cust_account_id
2490 AND RELATED_CUST_ACCOUNT_ID = p_cust_acct_relate_rec.related_cust_account_id
2491 --Bug 2985448
2492 AND STATUS='A'
2493 AND ORG_ID = p_cust_acct_relate_rec.org_id; -- Bug 3456489
2494
2495 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_REL_ALREADY_EXISTS' );
2496 FND_MSG_PUB.ADD;
2497 x_return_status := FND_API.G_RET_STS_ERROR;
2498
2499 EXCEPTION
2500 WHEN NO_DATA_FOUND THEN
2501 NULL;
2502 END;
2503
2504 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2505 hz_utility_v2pub.debug(p_message=>'combination of cust_account_id and related_cust_account_id should be unique. ' ||
2506 'x_return_status = ' || x_return_status,
2507 p_prefix =>l_debug_prefix,
2508 p_msg_level=>fnd_log.level_statement);
2509 END IF;
2510 END IF;
2511
2512 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2513 hz_utility_v2pub.debug(p_message=>'(+) after validate related_cust_account_id ... ' ||
2514 'x_return_status = ' || x_return_status,
2515 p_prefix =>l_debug_prefix,
2516 p_msg_level=>fnd_log.level_statement);
2517 END IF;
2518
2519 --------------------------------------
2520 -- validate customer_reciprocal_flag
2521 --------------------------------------
2522
2523 /****Logical APIs - validation not required****/
2524 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2525 -- donot need to check customer_reciprocal_flag mandatory
2526 -- because customer_reciprocal_flag is non-updateable and it is defaulted
2527 -- to 'N' during insert
2528
2529 -- customer_reciprocal_flag is non-updateable
2530 IF p_create_update_flag = 'U' AND
2531 p_cust_acct_relate_rec.customer_reciprocal_flag IS NOT NULL
2532 THEN
2533 validate_nonupdateable (
2534 p_column => 'customer_reciprocal_flag',
2535 p_column_value => p_cust_acct_relate_rec.customer_reciprocal_flag,
2536 p_old_column_value => l_customer_reciprocal_flag,
2537 x_return_status => x_return_status );
2538
2539 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2540 hz_utility_v2pub.debug(p_message=>'customer_reciprocal_flag is non-updateable. ' ||
2541 'x_return_status = ' || x_return_status,
2542 p_prefix =>l_debug_prefix,
2543 p_msg_level=>fnd_log.level_statement);
2544 END IF;
2545
2546 END IF;
2547
2548 -- customer_reciprocal_flag is lookup code in lookup type YES/NO
2549 -- Since customer_reciprocal_flag is non-updateable, we only need to do
2550 -- checking during create.
2551
2552 IF p_create_update_flag = 'C' AND
2553 p_cust_acct_relate_rec.customer_reciprocal_flag IS NOT NULL AND
2554 p_cust_acct_relate_rec.customer_reciprocal_flag <> FND_API.G_MISS_CHAR
2555 THEN
2556 validate_lookup (
2557 p_column => 'customer_reciprocal_flag',
2558 p_lookup_type => 'YES/NO',
2559 p_column_value => p_cust_acct_relate_rec.customer_reciprocal_flag,
2560 x_return_status => x_return_status );
2561
2562
2563 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2564 hz_utility_v2pub.debug(p_message=>'customer_reciprocal_flag is lookup code in lookup type YES/NO. ' ||
2565 'x_return_status = ' || x_return_status,
2566 p_prefix =>l_debug_prefix,
2567 p_msg_level=>fnd_log.level_statement);
2568 END IF;
2569 END IF;
2570
2571
2572 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2573 hz_utility_v2pub.debug(p_message=>'(+) after validate customer_reciprocal_flag ... ' ||
2574 'x_return_status = ' || x_return_status,
2575 p_prefix =>l_debug_prefix,
2576 p_msg_level=>fnd_log.level_statement);
2577 END IF;
2578 END IF;
2579 --------------------------------------
2580 -- validate relationship_type
2581 --------------------------------------
2582
2583 -- relationship_type is lookup code in lookup type RELATIONSHIP_TYPE
2584 IF p_cust_acct_relate_rec.relationship_type IS NOT NULL AND
2585 p_cust_acct_relate_rec.relationship_type <> FND_API.G_MISS_CHAR AND
2586 ( p_create_update_flag = 'C' OR
2587 ( p_create_update_flag = 'U' AND
2588 p_cust_acct_relate_rec.relationship_type <> NVL( l_relationship_type, FND_API.G_MISS_CHAR ) ) )
2589 THEN
2590 validate_lookup (
2591 p_column => 'relationship_type',
2592 p_lookup_type => 'RELATIONSHIP_TYPE',
2593 p_column_value => p_cust_acct_relate_rec.relationship_type,
2594 x_return_status => x_return_status );
2595
2596
2597 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2598 hz_utility_v2pub.debug(p_message=>'relationship_type is lookup code in lookup type RELATIONSHIP_TYPE. ' ||
2599 'x_return_status = ' || x_return_status,
2600 p_prefix =>l_debug_prefix,
2601 p_msg_level=>fnd_log.level_statement);
2602 END IF;
2603 END IF;
2604
2605
2606 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2607 hz_utility_v2pub.debug(p_message=>'(+) after validate relationship_type ... ' ||
2608 'x_return_status = ' || x_return_status,
2609 p_prefix =>l_debug_prefix,
2610 p_msg_level=>fnd_log.level_statement);
2611 END IF;
2612 --------------------------------------
2613 -- validate status
2614 --------------------------------------
2615
2616 -- status cannot be set to null during update
2617 IF p_create_update_flag = 'U' AND
2618 p_cust_acct_relate_rec.status IS NOT NULL
2619 THEN
2620 validate_cannot_update_to_null (
2621 p_column => 'status',
2622 p_column_value => p_cust_acct_relate_rec.status,
2623 x_return_status => x_return_status );
2624
2625 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2626 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
2627 'x_return_status = ' || x_return_status,
2628 p_prefix =>l_debug_prefix,
2629 p_msg_level=>fnd_log.level_statement);
2630 END IF;
2631 END IF;
2632
2633 /****Logical APIs - validation not required****/
2634 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2635 -- status is lookup code in lookup type CODE_STATUS
2636 IF p_cust_acct_relate_rec.status IS NOT NULL AND
2637 p_cust_acct_relate_rec.status <> FND_API.G_MISS_CHAR AND
2638 ( p_create_update_flag = 'C' OR
2639 ( p_create_update_flag = 'U' AND
2640 p_cust_acct_relate_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
2641 THEN
2642 validate_lookup (
2643 p_column => 'status',
2644 p_lookup_type => 'CODE_STATUS',
2645 p_column_value => p_cust_acct_relate_rec.status,
2646 x_return_status => x_return_status );
2647
2648
2649 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2650 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
2651 'x_return_status = ' || x_return_status,
2652 p_prefix =>l_debug_prefix,
2653 p_msg_level=>fnd_log.level_statement);
2654 END IF;
2655 END IF;
2656 END IF;
2657
2658 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2659 hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
2660 'x_return_status = ' || x_return_status,
2661 p_prefix =>l_debug_prefix,
2662 p_msg_level=>fnd_log.level_statement);
2663 END IF;
2664 --------------------------------------
2665 -- validate created_by_module
2666 --------------------------------------
2667
2668 validate_created_by_module(
2669 p_create_update_flag => p_create_update_flag,
2670 p_created_by_module => p_cust_acct_relate_rec.created_by_module,
2671 p_old_created_by_module => l_created_by_module,
2672 x_return_status => x_return_status);
2673
2674 --------------------------------------
2675 -- validate application_id
2676 --------------------------------------
2677
2678 validate_application_id(
2679 p_create_update_flag => p_create_update_flag,
2680 p_application_id => p_cust_acct_relate_rec.application_id,
2681 p_old_application_id => l_application_id,
2682 x_return_status => x_return_status);
2683
2684 -- Debug info.
2685
2686 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2687 hz_utility_v2pub.debug(p_message=>' validate_cust_acct_relate (-)',
2688 p_prefix=>l_debug_prefix,
2689 p_msg_level=>fnd_log.level_procedure);
2690 END IF;
2691
2692 END validate_cust_acct_relate;
2693
2694 /**
2695 * PROCEDURE validate_customer_profile
2696 *
2697 * DESCRIPTION
2698 * Validates customer profile record. Checks for
2699 * uniqueness
2700 * lookup types
2701 * mandatory columns
2702 * non-updateable fields
2703 * foreign key validations
2704 * other validations
2705 *
2706 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2707 *
2708 * ARGUMENTS
2709 * IN:
2710 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
2711 * p_customer_profile_rec Customer profile record.
2712 * p_rowid Rowid of the record (used only in update mode).
2713 * IN/OUT:
2714 * x_return_status Return status after the call. The status can
2715 * be FND_API.G_RET_STS_SUCCESS (success),
2716 * FND_API.G_RET_STS_ERROR (error),
2717 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2718 *
2719 * NOTES
2720 *
2721 * MODIFICATION HISTORY
2722 *
2723 * 07-23-2001 Jianying Huang o Created.
2724 * 11-08-2001 P.Suresh * Bug No : 1999532. Added validations as present in
2725 * customer standard form and interface.
2726 * 12-05-2001 P.Suresh * Bug No : 2125994. Commented the mandatory check
2727 * on charge_on_finance_charge_flag when interest
2728 * charge is 'Y'.
2729 * 16-09-2002 P.Suresh * Bug No : 2441092. Added a condition that the
2730 * discount_terms should be 'Y' when defaulting the
2731 * discount_grace_days from the hz_cust_profile_classes.
2732 * 05-30-2003 Ramesh Ch * Bug No : 2884220. Added a condition that the
2733 * interest_charges should be 'Y' when initializing
2734 * the interest_period_days from the hz_cust_profile_classes.
2735 * 06-23-2003 Ramesh Ch Bug No : 2884220. Added a condition that the dunning_letters,send_statements
2736 * should be 'Y' when initializing the dunning_letter_set_id,statement_cycle_id resp
2737 * from the hz_cust_profile_classes.
2738 *
2739 */
2740
2741 PROCEDURE validate_customer_profile (
2742 p_create_update_flag IN VARCHAR2,
2743 p_customer_profile_rec IN HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
2744 p_rowid IN ROWID,
2745 x_return_status IN OUT NOCOPY VARCHAR2
2746 ) IS
2747
2748 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_customer_profile'
2749
2750 l_dummy VARCHAR2(1);
2751
2752 l_cust_account_id NUMBER;
2753 l_collector_id NUMBER;
2754 l_profile_class_id NUMBER;
2755 l_site_use_id NUMBER;
2756 l_cust_acct_site_id NUMBER;
2757 l_class_status HZ_CUST_PROFILE_CLASSES.status%TYPE;
2758 l_profile_class_name HZ_CUST_PROFILE_CLASSES.name%TYPE;
2759 l_created_by_module HZ_CUSTOMER_PROFILES.created_by_module%TYPE;
2760 l_application_id NUMBER;
2761 l_credit_rating HZ_CUSTOMER_PROFILES.credit_rating%TYPE;
2762 l_risk_code HZ_CUSTOMER_PROFILES.risk_code%TYPE;
2763 l_status HZ_CUSTOMER_PROFILES.status%TYPE;
2764 l_profile_class_rec HZ_CUST_PROFILE_CLASSES%ROWTYPE;
2765 v_customer_profile_rec HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE
2766 := p_customer_profile_rec;
2767 l_discount_terms HZ_CUSTOMER_PROFILES.discount_terms%TYPE;
2768 l_discount_grace_days HZ_CUSTOMER_PROFILES.discount_grace_days%TYPE;
2769 l_dunning_letters HZ_CUSTOMER_PROFILES.dunning_letters%TYPE;
2770 l_dunning_letter_set_id HZ_CUSTOMER_PROFILES.dunning_letter_set_id%TYPE;
2771 l_send_statements HZ_CUSTOMER_PROFILES.send_statements%TYPE;
2772 l_statement_cycle_id HZ_CUSTOMER_PROFILES.statement_cycle_id%TYPE;
2773 l_credit_balance_statements HZ_CUSTOMER_PROFILES.credit_balance_statements%TYPE;
2774 l_interest_charges HZ_CUSTOMER_PROFILES.interest_charges%TYPE;
2775 l_finance_charge_flag HZ_CUSTOMER_PROFILES.charge_on_finance_charge_flag%TYPE;
2776 l_interest_period_days HZ_CUSTOMER_PROFILES.interest_period_days%TYPE;
2777
2778 l_account_status HZ_CUSTOMER_PROFILES.ACCOUNT_STATUS%TYPE;
2779 l_tolerance HZ_CUSTOMER_PROFILES.TOLERANCE%TYPE;
2780 l_percent_collectable HZ_CUSTOMER_PROFILES.PERCENT_COLLECTABLE%TYPE;
2781 l_standard_terms HZ_CUSTOMER_PROFILES.STANDARD_TERMS%TYPE;
2782 l_override_terms HZ_CUSTOMER_PROFILES.OVERRIDE_TERMS%TYPE;
2783 l_lockbox_matching_option HZ_CUSTOMER_PROFILES.LOCKBOX_MATCHING_OPTION%TYPE;
2784 l_autocash_hierarchy_id HZ_CUSTOMER_PROFILES.AUTOCASH_HIERARCHY_ID%TYPE;
2785 l_autocash_hierarchy_id_for_ad HZ_CUSTOMER_PROFILES.AUTOCASH_HIERARCHY_ID_FOR_ADR%TYPE;
2786 l_clearing_days HZ_CUSTOMER_PROFILES.CLEARING_DAYS%TYPE;
2787 l_payment_grace_days HZ_CUSTOMER_PROFILES.PAYMENT_GRACE_DAYS%TYPE;
2788 l_grouping_rule_id HZ_CUSTOMER_PROFILES.GROUPING_RULE_ID%TYPE;
2789 l_tax_printing_option HZ_CUSTOMER_PROFILES.TAX_PRINTING_OPTION%TYPE;
2790 l_review_cycle HZ_CUSTOMER_PROFILES.REVIEW_CYCLE%TYPE;
2791 l_last_credit_review_date HZ_CUSTOMER_PROFILES.LAST_CREDIT_REVIEW_DATE%TYPE;
2792 l_next_credit_review_date HZ_CUSTOMER_PROFILES.NEXT_CREDIT_REVIEW_DATE%TYPE;
2793 l_party_id HZ_CUSTOMER_PROFILES.PARTY_ID%TYPE;
2794 l_credit_classification HZ_CUSTOMER_PROFILES.CREDIT_CLASSIFICATION%TYPE;
2795
2796 l_cust_acct_site_use_code HZ_CUST_SITE_USES.SITE_USE_CODE%TYPE;
2797 l_return_status VARCHAR2(1);
2798 l_org_id HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
2799
2800 l_ckeck_acc_bfb_enabled VARCHAR2(1);
2801 ll_cons_inv_flag VARCHAR2(1);
2802
2803 -- Added following variables for late charge policy project.
2804 l_late_charge_calculation_trx HZ_CUSTOMER_PROFILES.LATE_CHARGE_CALCULATION_TRX%TYPE;
2805 l_credit_items_flag HZ_CUSTOMER_PROFILES.CREDIT_ITEMS_FLAG%TYPE;
2806 l_disputed_transactions_flag HZ_CUSTOMER_PROFILES.DISPUTED_TRANSACTIONS_FLAG%TYPE;
2807 l_late_charge_type HZ_CUSTOMER_PROFILES.LATE_CHARGE_TYPE%TYPE;
2808 l_late_charge_term_id HZ_CUSTOMER_PROFILES.LATE_CHARGE_TERM_ID%TYPE;
2809 l_interest_calculation_period HZ_CUSTOMER_PROFILES.INTEREST_CALCULATION_PERIOD%TYPE;
2810 l_hold_charged_invoices_flag HZ_CUSTOMER_PROFILES.HOLD_CHARGED_INVOICES_FLAG%TYPE;
2811 l_message_Text_id HZ_CUSTOMER_PROFILES.MESSAGE_TEXT_ID%TYPE;
2812 l_multiple_Interest_Rates_flag HZ_CUSTOMER_PROFILES.MULTIPLE_INTEREST_RATES_FLAG%TYPE;
2813 l_charge_begin_date HZ_CUSTOMER_PROFILES.CHARGE_BEGIN_DATE%TYPE;
2814
2815 BEGIN
2816
2817 -- Check if API is called in debug mode. If yes, enable debug.
2818 --enable_debug;
2819
2820 -- Debug info.
2821
2822 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2823 hz_utility_v2pub.debug(p_message=> 'validate_customer_profile (+)',
2824 p_prefix=>l_debug_prefix,
2825 p_msg_level=>fnd_log.level_procedure);
2826 END IF;
2827 -- Select fields for later use during update.
2828 IF p_create_update_flag = 'U'
2829 THEN
2830
2831 SELECT CUST_ACCOUNT_ID, SITE_USE_ID, CREATED_BY_MODULE, APPLICATION_ID,
2832 CREDIT_RATING, RISK_CODE, STATUS,DISCOUNT_TERMS,
2833 DISCOUNT_GRACE_DAYS,DUNNING_LETTERS,DUNNING_LETTER_SET_ID,
2834 SEND_STATEMENTS,STATEMENT_CYCLE_ID,CREDIT_BALANCE_STATEMENTS,
2835 INTEREST_CHARGES,CHARGE_ON_FINANCE_CHARGE_FLAG,
2836 INTEREST_PERIOD_DAYS,ACCOUNT_STATUS,TOLERANCE,PERCENT_COLLECTABLE,
2837 STANDARD_TERMS,OVERRIDE_TERMS,LOCKBOX_MATCHING_OPTION,
2838 AUTOCASH_HIERARCHY_ID,AUTOCASH_HIERARCHY_ID_FOR_ADR,
2839 CLEARING_DAYS,PAYMENT_GRACE_DAYS,GROUPING_RULE_ID,
2840 TAX_PRINTING_OPTION,
2841 REVIEW_CYCLE,LAST_CREDIT_REVIEW_DATE,NEXT_CREDIT_REVIEW_DATE,PARTY_ID,
2842 CREDIT_CLASSIFICATION, LATE_CHARGE_CALCULATION_TRX, CREDIT_ITEMS_FLAG,
2843 DISPUTED_TRANSACTIONS_FLAG, LATE_CHARGE_TYPE, LATE_CHARGE_TERM_ID,
2844 INTEREST_CALCULATION_PERIOD, HOLD_CHARGED_INVOICES_FLAG, MESSAGE_TEXT_ID,
2845 MULTIPLE_INTEREST_RATES_FLAG, CHARGE_BEGIN_DATE
2846 INTO l_cust_account_id, l_site_use_id, l_created_by_module, l_application_id,
2847 l_credit_rating, l_risk_code, l_status,l_discount_terms,
2848 l_discount_grace_days,l_dunning_letters,l_dunning_letter_set_id,
2849 l_send_statements,l_statement_cycle_id,l_credit_balance_statements,
2850 l_interest_charges,l_finance_charge_flag,
2851 l_interest_period_days,l_account_status,l_tolerance,l_percent_collectable,
2852 l_standard_terms,l_override_terms,l_lockbox_matching_option,
2853 l_autocash_hierarchy_id,l_autocash_hierarchy_id_for_ad,
2854 l_clearing_days,l_payment_grace_days,l_grouping_rule_id,
2855 l_tax_printing_option,
2856 l_review_cycle,l_last_credit_review_date,l_next_credit_review_date,l_party_id,
2857 l_credit_classification, l_late_charge_calculation_trx, l_credit_items_flag,
2858 l_disputed_transactions_flag, l_late_charge_type, l_late_charge_term_id,
2859 l_interest_calculation_period, l_hold_charged_invoices_flag, l_message_text_id,
2860 l_multiple_interest_rates_flag, l_charge_begin_date
2861 FROM HZ_CUSTOMER_PROFILES
2862 WHERE ROWID = p_rowid;
2863 END IF;
2864
2865 --------------------------------------
2866 -- validate cust_account_profile_id
2867 --------------------------------------
2868 /****Logical APIs - validation not required****/
2869 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2870 IF p_create_update_flag = 'C' THEN
2871
2872 -- If primary key value is passed, check for uniqueness.
2873 -- If primary key value is not passed, it will be generated
2874 -- from sequence by table handler.
2875
2876 IF p_customer_profile_rec.cust_account_profile_id IS NOT NULL AND
2877 p_customer_profile_rec.cust_account_profile_id <> FND_API.G_MISS_NUM
2878 THEN
2879 BEGIN
2880 SELECT 'Y' INTO l_dummy
2881 FROM HZ_CUSTOMER_PROFILES
2882 WHERE CUST_ACCOUNT_PROFILE_ID = p_customer_profile_rec.cust_account_profile_id;
2883
2884 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
2885 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id' );
2886 FND_MSG_PUB.ADD;
2887 x_return_status := FND_API.G_RET_STS_ERROR;
2888 EXCEPTION
2889 WHEN NO_DATA_FOUND THEN
2890 NULL;
2891 END;
2892
2893 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2894 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is unique during creation if passed in. ' ||
2895 'x_return_status = ' || x_return_status,
2896 p_prefix =>l_debug_prefix,
2897 p_msg_level=>fnd_log.level_statement);
2898 END IF;
2899
2900 END IF;
2901 END IF;
2902
2903 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2904 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_profile_id ... ' ||
2905 'x_return_status = ' || x_return_status,
2906 p_prefix =>l_debug_prefix,
2907 p_msg_level=>fnd_log.level_statement);
2908 END IF;
2909 END IF;
2910
2911 ----------------------------------------------
2912 -- validate cust_account_id
2913 ----------------------------------------------
2914 /****Logical APIs - validation not required****/
2915 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2916 -- cust_account_id is mandatory field
2917 -- Since cust_account_id is non-updateable, we only need to check mandatory
2918 -- during creation.
2919 --
2920 -- 2310474: cust_account_id can be equal = -1 if the profile is related to party
2921 -- and not a customer account.
2922 --
2923
2924
2925 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2926 hz_utility_v2pub.debug(p_message=>'cust_account_id = ' || p_customer_profile_rec.cust_account_id || ' ' ||
2927 'x_return_status = ' || x_return_status,
2928 p_prefix =>l_debug_prefix,
2929 p_msg_level=>fnd_log.level_statement);
2930 END IF;
2931
2932
2933 IF p_create_update_flag = 'C' THEN
2934 validate_mandatory (
2935 p_create_update_flag => p_create_update_flag,
2936 p_column => 'cust_account_id',
2937 p_column_value => p_customer_profile_rec.cust_account_id,
2938 x_return_status => x_return_status );
2939
2940 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2941 hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
2942 'x_return_status = ' || x_return_status,
2943 p_prefix =>l_debug_prefix,
2944 p_msg_level=>fnd_log.level_statement);
2945 END IF;
2946
2947 END IF;
2948
2949 -- 2310474 party_id is mandatory field
2950 IF p_create_update_flag = 'C'
2951 THEN
2952 validate_mandatory (
2953 p_create_update_flag => p_create_update_flag,
2954 p_column => 'party_id',
2955 p_column_value => p_customer_profile_rec.party_id,
2956 x_return_status => x_return_status );
2957
2958 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2959 hz_utility_v2pub.debug(p_message=>'party_id is mandatory. ' ||
2960 'x_return_status = ' || x_return_status,
2961 p_prefix =>l_debug_prefix,
2962 p_msg_level=>fnd_log.level_statement);
2963 END IF;
2964
2965 END IF;
2966
2967 -- cust_account_id is non-updateable field.
2968 IF p_create_update_flag = 'U' AND
2969 p_customer_profile_rec.cust_account_id IS NOT NULL
2970 THEN
2971 validate_nonupdateable (
2972 p_column => 'cust_account_id',
2973 p_column_value => p_customer_profile_rec.cust_account_id,
2974 p_old_column_value => l_cust_account_id,
2975 x_return_status => x_return_status );
2976
2977 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2978 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
2979 'x_return_status = ' || x_return_status,
2980 p_prefix =>l_debug_prefix,
2981 p_msg_level=>fnd_log.level_statement);
2982 END IF;
2983
2984 END IF;
2985
2986 -- 2310474 After the migration script to fill up party_id for all exiting customer profiles arhucppt.sql
2987 -- the party_id is not updeatable
2988
2989 IF p_create_update_flag = 'U' AND
2990 p_customer_profile_rec.party_id IS NOT NULL
2991 THEN
2992 validate_nonupdateable (
2993 p_column => 'party_id',
2994 p_column_value => p_customer_profile_rec.party_id,
2995 p_old_column_value => l_party_id,
2996 x_return_status => x_return_status );
2997
2998 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2999 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
3000 'x_return_status = ' || x_return_status,
3001 p_prefix =>l_debug_prefix,
3002 p_msg_level=>fnd_log.level_statement);
3003 END IF;
3004
3005 END IF;
3006
3007
3008 -- cust_account_id is foreign key to hz_cust_accounts
3009 -- Since cust_acocunt_id is non-updateable, we only need to
3010 -- check FK during creation.
3011
3012 IF p_create_update_flag = 'C' AND
3013 p_customer_profile_rec.cust_account_id IS NOT NULL AND
3014 p_customer_profile_rec.cust_account_id <> FND_API.G_MISS_NUM
3015 THEN
3016 check_cust_account_fk (
3017 p_column => 'cust_account_id',
3018 p_column_value => p_customer_profile_rec.cust_account_id,
3019 x_return_status => x_return_status );
3020
3021
3022 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3023 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
3024 'x_return_status = ' || x_return_status,
3025 p_prefix =>l_debug_prefix,
3026 p_msg_level=>fnd_log.level_statement);
3027 END IF;
3028
3029 END IF;
3030 END IF;
3031
3032 -- We can only have one customer profile for one account
3033 -- Because cust_account_id is non-updateable, we only need to do this check during
3034 -- creation.
3035 -------------------------------------
3036 -- 2310474: p_cust_account_rec.cust_account_id = -1 if we are creating the profile for a party
3037 -- One party can only have 1 only 1 customer profile directly attached to it
3038 -------------------------------------
3039
3040 IF p_create_update_flag = 'C' AND
3041 ( p_customer_profile_rec.site_use_id IS NULL OR
3042 p_customer_profile_rec.site_use_id = FND_API.G_MISS_NUM ) AND
3043 p_customer_profile_rec.cust_account_id <> -1
3044 THEN
3045 BEGIN
3046 SELECT 'Y' INTO l_dummy
3047 FROM HZ_CUSTOMER_PROFILES
3048 WHERE CUST_ACCOUNT_ID = p_customer_profile_rec.cust_account_id
3049 AND SITE_USE_ID IS NULL
3050 AND ROWNUM = 1;
3051
3052 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
3053 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
3054 FND_MSG_PUB.ADD;
3055 x_return_status := FND_API.G_RET_STS_ERROR;
3056 EXCEPTION
3057 WHEN NO_DATA_FOUND THEN
3058 NULL;
3059 END;
3060
3061
3062 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3063 hz_utility_v2pub.debug(p_message=>'only one customer profile for one account. ' ||
3064 'x_return_status = ' || x_return_status,
3065 p_prefix =>l_debug_prefix,
3066 p_msg_level=>fnd_log.level_statement);
3067 END IF;
3068
3069
3070 ELSIF p_create_update_flag = 'C' AND
3071 ( p_customer_profile_rec.site_use_id IS NULL OR
3072 p_customer_profile_rec.site_use_id = FND_API.G_MISS_NUM ) AND
3073 p_customer_profile_rec.cust_account_id = -1
3074 THEN
3075 -- 2310474 in this case we are creating a customer profile for party
3076 -- One party can only have 1 and only 1 profile directly attachment to the party
3077 -- At party level
3078 BEGIN
3079 SELECT 'Y' INTO l_dummy
3080 FROM HZ_CUSTOMER_PROFILES
3081 WHERE PARTY_ID = p_customer_profile_rec.party_id
3082 AND CUST_ACCOUNT_ID = -1;
3083
3084 FND_MESSAGE.SET_NAME( 'AR', 'HZ_ONLY_ONE_PROF_AT_PARTY_LEV' );
3085 FND_MESSAGE.SET_TOKEN( 'PARTY_ID', p_customer_profile_rec.party_id );
3086 FND_MSG_PUB.ADD;
3087 x_return_status := FND_API.G_RET_STS_ERROR;
3088 EXCEPTION
3089 WHEN NO_DATA_FOUND THEN
3090 NULL;
3091 END;
3092
3093
3094 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3095 hz_utility_v2pub.debug(p_message=>'only one customer profile for one party at party level. ' ||
3096 'x_return_status = ' || x_return_status,
3097 p_prefix =>l_debug_prefix,
3098 p_msg_level=>fnd_log.level_statement);
3099 END IF;
3100
3101
3102 END IF;
3103
3104
3105 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3106 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
3107 'x_return_status = ' || x_return_status,
3108 p_prefix =>l_debug_prefix,
3109 p_msg_level=>fnd_log.level_statement);
3110 END IF;
3111
3112 ---------------------------------
3113 -- 2310474 Validation of review_cycle
3114 -- The last_credit_review_date and next_credit_review_date are not part of TCA API management
3115 -- Credit Management team take care of them
3116 -- V2 API does not do any validation on Last_Review_date and Next_review_date
3117 ---------------------------------
3118
3119 -- Validate lookup_code of the REVIEW_CYCLE
3120 IF p_customer_profile_rec.review_cycle IS NOT NULL AND
3121 p_customer_profile_rec.review_cycle <> FND_API.G_MISS_CHAR AND
3122 ( p_create_update_flag = 'C' OR
3123 ( p_create_update_flag = 'U' AND
3124 p_customer_profile_rec.review_cycle <> NVL( l_review_cycle, FND_API.G_MISS_CHAR ) ) )
3125 THEN
3126 validate_lookup (
3127 p_column => 'review_cycle',
3128 p_lookup_table => 'AR_LOOKUPS',
3129 p_lookup_type => 'PERIODIC_REVIEW_CYCLE',
3130 p_column_value => p_customer_profile_rec.review_cycle,
3131 x_return_status => x_return_status );
3132
3133 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3134 hz_utility_v2pub.debug(p_message=>'review_cycle is lookup code in lookup type PERIODIC_REVIEW_CYCLE in ar_lookups. ' ||
3135 'x_return_status = ' || x_return_status,
3136 p_prefix =>l_debug_prefix,
3137 p_msg_level=>fnd_log.level_statement);
3138 END IF;
3139
3140
3141 END IF;
3142
3143
3144 ----------------------------------------------
3145 -- validate collector_id
3146 ----------------------------------------------
3147
3148 -- collector_id is mandatory field.
3149
3150 -- Since we are defaulting to default profile class if profile_class_id
3151 -- has not been passed in, the collector_id can be null or G_MISS during
3152 -- creation and it will default to collect_id of default profile class if
3153 -- it is NULL. We can have G_MISS checking to make it mandatory.
3154
3155 check_partial_mandatory_column (
3156 p_column => 'collector_id',
3157 p_column_value => p_customer_profile_rec.collector_id,
3158 x_return_status => x_return_status );
3159
3160
3161 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3162 hz_utility_v2pub.debug(p_message=>'collector_id is mandatory : it can be null but not G_MISS. ' ||
3163 'x_return_status = ' || x_return_status,
3164 p_prefix =>l_debug_prefix,
3165 p_msg_level=>fnd_log.level_statement);
3166 END IF;
3167
3168 -- collector_id is foreign key to ar_collectors
3169 IF p_customer_profile_rec.collector_id IS NOT NULL AND
3170 p_customer_profile_rec.collector_id <> FND_API.G_MISS_NUM
3171 THEN
3172 check_collector_fk (
3173 p_column => 'collector_id',
3174 p_column_value => p_customer_profile_rec.collector_id,
3175 x_return_status => x_return_status );
3176
3177
3178 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3179 hz_utility_v2pub.debug(p_message=>'collector_id is foreign key to ar_collectors. ' ||
3180 'x_return_status = ' || x_return_status,
3181 p_prefix =>l_debug_prefix,
3182 p_msg_level=>fnd_log.level_statement);
3183 END IF;
3184
3185 END IF;
3186
3187 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3188 hz_utility_v2pub.debug(p_message=>'(+) after validate collector_id ... ' ||
3189 'x_return_status = ' || x_return_status,
3190 p_prefix =>l_debug_prefix,
3191 p_msg_level=>fnd_log.level_statement);
3192 END IF;
3193
3194 ----------------------------------------------
3195 -- validate credit_checking
3196 ----------------------------------------------
3197
3198 -- credit_checking is mandatory field.
3199
3200 -- Since we are defaulting to default profile class if profile_class_id
3201 -- has not been passed in, the credit_checking can be null or G_MISS during
3202 -- creation and it will default to credit_checking of default profile class if
3203 -- it is NULL. We can have G_MISS checking to make it mandatory.
3204
3205 check_partial_mandatory_column (
3206 p_column => 'credit_checking',
3207 p_column_value => p_customer_profile_rec.credit_checking,
3208 x_return_status => x_return_status );
3209
3210
3211 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3212 hz_utility_v2pub.debug(p_message=>'credit_checking is mandatory : it can be null but not G_MISS. ' ||
3213 'x_return_status = ' || x_return_status,
3214 p_prefix =>l_debug_prefix,
3215 p_msg_level=>fnd_log.level_statement);
3216 END IF;
3217
3218
3219 -- credit_checking is lookup code in lookup type YES/NO
3220 IF p_customer_profile_rec.credit_checking IS NOT NULL AND
3221 p_customer_profile_rec.credit_checking <> FND_API.G_MISS_CHAR
3222 THEN
3223 validate_lookup (
3224 p_column => 'credit_checking',
3225 p_lookup_type => 'YES/NO',
3226 p_column_value => p_customer_profile_rec.credit_checking,
3227 x_return_status => x_return_status );
3228
3229 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3230 hz_utility_v2pub.debug(p_message=>'credit_checking is lookup code in lookup type YES/NO. ' ||
3231 'x_return_status = ' || x_return_status,
3232 p_prefix =>l_debug_prefix,
3233 p_msg_level=>fnd_log.level_statement);
3234 END IF;
3235
3236 END IF;
3237
3238 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3239 hz_utility_v2pub.debug(p_message=>'(+) after validate credit_checking ... ' ||
3240 'x_return_status = ' || x_return_status,
3241 p_prefix =>l_debug_prefix,
3242 p_msg_level=>fnd_log.level_statement);
3243 END IF;
3244
3245
3246 ----------------------------------------------
3247 -- validate discount_terms
3248 ----------------------------------------------
3249
3250 -- discount_terms is mandatory field.
3251
3252 -- Since we are defaulting to default profile class if profile_class_id
3253 -- has not been passed in, the discount_terms can be null or G_MISS during
3254 -- creation and it will default to discount_terms of default profile class if
3255 -- it is NULL. We can have G_MISS checking to make it mandatory.
3256
3257 check_partial_mandatory_column (
3258 p_column => 'discount_terms',
3259 p_column_value => p_customer_profile_rec.discount_terms,
3260 x_return_status => x_return_status );
3261
3262 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3263 hz_utility_v2pub.debug(p_message=>'discount_terms is mandatory : it can be null but not G_MISS. ' ||
3264 'x_return_status = ' || x_return_status,
3265 p_prefix =>l_debug_prefix,
3266 p_msg_level=>fnd_log.level_statement);
3267 END IF;
3268
3269
3270 /****Logical APIs - validation not required****/
3271 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3272 -- discount_terms is lookup code in lookup type YES/NO
3273 IF p_customer_profile_rec.discount_terms IS NOT NULL AND
3274 p_customer_profile_rec.discount_terms <> FND_API.G_MISS_CHAR
3275 AND ( p_create_update_flag = 'C' OR
3276 ( p_create_update_flag = 'U' AND
3277 p_customer_profile_rec.discount_terms <> NVL( l_discount_terms, FND_API.G_MISS_CHAR ) ) )
3278 THEN
3279 validate_lookup (
3280 p_column => 'discount_terms',
3281 p_lookup_type => 'YES/NO',
3282 p_column_value => p_customer_profile_rec.discount_terms,
3283 x_return_status => x_return_status );
3284
3285
3286 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3287 hz_utility_v2pub.debug(p_message=>'discount_terms is lookup code in lookup type YES/NO. ' ||
3288 'x_return_status = ' || x_return_status,
3289 p_prefix =>l_debug_prefix,
3290 p_msg_level=>fnd_log.level_statement);
3291 END IF;
3292
3293 END IF;
3294 END IF;
3295
3296 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3297 hz_utility_v2pub.debug(p_message=>'(+) after validate discount_terms ... ' ||
3298 'x_return_status = ' || x_return_status,
3299 p_prefix =>l_debug_prefix,
3300 p_msg_level=>fnd_log.level_statement);
3301 END IF;
3302
3303 ----------------------------------------------
3304 -- validate tolerance
3305 ----------------------------------------------
3306
3307 -- tolerance is mandatory field.
3308
3309 -- Since we are defaulting to default profile class if profile_class_id
3310 -- has not been passed in, the tolerance can be null or G_MISS during
3311 -- creation and it will default to tolerance of default profile class if
3312 -- it is NULL. We can have G_MISS checking to make it mandatory.
3313
3314 check_partial_mandatory_column (
3315 p_column => 'tolerance',
3316 p_column_value => p_customer_profile_rec.tolerance,
3317 x_return_status => x_return_status );
3318
3319
3320 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3321 hz_utility_v2pub.debug(p_message=>'tolerance is mandatory : it can be null but not G_MISS. ' ||
3322 'x_return_status = ' || x_return_status,
3323 p_prefix =>l_debug_prefix,
3324 p_msg_level=>fnd_log.level_statement);
3325 END IF;
3326
3327
3328 ----------------------------------------------
3329 -- validate profile_class_id
3330 ----------------------------------------------
3331
3332 -- profile_class_id is foreign key to hz_cust_profile_classes
3333 IF p_customer_profile_rec.profile_class_id IS NOT NULL AND
3334 p_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM
3335 THEN
3336 IF p_customer_profile_rec.profile_class_id < 0 THEN
3337 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NEGATIVE_PROFILE_CLASS' );
3338 FND_MSG_PUB.ADD;
3339 x_return_status := FND_API.G_RET_STS_ERROR;
3340 ELSE
3341 BEGIN
3342 SELECT STATUS, NAME INTO l_class_status, l_profile_class_name
3343 FROM HZ_CUST_PROFILE_CLASSES
3344 WHERE PROFILE_CLASS_ID = p_customer_profile_rec.profile_class_id;
3345
3346 IF l_class_status <> 'A' THEN
3347 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INACTIVE_PROFILE_CLASS' );
3348 FND_MESSAGE.SET_TOKEN( 'NAME', l_profile_class_name );
3349 FND_MSG_PUB.ADD;
3350 x_return_status := FND_API.G_RET_STS_ERROR;
3351 END IF;
3352 EXCEPTION
3353 WHEN NO_DATA_FOUND THEN
3354 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
3355 FND_MESSAGE.SET_TOKEN( 'FK', 'profile_class_id' );
3356 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'profile_class_id' );
3357 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_profile_classes');
3358 FND_MSG_PUB.ADD;
3359 x_return_status := FND_API.G_RET_STS_ERROR;
3360 END;
3361 END IF;
3362
3363 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3364 hz_utility_v2pub.debug(p_message=>'profile_class_id should be positive, foreign key of hz_cust_profile_classes and point to an active profile class. ' ||
3365 'x_return_status = ' || x_return_status,
3366 p_prefix =>l_debug_prefix,
3367 p_msg_level=>fnd_log.level_statement);
3368 END IF;
3369
3370 END IF;
3371
3372 -- profile_class_id cannot be set to null during update
3373 IF p_create_update_flag = 'U' AND
3374 p_customer_profile_rec.profile_class_id IS NOT NULL
3375 THEN
3376 validate_cannot_update_to_null (
3377 p_column => 'profile_class_id',
3378 p_column_value => p_customer_profile_rec.profile_class_id,
3379 x_return_status => x_return_status );
3380
3381
3382 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3383 hz_utility_v2pub.debug(p_message=>'profile_class_id cannot be updated to null. ' ||
3384 'x_return_status = ' || x_return_status,
3385 p_prefix =>l_debug_prefix,
3386 p_msg_level=>fnd_log.level_statement);
3387 END IF;
3388
3389 END IF;
3390
3391
3392 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3393 hz_utility_v2pub.debug(p_message=>'(+) after validate profile_class_id ... ' ||
3394 'x_return_status = ' || x_return_status,
3395 p_prefix =>l_debug_prefix,
3396 p_msg_level=>fnd_log.level_statement);
3397 END IF;
3398
3399 ----------------------------------------------
3400 -- validate site_use_id
3401 ----------------------------------------------
3402
3403 -- site_use_id is non-updateable field.
3404 IF p_create_update_flag = 'U' AND
3405 p_customer_profile_rec.site_use_id IS NOT NULL
3406 THEN
3407 validate_nonupdateable (
3408 p_column => 'site_use_id',
3409 p_column_value => p_customer_profile_rec.site_use_id,
3410 p_old_column_value => l_site_use_id,
3411 x_return_status => x_return_status );
3412
3413
3414 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3415 hz_utility_v2pub.debug(p_message=>'site_use_id is non-updateable. ' ||
3416 'x_return_status = ' || x_return_status,
3417 p_prefix =>l_debug_prefix,
3418 p_msg_level=>fnd_log.level_statement);
3419 END IF;
3420
3421 END IF;
3422
3423 ------------------
3424 -- site_use_id is foreign key to hz_cust_site_uses.
3425 -- one site use can only have one profile.
3426 -- Since site_use_id is non-updateable, we only need to check
3427 -- FK during creation.
3428 ------------------
3429 -- 2310474: User can create a customer profile at site level
3430 -- only if the profile is created for at account level
3431 -- and not at party level
3432 ------------------
3433
3434
3435 IF p_create_update_flag = 'C' AND
3436 p_customer_profile_rec.site_use_id IS NOT NULL AND
3437 p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM AND
3438 p_customer_profile_rec.cust_account_id <> -1
3439 THEN
3440 BEGIN
3441
3442 SELECT CUST_ACCT_SITE_ID,SITE_USE_CODE,ORG_ID
3443 INTO l_cust_acct_site_id,l_cust_acct_site_use_code,l_org_id
3444 FROM HZ_CUST_SITE_USES_ALL
3445 WHERE SITE_USE_ID = p_customer_profile_rec.site_use_id;
3446
3447 -- Bug 4650473. Check if org is accessible.
3448 BEGIN
3449 MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
3450 EXCEPTION
3451 WHEN OTHERS
3452 THEN
3453 x_return_status := FND_API.G_RET_STS_ERROR;
3454 END;
3455
3456 -- cust_account_id should be same as cust_account_id site_use_id belongs to.
3457 SELECT CUST_ACCOUNT_ID INTO l_cust_account_id
3458 FROM HZ_CUST_ACCT_SITES_ALL
3459 WHERE CUST_ACCT_SITE_ID = l_cust_acct_site_id;
3460
3461 IF l_cust_account_id <> p_customer_profile_rec.cust_account_id THEN
3462 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_SITEUSE_MISMATCH' );
3463 FND_MSG_PUB.ADD;
3464 x_return_status := FND_API.G_RET_STS_ERROR;
3465 END IF;
3466
3467 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3468 hz_utility_v2pub.debug(p_message=>'cust_account_id should be same as cust_account_id site_use_id belongs to. ' ||
3469 'x_return_status = ' || x_return_status,
3470 p_prefix =>l_debug_prefix,
3471 p_msg_level=>fnd_log.level_statement);
3472 END IF;
3473
3474 EXCEPTION
3475 WHEN NO_DATA_FOUND THEN
3476 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
3477 FND_MESSAGE.SET_TOKEN( 'FK', 'site_use_id' );
3478 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'site_use_id' );
3479 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_site_uses' );
3480 FND_MSG_PUB.ADD;
3481 x_return_status := FND_API.G_RET_STS_ERROR;
3482 END;
3483
3484 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3485 hz_utility_v2pub.debug(p_message=>'site_use_id is foreign key to hz_cust_site_uses. ' ||
3486 'x_return_status = ' || x_return_status,
3487 p_prefix =>l_debug_prefix,
3488 p_msg_level=>fnd_log.level_statement);
3489 END IF;
3490
3491
3492 BEGIN
3493 SELECT 'Y' INTO l_dummy
3494 FROM HZ_CUSTOMER_PROFILES
3495 WHERE CUST_ACCOUNT_ID = p_customer_profile_rec.cust_account_id
3496 AND SITE_USE_ID = p_customer_profile_rec.site_use_id
3497 AND ROWNUM = 1;
3498
3499 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
3500 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id' );
3501 FND_MSG_PUB.ADD;
3502 x_return_status := FND_API.G_RET_STS_ERROR;
3503 EXCEPTION
3504 WHEN NO_DATA_FOUND THEN
3505 NULL;
3506 END;
3507
3508
3509 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3510 hz_utility_v2pub.debug(p_message=>'one site use can only have one profile. ' ||
3511 'x_return_status = ' || x_return_status,
3512 p_prefix =>l_debug_prefix,
3513 p_msg_level=>fnd_log.level_statement);
3514 END IF;
3515
3516
3517 -- 2310474: Profile can not be at account site level if it is created at party level
3518 ELSIF p_create_update_flag = 'C' AND
3519 p_customer_profile_rec.site_use_id IS NOT NULL AND
3520 p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM AND
3521 p_customer_profile_rec.cust_account_id = -1
3522 THEN
3523 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NO_SITE_PROF_AT_PTY_LEV' );
3524 FND_MESSAGE.SET_TOKEN( 'PARTY_ID', p_customer_profile_rec.party_id );
3525 FND_MESSAGE.SET_TOKEN( 'SITE_USE_ID', p_customer_profile_rec.site_use_id );
3526 FND_MSG_PUB.ADD;
3527 x_return_status := FND_API.G_RET_STS_ERROR;
3528
3529
3530 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3531 hz_utility_v2pub.debug(p_message=>'profile at party level cannot be assign to a site. ' ||
3532 'x_return_status = ' || x_return_status,
3533 p_prefix =>l_debug_prefix,
3534 p_msg_level=>fnd_log.level_statement);
3535 END IF;
3536
3537
3538 END IF;
3539
3540
3541 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3542 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
3543 'x_return_status = ' || x_return_status,
3544 p_prefix =>l_debug_prefix,
3545 p_msg_level=>fnd_log.level_statement);
3546 END IF;
3547
3548 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3549 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
3550 'x_return_status = ' || x_return_status,
3551 p_prefix =>l_debug_prefix,
3552 p_msg_level=>fnd_log.level_statement);
3553 END IF;
3554
3555
3556 ----------------------------------------------
3557 -- validate credit_rating
3558 ----------------------------------------------
3559
3560 -- credit_rating is lookup code in lookup type CREDIT_RATING
3561 IF p_customer_profile_rec.credit_rating IS NOT NULL AND
3562 p_customer_profile_rec.credit_rating <> FND_API.G_MISS_CHAR AND
3563 ( p_create_update_flag = 'C' OR
3564 ( p_create_update_flag = 'U' AND
3565 p_customer_profile_rec.credit_rating <> NVL( l_credit_rating, FND_API.G_MISS_CHAR ) ) )
3566 THEN
3567 validate_lookup (
3568 p_column => 'credit_rating',
3569 p_lookup_type => 'CREDIT_RATING',
3570 p_column_value => p_customer_profile_rec.credit_rating,
3571 x_return_status => x_return_status );
3572
3573 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3574 hz_utility_v2pub.debug(p_message=>'credit_rating is lookup code in lookup type CREDIT_RATING. ' ||
3575 'x_return_status = ' || x_return_status,
3576 p_prefix =>l_debug_prefix,
3577 p_msg_level=>fnd_log.level_statement);
3578 END IF;
3579
3580 END IF;
3581
3582
3583 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3584 hz_utility_v2pub.debug(p_message=>'(+) after validate credit_rating ... ' ||
3585 'x_return_status = ' || x_return_status,
3586 p_prefix =>l_debug_prefix,
3587 p_msg_level=>fnd_log.level_statement);
3588 END IF;
3589
3590
3591 ----------------------------------------------
3592 -- validate risk_code
3593 ----------------------------------------------
3594
3595 -- risk_code is lookup code in lookup type RISK_CODE
3596 IF p_customer_profile_rec.risk_code IS NOT NULL AND
3597 p_customer_profile_rec.risk_code <> FND_API.G_MISS_CHAR AND
3598 ( p_create_update_flag = 'C' OR
3599 ( p_create_update_flag = 'U' AND
3600 p_customer_profile_rec.risk_code <> NVL( l_risk_code, FND_API.G_MISS_CHAR ) ) )
3601 THEN
3602 validate_lookup (
3603 p_column => 'risk_code',
3604 p_lookup_type => 'RISK_CODE',
3605 p_column_value => p_customer_profile_rec.risk_code,
3606 x_return_status => x_return_status );
3607
3608 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3609 hz_utility_v2pub.debug(p_message=>'risk_code is lookup code in lookup type RISK_CODE. ' ||
3610 'x_return_status = ' || x_return_status,
3611 p_prefix =>l_debug_prefix,
3612 p_msg_level=>fnd_log.level_statement);
3613 END IF;
3614
3615 END IF;
3616
3617 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3618 hz_utility_v2pub.debug(p_message=>'(+) after validate risk_code ... ' ||
3619 'x_return_status = ' || x_return_status,
3620 p_prefix =>l_debug_prefix,
3621 p_msg_level=>fnd_log.level_statement);
3622 END IF;
3623
3624
3625 ----------------------------------------------
3626 -- validate auto_rec_incl_disputed_flag
3627 ----------------------------------------------
3628
3629 -- auto_rec_incl_disputed_flag is mandatory field.
3630
3631 -- Since we are defaulting to default profile class if profile_class_id
3632 -- has not been passed in, the auto_rec_incl_disputed_flag can be null or G_MISS during
3633 -- creation and it will default to auto_rec_incl_disputed_flag of default profile class if
3634 -- it is NULL. We can have G_MISS checking to make it mandatory.
3635
3636 check_partial_mandatory_column (
3637 p_column => 'auto_rec_incl_disputed_flag',
3638 p_column_value => p_customer_profile_rec.auto_rec_incl_disputed_flag,
3639 x_return_status => x_return_status );
3640
3641 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3642 hz_utility_v2pub.debug(p_message=>'auto_rec_incl_disputed_flag is mandatory : it can be null but not G_MISS. ' ||
3643 'x_return_status = ' || x_return_status,
3644 p_prefix =>l_debug_prefix,
3645 p_msg_level=>fnd_log.level_statement);
3646 END IF;
3647
3648
3649 -- auto_rec_incl_disputed_flag is lookup code in lookup type YES/NO
3650 IF p_customer_profile_rec.auto_rec_incl_disputed_flag IS NOT NULL AND
3651 p_customer_profile_rec.auto_rec_incl_disputed_flag <> FND_API.G_MISS_CHAR
3652 THEN
3653 validate_lookup (
3654 p_column => 'auto_rec_incl_disputed_flag',
3655 p_lookup_type => 'YES/NO',
3656 p_column_value => p_customer_profile_rec.auto_rec_incl_disputed_flag,
3657 x_return_status => x_return_status );
3658
3659
3660 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3661 hz_utility_v2pub.debug(p_message=>'auto_rec_incl_disputed_flag is lookup code in lookup type YES/NO. ' ||
3662 'x_return_status = ' || x_return_status,
3663 p_prefix =>l_debug_prefix,
3664 p_msg_level=>fnd_log.level_statement);
3665 END IF;
3666
3667 END IF;
3668
3669
3670 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3671 hz_utility_v2pub.debug(p_message=>'(+) after validate auto_rec_incl_disputed_flag ... ' ||
3672 'x_return_status = ' || x_return_status,
3673 p_prefix =>l_debug_prefix,
3674 p_msg_level=>fnd_log.level_statement);
3675 END IF;
3676
3677
3678 ----------------------------------------------
3679 -- validate charge_on_finance_charge_flag
3680 ----------------------------------------------
3681 /****Logical APIs - validation not required****/
3682 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3683 -- charge_on_finance_charge_flag is lookup code in lookup type YES/NO
3684 -- As a part of late charge policy project changing the lookup type to AR_FORMULAE (bug # 5065436)
3685 IF p_customer_profile_rec.charge_on_finance_charge_flag IS NOT NULL AND
3686 p_customer_profile_rec.charge_on_finance_charge_flag <> FND_API.G_MISS_CHAR
3687 THEN
3688 validate_lookup (
3689 p_column => 'charge_on_finance_charge_flag',
3690 p_lookup_type => 'AR_FORMULAE',
3691 p_column_value => p_customer_profile_rec.charge_on_finance_charge_flag,
3692 x_return_status => x_return_status );
3693
3694 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3695 hz_utility_v2pub.debug(p_message=>'charge_on_finance_charge_flag is lookup code in lookup type AR_FORMULAE. ' ||
3696 'x_return_status = ' || x_return_status,
3697 p_prefix =>l_debug_prefix,
3698 p_msg_level=>fnd_log.level_statement);
3699 END IF;
3700
3701 END IF;
3702
3703 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3704 hz_utility_v2pub.debug(p_message=>'(+) after charge_on_finance_charge_flag ... ' ||
3705 'x_return_status = ' || x_return_status,
3706 p_prefix =>l_debug_prefix,
3707 p_msg_level=>fnd_log.level_statement);
3708 END IF;
3709 END IF;
3710
3711 ----------------------------------------------
3712 -- validate cons_inv_flag
3713 ----------------------------------------------
3714 /****Logical APIs - validation not required****/
3715 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3716 -- cons_inv_flag is lookup code in lookup type YES/NO
3717 IF p_customer_profile_rec.cons_inv_flag IS NOT NULL AND
3718 p_customer_profile_rec.cons_inv_flag <> FND_API.G_MISS_CHAR
3719 THEN
3720 validate_lookup (
3721 p_column => 'cons_inv_flag',
3722 p_lookup_type => 'YES/NO',
3723 p_column_value => p_customer_profile_rec.cons_inv_flag,
3724 x_return_status => x_return_status );
3725
3726
3727 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3728 hz_utility_v2pub.debug(p_message=>'cons_inv_flag is lookup code in lookup type YES/NO. ' ||
3729 'x_return_status = ' || x_return_status,
3730 p_prefix =>l_debug_prefix,
3731 p_msg_level=>fnd_log.level_statement);
3732 END IF;
3733
3734 END IF;
3735
3736
3737 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3738 hz_utility_v2pub.debug(p_message=>'(+) after cons_inv_flag ... ' ||
3739 'x_return_status = ' || x_return_status,
3740 p_prefix =>l_debug_prefix,
3741 p_msg_level=>fnd_log.level_statement);
3742 END IF;
3743 END IF;
3744
3745 ----------------------------------------------
3746 -- validate cons_bill_level
3747 ----------------------------------------------
3748 /****Logical APIs - validation not required****/
3749 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3750
3751 validate_bill_level (
3752 p_create_update_flag => p_create_update_flag,
3753 p_customer_profile_rec => p_customer_profile_rec,
3754 x_return_status => x_return_status );
3755
3756 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3757 hz_utility_v2pub.debug(p_message=>'(+) after cons_bill_level ... ' ||
3758 'x_return_status = ' || x_return_status,
3759 p_prefix =>l_debug_prefix,
3760 p_msg_level=>fnd_log.level_statement);
3761 END IF;
3762 END IF;
3763
3764 ----------------------------------------------
3765 -- validate status
3766 ----------------------------------------------
3767
3768 -- status cannot be set to null during update
3769 IF p_create_update_flag = 'U' AND
3770 p_customer_profile_rec.status IS NOT NULL
3771 THEN
3772 validate_cannot_update_to_null (
3773 p_column => 'status',
3774 p_column_value => p_customer_profile_rec.status,
3775 x_return_status => x_return_status );
3776
3777 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3778 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
3779 'x_return_status = ' || x_return_status,
3780 p_prefix =>l_debug_prefix,
3781 p_msg_level=>fnd_log.level_statement);
3782 END IF;
3783
3784 END IF;
3785
3786 /****Logical APIs - validation not required****/
3787 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3788 -- status is lookup code in lookup type CODE_STATUS
3789 IF p_customer_profile_rec.status IS NOT NULL AND
3790 p_customer_profile_rec.status <> FND_API.G_MISS_CHAR AND
3791 ( p_create_update_flag = 'C' OR
3792 ( p_create_update_flag = 'U' AND
3793 p_customer_profile_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
3794 THEN
3795 validate_lookup (
3796 p_column => 'status',
3797 p_lookup_type => 'CODE_STATUS',
3798 p_column_value => p_customer_profile_rec.status,
3799 x_return_status => x_return_status );
3800
3801 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3802 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
3803 'x_return_status = ' || x_return_status,
3804 p_prefix =>l_debug_prefix,
3805 p_msg_level=>fnd_log.level_statement);
3806 END IF;
3807
3808 END IF;
3809 END IF;
3810
3811 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3812 hz_utility_v2pub.debug(p_message=>'(+) after status ... ' ||
3813 'x_return_status = ' || x_return_status,
3814 p_prefix =>l_debug_prefix,
3815 p_msg_level=>fnd_log.level_statement);
3816 END IF;
3817
3818
3819 ----------------------------------------------
3820 -- validate dunning_letters
3821 ----------------------------------------------
3822
3823 -- dunning_letters is mandatory field.
3824
3825 -- Since we are defaulting to default profile class if profile_class_id
3826 -- has not been passed in, the dunning_letters can be null or G_MISS during
3827 -- creation and it will default to dunning_letters of default profile class if
3828 -- it is NULL. We can have G_MISS checking to make it mandatory.
3829
3830 check_partial_mandatory_column (
3831 p_column => 'dunning_letters',
3832 p_column_value => p_customer_profile_rec.dunning_letters,
3833 x_return_status => x_return_status );
3834
3835 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3836 hz_utility_v2pub.debug(p_message=>'dunning_letters is mandatory : it can be null but not G_MISS. ' ||
3837 'x_return_status = ' || x_return_status,
3838 p_prefix =>l_debug_prefix,
3839 p_msg_level=>fnd_log.level_statement);
3840 END IF;
3841
3842
3843 -- dunning_letters is lookup code in lookup type YES/NO
3844 IF p_customer_profile_rec.dunning_letters IS NOT NULL AND
3845 p_customer_profile_rec.dunning_letters <> FND_API.G_MISS_CHAR
3846 AND ( p_create_update_flag = 'C' OR
3847 ( p_create_update_flag = 'U' AND
3848 p_customer_profile_rec.dunning_letters <> NVL( l_dunning_letters, FND_API.G_MISS_CHAR ) ) )
3849 THEN
3850 validate_lookup (
3851 p_column => 'dunning_letters',
3852 p_lookup_type => 'YES/NO',
3853 p_column_value => p_customer_profile_rec.dunning_letters,
3854 x_return_status => x_return_status );
3855
3856 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3857 hz_utility_v2pub.debug(p_message=>'dunning_letters is lookup code in lookup type YES/NO. ' ||
3858 'x_return_status = ' || x_return_status,
3859 p_prefix =>l_debug_prefix,
3860 p_msg_level=>fnd_log.level_statement);
3861 END IF;
3862
3863 END IF;
3864
3865 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3866 hz_utility_v2pub.debug(p_message=>'(+) after dunning_letters ... ' ||
3867 'x_return_status = ' || x_return_status,
3868 p_prefix =>l_debug_prefix,
3869 p_msg_level=>fnd_log.level_statement);
3870 END IF;
3871
3872
3873 ----------------------------------------------
3874 -- validate interest_charges
3875 ----------------------------------------------
3876
3877 -- interest_charges is mandatory field.
3878
3879 -- Since we are defaulting to default profile class if profile_class_id
3880 -- has not been passed in, the interest_charges can be null or G_MISS during
3881 -- creation and it will default to interest_charges of default profile class if
3882 -- it is NULL. We can have G_MISS checking to make it mandatory.
3883
3884 check_partial_mandatory_column (
3885 p_column => 'interest_charges',
3886 p_column_value => p_customer_profile_rec.interest_charges,
3887 x_return_status => x_return_status );
3888
3889 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3890 hz_utility_v2pub.debug(p_message=>'interest_charges is mandatory : it can be null but not G_MISS. ' ||
3891 'x_return_status = ' || x_return_status,
3892 p_prefix =>l_debug_prefix,
3893 p_msg_level=>fnd_log.level_statement);
3894 END IF;
3895
3896 /****Logical APIs - validation not required****/
3897 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3898 -- interest_charges is lookup code in lookup type YES/NO
3899 IF p_customer_profile_rec.interest_charges IS NOT NULL AND
3900 p_customer_profile_rec.interest_charges <> FND_API.G_MISS_CHAR
3901 AND ( p_create_update_flag = 'C' OR
3902 ( p_create_update_flag = 'U' AND
3903 p_customer_profile_rec.interest_charges <> NVL( l_interest_charges, FND_API.G_MISS_CHAR ) ) )
3904 THEN
3905 validate_lookup (
3906 p_column => 'interest_charges',
3907 p_lookup_type => 'YES/NO',
3908 p_column_value => p_customer_profile_rec.interest_charges,
3909 x_return_status => x_return_status );
3910
3911 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3912 hz_utility_v2pub.debug(p_message=>'interest_charges is lookup code in lookup type YES/NO. ' ||
3913 'x_return_status = ' || x_return_status,
3914 p_prefix =>l_debug_prefix,
3915 p_msg_level=>fnd_log.level_statement);
3916 END IF;
3917
3918 END IF;
3919 END IF;
3920
3921 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3922 hz_utility_v2pub.debug(p_message=>'(+) after interest_charges ... ' ||
3923 'x_return_status = ' || x_return_status,
3924 p_prefix =>l_debug_prefix,
3925 p_msg_level=>fnd_log.level_statement);
3926 END IF;
3927
3928
3929 ----------------------------------------------
3930 -- validate send_statements
3931 ----------------------------------------------
3932
3933 -- send_statements is mandatory field.
3934
3935 -- Since we are defaulting to default profile class if profile_class_id
3936 -- has not been passed in, the send_statements can be null or G_MISS during
3937 -- creation and it will default to send_statements of default profile class if
3938 -- it is NULL. We can have G_MISS checking to make it mandatory.
3939
3940 check_partial_mandatory_column (
3941 p_column => 'send_statements',
3942 p_column_value => p_customer_profile_rec.send_statements,
3943 x_return_status => x_return_status );
3944
3945 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3946 hz_utility_v2pub.debug(p_message=>'send_statements is mandatory : it can be null but not G_MISS. ' ||
3947 'x_return_status = ' || x_return_status,
3948 p_prefix =>l_debug_prefix,
3949 p_msg_level=>fnd_log.level_statement);
3950 END IF;
3951
3952
3953 /****Logical APIs - validation not required****/
3954 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3955 -- send_statements is lookup code in lookup type YES/NO
3956 IF p_customer_profile_rec.send_statements IS NOT NULL AND
3957 p_customer_profile_rec.send_statements <> FND_API.G_MISS_CHAR
3958 AND ( p_create_update_flag = 'C' OR
3959 ( p_create_update_flag = 'U' AND
3960 p_customer_profile_rec.send_statements <> NVL( l_send_statements, FND_API.G_MISS_CHAR ) ) )
3961 THEN
3962 validate_lookup (
3963 p_column => 'send_statements',
3964 p_lookup_type => 'YES/NO',
3965 p_column_value => p_customer_profile_rec.send_statements,
3966 x_return_status => x_return_status );
3967
3968 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3969 hz_utility_v2pub.debug(p_message=>'send_statements is lookup code in lookup type YES/NO. ' ||
3970 'x_return_status = ' || x_return_status,
3971 p_prefix =>l_debug_prefix,
3972 p_msg_level=>fnd_log.level_statement);
3973 END IF;
3974
3975 END IF;
3976 END IF;
3977
3978 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3979 hz_utility_v2pub.debug(p_message=>'(+) after send_statements ... ' ||
3980 'x_return_status = ' || x_return_status,
3981 p_prefix =>l_debug_prefix,
3982 p_msg_level=>fnd_log.level_statement);
3983 END IF;
3984
3985
3986 ----------------------------------------------
3987 -- validate credit_balance_statements
3988 ----------------------------------------------
3989
3990 -- credit_balance_statements is mandatory field.
3991
3992 -- Since we are defaulting to default profile class if profile_class_id
3993 -- has not been passed in, the credit_balance_statements can be null or G_MISS during
3994 -- creation and it will default to credit_balance_statements of default profile class if
3995 -- it is NULL. We can have G_MISS checking to make it mandatory.
3996
3997 check_partial_mandatory_column (
3998 p_column => 'credit_balance_statements',
3999 p_column_value => p_customer_profile_rec.credit_balance_statements,
4000 x_return_status => x_return_status );
4001
4002
4003 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4004 hz_utility_v2pub.debug(p_message=>'credit_balance_statements is mandatory : it can be null but not G_MISS. ' ||
4005 'x_return_status = ' || x_return_status,
4006 p_prefix =>l_debug_prefix,
4007 p_msg_level=>fnd_log.level_statement);
4008 END IF;
4009
4010
4011 /****Logical APIs - validation not required****/
4012 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4013 -- credit_balance_statements is lookup code in lookup type YES/NO
4014 IF p_customer_profile_rec.credit_balance_statements IS NOT NULL AND
4015 p_customer_profile_rec.credit_balance_statements <> FND_API.G_MISS_CHAR
4016 THEN
4017 validate_lookup (
4018 p_column => 'credit_balance_statements',
4019 p_lookup_type => 'YES/NO',
4020 p_column_value => p_customer_profile_rec.credit_balance_statements,
4021 x_return_status => x_return_status );
4022
4023 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4024 hz_utility_v2pub.debug(p_message=>'credit_balance_statements is lookup code in lookup type YES/NO. ' ||
4025 'x_return_status = ' || x_return_status,
4026 p_prefix =>l_debug_prefix,
4027 p_msg_level=>fnd_log.level_statement);
4028 END IF;
4029
4030 END IF;
4031 END IF;
4032
4033 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4034 hz_utility_v2pub.debug(p_message=>'(+) after credit_balance_statements ... ' ||
4035 'x_return_status = ' || x_return_status,
4036 p_prefix =>l_debug_prefix,
4037 p_msg_level=>fnd_log.level_statement);
4038 END IF;
4039
4040
4041 ----------------------------------------------
4042 -- validate credit_hold
4043 ----------------------------------------------
4044
4045 -- credit_hold is mandatory field.
4046
4047 -- Since we are defaulting to default profile class if profile_class_id
4048 -- has not been passed in, the credit_hold can be null or G_MISS during
4049 -- creation and it will default to credit_hold of default profile class if
4050 -- it is NULL. We can have G_MISS checking to make it mandatory.
4051
4052 check_partial_mandatory_column (
4053 p_column => 'credit_hold',
4054 p_column_value => p_customer_profile_rec.credit_hold,
4055 x_return_status => x_return_status );
4056
4057 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4058 hz_utility_v2pub.debug(p_message=>'credit_hold is mandatory : it can be null but not G_MISS. ' ||
4059 'x_return_status = ' || x_return_status,
4060 p_prefix =>l_debug_prefix,
4061 p_msg_level=>fnd_log.level_statement);
4062 END IF;
4063
4064
4065 /****Logical APIs - validation not required****/
4066 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4067 -- credit_hold is lookup code in lookup type YES/NO
4068 IF p_customer_profile_rec.credit_hold IS NOT NULL AND
4069 p_customer_profile_rec.credit_hold <> FND_API.G_MISS_CHAR
4070 THEN
4071 validate_lookup (
4072 p_column => 'credit_hold',
4073 p_lookup_type => 'YES/NO',
4074 p_column_value => p_customer_profile_rec.credit_hold,
4075 x_return_status => x_return_status );
4076
4077 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4078 hz_utility_v2pub.debug(p_message=>'credit_hold is lookup code in lookup type YES/NO. ' ||
4079 'x_return_status = ' || x_return_status,
4080 p_prefix =>l_debug_prefix,
4081 p_msg_level=>fnd_log.level_statement);
4082 END IF;
4083
4084 END IF;
4085 END IF;
4086
4087 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4088 hz_utility_v2pub.debug(p_message=>'(+) after credit_hold ... ' ||
4089 'x_return_status = ' || x_return_status,
4090 p_prefix =>l_debug_prefix,
4091 p_msg_level=>fnd_log.level_statement);
4092 END IF;
4093
4094
4095 --------------------------------------
4096 -- validate created_by_module
4097 --------------------------------------
4098
4099 validate_created_by_module(
4100 p_create_update_flag => p_create_update_flag,
4101 p_created_by_module => p_customer_profile_rec.created_by_module,
4102 p_old_created_by_module => l_created_by_module,
4103 x_return_status => x_return_status);
4104
4105 --------------------------------------
4106 -- validate application_id
4107 --------------------------------------
4108
4109 validate_application_id(
4110 p_create_update_flag => p_create_update_flag,
4111 p_application_id => p_customer_profile_rec.application_id,
4112 p_old_application_id => l_application_id,
4113 x_return_status => x_return_status);
4114
4115 ------------------------------------------
4116 ----*** Select fields to validate ***----
4117 ------------------------------------------
4118 IF p_customer_profile_rec.profile_class_id IS NOT NULL AND
4119 p_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM
4120 THEN
4121
4122 SELECT * INTO l_profile_class_rec
4123 FROM HZ_CUST_PROFILE_CLASSES
4124 WHERE PROFILE_CLASS_ID = p_customer_profile_rec.profile_class_id;
4125
4126 END IF;
4127
4128 ------------------------------------------
4129 ---*** Account Status Validation ***---
4130 ------------------------------------------
4131 IF p_customer_profile_rec.account_status IS NOT NULL AND
4132 p_customer_profile_rec.account_status <> FND_API.G_MISS_CHAR
4133 AND ( p_create_update_flag = 'C' OR
4134 ( p_create_update_flag = 'U' AND
4135 p_customer_profile_rec.account_status <> NVL( l_account_status, FND_API.G_MISS_CHAR ) ) )
4136 THEN
4137 validate_lookup (
4138 p_column => 'account_status',
4139 p_lookup_type => 'ACCOUNT_STATUS',
4140 p_column_value => p_customer_profile_rec.account_status,
4141 x_return_status => x_return_status );
4142
4143 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4144 hz_utility_v2pub.debug(p_message=>'account_status is lookup code in lookup type ACCOUNT_STATUS.' ||
4145 'x_return_status = ' || x_return_status,
4146 p_prefix =>l_debug_prefix,
4147 p_msg_level=>fnd_log.level_statement);
4148 END IF;
4149
4150 END IF;
4151
4152 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4153 hz_utility_v2pub.debug(p_message=>'(+) after validate account_status ... ' ||
4154 'x_return_status = ' || x_return_status,
4155 p_prefix =>l_debug_prefix,
4156 p_msg_level=>fnd_log.level_statement);
4157 END IF;
4158
4159
4160 ---------------------------------------
4161 ------***Tolerance Validation ***------
4162 ---------------------------------------
4163 IF p_customer_profile_rec.tolerance IS NOT NULL AND
4164 p_customer_profile_rec.tolerance <> FND_API.G_MISS_NUM
4165 AND ( p_create_update_flag = 'C' OR
4166 ( p_create_update_flag = 'U' AND
4167 p_customer_profile_rec.tolerance <> NVL( l_tolerance, FND_API.G_MISS_NUM ) ) )
4168 THEN
4169 IF p_customer_profile_rec.tolerance > 100 OR
4170 p_customer_profile_rec.tolerance < -100
4171 THEN
4172 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VALUE_BETWEEN' );
4173 FND_MESSAGE.SET_TOKEN( 'COLUMN','tolerance');
4174 FND_MESSAGE.SET_TOKEN( 'VALUE1', '-100' );
4175 FND_MESSAGE.SET_TOKEN( 'VALUE2', '100' );
4176 FND_MSG_PUB.ADD;
4177 x_return_status := FND_API.G_RET_STS_ERROR;
4178 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4179 hz_utility_v2pub.debug(p_message=>'Tolerance should be between -100 and 100 .' ||
4180 'x_return_status = ' || x_return_status,
4181 p_prefix =>l_debug_prefix,
4182 p_msg_level=>fnd_log.level_statement);
4183 END IF;
4184
4185 END IF;
4186 END IF;
4187
4188 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4189 hz_utility_v2pub.debug(p_message=>'(+) after validate tolerance ... ' ||
4190 'x_return_status = ' || x_return_status,
4191 p_prefix =>l_debug_prefix,
4192 p_msg_level=>fnd_log.level_statement);
4193 END IF;
4194
4195
4196 -------------------------------------------------
4197 ---*** Validating Percent_Collectable ***---
4198 -------------------------------------------------
4199 IF p_customer_profile_rec.percent_collectable IS NOT NULL AND
4200 p_customer_profile_rec.percent_collectable <> FND_API.G_MISS_NUM
4201 AND ( p_create_update_flag = 'C' OR
4202 ( p_create_update_flag = 'U' AND
4203 p_customer_profile_rec.percent_collectable <> NVL( l_percent_collectable, FND_API.G_MISS_NUM ) ) )
4204 THEN
4205 IF p_customer_profile_rec.percent_collectable > 100 OR
4206 p_customer_profile_rec.percent_collectable < 0
4207 THEN
4208 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VALUE_BETWEEN' );
4209 FND_MESSAGE.SET_TOKEN( 'COLUMN','percent_collectable');
4210 FND_MESSAGE.SET_TOKEN( 'VALUE1', '0' );
4211 FND_MESSAGE.SET_TOKEN( 'VALUE2', '100' );
4212 FND_MSG_PUB.ADD;
4213 x_return_status := FND_API.G_RET_STS_ERROR;
4214
4215 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4216 hz_utility_v2pub.debug(p_message=>'Percent_Collectable should be between 0 and 100 .' ||
4217 'x_return_status = ' || x_return_status,
4218 p_prefix =>l_debug_prefix,
4219 p_msg_level=>fnd_log.level_statement);
4220 END IF;
4221
4222 END IF;
4223 END IF;
4224
4225 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4226 hz_utility_v2pub.debug(p_message=>'(+) after validate percent_collectable ... ' ||
4227 'x_return_status = ' || x_return_status,
4228 p_prefix =>l_debug_prefix,
4229 p_msg_level=>fnd_log.level_statement);
4230 END IF;
4231
4232
4233 -----------------------------------------
4234 ---*** Validating Override_Terms ***---
4235 -----------------------------------------
4236 -- override_terms is lookup code in lookup type YES/NO
4237 IF p_customer_profile_rec.override_terms IS NOT NULL AND
4238 p_customer_profile_rec.override_terms <> FND_API.G_MISS_CHAR
4239 AND ( p_create_update_flag = 'C' OR
4240 ( p_create_update_flag = 'U' AND
4241 p_customer_profile_rec.override_terms <> NVL( l_override_terms, FND_API.G_MISS_CHAR) ) )
4242 THEN
4243 validate_lookup (
4244 p_column => 'override_terms',
4245 p_lookup_type => 'YES/NO',
4246 p_column_value => p_customer_profile_rec.override_terms,
4247 x_return_status => x_return_status );
4248
4249
4250 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4251 hz_utility_v2pub.debug(p_message=>'override_terms is lookup code in lookup type YES/NO. ' ||
4252 'x_return_status = ' || x_return_status,
4253 p_prefix =>l_debug_prefix,
4254 p_msg_level=>fnd_log.level_statement);
4255 END IF;
4256
4257 END IF;
4258
4259 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4260 hz_utility_v2pub.debug(p_message=>'(+) after override_terms ... ' ||
4261 'x_return_status = ' || x_return_status,
4262 p_prefix =>l_debug_prefix,
4263 p_msg_level=>fnd_log.level_statement);
4264 END IF;
4265
4266
4267 ----------------------------------------------
4268 ---***Validating lockbox_matching_option***---
4269 ----------------------------------------------
4270 IF p_customer_profile_rec.lockbox_matching_option IS NOT NULL AND
4271 p_customer_profile_rec.lockbox_matching_option <> FND_API.G_MISS_CHAR
4272 AND ( p_create_update_flag = 'C' OR
4273 ( p_create_update_flag = 'U' AND
4274 p_customer_profile_rec.lockbox_matching_option <> NVL( l_lockbox_matching_option, FND_API.G_MISS_CHAR) ) )
4275 THEN
4276 validate_lookup (
4277 p_column => 'lockbox_matching_option',
4278 p_lookup_type => 'ARLPLB_MATCHING_OPTION',
4279 p_column_value => p_customer_profile_rec.lockbox_matching_option,
4280 x_return_status => x_return_status );
4281
4282 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4283 hz_utility_v2pub.debug(p_message=>'lockbox_matching_option is lookup code in lookup type
4284 ARLPLB_MATCHING_OPTION.' ||'x_return_status = ' ||
4285 x_return_status,
4286 p_prefix =>l_debug_prefix,
4287 p_msg_level=>fnd_log.level_statement);
4288 END IF;
4289
4290 END IF;
4291
4292 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4293 hz_utility_v2pub.debug(p_message=>'(+) after validate lockbox_matching_option ... ' ||
4294 'x_return_status = ' || x_return_status,
4295 p_prefix =>l_debug_prefix,
4296 p_msg_level=>fnd_log.level_statement);
4297 END IF;
4298
4299
4300 --------------------------------------------
4301 --*** Validating autocash_hierarchy_id***---
4302 --------------------------------------------
4303 IF p_customer_profile_rec.autocash_hierarchy_id IS NOT NULL AND
4304 p_customer_profile_rec.autocash_hierarchy_id <> FND_API.G_MISS_NUM
4305 AND ( p_create_update_flag = 'C' OR
4306 ( p_create_update_flag = 'U' AND
4307 p_customer_profile_rec.autocash_hierarchy_id <> NVL( l_autocash_hierarchy_id, FND_API.G_MISS_NUM) ) )
4308 THEN
4309 check_auto_hierid_fk (
4310 p_column => 'autocash_hierarchy_id',
4311 p_column_value => p_customer_profile_rec.autocash_hierarchy_id,
4312 x_return_status => x_return_status );
4313
4314 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4315 hz_utility_v2pub.debug(p_message=>'autocash_hierarchy_id is foreign key to
4316 ar_autocash_hierarchies. ' || 'x_return_status = ' ||
4317 x_return_status,
4318 p_prefix =>l_debug_prefix,
4319 p_msg_level=>fnd_log.level_statement);
4320 END IF;
4321
4322 END IF;
4323
4324 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4325 hz_utility_v2pub.debug(p_message=>'(+) after validate autocash_hierarchy_id ... ' ||
4326 'x_return_status = ' || x_return_status,
4327 p_prefix =>l_debug_prefix,
4328 p_msg_level=>fnd_log.level_statement);
4329 END IF;
4330
4331
4332 ---------------------------------------------------------
4333 -----*** Validating autocash_hierarchy_id_for_adr***-----
4334 ---------------------------------------------------------
4335 IF p_customer_profile_rec.autocash_hierarchy_id_for_adr IS NOT NULL AND
4336 p_customer_profile_rec.autocash_hierarchy_id_for_adr <> FND_API.G_MISS_NUM
4337 AND ( p_create_update_flag = 'C' OR
4338 ( p_create_update_flag = 'U' AND
4339 p_customer_profile_rec.autocash_hierarchy_id_for_adr<> NVL( l_autocash_hierarchy_id_for_ad, FND_API.G_MISS_NUM) ) )
4340 THEN
4341 check_auto_hierid_fk (
4342 p_column => 'autocash_hierarchy_id_for_adr',
4343 p_column_value => p_customer_profile_rec.autocash_hierarchy_id_for_adr,
4344 x_return_status=> x_return_status );
4345
4346 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4347 hz_utility_v2pub.debug(p_message=>'autocash_hierarchy_id_for_adr is foreign key to
4348 ar_autocash_hierarchies . ' || 'x_return_status = ' ||
4349 x_return_status,
4350 p_prefix =>l_debug_prefix,
4351 p_msg_level=>fnd_log.level_statement);
4352 END IF;
4353
4354 END IF;
4355
4356 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4357 hz_utility_v2pub.debug(p_message=>'(+) after validate autocash_hierarchy_id_for_adr ... ' ||
4358 'x_return_status = ' || x_return_status,
4359 p_prefix =>l_debug_prefix,
4360 p_msg_level=>fnd_log.level_statement);
4361 END IF;
4362
4363 --------------------------------------------
4364 ---*** Validating statement_cycle_id ***---
4365 --------------------------------------------
4366 IF p_customer_profile_rec.statement_cycle_id IS NOT NULL AND
4367 p_customer_profile_rec.statement_cycle_id <> FND_API.G_MISS_NUM
4368 AND ( p_create_update_flag = 'C' OR
4369 ( p_create_update_flag = 'U' AND
4370 p_customer_profile_rec.statement_cycle_id <> NVL( l_statement_cycle_id, FND_API.G_MISS_NUM) ) )
4371 THEN
4372 check_stat_cycid_fk (
4373 p_column => 'statement_cycle_id',
4374 p_column_value => p_customer_profile_rec.statement_cycle_id,
4375 x_return_status => x_return_status );
4376
4377 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4378 hz_utility_v2pub.debug(p_message=>'statement_cycle_id is foreign key to
4379 ar_statement_cycles . ' || 'x_return_status = ' ||
4380 x_return_status,
4381 p_prefix =>l_debug_prefix,
4382 p_msg_level=>fnd_log.level_statement);
4383 END IF;
4384
4385 END IF;
4386
4387 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4388 hz_utility_v2pub.debug(p_message=>'(+) after validate statement_cycle_id ... ' ||
4389 'x_return_status = ' || x_return_status,
4390 p_prefix =>l_debug_prefix,
4391 p_msg_level=>fnd_log.level_statement);
4392 END IF;
4393
4394
4395 ---------------------------------------------
4396 --------------*** Clearing Days***-----------
4397 ---------------------------------------------
4398 IF p_customer_profile_rec.clearing_days IS NOT NULL AND
4399 p_customer_profile_rec.clearing_days <> FND_API.G_MISS_NUM
4400 AND ( p_create_update_flag = 'C' OR
4401 ( p_create_update_flag = 'U' AND
4402 p_customer_profile_rec.clearing_days <> NVL( l_clearing_days, FND_API.G_MISS_NUM) ) )
4403 THEN
4404 -- Error
4405 check_positive_value (
4406 p_column => 'clearing_days',
4407 p_column_value => p_customer_profile_rec.clearing_days,
4408 x_return_status => x_return_status );
4409
4410 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4411 hz_utility_v2pub.debug(p_message=>'clearing_days should be > 0.' ||'x_return_status = ' ||
4412 x_return_status,
4413 p_prefix =>l_debug_prefix,
4414 p_msg_level=>fnd_log.level_statement);
4415 END IF;
4416
4417
4418 END IF;
4419 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4420 hz_utility_v2pub.debug(p_message=>'(+) after validate clearing_days... ' ||
4421 'x_return_status = ' || x_return_status,
4422 p_prefix =>l_debug_prefix,
4423 p_msg_level=>fnd_log.level_statement);
4424 END IF;
4425
4426 ---------------------------------------------
4427 ------------*** Payment_grace_days***--------
4428 ---------------------------------------------
4429 IF p_customer_profile_rec.payment_grace_days IS NOT NULL AND
4430 p_customer_profile_rec.payment_grace_days <> FND_API.G_MISS_NUM
4431 AND ( p_create_update_flag = 'C' OR
4432 ( p_create_update_flag = 'U' AND
4433 p_customer_profile_rec.payment_grace_days <> NVL( l_payment_grace_days, FND_API.G_MISS_NUM) ) )
4434 THEN
4435 check_positive_value (
4436 p_column => 'payment_grace_days',
4437 p_column_value => p_customer_profile_rec.payment_grace_days,
4438 x_return_status => x_return_status );
4439
4440 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4441 hz_utility_v2pub.debug(p_message=>'payment_grace_days should be > 0.' ||'x_return_status = ' ||
4442 x_return_status,
4443 p_prefix =>l_debug_prefix,
4444 p_msg_level=>fnd_log.level_statement);
4445 END IF;
4446
4447 END IF;
4448
4449 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4453 p_msg_level=>fnd_log.level_statement);
4450 hz_utility_v2pub.debug(p_message=>'(+) after validate payment_grace_days... ' ||
4451 'x_return_status = ' || x_return_status,
4452 p_prefix =>l_debug_prefix,
4454 END IF;
4455
4456
4457 ---------------------------------------------
4458 -----------***Interest_period_day***---------
4459 ---------------------------------------------
4460 IF p_customer_profile_rec.interest_period_days IS NOT NULL AND
4461 p_customer_profile_rec.interest_period_days <> FND_API.G_MISS_NUM
4462 THEN
4463 check_greater_than_zero (
4464 p_column => 'interest_period_days',
4465 p_column_value => p_customer_profile_rec.interest_period_days,
4466 x_return_status => x_return_status );
4467
4468 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4469 hz_utility_v2pub.debug(p_message=>'interest_period_days should be > 0.' ||'x_return_status = ' ||
4470 x_return_status,
4471 p_prefix =>l_debug_prefix,
4472 p_msg_level=>fnd_log.level_statement);
4473 END IF;
4474
4475 END IF;
4476
4477 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4478 hz_utility_v2pub.debug(p_message=>'(+) after validate interest_period_days... ' ||
4479 'x_return_status = ' || x_return_status,
4480 p_prefix =>l_debug_prefix,
4481 p_msg_level=>fnd_log.level_statement);
4482 END IF;
4483
4484
4485 --------------------------------------------
4486 ---***Validating dunning_letter_set_id***---
4487 --------------------------------------------
4488 IF p_customer_profile_rec.dunning_letter_set_id IS NOT NULL AND
4489 p_customer_profile_rec.dunning_letter_set_id <> FND_API.G_MISS_NUM
4490 THEN
4491 /* Bug 5095478. DUNNING_LETTER_SET_ID is obsoleted.
4492 This validation is changed to throw an error if user passes the
4493 DUNNING_LETTER_SET_ID
4494
4495 check_dunning_letid_fk (
4496 p_column => 'dunning_letter_set_id',
4497 p_column_value => p_customer_profile_rec.dunning_letter_set_id,
4498 x_return_status => x_return_status );
4499
4500 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4501 hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id is foreign key to
4502 ar_dunning_letter_sets . ' || 'x_return_status = ' ||
4503 x_return_status,
4504 p_prefix =>l_debug_prefix,
4505 p_msg_level=>fnd_log.level_statement);
4506 END IF; */
4507 IF fnd_profile.value('HZ_API_ERR_ON_OBSOLETE_COLUMN')='Y'
4508 THEN
4509 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_OBSOLETE_COLUMN');
4510 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'dunning_letter_set_id' );
4511 FND_MSG_PUB.ADD;
4512 x_return_status := FND_API.G_RET_STS_ERROR;
4513 END IF;
4514
4515 END IF;
4516
4517 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4518 hz_utility_v2pub.debug(p_message=>'(+) after validate dunning_letter_set_id ... ' ||
4519 'x_return_status = ' || x_return_status,
4520 p_prefix =>l_debug_prefix,
4521 p_msg_level=>fnd_log.level_statement);
4522 END IF;
4523
4524 --------------------------------------------
4525 ---*** Validating tax_printing_option ***---
4526 --------------------------------------------
4527 IF p_customer_profile_rec.tax_printing_option IS NOT NULL AND
4528 p_customer_profile_rec.tax_printing_option <> FND_API.G_MISS_CHAR
4529 AND ( p_create_update_flag = 'C' OR
4530 ( p_create_update_flag = 'U' AND
4531 p_customer_profile_rec.tax_printing_option <> NVL( l_tax_printing_option, FND_API.G_MISS_CHAR ) ))
4532 THEN
4533 validate_lookup (
4534 p_column => 'tax_printing_option',
4535 p_lookup_type => 'TAX_PRINTING_OPTION',
4536 p_column_value => p_customer_profile_rec.tax_printing_option,
4537 x_return_status => x_return_status );
4538
4539 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4540 hz_utility_v2pub.debug(p_message=>'tax_printing_option is lookup code in lookup type
4541 TAX_PRINTING_OPTION.' ||'x_return_status = ' ||
4542 x_return_status,
4543 p_prefix =>l_debug_prefix,
4544 p_msg_level=>fnd_log.level_statement);
4545 END IF;
4546
4547 END IF;
4548
4549 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4550 hz_utility_v2pub.debug(p_message=>'(+) after validate tax_printing_option ... ' ||
4551 'x_return_status = ' || x_return_status,
4552 p_prefix =>l_debug_prefix,
4553 p_msg_level=>fnd_log.level_statement);
4554 END IF;
4555
4556
4557 ----------------------------------------
4558 ----*** Validating standard_terms***---
4559 ----------------------------------------
4560 IF p_customer_profile_rec.standard_terms IS NOT NULL AND
4561 p_customer_profile_rec.standard_terms <> FND_API.G_MISS_NUM
4562 AND ( p_create_update_flag = 'C' OR
4563 ( p_create_update_flag = 'U' AND
4564 p_customer_profile_rec.standard_terms <> NVL( l_standard_terms, FND_API.G_MISS_NUM ) ))
4565 THEN
4566 l_ckeck_acc_bfb_enabled := 'N';
4567 /* Commented the below code and added new set of validations below
4568 for enhancement # 5529044
4569 -- When Updating a BFB enabled site use profile which has a null payment term id
4570 -- with a new payment term id check that the payment term id is a BFB payment term
4571 -- if BFB is enabled for the account profile and check that the payment term is
4572 -- a non BFB payment term if BFB is disabled for the Account profile.
4573 if (p_customer_profile_rec.site_use_id is NOT NULL and p_customer_profile_rec.site_use_id <> FND_API.G_MISS_NUM
4574 and p_create_update_flag = 'U' )then
4575 l_ckeck_acc_bfb_enabled := 'Y';
4576 ll_cons_inv_flag := 'N';
4577 begin
4578 select cons_inv_flag
4579 into ll_cons_inv_flag
4580 from hz_customer_profiles
4581 where cust_account_id = p_customer_profile_rec.cust_account_id
4582 and site_use_id is NULL;
4583 exception when others then
4584 ll_cons_inv_flag := 'N';
4585 end;
4586 else
4587 ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4588 end if;
4589 */
4590
4591 ----------------
4592 -- Below validatins are added for enhancement # 5529044
4593 -- If BFB is enabled, check standard_terms is a BFB standard term
4594 -- If BFB is not enabled, any valid standard_terms ok irrespective of BFB
4595 -- For site profile, if Account level is BFB disabled,
4596 -- validate any valid standard_terms, irrespective of site level BFB
4597 if p_customer_profile_rec.site_use_id is NOT NULL then -- Site profile
4598 ll_cons_inv_flag := 'N';
4599 begin
4600 select cons_inv_flag
4601 into ll_cons_inv_flag
4602 from hz_customer_profiles
4603 where cust_account_id = p_customer_profile_rec.cust_account_id
4604 and site_use_id is NULL;
4605 exception when others then
4606 ll_cons_inv_flag := 'N';
4607 end;
4608 if ll_cons_inv_flag = 'Y' then
4609 ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4610 else
4611 l_ckeck_acc_bfb_enabled := 'Y';
4612 end if;
4613 else -- Account profile
4614 ll_cons_inv_flag := p_customer_profile_rec.cons_inv_flag;
4615 end if;
4616 ----------------
4617
4618 check_standard_terms_fk (
4619 p_column => 'standard_terms',
4620 p_column_value => p_customer_profile_rec.standard_terms,
4621 p_cons_inv_flag => ll_cons_inv_flag,
4622 p_ckeck_acc_bfb_enabled => l_ckeck_acc_bfb_enabled,
4623 x_return_status => x_return_status );
4624
4625 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4626 hz_utility_v2pub.debug(p_message=>'standard_terms is foreign key to ra_terms . ' ||
4627 'x_return_status = ' || x_return_status,
4628 p_prefix =>l_debug_prefix,
4629 p_msg_level=>fnd_log.level_statement);
4630 END IF;
4631
4632 END IF;
4633
4634 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4635 hz_utility_v2pub.debug(p_message=>'(+) after validate standard_terms ... ' ||
4636 'x_return_status = ' || x_return_status,
4637 p_prefix =>l_debug_prefix,
4638 p_msg_level=>fnd_log.level_statement);
4639 END IF;
4640
4641
4642 -------------------------------------------
4643 ---*** Validating grouping_rule_id ***---
4644 -------------------------------------------
4645 IF p_customer_profile_rec.grouping_rule_id IS NOT NULL AND
4646 p_customer_profile_rec.grouping_rule_id <> FND_API.G_MISS_NUM
4647 AND ( p_create_update_flag = 'C' OR
4648 ( p_create_update_flag = 'U' AND
4649 p_customer_profile_rec.grouping_rule_id <> NVL( l_grouping_rule_id, FND_API.G_MISS_NUM ) ))
4650
4651 THEN
4652 check_grouping_ruleid_fk (
4653 p_column => 'grouping_rule_id',
4654 p_column_value => p_customer_profile_rec.grouping_rule_id,
4655 x_return_status => x_return_status );
4656
4657 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4658 hz_utility_v2pub.debug(p_message=>'grouping_rule_id is foreign key to ra_grouping_rules . ' ||
4659 'x_return_status = ' || x_return_status,
4660 p_prefix =>l_debug_prefix,
4661 p_msg_level=>fnd_log.level_statement);
4662 END IF;
4663
4664 END IF;
4665
4666 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4667 hz_utility_v2pub.debug(p_message=>'(+) after validate grouping_rule_id ... ' ||
4668 'x_return_status = ' || x_return_status,
4669 p_prefix =>l_debug_prefix,
4670 p_msg_level=>fnd_log.level_statement);
4671 END IF;
4672
4673 -------------------------------------------------
4674 ------------*** Discount_grace_days **---------------
4675 -------------------------------------------------
4676 IF v_customer_profile_rec.discount_grace_days IS NOT NULL AND
4677 v_customer_profile_rec.discount_grace_days <> FND_API.G_MISS_NUM
4678 AND ( p_create_update_flag = 'C' OR
4679 ( p_create_update_flag = 'U' AND
4680 p_customer_profile_rec.discount_grace_days <> NVL( l_discount_grace_days, FND_API.G_MISS_NUM ) ))
4681 THEN
4682 check_positive_value (
4683 p_column => 'discount_grace_days',
4684 p_column_value => v_customer_profile_rec.discount_grace_days,
4685 x_return_status => x_return_status );
4686
4687 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4688 hz_utility_v2pub.debug(p_message=>'discount_grace_days should be > 0.' ||'x_return_status = ' ||
4689 x_return_status,
4690 p_prefix =>l_debug_prefix,
4691 p_msg_level=>fnd_log.level_statement);
4692 END IF;
4693
4694 END IF;
4695
4696 IF p_create_update_flag = 'C' OR
4697 (p_create_update_flag = 'U' AND
4698 v_customer_profile_rec.profile_class_id IS NOT NULL AND
4699 v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM)
4700 THEN
4701
4702 IF v_customer_profile_rec.discount_terms IS NULL THEN
4703 v_customer_profile_rec.discount_terms :=
4704 l_profile_class_rec.discount_terms;
4705 END IF;
4706
4707 IF v_customer_profile_rec.discount_grace_days IS NULL AND
4708 v_customer_profile_rec.discount_terms = 'Y'
4709 THEN
4710
4711 v_customer_profile_rec.discount_grace_days :=
4712 l_profile_class_rec.discount_grace_days;
4713 END IF;
4714 END IF;
4715
4716 IF p_create_update_flag = 'U' AND
4717 v_customer_profile_rec.profile_class_id IS NULL THEN
4718 IF v_customer_profile_rec.discount_terms IS NULL
4719 THEN
4720 v_customer_profile_rec.discount_terms := l_discount_terms;
4721 END IF;
4722 IF v_customer_profile_rec.discount_grace_days IS NULL THEN
4723 v_customer_profile_rec.discount_grace_days := l_discount_grace_days;
4724 END IF;
4725 END IF;
4726
4727
4728 IF v_customer_profile_rec.discount_terms = 'N' OR
4729 v_customer_profile_rec.discount_terms is NULL
4730 THEN
4731 IF v_customer_profile_rec.discount_grace_days >= 0 AND
4732 v_customer_profile_rec.discount_grace_days <> FND_API.G_MISS_NUM
4733 THEN
4734 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4735 FND_MESSAGE.SET_TOKEN( 'COLUMN1', 'discount_terms' );
4736 FND_MESSAGE.SET_TOKEN( 'VALUE1', 'N' );
4737 FND_MESSAGE.SET_TOKEN( 'COLUMN2', 'discount_grace_days');
4738 FND_MESSAGE.SET_TOKEN( 'VALUE2', 'NULL' );
4739 FND_MSG_PUB.ADD;
4740 x_return_status := FND_API.G_RET_STS_ERROR;
4741
4742 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4743 hz_utility_v2pub.debug(p_message=>'discount_grace_days should be null when discount_terms is N.' ||
4744 'x_return_status = ' || x_return_status,
4745 p_prefix =>l_debug_prefix,
4746 p_msg_level=>fnd_log.level_statement);
4747 END IF;
4748
4749 END IF;
4750 END IF;
4751
4752 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4753 hz_utility_v2pub.debug(p_message=>'(+) after validate discount_terms ... ' ||
4754 'x_return_status = ' || x_return_status,
4755 p_prefix =>l_debug_prefix,
4756 p_msg_level=>fnd_log.level_statement);
4757 END IF;
4758
4759
4760 -----------------------------------------------------------
4761 ------------*** dunning_letters ***------------------------
4762 ----------------------------------------------------------
4763
4764 IF p_create_update_flag = 'C' OR
4765 (p_create_update_flag = 'U' AND
4766 v_customer_profile_rec.profile_class_id IS NOT NULL AND
4767 v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM)
4768 THEN
4769 IF v_customer_profile_rec.dunning_letters IS NULL THEN
4770 v_customer_profile_rec.dunning_letters :=
4771 l_profile_class_rec.dunning_letters;
4772 END IF;
4773 /* Bug Fix:2884220 Added "v_customer_profile_rec.dunning_letters='Y'" Condition
4774 when initializing dunning_letter_set_id from hz_cust_profile_classes.
4775 */
4776 /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4777 IF v_customer_profile_rec.dunning_letters='Y' and
4778 v_customer_profile_rec.dunning_letter_set_id IS NULL THEN
4779 v_customer_profile_rec.dunning_letter_set_id :=
4780 l_profile_class_rec.dunning_letter_set_id;
4781 END IF;*/
4782 END IF;
4783
4784 IF p_create_update_flag = 'U' AND
4785 v_customer_profile_rec.profile_class_id IS NULL
4786 THEN
4787 IF v_customer_profile_rec.dunning_letters IS NULL THEN
4788 v_customer_profile_rec.dunning_letters := l_dunning_letters;
4789 END IF;
4790 /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4791 IF v_customer_profile_rec.dunning_letter_set_id IS NULL THEN
4792 v_customer_profile_rec.dunning_letter_set_id := l_dunning_letter_set_id;
4793 END IF; */
4794 END IF;
4795
4796 /*Bug 5095478 the column dunning_letter_set_id is obsolete in R12
4797 IF v_customer_profile_rec.dunning_letters = 'Y'
4798 THEN
4799 IF v_customer_profile_rec.dunning_letter_set_id = FND_API.G_MISS_NUM OR
4800 v_customer_profile_rec.dunning_letter_set_id IS NULL
4801 THEN
4802 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4803 FND_MESSAGE.SET_TOKEN('COLUMN1', 'dunning_letters');
4804 FND_MESSAGE.SET_TOKEN('VALUE1', 'Y');
4805 FND_MESSAGE.SET_TOKEN('COLUMN2','dunning_letter_set_id');
4806 FND_MSG_PUB.ADD;
4807 x_return_status := FND_API.G_RET_STS_ERROR;
4808
4809 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4810 hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id cannot be NULL when dunning_letters is Y.' ||
4811 'x_return_status = ' || x_return_status,
4812 p_prefix =>l_debug_prefix,
4813 p_msg_level=>fnd_log.level_statement);
4814 END IF;
4815
4816 END IF;
4817 END IF;
4818
4819 IF v_customer_profile_rec.dunning_letters = 'N' OR
4820 v_customer_profile_rec.dunning_letters IS NULL
4821 THEN
4822 IF v_customer_profile_rec.dunning_letter_set_id >= 0 AND
4823 v_customer_profile_rec.dunning_letter_set_id <> FND_API.G_MISS_NUM
4824 THEN
4825 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4826 FND_MESSAGE.SET_TOKEN('COLUMN1','dunning_letters');
4827 FND_MESSAGE.SET_TOKEN('VALUE1','N');
4828 FND_MESSAGE.SET_TOKEN('COLUMN2','dunning_letter_set_id');
4829 FND_MESSAGE.SET_TOKEN('VALUE2','NULL');
4830 FND_MSG_PUB.ADD;
4831 x_return_status := FND_API.G_RET_STS_ERROR;
4832
4833 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4834 hz_utility_v2pub.debug(p_message=>'dunning_letter_set_id should be NULL when dunning_letters is N.' ||
4835 'x_return_status = ' || x_return_status,
4836 p_prefix =>l_debug_prefix,
4837 p_msg_level=>fnd_log.level_statement);
4838 END IF;
4839
4840 END IF;
4841 END IF;*/
4842 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4843 hz_utility_v2pub.debug(p_message=>'(+) after validate duning_letters ... ' ||
4844 'x_return_status = ' || x_return_status,
4845 p_prefix =>l_debug_prefix,
4846 p_msg_level=>fnd_log.level_statement);
4847 END IF;
4848
4849
4850 ------------------------------------------------
4851 ---------*** send_statements ***----------------
4852 ------------------------------------------------
4853
4854 IF p_create_update_flag = 'C' OR
4855 ( p_create_update_flag = 'U' AND
4856 v_customer_profile_rec.profile_class_id is not null AND
4857 v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM )
4858 THEN
4859
4860 IF v_customer_profile_rec.send_statements IS NULL THEN
4861 v_customer_profile_rec.send_statements :=
4862 l_profile_class_rec.statements;
4863 END IF;
4864 /* Bug Fix:2884220 Added "v_customer_profile_rec.send_statements='Y'" Condition
4865 when initializing statement_cycle_id from hz_cust_profile_classes.
4866 */
4867 IF v_customer_profile_rec.send_statements='Y' and
4868 v_customer_profile_rec.statement_cycle_id IS NULL THEN
4869 v_customer_profile_rec.statement_cycle_id :=
4870 l_profile_class_rec.statement_cycle_id;
4871 END IF;
4872 IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4873 v_customer_profile_rec.credit_balance_statements :=
4874 l_profile_class_rec.credit_balance_statements;
4875 END IF;
4876
4877 -- Bug 5400422 : default from profile class
4878 IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
4879 v_customer_profile_rec.late_charge_calculation_trx :=
4880 l_profile_class_rec.late_charge_calculation_trx;
4881 END IF;
4882
4883 END IF;
4884
4885 IF p_create_update_flag = 'U' AND
4886 v_customer_profile_rec.profile_class_id is null
4887 THEN
4888 IF v_customer_profile_rec.send_statements IS NULL THEN
4889 v_customer_profile_rec.send_statements := l_send_statements;
4890 END IF;
4891 IF v_customer_profile_rec.statement_cycle_id IS NULL THEN
4892 v_customer_profile_rec.statement_cycle_id := l_statement_cycle_id;
4893 END IF;
4894 IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4895 v_customer_profile_rec.credit_balance_statements := l_credit_balance_statements;
4896 END IF;
4897 END IF;
4898
4899 IF v_customer_profile_rec.send_statements = 'Y' THEN
4900 IF v_customer_profile_rec.statement_cycle_id = FND_API.G_MISS_NUM OR
4901 v_customer_profile_rec.statement_cycle_id IS NULL
4902 THEN
4903 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4904 FND_MESSAGE.SET_TOKEN( 'COLUMN1','send_statements');
4905 FND_MESSAGE.SET_TOKEN( 'VALUE1','Y');
4906 FND_MESSAGE.SET_TOKEN( 'COLUMN2','statement_cycle_id');
4907 FND_MSG_PUB.ADD;
4908 x_return_status := FND_API.G_RET_STS_ERROR;
4909
4910 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4911 hz_utility_v2pub.debug(p_message=>'statement_cycle_id cannot be NULL when send_statements
4912 is Y.' || 'x_return_status = ' || x_return_status,
4913 p_prefix =>l_debug_prefix,
4914 p_msg_level=>fnd_log.level_statement);
4915 END IF;
4916
4917 END IF;
4918 IF v_customer_profile_rec.credit_balance_statements IS NULL THEN
4919 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
4920 FND_MESSAGE.SET_TOKEN( 'COLUMN1','send_statements');
4921 FND_MESSAGE.SET_TOKEN( 'VALUE1','Y');
4922 FND_MESSAGE.SET_TOKEN( 'COLUMN2','credit_balance_statements');
4923 FND_MSG_PUB.ADD;
4924 x_return_status := FND_API.G_RET_STS_ERROR;
4925
4926 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4927 hz_utility_v2pub.debug(p_message=>'credit_balance_statements cannot be NULL when
4928 send_statements is Y .' || 'x_return_status = ' ||
4929 x_return_status,
4930 p_prefix =>l_debug_prefix,
4931 p_msg_level=>fnd_log.level_statement);
4932 END IF;
4933
4934 END IF;
4935 END IF;
4936
4937 IF v_customer_profile_rec.send_statements = 'N' OR
4938 v_customer_profile_rec.send_statements IS NULL
4939 THEN
4940 IF v_customer_profile_rec.statement_cycle_id >= 0 AND
4941 v_customer_profile_rec.statement_cycle_id <> FND_API.G_MISS_NUM
4942 THEN
4943 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4944 FND_MESSAGE.SET_TOKEN('COLUMN1', 'send_statements');
4945 FND_MESSAGE.SET_TOKEN('VALUE1', 'N');
4946 FND_MESSAGE.SET_TOKEN('COLUMN2','statement_cycle_id');
4947 FND_MESSAGE.SET_TOKEN('VALUE2', 'NULL');
4948 FND_MSG_PUB.ADD;
4949 x_return_status := FND_API.G_RET_STS_ERROR;
4950
4951 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4952 hz_utility_v2pub.debug(p_message=>'statement_cycle_id should be NULL when send_statements
4953 is N .' || 'x_return_status = ' || x_return_status,
4954 p_prefix =>l_debug_prefix,
4955 p_msg_level=>fnd_log.level_statement);
4956 END IF;
4957
4958 END IF;
4959 IF v_customer_profile_rec.credit_balance_statements <> 'N' AND
4960 v_customer_profile_rec.credit_balance_statements IS NOT NULL
4961 THEN
4962 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
4963 FND_MESSAGE.SET_TOKEN('COLUMN1','send_statements');
4964 FND_MESSAGE.SET_TOKEN('VALUE1','N');
4965 FND_MESSAGE.SET_TOKEN('COLUMN2','credit_balance_statements');
4966 FND_MESSAGE.SET_TOKEN('VALUE2','N');
4967 FND_MSG_PUB.ADD;
4968 x_return_status := FND_API.G_RET_STS_ERROR;
4969
4970 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4971 hz_utility_v2pub.debug(p_message=>'credit_balance_statements should be N when send_statements
4972 is N .' || 'x_return_status = ' || x_return_status,
4973 p_prefix =>l_debug_prefix,
4974 p_msg_level=>fnd_log.level_statement);
4975 END IF;
4976
4977 END IF;
4978 END IF;
4979
4980 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4981 hz_utility_v2pub.debug(p_message=>'(+) after validate send_statements ... ' ||
4982 'x_return_status = ' || x_return_status,
4983 p_prefix =>l_debug_prefix,
4984 p_msg_level=>fnd_log.level_statement);
4985 END IF;
4986
4987
4988
4989 --------------------------------------------------
4990 ------------*** interest_charges ***--------------
4991 --------------------------------------------------
4992
4993 IF p_create_update_flag = 'C' OR
4994 ( p_create_update_flag = 'U' AND
4995 v_customer_profile_rec.profile_class_id is not null AND
4996 v_customer_profile_rec.profile_class_id <> FND_API.G_MISS_NUM )
4997 THEN
4998
4999 IF v_customer_profile_rec.interest_charges IS NULL THEN
5000 v_customer_profile_rec.interest_charges :=
5001 l_profile_class_rec.interest_charges;
5002 END IF;
5003 /* Bug Fix:2884220 Added "v_customer_profile_rec.interest_charges='Y'" Condition
5004 when initializing interest_period_days from hz_cust_profile_classes.
5005 */
5006 IF v_customer_profile_rec.interest_charges='Y' and
5007 v_customer_profile_rec.interest_period_days IS NULL THEN
5008 v_customer_profile_rec.interest_period_days :=
5009 l_profile_class_rec.interest_period_days;
5010 END IF;
5011 IF v_customer_profile_rec.charge_on_finance_charge_flag IS NULL THEN
5012 v_customer_profile_rec.charge_on_finance_charge_flag :=
5013 l_profile_class_rec.charge_on_finance_charge_flag;
5014 END IF;
5015
5016 -- Bug 5400422 : Defalut from profile classes
5017 IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
5018 v_customer_profile_rec.late_charge_calculation_trx :=
5019 l_profile_class_rec.late_charge_calculation_trx;
5020 END IF;
5021
5022 END IF;
5023
5024 IF p_create_update_flag = 'U' AND
5025 v_customer_profile_rec.profile_class_id is null
5026 THEN
5027 IF v_customer_profile_rec.interest_charges IS NULL THEN
5028 v_customer_profile_rec.interest_charges := l_interest_charges;
5029 END IF;
5030 IF v_customer_profile_rec.interest_period_days IS NULL THEN
5031 v_customer_profile_rec.interest_period_days := l_interest_period_days;
5032 END IF;
5033 IF v_customer_profile_rec.charge_on_finance_charge_flag IS NULL THEN
5034 v_customer_profile_rec.charge_on_finance_charge_flag :=
5035 l_finance_charge_flag;
5036 END IF;
5037 -- Bug 5400422 : Defalut from existing record
5038 IF v_customer_profile_rec.late_charge_calculation_trx IS NULL THEN
5039 v_customer_profile_rec.late_charge_calculation_trx :=
5040 l_late_charge_calculation_trx;
5041 END IF;
5042
5043 END IF;
5044
5045 IF v_customer_profile_rec.interest_charges = 'Y' THEN
5046 -- Bug 5400422 : Validate only for few late_charge_calculation_trx
5047 IF v_customer_profile_rec.late_charge_calculation_trx IN
5048 ('LATE', 'OVERDUE_LATE', 'OVERDUE') THEN
5049 IF v_customer_profile_rec.interest_period_days = FND_API.G_MISS_NUM OR
5050 v_customer_profile_rec.interest_period_days IS NULL
5051 THEN
5052 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_INT_CHARGES_Y' );
5053 FND_MSG_PUB.ADD;
5054 x_return_status := FND_API.G_RET_STS_ERROR;
5055 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5056 hz_utility_v2pub.debug(p_message=>'interest_period_days cannot be NULL when interest_charges is Y.' || 'x_return_status = ' || x_return_status,
5057 p_prefix =>l_debug_prefix,
5058 p_msg_level=>fnd_log.level_statement);
5059 END IF;
5060
5061 END IF;
5062 END IF;
5063 /* Commented the mandatory check for 2125994.
5064 validate_mandatory (
5065 p_create_update_flag => p_create_update_flag,
5066 p_column => 'charge_on_finance_charge_flag',
5067 p_column_value => v_customer_profile_rec.charge_on_finance_charge_flag,
5068 x_return_status => x_return_status );
5069
5070
5071 IF G_DEBUG THEN
5072 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5073 'charge_on_finance_charge_flag is mandatory. ' ||
5074 'x_return_status = ' || x_return_status, l_debug_prefix );
5075 END IF;
5076 */
5077 END IF;
5078 /*
5079 -- This validation is removed for based on bug # 5190290
5080 -- Confirmed from AR team that, by removing this validation, there is no
5081 -- impact on AR setup forms and there is no impact on AR late charges calculation.
5082 IF v_customer_profile_rec.interest_charges = 'N' OR
5083 v_customer_profile_rec.interest_charges IS NULL
5084 THEN
5085 IF v_customer_profile_rec.interest_period_days >= 0 AND
5086 v_customer_profile_rec.interest_period_days <> FND_API.G_MISS_NUM
5087 THEN
5088 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5089 FND_MESSAGE.SET_TOKEN( 'COLUMN1','interest_charges');
5090 FND_MESSAGE.SET_TOKEN( 'VALUE1','N');
5091 FND_MESSAGE.SET_TOKEN( 'COLUMN2','interest_period_days');
5092 FND_MESSAGE.SET_TOKEN( 'VALUE2','NULL');
5093 FND_MSG_PUB.ADD;
5094 x_return_status := FND_API.G_RET_STS_ERROR;
5095
5096 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5097 hz_utility_v2pub.debug(p_message=>'Interest_period_days should be NULL when interest_charges
5098 is N .' || 'x_return_status = ' || x_return_status,
5099 p_prefix =>l_debug_prefix,
5100 p_msg_level=>fnd_log.level_statement);
5101 END IF;
5102
5103 END IF;
5104 IF v_customer_profile_rec.charge_on_finance_charge_flag = 'Y'
5105 THEN
5106 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_DEP_FIELDS' );
5107 FND_MESSAGE.SET_TOKEN( 'COLUMN1','interest_charges');
5108 FND_MESSAGE.SET_TOKEN( 'VALUE1','N');
5109 FND_MESSAGE.SET_TOKEN( 'COLUMN2','charge_on_finance_charge_flag');
5110 FND_MESSAGE.SET_TOKEN( 'VALUE2','N');
5111 FND_MSG_PUB.ADD;
5112 x_return_status := FND_API.G_RET_STS_ERROR;
5113
5114 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5115 hz_utility_v2pub.debug(p_message=>'charge_on_finance_charge_flag cannot be Y when
5116 interest_charges is N .' || 'x_return_status ='
5117 || x_return_status,
5118 p_prefix =>l_debug_prefix,
5119 p_msg_level=>fnd_log.level_statement);
5120 END IF;
5121
5122 END IF;
5123 END IF;
5124 */
5125 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5126 hz_utility_v2pub.debug(p_message=>'(+) after validate interest_charges ... ' ||
5127 'x_return_status = ' || x_return_status,
5128 p_prefix =>l_debug_prefix,
5129 p_msg_level=>fnd_log.level_statement);
5130 END IF;
5131
5132 -----------------------------------------------------------------------
5133 -- Credit_classification
5134 -----------------------------------------------------------------------
5135 -- Validate lookup_code of the CREDIT_CLASSIFICATION
5136 IF p_customer_profile_rec.credit_classification IS NOT NULL AND
5137 p_customer_profile_rec.credit_classification <> FND_API.G_MISS_CHAR AND
5138 ( p_create_update_flag = 'C' OR
5139 ( p_create_update_flag = 'U' AND
5140 p_customer_profile_rec.credit_classification <> NVL( l_credit_classification, FND_API.G_MISS_CHAR ) ) )
5141 THEN
5142 validate_lookup (
5143 p_column => 'credit_classification',
5144 p_lookup_table => 'AR_LOOKUPS',
5145 p_lookup_type => 'AR_CMGT_CREDIT_CLASSIFICATION',
5146 p_column_value => p_customer_profile_rec.credit_classification,
5147 x_return_status => x_return_status );
5148
5149 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5150 hz_utility_v2pub.debug(p_message=>'credit_classification is lookup code in lookup type AR_CMGT_CREDIT_CLASSIFICATION in ar_lookups. ' ||
5151 'x_return_status = ' || x_return_status,
5152 p_prefix =>l_debug_prefix,
5153 p_msg_level=>fnd_log.level_statement);
5154 END IF;
5155
5156
5157 END IF;
5158
5159
5160 -- Debug info.
5161
5162 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5163 hz_utility_v2pub.debug(p_message=>'validate_customer_profile (-)',
5164 p_prefix=>l_debug_prefix,
5165 p_msg_level=>fnd_log.level_procedure);
5166 END IF;
5167
5168
5169 ----------------------------------------------
5170 -- validate LATE_CHARGE_CALCULATION_TRX
5171 ----------------------------------------------
5172
5173 -- LATE_CHARGE_CALCULATION_TRX is lookup code in lookup type AR_MANDATORY_LATE_CHARGES
5174 IF p_customer_profile_rec.late_charge_calculation_trx IS NOT NULL AND
5175 p_customer_profile_rec.late_charge_calculation_trx <> FND_API.G_MISS_CHAR AND
5176 ( p_create_update_flag = 'C' OR
5177 ( p_create_update_flag = 'U' AND
5178 p_customer_profile_rec.late_charge_calculation_trx <> NVL( l_late_charge_calculation_trx, FND_API.G_MISS_CHAR ) ) )
5179 THEN
5180 validate_lookup (
5181 p_column => 'late_charge_calculation_trx',
5182 p_lookup_type => 'AR_MANDATORY_LATE_CHARGES',
5183 p_column_value => p_customer_profile_rec.late_charge_calculation_trx,
5184 x_return_status => x_return_status );
5185
5186 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5187 hz_utility_v2pub.debug(p_message=>'late_charge_calculation_trx is lookup code in lookup type AR_MANDATORY_LATE_CHARGES. ' ||
5188 'x_return_status = ' || x_return_status,
5189 p_prefix =>l_debug_prefix,
5190 p_msg_level=>fnd_log.level_statement);
5191 END IF;
5192
5193 END IF;
5194
5195 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5196 hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_calculation_trx ... ' ||
5197 'x_return_status = ' || x_return_status,
5198 p_prefix =>l_debug_prefix,
5199 p_msg_level=>fnd_log.level_statement);
5200 END IF;
5201
5202 ----------------------------------------------
5203 -- validate CREDIT_ITEMS_FLAG
5204 ----------------------------------------------
5205
5206 -- CREDIT_ITEMS_FLAG is lookup code in lookup type YES/NO
5207 IF p_customer_profile_rec.credit_items_flag IS NOT NULL AND
5208 p_customer_profile_rec.credit_items_flag <> FND_API.G_MISS_CHAR
5209 AND ( p_create_update_flag = 'C' OR
5210 ( p_create_update_flag = 'U' AND
5211 p_customer_profile_rec.credit_items_flag <> NVL( l_credit_items_flag, FND_API.G_MISS_CHAR ) ) )
5212 THEN
5213 validate_lookup (
5214 p_column => 'credit_items_flag',
5215 p_lookup_type => 'YES/NO',
5216 p_column_value => p_customer_profile_rec.credit_items_flag,
5217 x_return_status => x_return_status );
5218
5219
5220 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5221 hz_utility_v2pub.debug(p_message=>'credit_items_flag is lookup code in lookup type YES/NO. ' ||
5222 'x_return_status = ' || x_return_status,
5223 p_prefix =>l_debug_prefix,
5224 p_msg_level=>fnd_log.level_statement);
5225 END IF;
5226
5227 END IF;
5228
5229 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5230 hz_utility_v2pub.debug(p_message=>'(+) after validate credit_items_flag ... ' ||
5231 'x_return_status = ' || x_return_status,
5232 p_prefix =>l_debug_prefix,
5233 p_msg_level=>fnd_log.level_statement);
5234 END IF;
5235
5236 ----------------------------------------------
5237 -- validate DISPUTED_TRANSACTIONS_FLAG
5238 ----------------------------------------------
5239
5240 -- DISPUTED_TRANSACTIONS_FLAG is lookup code in lookup type YES/NO
5241 IF p_customer_profile_rec.disputed_transactions_flag IS NOT NULL AND
5242 p_customer_profile_rec.disputed_transactions_flag <> FND_API.G_MISS_CHAR
5243 AND ( p_create_update_flag = 'C' OR
5244 ( p_create_update_flag = 'U' AND
5245 p_customer_profile_rec.disputed_transactions_flag <> NVL( l_disputed_transactions_flag, FND_API.G_MISS_CHAR ) ) )
5246 THEN
5247 validate_lookup (
5248 p_column => 'disputed_transactions_flag',
5249 p_lookup_type => 'YES/NO',
5250 p_column_value => p_customer_profile_rec.disputed_transactions_flag,
5251 x_return_status => x_return_status );
5252
5253
5254 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5255 hz_utility_v2pub.debug(p_message=>'disputed_transactions_flag is lookup code in lookup type YES/NO. ' ||
5256 'x_return_status = ' || x_return_status,
5257 p_prefix =>l_debug_prefix,
5258 p_msg_level=>fnd_log.level_statement);
5259 END IF;
5260
5261 END IF;
5262
5263 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5264 hz_utility_v2pub.debug(p_message=>'(+) after validate disputed_transactions_flag ... ' ||
5265 'x_return_status = ' || x_return_status,
5266 p_prefix =>l_debug_prefix,
5267 p_msg_level=>fnd_log.level_statement);
5268 END IF;
5269
5270 ----------------------------------------------
5271 -- validate LATE_CHARGE_TYPE
5272 ----------------------------------------------
5273
5274 -- LATE_CHARGE_TYPE is lookup code in lookup type AR_LATE_CHARGE_TYPE
5275 IF p_customer_profile_rec.late_charge_type IS NOT NULL AND
5276 p_customer_profile_rec.late_charge_type <> FND_API.G_MISS_CHAR AND
5277 ( p_create_update_flag = 'C' OR
5278 ( p_create_update_flag = 'U' AND
5279 p_customer_profile_rec.late_charge_type <> NVL( l_late_charge_type, FND_API.G_MISS_CHAR ) ) )
5280 THEN
5281 validate_lookup (
5282 p_column => 'late_charge_type',
5283 p_lookup_type => 'AR_LATE_CHARGE_TYPE',
5284 p_column_value => p_customer_profile_rec.late_charge_type,
5285 x_return_status => x_return_status );
5286
5287 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5288 hz_utility_v2pub.debug(p_message=>'late_charge_type is lookup code in lookup type AR_LATE_CHARGE_TYPE. ' ||
5289 'x_return_status = ' || x_return_status,
5290 p_prefix =>l_debug_prefix,
5291 p_msg_level=>fnd_log.level_statement);
5292 END IF;
5293
5294 END IF;
5295
5296 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5297 hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_type ... ' ||
5298 'x_return_status = ' || x_return_status,
5299 p_prefix =>l_debug_prefix,
5300 p_msg_level=>fnd_log.level_statement);
5301 END IF;
5302
5303 ----------------------------------------------
5304 -- validate INTEREST_CALCULATION_PERIOD
5305 ----------------------------------------------
5306
5307 -- INTEREST_CALCULATION_PERIOD is lookup code in lookup type AR_CALCULATION_PERIOD
5308 IF p_customer_profile_rec.interest_calculation_period IS NOT NULL AND
5309 p_customer_profile_rec.interest_calculation_period <> FND_API.G_MISS_CHAR AND
5310 ( p_create_update_flag = 'C' OR
5311 ( p_create_update_flag = 'U' AND
5312 p_customer_profile_rec.interest_calculation_period <> NVL( l_interest_calculation_period, FND_API.G_MISS_CHAR ) ) )
5313 THEN
5314 validate_lookup (
5315 p_column => 'interest_calculation_period',
5316 p_lookup_type => 'AR_CALCULATION_PERIOD',
5317 p_column_value => p_customer_profile_rec.interest_calculation_period,
5318 x_return_status => x_return_status );
5319
5320 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5321 hz_utility_v2pub.debug(p_message=>'interest_calculation_period is lookup code in lookup type AR_CALCULATION_PERIOD. ' ||
5322 'x_return_status = ' || x_return_status,
5323 p_prefix =>l_debug_prefix,
5324 p_msg_level=>fnd_log.level_statement);
5325 END IF;
5326
5327 END IF;
5328
5329 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5330 hz_utility_v2pub.debug(p_message=>'(+) after validate interest_calculation_period ... ' ||
5331 'x_return_status = ' || x_return_status,
5332 p_prefix =>l_debug_prefix,
5333 p_msg_level=>fnd_log.level_statement);
5334 END IF;
5335
5336 ----------------------------------------------
5337 -- validate HOLD_CHARGED_INVOICES_FLAG
5338 ----------------------------------------------
5339
5340 -- HOLD_CHARGED_INVOICES_FLAG is lookup code in lookup type YES/NO
5341 IF p_customer_profile_rec.hold_charged_invoices_flag IS NOT NULL AND
5342 p_customer_profile_rec.hold_charged_invoices_flag <> FND_API.G_MISS_CHAR
5343 AND ( p_create_update_flag = 'C' OR
5344 ( p_create_update_flag = 'U' AND
5345 p_customer_profile_rec.hold_charged_invoices_flag <> NVL( l_hold_charged_invoices_flag, FND_API.G_MISS_CHAR ) ) )
5346 THEN
5347 validate_lookup (
5348 p_column => 'hold_charged_invoices_flag',
5349 p_lookup_type => 'YES/NO',
5350 p_column_value => p_customer_profile_rec.hold_charged_invoices_flag,
5351 x_return_status => x_return_status );
5352
5353
5354 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5355 hz_utility_v2pub.debug(p_message=>'hold_charged_invoices_flag is lookup code in lookup type YES/NO. ' ||
5356 'x_return_status = ' || x_return_status,
5357 p_prefix =>l_debug_prefix,
5358 p_msg_level=>fnd_log.level_statement);
5359 END IF;
5360
5361 END IF;
5362
5363 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5364 hz_utility_v2pub.debug(p_message=>'(+) after validate hold_charged_invoices_flag ... ' ||
5365 'x_return_status = ' || x_return_status,
5366 p_prefix =>l_debug_prefix,
5367 p_msg_level=>fnd_log.level_statement);
5368 END IF;
5369
5370 ----------------------------------------------
5371 -- validate MULTIPLE_INTEREST_RATES_FLAG
5372 ----------------------------------------------
5373
5374 -- MULTIPLE_INTEREST_RATES_FLAG is lookup code in lookup type YES/NO
5375 IF p_customer_profile_rec.multiple_interest_rates_flag IS NOT NULL AND
5376 p_customer_profile_rec.multiple_interest_rates_flag <> FND_API.G_MISS_CHAR
5377 AND ( p_create_update_flag = 'C' OR
5378 ( p_create_update_flag = 'U' AND
5379 p_customer_profile_rec.multiple_interest_rates_flag <> NVL( l_multiple_interest_rates_flag, FND_API.G_MISS_CHAR ) ) )
5380 THEN
5381 validate_lookup (
5382 p_column => 'multiple_interest_rates_flag',
5383 p_lookup_type => 'YES/NO',
5384 p_column_value => p_customer_profile_rec.multiple_interest_rates_flag,
5385 x_return_status => x_return_status );
5386
5387
5388 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5389 hz_utility_v2pub.debug(p_message=>'multiple_interest_rates_flag is lookup code in lookup type YES/NO. ' ||
5390 'x_return_status = ' || x_return_status,
5391 p_prefix =>l_debug_prefix,
5392 p_msg_level=>fnd_log.level_statement);
5393 END IF;
5394
5395 END IF;
5396
5397 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5398 hz_utility_v2pub.debug(p_message=>'(+) after validate multiple_interest_rates_flag ... ' ||
5399 'x_return_status = ' || x_return_status,
5400 p_prefix =>l_debug_prefix,
5401 p_msg_level=>fnd_log.level_statement);
5402 END IF;
5403
5404 ------------------------------------
5405 -- validate late_charge_term_id
5406 ------------------------------------
5407 -- 1. late_charge_term_id should be a valid value defined in RA_TERMS
5408 -- 2. Late charge payment term is required when late charge type is debit memo or interest invoice
5409
5410 IF (((p_customer_profile_rec.late_charge_term_id IS NULL OR p_customer_profile_rec.late_charge_term_id = FND_API.G_MISS_NUM) AND
5411 (p_customer_profile_rec.late_charge_type = 'DM' OR
5412 p_customer_profile_rec.late_charge_type = 'INV')) OR
5413 ((p_customer_profile_rec.late_charge_type = 'ADJ') AND
5414 (p_customer_profile_rec.late_charge_term_id IS NOT NULL AND p_customer_profile_rec.late_charge_term_id <> FND_API.G_MISS_NUM))) THEN
5415 -- Late charge payment term is required when
5416 -- late charge type is debit memo or interest invoice
5417 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_LC_PAY_TERM' );
5418 FND_MSG_PUB.ADD;
5419 x_return_status := FND_API.G_RET_STS_ERROR;
5420 END IF;
5421
5422 IF p_customer_profile_rec.late_charge_term_id is NOT NULL AND
5423 p_customer_profile_rec.late_charge_term_id <> FND_API.G_MISS_NUM
5424 AND ( p_create_update_flag = 'C' OR
5425 ( p_create_update_flag = 'U' AND
5426 p_customer_profile_rec.late_charge_term_id <> NVL( l_late_charge_term_id, FND_API.G_MISS_NUM ) ) )
5427 THEN
5428 check_late_charge_term_id_fk(
5429 p_column => 'payment_term_id',
5430 p_column_value => p_customer_profile_rec.late_charge_term_id,
5431 p_cons_inv_flag => p_customer_profile_rec.cons_inv_flag,
5432 x_return_status => x_return_status );
5433
5434 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5435 hz_utility_v2pub.debug(p_message=>'late_charge_term_id should be a valid value defined in RA_TERMS. '||
5436 'x_return_status = ' || x_return_status,
5437 p_prefix =>l_debug_prefix,
5438 p_msg_level=>fnd_log.level_statement);
5439 END IF;
5440
5441 END IF;
5442
5443 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5444 hz_utility_v2pub.debug(p_message=>'(+) after validate late_charge_term_id..' ||
5445 'x_return_status = ' || x_return_status,
5446 p_prefix =>l_debug_prefix,
5447 p_msg_level=>fnd_log.level_statement);
5448 END IF;
5449
5450 ------------------------------------
5451 -- validate message_text_id
5452 ------------------------------------
5453 -- 1. message_text_id should be a valid value defined in AR_STANDARD_TEXT
5454 -- 2. Message text can be entered only when late charge type is debit memo or interest invoice
5455
5456 IF ((p_customer_profile_rec.late_charge_type = 'ADJ') AND
5457 (p_customer_profile_rec.message_text_id IS NOT NULL AND p_customer_profile_rec.message_text_id <> FND_API.G_MISS_NUM)) THEN
5458 -- Message text can be entered only when
5459 -- late charge type is debit memo or interest invoice
5460 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_MSG_FOR_LC_TYPE' );
5461 FND_MSG_PUB.ADD;
5462 x_return_status := FND_API.G_RET_STS_ERROR;
5463 END IF;
5464
5465 IF p_customer_profile_rec.message_text_id is NOT NULL AND
5466 p_customer_profile_rec.message_text_id <> FND_API.G_MISS_NUM
5467 AND ( p_create_update_flag = 'C' OR
5468 ( p_create_update_flag = 'U' AND
5469 p_customer_profile_rec.message_text_id <> NVL( l_message_text_id, FND_API.G_MISS_NUM ) ) )
5470 THEN
5471
5472 check_message_text_id_fk(
5473 p_column => 'message_text_id',
5474 p_column_value => p_customer_profile_rec.message_text_id,
5475 x_return_status => x_return_status );
5476
5477 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5478 hz_utility_v2pub.debug(p_message=>'message_text_id should be a valid value defined in AR_STANDARD_TEXT. '||
5479 'x_return_status = ' || x_return_status,
5480 p_prefix =>l_debug_prefix,
5481 p_msg_level=>fnd_log.level_statement);
5482 END IF;
5483
5484 END IF;
5485
5486 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5487 hz_utility_v2pub.debug(p_message=>'(+) after validate message_text_id..' ||
5488 'x_return_status = ' || x_return_status,
5489 p_prefix =>l_debug_prefix,
5490 p_msg_level=>fnd_log.level_statement);
5491 END IF;
5492
5493 -- Check if API is called in debug mode. If yes, disable debug.
5494 --disable_debug;
5495
5496 END validate_customer_profile;
5497
5498 /**
5499 * PROCEDURE validate_cust_profile_amt
5500 *
5501 * DESCRIPTION
5502 * Validates customer profile amount record. Checks for
5503 * uniqueness
5504 * lookup types
5505 * mandatory columns
5506 * non-updateable fields
5507 * foreign key validations
5508 * other validations
5509 *
5510 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
5511 *
5512 * ARGUMENTS
5513 * IN:
5514 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
5515 * p_check_foreign_key If do foreign key checking on cust_account_id
5516 * and cust_account_profile_id or not.
5517 * p_cust_profile_amt_rec Customer profile amount record.
5518 * p_rowid Rowid of the record (used only in update mode).
5519 * IN/OUT:
5520 * x_return_status Return status after the call. The status can
5521 * be FND_API.G_RET_STS_SUCCESS (success),
5522 * FND_API.G_RET_STS_ERROR (error),
5523 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
5524 *
5525 * NOTES
5526 *
5527 * MODIFICATION HISTORY
5528 *
5529 * 07-23-2001 Jianying Huang o Created.
5530 * 11-08-2001 P.Suresh * Bug Fix : 2001573. Validated overall_credit_limit.
5531 * It should be greater or equal to trx_credit_limit.
5532 *
5533 */
5534
5535 PROCEDURE validate_cust_profile_amt (
5536 p_create_update_flag IN VARCHAR2,
5537 p_check_foreign_key IN VARCHAR2,
5538 p_cust_profile_amt_rec IN HZ_CUSTOMER_PROFILE_V2PUB.CUST_PROFILE_AMT_REC_TYPE,
5539 p_rowid IN ROWID,
5540 x_return_status IN OUT NOCOPY VARCHAR2
5541 ) IS
5542
5543 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_profile_amt'
5544
5545 l_dummy VARCHAR2(1);
5546
5547 l_cust_account_id NUMBER;
5548 l_site_use_id NUMBER;
5549 l_cust_account_profile_id NUMBER;
5550 l_currency_code HZ_CUST_PROFILE_AMTS.currency_code%TYPE;
5551 l_created_by_module HZ_CUST_PROFILE_AMTS.created_by_module%TYPE;
5552 l_application_id NUMBER;
5553 l_overall_credit_limit HZ_CUST_PROFILE_AMTS.OVERALL_CREDIT_LIMIT%TYPE;
5554 l_trx_credit_limit HZ_CUST_PROFILE_AMTS.TRX_CREDIT_LIMIT%TYPE;
5555 -- Bug 4770111 : Added for CBM of customer profile
5556 l_prof_cbm HZ_CUST_PROFILE_AMTS.created_by_module%TYPE := 'TCA_V2_API';
5557
5558 -- Added following variables for late charge policy project.
5559 v_cust_profile_amt_rec HZ_CUSTOMER_PROFILE_V2PUB.CUST_PROFILE_AMT_REC_TYPE;
5560 l_min_fc_invoice_overdue_type HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_OVERDUE_TYPE%TYPE;
5561 l_min_fc_balance_overdue_type HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_OVERDUE_TYPE%TYPE;
5562 l_interest_type HZ_CUST_PROFILE_AMTS.INTEREST_TYPE%TYPE;
5563 l_penalty_type HZ_CUST_PROFILE_AMTS.PENALTY_TYPE%TYPE;
5564 l_exchange_rate_type HZ_CUST_PROFILE_AMTS.EXCHANGE_RATE_TYPE%TYPE;
5565 l_min_fc_invoice_amount HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_AMOUNT%TYPE;
5566 l_min_fc_invoice_percent HZ_CUST_PROFILE_AMTS.MIN_FC_INVOICE_PERCENT%TYPE;
5567 l_min_fc_balance_amount HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_AMOUNT%TYPE;
5568 l_min_fc_balance_percent HZ_CUST_PROFILE_AMTS.MIN_FC_BALANCE_PERCENT%TYPE;
5569 l_interest_rate HZ_CUST_PROFILE_AMTS.INTEREST_RATE%TYPE;
5570 l_interest_fixed_amount HZ_CUST_PROFILE_AMTS.INTEREST_FIXED_AMOUNT%TYPE;
5571 l_interest_schedule_id HZ_CUST_PROFILE_AMTS.INTEREST_SCHEDULE_ID%TYPE;
5572 l_penalty_rate HZ_CUST_PROFILE_AMTS.PENALTY_RATE%TYPE;
5573 l_penalty_fixed_amount HZ_CUST_PROFILE_AMTS.PENALTY_FIXED_AMOUNT%TYPE;
5574 l_penalty_schedule_id HZ_CUST_PROFILE_AMTS.PENALTY_SCHEDULE_ID%TYPE;
5575
5576 BEGIN
5577
5578 -- Check if API is called in debug mode. If yes, enable debug.
5579 --enable_debug;
5580
5581 -- Debug info.
5582
5583 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5584 hz_utility_v2pub.debug(p_message=>'validate_cust_profile_amt (+)',
5585 p_prefix=>l_debug_prefix,
5586 p_msg_level=>fnd_log.level_procedure);
5587 END IF;
5588
5589 v_cust_profile_amt_rec := p_cust_profile_amt_rec;
5590
5591 -- Select fields for later use during update.
5592 IF p_create_update_flag = 'U' THEN
5593 SELECT CUST_ACCOUNT_ID, SITE_USE_ID,
5594 CUST_ACCOUNT_PROFILE_ID, CURRENCY_CODE,
5595 CREATED_BY_MODULE, APPLICATION_ID,
5596 OVERALL_CREDIT_LIMIT,TRX_CREDIT_LIMIT,
5597 MIN_FC_INVOICE_OVERDUE_TYPE, MIN_FC_BALANCE_OVERDUE_TYPE,
5598 INTEREST_TYPE, PENALTY_TYPE, EXCHANGE_RATE_TYPE,
5599 MIN_FC_INVOICE_AMOUNT, MIN_FC_INVOICE_PERCENT,
5600 MIN_FC_BALANCE_AMOUNT, MIN_FC_BALANCE_PERCENT,
5601 INTEREST_RATE, INTEREST_FIXED_AMOUNT, INTEREST_SCHEDULE_ID,
5602 PENALTY_RATE, PENALTY_FIXED_AMOUNT, PENALTY_SCHEDULE_ID
5603 INTO l_cust_account_id, l_site_use_id,
5604 l_cust_account_profile_id, l_currency_code,
5605 l_created_by_module, l_application_id,
5606 l_overall_credit_limit,l_trx_credit_limit,
5607 l_min_fc_invoice_overdue_type, l_min_fc_balance_overdue_type,
5608 l_interest_type, l_penalty_type, l_exchange_rate_type,
5609 l_min_fc_invoice_amount, l_min_fc_invoice_percent,
5610 l_min_fc_balance_amount, l_min_fc_balance_percent,
5611 l_interest_rate, l_interest_fixed_amount, l_interest_schedule_id,
5612 l_penalty_rate, l_penalty_fixed_amount, l_penalty_schedule_id
5613 FROM HZ_CUST_PROFILE_AMTS
5614 WHERE ROWID = p_rowid;
5615 END IF;
5616
5617 --------------------------------------
5618 -- validate cust_acct_profile_amt_id
5619 --------------------------------------
5620 /****Logical APIs - validation not required****/
5621 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5622 IF p_create_update_flag = 'C' THEN
5623
5624 -- If primary key value is passed, check for uniqueness.
5625 -- If primary key value is not passed, it will be generated
5626 -- from sequence by table handler.
5627
5628 IF p_cust_profile_amt_rec.cust_acct_profile_amt_id IS NOT NULL AND
5629 p_cust_profile_amt_rec.cust_acct_profile_amt_id <> FND_API.G_MISS_NUM
5630 THEN
5631 BEGIN
5632 SELECT 'Y' INTO l_dummy
5633 FROM HZ_CUST_PROFILE_AMTS
5634 WHERE CUST_ACCT_PROFILE_AMT_ID = p_cust_profile_amt_rec.cust_acct_profile_amt_id;
5635
5636 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
5637 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_profile_amt_id' );
5638 FND_MSG_PUB.ADD;
5639 x_return_status := FND_API.G_RET_STS_ERROR;
5640 EXCEPTION
5641 WHEN NO_DATA_FOUND THEN
5642 NULL;
5643 END;
5644
5645 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5646 hz_utility_v2pub.debug(p_message=>'cust_acct_profile_amt_id is unique during creation if passed in. ' ||
5647 'x_return_status = ' || x_return_status,
5648 p_prefix =>l_debug_prefix,
5649 p_msg_level=>fnd_log.level_statement);
5650 END IF;
5651 END IF;
5652 END IF;
5653
5654 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5655 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_profile_amt_id ... ' ||
5656 'x_return_status = ' || x_return_status,
5657 p_prefix =>l_debug_prefix,
5658 p_msg_level=>fnd_log.level_statement);
5659 END IF;
5660 END IF;
5661
5662 ----------------------------------------------
5663 -- validate cust_account_profile_id
5664 ----------------------------------------------
5665 /****Logical APIs - validation not required****/
5666 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5667 -- cust_account_profile_id is mandatory field
5668 -- Since cust_account_profile_id is non-updateable, we only need to check mandatory
5669 -- during creation.
5670
5671 IF p_create_update_flag = 'C' THEN
5672 validate_mandatory (
5673 p_create_update_flag => p_create_update_flag,
5674 p_column => 'cust_account_profile_id',
5675 p_column_value => p_cust_profile_amt_rec.cust_account_profile_id,
5676 x_return_status => x_return_status );
5677
5678 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5679 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is mandatory. ' ||
5680 'x_return_status = ' || x_return_status,
5681 p_prefix =>l_debug_prefix,
5682 p_msg_level=>fnd_log.level_statement);
5683 END IF;
5684 END IF;
5685
5686 -- cust_account_profile_id is non-updateable field
5687 IF p_create_update_flag = 'U' AND
5688 p_cust_profile_amt_rec.cust_account_profile_id IS NOT NULL
5689 THEN
5690 validate_nonupdateable (
5691 p_column => 'cust_account_profile_id',
5692 p_column_value => p_cust_profile_amt_rec.cust_account_profile_id,
5693 p_old_column_value => l_cust_account_profile_id,
5694 x_return_status => x_return_status );
5695
5696 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5697 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is non-updateable. ' ||
5698 'x_return_status = ' || x_return_status,
5699 p_prefix =>l_debug_prefix,
5700 p_msg_level=>fnd_log.level_statement);
5701 END IF;
5702 END IF;
5703
5704 -- cust_account_profile_id is foreign key to hz_customer_profiles
5705 -- Since cust_account_profile_id is mandatory and non-updateable,
5706 -- we only need to check FK during creation.
5707
5708
5709 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5710 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id = ' || p_cust_profile_amt_rec.cust_account_profile_id || ' ' ||
5711 'x_return_status = ' || x_return_status,
5712 p_prefix =>l_debug_prefix,
5713 p_msg_level=>fnd_log.level_statement);
5714 END IF;
5715
5716 IF p_create_update_flag = 'C' AND
5717 p_check_foreign_key = FND_API.G_TRUE AND
5718 p_cust_profile_amt_rec.cust_account_profile_id IS NOT NULL AND
5719 p_cust_profile_amt_rec.cust_account_profile_id <> FND_API.G_MISS_NUM
5720 THEN
5721 BEGIN
5722 -- select cust_account_id, site_use_id for later cross reference checking
5723 -- Bug 4770111 : select created_by_module also
5724
5725 SELECT CUST_ACCOUNT_ID, SITE_USE_ID, CREATED_BY_MODULE
5726 INTO l_cust_account_id, l_site_use_id, l_prof_cbm
5727 FROM HZ_CUSTOMER_PROFILES
5728 WHERE CUST_ACCOUNT_PROFILE_ID = p_cust_profile_amt_rec.cust_account_profile_id;
5729
5730 EXCEPTION
5731 WHEN NO_DATA_FOUND THEN
5732 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
5733 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_profile_id' );
5734 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id' );
5735 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_customer_profiles' );
5736 FND_MSG_PUB.ADD;
5737 x_return_status := FND_API.G_RET_STS_ERROR;
5738 END;
5739
5740 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5741 hz_utility_v2pub.debug(p_message=>'cust_account_profile_id is foreign key to hz_customer_profiles. ' ||
5742 'x_return_status = ' || x_return_status,
5743 p_prefix =>l_debug_prefix,
5744 p_msg_level=>fnd_log.level_statement);
5745 END IF;
5746
5747 END IF;
5748
5749 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5750 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_profile_id ... ' ||
5751 'x_return_status = ' || x_return_status,
5752 p_prefix =>l_debug_prefix,
5753 p_msg_level=>fnd_log.level_statement);
5754 END IF;
5755 END IF;
5756
5757 ----------------------------------------------
5758 -- validate cust_account_id
5759 ----------------------------------------------
5760 /****Logical APIs - validation not required****/
5761 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5762 -- cust_account_id is mandatory field
5763 -- Since cust_account_id is non-updateable, we only need to check mandatory
5764 -- during creation.
5765
5766 IF p_create_update_flag = 'C' THEN
5767 validate_mandatory (
5768 p_create_update_flag => p_create_update_flag,
5769 p_column => 'cust_account_id',
5770 p_column_value => p_cust_profile_amt_rec.cust_account_id,
5771 x_return_status => x_return_status );
5772
5773 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5774 hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
5775 'x_return_status = ' || x_return_status,
5776 p_prefix =>l_debug_prefix,
5777 p_msg_level=>fnd_log.level_statement);
5778 END IF;
5779 END IF;
5780
5781 -- cust_account_id is non-updateable field
5782 IF p_create_update_flag = 'U' AND
5783 p_cust_profile_amt_rec.cust_account_id IS NOT NULL
5784 THEN
5785 validate_nonupdateable (
5786 p_column => 'cust_account_id',
5787 p_column_value => p_cust_profile_amt_rec.cust_account_id,
5788 p_old_column_value => l_cust_account_id,
5789 x_return_status => x_return_status );
5790
5791 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5792 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
5793 'x_return_status = ' || x_return_status,
5794 p_prefix =>l_debug_prefix,
5795 p_msg_level=>fnd_log.level_statement);
5796 END IF;
5797 END IF;
5798
5799 -- cust_account_id is foreign key to hz_cust_accounts
5800 -- Since cust_account_id is mandatory and non-updateable,
5801 -- we only need to check FK during creation.
5802
5803 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5804 hz_utility_v2pub.debug(p_message=>'cust_account_id = ' || p_cust_profile_amt_rec.cust_account_id || ' ' ||
5805 'x_return_status = ' || x_return_status,
5806 p_prefix =>l_debug_prefix,
5807 p_msg_level=>fnd_log.level_statement);
5808 END IF;
5809
5810 IF p_create_update_flag = 'C' AND
5811 p_check_foreign_key = FND_API.G_TRUE AND
5812 p_cust_profile_amt_rec.cust_account_id IS NOT NULL AND
5813 p_cust_profile_amt_rec.cust_account_id <> FND_API.G_MISS_NUM
5814 THEN
5815 check_cust_account_fk (
5816 p_column => 'cust_account_id',
5817 p_column_value => p_cust_profile_amt_rec.cust_account_id,
5818 x_return_status => x_return_status );
5819
5820 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5821 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
5822 'x_return_status = ' || x_return_status,
5823 p_prefix =>l_debug_prefix,
5824 p_msg_level=>fnd_log.level_statement);
5825 END IF;
5826
5827 -- cross reference checking
5828
5829 IF p_cust_profile_amt_rec.cust_account_id <> l_cust_account_id THEN
5830 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_PROF_AMT_IDS_MISMATCH' );
5831 FND_MESSAGE.SET_TOKEN( 'ENTITY', 'customer' );
5832 FND_MSG_PUB.ADD;
5833 x_return_status := FND_API.G_RET_STS_ERROR;
5834 END IF;
5835
5836 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5837 hz_utility_v2pub.debug(p_message=>'cust_account_id should be the same as cust_account_id in corresponding customer profile. ' ||
5838 'x_return_status = ' || x_return_status,
5839 p_prefix =>l_debug_prefix,
5840 p_msg_level=>fnd_log.level_statement);
5841 END IF;
5842
5843 END IF;
5844
5845 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5846 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
5847 'x_return_status = ' || x_return_status,
5848 p_prefix =>l_debug_prefix,
5849 p_msg_level=>fnd_log.level_statement);
5850 END IF;
5851 END IF;
5852
5853 ----------------------------------------------
5854 -- validate currency_code
5855 ----------------------------------------------
5856
5857 -- currency_code is mandatory field
5858 -- Since currency_code is non-updateable, we only need to check mandatory
5859 -- during creation.
5860
5861 IF p_create_update_flag = 'C' THEN
5862 validate_mandatory (
5863 p_create_update_flag => p_create_update_flag,
5864 p_column => 'currency_code',
5865 p_column_value => p_cust_profile_amt_rec.currency_code,
5866 x_return_status => x_return_status );
5867
5868 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5869 hz_utility_v2pub.debug(p_message=>'currency_code is mandatory. ' ||
5870 'x_return_status = ' || x_return_status,
5871 p_prefix =>l_debug_prefix,
5872 p_msg_level=>fnd_log.level_statement);
5873 END IF;
5874 END IF;
5875
5876 -- currency_code is non-updateable field
5877 IF p_create_update_flag = 'U' AND
5878 p_cust_profile_amt_rec.currency_code IS NOT NULL
5879 THEN
5880 validate_nonupdateable (
5881 p_column => 'currency_code',
5882 p_column_value => p_cust_profile_amt_rec.currency_code,
5883 p_old_column_value => l_currency_code,
5884 x_return_status => x_return_status );
5885
5886 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5887 hz_utility_v2pub.debug(p_message=>'currency_code is non-updateable. ' ||
5888 'x_return_status = ' || x_return_status,
5889 p_prefix =>l_debug_prefix,
5890 p_msg_level=>fnd_log.level_statement);
5891 END IF;
5892 END IF;
5893
5894 -- currency_code is foreign key to fnd_currencies
5895 -- Since currency_code is mandatory and non-updateable,
5896 -- we only need to check FK during creation.
5897
5898 IF p_create_update_flag = 'C' AND
5899 p_cust_profile_amt_rec.currency_code IS NOT NULL AND
5900 p_cust_profile_amt_rec.currency_code <> FND_API.G_MISS_CHAR
5901 THEN
5902 check_currency_fk (
5903 p_column => 'currency_code',
5904 p_column_value => p_cust_profile_amt_rec.currency_code,
5905 x_return_status => x_return_status );
5906
5907 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5908 hz_utility_v2pub.debug(p_message=>'currency_code is foreign key to fnd_currencies. ' ||
5909 'x_return_status = ' || x_return_status,
5910 p_prefix =>l_debug_prefix,
5911 p_msg_level=>fnd_log.level_statement);
5912 END IF;
5913 END IF;
5914
5915 -- For a given cust_account_profile_id and currency_code, only one
5916 -- record of the profile amount is allowed.
5917 -- Since cust_account_profile_id and currency_code are mandatory
5918 -- and non-updateable columns, we only need to do the checking
5919 -- during creation.
5920
5921 IF p_create_update_flag = 'C' THEN
5922 BEGIN
5923 SELECT 'Y' INTO l_dummy
5924 FROM HZ_CUST_PROFILE_AMTS
5925 WHERE CUST_ACCOUNT_PROFILE_ID = p_cust_profile_amt_rec.cust_account_profile_id
5926 AND CURRENCY_CODE = p_cust_profile_amt_rec.currency_code
5927 AND ROWNUM = 1;
5928
5929 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
5930 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_profile_id - currency_code' );
5931 FND_MSG_PUB.ADD;
5932 x_return_status := FND_API.G_RET_STS_ERROR;
5933 EXCEPTION
5934 WHEN NO_DATA_FOUND THEN
5935 NULL;
5936 END;
5937
5938 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5939 hz_utility_v2pub.debug(p_message=>'for a given cust_account_profile_id and currency_code, only one record of the profile amount is allowed. ' ||
5940 'x_return_status = ' || x_return_status,
5941 p_prefix =>l_debug_prefix,
5942 p_msg_level=>fnd_log.level_statement);
5943 END IF;
5944 END IF;
5945
5946 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5947 hz_utility_v2pub.debug(p_message=>'(+) after validate currency_code ... ' ||
5948 'x_return_status = ' || x_return_status,
5949 p_prefix =>l_debug_prefix,
5950 p_msg_level=>fnd_log.level_statement);
5951 END IF;
5952
5953 ----------------------------------------------
5954 -- validate site_use_id
5955 ----------------------------------------------
5956 /****Logical APIs - validation not required****/
5957 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5958 -- site_use_id is non-updateable field
5959 IF p_create_update_flag = 'U' AND
5960 p_cust_profile_amt_rec.site_use_id IS NOT NULL
5961 THEN
5962 validate_nonupdateable (
5963 p_column => 'site_use_id',
5964 p_column_value => p_cust_profile_amt_rec.site_use_id,
5965 p_old_column_value => l_site_use_id,
5966 x_return_status => x_return_status );
5967
5968 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5969 hz_utility_v2pub.debug(p_message=>'site_use_id is non-updateable. ' ||
5970 'x_return_status = ' || x_return_status,
5971 p_prefix =>l_debug_prefix,
5972 p_msg_level=>fnd_log.level_statement);
5973 END IF;
5974 END IF;
5975
5976 -- site_use_id is foreign key to hz_cust_site_uses
5977 -- Since site_use_id is non-updateable, we only need to
5978 -- check FK during creation.
5979
5980 IF p_create_update_flag = 'C' AND
5981 p_check_foreign_key = FND_API.G_TRUE
5982 THEN
5983 IF p_cust_profile_amt_rec.site_use_id IS NOT NULL AND
5984 p_cust_profile_amt_rec.site_use_id <> FND_API.G_MISS_NUM
5985 THEN
5986 check_cust_site_use_fk (
5987 p_column => 'site_use_id',
5988 p_column_value => p_cust_profile_amt_rec.site_use_id,
5989 x_return_status => x_return_status );
5990
5991 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5992 hz_utility_v2pub.debug(p_message=>'site_use_id is foreign key to hz_cust_site_uses. ' ||
5993 'x_return_status = ' || x_return_status,
5994 p_prefix =>l_debug_prefix,
5995 p_msg_level=>fnd_log.level_statement);
5996 END IF;
5997 END IF;
5998
5999 -- cross reference checking
6000
6001 IF ( p_cust_profile_amt_rec.site_use_id IS NOT NULL
6002 AND p_cust_profile_amt_rec.site_use_id <> FND_API.G_MISS_NUM AND
6003 ( l_site_use_id IS NULL OR
6004 l_site_use_id <> p_cust_profile_amt_rec.site_use_id ) ) OR
6005 ( ( p_cust_profile_amt_rec.site_use_id IS NULL OR
6006 p_cust_profile_amt_rec.site_use_id = FND_API.G_MISS_NUM ) AND
6007 l_site_use_id IS NOT NULL )
6008 THEN
6009 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_PROF_AMT_IDS_MISMATCH' );
6010 FND_MESSAGE.SET_TOKEN( 'ENTITY', 'site use' );
6011 FND_MSG_PUB.ADD;
6012 x_return_status := FND_API.G_RET_STS_ERROR;
6013 END IF;
6014
6015 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6016 hz_utility_v2pub.debug(p_message=>'site_use_id should be the same as site_use_id site_use_id in corresponding customer profile. ' ||
6017 'x_return_status = ' || x_return_status,
6018 p_prefix =>l_debug_prefix,
6019 p_msg_level=>fnd_log.level_statement);
6020 END IF;
6021 END IF;
6022
6023 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6024 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
6025 'x_return_status = ' || x_return_status,
6026 p_prefix =>l_debug_prefix,
6027 p_msg_level=>fnd_log.level_statement);
6028 END IF;
6029 END IF;
6030
6031 --------------------------------------
6032 -- validate created_by_module
6033 --------------------------------------
6034
6035 -- Bug 4770111 : Validate CBM only if <> l_prof_cbm
6036 IF p_create_update_flag = 'C' THEN
6037 IF p_cust_profile_amt_rec.created_by_module <> nvl(l_prof_cbm, 'TCA_V2_API') THEN
6038 validate_created_by_module(
6039 p_create_update_flag => p_create_update_flag,
6040 p_created_by_module => p_cust_profile_amt_rec.created_by_module,
6041 p_old_created_by_module => l_created_by_module,
6042 x_return_status => x_return_status);
6043 END IF;
6044 ELSE
6045 validate_created_by_module(
6046 p_create_update_flag => p_create_update_flag,
6047 p_created_by_module => p_cust_profile_amt_rec.created_by_module,
6048 p_old_created_by_module => l_created_by_module,
6049 x_return_status => x_return_status);
6050 END IF;
6051
6052 --------------------------------------
6053 -- validate application_id
6054 --------------------------------------
6055
6056 validate_application_id(
6057 p_create_update_flag => p_create_update_flag,
6058 p_application_id => p_cust_profile_amt_rec.application_id,
6059 p_old_application_id => l_application_id,
6060 x_return_status => x_return_status);
6061
6062 ------------------------------------
6063 --*** Credit Limit Validations ***--
6064 ------------------------------------
6065
6066 IF p_cust_profile_amt_rec.overall_credit_limit <> FND_API.G_MISS_NUM AND
6067 p_cust_profile_amt_rec.overall_credit_limit IS NOT NULL
6068 THEN
6069 IF p_cust_profile_amt_rec.trx_credit_limit <> FND_API.G_MISS_NUM AND
6070 p_cust_profile_amt_rec.trx_credit_limit IS NOT NULL
6071 THEN
6072
6073 IF ( p_create_update_flag = 'C' OR
6074 ( p_create_update_flag = 'U' AND
6075 (
6076 (p_cust_profile_amt_rec.overall_credit_limit <> NVL( l_overall_credit_limit, FND_API.G_MISS_NUM ))
6077 OR
6078 (p_cust_profile_amt_rec.trx_credit_limit <> NVL(l_trx_credit_limit,FND_API.G_MISS_NUM))
6079 )
6080 )
6081 )
6082 THEN
6083 IF p_cust_profile_amt_rec.overall_credit_limit < p_cust_profile_amt_rec.trx_credit_limit
6084 THEN
6085 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_VAL_OVERALL_CREDIT' );
6086 FND_MSG_PUB.ADD;
6087 x_return_status := FND_API.G_RET_STS_ERROR;
6088
6089 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6090 hz_utility_v2pub.debug(p_message=>'overall_credit_limit should be greater than the trx_credit_limit. ' ||
6091 'x_return_status = ' || x_return_status,
6092 p_prefix =>l_debug_prefix,
6093 p_msg_level=>fnd_log.level_statement);
6094 END IF;
6095 END IF;
6096 END IF;
6097 END IF;
6098 END IF;
6099
6100 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6101 hz_utility_v2pub.debug(p_message=>'Credit Limit Validation failure. Please check the overall_credit_limit and trx_credit_limit ' || 'x_return_status = ' || x_return_status,
6102 p_prefix =>l_debug_prefix,
6103 p_msg_level=>fnd_log.level_statement);
6104 END IF;
6105
6106 ----------------------------------------------
6107 -- validate MIN_FC_INVOICE_OVERDUE_TYPE
6108 ----------------------------------------------
6109
6110 -- MIN_FC_INVOICE_OVERDUE_TYPE is lookup code in lookup type AR_AMOUNT_PERCENT
6111 IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type IS NOT NULL AND
6112 p_cust_profile_amt_rec.min_fc_invoice_overdue_type <> FND_API.G_MISS_CHAR AND
6113 ( p_create_update_flag = 'C' OR
6114 ( p_create_update_flag = 'U' AND
6115 p_cust_profile_amt_rec.min_fc_invoice_overdue_type <> NVL( l_min_fc_invoice_overdue_type, FND_API.G_MISS_CHAR ) ) )
6116 THEN
6117 validate_lookup (
6118 p_column => 'min_fc_invoice_overdue_type',
6119 p_lookup_table => 'AR_LOOKUPS',
6120 p_lookup_type => 'AR_AMOUNT_PERCENT',
6121 p_column_value => p_cust_profile_amt_rec.min_fc_invoice_overdue_type,
6122 x_return_status => x_return_status );
6123
6124 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6125 hz_utility_v2pub.debug(p_message=>'min_fc_invoice_overdue_type is lookup code in lookup type AR_AMOUNT_PERCENT. ' ||
6126 'x_return_status = ' || x_return_status,
6127 p_prefix =>l_debug_prefix,
6128 p_msg_level=>fnd_log.level_statement);
6129 END IF;
6130
6131 END IF;
6132
6133 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6134 hz_utility_v2pub.debug(p_message=>'(+) after validate min_fc_invoice_overdue_type ... ' ||
6135 'x_return_status = ' || x_return_status,
6136 p_prefix =>l_debug_prefix,
6137 p_msg_level=>fnd_log.level_statement);
6138 END IF;
6139
6140 ----------------------------------------------
6141 -- validate MIN_FC_BALANCE_OVERDUE_TYPE
6142 ----------------------------------------------
6143
6144 -- MIN_FC_BALANCE_OVERDUE_TYPE is lookup code in lookup type AR_AMOUNT_PERCENT
6145 IF p_cust_profile_amt_rec.min_fc_balance_overdue_type IS NOT NULL AND
6146 p_cust_profile_amt_rec.min_fc_balance_overdue_type <> FND_API.G_MISS_CHAR AND
6147 ( p_create_update_flag = 'C' OR
6148 ( p_create_update_flag = 'U' AND
6149 p_cust_profile_amt_rec.min_fc_balance_overdue_type <> NVL( l_min_fc_balance_overdue_type, FND_API.G_MISS_CHAR ) ) )
6150 THEN
6151 validate_lookup (
6152 p_column => 'min_fc_balance_overdue_type',
6153 p_lookup_table => 'AR_LOOKUPS',
6154 p_lookup_type => 'AR_AMOUNT_PERCENT',
6155 p_column_value => p_cust_profile_amt_rec.min_fc_balance_overdue_type,
6156 x_return_status => x_return_status );
6157
6158 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6159 hz_utility_v2pub.debug(p_message=>'min_fc_balance_overdue_type is lookup code in lookup type AR_AMOUNT_PERCENT. ' ||
6160 'x_return_status = ' || x_return_status,
6161 p_prefix =>l_debug_prefix,
6162 p_msg_level=>fnd_log.level_statement);
6163 END IF;
6164
6165 END IF;
6166
6167 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6168 hz_utility_v2pub.debug(p_message=>'(+) after validate min_fc_balance_overdue_type ... ' ||
6169 'x_return_status = ' || x_return_status,
6170 p_prefix =>l_debug_prefix,
6171 p_msg_level=>fnd_log.level_statement);
6172 END IF;
6173
6174 ----------------------------------------------
6175 -- validate INTEREST_TYPE
6176 ----------------------------------------------
6177
6178 -- INTEREST_TYPE is lookup code in lookup type AR_INTEREST_PENALTY_TYPE
6179 IF p_cust_profile_amt_rec.interest_type IS NOT NULL AND
6180 p_cust_profile_amt_rec.interest_type <> FND_API.G_MISS_CHAR AND
6181 ( p_create_update_flag = 'C' OR
6182 ( p_create_update_flag = 'U' AND
6183 p_cust_profile_amt_rec.interest_type <> NVL( l_interest_type, FND_API.G_MISS_CHAR ) ) )
6184 THEN
6185 validate_lookup (
6186 p_column => 'interest_type',
6187 p_lookup_table => 'AR_LOOKUPS',
6188 p_lookup_type => 'AR_INTEREST_PENALTY_TYPE',
6189 p_column_value => p_cust_profile_amt_rec.interest_type,
6190 x_return_status => x_return_status );
6191
6192 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6193 hz_utility_v2pub.debug(p_message=>'interest_type is lookup code in lookup type AR_INTEREST_PENALTY_TYPE. ' ||
6194 'x_return_status = ' || x_return_status,
6195 p_prefix =>l_debug_prefix,
6196 p_msg_level=>fnd_log.level_statement);
6197 END IF;
6198
6199 END IF;
6200
6201 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6202 hz_utility_v2pub.debug(p_message=>'(+) after validate interest_type ... ' ||
6203 'x_return_status = ' || x_return_status,
6204 p_prefix =>l_debug_prefix,
6205 p_msg_level=>fnd_log.level_statement);
6206 END IF;
6207
6208 ----------------------------------------------
6209 -- validate PENALTY_TYPE
6210 ----------------------------------------------
6211
6212 -- PENALTY_TYPE is lookup code in lookup type AR_INTEREST_PENALTY_TYPE
6213 IF p_cust_profile_amt_rec.penalty_type IS NOT NULL AND
6214 p_cust_profile_amt_rec.penalty_type <> FND_API.G_MISS_CHAR AND
6215 ( p_create_update_flag = 'C' OR
6216 ( p_create_update_flag = 'U' AND
6217 p_cust_profile_amt_rec.penalty_type <> NVL( l_penalty_type, FND_API.G_MISS_CHAR ) ) )
6218 THEN
6219 validate_lookup (
6220 p_column => 'penalty_type',
6221 p_lookup_table => 'AR_LOOKUPS',
6222 p_lookup_type => 'AR_INTEREST_PENALTY_TYPE',
6223 p_column_value => p_cust_profile_amt_rec.penalty_type,
6224 x_return_status => x_return_status );
6225
6226 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6227 hz_utility_v2pub.debug(p_message=>'penalty_type is lookup code in lookup type AR_INTEREST_PENALTY_TYPE. ' ||
6228 'x_return_status = ' || x_return_status,
6229 p_prefix =>l_debug_prefix,
6230 p_msg_level=>fnd_log.level_statement);
6231 END IF;
6232
6233 END IF;
6234
6235 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6236 hz_utility_v2pub.debug(p_message=>'(+) after validate penalty_type ... ' ||
6237 'x_return_status = ' || x_return_status,
6238 p_prefix =>l_debug_prefix,
6239 p_msg_level=>fnd_log.level_statement);
6240 END IF;
6241
6242 -- Debug info.
6243
6244 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6245 hz_utility_v2pub.debug(p_message=> 'validate_cust_profile_amt (-)',
6246 p_prefix=>l_debug_prefix,
6247 p_msg_level=>fnd_log.level_procedure);
6248 END IF;
6249
6250 ------------------------------------
6251 -- validate exchange_rate_type
6252 ------------------------------------
6253 -- exchange_rate_type should be a valid value defined in GL_DAILY_CONVERSION_TYPES
6254 -- The type USER is excluded.
6255
6256 IF p_cust_profile_amt_rec.exchange_rate_type is NOT NULL AND
6257 p_cust_profile_amt_rec.exchange_rate_type <> FND_API.G_MISS_CHAR
6258 AND ( p_create_update_flag = 'C' OR
6259 ( p_create_update_flag = 'U' AND
6260 p_cust_profile_amt_rec.exchange_rate_type <> NVL( l_exchange_rate_type, FND_API.G_MISS_CHAR ) ) )
6261 THEN
6262
6263 check_exchange_rate_type_fk(
6264 p_column => 'exchange_rate_type',
6265 p_column_value => p_cust_profile_amt_rec.exchange_rate_type,
6266 x_return_status => x_return_status );
6267
6268 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6269 hz_utility_v2pub.debug(p_message=>'exchange_rate_type should be a valid value defined in GL_DAILY_CONVERSION_TYPES. '||
6270 'x_return_status = ' || x_return_status,
6271 p_prefix =>l_debug_prefix,
6272 p_msg_level=>fnd_log.level_statement);
6273 END IF;
6274
6275 END IF;
6276
6277 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6278 hz_utility_v2pub.debug(p_message=>'(+) after validate exchange_rate_type..' ||
6279 'x_return_status = ' || x_return_status,
6280 p_prefix =>l_debug_prefix,
6281 p_msg_level=>fnd_log.level_statement);
6282 END IF;
6283
6284 ---------------------------------------------------------
6285 -- validate min_fc_invoice_amount, min_fc_invoice_percent
6286 ---------------------------------------------------------
6287 -- min_fc_invoice_amount is populated and mandatory only if min_fc_invoice_overdue_type = AMOUNT.
6288 -- Must be null if (min_fc_invoice_overdue_type = 'PERCENT' OR
6289 -- min_fc_invoice_overdue_type is null)
6290 -- min_fc_invoice_percent is populated and mandatory only if min_fc_invoice_overdue_type = PERCENT.
6291 -- Must be null if (min_fc_invoice_overdue_type = 'AMOUNT' OR
6292 -- min_fc_invoice_overdue_type is null)
6293 -- min_fc_invoice_percent cannot exceed 100.
6294
6295 IF p_create_update_flag = 'U' THEN
6296 IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type is NULL THEN
6297 v_cust_profile_amt_rec.min_fc_invoice_overdue_type := l_min_fc_invoice_overdue_type;
6298 END IF;
6299 IF p_cust_profile_amt_rec.min_fc_invoice_amount is NULL THEN
6300 v_cust_profile_amt_rec.min_fc_invoice_amount := l_min_fc_invoice_amount;
6301 ELSIF p_cust_profile_amt_rec.min_fc_invoice_amount = FND_API.G_MISS_NUM THEN
6302 v_cust_profile_amt_rec.min_fc_invoice_amount := NULL;
6303 END IF;
6304 IF p_cust_profile_amt_rec.min_fc_invoice_percent is NULL THEN
6305 v_cust_profile_amt_rec.min_fc_invoice_percent := l_min_fc_invoice_percent;
6306 ELSIF p_cust_profile_amt_rec.min_fc_invoice_percent = FND_API.G_MISS_NUM THEN
6307 v_cust_profile_amt_rec.min_fc_invoice_percent := NULL;
6308 END IF;
6309 END IF;
6310
6311 IF p_create_update_flag = 'C' THEN
6312 IF p_cust_profile_amt_rec.min_fc_invoice_overdue_type = FND_API.G_MISS_CHAR THEN
6313 v_cust_profile_amt_rec.min_fc_invoice_overdue_type := NULL;
6314 END IF;
6315 IF p_cust_profile_amt_rec.min_fc_invoice_amount = FND_API.G_MISS_NUM THEN
6316 v_cust_profile_amt_rec.min_fc_invoice_amount := NULL;
6317 END IF;
6318 IF p_cust_profile_amt_rec.min_fc_invoice_percent = FND_API.G_MISS_NUM THEN
6319 v_cust_profile_amt_rec.min_fc_invoice_percent := NULL;
6320 END IF;
6321 END IF;
6322
6323 IF v_cust_profile_amt_rec.min_fc_invoice_overdue_type = 'AMOUNT' THEN
6324 IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NULL OR
6325 v_cust_profile_amt_rec.min_fc_invoice_percent IS NOT NULL) THEN
6326 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6327 FND_MSG_PUB.ADD;
6328 x_return_status := FND_API.G_RET_STS_ERROR;
6329 END IF;
6330 ELSIF v_cust_profile_amt_rec.min_fc_invoice_overdue_type = 'PERCENT' THEN
6331 IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NOT NULL OR
6332 v_cust_profile_amt_rec.min_fc_invoice_percent IS NULL) THEN
6333 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6334 FND_MSG_PUB.ADD;
6335 x_return_status := FND_API.G_RET_STS_ERROR;
6336 ELSE
6337 check_less_than_100 (
6338 p_column => 'min_fc_invoice_percent',
6339 p_column_value => v_cust_profile_amt_rec.min_fc_invoice_percent,
6340 x_return_status => x_return_status );
6341
6342 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6343 hz_utility_v2pub.debug(p_message=>'min_fc_invoice_percent should be < 100.' ||'x_return_status = ' ||
6344 x_return_status,
6345 p_prefix =>l_debug_prefix,
6346 p_msg_level=>fnd_log.level_statement);
6347 END IF;
6348 END IF;
6349 ELSE
6350 IF (v_cust_profile_amt_rec.min_fc_invoice_amount IS NOT NULL OR
6351 v_cust_profile_amt_rec.min_fc_invoice_percent IS NOT NULL) THEN
6352 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PERCENT' );
6353 FND_MSG_PUB.ADD;
6354 x_return_status := FND_API.G_RET_STS_ERROR;
6355 END IF;
6356 END IF;
6357
6358 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6359 hz_utility_v2pub.debug(p_message=>' after validate min_fc_invoice_amount and min_fc_invoice_percent..' ||
6360 'x_return_status = ' || x_return_status,
6361 p_prefix =>l_debug_prefix,
6362 p_msg_level=>fnd_log.level_statement);
6363 END IF;
6364
6365 ---------------------------------------------------------
6366 -- validate min_fc_balance_amount, min_fc_balance_percent
6367 ---------------------------------------------------------
6368 -- min_fc_balance_amount is populated and mandatory only if min_fc_balance_overdue_type = AMOUNT.
6369 -- Must be null if (min_fc_balance_overdue_type = 'PERCENT' OR
6370 -- min_fc_balance_overdue_type is null)
6371 -- min_fc_balance_percent is populated and mandatory only if min_fc_balance_overdue_type = PERCENT.
6372 -- Must be null if (min_fc_balance_overdue_type = 'AMOUNT' OR
6373 -- min_fc_balance_overdue_type is null)
6374 -- min_fc_balance_percent cannot exceed 100.
6375
6376 IF p_create_update_flag = 'U' THEN
6377 IF p_cust_profile_amt_rec.min_fc_balance_overdue_type is NULL THEN
6378 v_cust_profile_amt_rec.min_fc_balance_overdue_type := l_min_fc_balance_overdue_type;
6379 END IF;
6380 IF p_cust_profile_amt_rec.min_fc_balance_amount is NULL THEN
6381 v_cust_profile_amt_rec.min_fc_balance_amount := l_min_fc_balance_amount;
6382 ELSIF p_cust_profile_amt_rec.min_fc_balance_amount = FND_API.G_MISS_NUM THEN
6383 v_cust_profile_amt_rec.min_fc_balance_amount := NULL;
6384 END IF;
6385 IF p_cust_profile_amt_rec.min_fc_balance_percent is NULL THEN
6386 v_cust_profile_amt_rec.min_fc_balance_percent := l_min_fc_balance_percent;
6387 ELSIF p_cust_profile_amt_rec.min_fc_balance_percent = FND_API.G_MISS_NUM THEN
6388 v_cust_profile_amt_rec.min_fc_balance_percent := NULL;
6389 END IF;
6390 END IF;
6391
6392 IF p_create_update_flag = 'C' THEN
6393 IF p_cust_profile_amt_rec.min_fc_balance_overdue_type = FND_API.G_MISS_CHAR THEN
6394 v_cust_profile_amt_rec.min_fc_balance_overdue_type := NULL;
6395 END IF;
6396 IF p_cust_profile_amt_rec.min_fc_balance_amount = FND_API.G_MISS_NUM THEN
6397 v_cust_profile_amt_rec.min_fc_balance_amount := NULL;
6398 END IF;
6399 IF p_cust_profile_amt_rec.min_fc_balance_percent = FND_API.G_MISS_NUM THEN
6400 v_cust_profile_amt_rec.min_fc_balance_percent := NULL;
6401 END IF;
6402 END IF;
6403
6404 IF v_cust_profile_amt_rec.min_fc_balance_overdue_type = 'AMOUNT' THEN
6405 IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NULL OR
6406 v_cust_profile_amt_rec.min_fc_balance_percent IS NOT NULL) THEN
6407 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6408 FND_MSG_PUB.ADD;
6409 x_return_status := FND_API.G_RET_STS_ERROR;
6410 END IF;
6411 ELSIF v_cust_profile_amt_rec.min_fc_balance_overdue_type = 'PERCENT' THEN
6412 IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NOT NULL OR
6413 v_cust_profile_amt_rec.min_fc_balance_percent IS NULL) THEN
6414 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6415 FND_MSG_PUB.ADD;
6416 x_return_status := FND_API.G_RET_STS_ERROR;
6417 ELSE
6418 check_less_than_100 (
6419 p_column => 'min_fc_balance_percent',
6420 p_column_value => v_cust_profile_amt_rec.min_fc_balance_percent,
6421 x_return_status => x_return_status );
6422
6423 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6424 hz_utility_v2pub.debug(p_message=>'min_fc_balance_percent should be < 100.' ||'x_return_status = ' ||
6425 x_return_status,
6426 p_prefix =>l_debug_prefix,
6427 p_msg_level=>fnd_log.level_statement);
6428 END IF;
6429 END IF;
6430 ELSE
6431 IF (v_cust_profile_amt_rec.min_fc_balance_amount IS NOT NULL OR
6432 v_cust_profile_amt_rec.min_fc_balance_percent IS NOT NULL) THEN
6433 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_BAL_AMT' );
6434 FND_MSG_PUB.ADD;
6435 x_return_status := FND_API.G_RET_STS_ERROR;
6436 END IF;
6437 END IF;
6438
6439 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6440 hz_utility_v2pub.debug(p_message=>' after validate min_fc_balance_amount and min_fc_balance_percent..' ||
6441 'x_return_status = ' || x_return_status,
6442 p_prefix =>l_debug_prefix,
6443 p_msg_level=>fnd_log.level_statement);
6444 END IF;
6445
6446 -------------------------------------------------------------------------
6447 -- validate interest_rate, interest_fixed_amount and interest_schedule_id
6448 -------------------------------------------------------------------------
6449 -- interest_rate cannot exceed 100. Is populated and mandatory only if interest_type = FIXED_RATE.
6450 -- Must be null if interest_type <> FIXED_RATE OR interest_type is null
6451 -- interest_fixed_amount is populated and mandatory only if interest_type = FIXED_AMOUNT.
6452 -- Must be null if interest_type <> FIXED_AMOUNT OR interest_type is null
6453 -- interest_schedule_id is populated and mandatory if only if interest_type is CHARGES_SCHEDULE or CHARGE_PER_TIER.
6454 -- Validated against ar_charge_schedules.schedule_id.
6455
6456 IF p_create_update_flag = 'U' THEN
6457 IF p_cust_profile_amt_rec.interest_type is NULL THEN
6458 v_cust_profile_amt_rec.interest_type := l_interest_type;
6459 END IF;
6460 IF p_cust_profile_amt_rec.interest_rate is NULL THEN
6461 v_cust_profile_amt_rec.interest_rate := l_interest_rate;
6462 ELSIF p_cust_profile_amt_rec.interest_rate = FND_API.G_MISS_NUM THEN
6463 v_cust_profile_amt_rec.interest_rate := NULL;
6464 END IF;
6465 IF p_cust_profile_amt_rec.interest_fixed_amount is NULL THEN
6466 v_cust_profile_amt_rec.interest_fixed_amount := l_interest_fixed_amount;
6467 ELSIF p_cust_profile_amt_rec.interest_fixed_amount = FND_API.G_MISS_NUM THEN
6468 v_cust_profile_amt_rec.interest_fixed_amount := NULL;
6469 END IF;
6470 IF p_cust_profile_amt_rec.interest_schedule_id is NULL THEN
6471 v_cust_profile_amt_rec.interest_schedule_id := l_interest_schedule_id;
6472 ELSIF p_cust_profile_amt_rec.interest_schedule_id = FND_API.G_MISS_NUM THEN
6473 v_cust_profile_amt_rec.interest_schedule_id := NULL;
6474 END IF;
6475 END IF;
6476
6477 IF p_create_update_flag = 'C' THEN
6478 IF p_cust_profile_amt_rec.interest_type = FND_API.G_MISS_CHAR THEN
6479 v_cust_profile_amt_rec.interest_type := NULL;
6480 END IF;
6481 IF p_cust_profile_amt_rec.interest_rate = FND_API.G_MISS_NUM THEN
6482 v_cust_profile_amt_rec.interest_rate := NULL;
6483 END IF;
6484 IF p_cust_profile_amt_rec.interest_fixed_amount = FND_API.G_MISS_NUM THEN
6485 v_cust_profile_amt_rec.interest_fixed_amount := NULL;
6486 END IF;
6487 IF p_cust_profile_amt_rec.interest_schedule_id = FND_API.G_MISS_NUM THEN
6488 v_cust_profile_amt_rec.interest_schedule_id := NULL;
6489 END IF;
6490 END IF;
6491
6492 IF v_cust_profile_amt_rec.interest_type = 'FIXED_RATE' THEN
6493 IF (v_cust_profile_amt_rec.interest_rate IS NULL OR
6494 v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6495 v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6496 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6497 FND_MSG_PUB.ADD;
6498 x_return_status := FND_API.G_RET_STS_ERROR;
6499 ELSE
6500 check_less_than_100 (
6501 p_column => 'interest_rate',
6502 p_column_value => v_cust_profile_amt_rec.interest_rate,
6503 x_return_status => x_return_status );
6504
6505 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6506 hz_utility_v2pub.debug(p_message=>'interest_rate should be < 100.' ||'x_return_status = ' ||
6507 x_return_status,
6508 p_prefix =>l_debug_prefix,
6509 p_msg_level=>fnd_log.level_statement);
6510 END IF;
6511 END IF;
6512 ELSIF v_cust_profile_amt_rec.interest_type = 'FIXED_AMOUNT' THEN
6513 IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6514 v_cust_profile_amt_rec.interest_fixed_amount IS NULL OR
6515 v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6516 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6517 FND_MSG_PUB.ADD;
6518 x_return_status := FND_API.G_RET_STS_ERROR;
6519 END IF;
6520 /*6469663 Late charge enhacement handling case oftier basis calculation*/
6521 ELSIF v_cust_profile_amt_rec.interest_type IN ( 'CHARGES_SCHEDULE','CHARGE_PER_TIER') THEN
6522 IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6523 v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6524 v_cust_profile_amt_rec.interest_schedule_id IS NULL) THEN
6525 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6526 FND_MSG_PUB.ADD;
6527 x_return_status := FND_API.G_RET_STS_ERROR;
6528 ELSE
6529 check_charge_schedule_id_fk (
6530 p_column => 'interest_schedule_id',
6531 p_column_value => v_cust_profile_amt_rec.interest_schedule_id,
6532 x_return_status => x_return_status );
6533
6534 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6535 hz_utility_v2pub.debug(p_message=>'interest_schedule_id should be a valid value defined in ar_charge_schedules' ||'x_return_status = ' ||
6536 x_return_status,
6537 p_prefix =>l_debug_prefix,
6538 p_msg_level=>fnd_log.level_statement);
6539 END IF;
6540 END IF;
6541 ELSE
6542 IF (v_cust_profile_amt_rec.interest_rate IS NOT NULL OR
6543 v_cust_profile_amt_rec.interest_fixed_amount IS NOT NULL OR
6544 v_cust_profile_amt_rec.interest_schedule_id IS NOT NULL) THEN
6545 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_INT_RATE' );
6546 FND_MSG_PUB.ADD;
6547 x_return_status := FND_API.G_RET_STS_ERROR;
6548 END IF;
6549 END IF;
6550
6551 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6552 hz_utility_v2pub.debug(p_message=>' after validate interest_rate, interest_fixed_amount and interest_schedule_id.' ||
6553 'x_return_status = ' || x_return_status,
6554 p_prefix =>l_debug_prefix,
6555 p_msg_level=>fnd_log.level_statement);
6556 END IF;
6557
6558 -------------------------------------------------------------------------
6559 -- validate penalty_rate, penalty_fixed_amount and penalty_schedule_id
6560 -------------------------------------------------------------------------
6561 -- penalty_rate cannot exceed 100. Is populated and mandatory only if penalty_type = FIXED_RATE.
6562 -- Must be null if penalty_type <> FIXED_RATE OR penalty_type is null
6563 -- penalty_fixed_amount is populated and mandatory only if penalty_type = FIXED_AMOUNT.
6564 -- Must be null if penalty_type <> FIXED_AMOUNT OR penalty_type is null
6565 -- penalty_schedule_id is populated and mandatory if only if penalty_type in CHARGES_SCHEDULE or CHARGE_PER_TIER.
6566 -- Validated against ar_charge_schedules.schedule_id.
6567
6568 IF p_create_update_flag = 'U' THEN
6569 IF p_cust_profile_amt_rec.penalty_type is NULL THEN
6570 v_cust_profile_amt_rec.penalty_type := l_penalty_type;
6571 END IF;
6572 IF p_cust_profile_amt_rec.penalty_rate is NULL THEN
6573 v_cust_profile_amt_rec.penalty_rate := l_penalty_rate;
6574 ELSIF p_cust_profile_amt_rec.penalty_rate = FND_API.G_MISS_NUM THEN
6575 v_cust_profile_amt_rec.penalty_rate := NULL;
6576 END IF;
6577 IF p_cust_profile_amt_rec.penalty_fixed_amount is NULL THEN
6578 v_cust_profile_amt_rec.penalty_fixed_amount := l_penalty_fixed_amount;
6579 ELSIF p_cust_profile_amt_rec.penalty_fixed_amount = FND_API.G_MISS_NUM THEN
6580 v_cust_profile_amt_rec.penalty_fixed_amount := NULL;
6581 END IF;
6582 IF p_cust_profile_amt_rec.penalty_schedule_id is NULL THEN
6583 v_cust_profile_amt_rec.penalty_schedule_id := l_penalty_schedule_id;
6584 ELSIF p_cust_profile_amt_rec.penalty_schedule_id = FND_API.G_MISS_NUM THEN
6585 v_cust_profile_amt_rec.penalty_schedule_id := NULL;
6586 END IF;
6587 END IF;
6588
6589 IF p_create_update_flag = 'C' THEN
6590 IF p_cust_profile_amt_rec.penalty_type = FND_API.G_MISS_CHAR THEN
6591 v_cust_profile_amt_rec.penalty_type := NULL;
6592 END IF;
6593 IF p_cust_profile_amt_rec.penalty_rate = FND_API.G_MISS_NUM THEN
6594 v_cust_profile_amt_rec.penalty_rate := NULL;
6595 END IF;
6596 IF p_cust_profile_amt_rec.penalty_fixed_amount = FND_API.G_MISS_NUM THEN
6597 v_cust_profile_amt_rec.penalty_fixed_amount := NULL;
6598 END IF;
6599 IF p_cust_profile_amt_rec.penalty_schedule_id = FND_API.G_MISS_NUM THEN
6600 v_cust_profile_amt_rec.penalty_schedule_id := NULL;
6601 END IF;
6602 END IF;
6603
6604 IF v_cust_profile_amt_rec.penalty_type = 'FIXED_RATE' THEN
6605 IF (v_cust_profile_amt_rec.penalty_rate IS NULL OR
6606 v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6607 v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6608 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6609 FND_MSG_PUB.ADD;
6610 x_return_status := FND_API.G_RET_STS_ERROR;
6611 ELSE
6612 check_less_than_100 (
6613 p_column => 'penalty_rate',
6614 p_column_value => v_cust_profile_amt_rec.penalty_rate,
6615 x_return_status => x_return_status );
6616
6617 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6618 hz_utility_v2pub.debug(p_message=>'penalty_rate should be < 100.' ||'x_return_status = ' ||
6619 x_return_status,
6620 p_prefix =>l_debug_prefix,
6621 p_msg_level=>fnd_log.level_statement);
6622 END IF;
6623 END IF;
6624 ELSIF v_cust_profile_amt_rec.penalty_type = 'FIXED_AMOUNT' THEN
6625 IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6626 v_cust_profile_amt_rec.penalty_fixed_amount IS NULL OR
6627 v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6628 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6629 FND_MSG_PUB.ADD;
6630 x_return_status := FND_API.G_RET_STS_ERROR;
6631 END IF;
6632 /*6469663 Late charge enhacement handling case oftier basis calculation*/
6633 ELSIF v_cust_profile_amt_rec.penalty_type IN ('CHARGES_SCHEDULE','CHARGE_PER_TIER') THEN
6634 IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6635 v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6636 v_cust_profile_amt_rec.penalty_schedule_id IS NULL) THEN
6637 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6638 FND_MSG_PUB.ADD;
6639 x_return_status := FND_API.G_RET_STS_ERROR;
6640 ELSE
6641 check_charge_schedule_id_fk (
6642 p_column => 'penalty_schedule_id',
6643 p_column_value => v_cust_profile_amt_rec.penalty_schedule_id,
6644 x_return_status => x_return_status );
6645
6646 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6647 hz_utility_v2pub.debug(p_message=>'penalty_schedule_id should be a valid value defined in ar_charge_schedules' ||'x_return_status = ' ||
6648 x_return_status,
6649 p_prefix =>l_debug_prefix,
6650 p_msg_level=>fnd_log.level_statement);
6651 END IF;
6652 END IF;
6653 ELSE
6654 IF (v_cust_profile_amt_rec.penalty_rate IS NOT NULL OR
6655 v_cust_profile_amt_rec.penalty_fixed_amount IS NOT NULL OR
6656 v_cust_profile_amt_rec.penalty_schedule_id IS NOT NULL) THEN
6657 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_INVALID_PEN_RATE' );
6658 FND_MSG_PUB.ADD;
6659 x_return_status := FND_API.G_RET_STS_ERROR;
6660 END IF;
6661 END IF;
6662
6663 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6664 hz_utility_v2pub.debug(p_message=>' after validate penalty_rate, penalty_fixed_amount and penalty_schedule_id.' ||
6665 'x_return_status = ' || x_return_status,
6666 p_prefix =>l_debug_prefix,
6667 p_msg_level=>fnd_log.level_statement);
6668 END IF;
6669
6670 END validate_cust_profile_amt;
6671
6672 /**
6673 * PROCEDURE validate_cust_acct_site
6674 *
6675 * DESCRIPTION
6676 * Validates customer account site record. Checks for
6677 * uniqueness
6678 * lookup types
6679 * mandatory columns
6680 * non-updateable fields
6681 * foreign key validations
6682 * other validations
6683 *
6684 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
6685 *
6686 * ARGUMENTS
6687 * IN:
6688 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
6689 * p_cust_acct_site_rec Customer account site record.
6690 * p_rowid Rowid of the record (used only in update mode).
6691 * IN/OUT:
6692 * x_return_status Return status after the call. The status can
6693 * be FND_API.G_RET_STS_SUCCESS (success),
6694 * FND_API.G_RET_STS_ERROR (error),
6695 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6696 *
6697 * NOTES
6698 *
6699 * MODIFICATION HISTORY
6700 *
6701 * 07-23-2001 Jianying Huang o Created.
6702 * 10-25-2002 P.Suresh o Bug No : 2528119. Added validation for ece_tp_location_code
6703 * in validate_cust_acct_site procedure.
6704 * 12-MAY-2005 Rajib Ranjan Borah o TCA SSA Uptake (Bug 3456489)
6705 */
6706
6707 PROCEDURE validate_cust_acct_site (
6708 p_create_update_flag IN VARCHAR2,
6709 p_cust_acct_site_rec IN HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_ACCT_SITE_REC_TYPE,
6710 p_rowid IN ROWID,
6711 x_return_status IN OUT NOCOPY VARCHAR2
6712 ) IS
6713
6714 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_acct_site'
6715
6716 l_dummy VARCHAR2(1);
6717 l_rowid ROWID := NULL;
6718
6719 l_cust_account_id NUMBER;
6720 l_party_site_id NUMBER;
6721 l_orig_system_reference HZ_CUST_ACCT_SITES.orig_system_reference%TYPE;
6722 l_orig_system_reference1 HZ_CUST_ACCOUNTS.orig_system_reference%TYPE;
6723 l_created_by_module HZ_CUST_ACCT_SITES.created_by_module%TYPE;
6724 l_application_id NUMBER;
6725 l_status HZ_CUST_ACCT_SITES.status%TYPE;
6726 l_customer_category_code HZ_CUST_ACCT_SITES.customer_category_code%TYPE;
6727 l_count NUMBER := 0;
6728 l_instr_length number := 0;
6729 l_validate_flag varchar2(1) := 'Y';
6730 l_mosr_owner_table_id number;
6731
6732 l_temp_return_status VARCHAR2(10); -- for storing return status from
6733 -- hz_orig_system_ref_pub.get_owner_table_id
6734
6735 BEGIN
6736
6737 -- Check if API is called in debug mode. If yes, enable debug.
6738 --enable_debug;
6739
6740 -- Debug info.
6741
6742 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6743 hz_utility_v2pub.debug(p_message=>'validate_cust_acct_site (+)',
6744 p_prefix=>l_debug_prefix,
6745 p_msg_level=>fnd_log.level_procedure);
6746 END IF;
6747
6748
6749 -- Select fields for later use during update.
6750 IF p_create_update_flag = 'U' THEN
6751 SELECT CUST_ACCOUNT_ID, PARTY_SITE_ID, ORIG_SYSTEM_REFERENCE,
6752 CREATED_BY_MODULE, APPLICATION_ID, STATUS, CUSTOMER_CATEGORY_CODE
6753 INTO l_cust_account_id, l_party_site_id, l_orig_system_reference,
6754 l_created_by_module, l_application_id, l_status, l_customer_category_code
6755 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
6756 WHERE ROWID = p_rowid;
6757 END IF;
6758
6759 --------------------------------------
6760 -- validate cust_acct_site_id
6761 --------------------------------------
6762 /****Logical APIs - validation not required****/
6763 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6764 IF p_create_update_flag = 'C' THEN
6765
6766 -- If primary key value is passed, check for uniqueness.
6767 -- If primary key value is not passed, it will be generated
6768 -- from sequence by table handler.
6769
6770 IF p_cust_acct_site_rec.cust_acct_site_id IS NOT NULL AND
6771 p_cust_acct_site_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
6772 THEN
6773 BEGIN
6774 SELECT 'Y' INTO l_dummy
6775 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
6776 WHERE CUST_ACCT_SITE_ID = p_cust_acct_site_rec.cust_acct_site_id;
6777
6778 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
6779 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id' );
6780 FND_MSG_PUB.ADD;
6781 x_return_status := FND_API.G_RET_STS_ERROR;
6782 EXCEPTION
6783 WHEN NO_DATA_FOUND THEN
6784 NULL;
6785 END;
6786
6787 -- Debug info.
6788
6789 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6790 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is unique during creation if passed in. ' ||
6791 'x_return_status = ' || x_return_status,
6792 p_prefix =>l_debug_prefix,
6793 p_msg_level=>fnd_log.level_statement);
6794 END IF;
6795 END IF;
6796 END IF;
6797
6798 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6799 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
6800 'x_return_status = ' || x_return_status,
6801 p_prefix =>l_debug_prefix,
6802 p_msg_level=>fnd_log.level_statement);
6803 END IF;
6804 END IF;
6805
6806 ----------------------------------------------
6807 -- validate cust_account_id
6808 ----------------------------------------------
6809 /****Logical APIs - validation not required****/
6810 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6811 -- cust_account_id is mandatory field
6812 -- Since cust_account_id is non-updateable filed, we only need to check mandatory
6813 -- during creation.
6814
6815 IF p_create_update_flag = 'C' THEN
6816 validate_mandatory (
6817 p_create_update_flag => p_create_update_flag,
6818 p_column => 'cust_account_id',
6819 p_column_value => p_cust_acct_site_rec.cust_account_id,
6820 x_return_status => x_return_status );
6821
6822 -- Debug info.
6823
6824 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6825 hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
6826 'x_return_status = ' || x_return_status,
6827 p_prefix =>l_debug_prefix,
6828 p_msg_level=>fnd_log.level_statement);
6829 END IF;
6830 END IF;
6831
6832 -- cust_account_id is non-updateable field
6833 IF p_create_update_flag = 'U' AND
6834 p_cust_acct_site_rec.cust_account_id IS NOT NULL
6835 THEN
6836 validate_nonupdateable (
6837 p_column => 'cust_account_id',
6838 p_column_value => p_cust_acct_site_rec.cust_account_id,
6839 p_old_column_value => l_cust_account_id,
6840 x_return_status => x_return_status );
6841
6842 -- Debug info.
6843
6844 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6845 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
6846 'x_return_status = ' || x_return_status,
6847 p_prefix =>l_debug_prefix,
6848 p_msg_level=>fnd_log.level_statement);
6849 END IF;
6850 END IF;
6851
6852 -- cust_account_id is foreign key of hz_cust_accounts
6853 -- Do not need to check during update because cust_account_id is
6854 -- non-updateable.
6855 IF p_create_update_flag = 'C' THEN
6856 IF p_cust_acct_site_rec.cust_account_id <> -1 AND
6857 p_cust_acct_site_rec.cust_account_id IS NOT NULL AND
6858 p_cust_acct_site_rec.cust_account_id <> FND_API.G_MISS_NUM
6859 THEN
6860 check_cust_account_fk (
6861 p_column => 'cust_account_id',
6862 p_column_value => p_cust_acct_site_rec.cust_account_id,
6863 x_return_status => x_return_status );
6864
6865 -- Debug info.
6866
6867 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6868 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key of hz_cust_accounts. ' ||
6869 'x_return_status = ' || x_return_status,
6870 p_prefix =>l_debug_prefix,
6871 p_msg_level=>fnd_log.level_statement);
6872 END IF;
6873 END IF;
6874 END IF;
6875
6876 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6877 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
6878 'x_return_status = ' || x_return_status,
6879 p_prefix =>l_debug_prefix,
6880 p_msg_level=>fnd_log.level_statement);
6881 END IF;
6882 END IF;
6883
6884 ----------------------------------------------
6885 -- validate party_site_id
6886 ----------------------------------------------
6887 /****Logical APIs - validation not required****/
6888 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6889 -- party_site_id is mandatory field
6890 -- Since party_site_id is non-updateable filed, we only need to check mandatory
6891 -- during creation.
6892
6893 IF p_create_update_flag = 'C' THEN
6894 validate_mandatory (
6895 p_create_update_flag => p_create_update_flag,
6896 p_column => 'party_site_id',
6897 p_column_value => p_cust_acct_site_rec.party_site_id,
6898 x_return_status => x_return_status );
6899
6900 -- Debug info.
6901
6902 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6903 hz_utility_v2pub.debug(p_message=>'party_site_id is mandatory. ' ||
6904 'x_return_status = ' || x_return_status,
6905 p_prefix =>l_debug_prefix,
6906 p_msg_level=>fnd_log.level_statement);
6907 END IF;
6908 END IF;
6909
6910 -- party_site_id is non-updateable field
6911 IF p_create_update_flag = 'U' AND
6912 p_cust_acct_site_rec.party_site_id IS NOT NULL
6913 THEN
6914 validate_nonupdateable (
6915 p_column => 'party_site_id',
6916 p_column_value => p_cust_acct_site_rec.party_site_id,
6917 p_old_column_value => l_party_site_id,
6918 x_return_status => x_return_status );
6919
6920 -- Debug info.
6921
6922 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6923 hz_utility_v2pub.debug(p_message=>'party_site_id is non-updateable. ' ||
6924 'x_return_status = ' || x_return_status,
6925 p_prefix =>l_debug_prefix,
6926 p_msg_level=>fnd_log.level_statement);
6927 END IF;
6928 END IF;
6929
6930 -- party_site_id is foreign key of hz_party_sites
6931 -- Do not need to check during update because party_site_id is
6932 -- non-updateable.
6933 IF p_create_update_flag = 'C' AND
6934 p_cust_acct_site_rec.party_site_id IS NOT NULL AND
6935 p_cust_acct_site_rec.party_site_id <> FND_API.G_MISS_NUM
6936 THEN
6937 check_party_site_fk (
6938 p_column => 'party_site_id',
6939 p_column_value => p_cust_acct_site_rec.party_site_id,
6940 x_return_status => x_return_status );
6941
6942 -- Debug info.
6943
6944 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6945 hz_utility_v2pub.debug(p_message=>'party_site_id is foreign key of hz_party_sites. ' ||
6946 'x_return_status = ' || x_return_status,
6947 p_prefix =>l_debug_prefix,
6948 p_msg_level=>fnd_log.level_statement);
6949 END IF;
6950
6951
6952
6953 -- Bug 2197181: Because of Mix-n-Match project, location from 3rd party content
6954 -- providers can now be used in the business flow. Therefore, removing restriction
6955 -- that the "party_site_id must link to a 'USER_ENTERED' location".
6956
6957 /*
6958
6959 --- party_site_id must link to a 'USER_ENTERED' location
6960 BEGIN
6961 SELECT 'Y' INTO l_dummy
6962 FROM HZ_LOCATIONS
6963 WHERE LOCATION_ID = (
6964 SELECT LOCATION_ID
6965 FROM HZ_PARTY_SITES
6966 WHERE PARTY_SITE_ID = p_cust_acct_site_rec.party_site_id )
6967 AND CONTENT_SOURCE_TYPE = HZ_PARTY_V2PUB.G_MISS_CONTENT_SOURCE_TYPE;
6968
6969 EXCEPTION
6970 WHEN NO_DATA_FOUND THEN
6971 FND_MESSAGE.SET_NAME( 'AR', 'HZ_LOC_CONTENT_INVALID' );
6972 FND_MSG_PUB.ADD;
6973 x_return_status := FND_API.G_RET_STS_ERROR;
6974 END;
6975
6976 -- Debug info.
6977 IF G_DEBUG THEN
6978 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6979 'party_site_id must link to a USER_ENTERED location. ' ||
6980 'x_return_status = ' || x_return_status, l_debug_prefix );
6981 END IF;
6982
6983 */
6984
6985
6986 -- cust_account_id and party_site_id together should be unique.
6987 -- Bug 3456489. Post MOAC, this uniqueness should be within orgs.
6988 BEGIN
6989 SELECT 'Y' INTO l_dummy
6990 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
6991 WHERE CUST_ACCOUNT_ID = p_cust_acct_site_rec.cust_account_id
6992 AND PARTY_SITE_ID = p_cust_acct_site_rec.party_site_id
6993 AND ORG_ID = p_cust_acct_site_rec.org_id -- Bug 3456489
6994 AND ROWNUM = 1;
6995
6996 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
6997 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_site_id' );
6998 FND_MSG_PUB.ADD;
6999 x_return_status := FND_API.G_RET_STS_ERROR;
7000 EXCEPTION
7001 WHEN NO_DATA_FOUND THEN
7002 NULL;
7003 END;
7004
7005 -- Debug info.
7006
7007 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7008 hz_utility_v2pub.debug(p_message=>'cust_account_id and party_site_id together should be unique. ' ||
7009 'x_return_status = ' || x_return_status,
7010 p_prefix =>l_debug_prefix,
7011 p_msg_level=>fnd_log.level_statement);
7012 END IF;
7013 END IF;
7014
7015 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7016 hz_utility_v2pub.debug(p_message=>'(+) after validate party_site_id ... ' ||
7017 'x_return_status = ' || x_return_status,
7018 p_prefix =>l_debug_prefix,
7019 p_msg_level=>fnd_log.level_statement);
7020 END IF;
7021 END IF;
7022
7023 ----------------------------------------------
7024 -- validate orig_system_reference
7025 ----------------------------------------------
7026 /****Logical APIs - validation not required****/
7027 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7028 -- orig_system_reference is unique. Since orig_system_refence is defaulting to
7029 -- primary key, we only need to check the uniqueness if user passes some value.
7030 -- database constraints can catch unique error when we defaulting.
7031 -- orig_system_reference is non-updateable, we only need to check uniqueness
7032 -- during creation.
7036 p_cust_acct_site_rec.orig_system_reference IS NOT NULL AND
7033
7034 -- Bug 3456489. Post MOAC, this uniqeness should be within orgs.
7035 IF p_create_update_flag = 'C' AND
7037 p_cust_acct_site_rec.orig_system_reference <> FND_API.G_MISS_CHAR
7038 THEN
7039 BEGIN
7040 SELECT 'Y' INTO l_dummy
7041 FROM HZ_CUST_ACCT_SITES_ALL
7042 WHERE ORIG_SYSTEM_REFERENCE = p_cust_acct_site_rec.orig_system_reference
7043 AND ORG_ID = p_cust_acct_site_rec.org_id;
7044
7045 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7046 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'orig_system_reference' );
7047 FND_MSG_PUB.ADD;
7048 x_return_status := FND_API.G_RET_STS_ERROR;
7049 EXCEPTION
7050 WHEN NO_DATA_FOUND THEN
7051 NULL;
7052 END;
7053
7054 -- Debug info.
7055
7056 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7057 hz_utility_v2pub.debug(p_message=>'orig_system_reference is unique if passed in. ' ||
7058 'x_return_status = ' || x_return_status,
7059 p_prefix =>l_debug_prefix,
7060 p_msg_level=>fnd_log.level_statement);
7061 END IF;
7062
7063 END IF;
7064
7065 -- orig_system_reference is non-updateable field
7066 l_instr_length := instr(l_orig_system_reference,'#@');
7067 if l_instr_length > 0
7068 then
7069 l_orig_system_reference1 := null;
7070 if substr(l_orig_system_reference,1,l_instr_length-1) <> p_cust_acct_site_rec.orig_system_reference
7071 then
7072 l_validate_flag := 'N';
7073 end if;
7074 else
7075 l_orig_system_reference1 := p_cust_acct_site_rec.orig_system_reference;
7076 end if;
7077
7078 IF (p_cust_acct_site_rec.orig_system is not null and p_cust_acct_site_rec.orig_system <>fnd_api.g_miss_char)
7079 and (p_cust_acct_site_rec.orig_system_reference is not null and p_cust_acct_site_rec.orig_system_reference <>fnd_api.g_miss_char)
7080 and p_create_update_flag = 'U'
7081 then
7082 hz_orig_system_ref_pub.get_owner_table_id
7083 (p_orig_system => p_cust_acct_site_rec.orig_system,
7084 p_orig_system_reference => p_cust_acct_site_rec.orig_system_reference,
7085 p_owner_table_name => 'HZ_CUST_ACCT_SITES_ALL',
7086 x_owner_table_id => l_mosr_owner_table_id,
7087 x_return_status => l_temp_return_status);
7088
7089 IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
7090 l_mosr_owner_table_id= nvl(p_cust_acct_site_rec.cust_acct_site_id,l_mosr_owner_table_id))
7091 THEN
7092 l_validate_flag := 'N';
7093 END IF;
7094
7095 -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
7096 -- x_return_status. Set x_return_status to error, ONLY if there is error.
7097 -- In case of success, leave it to carry over previous value as before this call.
7098 -- Fix for Bug 5498116 (29-AUG-2006)
7099 IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
7100 x_return_status := l_temp_return_status;
7101 END IF;
7102
7103 end if;
7104 -- orig_system_reference is non-updateable field
7105 IF p_create_update_flag = 'U' AND
7106 p_cust_acct_site_rec.orig_system_reference IS NOT NULL
7107 and l_validate_flag = 'Y'
7108 THEN
7109 validate_nonupdateable (
7110 p_column => 'orig_system_reference',
7111 p_column_value => p_cust_acct_site_rec.orig_system_reference,
7112 p_old_column_value => l_orig_system_reference,
7113 x_return_status => x_return_status );
7114
7115 -- Debug info.
7116
7117 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7118 hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
7119 'x_return_status = ' || x_return_status,
7120 p_prefix =>l_debug_prefix,
7121 p_msg_level=>fnd_log.level_statement);
7122 END IF;
7123 END IF;
7124
7125 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7126 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
7127 'x_return_status = ' || x_return_status,
7128 p_prefix =>l_debug_prefix,
7129 p_msg_level=>fnd_log.level_statement);
7130 END IF;
7131 END IF;
7132
7133 --------------------------------------
7134 -- validate tp_header_id
7135 --------------------------------------
7136
7137 -- We have unique index on tp_header_id
7138
7139 IF p_cust_acct_site_rec.tp_header_id IS NOT NULL AND
7140 p_cust_acct_site_rec.tp_header_id <> FND_API.G_MISS_NUM
7141 THEN
7142 BEGIN
7143 SELECT ROWID INTO l_rowid
7144 FROM HZ_CUST_ACCT_SITES_ALL
7145 WHERE TP_HEADER_ID = p_cust_acct_site_rec.tp_header_id
7146 AND ORG_ID = p_cust_acct_site_rec.org_id; -- Bug 3456489
7147
7148 IF p_create_update_flag = 'C' OR
7149 ( p_create_update_flag = 'U' AND l_rowid <> p_rowid )
7150 THEN
7151 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7152 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'tp_header_id' );
7153 FND_MSG_PUB.ADD;
7154 x_return_status := FND_API.G_RET_STS_ERROR;
7155 END IF;
7156 EXCEPTION
7157 WHEN NO_DATA_FOUND THEN
7158 NULL;
7159 END;
7160
7161 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7162 hz_utility_v2pub.debug(p_message=>'tp_header_id is unique if passed in. ' ||
7163 'x_return_status = ' || x_return_status,
7164 p_prefix =>l_debug_prefix,
7165 p_msg_level=>fnd_log.level_statement);
7166 END IF;
7167
7168 END IF;
7169
7170 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7171 hz_utility_v2pub.debug(p_message=>'(+) after validate tp_header_id ... ' ||
7172 'x_return_status = ' || x_return_status,
7173 p_prefix =>l_debug_prefix,
7174 p_msg_level=>fnd_log.level_statement);
7175 END IF;
7176
7177 --------------------------------------
7178 -- validate status
7179 --------------------------------------
7180
7181 -- status cannot be set to null during update
7182 IF p_create_update_flag = 'U' AND
7183 p_cust_acct_site_rec.status IS NOT NULL
7184 THEN
7185 validate_cannot_update_to_null (
7186 p_column => 'status',
7187 p_column_value => p_cust_acct_site_rec.status,
7188 x_return_status => x_return_status );
7189
7190 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7191 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
7192 'x_return_status = ' || x_return_status,
7193 p_prefix =>l_debug_prefix,
7194 p_msg_level=>fnd_log.level_statement);
7195 END IF;
7196 END IF;
7197
7198 /****Logical APIs - validation not required****/
7199 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7200 -- status is lookup code in lookup type CODE_STATUS
7201 IF p_cust_acct_site_rec.status IS NOT NULL AND
7202 p_cust_acct_site_rec.status <> FND_API.G_MISS_CHAR AND
7203 ( p_create_update_flag = 'C' OR
7204 ( p_create_update_flag = 'U' AND
7205 p_cust_acct_site_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
7206 THEN
7207 validate_lookup (
7208 p_column => 'status',
7209 p_lookup_type => 'CODE_STATUS',
7210 p_column_value => p_cust_acct_site_rec.status,
7211 x_return_status => x_return_status );
7212
7213 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7214 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
7215 'x_return_status = ' || x_return_status,
7216 p_prefix =>l_debug_prefix,
7217 p_msg_level=>fnd_log.level_statement);
7218 END IF;
7219
7220 END IF;
7221
7222 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7223 hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
7224 'x_return_status = ' || x_return_status,
7225 p_prefix =>l_debug_prefix,
7226 p_msg_level=>fnd_log.level_statement);
7227 END IF;
7228 END IF;
7229
7230 ----------------------------------------------
7231 -- validate customer_category_code
7232 ----------------------------------------------
7233
7234 -- customer_category_code is lookup code in lookup type ADDRESS_CATEGORY
7235 IF p_cust_acct_site_rec.customer_category_code IS NOT NULL AND
7236 p_cust_acct_site_rec.customer_category_code <> FND_API.G_MISS_CHAR AND
7237 ( p_create_update_flag = 'C' OR
7238 ( p_create_update_flag = 'U' AND
7239 p_cust_acct_site_rec.customer_category_code <> NVL( l_customer_category_code, FND_API.G_MISS_CHAR ) ) )
7240 THEN
7241 validate_lookup (
7242 p_column => 'customer_category_code',
7243 p_lookup_type => 'ADDRESS_CATEGORY',
7244 p_column_value => p_cust_acct_site_rec.customer_category_code,
7245 x_return_status => x_return_status );
7246
7247 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7248 hz_utility_v2pub.debug(p_message=>'customer_category_code is lookup code in lookup type ADDRESS_CATEGORY. ' ||
7249 'x_return_status = ' || x_return_status,
7250 p_prefix =>l_debug_prefix,
7251 p_msg_level=>fnd_log.level_statement);
7252 END IF;
7253 END IF;
7254
7255 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7256 hz_utility_v2pub.debug(p_message=>'(+) after validate customer_category_code ... ' ||
7257 'x_return_status = ' || x_return_status,
7258 p_prefix =>l_debug_prefix,
7259 p_msg_level=>fnd_log.level_statement);
7260 END IF;
7261
7262 /* comment out the validation as the language column is obsoleted in r12
7263 ----------------------------------------------
7264 -- validate language
7265 ----------------------------------------------
7266
7267 -- language is foreign key of fnd installed languages
7268 IF p_cust_acct_site_rec.language IS NOT NULL AND
7269 p_cust_acct_site_rec.language <> FND_API.G_MISS_CHAR
7270 THEN
7271 BEGIN
7272 SELECT 'Y' INTO l_dummy
7273 FROM FND_LANGUAGES
7274 WHERE LANGUAGE_CODE = p_cust_acct_site_rec.language
7275 AND INSTALLED_FLAG IN ('B', 'I')
7276 AND ROWNUM = 1;
7277 EXCEPTION
7278 WHEN NO_DATA_FOUND THEN
7279 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
7280 FND_MESSAGE.SET_TOKEN( 'FK', 'language' );
7281 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'language_code' );
7282 FND_MESSAGE.SET_TOKEN( 'TABLE', 'fnd_languages(installed)' );
7283 FND_MSG_PUB.ADD;
7284 x_return_status := FND_API.G_RET_STS_ERROR;
7285 END;
7286
7287 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7288 hz_utility_v2pub.debug(p_message=>'language is foreign key of fnd installed languages. ' ||
7289 'x_return_status = ' || x_return_status,
7290 p_prefix =>l_debug_prefix,
7291 p_msg_level=>fnd_log.level_statement);
7292 END IF;
7293
7294 END IF;
7295
7296 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7297 hz_utility_v2pub.debug(p_message=>'(+) after validate language ... ' ||
7298 'x_return_status = ' || x_return_status,
7299 p_prefix =>l_debug_prefix,
7300 p_msg_level=>fnd_log.level_statement);
7301 END IF;
7302 */
7303
7304 --------------------------------------
7305 -- validate primary_specialist_id
7306 --------------------------------------
7307
7308 -- primary_specialist_id is foreign key to per_all_people_f
7309 IF p_cust_acct_site_rec.primary_specialist_id IS NOT NULL AND
7310 p_cust_acct_site_rec.primary_specialist_id <> FND_API.G_MISS_NUM
7311 THEN
7312 check_per_all_people_f_fk (
7313 p_column => 'primary_specialist_id',
7314 p_column_value => p_cust_acct_site_rec.primary_specialist_id,
7315 x_return_status => x_return_status );
7316
7317 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7318 hz_utility_v2pub.debug(p_message=>'primary_specialist_id is foreign key to per_all_people_f. ' ||
7319 'x_return_status = ' || x_return_status,
7320 p_prefix =>l_debug_prefix,
7321 p_msg_level=>fnd_log.level_statement);
7322 END IF;
7323 END IF;
7324
7325 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7326 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_specialist_id ... ' ||
7327 'x_return_status = ' || x_return_status,
7328 p_prefix =>l_debug_prefix,
7329 p_msg_level=>fnd_log.level_statement);
7330 END IF;
7331
7332 --------------------------------------
7333 -- validate secondary_specialist_id
7334 --------------------------------------
7335
7336 -- secondary_specialist_id is foreign key to per_all_people_f
7337 IF p_cust_acct_site_rec.secondary_specialist_id IS NOT NULL AND
7338 p_cust_acct_site_rec.secondary_specialist_id <> FND_API.G_MISS_NUM
7339 THEN
7340 /* Bug 3591694 Changed foreign key validation from check_cust_account_fk to
7341 check_per_all_people_f_fk.
7342 */
7343 -- check_cust_account_fk (
7344 check_per_all_people_f_fk(
7345 p_column => 'secondary_specialist_id',
7346 p_column_value => p_cust_acct_site_rec.secondary_specialist_id,
7347 x_return_status => x_return_status );
7348
7349 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7350 hz_utility_v2pub.debug(p_message=>'secondary_specialist_id is foreign key to per_all_people_f. ' ||
7351 'x_return_status = ' || x_return_status,
7352 p_prefix =>l_debug_prefix,
7353 p_msg_level=>fnd_log.level_statement);
7354 END IF;
7355 END IF;
7356
7357 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7358 hz_utility_v2pub.debug(p_message=>'(+) after validate secondary_specialist_id ... ' ||
7359 'x_return_status = ' || x_return_status,
7360 p_prefix =>l_debug_prefix,
7361 p_msg_level=>fnd_log.level_statement);
7362 END IF;
7363
7364 --------------------------------------
7365 -- validate created_by_module
7366 --------------------------------------
7367
7368 validate_created_by_module(
7369 p_create_update_flag => p_create_update_flag,
7370 p_created_by_module => p_cust_acct_site_rec.created_by_module,
7371 p_old_created_by_module => l_created_by_module,
7372 x_return_status => x_return_status);
7373
7374 --------------------------------------
7375 -- validate application_id
7376 --------------------------------------
7377
7378 validate_application_id(
7379 p_create_update_flag => p_create_update_flag,
7380 p_application_id => p_cust_acct_site_rec.application_id,
7381 p_old_application_id => l_application_id,
7382 x_return_status => x_return_status);
7383
7384 --------------------------------------
7385 -- validate ece_tp_location_code
7386 --------------------------------------
7387 IF p_create_update_flag = 'C' THEN
7388 IF p_cust_acct_site_rec.cust_account_id <> -1 AND
7389 p_cust_acct_site_rec.cust_account_id IS NOT NULL AND
7390 p_cust_acct_site_rec.cust_account_id <> FND_API.G_MISS_NUM
7391 THEN
7392 IF p_cust_acct_site_rec.ece_tp_location_code IS NOT NULL AND
7393 p_cust_acct_site_rec.ece_tp_location_code <> FND_API.G_MISS_CHAR
7394 THEN
7395 select count(1)
7396 into l_count
7397 from hz_cust_acct_sites_all addr -- Bug 3456489
7398 where addr.cust_account_id = p_cust_acct_site_rec.cust_account_id
7399 and addr.ece_tp_location_code = p_cust_acct_site_rec.ece_tp_location_code
7400 and org_id = p_cust_acct_site_rec.org_id; -- Bug 3456489
7401
7402 IF l_count > 0 THEN
7403 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ADDR_EDI_LOC_EXISTS' );
7404 FND_MSG_PUB.ADD;
7405 x_return_status := FND_API.G_RET_STS_ERROR;
7406 END IF;
7407 END IF;
7408 END IF;
7409 ELSIF p_create_update_flag = 'U' THEN
7410 IF p_cust_acct_site_rec.ece_tp_location_code IS NOT NULL AND
7411 p_cust_acct_site_rec.ece_tp_location_code <> FND_API.G_MISS_CHAR
7412 THEN
7413 select count(1)
7414 into l_count
7415 from hz_cust_acct_sites_all addr -- Bug 3456489
7416 where addr.cust_account_id = l_cust_account_id
7417 and addr.ece_tp_location_code = p_cust_acct_site_rec.ece_tp_location_code
7418 and addr.cust_acct_site_id <> p_cust_acct_site_rec.cust_acct_site_id
7419 and org_id = p_cust_acct_site_rec.org_id; -- Bug 3456489
7420
7421 IF l_count > 0 THEN
7422 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ADDR_EDI_LOC_EXISTS' );
7423 FND_MSG_PUB.ADD;
7424 x_return_status := FND_API.G_RET_STS_ERROR;
7425 END IF;
7426 END IF;
7427 END IF;
7428
7429 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7430 hz_utility_v2pub.debug(p_message=>'The ece_tp_location_code should be unique for a customer ' ||
7431 'x_return_status = ' || x_return_status,
7432 p_prefix =>l_debug_prefix,
7433 p_msg_level=>fnd_log.level_statement);
7434 END IF;
7435
7436 -- Debug info.
7437
7438 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7439 hz_utility_v2pub.debug(p_message=>'validate_cust_acct_site (-)',
7440 p_prefix=>l_debug_prefix,
7441 p_msg_level=>fnd_log.level_procedure);
7442 END IF;
7443
7444 -- Check if API is called in debug mode. If yes, disable debug.
7445 --disable_debug;
7446
7447 END validate_cust_acct_site;
7448
7449 /**
7450 * PROCEDURE validate_cust_site_use
7451 *
7452 * DESCRIPTION
7453 * Validates customer account site use record. Checks for
7454 * uniqueness
7455 * lookup types
7456 * mandatory columns
7457 * non-updateable fields
7458 * foreign key validations
7459 * other validations
7460 *
7461 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
7462 *
7463 * ARGUMENTS
7464 * IN:
7465 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
7466 * p_cust_site_use_rec Customer account site use record.
7467 * p_rowid Rowid of the record (used only in update mode).
7468 * IN/OUT:
7469 * x_return_status Return status after the call. The status can
7470 * be FND_API.G_RET_STS_SUCCESS (success),
7471 * FND_API.G_RET_STS_ERROR (error),
7472 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
7473 *
7474 * NOTES
7475 *
7476 * MODIFICATION HISTORY
7477 *
7478 * 07-23-2001 Jianying Huang o Created.
7479 * 11-08-2001 Rajeshwari P Added validations for fields, tax_code,payment_term_id,
7480 * demand_class_codeprimary_salesrep_id,finchrg_receivables_trx_id,
7481 * order_type_id,order_type_id,ship_partial,item_cross_ref_pref,
7482 * warehouse_id,date_type_preference,
7483 * ship_sets_include_lines_flag and arrivalsets_include_lines_flag
7484 * in procedure VALIDATE_CUST_SITE_USE.
7485 * 03-26-2002 P.Suresh Bug No : 2266165. Added the check that bill_to_flag of
7486 * hz_cust_acct_relate_all table should be Y when validating
7487 * bill_to_site_use_id.
7488 * 04-11-2002 P.Suresh Bug No : 2260832. Added the check for the status
7489 * when validating that only one primary is allowed for
7490 * one site use type per account in the procedure
7491 * validate_cust_site_use.
7492 * 21-05-2002 Rajeshwari P Bug fix 2311760.Commented the code which validates the
7493 * Obsolete column ship_partial.
7494 * 06-13-2002 P.Suresh Bug No : 2403263. Added validation that the contact_id
7495 * should be a foreign key to hz_cust_account_roles.
7496 * cust_account_role_id.
7497 * 06-19-2002 Rajeshwari P Bug 2399491.Validating site_use_id for duplicates
7498 * against hz_cust_site_uses_all table instead of the
7499 * org stripped view, hz_cust_site_uses.
7500 * 03-May-3004 Venkata Sowjanya S Bug No : 3609601. Commented the statements which sets tokens Column1,Column2
7501 * for message HZ_API_INACTIVE_CANNOT_PRIM
7502 * 12-MAY-2005 Rajib Ranjan Borah o TCA SSA Uptake (Bug 3456489)
7503 */
7504
7505 PROCEDURE validate_cust_site_use (
7506 p_create_update_flag IN VARCHAR2,
7507 p_cust_site_use_rec IN HZ_CUST_ACCOUNT_SITE_V2PUB.CUST_SITE_USE_REC_TYPE,
7508 p_rowid IN ROWID,
7509 x_return_status IN OUT NOCOPY VARCHAR2
7510 ) IS
7511
7512 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_site_use'
7513
7514 l_dummy VARCHAR2(1);
7515 l_profile AR_SYSTEM_PARAMETERS.auto_site_numbering%TYPE;
7516
7517 l_cust_acct_site_id NUMBER;
7518 l_site_use_code HZ_CUST_SITE_USES.site_use_code%TYPE;
7519 l_cust_account_id NUMBER;
7520 l_orig_system_reference HZ_CUST_SITE_USES.orig_system_reference%TYPE;
7521 l_created_by_module HZ_CUST_SITE_USES.created_by_module%TYPE;
7522 l_application_id NUMBER;
7523 l_status HZ_CUST_SITE_USES.status%TYPE;
7524 l_ship_via HZ_CUST_SITE_USES.ship_via%TYPE;
7525 l_freight_term HZ_CUST_SITE_USES.freight_term%TYPE;
7526 l_ship_sets_inc_lines_f HZ_CUST_SITE_USES.ship_sets_include_lines_flag%TYPE;
7527 l_arrivalsets_inc_lines_f HZ_CUST_SITE_USES.arrivalsets_include_lines_flag%TYPE;
7528 l_tax_code HZ_CUST_SITE_USES.tax_code%TYPE;
7529 l_payment_term_id HZ_CUST_SITE_USES.payment_term_id%TYPE;
7530 l_demand_class_code HZ_CUST_SITE_USES.demand_class_code%TYPE;
7531 l_primary_salesrep_id HZ_CUST_SITE_USES.primary_salesrep_id%TYPE;
7532 l_finchrg_receivables_trx_id HZ_CUST_SITE_USES.FINCHRG_RECEIVABLES_TRX_ID%TYPE;
7533 l_order_type_id HZ_CUST_SITE_USES.ORDER_TYPE_ID%TYPE;
7534 l_price_list_id HZ_CUST_SITE_USES.PRICE_LIST_ID%TYPE;
7535 -- l_ship_partial HZ_CUST_SITE_USES.SHIP_PARTIAL%TYPE;
7536 l_fob_point HZ_CUST_SITE_USES.FOB_POINT%TYPE;
7537 l_item_cross_ref_pref HZ_CUST_SITE_USES.ITEM_CROSS_REF_PREF%TYPE;
7538 l_warehouse_id HZ_CUST_SITE_USES.WAREHOUSE_ID%TYPE;
7539 l_date_type_preference HZ_CUST_SITE_USES.DATE_TYPE_PREFERENCE%TYPE;
7540 -- l_ship_sets_include_lines_flag HZ_CUST_SITE_USES.SHIP_SETS_INCLUDE_LINES_FLAG%TYPE;
7541 l_primary_flag HZ_CUST_SITE_USES.PRIMARY_FLAG%TYPE;
7542 l_error BOOLEAN := FALSE;
7543 l_validate_flag varchar2(1) := 'Y';
7544 l_mosr_owner_table_id number;
7545 l_coa_id NUMBER;
7546 l_exist_flag VARCHAR2(1);
7547
7548 l_temp_return_status VARCHAR2(10); -- for storing return status from
7549 -- hz_orig_system_ref_pub.get_owner_table_id
7550
7551 BEGIN
7552
7553 -- Check if API is called in debug mode. If yes, enable debug.
7554 --enable_debug;
7555 -- Debug info.
7556
7557 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7558 hz_utility_v2pub.debug(p_message=>'validate_cust_site_use (+)',
7559 p_prefix=>l_debug_prefix,
7560 p_msg_level=>fnd_log.level_procedure);
7561 END IF;
7562
7563
7564
7565 -- Select fields for later use during update.
7566 IF p_create_update_flag = 'U' THEN
7567 SELECT CUST_ACCT_SITE_ID, SITE_USE_CODE, ORIG_SYSTEM_REFERENCE,
7568 CREATED_BY_MODULE, APPLICATION_ID, STATUS, SHIP_VIA, FREIGHT_TERM,
7569 SHIP_SETS_INCLUDE_LINES_FLAG,ARRIVALSETS_INCLUDE_LINES_FLAG,
7570 TAX_CODE,DEMAND_CLASS_CODE,PRIMARY_SALESREP_ID,FINCHRG_RECEIVABLES_TRX_ID,
7571 ORDER_TYPE_ID,PRICE_LIST_ID,FOB_POINT,ITEM_CROSS_REF_PREF,
7572 WAREHOUSE_ID,DATE_TYPE_PREFERENCE
7573 INTO l_cust_acct_site_id, l_site_use_code, l_orig_system_reference,
7574 l_created_by_module, l_application_id, l_status, l_ship_via, l_freight_term,
7575 l_ship_sets_inc_lines_f,l_arrivalsets_inc_lines_f,l_tax_code,l_demand_class_code,
7576 l_primary_salesrep_id,l_finchrg_receivables_trx_id,l_order_type_id,l_price_list_id,
7577 l_fob_point,l_item_cross_ref_pref,l_warehouse_id,l_date_type_preference
7578 FROM HZ_CUST_SITE_USES_ALL -- Bug 3456489
7579 WHERE ROWID = p_rowid;
7580 END IF;
7581
7582 --------------------------------------
7583 -- validate site_use_id
7584 --------------------------------------
7585 /****Logical APIs - validation not required****/
7586 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7587 IF p_create_update_flag = 'C' THEN
7588
7589 -- If primary key value is passed, check for uniqueness.
7590 -- If primary key value is not passed, it will be generated
7591 -- from sequence by table handler.
7592
7593 --Bug Fix 2399491, Checking for duplicates in the _all table.
7594
7595 IF p_cust_site_use_rec.site_use_id IS NOT NULL AND
7596 p_cust_site_use_rec.site_use_id <> FND_API.G_MISS_NUM
7597 THEN
7598 BEGIN
7599 SELECT 'Y' INTO l_dummy
7600 FROM HZ_CUST_SITE_USES_ALL
7601 WHERE SITE_USE_ID = p_cust_site_use_rec.site_use_id;
7602
7603 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7604 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_site_use_id' );
7605 FND_MSG_PUB.ADD;
7606 x_return_status := FND_API.G_RET_STS_ERROR;
7607 EXCEPTION
7608 WHEN NO_DATA_FOUND THEN
7609 NULL;
7610 END;
7611
7612 -- Debug info.
7613
7614 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7615 hz_utility_v2pub.debug(p_message=>'site_use_id is unique during creation if passed in. ' ||
7616 'x_return_status = ' || x_return_status,
7617 p_prefix =>l_debug_prefix,
7618 p_msg_level=>fnd_log.level_statement);
7619 END IF;
7620
7621 END IF;
7622 END IF;
7623
7624 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7625 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_id ... ' ||
7626 'x_return_status = ' || x_return_status,
7627 p_prefix =>l_debug_prefix,
7628 p_msg_level=>fnd_log.level_statement);
7629 END IF;
7630 END IF;
7631
7632 ----------------------------------------------
7633 -- validate cust_acct_site_id
7634 ----------------------------------------------
7635 /****Logical APIs - validation not required****/
7636 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7637 -- cust_acct_site_id is mandatory field
7638 -- Since cust_acct_site_id is non-updateable, we only need to check mandatory
7639 -- during creation.
7640
7641 IF p_create_update_flag = 'C' THEN
7642 validate_mandatory (
7643 p_create_update_flag => p_create_update_flag,
7644 p_column => 'cust_acct_site_id',
7645 p_column_value => p_cust_site_use_rec.cust_acct_site_id,
7646 x_return_status => x_return_status );
7647
7648 -- for later use. It is selected from database during update.
7649 l_cust_acct_site_id := p_cust_site_use_rec.cust_acct_site_id;
7650
7651 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7652 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is mandatory. ' ||
7653 'x_return_status = ' || x_return_status,
7654 p_prefix =>l_debug_prefix,
7655 p_msg_level=>fnd_log.level_statement);
7656 END IF;
7657 END IF;
7658
7659 -- cust_acct_site_id is non-updateable field
7660 IF p_create_update_flag = 'U' AND
7661 p_cust_site_use_rec.cust_acct_site_id IS NOT NULL
7662 THEN
7663 validate_nonupdateable (
7664 p_column => 'cust_acct_site_id',
7665 p_column_value => p_cust_site_use_rec.cust_acct_site_id,
7666 p_old_column_value => l_cust_acct_site_id,
7667 x_return_status => x_return_status );
7668
7669 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7670 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is non-updateable. ' ||
7671 'x_return_status = ' || x_return_status,
7672 p_prefix =>l_debug_prefix,
7673 p_msg_level=>fnd_log.level_statement);
7674 END IF;
7675 END IF;
7676
7677 -- Since cust_acct_site_id is mandatory and non-updateable, we only need
7678 -- to check FK during site use creation.
7679
7680 -- cust_acct_site_id is foreign key to hz_cust_acct_sites
7681 IF p_create_update_flag = 'C' AND
7682 p_cust_site_use_rec.cust_acct_site_id IS NOT NULL AND
7683 p_cust_site_use_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
7684 THEN
7685 check_cust_acct_site_fk (
7686 p_column => 'cust_acct_site_id',
7687 p_column_value => p_cust_site_use_rec.cust_acct_site_id,
7688 p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
7689 x_return_status => x_return_status );
7690
7691 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7692 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is foreign key to hz_cust_acct_sites. ' ||
7693 'x_return_status = ' || x_return_status,
7694 p_prefix =>l_debug_prefix,
7695 p_msg_level=>fnd_log.level_statement);
7696 END IF;
7697 END IF;
7698
7699 -- Find customer account id this site use belongs to.
7700 -- For later use.
7701
7702 SELECT CUST_ACCOUNT_ID INTO l_cust_account_id
7703 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
7704 WHERE CUST_ACCT_SITE_ID = l_cust_acct_site_id;
7705
7706 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7707 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
7708 'x_return_status = ' || x_return_status,
7709 p_prefix =>l_debug_prefix,
7710 p_msg_level=>fnd_log.level_statement);
7711 END IF;
7712 END IF;
7713
7714 --------------------------------------
7715 -- validate status
7716 --------------------------------------
7717
7718 -- status cannot be set to null during update
7719 IF p_create_update_flag = 'U' AND
7720 p_cust_site_use_rec.status IS NOT NULL
7721 THEN
7722 validate_cannot_update_to_null (
7723 p_column => 'status',
7724 p_column_value => p_cust_site_use_rec.status,
7725 x_return_status => x_return_status );
7726
7727 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7728 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
7729 'x_return_status = ' || x_return_status,
7730 p_prefix =>l_debug_prefix,
7731 p_msg_level=>fnd_log.level_statement);
7732 END IF;
7733 END IF;
7734
7735 /****Logical APIs - validation not required****/
7736 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7737 -- status is lookup code in lookup type CODE_STATUS
7738 IF p_cust_site_use_rec.status IS NOT NULL AND
7739 p_cust_site_use_rec.status <> FND_API.G_MISS_CHAR AND
7740 ( p_create_update_flag = 'C' OR
7741 ( p_create_update_flag = 'U' AND
7742 p_cust_site_use_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
7743 THEN
7744 validate_lookup (
7745 p_column => 'status',
7746 p_lookup_type => 'CODE_STATUS',
7747 p_column_value => p_cust_site_use_rec.status,
7748 x_return_status => x_return_status );
7749
7750 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7751 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
7752 'x_return_status = ' || x_return_status,
7753 p_prefix =>l_debug_prefix,
7754 p_msg_level=>fnd_log.level_statement);
7755 END IF;
7756 END IF;
7757 END IF;
7758
7759 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7760 hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
7761 'x_return_status = ' || x_return_status,
7762 p_prefix =>l_debug_prefix,
7763 p_msg_level=>fnd_log.level_statement);
7764 END IF;
7765
7766 ----------------------------------------------
7767 -- validate site_use_code
7768 ----------------------------------------------
7769
7770 -- site_use_code is mandatory field
7771 -- Since site_use_code is non-updateable, we only need to check mandatory
7772 -- during creation.
7773
7774 IF p_create_update_flag = 'C' THEN
7775 validate_mandatory (
7776 p_create_update_flag => p_create_update_flag,
7777 p_column => 'site_use_code',
7778 p_column_value => p_cust_site_use_rec.site_use_code,
7779 x_return_status => x_return_status );
7780
7781 -- for later use. It is selected from database during update.
7782 l_site_use_code := p_cust_site_use_rec.site_use_code;
7783
7784 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7785 hz_utility_v2pub.debug(p_message=>'site_use_code is mandatory. ' ||
7786 'x_return_status = ' || x_return_status,
7787 p_prefix =>l_debug_prefix,
7788 p_msg_level=>fnd_log.level_statement);
7789 END IF;
7790 END IF;
7791
7792 -- site_use_code is non-updateable field
7793 IF p_create_update_flag = 'U' AND
7794 p_cust_site_use_rec.site_use_code IS NOT NULL
7795 THEN
7796 validate_nonupdateable (
7797 p_column => 'site_use_code',
7798 p_column_value => p_cust_site_use_rec.site_use_code,
7799 p_old_column_value => l_site_use_code,
7800 x_return_status => x_return_status );
7801
7802 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7803 hz_utility_v2pub.debug(p_message=>'site_use_code is non-updateable. ' ||
7804 'x_return_status = ' || x_return_status,
7805 p_prefix =>l_debug_prefix,
7806 p_msg_level=>fnd_log.level_statement);
7807 END IF;
7808 END IF;
7809
7810 -- site_use_code is lookup code in lookup type SITE_USE_CODE
7811 -- Since site_use_code is non-updateable, we only need to do the checking
7812 -- during creation.
7813
7814 IF p_create_update_flag = 'C' AND
7815 p_cust_site_use_rec.site_use_code IS NOT NULL AND
7816 p_cust_site_use_rec.site_use_code <> FND_API.G_MISS_CHAR
7817 THEN
7818 validate_lookup (
7819 p_column => 'site_use_code',
7820 p_lookup_type => 'SITE_USE_CODE',
7821 p_column_value => p_cust_site_use_rec.site_use_code,
7822 x_return_status => x_return_status );
7823
7824 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7825 hz_utility_v2pub.debug(p_message=>'site_use_code is lookup code in lookup type SITE_USE_CODE. ' ||
7826 'x_return_status = ' || x_return_status,
7827 p_prefix =>l_debug_prefix,
7828 p_msg_level=>fnd_log.level_statement);
7829 END IF;
7830 END IF;
7831
7832 -- l_status is selected from database during update.
7833
7834 IF p_cust_site_use_rec.status = 'A' OR
7835 ( p_create_update_flag = 'C' AND
7836 ( p_cust_site_use_rec.status IS NULL OR
7837 p_cust_site_use_rec.status = FND_API.G_MISS_CHAR ) ) OR
7838 ( p_create_update_flag = 'U' AND
7839 p_cust_site_use_rec.status IS NULL AND
7840 l_status = 'A' )
7841 THEN
7842
7843 -- A customer can have only one active DUN, STMTS, LEGAL site use
7844
7845 IF l_site_use_code IN ( 'DUN', 'STMTS', 'LEGAL' ) THEN
7846 BEGIN
7847 SELECT 'Y' INTO l_dummy
7848 FROM HZ_CUST_ACCT_SITES_ALL site,
7849 HZ_CUST_SITE_USES_ALL su
7850 WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
7851 AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
7852 AND su.SITE_USE_CODE = l_site_use_code
7853 AND su.STATUS = 'A'
7854 AND ( p_create_update_flag = 'C' OR
7855 p_create_update_flag = 'U' AND su.ROWID <> p_rowid )
7856 AND site.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
7857 AND su.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
7858 AND ROWNUM = 1;
7859
7860 IF l_site_use_code = 'DUN' THEN
7861 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_DUN_SITE' );
7862 ELSIF l_site_use_code = 'LEGAL' THEN
7863 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_LEGAL_SITE' );
7864 ELSIF l_site_use_code = 'STMTS' THEN
7865 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_ACTIVE_STMTS_SITE' );
7866 END IF;
7867
7868 FND_MSG_PUB.ADD;
7869 x_return_status := FND_API.G_RET_STS_ERROR;
7870
7871 EXCEPTION
7872 WHEN NO_DATA_FOUND THEN
7873 NULL;
7874 END;
7875 END IF;
7876
7877 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7878 hz_utility_v2pub.debug(p_message=>'A customer can have only one active DUN, STMTS, LEGAL site use. ' ||
7879 'x_return_status = ' || x_return_status,
7880 p_prefix =>l_debug_prefix,
7881 p_msg_level=>fnd_log.level_statement);
7882 END IF;
7883 END IF;
7884
7885 -- cust_acct_site_id and site_use_code together should be unique.
7886
7887 -- Bug 3988537.
7888 BEGIN
7889 SELECT 'Y' INTO l_dummy
7890 FROM HZ_CUST_SITE_USES_ALL -- Bug 3456489
7891 WHERE CUST_ACCT_SITE_ID = nvl(p_cust_site_use_rec.cust_acct_site_id,l_cust_acct_site_id)
7892 AND SITE_USE_CODE = nvl(p_cust_site_use_rec.site_use_code,l_site_use_code)
7893 AND SITE_USE_ID <> nvl(p_cust_site_use_rec.site_use_id,fnd_api.g_miss_num)
7894 AND STATUS = 'A'
7895 AND ORG_ID = p_cust_site_use_rec.org_id -- Bug 3456489
7896 AND ROWNUM = 1;
7897
7898 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
7899 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - site_use_code' );
7900 FND_MSG_PUB.ADD;
7901 x_return_status := FND_API.G_RET_STS_ERROR;
7902 EXCEPTION
7903 WHEN NO_DATA_FOUND THEN
7904 NULL;
7905 END;
7906
7907 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7908 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id and site_use_code together should be unique. ' ||
7909 'x_return_status = ' || x_return_status,
7910 p_prefix =>l_debug_prefix,
7911 p_msg_level=>fnd_log.level_statement);
7912 END IF;
7913
7914
7915 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7916 hz_utility_v2pub.debug(p_message=>'(+) after validate site_use_code ... ' ||
7917 'x_return_status = ' || x_return_status,
7918 p_prefix =>l_debug_prefix,
7919 p_msg_level=>fnd_log.level_statement);
7920 END IF;
7921
7922 ----------------------------------------------
7923 -- validate location
7924 ----------------------------------------------
7925
7926 -- location should be mandatory.
7927
7928 -- check if need generate location.
7929 -- BEGIN
7930
7931 /* 3456489 Refer new HZ_Cache instead of AR System Parameters */
7932
7933 BEGIN
7934 IF (p_create_update_flag = 'C') THEN
7935 l_profile := HZ_MO_GLOBAL_CACHE.get_auto_site_numbering(
7936 p_cust_site_use_rec.org_id);
7937 END IF;
7938 EXCEPTION
7939 WHEN NO_DATA_FOUND THEN
7940 x_return_status := FND_API.G_RET_STS_ERROR;
7941 END ;
7942
7943
7944 IF p_create_update_flag = 'C' THEN
7945 IF p_cust_site_use_rec.location IS NULL OR
7946 p_cust_site_use_rec.location = FND_API.G_MISS_CHAR
7947 THEN
7948 IF l_profile = 'N' THEN
7949 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
7950 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'location' );
7951 FND_MSG_PUB.ADD;
7952 x_return_status := FND_API.G_RET_STS_ERROR;
7953 END IF;
7954
7955 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7956 hz_utility_v2pub.debug(p_message=>'location is mandatory if autonumbering is set to N. ' ||
7957 'x_return_status = ' || x_return_status,
7958 p_prefix =>l_debug_prefix,
7959 p_msg_level=>fnd_log.level_statement);
7960 END IF;
7961
7962 END IF;
7963 ELSIF p_create_update_flag = 'U' AND
7964 p_cust_site_use_rec.location IS NOT NULL
7965 THEN
7966 -- location cannot be set to null during update
7967 validate_cannot_update_to_null (
7968 p_column => 'location',
7969 p_column_value => p_cust_site_use_rec.location,
7970 x_return_status => x_return_status );
7971
7972 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7973 hz_utility_v2pub.debug(p_message=>'location cannot be updated to null. ' ||
7974 'x_return_status = ' || x_return_status,
7975 p_prefix =>l_debug_prefix,
7976 p_msg_level=>fnd_log.level_statement);
7977 END IF;
7978
7979 END IF;
7980
7981 -- location must be unique within a customer account/site_use_type
7982
7983 IF p_cust_site_use_rec.location IS NOT NULL AND
7984 p_cust_site_use_rec.location <> FND_API.G_MISS_CHAR
7985 THEN
7986 BEGIN
7987
7988 --Bug No : 2998504. Status check added to the where clause.
7989
7990 SELECT 'Y' INTO l_dummy
7991 FROM HZ_CUST_ACCT_SITES_ALL site,
7992 HZ_CUST_SITE_USES_ALL su
7993 WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
7994 AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
7995 AND su.SITE_USE_CODE = l_site_use_code
7996 AND su.LOCATION = p_cust_site_use_rec.location
7997 AND ( p_create_update_flag = 'C' OR
7998 p_create_update_flag = 'U' AND su.ROWID <> p_rowid )
7999 AND su.STATUS = 'A'
8000 AND site.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8001 AND su.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8002 AND ROWNUM = 1;
8003
8004
8005 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_DUP_CODE_LOCATION' );
8006 FND_MSG_PUB.ADD;
8007 x_return_status := FND_API.G_RET_STS_ERROR;
8008
8009 EXCEPTION
8010 WHEN NO_DATA_FOUND THEN
8011 NULL;
8012 END;
8013
8014 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8015 hz_utility_v2pub.debug(p_message=>'location must be unique within a customer account/site_use_type. ' ||
8016 'x_return_status = ' || x_return_status,
8017 p_prefix =>l_debug_prefix,
8018 p_msg_level=>fnd_log.level_statement);
8019 END IF;
8020
8021 END IF;
8022
8023 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8024 hz_utility_v2pub.debug(p_message=>'(+) after validate location ... ' ||
8025 'x_return_status = ' || x_return_status,
8026 p_prefix =>l_debug_prefix,
8027 p_msg_level=>fnd_log.level_statement);
8028 END IF;
8029
8030 ----------------------------------------------
8031 -- validate contact_id
8032 ----------------------------------------------
8033 IF p_cust_site_use_rec.contact_id IS NOT NULL AND
8034 p_cust_site_use_rec.contact_id <> FND_API.G_MISS_NUM
8035 THEN
8036 check_cust_site_use_cont_fk (
8037 p_column => 'cust_account_role_id',
8038 p_column_value => p_cust_site_use_rec.contact_id,
8039 p_customer_id => l_cust_account_id,
8040 x_return_status => x_return_status );
8041
8042 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8043 hz_utility_v2pub.debug(p_message=>'contact_id is foreign key to hz_cust_account_roles. ' ||
8044 'x_return_status = ' || x_return_status,
8045 p_prefix =>l_debug_prefix,
8046 p_msg_level=>fnd_log.level_statement);
8047 END IF;
8048
8049 END IF;
8050 ----------------------------------------------
8051 -- validate bill_to_site_use_id
8052 ----------------------------------------------
8053
8054 -- For SHIP_TO site use, bill_to_site_use_id should be a valid
8055 -- BILL_TO site use of this account and its related account.
8056 -- For other type of site uses, this column should be NULL.
8057 -- Bug No : 2266165. Added the check for bill_to_flag.
8058 IF p_cust_site_use_rec.bill_to_site_use_id IS NOT NULL AND
8059 p_cust_site_use_rec.bill_to_site_use_id <> FND_API.G_MISS_NUM
8060 THEN
8061 IF l_site_use_code = 'SHIP_TO' THEN
8062 BEGIN
8063 SELECT 'Y' INTO l_dummy
8064 FROM HZ_CUST_ACCT_SITES_ALL site,
8065 HZ_CUST_SITE_USES_ALL su
8066 WHERE su.SITE_USE_ID = p_cust_site_use_rec.bill_to_site_use_id
8067 AND su.SITE_USE_CODE = 'BILL_TO'
8068 AND su.STATUS = 'A'
8069 AND site.CUST_ACCT_SITE_ID = su.CUST_ACCT_SITE_ID
8070 AND site.STATUS = 'A'
8071 AND site.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8072 AND su.org_id = p_cust_site_use_rec.org_id -- Bug 3456489
8073 AND site.CUST_ACCOUNT_ID IN (
8074 SELECT l_cust_account_id
8075 FROM DUAL
8076 UNION
8077 SELECT CUST_ACCOUNT_ID
8078 FROM HZ_CUST_ACCT_RELATE_ALL
8079 WHERE RELATED_CUST_ACCOUNT_ID = l_cust_account_id
8080 AND BILL_TO_FLAG = 'Y' );
8081 EXCEPTION
8082 WHEN NO_DATA_FOUND THEN
8083 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BILL_TO_SITE_USE_F' );
8084 FND_MSG_PUB.ADD;
8085 x_return_status := FND_API.G_RET_STS_ERROR;
8086 END;
8087
8088 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8089 hz_utility_v2pub.debug(p_message=>'For SHIP_TO site use, bill_to_site_use_id should be a valid BILL_TO site use of this account and its related account. ' ||
8090 'x_return_status = ' || x_return_status,
8091 p_prefix =>l_debug_prefix,
8092 p_msg_level=>fnd_log.level_statement);
8093 END IF;
8094
8095 ELSE
8096 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BILL_TO_SITE_USE_S' );
8097 FND_MSG_PUB.ADD;
8098 x_return_status := FND_API.G_RET_STS_ERROR;
8099 END IF;
8100 END IF;
8101
8102
8103 -- Bug 2836888.
8104 -- For BILL_TO site use, it should not be allowed
8105 -- to be inactivated if there exists active SHIP_TO uses
8106 -- with bill_to_site_id as the site_use_id of this 'BILL_TO'
8107 -- site use.
8108 IF p_create_update_flag = 'U'
8109 and p_cust_site_use_rec.status = 'I'
8110 and l_status = 'A'
8111 and nvl(p_cust_site_use_rec.site_use_code,l_site_use_code)='BILL_TO'
8112 THEN
8113 BEGIN
8114 SELECT 'Y'
8115 INTO l_exist_flag
8116 FROM hz_cust_site_uses_all hsu
8117 WHERE hsu.site_use_code = 'SHIP_TO'
8118 AND hsu.status = 'A'
8119 AND hsu.bill_to_site_use_id = p_cust_site_use_rec.site_use_id
8120 AND rownum = 1;
8121
8122 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_SHIP_TO_SITES_EXIST' );
8123 FND_MSG_PUB.ADD;
8124 x_return_status := FND_API.G_RET_STS_ERROR;
8125
8126 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8127 hz_utility_v2pub.debug(p_message=>'For BILL_TO site use, inactivation not allowed if a SHIP_TO address uses this BILL_TO address ' ||
8128 'x_return_status = ' || x_return_status,
8129 p_prefix =>l_debug_prefix,
8130 p_msg_level=>fnd_log.level_statement);
8131 END IF;
8132
8133 EXCEPTION
8134 WHEN NO_DATA_FOUND THEN NULL;
8135 END;
8136 END IF;
8137
8138 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8139 hz_utility_v2pub.debug(p_message=>'(+) after validate bill_to_site_use_id ... ' ||
8140 'x_return_status = ' || x_return_status,
8141 p_prefix =>l_debug_prefix,
8142 p_msg_level=>fnd_log.level_statement);
8143 END IF;
8144
8145
8146
8147
8148 ----------------------------------------------
8149 -- validate orig_system_reference
8150 ----------------------------------------------
8151 /****Logical APIs - validation not required****/
8152 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8153 IF (p_cust_site_use_rec.orig_system is not null and p_cust_site_use_rec.orig_system <>fnd_api.g_miss_char)
8154 and (p_cust_site_use_rec.orig_system_reference is not null and p_cust_site_use_rec.orig_system_reference <>fnd_api.g_miss_char)
8155 and p_create_update_flag = 'U'
8156 THEN
8157
8158 hz_orig_system_ref_pub.get_owner_table_id
8159 (p_orig_system => p_cust_site_use_rec.orig_system,
8160 p_orig_system_reference => p_cust_site_use_rec.orig_system_reference,
8161 p_owner_table_name =>'HZ_CUST_SITE_USES_ALL',
8162 x_owner_table_id => l_mosr_owner_table_id,
8163 x_return_status => l_temp_return_status);
8164
8165 IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
8166 l_mosr_owner_table_id= nvl(p_cust_site_use_rec.site_use_id,l_mosr_owner_table_id))
8167 THEN
8168 l_validate_flag := 'N';
8169 END IF;
8170
8171 -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
8172 -- x_return_status. Set x_return_status to error, ONLY if there is error.
8173 -- In case of success, leave it to carry over previous value as before this call.
8174 -- Fix for Bug 5498116 (29-AUG-2006)
8175 IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
8176 x_return_status := l_temp_return_status;
8177 END IF;
8178
8179 end if;
8180 -- orig_system_reference is non-updateable field
8181 IF p_create_update_flag = 'U' AND
8182 p_cust_site_use_rec.orig_system_reference IS NOT NULL
8183 and l_validate_flag = 'Y'
8184 THEN
8185 validate_nonupdateable (
8186 p_column => 'orig_system_reference',
8187 p_column_value => p_cust_site_use_rec.orig_system_reference,
8188 p_old_column_value => l_orig_system_reference,
8189 x_return_status => x_return_status );
8190
8191 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8192 hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
8193 'x_return_status = ' || x_return_status,
8194 p_prefix =>l_debug_prefix,
8195 p_msg_level=>fnd_log.level_statement);
8196 END IF;
8197
8198 END IF;
8199 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8200 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
8201 'x_return_status = ' || x_return_status,
8202 p_prefix =>l_debug_prefix,
8203 p_msg_level=>fnd_log.level_statement);
8204 END IF;
8205 END IF;
8206
8207 ----------------------------------------------
8208 -- validate freight_term
8209 ----------------------------------------------
8210
8211 -- freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups
8212 IF p_cust_site_use_rec.freight_term IS NOT NULL AND
8213 p_cust_site_use_rec.freight_term <> FND_API.G_MISS_CHAR AND
8214 ( p_create_update_flag = 'C' OR
8215 ( p_create_update_flag = 'U' AND
8216 p_cust_site_use_rec.freight_term <> NVL( l_freight_term, FND_API.G_MISS_CHAR ) ) )
8217 THEN
8218 validate_lookup (
8219 p_column => 'freight_term',
8220 p_lookup_table => 'SO_LOOKUPS',
8221 p_lookup_type => 'FREIGHT_TERMS',
8222 p_column_value => p_cust_site_use_rec.freight_term,
8223 x_return_status => x_return_status );
8224
8225 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8226 hz_utility_v2pub.debug(p_message=>'freight_term is lookup code in lookup type FREIGHT_TERMS in so_lookups. ' ||
8227 'x_return_status = ' || x_return_status,
8228 p_prefix =>l_debug_prefix,
8229 p_msg_level=>fnd_log.level_statement);
8230 END IF;
8231 END IF;
8232
8233 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8234 hz_utility_v2pub.debug(p_message=>'(+) after validate freight_term ... ' ||
8235 'x_return_status = ' || x_return_status,
8236 p_prefix =>l_debug_prefix,
8237 p_msg_level=>fnd_log.level_statement);
8238 END IF;
8239
8240 ----------------------------------------------
8241 -- validate primary_flag
8242 ----------------------------------------------
8243
8244 -- primary_flag cannot be set to null during update
8245 IF p_create_update_flag = 'U' AND
8246 p_cust_site_use_rec.primary_flag IS NOT NULL
8247 THEN
8248 validate_cannot_update_to_null (
8249 p_column => 'primary_flag',
8250 p_column_value => p_cust_site_use_rec.primary_flag,
8251 x_return_status => x_return_status );
8252
8253 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8254 hz_utility_v2pub.debug(p_message=>'primary_flag cannot be updated to NULL. ' ||
8255 'x_return_status = ' || x_return_status,
8256 p_prefix =>l_debug_prefix,
8257 p_msg_level=>fnd_log.level_statement);
8258 END IF;
8259
8260 END IF;
8261
8262 /****Logical APIs - validation not required****/
8263 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8264 -- primary_flag is lookup code in lookup type YES/NO
8265 IF p_cust_site_use_rec.primary_flag IS NOT NULL AND
8266 p_cust_site_use_rec.primary_flag <> FND_API.G_MISS_CHAR
8267 THEN
8268 validate_lookup (
8269 p_column => 'primary_flag',
8270 p_lookup_type => 'YES/NO',
8271 p_column_value => p_cust_site_use_rec.primary_flag,
8272 x_return_status => x_return_status );
8273
8274 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8275 hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
8276 'x_return_status = ' || x_return_status,
8277 p_prefix =>l_debug_prefix,
8278 p_msg_level=>fnd_log.level_statement);
8279 END IF;
8280
8281 END IF;
8282 END IF;
8283
8284 -- only one primary is allowed for one site use type per account
8285 -- Bug Fix : 2260832
8286 -- Bug 2643624 Removing the below validation so as to enable the setting
8287 -- of another site use as primary.
8288 /*
8289
8290 IF p_cust_site_use_rec.primary_flag = 'Y'
8291 THEN
8292 BEGIN
8293 SELECT 'Y' INTO l_dummy
8294 FROM HZ_CUST_ACCT_SITES site,
8295 HZ_CUST_SITE_USES su
8296 WHERE site.CUST_ACCOUNT_ID = l_cust_account_id
8297 AND su.CUST_ACCT_SITE_ID = site.CUST_ACCT_SITE_ID
8298 AND su.SITE_USE_CODE = l_site_use_code
8299 AND su.PRIMARY_FLAG = 'Y'
8300 --Bug 2792589 AND su.STATUS = 'Y'
8301 AND su.STATUS = 'A'
8302 AND ( p_create_update_flag = 'C' OR
8303 (p_create_update_flag = 'U' AND su.ROWID <> p_rowid ))
8304 AND ROWNUM = 1;
8305
8306 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ONE_PRIMARY_SU' );
8307 FND_MESSAGE.SET_TOKEN( 'SITE_CODE', l_site_use_code );
8308 FND_MSG_PUB.ADD;
8309 x_return_status := FND_API.G_RET_STS_ERROR;
8310
8311 EXCEPTION
8312 WHEN NO_DATA_FOUND THEN
8313 NULL;
8314 END;
8315
8316 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8317 hz_utility_v2pub.debug(p_message=>'only one primary is allowed for one site use type per account. ' ||
8318 'x_return_status = ' || x_return_status,
8319 p_prefix =>l_debug_prefix,
8320 p_msg_level=>fnd_log.level_statement);
8321 END IF;
8322
8323 END IF;
8324 */
8325
8326 -- check to ensure that an inactive site use is never marked
8327 -- as primary.
8328 IF p_create_update_flag = 'C' THEN
8329 IF p_cust_site_use_rec.primary_flag IS NULL OR
8330 p_cust_site_use_rec.primary_flag = fnd_api.g_miss_char
8331 THEN
8332 l_primary_flag := 'N';
8333 ELSE
8334 l_primary_flag := p_cust_site_use_rec.primary_flag;
8335 END IF;
8336
8337 IF p_cust_site_use_rec.status IS NULL OR
8338 p_cust_site_use_rec.status = fnd_api.g_miss_char
8339 THEN
8340 l_status := 'A';
8341 ELSE
8342 l_status := p_cust_site_use_rec.status;
8343 END IF;
8344
8345 IF l_primary_flag = 'Y' AND l_status <> 'A' THEN
8346 l_error := TRUE;
8347 END IF;
8348 ELSE
8349 IF p_cust_site_use_rec.primary_flag = 'Y' AND
8350 ((p_cust_site_use_rec.status IS NOT NULL AND
8351 p_cust_site_use_rec.status <> 'A') OR
8352 (p_cust_site_use_rec.status IS NULL AND
8353 l_status <> 'A'))
8354 THEN
8355 l_error := TRUE;
8356 END IF;
8357 END IF;
8358
8359 IF l_error THEN
8360 fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8361 fnd_message.set_token('ENTITY', 'Site Use');
8362 -- fnd_message.set_token('COLUMN1', 'primary_flag');
8363 -- fnd_message.set_token('COLUMN2', 'status');
8364 fnd_msg_pub.add;
8365 x_return_status := FND_API.G_RET_STS_ERROR;
8366 -- reset l_error for later use.
8367 l_error := FALSE;
8368 END IF;
8369
8370 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8371 hz_utility_v2pub.debug(p_message=>'an inactive site use is never marked as primary. ' ||
8372 'x_return_status = ' || x_return_status,
8373 p_prefix =>l_debug_prefix,
8374 p_msg_level=>fnd_log.level_statement);
8375 END IF;
8376
8377
8378 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8379 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
8380 'x_return_status = ' || x_return_status,
8381 p_prefix =>l_debug_prefix,
8382 p_msg_level=>fnd_log.level_statement);
8383 END IF;
8384
8385
8386 --bug fix 2311760
8387 /***************************
8388 ----------------------------------------------
8389 -- validate ship_partial
8390 ----------------------------------------------
8391
8392 -- ship_partial is lookup code in lookup type YES/NO
8393 IF p_cust_site_use_rec.ship_partial IS NOT NULL AND
8394 p_cust_site_use_rec.ship_partial <> FND_API.G_MISS_CHAR
8395 THEN
8396 validate_lookup (
8397 p_column => 'ship_partial',
8398 p_lookup_type => 'YES/NO',
8399 p_column_value => p_cust_site_use_rec.ship_partial,
8400 x_return_status => x_return_status );
8401
8402 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8403 hz_utility_v2pub.debug(p_message=>'ship_partial is lookup code in lookup type YES/NO. ' ||
8404 'x_return_status = ' || x_return_status,
8405 p_prefix =>l_debug_prefix,
8406 p_msg_level=>fnd_log.level_statement);
8407 END IF;
8408
8409 END IF;
8410
8411 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8412 hz_utility_v2pub.debug(p_message=>'(+) after validate ship_partial ... ' ||
8413 'x_return_status = ' || x_return_status,
8414 p_prefix =>l_debug_prefix,
8415 p_msg_level=>fnd_log.level_statement);
8416 END IF;
8417
8418 ***********************/
8419 ----------------------------------------------
8420 -- validate ship_sets_include_lines_flag
8421 ----------------------------------------------
8422 /****Logical APIs - validation not required****/
8423 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8424 -- ship_sets_include_lines_flag is lookup code in lookup type YES/NO
8425 IF p_cust_site_use_rec.ship_sets_include_lines_flag IS NOT NULL AND
8426 p_cust_site_use_rec.ship_sets_include_lines_flag <> FND_API.G_MISS_CHAR
8427 THEN
8428 validate_lookup (
8429 p_column => 'ship_sets_include_lines_flag',
8430 p_lookup_type => 'YES/NO',
8431 p_column_value => p_cust_site_use_rec.ship_sets_include_lines_flag,
8432 x_return_status => x_return_status );
8433
8434 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8435 hz_utility_v2pub.debug(p_message=>'ship_sets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
8436 'x_return_status = ' || x_return_status,
8437 p_prefix =>l_debug_prefix,
8438 p_msg_level=>fnd_log.level_statement);
8439 END IF;
8440
8441 END IF;
8442 END IF;
8443
8444 --If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag
8445 --is always set to N.
8446 IF (p_create_update_flag = 'C' or
8447 (p_create_update_flag ='U' and
8448 p_cust_site_use_rec.ship_sets_include_lines_flag <> NVL(l_ship_sets_inc_lines_f,FND_API.G_MISS_CHAR)))
8449 THEN
8450 IF p_cust_site_use_rec.ship_sets_include_lines_flag = 'Y'
8451 THEN
8452 BEGIN
8453 SELECT decode(p_cust_site_use_rec.ship_sets_include_lines_flag,p_cust_site_use_rec.arrivalsets_include_lines_flag,
8454 'N',l_arrivalsets_inc_lines_f,
8455 decode(p_cust_site_use_rec.arrivalsets_include_lines_flag,l_ship_sets_inc_lines_f,
8456 'Y','N'),'Y')
8457 INTO l_dummy
8458 FROM DUAL;
8459 IF l_dummy <> 'Y'
8460 THEN
8461 FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
8462 FND_MESSAGE.SET_TOKEN('COLUMN1','ship_sets_include_lines_flag');
8463 FND_MESSAGE.SET_TOKEN('VALUE1','Y');
8464 FND_MESSAGE.SET_TOKEN('COLUMN2','arrivalsets_include_lines_flag');
8465 FND_MESSAGE.SET_TOKEN('VALUE2','N');
8466 FND_MSG_PUB.ADD;
8467 x_return_status := FND_API.G_RET_STS_ERROR;
8468 END IF;
8469 END ;
8470 END IF;
8471 END IF;
8472
8473 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8474 hz_utility_v2pub.debug(p_message=>'If ship_sets_include_lines_flag is set to Y then arrivalsets_include_lines_flag is always set to N. '||
8475 'x_return_status = ' || x_return_status,
8476 p_prefix =>l_debug_prefix,
8477 p_msg_level=>fnd_log.level_statement);
8478 END IF;
8479
8480 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8481 hz_utility_v2pub.debug(p_message=>'(+) after validate ship_sets_include_lines_flag ... ' ||
8482 'x_return_status = ' || x_return_status,
8483 p_prefix =>l_debug_prefix,
8484 p_msg_level=>fnd_log.level_statement);
8485 END IF;
8486
8487 ----------------------------------------------
8488 -- validate arrivalsets_include_lines_flag
8489 ----------------------------------------------
8490 /****Logical APIs - validation not required****/
8491 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8492 -- arrivalsets_include_lines_flag is lookup code in lookup type YES/NO
8493 IF p_cust_site_use_rec.arrivalsets_include_lines_flag IS NOT NULL AND
8494 p_cust_site_use_rec.arrivalsets_include_lines_flag <> FND_API.G_MISS_CHAR
8495 THEN
8496 validate_lookup (
8497 p_column => 'arrivalsets_include_lines_flag',
8498 p_lookup_type => 'YES/NO',
8499 p_column_value => p_cust_site_use_rec.arrivalsets_include_lines_flag,
8500 x_return_status => x_return_status );
8501
8502 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8503 hz_utility_v2pub.debug(p_message=>'arrivalsets_include_lines_flag is lookup code in lookup type YES/NO. ' ||
8504 'x_return_status = ' || x_return_status,
8505 p_prefix =>l_debug_prefix,
8506 p_msg_level=>fnd_log.level_statement);
8507 END IF;
8508
8509 END IF;
8510 END IF;
8511
8512 --If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag
8513 --is always set to N.
8514
8515 IF (p_create_update_flag ='C' or
8516 (p_create_update_flag ='U' and
8517 p_cust_site_use_rec.arrivalsets_include_lines_flag <> NVL(l_arrivalsets_inc_lines_f,FND_API.G_MISS_CHAR)))
8518 THEN
8519 IF p_cust_site_use_rec.arrivalsets_include_lines_flag = 'Y'
8520 THEN
8521 BEGIN
8522 SELECT decode(p_cust_site_use_rec.arrivalsets_include_lines_flag,p_cust_site_use_rec.ship_sets_include_lines_flag,
8523 'N',l_ship_sets_inc_lines_f,
8524 decode(p_cust_site_use_rec.ship_sets_include_lines_flag,l_arrivalsets_inc_lines_f,
8525 'Y','N'),'Y')
8526 INTO l_dummy
8527 FROM DUAL;
8528 IF l_dummy <> 'Y'
8529 THEN
8530 FND_MESSAGE.SET_NAME('AR','HZ_API_VAL_DEP_FIELDS');
8531 FND_MESSAGE.SET_TOKEN('COLUMN1','arrivalsets_include_lines_flag');
8532 FND_MESSAGE.SET_TOKEN('VALUE1','Y');
8533 FND_MESSAGE.SET_TOKEN('COLUMN2','ship_sets_include_lines_flag');
8534 FND_MESSAGE.SET_TOKEN('VALUE2','N');
8535 FND_MSG_PUB.ADD;
8536 x_return_status := FND_API.G_RET_STS_ERROR;
8537 END IF;
8538 END ;
8539 END IF;
8540 END IF;
8541
8542 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8543 hz_utility_v2pub.debug(p_message=>'If arrivalsets_include_lines_flag is set to Y then ship_sets_include_lines_flag is always setto N. ' ||
8544 'x_return_status = ' || x_return_status,
8545 p_prefix =>l_debug_prefix,
8546 p_msg_level=>fnd_log.level_statement);
8547 END IF;
8548
8549 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8550 hz_utility_v2pub.debug(p_message=>'(+) after validate arrivalsets_include_lines_flag ... ' ||
8551 'x_return_status = ' || x_return_status,
8552 p_prefix =>l_debug_prefix,
8553 p_msg_level=>fnd_log.level_statement);
8554 END IF;
8555
8556 ------------------------------------------
8557 -- validate tax_code
8558 ------------------------------------------
8559 --Tax_code should be a valid value defined in zx_output_classifications_v
8560
8561 IF p_cust_site_use_rec.tax_code is NOT NULL AND
8562 p_cust_site_use_rec.tax_code <> FND_API.G_MISS_CHAR
8563 AND ( p_create_update_flag = 'C' OR
8564 ( p_create_update_flag = 'U' AND
8565 p_cust_site_use_rec.tax_code <> NVL( l_tax_code, FND_API.G_MISS_CHAR ) ) )
8566 THEN
8567 check_tax_code(
8568 p_column => 'tax_code',
8569 p_column_value => p_cust_site_use_rec.tax_code,
8570 -- Bug 4713150
8571 -- p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
8572 p_called_from => 'validate_cust_site_use',
8573 x_return_status => x_return_status );
8574
8575 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8576 hz_utility_v2pub.debug(p_message=>'Tax_code should be a valid value defined in view zx_output_classifications_v. '||
8577 'x_return_status = ' || x_return_status,
8578 p_prefix =>l_debug_prefix,
8579 p_msg_level=>fnd_log.level_statement);
8580 END IF;
8581
8582 END IF;
8583
8584 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8585 hz_utility_v2pub.debug(p_message=>'(+) after validate tax_code..' ||
8586 'x_return_status = ' || x_return_status,
8587 p_prefix =>l_debug_prefix,
8588 p_msg_level=>fnd_log.level_statement);
8589 END IF;
8590 ------------------------------------
8591 --validate payment_term_id
8592 ------------------------------------
8593 --Payment_term_id should be a valid value defined in RA_TERMS
8594
8595 IF p_cust_site_use_rec.payment_term_id is NOT NULL AND
8596 p_cust_site_use_rec.payment_term_id <> FND_API.G_MISS_NUM
8597 AND ( p_create_update_flag = 'C' OR
8598 ( p_create_update_flag = 'U' AND
8599 p_cust_site_use_rec.payment_term_id <> NVL( l_payment_term_id, FND_API.G_MISS_NUM ) ) )
8600 THEN
8601 check_payterm_id_fk(
8602 p_column => 'payment_term_id',
8603 p_column_value => p_cust_site_use_rec.payment_term_id,
8604 x_return_status => x_return_status );
8605
8606 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8607 hz_utility_v2pub.debug(p_message=>'Payment_term_id should be a valid value defined in RA_TERMS. '||
8608 'x_return_status = ' || x_return_status,
8609 p_prefix =>l_debug_prefix,
8610 p_msg_level=>fnd_log.level_statement);
8611 END IF;
8612
8613 END IF;
8614
8615 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8616 hz_utility_v2pub.debug(p_message=>'(+) after validate payment_term_id..' ||
8617 'x_return_status = ' || x_return_status,
8618 p_prefix =>l_debug_prefix,
8619 p_msg_level=>fnd_log.level_statement);
8620 END IF;
8621 ---------------------------------------------
8622 --validate demand_class_code
8623 ---------------------------------------------
8624 --Demand_class_code is lookup_code in lookup_type DEMAND_CLASS in fnd_common_lookups
8625
8626 IF p_cust_site_use_rec.demand_class_code is NOT NULL AND
8627 p_cust_site_use_rec.demand_class_code <> FND_API.G_MISS_CHAR
8628 AND ( p_create_update_flag = 'C' OR
8629 ( p_create_update_flag = 'U' AND
8630 p_cust_site_use_rec.demand_class_code <> NVL(l_demand_class_code,FND_API.G_MISS_CHAR) ) )
8631 THEN
8632 validate_lookup(
8633 p_column =>'demand_class_code',
8634 p_lookup_table =>'FND_COMMON_LOOKUPS',
8635 p_lookup_type =>'DEMAND_CLASS',
8636 p_column_value =>p_cust_site_use_rec.demand_class_code,
8637 x_return_status =>x_return_status );
8638 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8639 hz_utility_v2pub.debug(p_message=>'Demand_class_code is lookup_code in lookup_type DEMAND_CLASS in fnd_common_lookups. '||
8640 'x_return_status = ' || x_return_status,
8641 p_prefix =>l_debug_prefix,
8642 p_msg_level=>fnd_log.level_statement);
8643 END IF;
8644 END IF;
8645
8646 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8647 hz_utility_v2pub.debug(p_message=>'(+) after validate demand_class_code..' ||
8648 'x_return_status = ' || x_return_status,
8649 p_prefix =>l_debug_prefix,
8650 p_msg_level=>fnd_log.level_statement);
8651 END IF;
8652
8653 -----------------------------------------------
8654 --validate primary_salesrep_id
8655 -----------------------------------------------
8656 --Primary_salesrep_id should be a valid value defined in RA_SALESREPS
8657
8658 IF p_cust_site_use_rec.primary_salesrep_id is NOT NULL AND
8659 p_cust_site_use_rec.primary_salesrep_id <> FND_API.G_MISS_NUM
8660 AND ( p_create_update_flag = 'C' OR
8661 ( p_create_update_flag = 'U' AND
8662 p_cust_site_use_rec.primary_salesrep_id <> NVL(l_primary_salesrep_id,FND_API.G_MISS_NUM) ) )
8663 THEN
8664 check_prim_salesrep(
8665 p_column => 'primary_salesrep_id',
8666 p_column_value => p_cust_site_use_rec.primary_salesrep_id,
8667 p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
8668 x_return_status => x_return_status );
8669
8670 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8671 hz_utility_v2pub.debug(p_message=>'Primary_salesrep_id should be a valid value defined in RA_SALESREPS. '||
8672 'x_return_status = ' || x_return_status,
8673 p_prefix =>l_debug_prefix,
8674 p_msg_level=>fnd_log.level_statement);
8675 END IF;
8676
8677 END IF;
8678 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8679 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_salesrep_id..' ||
8680 'x_return_status = ' || x_return_status,
8681 p_prefix =>l_debug_prefix,
8682 p_msg_level=>fnd_log.level_statement);
8683 END IF;
8684
8685 ----------------------------------------------------
8686 --validate finchrg_receivables_trx_id
8687 ----------------------------------------------------
8688 IF p_cust_site_use_rec.finchrg_receivables_trx_id is NOT NULL AND
8689 p_cust_site_use_rec.finchrg_receivables_trx_id <> FND_API.G_MISS_NUM
8690 AND ( p_create_update_flag = 'C' OR
8691 ( p_create_update_flag = 'U' AND
8692 p_cust_site_use_rec.finchrg_receivables_trx_id <> NVL(l_finchrg_receivables_trx_id,FND_API.G_MISS_NUM) ) )
8693 THEN
8694 check_finchrg_trx_fk(
8695 p_column => 'finchrg_receivables_trx_id',
8696 p_column_value => p_cust_site_use_rec.finchrg_receivables_trx_id,
8697 p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
8698 x_return_status => x_return_status );
8699
8700 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8701 hz_utility_v2pub.debug(p_message=>'finchrg_receivables_trx_id should be a valid value defined in AR_RECEIVABLES_TRX. '||
8702 'x_return_status = ' || x_return_status,
8703 p_prefix =>l_debug_prefix,
8704 p_msg_level=>fnd_log.level_statement);
8705 END IF;
8706
8707
8708 END IF;
8709
8710 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8711 hz_utility_v2pub.debug(p_message=>'(+) after validate finchrg_receivables_trx_id..' ||
8712 'x_return_status = ' || x_return_status,
8713 p_prefix =>l_debug_prefix,
8714 p_msg_level=>fnd_log.level_statement);
8715 END IF;
8716
8717
8718
8719 -------------------------------------------
8720 --validate order_Type_id
8721 -------------------------------------------
8722 --order_type_id should be a valid value defined in OE_ORDER_TYPES_V
8723
8724 IF p_cust_site_use_rec.order_type_id is NOT NULL AND
8725 p_cust_site_use_rec.order_type_id <> FND_API.G_MISS_NUM
8726 AND ( p_create_update_flag = 'C' OR
8727 ( p_create_update_flag = 'U' AND
8728 p_cust_site_use_rec.order_type_id <> NVL(l_order_type_id,FND_API.G_MISS_NUM) ) )
8729 THEN
8730 check_ord_type(
8731 p_column => 'order_type_id',
8732 p_column_value => p_cust_site_use_rec.order_type_id,
8733 p_org_id => p_cust_site_use_rec.org_id, -- Bug 3456489
8734 x_return_status => x_return_status );
8735
8736 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8737 hz_utility_v2pub.debug(p_message=>'order_type_id should be a valid value defined in OE_ORDER_TYPES_V. '||
8738 'x_return_status = ' || x_return_status,
8739 p_prefix =>l_debug_prefix,
8740 p_msg_level=>fnd_log.level_statement);
8741 END IF;
8742
8743 END IF;
8744
8745 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8746 hz_utility_v2pub.debug(p_message=>'(+) after validate order_type_id..' ||
8747 'x_return_status = ' || x_return_status,
8748 p_prefix =>l_debug_prefix,
8749 p_msg_level=>fnd_log.level_statement);
8750 END IF;
8751
8752
8753 ----------------------------------------------------------
8754 --validate price_list_id
8755 ----------------------------------------------------------
8756 --price_list_id should be a valid value defined in SO_PRICE_LISTS
8757
8758 IF p_cust_site_use_rec.price_list_id is NOT NULL AND
8759 p_cust_site_use_rec.price_list_id <> FND_API.G_MISS_NUM
8760 AND ( p_create_update_flag = 'C' OR
8761 ( p_create_update_flag = 'U' AND
8762 p_cust_site_use_rec.price_list_id <> NVL(l_price_list_id,FND_API.G_MISS_NUM) ) )
8763 THEN
8764 check_price_list_fk(
8765 p_column => 'price_list_id',
8766 p_column_value => p_cust_site_use_rec.price_list_id,
8767 x_return_status => x_return_status );
8768
8769 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8770 hz_utility_v2pub.debug(p_message=>'price_list_id should be a valid value defined in SO_PRICE_LISTS. '||
8771 'x_return_status = ' || x_return_status,
8772 p_prefix =>l_debug_prefix,
8773 p_msg_level=>fnd_log.level_statement);
8774 END IF;
8775
8776 END IF;
8777
8778 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8779 hz_utility_v2pub.debug(p_message=>'(+) after validate price_list_id..' ||
8780 'x_return_status = ' || x_return_status,
8781 p_prefix =>l_debug_prefix,
8782 p_msg_level=>fnd_log.level_statement);
8783 END IF;
8784
8785
8786 ----------------------------------------------
8787 --validate item_cross_ref_pref
8788 ----------------------------------------------
8789 --item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should have value 'INT' or 'CUST'
8790
8791 IF p_cust_site_use_rec.item_cross_ref_pref IS NOT NULL AND
8792 p_cust_site_use_rec.item_cross_ref_pref <> FND_API.G_MISS_CHAR
8793 AND ( p_create_update_flag = 'C' OR
8794 ( p_create_update_flag = 'U' AND
8795 p_cust_site_use_rec.item_cross_ref_pref <> NVL(l_item_cross_ref_pref,FND_API.G_MISS_CHAR) ) )
8796 THEN
8797 IF p_cust_site_use_rec.item_cross_ref_pref NOT IN('INT','CUST')
8798 THEN
8799 check_item_cross_ref(
8800 p_column => 'price_list_id',
8801 p_column_value => p_cust_site_use_rec.item_cross_ref_pref,
8802 x_return_status => x_return_status );
8803
8804 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8805 hz_utility_v2pub.debug(p_message=>'item_cross_ref_pref should be a value defined in MTL_CROSS_REFERENCE_TYPES or should be INT or CUST . ' ||
8806 'x_return_status = ' || x_return_status,
8807 p_prefix =>l_debug_prefix,
8808 p_msg_level=>fnd_log.level_statement);
8809 END IF;
8810
8811 END IF;
8812 END IF;
8813
8814 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8815 hz_utility_v2pub.debug(p_message=>'(+) after validate item_cross_ref_pref..' ||
8816 'x_return_status = ' || x_return_status,
8817 p_prefix =>l_debug_prefix,
8818 p_msg_level=>fnd_log.level_statement);
8819 END IF;
8820
8821 --------------------------------------------------
8822 --validate warehouse_id
8823 --------------------------------------------------
8824 --warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS
8825
8826 IF p_cust_site_use_rec.warehouse_id is NOT NULL AND
8827 p_cust_site_use_rec.warehouse_id <> FND_API.G_MISS_NUM
8828 AND ( p_create_update_flag = 'C' OR
8829 ( p_create_update_flag = 'U' AND
8830 p_cust_site_use_rec.warehouse_id <> NVL(l_warehouse_id,FND_API.G_MISS_NUM) ) )
8831 THEN
8832 check_warehouse(
8833 p_column => 'warehouse_id',
8834 p_column_value => p_cust_site_use_rec.warehouse_id,
8835 x_return_status => x_return_status );
8836
8837 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8838 hz_utility_v2pub.debug(p_message=>'warehouse_id should be a value defined in ORG_ORGANIZATION_DEFINITIONS . '||
8839 'x_return_status = ' || x_return_status,
8840 p_prefix =>l_debug_prefix,
8841 p_msg_level=>fnd_log.level_statement);
8842 END IF;
8843
8844 END IF;
8845
8846 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8847 hz_utility_v2pub.debug(p_message=>'(+) after validate warehouse_id..' ||
8848 'x_return_status = ' || x_return_status,
8849 p_prefix =>l_debug_prefix,
8850 p_msg_level=>fnd_log.level_statement);
8851 END IF;
8852
8853
8854
8855 ----------------------------------------------
8856 --validate fob_point
8857 ----------------------------------------------
8858 --fob_point is lookup_code in lookup type FOB
8859
8860 IF p_cust_site_use_rec.fob_point is NOT NULL AND
8861 p_cust_site_use_rec.fob_point <> FND_API.G_MISS_CHAR
8862 AND ( p_create_update_flag = 'C' OR
8863 ( p_create_update_flag = 'U' AND
8864 p_cust_site_use_rec.fob_point <> NVL(l_fob_point,FND_API.G_MISS_CHAR) ) )
8865 THEN
8866 validate_lookup(
8867 p_column =>'fob_point',
8868 p_lookup_type =>'FOB',
8869 p_column_value =>p_cust_site_use_rec.fob_point,
8870 x_return_status =>x_return_status );
8871
8872 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8873 hz_utility_v2pub.debug(p_message=>'fob_point is lookup_code in lookup type FOB. '||
8874 'x_return_status = ' || x_return_status,
8875 p_prefix =>l_debug_prefix,
8876 p_msg_level=>fnd_log.level_statement);
8877 END IF;
8878
8879 END IF;
8880
8881 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8882 hz_utility_v2pub.debug(p_message=>'(+) after validate fob_point..' ||
8883 'x_return_status = ' || x_return_status,
8884 p_prefix =>l_debug_prefix,
8885 p_msg_level=>fnd_log.level_statement);
8886 END IF;
8887
8888
8889
8890 ----------------------------------------------------------
8891 --validate date_type_preference
8892 ----------------------------------------------------------
8893 --date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups
8894
8895 IF p_cust_site_use_rec.date_type_preference IS NOT NULL AND
8896 p_cust_site_use_rec.date_type_preference <> FND_API.G_MISS_CHAR
8897 AND ( p_create_update_flag = 'C' OR
8898 ( p_create_update_flag = 'U' AND
8899 p_cust_site_use_rec.date_type_preference <> NVL(l_date_type_preference,FND_API.G_MISS_CHAR) ) )
8900 THEN
8901 validate_lookup(
8902 p_column =>'date_type_preference',
8903 p_lookup_table =>'OE_LOOKUPS',
8904 p_lookup_type =>'REQUEST_DATE_TYPE',
8905 p_column_value =>p_cust_site_use_rec.date_type_preference,
8906 x_return_status =>x_return_status );
8907
8908 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8909 hz_utility_v2pub.debug(p_message=>'date_type_preference is a lookup_code in lookup_type REQUEST_DATE_TYPE in oe_lookups. '||
8910 'x_return_status = ' || x_return_status,
8911 p_prefix =>l_debug_prefix,
8912 p_msg_level=>fnd_log.level_statement);
8913 END IF;
8914
8915 END IF;
8916
8917 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8918 hz_utility_v2pub.debug(p_message=>'(+) after validate date_type_preference..' ||
8919 'x_return_status = ' || x_return_status,
8920 p_prefix =>l_debug_prefix,
8921 p_msg_level=>fnd_log.level_statement);
8922 END IF;
8923
8924 --Bug fix 2311760
8925 /***************************
8926 ----------------------------------------------
8927 -- validate ship_partial
8928 ----------------------------------------------
8929
8930 -- ship_partial is lookup code in lookup type YES/NO
8931 IF p_cust_site_use_rec.ship_partial IS NOT NULL AND
8932 p_cust_site_use_rec.ship_partial <> FND_API.G_MISS_CHAR
8933 AND ( p_create_update_flag = 'C' OR
8934 ( p_create_update_flag = 'U' AND
8935 p_cust_site_use_rec.ship_partial <> NVL(l_ship_partial,FND_API.G_MISS_CHAR) ) )
8936 THEN
8937 validate_lookup (
8938 p_column => 'ship_partial',
8939 p_lookup_type => 'YES/NO',
8940 p_column_value => p_cust_site_use_rec.ship_partial,
8941 x_return_status => x_return_status );
8942
8943 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8944 hz_utility_v2pub.debug(p_message=>'ship_partial is lookup code in lookup type YES/NO. ' ||
8945 'x_return_status = ' || x_return_status,
8946 p_prefix =>l_debug_prefix,
8947 p_msg_level=>fnd_log.level_statement);
8948 END IF;
8949
8950 END IF;
8951
8952 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8953 hz_utility_v2pub.debug(p_message=>'(+) after validate ship_partial ... ' ||
8954 'x_return_status = ' || x_return_status,
8955 p_prefix =>l_debug_prefix,
8956 p_msg_level=>fnd_log.level_statement);
8957 END IF;
8958
8959 ******************************/
8960 ----------------------------------------------
8961 -- validate sched_date_push_flag
8962 ----------------------------------------------
8963 /****Logical APIs - validation not required****/
8964 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8965 -- sched_date_push_flag is lookup code in lookup type YES/NO
8966 IF p_cust_site_use_rec.sched_date_push_flag IS NOT NULL AND
8967 p_cust_site_use_rec.sched_date_push_flag <> FND_API.G_MISS_CHAR
8968 THEN
8969 validate_lookup (
8970 p_column => 'sched_date_push_flag',
8971 p_lookup_type => 'YES/NO',
8972 p_column_value => p_cust_site_use_rec.sched_date_push_flag,
8973 x_return_status => x_return_status );
8974
8975 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8976 hz_utility_v2pub.debug(p_message=>'sched_date_push_flag is lookup code in lookup type YES/NO. ' ||
8977 'x_return_status = ' || x_return_status,
8978 p_prefix =>l_debug_prefix,
8979 p_msg_level=>fnd_log.level_statement);
8980 END IF;
8981
8982 END IF;
8983
8984 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8985 hz_utility_v2pub.debug(p_message=>'(+) after validate sched_date_push_flag ... ' ||
8986 'x_return_status = ' || x_return_status,
8987 p_prefix =>l_debug_prefix,
8988 p_msg_level=>fnd_log.level_statement);
8989 END IF;
8990 END IF;
8991
8992 ----------------------------------------------
8993 -- validate gsa_indicator
8994 ----------------------------------------------
8995 /****Logical APIs - validation not required****/
8996 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8997 -- gsa_indicator is lookup code in lookup type YES/NO
8998 IF p_cust_site_use_rec.gsa_indicator IS NOT NULL AND
8999 p_cust_site_use_rec.gsa_indicator <> FND_API.G_MISS_CHAR
9000 THEN
9001 validate_lookup (
9002 p_column => 'gsa_indicator',
9003 p_lookup_type => 'YES/NO',
9004 p_column_value => p_cust_site_use_rec.gsa_indicator,
9005 x_return_status => x_return_status );
9006
9007 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9008 hz_utility_v2pub.debug(p_message=>'gsa_indicator is lookup code in lookup type YES/NO. ' ||
9009 'x_return_status = ' || x_return_status,
9010 p_prefix =>l_debug_prefix,
9011 p_msg_level=>fnd_log.level_statement);
9012 END IF;
9013
9014 END IF;
9015
9016 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9017 hz_utility_v2pub.debug(p_message=>'(+) after validate gsa_indicator ... ' ||
9018 'x_return_status = ' || x_return_status,
9019 p_prefix =>l_debug_prefix,
9020 p_msg_level=>fnd_log.level_statement);
9021 END IF;
9022 END IF;
9023
9024 ----------------------------------------------
9025 -- validate gl_id_xxx fields
9026 ----------------------------------------------
9027 -- Bug 2553286
9028 -- If site_use_code is not 'BILL_TO', then Revenue, Tax, Freight, Clearing,
9029 -- Unbilled Receivable and Unearned Revenue fields should not be populated.
9030
9031 IF p_cust_site_use_rec.site_use_code <> 'BILL_TO' OR
9032 ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code <> 'BILL_TO' )
9033 THEN
9034 IF ( p_cust_site_use_rec.gl_id_rev IS NOT NULL AND
9035 p_cust_site_use_rec.gl_id_rev <> FND_API.G_MISS_NUM ) OR
9036 ( p_cust_site_use_rec.gl_id_tax IS NOT NULL AND
9037 p_cust_site_use_rec.gl_id_tax <> FND_API.G_MISS_NUM ) OR
9038 ( p_cust_site_use_rec.gl_id_freight IS NOT NULL AND
9039 p_cust_site_use_rec.gl_id_freight <> FND_API.G_MISS_NUM ) OR
9040 ( p_cust_site_use_rec.gl_id_clearing IS NOT NULL AND
9041 p_cust_site_use_rec.gl_id_clearing <> FND_API.G_MISS_NUM ) OR
9042 ( p_cust_site_use_rec.gl_id_unbilled IS NOT NULL AND
9043 p_cust_site_use_rec.gl_id_unbilled <> FND_API.G_MISS_NUM ) OR
9044 ( p_cust_site_use_rec.gl_id_unearned IS NOT NULL AND
9045 p_cust_site_use_rec.gl_id_unearned <> FND_API.G_MISS_NUM )
9046 THEN
9047 FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9048 FND_MSG_PUB.ADD;
9049 x_return_status := FND_API.G_RET_STS_ERROR;
9050 END IF;
9051
9052 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9053 hz_utility_v2pub.debug(p_message=>'If site_use_code is not BILL_TO, then Revenue, Tax, Freight, Clearing, ' ||
9054 'Unbilled Receivable and Unearned Revenue fields should not be populated. ' ||
9055 'x_return_status = ' || x_return_status,
9056 p_prefix =>l_debug_prefix,
9057 p_msg_level=>fnd_log.level_statement);
9058 END IF;
9059
9060 END IF;
9061 -- Bug 2553286
9062 -- If site_use_code is not 'DRAWEE', then Unpaid Bills Receivables,
9063 -- Remitted Bills Receivables and Factored Bills Receivables fields should not be populated.
9064
9065 IF p_cust_site_use_rec.site_use_code <> 'DRAWEE' OR
9066 ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code <> 'DRAWEE' )
9067 THEN
9068 IF ( p_cust_site_use_rec.gl_id_unpaid_rec IS NOT NULL AND
9069 p_cust_site_use_rec.gl_id_unpaid_rec <> FND_API.G_MISS_NUM ) OR
9070 ( p_cust_site_use_rec.gl_id_remittance IS NOT NULL AND
9071 p_cust_site_use_rec.gl_id_remittance <> FND_API.G_MISS_NUM ) OR
9072 ( p_cust_site_use_rec.gl_id_factor IS NOT NULL AND
9073 p_cust_site_use_rec.gl_id_factor <> FND_API.G_MISS_NUM )
9074 THEN
9075 FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9076 FND_MSG_PUB.ADD;
9077 x_return_status := FND_API.G_RET_STS_ERROR;
9078 END IF;
9079
9080 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9081 hz_utility_v2pub.debug(p_message=>'If site_use_code is not DRAWEE, then Unpaid Bills Receivables, ' ||
9082 'Remitted Bills Receivables and Factored Bills Receivables fields should not be populated. ' ||
9083 'x_return_status = ' || x_return_status,
9084 p_prefix =>l_debug_prefix,
9085 p_msg_level=>fnd_log.level_statement);
9086 END IF;
9087
9088 END IF;
9089 -- Bug 2553286
9090 -- If site_use_code is not 'BILL_TO OR DRAWEE', then Bills Receivables field should not be populated.
9091
9092 IF p_cust_site_use_rec.site_use_code NOT IN ('BILL_TO', 'DRAWEE') OR
9093 ( p_cust_site_use_rec.site_use_code IS NULL AND l_site_use_code NOT IN ('BILL_TO', 'DRAWEE') )
9094 THEN
9095 IF ( p_cust_site_use_rec.gl_id_rec IS NOT NULL AND
9096 p_cust_site_use_rec.gl_id_rec <> FND_API.G_MISS_NUM )
9097 THEN
9098 FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_CCID_INVALID' );
9099 FND_MSG_PUB.ADD;
9100 x_return_status := FND_API.G_RET_STS_ERROR;
9101 END IF;
9102
9103 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9104 hz_utility_v2pub.debug(p_message=>'If site_use_code is not BILL_TO OR DRAWEE, then Bills Receivables field should not be populated. ' ||
9105 'x_return_status = ' || x_return_status,
9106 p_prefix =>l_debug_prefix,
9107 p_msg_level=>fnd_log.level_statement);
9108 END IF;
9109
9110 END IF;
9111
9112
9113 /* 3456489. Get chart of accounts ID. */
9114 BEGIN
9115 l_coa_id := HZ_MO_GLOBAL_CACHE.get_chart_of_accounts_id(
9116 p_cust_site_use_rec.org_id);
9117 EXCEPTION
9118 WHEN NO_DATA_FOUND THEN
9119 x_return_status := FND_API.G_RET_STS_ERROR;
9120 END;
9121
9122 /* 3456489. Validate accounts only if Chart of Accounts ID is not null. */
9123 IF (l_coa_id IS NOT NULL) THEN
9124
9125 ----------------------------------------------
9126 -- validate gl_id_rec
9127 ----------------------------------------------
9128
9129
9130 -- gl_id_rec is validate gl field.
9131 IF p_cust_site_use_rec.gl_id_rec IS NOT NULL AND
9132 p_cust_site_use_rec.gl_id_rec <> FND_API.G_MISS_NUM
9133 THEN
9134 validate_gl_id (
9135 p_gl_name => 'REC',
9136 p_column_value => p_cust_site_use_rec.gl_id_rec,
9137 p_coa_id => l_coa_id, -- Bug 3456489
9138 x_return_status => x_return_status );
9139
9140 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9141 hz_utility_v2pub.debug(p_message=>'gl_id_rec is validate gl field. ' ||
9142 'x_return_status = ' || x_return_status,
9143 p_prefix =>l_debug_prefix,
9144 p_msg_level=>fnd_log.level_statement);
9145 END IF;
9146
9147 END IF;
9148
9149 ----------------------------------------------
9150 -- validate gl_id_rev
9151 ----------------------------------------------
9152
9153 -- gl_id_rev is validate gl field.
9154 IF p_cust_site_use_rec.gl_id_rev IS NOT NULL AND
9155 p_cust_site_use_rec.gl_id_rev <> FND_API.G_MISS_NUM
9156 THEN
9157 validate_gl_id (
9158 p_gl_name => 'REV',
9159 p_column_value => p_cust_site_use_rec.gl_id_rev,
9160 p_coa_id => l_coa_id, -- Bug 3456489
9161 x_return_status => x_return_status );
9162
9163 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9164 hz_utility_v2pub.debug(p_message=>'gl_id_rev is validate gl field. ' ||
9165 'x_return_status = ' || x_return_status,
9166 p_prefix =>l_debug_prefix,
9167 p_msg_level=>fnd_log.level_statement);
9168 END IF;
9169
9170 END IF;
9171
9172 ----------------------------------------------
9173 -- validate gl_id_tax
9174 ----------------------------------------------
9175
9176 -- gl_id_tax is validate gl field.
9177 IF p_cust_site_use_rec.gl_id_tax IS NOT NULL AND
9178 p_cust_site_use_rec.gl_id_tax <> FND_API.G_MISS_NUM
9179 THEN
9180 validate_gl_id (
9181 p_gl_name => 'TAX',
9182 p_column_value => p_cust_site_use_rec.gl_id_tax,
9183 p_coa_id => l_coa_id, -- Bug 3456489
9184 x_return_status => x_return_status );
9185
9186 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9187 hz_utility_v2pub.debug(p_message=>'gl_id_tax is validate gl field. ' ||
9188 'x_return_status = ' || x_return_status,
9189 p_prefix =>l_debug_prefix,
9190 p_msg_level=>fnd_log.level_statement);
9191 END IF;
9192
9193 END IF;
9194
9195 ----------------------------------------------
9196 -- validate gl_id_freight
9197 ----------------------------------------------
9198
9199 -- gl_id_freight is validate gl field.
9200 IF p_cust_site_use_rec.gl_id_freight IS NOT NULL AND
9201 p_cust_site_use_rec.gl_id_freight <> FND_API.G_MISS_NUM
9202 THEN
9203 validate_gl_id (
9204 p_gl_name => 'FREIGHT',
9205 p_column_value => p_cust_site_use_rec.gl_id_freight,
9206 p_coa_id => l_coa_id, -- Bug 3456489
9207 x_return_status => x_return_status );
9208
9209 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9210 hz_utility_v2pub.debug(p_message=>'gl_id_freight is validate gl field. ' ||
9211 'x_return_status = ' || x_return_status,
9212 p_prefix =>l_debug_prefix,
9213 p_msg_level=>fnd_log.level_statement);
9214 END IF;
9215
9216 END IF;
9217
9218 ----------------------------------------------
9219 -- validate gl_id_clearing
9220 ----------------------------------------------
9221
9222 -- gl_id_clearing is validate gl field.
9223 IF p_cust_site_use_rec.gl_id_clearing IS NOT NULL AND
9224 p_cust_site_use_rec.gl_id_clearing <> FND_API.G_MISS_NUM
9225 THEN
9226 validate_gl_id (
9227 p_gl_name => 'CLEARING',
9228 p_column_value => p_cust_site_use_rec.gl_id_clearing,
9229 p_coa_id => l_coa_id, -- Bug 3456489
9230 x_return_status => x_return_status );
9231
9232 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9233 hz_utility_v2pub.debug(p_message=>'gl_id_clearing is validate gl field. ' ||
9234 'x_return_status = ' || x_return_status,
9235 p_prefix =>l_debug_prefix,
9236 p_msg_level=>fnd_log.level_statement);
9237 END IF;
9238
9239 END IF;
9240
9241 ----------------------------------------------
9242 -- validate gl_id_unbilled
9243 ----------------------------------------------
9244
9245 -- gl_id_unbilled is validate gl field.
9246 IF p_cust_site_use_rec.gl_id_unbilled IS NOT NULL AND
9247 p_cust_site_use_rec.gl_id_unbilled <> FND_API.G_MISS_NUM
9248 THEN
9249 validate_gl_id (
9250 p_gl_name => 'UNBILLED',
9251 p_column_value => p_cust_site_use_rec.gl_id_unbilled,
9252 p_coa_id => l_coa_id, -- Bug 3456489
9253 x_return_status => x_return_status );
9254
9255 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9256 hz_utility_v2pub.debug(p_message=>'gl_id_unbilled is validate gl field. ' ||
9257 'x_return_status = ' || x_return_status,
9258 p_prefix =>l_debug_prefix,
9259 p_msg_level=>fnd_log.level_statement);
9260 END IF;
9261
9262 END IF;
9263
9264 ----------------------------------------------
9265 -- validate gl_id_unearned
9266 ----------------------------------------------
9267
9268 -- gl_id_unearned is validate gl field.
9269 IF p_cust_site_use_rec.gl_id_unearned IS NOT NULL AND
9270 p_cust_site_use_rec.gl_id_unearned <> FND_API.G_MISS_NUM
9271 THEN
9272 validate_gl_id (
9273 p_gl_name => 'UNEARNED',
9274 p_column_value => p_cust_site_use_rec.gl_id_unearned,
9275 p_coa_id => l_coa_id, -- Bug 3456489
9276 x_return_status => x_return_status );
9277
9278 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9279 hz_utility_v2pub.debug(p_message=>'gl_id_unearned is validate gl field. ' ||
9280 'x_return_status = ' || x_return_status,
9281 p_prefix =>l_debug_prefix,
9282 p_msg_level=>fnd_log.level_statement);
9283 END IF;
9284
9285 END IF;
9286
9287 ----------------------------------------------
9288 -- validate gl_id_unpaid_rec
9289 ----------------------------------------------
9290
9291 -- gl_id_unpaid_rec is validate gl field.
9292 IF p_cust_site_use_rec.gl_id_unpaid_rec IS NOT NULL AND
9293 p_cust_site_use_rec.gl_id_unpaid_rec <> FND_API.G_MISS_NUM
9294 THEN
9295 validate_gl_id (
9296 p_gl_name => 'UNPAID_REC',
9297 p_column_value => p_cust_site_use_rec.gl_id_unpaid_rec,
9298 p_coa_id => l_coa_id, -- Bug 3456489
9299 x_return_status => x_return_status );
9300
9301 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9302 hz_utility_v2pub.debug(p_message=>'gl_id_unpaid_rec is validate gl field. ' ||
9303 'x_return_status = ' || x_return_status,
9304 p_prefix =>l_debug_prefix,
9305 p_msg_level=>fnd_log.level_statement);
9306 END IF;
9307
9308 END IF;
9309
9310 ----------------------------------------------
9311 -- validate gl_id_remittance
9312 ----------------------------------------------
9313
9314 -- gl_id_remittance is validate gl field.
9315 IF p_cust_site_use_rec.gl_id_remittance IS NOT NULL AND
9316 p_cust_site_use_rec.gl_id_remittance <> FND_API.G_MISS_NUM
9317 THEN
9318 validate_gl_id (
9319 p_gl_name => 'REMITTANCE',
9320 p_column_value => p_cust_site_use_rec.gl_id_remittance,
9321 p_coa_id => l_coa_id, -- Bug 3456489
9322 x_return_status => x_return_status );
9323
9324 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9325 hz_utility_v2pub.debug(p_message=>'gl_id_remittance is validate gl field. ' ||
9326 'x_return_status = ' || x_return_status,
9327 p_prefix =>l_debug_prefix,
9328 p_msg_level=>fnd_log.level_statement);
9329 END IF;
9330
9331 END IF;
9332
9333 ----------------------------------------------
9334 -- validate gl_id_factor
9335 ----------------------------------------------
9336
9337 -- gl_id_factor is validate gl field.
9338 IF p_cust_site_use_rec.gl_id_factor IS NOT NULL AND
9339 p_cust_site_use_rec.gl_id_factor <> FND_API.G_MISS_NUM
9340 THEN
9341 validate_gl_id (
9342 p_gl_name => 'FACTOR',
9343 p_column_value => p_cust_site_use_rec.gl_id_factor,
9344 p_coa_id => l_coa_id, -- Bug 3456489
9345 x_return_status => x_return_status );
9346
9347 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9348 hz_utility_v2pub.debug(p_message=>'gl_id_factor is validate gl field. ' ||
9349 'x_return_status = ' || x_return_status,
9350 p_prefix =>l_debug_prefix,
9351 p_msg_level=>fnd_log.level_statement);
9352 END IF;
9353
9354 END IF;
9355
9356 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9357 hz_utility_v2pub.debug(p_message=>'(+) after validate gl_xxx ... ' ||
9358 'x_return_status = ' || x_return_status,
9359 p_prefix =>l_debug_prefix,
9360 p_msg_level=>fnd_log.level_statement);
9361 END IF;
9362
9363 END IF; -- Corresponding to IF l_coa_id IS NOT NULL (Bug 3456489)
9364 --------------------------------------
9365 -- validate ship_via
9366 --------------------------------------
9367
9368 -- ship_via is foreign key to oe_ship_methods_v
9369 -- can be used in both single and multi org case.
9370 IF p_cust_site_use_rec.ship_via IS NOT NULL AND
9371 p_cust_site_use_rec.ship_via <> FND_API.G_MISS_CHAR AND
9372 ( p_create_update_flag = 'C' OR
9373 ( p_create_update_flag = 'U' AND
9374 p_cust_site_use_rec.ship_via <> NVL( l_ship_via, FND_API.G_MISS_CHAR ) ) )
9375 THEN
9376 check_oe_ship_methods_v_fk (
9377 p_entity => 'SITE_USE',
9378 p_column => 'ship_via',
9379 p_column_value => p_cust_site_use_rec.ship_via,
9380 x_return_status => x_return_status );
9381
9382 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9383 hz_utility_v2pub.debug(p_message=>'ship_via is foreign key to oe_ship_methods_v. ' ||
9384 'x_return_status = ' || x_return_status,
9385 p_prefix =>l_debug_prefix,
9386 p_msg_level=>fnd_log.level_statement);
9387 END IF;
9388
9389 END IF;
9390
9391 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9392 hz_utility_v2pub.debug(p_message=>'(+) after validate ship_via ... ' ||
9393 'x_return_status = ' || x_return_status,
9394 p_prefix =>l_debug_prefix,
9395 p_msg_level=>fnd_log.level_statement);
9396 END IF;
9397
9398
9399 --------------------------------------
9400 -- validate created_by_module
9401 --------------------------------------
9402
9403 validate_created_by_module(
9404 p_create_update_flag => p_create_update_flag,
9405 p_created_by_module => p_cust_site_use_rec.created_by_module,
9406 p_old_created_by_module => l_created_by_module,
9407 x_return_status => x_return_status);
9408
9409 --------------------------------------
9410 -- validate application_id
9411 --------------------------------------
9412
9413 validate_application_id(
9414 p_create_update_flag => p_create_update_flag,
9415 p_application_id => p_cust_site_use_rec.application_id,
9416 p_old_application_id => l_application_id,
9417 x_return_status => x_return_status);
9418
9419 -- Debug info.
9420
9421 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9422 hz_utility_v2pub.debug(p_message=>'validate_cust_site_use (-)',
9423 p_prefix=>l_debug_prefix,
9424 p_msg_level=>fnd_log.level_procedure);
9425 END IF;
9426
9427 END validate_cust_site_use;
9428
9429 /**
9430 * PROCEDURE validate_cust_account_role
9431 *
9432 * DESCRIPTION
9433 * Validates customer account role record. Checks for
9434 * uniqueness
9435 * lookup types
9436 * mandatory columns
9437 * non-updateable fields
9438 * foreign key validations
9439 * other validations
9440 *
9441 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
9442 *
9443 * ARGUMENTS
9444 * IN:
9445 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
9446 * p_cust_account_role_rec Customer account role record.
9447 * p_rowid Rowid of the record (used only in update mode).
9448 * IN/OUT:
9449 * x_return_status Return status after the call. The status can
9450 * be FND_API.G_RET_STS_SUCCESS (success),
9451 * FND_API.G_RET_STS_ERROR (error),
9452 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
9453 *
9454 * NOTES
9455 *
9456 * MODIFICATION HISTORY
9457 *
9458 * 07-23-2001 Jianying Huang o Created.
9459 *
9460 */
9461
9462 PROCEDURE validate_cust_account_role (
9463 p_create_update_flag IN VARCHAR2,
9464 p_cust_account_role_rec IN HZ_CUST_ACCOUNT_ROLE_V2PUB.CUST_ACCOUNT_ROLE_REC_TYPE,
9465 p_rowid IN ROWID,
9466 x_return_status IN OUT NOCOPY VARCHAR2
9467 ) IS
9468
9469 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_cust_account_role'
9470
9471 l_dummy VARCHAR2(1);
9472
9473 l_party_id NUMBER;
9474 l_cust_account_id NUMBER;
9475 l_cust_acct_site_id NUMBER;
9476 l_role_type HZ_CUST_ACCOUNT_ROLES.role_type%TYPE;
9477 l_created_by_module HZ_CUST_ACCOUNT_ROLES.created_by_module%TYPE;
9478 l_application_id NUMBER;
9479 l_orig_system_reference HZ_CUST_ACCOUNT_ROLES.orig_system_reference%TYPE;
9480 l_status HZ_CUST_ACCOUNT_ROLES.status%TYPE;
9481 l_validate_flag varchar2(1) := 'Y';
9482 l_mosr_owner_table_id number;
9483 l_return_status VARCHAR2(1);
9484 l_org_id HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
9485 l_temp_return_status VARCHAR2(10); -- for storing return status from
9486 -- hz_orig_system_ref_pub.get_owner_table_id
9487
9488 BEGIN
9489
9490 -- Check if API is called in debug mode. If yes, enable debug.
9491 --enable_debug;
9492
9493 -- Debug info.
9494
9495 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9496 hz_utility_v2pub.debug(p_message=>'validate_cust_account_role (+)',
9497 p_prefix=>l_debug_prefix,
9498 p_msg_level=>fnd_log.level_procedure);
9499 END IF;
9500
9501
9502 -- Select fields for later use during update.
9503 IF p_create_update_flag = 'U' THEN
9504 SELECT PARTY_ID, CUST_ACCOUNT_ID, CUST_ACCT_SITE_ID,
9505 ROLE_TYPE, ORIG_SYSTEM_REFERENCE, CREATED_BY_MODULE,
9506 APPLICATION_ID, STATUS
9507 INTO l_party_id, l_cust_account_id, l_cust_acct_site_id,
9508 l_role_type, l_orig_system_reference, l_created_by_module,
9509 l_application_id, l_status
9510 FROM HZ_CUST_ACCOUNT_ROLES
9511 WHERE CUST_ACCOUNT_ROLE_ID = p_cust_account_role_rec.cust_account_role_id;
9512 END IF;
9513
9514 --------------------------------------
9515 -- validate cust_account_role_id
9516 --------------------------------------
9517 /****Logical APIs - validation not required****/
9518 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9519 IF p_create_update_flag = 'C' THEN
9520
9521 -- If primary key value is passed, check for uniqueness.
9522 -- If primary key value is not passed, it will be generated
9523 -- from sequence by table handler.
9524
9525 IF p_cust_account_role_rec.cust_account_role_id IS NOT NULL AND
9526 p_cust_account_role_rec.cust_account_role_id <> FND_API.G_MISS_NUM
9527 THEN
9528 BEGIN
9529 SELECT 'Y' INTO l_dummy
9530 FROM HZ_CUST_ACCOUNT_ROLES
9531 WHERE CUST_ACCOUNT_ROLE_ID = p_cust_account_role_rec.cust_account_role_id;
9532
9533 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9534 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_role_id' );
9535 FND_MSG_PUB.ADD;
9536 x_return_status := FND_API.G_RET_STS_ERROR;
9537 EXCEPTION
9538 WHEN NO_DATA_FOUND THEN
9539 NULL;
9540 END;
9541
9542 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9543 hz_utility_v2pub.debug(p_message=>'cust_account_role_id is unique during creation if passed in. ' ||
9544 'x_return_status = ' || x_return_status,
9545 p_prefix =>l_debug_prefix,
9546 p_msg_level=>fnd_log.level_statement);
9547 END IF;
9548
9549 END IF;
9550
9551 END IF;
9552
9553 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9554 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_role_id ... ' ||
9555 'x_return_status = ' || x_return_status,
9556 p_prefix =>l_debug_prefix,
9557 p_msg_level=>fnd_log.level_statement);
9558 END IF;
9559 END IF;
9560
9561 ----------------------------------------------
9562 -- validate party_id
9563 ----------------------------------------------
9564 /****Logical APIs - validation not required****/
9565 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9566 -- party_id is mandatory field
9567 -- Since party_id is non-updateable, we only need to check mandatory
9568 -- during creation.
9569
9570 IF p_create_update_flag = 'C' THEN
9571 validate_mandatory (
9572 p_create_update_flag => p_create_update_flag,
9573 p_column => 'party_id',
9574 p_column_value => p_cust_account_role_rec.party_id,
9575 x_return_status => x_return_status );
9576
9577 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9578 hz_utility_v2pub.debug(p_message=>'party_id is mandatory. ' ||
9579 'x_return_status = ' || x_return_status,
9580 p_prefix =>l_debug_prefix,
9581 p_msg_level=>fnd_log.level_statement);
9582 END IF;
9583
9584 END IF;
9585
9586 -- party_id is non-updateable field
9587 IF p_create_update_flag = 'U' AND
9588 p_cust_account_role_rec.party_id IS NOT NULL
9589 THEN
9590 validate_nonupdateable (
9591 p_column => 'party_id',
9592 p_column_value => p_cust_account_role_rec.party_id,
9593 p_old_column_value => l_party_id,
9594 x_return_status => x_return_status );
9595
9596 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9597 hz_utility_v2pub.debug(p_message=>'party_id is non-updateable. ' ||
9598 'x_return_status = ' || x_return_status,
9599 p_prefix =>l_debug_prefix,
9600 p_msg_level=>fnd_log.level_statement);
9601 END IF;
9602
9603 END IF;
9604
9605 -- party_id is type of party_relationship.
9606 -- party_id is the object_id in the relationship. Subject_id is the party
9607 -- referened by cust_account_id.
9608 -- However, we decide donot add this validation for now since we may
9609 -- need migrate data. (Dylan's reply)
9610
9611 -- party_id is foreign key to hz_parties
9612 -- Since party_id is mandatory and non-updateable, we only need to
9613 -- check FK during creation.
9614
9615 IF p_create_update_flag = 'C' AND
9616 p_cust_account_role_rec.party_id IS NOT NULL AND
9617 p_cust_account_role_rec.party_id <> FND_API.G_MISS_NUM
9618 THEN
9619 check_party_fk (
9620 p_column => 'party_id',
9621 p_column_value => p_cust_account_role_rec.party_id,
9622 x_return_status => x_return_status );
9623
9624 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9625 hz_utility_v2pub.debug(p_message=>'party_id is foreign key to hz_parties. ' ||
9626 'x_return_status = ' || x_return_status,
9627 p_prefix =>l_debug_prefix,
9628 p_msg_level=>fnd_log.level_statement);
9629 END IF;
9630
9631 END IF;
9632
9633 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9634 hz_utility_v2pub.debug(p_message=>'(+) after validate party_id ... ' ||
9635 'x_return_status = ' || x_return_status,
9636 p_prefix =>l_debug_prefix,
9637 p_msg_level=>fnd_log.level_statement);
9638 END IF;
9639 END IF;
9640
9641 ----------------------------------------------
9642 -- validate cust_account_id
9643 ----------------------------------------------
9644 /****Logical APIs - validation not required****/
9645 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9646 -- cust_account_id is mandatory field
9647 -- Since cust_account_id is non-updateable, we only need to check mandatory
9648 -- during creation.
9649
9650 IF p_create_update_flag = 'C' THEN
9651 validate_mandatory (
9652 p_create_update_flag => p_create_update_flag,
9653 p_column => 'cust_account_id',
9654 p_column_value => p_cust_account_role_rec.cust_account_id,
9655 x_return_status => x_return_status );
9656
9657 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9658 hz_utility_v2pub.debug(p_message=>'cust_account_id is mandatory. ' ||
9659 'x_return_status = ' || x_return_status,
9660 p_prefix =>l_debug_prefix,
9661 p_msg_level=>fnd_log.level_statement);
9662 END IF;
9663
9664 END IF;
9665
9666 -- cust_account_id is non-updateable field
9667 IF p_create_update_flag = 'U' AND
9668 p_cust_account_role_rec.cust_account_id IS NOT NULL
9669 THEN
9670 validate_nonupdateable (
9671 p_column => 'cust_account_id',
9672 p_column_value => p_cust_account_role_rec.cust_account_id,
9673 p_old_column_value => l_cust_account_id,
9674 x_return_status => x_return_status );
9675
9676 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9677 hz_utility_v2pub.debug(p_message=>'cust_account_id is non-updateable. ' ||
9678 'x_return_status = ' || x_return_status,
9679 p_prefix =>l_debug_prefix,
9680 p_msg_level=>fnd_log.level_statement);
9681 END IF;
9682
9683 END IF;
9684
9685 -- cust_account_id is foreign key to hz_cust_accounts
9686 -- Since cust_account_id is mandatory and non-updateable,
9687 -- we only need to check FK during creation.
9688
9689 IF p_create_update_flag = 'C' AND
9690 p_cust_account_role_rec.cust_account_id IS NOT NULL AND
9691 p_cust_account_role_rec.cust_account_id <> FND_API.G_MISS_NUM
9692 THEN
9693 check_cust_account_fk (
9694 p_column => 'cust_account_id',
9695 p_column_value => p_cust_account_role_rec.cust_account_id,
9696 x_return_status => x_return_status );
9697
9698 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9699 hz_utility_v2pub.debug(p_message=>'cust_account_id is foreign key to hz_cust_accounts. ' ||
9700 'x_return_status = ' || x_return_status,
9701 p_prefix =>l_debug_prefix,
9702 p_msg_level=>fnd_log.level_statement);
9703 END IF;
9704
9705 END IF;
9706
9707 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9708 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_id ... ' ||
9709 'x_return_status = ' || x_return_status,
9710 p_prefix =>l_debug_prefix,
9711 p_msg_level=>fnd_log.level_statement);
9712 END IF;
9713 END IF;
9714
9715 ----------------------------------------------
9716 -- validate cust_acct_site_id
9717 ----------------------------------------------
9718 /****Logical APIs - validation not required****/
9719 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9720 -- cust_acct_site_id is non-updateable field
9721 IF p_create_update_flag = 'U' AND
9722 p_cust_account_role_rec.cust_acct_site_id IS NOT NULL
9723 THEN
9724 validate_nonupdateable (
9725 p_column => 'cust_acct_site_id',
9726 p_column_value => p_cust_account_role_rec.cust_acct_site_id,
9727 p_old_column_value => l_cust_acct_site_id,
9728 x_return_status => x_return_status );
9729
9730 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9731 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is non-updateable. ' ||
9732 'x_return_status = ' || x_return_status,
9733 p_prefix =>l_debug_prefix,
9734 p_msg_level=>fnd_log.level_statement);
9735 END IF;
9736
9737 END IF;
9738
9739 -- cust_acct_site_id is foreign key to hz_cust_acct_sites.
9740 -- The cust_account_id in hz_cust_acct_sites should be same
9741 -- as we put in cust_account_id in hz_cust_account_roles.
9742 -- Since cust_acct_site_id is non-updateable, we only need to
9743 -- check FK during creation.
9744
9745 IF p_create_update_flag = 'C' AND
9746 p_cust_account_role_rec.cust_acct_site_id IS NOT NULL AND
9747 p_cust_account_role_rec.cust_acct_site_id <> FND_API.G_MISS_NUM
9748 THEN
9749 BEGIN
9750
9751 SELECT CUST_ACCOUNT_ID,ORG_ID
9752 INTO l_cust_account_id,l_org_id
9753 FROM HZ_CUST_ACCT_SITES_ALL
9754 WHERE CUST_ACCT_SITE_ID = p_cust_account_role_rec.cust_acct_site_id;
9755
9756 -- Bug 4650473. Check if org is accessible.
9757 BEGIN
9758 MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
9759 EXCEPTION
9760 WHEN OTHERS
9761 THEN
9762 x_return_status := FND_API.G_RET_STS_ERROR;
9763 END;
9764
9765 IF l_cust_account_id <> p_cust_account_role_rec.cust_account_id THEN
9766 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_SITE_MISSMATCH' );
9767 FND_MSG_PUB.ADD;
9768 x_return_status := FND_API.G_RET_STS_ERROR;
9769 END IF;
9770
9771 EXCEPTION
9772 WHEN NO_DATA_FOUND THEN
9773 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
9774 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_acct_site_id' );
9775 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id' );
9776 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_acct_sites' );
9777 FND_MSG_PUB.ADD;
9778 x_return_status := FND_API.G_RET_STS_ERROR;
9779 END;
9780
9781 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9782 hz_utility_v2pub.debug(p_message=>'cust_acct_site_id is foreign key to hz_cust_acct_sites and cust_account_id in hz_cust_acct_sites should be same as we put in cust_account_id in hz_cust_account_roles.' ||
9783 'x_return_status = ' || x_return_status,
9784 p_prefix =>l_debug_prefix,
9785 p_msg_level=>fnd_log.level_statement);
9786 END IF;
9787
9788 END IF;
9789
9790 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9791 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_acct_site_id ... ' ||
9792 'x_return_status = ' || x_return_status,
9793 p_prefix =>l_debug_prefix,
9794 p_msg_level=>fnd_log.level_statement);
9795 END IF;
9796 END IF;
9797
9798 ----------------------------------------------
9799 -- validate role_type
9800 ----------------------------------------------
9801
9802 -- role_type is mandatory field
9803 -- Since role_type is non-updateable, we only need to check mandatory
9804 -- during creation.
9805
9806 IF p_create_update_flag = 'C' THEN
9807 validate_mandatory (
9808 p_create_update_flag => p_create_update_flag,
9809 p_column => 'role_type',
9810 p_column_value => p_cust_account_role_rec.role_type,
9811 x_return_status => x_return_status );
9812
9813 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9814 hz_utility_v2pub.debug(p_message=>'role_type is mandatory. ' ||
9815 'x_return_status = ' || x_return_status,
9816 p_prefix =>l_debug_prefix,
9817 p_msg_level=>fnd_log.level_statement);
9818 END IF;
9819
9820 END IF;
9821
9822 -- role_type is non-updateable field
9823 IF p_create_update_flag = 'U' AND
9824 p_cust_account_role_rec.role_type IS NOT NULL
9825 THEN
9826 validate_nonupdateable (
9827 p_column => 'role_type',
9828 p_column_value => p_cust_account_role_rec.role_type,
9829 p_old_column_value => l_role_type,
9830 x_return_status => x_return_status );
9831
9832 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9833 hz_utility_v2pub.debug(p_message=>'role_type is non-updateable. ' ||
9834 'x_return_status = ' || x_return_status,
9835 p_prefix =>l_debug_prefix,
9836 p_msg_level=>fnd_log.level_statement);
9837 END IF;
9838
9839 END IF;
9840
9841 -- role_type is lookup code in lookup type ACCT_ROLE_TYPE
9842 -- Since role_type is non-updateable, we only need to do the checking
9843 -- during creation.
9844
9845 IF p_create_update_flag = 'C' AND
9846 p_cust_account_role_rec.role_type IS NOT NULL AND
9847 p_cust_account_role_rec.role_type <> FND_API.G_MISS_CHAR
9848 THEN
9849 validate_lookup (
9850 p_column => 'role_type',
9851 p_lookup_type => 'ACCT_ROLE_TYPE',
9852 p_column_value => p_cust_account_role_rec.role_type,
9853 x_return_status => x_return_status );
9854
9855 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9856 hz_utility_v2pub.debug(p_message=>'role_type is lookup code in lookup type ACCT_ROLE_TYPE. ' ||
9857 'x_return_status = ' || x_return_status,
9858 p_prefix =>l_debug_prefix,
9859 p_msg_level=>fnd_log.level_statement);
9860 END IF;
9861
9862 END IF;
9863
9864 -- The combination of CUST_ACCOUNT_ID, PARTY_ID, ROLE_TYPE should be unique.
9865 -- Or the combination of CUST_ACCT_SITE_ID, PARTY_ID, ROLE_TYPE should be unique.
9866 -- We only need to check this during creation because all of these
9867 -- three columns are non-updateable.
9868
9869 IF p_create_update_flag = 'C' THEN
9870 IF p_cust_account_role_rec.cust_acct_site_id IS NULL OR
9871 p_cust_account_role_rec.cust_acct_site_id = FND_API.G_MISS_NUM
9872 THEN
9873 BEGIN
9874 SELECT 'Y' INTO l_dummy
9875 FROM HZ_CUST_ACCOUNT_ROLES
9876 WHERE CUST_ACCOUNT_ID = p_cust_account_role_rec.cust_account_id
9877 AND PARTY_ID = p_cust_account_role_rec.party_id
9878 AND CUST_ACCT_SITE_ID IS NULL
9879 AND ROLE_TYPE = p_cust_account_role_rec.role_type
9880 AND STATUS='A' -- Bug 4624292
9881 AND ROWNUM = 1;
9882
9883 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9884 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_id - role_type' );
9885 FND_MSG_PUB.ADD;
9886 x_return_status := FND_API.G_RET_STS_ERROR;
9887 EXCEPTION
9888 WHEN NO_DATA_FOUND THEN
9889 NULL;
9890 END;
9891
9892 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9893 hz_utility_v2pub.debug(p_message=>'the combination of cust_account_id, party_id, role_type should be unique. ' ||
9894 'x_return_status = ' || x_return_status,
9895 p_prefix =>l_debug_prefix,
9896 p_msg_level=>fnd_log.level_statement);
9897 END IF;
9898
9899 ELSE
9900 BEGIN
9901 SELECT 'Y' INTO l_dummy
9902 FROM HZ_CUST_ACCOUNT_ROLES
9903 WHERE CUST_ACCT_SITE_ID = p_cust_account_role_rec.cust_acct_site_id
9904 AND PARTY_ID = p_cust_account_role_rec.party_id
9905 AND ROLE_TYPE = p_cust_account_role_rec.role_type
9906 AND STATUS='A' -- Bug 4624292
9907 AND ROWNUM = 1;
9908
9909 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9910 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - party_id - role_type' );
9911 FND_MSG_PUB.ADD;
9912 x_return_status := FND_API.G_RET_STS_ERROR;
9913 EXCEPTION
9914 WHEN NO_DATA_FOUND THEN
9915 NULL;
9916 END;
9917
9918 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9919 hz_utility_v2pub.debug(p_message=>'the combination of cust_acct_site_id, party_id, role_type should be unique. ' ||
9920 'x_return_status = ' || x_return_status,
9921 p_prefix =>l_debug_prefix,
9922 p_msg_level=>fnd_log.level_statement);
9923 END IF;
9924
9925 END IF;
9926
9927 ELSE -- Update case (Bug 4624292)
9928 IF p_cust_account_role_rec.status='A'
9929 AND l_status='I'
9930 THEN
9931 IF l_cust_acct_site_id IS NOT NULL
9932 THEN
9933 BEGIN
9934 SELECT 'Y' INTO l_dummy
9935 FROM HZ_CUST_ACCOUNT_ROLES
9936 WHERE
9937 CUST_ACCT_SITE_ID = nvl(p_cust_account_role_rec.cust_acct_site_id,l_cust_acct_site_id)
9938 AND PARTY_ID = nvl(p_cust_account_role_rec.party_id,l_party_id)
9939 AND ROLE_TYPE = nvl(p_cust_account_role_rec.role_type,l_role_type)
9940 AND STATUS='A'
9941 AND ROWID<>p_rowid
9942 AND ROWNUM = 1;
9943
9944 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9945 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_acct_site_id - party_id - role_type' );
9946 FND_MSG_PUB.ADD;
9947 x_return_status := FND_API.G_RET_STS_ERROR;
9948 EXCEPTION
9949 WHEN NO_DATA_FOUND THEN
9950 NULL;
9951 END;
9952
9953 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9954 hz_utility_v2pub.debug(p_message=>'the combination of cust_acct_site_id, party_id, role_type should be unique. ' ||
9955 'x_return_status = ' || x_return_status,
9956 p_prefix =>l_debug_prefix,
9957 p_msg_level=>fnd_log.level_statement);
9958 END IF;
9959
9960 ELSE
9961 BEGIN
9962 SELECT 'Y' INTO l_dummy
9963 FROM HZ_CUST_ACCOUNT_ROLES
9964 WHERE
9965 CUST_ACCT_SITE_ID IS NULL
9966 AND CUST_ACCOUNT_ID = nvl(p_cust_account_role_rec.cust_account_id,l_cust_account_id)
9967 AND PARTY_ID = nvl(p_cust_account_role_rec.party_id,l_party_id)
9968 AND ROLE_TYPE = nvl(p_cust_account_role_rec.role_type,l_role_type)
9969 AND STATUS='A'
9970 AND ROWID<>p_rowid
9971 AND ROWNUM = 1;
9972
9973 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
9974 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_id - party_id - role_type' );
9975 FND_MSG_PUB.ADD;
9976 x_return_status := FND_API.G_RET_STS_ERROR;
9977 EXCEPTION
9978 WHEN NO_DATA_FOUND THEN
9979 NULL;
9980 END;
9981
9982 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9983 hz_utility_v2pub.debug(p_message=>'the combination of cust_account_id, party_id, role_type should be unique. ' ||
9984 'x_return_status = ' || x_return_status,
9985 p_prefix =>l_debug_prefix,
9986 p_msg_level=>fnd_log.level_statement);
9987 END IF;
9988
9989 END IF;
9990 END IF;
9991 END IF;
9992
9993 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9994 hz_utility_v2pub.debug(p_message=>'(+) after validate role_type ... ' ||
9995 'x_return_status = ' || x_return_status,
9996 p_prefix =>l_debug_prefix,
9997 p_msg_level=>fnd_log.level_statement);
9998 END IF;
9999
10000
10001 ----------------------------------------------
10002 -- validate orig_system_reference
10003 ----------------------------------------------
10004 /****Logical APIs - validation not required****/
10005 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10006 IF (p_cust_account_role_rec.orig_system is not null and p_cust_account_role_rec.orig_system <>fnd_api.g_miss_char)
10007 and (p_cust_account_role_rec.orig_system_reference is not null and p_cust_account_role_rec.orig_system_reference <>fnd_api.g_miss_char)
10008 and p_create_update_flag = 'U'
10009 then
10010 hz_orig_system_ref_pub.get_owner_table_id
10011 (p_orig_system => p_cust_account_role_rec.orig_system,
10012 p_orig_system_reference => p_cust_account_role_rec.orig_system_reference,
10013 p_owner_table_name => 'HZ_CUST_ACCOUNT_ROLES',
10014 x_owner_table_id => l_mosr_owner_table_id,
10015 x_return_status => l_temp_return_status);
10016
10017 IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
10018 l_mosr_owner_table_id= nvl(p_cust_account_role_rec.cust_account_role_id,l_mosr_owner_table_id))
10019 THEN
10020 l_validate_flag := 'N';
10021 END IF;
10022
10023 -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
10024 -- x_return_status. Set x_return_status to error, ONLY if there is error.
10025 -- In case of success, leave it to carry over previous value as before this call.
10026 -- Fix for Bug 5498116 (29-AUG-2006)
10027 IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
10028 x_return_status := l_temp_return_status;
10029 END IF;
10030
10031 end if;
10032 -- orig_system_reference is non-updateable field
10033 IF p_create_update_flag = 'U' AND
10034 p_cust_account_role_rec.orig_system_reference IS NOT NULL
10035 and l_validate_flag = 'Y'
10036 THEN
10037 validate_nonupdateable (
10038 p_column => 'orig_system_reference',
10039 p_column_value => p_cust_account_role_rec.orig_system_reference,
10040 p_old_column_value => l_orig_system_reference,
10041 x_return_status => x_return_status );
10042
10043 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10044 hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
10045 'x_return_status = ' || x_return_status,
10046 p_prefix =>l_debug_prefix,
10047 p_msg_level=>fnd_log.level_statement);
10048 END IF;
10049
10050 END IF;
10051
10052 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10053 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
10054 'x_return_status = ' || x_return_status,
10055 p_prefix =>l_debug_prefix,
10056 p_msg_level=>fnd_log.level_statement);
10057 END IF;
10058 END IF;
10059
10060 ----------------------------------------------
10061 -- validate primary_flag
10062 ----------------------------------------------
10063 /****Logical APIs - validation not required****/
10064 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10065
10066 -- primary_flag is lookup code in lookup type YES/NO
10067 IF p_cust_account_role_rec.primary_flag IS NOT NULL AND
10068 p_cust_account_role_rec.primary_flag <> FND_API.G_MISS_CHAR
10069 THEN
10070 validate_lookup (
10071 p_column => 'primary_flag',
10072 p_lookup_type => 'YES/NO',
10073 p_column_value => p_cust_account_role_rec.primary_flag,
10074 x_return_status => x_return_status );
10075
10076 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10077 hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
10078 'x_return_status = ' || x_return_status,
10079 p_prefix =>l_debug_prefix,
10080 p_msg_level=>fnd_log.level_statement);
10081 END IF;
10082
10083 END IF;
10084 END IF;
10085
10086 -- primary_flag is unique per cust_account_id or cust_acct_site_id
10087
10088 IF p_cust_account_role_rec.primary_flag = 'Y' THEN
10089 IF p_create_update_flag = 'C' THEN
10090 l_cust_account_id := p_cust_account_role_rec.cust_account_id;
10091 l_cust_acct_site_id := p_cust_account_role_rec.cust_acct_site_id;
10092 END IF;
10093
10094 IF l_cust_acct_site_id IS NULL OR
10095 l_cust_acct_site_id = FND_API.G_MISS_NUM
10096 THEN
10097 BEGIN
10098 SELECT 'Y' INTO l_dummy
10099 FROM HZ_CUST_ACCOUNT_ROLES
10100 WHERE CUST_ACCOUNT_ID = l_cust_account_id
10101 AND CUST_ACCT_SITE_ID IS NULL
10102 AND PRIMARY_FLAG = 'Y'
10103 AND ( p_create_update_flag = 'C' OR
10104 p_create_update_flag = 'U' AND ROWID <> p_rowid )
10105 AND ROWNUM = 1;
10106
10107 FND_MESSAGE.SET_NAME( 'AR', 'HZ_CUST_ACCT_ROLE_PRIMARY' );
10108 FND_MESSAGE.SET_TOKEN( 'ENTITY', 'account' );
10109 FND_MSG_PUB.ADD;
10110 x_return_status := FND_API.G_RET_STS_ERROR;
10111 EXCEPTION
10112 WHEN NO_DATA_FOUND THEN
10113 NULL;
10114 END;
10115
10116 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10117 hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_account_id. ' ||
10118 'x_return_status = ' || x_return_status,
10119 p_prefix =>l_debug_prefix,
10120 p_msg_level=>fnd_log.level_statement);
10121 END IF;
10122
10123 ELSE
10124 BEGIN
10125 SELECT 'Y' INTO l_dummy
10126 FROM HZ_CUST_ACCOUNT_ROLES
10127 WHERE CUST_ACCOUNT_ID = l_cust_account_id
10128 AND CUST_ACCT_SITE_ID = l_cust_acct_site_id
10129 AND PRIMARY_FLAG = 'Y'
10130 AND ( p_create_update_flag = 'C' OR
10131 p_create_update_flag = 'U' AND ROWID <> p_rowid )
10132 AND ROWNUM = 1;
10133
10134 FND_MESSAGE.SET_NAME( 'AR', 'HZ_CUST_ACCT_ROLE_PRIMARY' );
10135 FND_MESSAGE.SET_TOKEN( 'ENTITY', 'account site' );
10136 FND_MSG_PUB.ADD;
10137 x_return_status := FND_API.G_RET_STS_ERROR;
10138 EXCEPTION
10139 WHEN NO_DATA_FOUND THEN
10140 NULL;
10141 END;
10142
10143 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10144 hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_acct_site_id. ' ||
10145 'x_return_status = ' || x_return_status,
10146 p_prefix =>l_debug_prefix,
10147 p_msg_level=>fnd_log.level_statement);
10148 END IF;
10149
10150 END IF;
10151 END IF;
10152
10153 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10154 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
10155 'x_return_status = ' || x_return_status,
10156 p_prefix =>l_debug_prefix,
10157 p_msg_level=>fnd_log.level_statement);
10158 END IF;
10159
10160
10161 --------------------------------------
10162 -- validate status
10163 --------------------------------------
10164
10165 -- status cannot be set to null during update
10166 IF p_create_update_flag = 'U' AND
10167 p_cust_account_role_rec.status IS NOT NULL
10168 THEN
10169 validate_cannot_update_to_null (
10170 p_column => 'status',
10171 p_column_value => p_cust_account_role_rec.status,
10172 x_return_status => x_return_status );
10173
10174 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10175 hz_utility_v2pub.debug(p_message=>'status cannot be updated to null. ' ||
10176 'x_return_status = ' || x_return_status,
10177 p_prefix =>l_debug_prefix,
10178 p_msg_level=>fnd_log.level_statement);
10179 END IF;
10180
10181 END IF;
10182
10183 /****Logical APIs - validation not required****/
10184 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10185 -- status is lookup code in lookup type REGISTRY_STATUS because
10186 -- the status is used in party merge.
10187 IF p_cust_account_role_rec.status IS NOT NULL AND
10188 p_cust_account_role_rec.status <> FND_API.G_MISS_CHAR AND
10189 ( p_create_update_flag = 'C' OR
10190 ( p_create_update_flag = 'U' AND
10191 p_cust_account_role_rec.status <> NVL( l_status, FND_API.G_MISS_CHAR ) ) )
10192 THEN
10193 validate_lookup (
10194 p_column => 'status',
10195 p_lookup_type => 'REGISTRY_STATUS',
10196 p_column_value => p_cust_account_role_rec.status,
10197 x_return_status => x_return_status );
10198
10199 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10200 hz_utility_v2pub.debug(p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10201 'x_return_status = ' || x_return_status,
10202 p_prefix =>l_debug_prefix,
10203 p_msg_level=>fnd_log.level_statement);
10204 END IF;
10205
10206 END IF;
10207 END IF;
10208
10209 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10210 hz_utility_v2pub.debug(p_message=>'(+) after validate status ... ' ||
10211 'x_return_status = ' || x_return_status,
10212 p_prefix =>l_debug_prefix,
10213 p_msg_level=>fnd_log.level_statement);
10214 END IF;
10215
10216
10217 --------------------------------------
10218 -- validate created_by_module
10219 --------------------------------------
10220
10221 validate_created_by_module(
10222 p_create_update_flag => p_create_update_flag,
10223 p_created_by_module => p_cust_account_role_rec.created_by_module,
10224 p_old_created_by_module => l_created_by_module,
10225 x_return_status => x_return_status);
10226
10227 --------------------------------------
10228 -- validate application_id
10229 --------------------------------------
10230
10231 validate_application_id(
10232 p_create_update_flag => p_create_update_flag,
10233 p_application_id => p_cust_account_role_rec.application_id,
10234 p_old_application_id => l_application_id,
10235 x_return_status => x_return_status);
10236
10237 -- Debug info.
10238 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10239 hz_utility_v2pub.debug(p_message=>'validate_cust_account_role (-)',
10240 p_prefix=>l_debug_prefix,
10241 p_msg_level=>fnd_log.level_procedure);
10242 END IF;
10243
10244 END validate_cust_account_role;
10245
10246 /**
10247 * PROCEDURE validate_role_responsibility
10248 *
10249 * DESCRIPTION
10250 * Validates customer account role responsibility record. Checks for
10251 * uniqueness
10252 * lookup types
10253 * mandatory columns
10254 * non-updateable fields
10255 * foreign key validations
10256 * other validations
10257 *
10258 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10259 *
10260 * ARGUMENTS
10261 * IN:
10262 * p_create_update_flag Create update flag. 'C' = create. 'U' = update.
10263 * p_role_responsibility_rec Customer account role responsibility record.
10264 * p_rowid Rowid of the record (used only in update mode).
10265 * IN/OUT:
10266 * x_return_status Return status after the call. The status can
10267 * be FND_API.G_RET_STS_SUCCESS (success),
10268 * FND_API.G_RET_STS_ERROR (error),
10269 * FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
10270 *
10271 * NOTES
10272 *
10273 * MODIFICATION HISTORY
10274 *
10275 * 07-23-2001 Jianying Huang o Created.
10276 *
10277 */
10278
10279 PROCEDURE validate_role_responsibility (
10280 p_create_update_flag IN VARCHAR2,
10281 p_role_responsibility_rec IN HZ_CUST_ACCOUNT_ROLE_V2PUB.ROLE_RESPONSIBILITY_REC_TYPE,
10282 p_rowid IN ROWID,
10283 x_return_status IN OUT NOCOPY VARCHAR2
10284 ) IS
10285
10286 l_debug_prefix VARCHAR2(30) := ''; -- 'validate_role_repsonsibility'
10287
10288 l_dummy VARCHAR2(1);
10289
10290 l_responsibility_type HZ_ROLE_RESPONSIBILITY.responsibility_type%TYPE;
10291 l_cust_account_role_id NUMBER;
10292 l_orig_system_reference HZ_ROLE_RESPONSIBILITY.orig_system_reference%TYPE;
10293 l_created_by_module HZ_ROLE_RESPONSIBILITY.created_by_module%TYPE;
10294 l_application_id NUMBER;
10295
10296 BEGIN
10297
10298 -- Check if API is called in debug mode. If yes, enable debug.
10299 --enable_debug;
10300
10301 -- Debug info.
10302 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10303 hz_utility_v2pub.debug(p_message=>'validate_role_responsibility (+)',
10304 p_prefix=>l_debug_prefix,
10305 p_msg_level=>fnd_log.level_procedure);
10306 END IF;
10307
10308 -- Select fields for later use during update.
10309 IF p_create_update_flag = 'U' THEN
10310 SELECT RESPONSIBILITY_TYPE, CUST_ACCOUNT_ROLE_ID, ORIG_SYSTEM_REFERENCE ,
10311 CREATED_BY_MODULE, APPLICATION_ID
10312 INTO l_responsibility_type, l_cust_account_role_id, l_orig_system_reference,
10313 l_created_by_module, l_application_id
10314 FROM HZ_ROLE_RESPONSIBILITY
10315 WHERE ROWID = p_rowid;
10316 END IF;
10317
10318 --------------------------------------
10319 -- validate responsibility_id
10320 --------------------------------------
10321 /****Logical APIs - validation not required****/
10322 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10323 IF p_create_update_flag = 'C' THEN
10324
10325 -- If primary key value is passed, check for uniqueness.
10326 -- If primary key value is not passed, it will be generated
10327 -- from sequence by table handler.
10328
10329 IF p_role_responsibility_rec.responsibility_id IS NOT NULL AND
10330 p_role_responsibility_rec.responsibility_id <> FND_API.G_MISS_NUM
10331 THEN
10332 BEGIN
10333 SELECT 'Y' INTO l_dummy
10334 FROM HZ_ROLE_RESPONSIBILITY
10335 WHERE RESPONSIBILITY_ID = p_role_responsibility_rec.responsibility_id;
10336
10337 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10338 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'responsibility_id' );
10339 FND_MSG_PUB.ADD;
10340 x_return_status := FND_API.G_RET_STS_ERROR;
10341 EXCEPTION
10342 WHEN NO_DATA_FOUND THEN
10343 NULL;
10344 END;
10345
10346 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10347 hz_utility_v2pub.debug(p_message=>'responsibility_id is unique during creation if passed in. ' ||
10348 'x_return_status = ' || x_return_status,
10349 p_prefix =>l_debug_prefix,
10350 p_msg_level=>fnd_log.level_statement);
10351 END IF;
10352
10353
10354 END IF;
10355 END IF;
10356
10357 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10358 hz_utility_v2pub.debug(p_message=>'(+) after validate responsibility_id ... ' ||
10359 'x_return_status = ' || x_return_status,
10360 p_prefix =>l_debug_prefix,
10361 p_msg_level=>fnd_log.level_statement);
10362 END IF;
10363 END IF;
10364
10365 ----------------------------------------------
10366 -- validate responsibility_type
10367 ----------------------------------------------
10368
10369 -- responsibility_type is mandatory field
10370
10371 validate_mandatory (
10372 p_create_update_flag => p_create_update_flag,
10373 p_column => 'responsibility_type',
10374 p_column_value => p_role_responsibility_rec.responsibility_type,
10375 x_return_status => x_return_status );
10376
10377 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10378 hz_utility_v2pub.debug(p_message=>'responsibility_type is mandatory. ' ||
10379 'x_return_status = ' || x_return_status,
10380 p_prefix =>l_debug_prefix,
10381 p_msg_level=>fnd_log.level_statement);
10382 END IF;
10383
10384
10385 -- responsibility_type is lookup code in lookup type SITE_USE_CODE
10386
10387 IF p_role_responsibility_rec.responsibility_type IS NOT NULL AND
10388 p_role_responsibility_rec.responsibility_type <> FND_API.G_MISS_CHAR AND
10389 ( p_create_update_flag = 'C' OR
10390 ( p_create_update_flag = 'U' AND
10391 p_role_responsibility_rec.responsibility_type <> NVL( l_responsibility_type, FND_API.G_MISS_CHAR ) ) )
10392 THEN
10393 validate_lookup (
10394 p_column => 'responsibility_type',
10395 p_lookup_type => 'SITE_USE_CODE',
10396 p_column_value => p_role_responsibility_rec.responsibility_type,
10397 x_return_status => x_return_status );
10398
10399 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10400 hz_utility_v2pub.debug(p_message=>'responsibility_type is lookup code in lookup type SITE_USE_CODE. ' ||
10401 'x_return_status = ' || x_return_status,
10402 p_prefix =>l_debug_prefix,
10403 p_msg_level=>fnd_log.level_statement);
10404 END IF;
10405
10406
10407 l_responsibility_type := p_role_responsibility_rec.responsibility_type;
10408 END IF;
10409
10410 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10411 hz_utility_v2pub.debug(p_message=>'(+) after validate responsibility_type ... ' ||
10412 'x_return_status = ' || x_return_status,
10413 p_prefix =>l_debug_prefix,
10414 p_msg_level=>fnd_log.level_statement);
10415 END IF;
10416
10417
10418 ----------------------------------------------
10419 -- validate cust_account_role_id
10420 ----------------------------------------------
10421 /****Logical APIs - validation not required****/
10422 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10423 -- cust_account_role_id is mandatory field
10424 -- Since cust_account_role_id is non-updateable, we only need to check mandatory
10425 -- during creation.
10426
10427 IF p_create_update_flag = 'C' THEN
10428 validate_mandatory (
10429 p_create_update_flag => p_create_update_flag,
10430 p_column => 'cust_account_role_id',
10431 p_column_value => p_role_responsibility_rec.cust_account_role_id,
10432 x_return_status => x_return_status );
10433
10434 l_cust_account_role_id := p_role_responsibility_rec.cust_account_role_id;
10435
10436 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10437 hz_utility_v2pub.debug(p_message=>'cust_account_role_id is mandatory. ' ||
10438 'x_return_status = ' || x_return_status,
10439 p_prefix =>l_debug_prefix,
10440 p_msg_level=>fnd_log.level_statement);
10441 END IF;
10442 END IF;
10443
10444 -- cust_account_role_id is non-updateable
10445 IF p_create_update_flag = 'U' AND
10446 p_role_responsibility_rec.cust_account_role_id IS NOT NULL
10447 THEN
10448 validate_nonupdateable (
10449 p_column => 'cust_account_role_id',
10450 p_column_value => p_role_responsibility_rec.cust_account_role_id,
10451 p_old_column_value => l_cust_account_role_id,
10452 x_return_status => x_return_status );
10453
10454 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10455 hz_utility_v2pub.debug(p_message=>'cust_account_role_id is non-updateable. ' ||
10456 'x_return_status = ' || x_return_status,
10457 p_prefix =>l_debug_prefix,
10458 p_msg_level=>fnd_log.level_statement);
10459 END IF;
10460
10461 END IF;
10462
10463 -- cust_account_role_id is foreign key to hz_cust_account_roles.
10464 -- Since cust_account_role_id is mandatory and non-updateable,
10465 -- we only need to check FK during creation.
10466
10467 IF p_create_update_flag = 'C' AND
10468 p_role_responsibility_rec.cust_account_role_id IS NOT NULL AND
10469 p_role_responsibility_rec.cust_account_role_id <> FND_API.G_MISS_NUM
10470 THEN
10471 check_cust_account_role_fk (
10472 p_column => 'cust_account_role_id',
10473 p_column_value => p_role_responsibility_rec.cust_account_role_id,
10474 x_return_status => x_return_status );
10475
10476 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10477 hz_utility_v2pub.debug(p_message=>'cust_account_role_id is foreign key to hz_cust_account_roles. ' ||
10478 'x_return_status = ' || x_return_status,
10479 p_prefix =>l_debug_prefix,
10480 p_msg_level=>fnd_log.level_statement);
10481 END IF;
10482
10483 END IF;
10484
10485 -- The combination of cust_account_role_id and responsibility_type
10486 -- should be unique.
10487
10488 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10489 hz_utility_v2pub.debug(p_message=>'cust_account_role_id = ' || l_cust_account_role_id || ' ' ||
10490 'role_responsibility_id = ' || l_responsibility_type || ' ' ||
10491 'create_update_flag = ' || p_create_update_flag || ' ' ||
10492 'p_rowid = ' || p_rowid || ' ' ||
10493 'x_return_status = ' || x_return_status,
10494 p_prefix =>l_debug_prefix,
10495 p_msg_level=>fnd_log.level_statement);
10496 END IF;
10497 END IF;
10498
10499 BEGIN
10500 SELECT 'Y' INTO l_dummy
10501 FROM HZ_ROLE_RESPONSIBILITY
10502 WHERE CUST_ACCOUNT_ROLE_ID = l_cust_account_role_id
10503 AND RESPONSIBILITY_TYPE = l_responsibility_type
10504 AND ( p_create_update_flag = 'C' OR
10505 ( p_create_update_flag = 'U' AND ROWID <> p_rowid ) )
10506 AND ROWNUM = 1;
10507
10508 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DUPLICATE_COLUMN' );
10509 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'cust_account_role_id - responsibility_type' );
10510 FND_MSG_PUB.ADD;
10511 x_return_status := FND_API.G_RET_STS_ERROR;
10512 EXCEPTION
10513 WHEN NO_DATA_FOUND THEN
10514 NULL;
10515 END;
10516
10517 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10518 hz_utility_v2pub.debug(p_message=>'combination of cust_account_role_id and responsibility_type should be unique. ' ||
10519 'x_return_status = ' || x_return_status,
10520 p_prefix =>l_debug_prefix,
10521 p_msg_level=>fnd_log.level_statement);
10522 END IF;
10523
10524 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10525 hz_utility_v2pub.debug(p_message=>'(+) after validate cust_account_role_id ... ' ||
10526 'x_return_status = ' || x_return_status,
10527 p_prefix =>l_debug_prefix,
10528 p_msg_level=>fnd_log.level_statement);
10529 END IF;
10530
10531
10532 ----------------------------------------------
10533 -- validate orig_system_reference
10534 ----------------------------------------------
10535 /****Logical APIs - validation not required****/
10536 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10537 -- orig_system_reference is non-updateable field
10538 IF p_create_update_flag = 'U' AND
10539 p_role_responsibility_rec.orig_system_reference IS NOT NULL
10540 THEN
10541 validate_nonupdateable (
10542 p_column => 'orig_system_reference',
10543 p_column_value => p_role_responsibility_rec.orig_system_reference,
10544 p_old_column_value => l_orig_system_reference,
10545 x_return_status => x_return_status );
10546
10547 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10548 hz_utility_v2pub.debug(p_message=>'orig_system_reference is non-updateable. ' ||
10549 'x_return_status = ' || x_return_status,
10550 p_prefix =>l_debug_prefix,
10551 p_msg_level=>fnd_log.level_statement);
10552 END IF;
10553
10554
10555 END IF;
10556
10557 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10558 hz_utility_v2pub.debug(p_message=>'(+) after validate orig_system_reference ... ' ||
10559 'x_return_status = ' || x_return_status,
10560 p_prefix =>l_debug_prefix,
10561 p_msg_level=>fnd_log.level_statement);
10562 END IF;
10563 END IF;
10564
10565 ----------------------------------------------
10566 -- validate primary_flag
10567 ----------------------------------------------
10568 /****Logical APIs - validation not required****/
10569 IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10570 -- primary_flag is lookup code in lookup type YES/NO
10571 IF p_role_responsibility_rec.primary_flag IS NOT NULL AND
10572 p_role_responsibility_rec.primary_flag <> FND_API.G_MISS_CHAR
10573 THEN
10574 validate_lookup (
10575 p_column => 'primary_flag',
10576 p_lookup_type => 'YES/NO',
10577 p_column_value => p_role_responsibility_rec.primary_flag,
10578 x_return_status => x_return_status );
10579
10580 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10581 hz_utility_v2pub.debug(p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
10582 'x_return_status = ' || x_return_status,
10583 p_prefix =>l_debug_prefix,
10584 p_msg_level=>fnd_log.level_statement);
10585 END IF;
10586
10587 END IF;
10588 END IF;
10589
10590 -- primary_flag is unique per cust_account_role_id
10591 IF p_role_responsibility_rec.primary_flag = 'Y' THEN
10592 IF p_create_update_flag = 'C' THEN
10593 l_cust_account_role_id := p_role_responsibility_rec.cust_account_role_id;
10594 END IF;
10595
10596 BEGIN
10597 SELECT 'Y' INTO l_dummy
10598 FROM HZ_ROLE_RESPONSIBILITY
10599 WHERE CUST_ACCOUNT_ROLE_ID = l_cust_account_role_id
10600 AND PRIMARY_FLAG = 'Y'
10601 AND ( p_create_update_flag = 'C' OR
10602 p_create_update_flag = 'U' AND ROWID <> p_rowid )
10603 AND ROWNUM = 1;
10604
10605 FND_MESSAGE.SET_NAME( 'AR', 'AR_CUST_ROLE_PRIMARY' );
10606 FND_MSG_PUB.ADD;
10607 x_return_status := FND_API.G_RET_STS_ERROR;
10608 EXCEPTION
10609 WHEN NO_DATA_FOUND THEN
10610 NULL;
10611 END;
10612
10613 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10614 hz_utility_v2pub.debug(p_message=>'primary_flag is unique per cust_account_role_id. ' ||
10615 'x_return_status = ' || x_return_status,
10616 p_prefix =>l_debug_prefix,
10617 p_msg_level=>fnd_log.level_statement);
10618 END IF;
10619
10620 END IF;
10621
10622 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10623 hz_utility_v2pub.debug(p_message=>'(+) after validate primary_flag ... ' ||
10624 'x_return_status = ' || x_return_status,
10625 p_prefix =>l_debug_prefix,
10626 p_msg_level=>fnd_log.level_statement);
10627 END IF;
10628
10629
10630 --------------------------------------
10631 -- validate created_by_module
10632 --------------------------------------
10633
10634 validate_created_by_module(
10635 p_create_update_flag => p_create_update_flag,
10636 p_created_by_module => p_role_responsibility_rec.created_by_module,
10637 p_old_created_by_module => l_created_by_module,
10638 x_return_status => x_return_status);
10639
10640 --------------------------------------
10641 -- validate application_id
10642 --------------------------------------
10643
10644 validate_application_id(
10645 p_create_update_flag => p_create_update_flag,
10646 p_application_id => p_role_responsibility_rec.application_id,
10647 p_old_application_id => l_application_id,
10648 x_return_status => x_return_status);
10649
10650 -- Debug info.
10651
10652 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10653 hz_utility_v2pub.debug(p_message=>'validate_role_responsibility (-)',
10654 p_prefix=>l_debug_prefix,
10655 p_msg_level=>fnd_log.level_procedure);
10656 END IF;
10657
10658 END validate_role_responsibility;
10659
10660 --------------------------------------
10661 -- private procedures and functions
10662 --------------------------------------
10663
10664 PROCEDURE check_cust_account_fk (
10665 p_column IN VARCHAR2,
10666 p_column_value IN NUMBER,
10667 x_return_status IN OUT NOCOPY VARCHAR2
10668 ) IS
10669
10670 l_dummy VARCHAR2(1);
10671
10672 BEGIN
10673
10674 -- 2310474 : cust_account_id = -1 for profile at party level
10675
10676 IF p_column_value <> -1 THEN
10677
10678 SELECT 'Y' INTO l_dummy
10679 FROM HZ_CUST_ACCOUNTS
10680 WHERE CUST_ACCOUNT_ID = p_column_value;
10681
10682 END IF;
10683
10684 EXCEPTION
10685 WHEN NO_DATA_FOUND THEN
10686 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10687 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_id' );
10688 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10689 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_accounts' );
10690 FND_MSG_PUB.ADD;
10691 x_return_status := FND_API.G_RET_STS_ERROR;
10692
10693 END check_cust_account_fk;
10694
10695 PROCEDURE check_cust_acct_site_fk (
10696 p_column IN VARCHAR2,
10697 p_column_value IN NUMBER,
10698 p_org_id IN NUMBER, -- 3456489
10699 x_return_status IN OUT NOCOPY VARCHAR2
10700 ) IS
10701
10702 l_dummy VARCHAR2(1);
10703
10704 BEGIN
10705
10706 SELECT 'Y' INTO l_dummy
10707 FROM HZ_CUST_ACCT_SITES_ALL -- Bug 3456489
10708 WHERE CUST_ACCT_SITE_ID = p_column_value
10709 AND ORG_ID = p_org_id; -- Bug 3456489
10710
10711 EXCEPTION
10712 WHEN NO_DATA_FOUND THEN
10713 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10714 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_acct_site_id' );
10715 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10716 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_acct_sites' );
10717 FND_MSG_PUB.ADD;
10718 x_return_status := FND_API.G_RET_STS_ERROR;
10719
10720 END check_cust_acct_site_fk;
10721
10722 PROCEDURE check_cust_site_use_fk (
10723 p_column IN VARCHAR2,
10724 p_column_value IN NUMBER,
10725 x_return_status IN OUT NOCOPY VARCHAR2
10726 ) IS
10727
10728 l_return_status VARCHAR2(1);
10729 l_org_id HZ_CUST_ACCT_SITES_ALL.org_id%TYPE;
10730 BEGIN
10731
10732 SELECT org_id INTO l_org_id
10733 FROM HZ_CUST_SITE_USES_ALL
10734 WHERE SITE_USE_ID = p_column_value;
10735
10736 -- Bug 4650473. Check if org is accessible.
10737 BEGIN
10738 MO_GLOBAL.validate_orgid_pub_api(l_org_id,'N',l_return_status);
10739 EXCEPTION
10740 WHEN OTHERS
10741 THEN
10742 x_return_status := FND_API.G_RET_STS_ERROR;
10743 END;
10744
10745 EXCEPTION
10746 WHEN NO_DATA_FOUND THEN
10747 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10748 FND_MESSAGE.SET_TOKEN( 'FK', 'site_use_id' );
10749 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10750 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_site_uses' );
10751 FND_MSG_PUB.ADD;
10752 x_return_status := FND_API.G_RET_STS_ERROR;
10753
10754 END check_cust_site_use_fk;
10755 PROCEDURE check_cust_site_use_cont_fk(
10756 p_column IN VARCHAR2,
10757 p_column_value IN NUMBER,
10758 p_customer_id IN NUMBER,
10759 x_return_status IN OUT NOCOPY VARCHAR2
10760 ) IS
10761
10762 l_dummy VARCHAR2(1);
10763 BEGIN
10764 SELECT 'Y' INTO l_dummy
10765 FROM HZ_CUST_ACCOUNT_ROLES
10766 WHERE CUST_ACCOUNT_ROLE_ID = p_column_value
10767 AND CUST_ACCOUNT_ID = p_customer_id;
10768
10769 EXCEPTION
10770 WHEN NO_DATA_FOUND THEN
10771 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10772 FND_MESSAGE.SET_TOKEN( 'FK', 'contact_id' );
10773 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10774 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_account_roles' );
10775 FND_MSG_PUB.ADD;
10776 x_return_status := FND_API.G_RET_STS_ERROR;
10777
10778 END check_cust_site_use_cont_fk;
10779
10780 PROCEDURE check_cust_account_role_fk (
10781 p_column IN VARCHAR2,
10782 p_column_value IN NUMBER,
10783 x_return_status IN OUT NOCOPY VARCHAR2
10784 ) IS
10785
10786 l_dummy VARCHAR2(1);
10787
10788 BEGIN
10789 SELECT 'Y' INTO l_dummy
10790 FROM HZ_CUST_ACCOUNT_ROLES
10791 WHERE CUST_ACCOUNT_ROLE_ID = p_column_value;
10792
10793 EXCEPTION
10794 WHEN NO_DATA_FOUND THEN
10795 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10796 FND_MESSAGE.SET_TOKEN( 'FK', 'cust_account_role_id' );
10797 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10798 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_account_roles' );
10799 FND_MSG_PUB.ADD;
10800 x_return_status := FND_API.G_RET_STS_ERROR;
10801
10802 END check_cust_account_role_fk;
10803
10804 PROCEDURE check_per_all_people_f_fk (
10805 p_column IN VARCHAR2,
10806 p_column_value IN NUMBER,
10807 x_return_status IN OUT NOCOPY VARCHAR2
10808 ) IS
10809
10810 l_dummy VARCHAR2(1);
10811
10812 BEGIN
10813
10814 SELECT 'Y' INTO l_dummy
10815 FROM PER_ALL_PEOPLE_F
10816 WHERE PERSON_ID = p_column_value
10817 /* Bug 3591694.
10818 Retrieve only those records, which are effective on sysdate.
10819 Both effective_start_date and effective_end_date are not null columns and
10820 as such there is no need to explicitely do a NVL.
10821 */
10822 AND EFFECTIVE_START_DATE <= SYSDATE
10823 AND EFFECTIVE_END_DATE >= SYSDATE
10824 AND ROWNUM = 1;
10825
10826 EXCEPTION
10827 WHEN NO_DATA_FOUND THEN
10828 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10829 FND_MESSAGE.SET_TOKEN( 'FK', 'person_id' );
10830 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10831 FND_MESSAGE.SET_TOKEN( 'TABLE', 'per_all_people_f' );
10832 FND_MSG_PUB.ADD;
10833 x_return_status := FND_API.G_RET_STS_ERROR;
10834
10835 END check_per_all_people_f_fk;
10836
10837 PROCEDURE check_collector_fk (
10838 p_column IN VARCHAR2,
10839 p_column_value IN NUMBER,
10840 x_return_status IN OUT NOCOPY VARCHAR2
10841 ) IS
10842
10843 l_dummy VARCHAR2(1);
10844
10845 BEGIN
10846
10847 SELECT 'Y' INTO l_dummy
10848 FROM AR_COLLECTORS
10849 WHERE COLLECTOR_ID = p_column_value;
10850
10851 EXCEPTION
10852 WHEN NO_DATA_FOUND THEN
10853 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10854 FND_MESSAGE.SET_TOKEN( 'FK', 'collector_id' );
10855 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10856 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_collectors');
10857 FND_MSG_PUB.ADD;
10858 x_return_status := FND_API.G_RET_STS_ERROR;
10859
10860 END check_collector_fk;
10861
10862 PROCEDURE check_party_fk (
10863 p_column IN VARCHAR2,
10864 p_column_value IN NUMBER,
10865 x_return_status IN OUT NOCOPY VARCHAR2
10866 ) IS
10867
10868 l_dummy VARCHAR2(1);
10869
10870 BEGIN
10871
10872 SELECT 'Y' INTO l_dummy
10873 FROM HZ_PARTIES
10874 WHERE PARTY_ID = p_column_value;
10875
10876 EXCEPTION
10877 WHEN NO_DATA_FOUND THEN
10878 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10879 FND_MESSAGE.SET_TOKEN( 'FK', 'party_id' );
10880 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10881 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_parties' );
10882 FND_MSG_PUB.ADD;
10883 x_return_status := FND_API.G_RET_STS_ERROR;
10884
10885 END check_party_fk;
10886
10887 PROCEDURE check_party_site_fk (
10888 p_column IN VARCHAR2,
10889 p_column_value IN NUMBER,
10890 x_return_status IN OUT NOCOPY VARCHAR2
10891 ) IS
10892
10893 l_dummy VARCHAR2(1);
10894
10895 BEGIN
10896
10897 BEGIN
10898 SELECT 'Y' INTO l_dummy
10899 FROM HZ_PARTY_SITES
10900 WHERE PARTY_SITE_ID = p_column_value;
10901 EXCEPTION
10902 WHEN NO_DATA_FOUND THEN
10903 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10904 FND_MESSAGE.SET_TOKEN( 'FK', 'party_site_id' );
10905 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10906 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_party_sites' );
10907 FND_MSG_PUB.ADD;
10908 x_return_status := FND_API.G_RET_STS_ERROR;
10909 END;
10910
10911 END check_party_site_fk;
10912
10913 PROCEDURE check_currency_fk (
10914 p_column IN VARCHAR2,
10915 p_column_value IN VARCHAR2,
10916 x_return_status IN OUT NOCOPY VARCHAR2
10917 ) IS
10918
10919 l_dummy VARCHAR2(1);
10920
10921 BEGIN
10922 -- Bug Fix: 3877782
10923 SELECT 'Y' INTO l_dummy
10924 FROM FND_CURRENCIES
10925 WHERE CURRENCY_CODE = p_column_value
10926 AND CURRENCY_FLAG = 'Y'
10927 AND ENABLED_FLAG = 'Y'
10928 AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE,SYSDATE))
10929 AND TRUNC(NVL(END_DATE_ACTIVE,SYSDATE));
10930
10931 EXCEPTION
10932 WHEN NO_DATA_FOUND THEN
10933 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
10934 FND_MESSAGE.SET_TOKEN( 'FK', 'currency_code' );
10935 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10936 FND_MESSAGE.SET_TOKEN( 'TABLE', 'fnd_currencies' );
10937 FND_MSG_PUB.ADD;
10938 x_return_status := FND_API.G_RET_STS_ERROR;
10939
10940 END check_currency_fk;
10941
10942 PROCEDURE check_oe_ship_methods_v_fk (
10943 p_entity IN VARCHAR2,
10944 p_column IN VARCHAR2,
10945 p_column_value IN VARCHAR2,
10946 x_return_status IN OUT NOCOPY VARCHAR2
10947 ) IS
10948
10949 l_org_id NUMBER;
10950
10951 BEGIN
10952 --Bug Fix 2262248, API should NOT DISALLOW the specification of a value for
10953 --ship-via based on multi-org installation status for ACOUNT and SITE USE levels.
10954 /**************************************************************************
10955 IF p_entity = 'ACCOUNT' THEN
10956
10957 BEGIN
10958 SELECT MIN(ORG_ID) INTO l_org_id
10959 FROM AR_SYSTEM_PARAMETERS;
10960
10961 IF l_org_id IS NOT NULL THEN
10962 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_COLUMN_SHOULD_BE_NULL' );
10963 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
10964 FND_MESSAGE.SET_TOKEN( 'TABLE', 'hz_cust_accounts' );
10965 FND_MSG_PUB.ADD;
10966 x_return_status := FND_API.G_RET_STS_ERROR;
10967
10968 RETURN;
10969 END IF;
10970
10971 --Bug Fix 2183072 Handled the exception
10972 EXCEPTION
10973 WHEN NO_DATA_FOUND THEN
10974 FND_MESSAGE.SET_NAME( 'AR', 'AR_NO_ROW_IN_SYSTEM_PARAMETERS');
10975 FND_MSG_PUB.ADD;
10976 x_return_status := FND_API.G_RET_STS_ERROR;
10977 END ;
10978 END IF;
10979 **************************************************************************/
10980 validate_lookup (
10981 p_column => p_column,
10982 p_lookup_table => 'OE_SHIP_METHODS_V',
10983 p_lookup_type => 'SHIP_METHOD',
10984 p_column_value => p_column_value,
10985 x_return_status => x_return_status );
10986
10987 END check_oe_ship_methods_v_fk;
10988
10989 PROCEDURE check_payterm_id_fk (
10990 p_column IN VARCHAR2,
10991 p_column_value IN VARCHAR2,
10992 x_return_status IN OUT NOCOPY VARCHAR2
10993 ) IS
10994 l_dummy VARCHAR2(1);
10995 BEGIN
10996
10997 -- Modified the below query for bug # 5529044
10998 -- Now this will validate only for a valid payment term.
10999 -- Validate that the payment_term_id passed should be a non Balance Forwarded Billing payment term.
11000 -- Changed as a part of Balance Forwarded Billing enhancement. bug # 4935721
11001 SELECT 'Y'
11002 into l_dummy
11003 from ra_terms_b
11004 where term_id = p_column_value
11005 -- and billing_cycle_id is null
11006 and trunc(sysdate) between
11007 start_date_active and nvl(end_date_active,trunc(sysdate));
11008 /*
11009 SELECT 'Y' INTO l_dummy
11010 FROM RA_TERMS ra
11011 WHERE ra.term_id = p_column_value
11012 AND trunc(sysdate) between START_DATE_ACTIVE and nvl(END_DATE_ACTIVE,trunc(sysdate));
11013 */
11014 EXCEPTION
11015 WHEN NO_DATA_FOUND THEN
11016 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11017 FND_MESSAGE.SET_TOKEN( 'FK', 'payment_term_id' );
11018 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11019 FND_MESSAGE.SET_TOKEN( 'TABLE', 'RA_TERMS' );
11020 FND_MSG_PUB.ADD;
11021 x_return_status := FND_API.G_RET_STS_ERROR;
11022 END check_payterm_id_fk;
11023
11024 PROCEDURE check_late_charge_term_id_fk (
11025 p_column IN VARCHAR2,
11026 p_column_value IN NUMBER,
11027 p_cons_inv_flag IN VARCHAR2,
11028 x_return_status IN OUT NOCOPY VARCHAR2
11029 ) IS
11030 l_dummy VARCHAR2(1);
11031 BEGIN
11032
11033 -- if cons_inv_flag = 'N' validate that the late charge payment term that
11034 -- does not have a balance forward billing cycle. If cons_inv_flag = 'Y' then,
11035 -- Validate that late charge payment term that has a balance forward billing cycle.
11036 if p_cons_inv_flag = 'N' then
11037 begin
11038 SELECT 'Y'
11039 into l_dummy
11040 from ra_terms_b
11041 where term_id = p_column_value
11042 and billing_cycle_id is null
11043 and trunc(sysdate) between
11044 start_date_active and nvl(end_date_active,trunc(sysdate));
11045
11046 EXCEPTION
11047 WHEN NO_DATA_FOUND THEN
11048 -- Balance forward billing has not been enabled.
11049 -- Pass a late charge payment term that does not have a balance forward billing cycle.
11050 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_PAY_TERM_DISABLED' );
11051 FND_MSG_PUB.ADD;
11052 x_return_status := FND_API.G_RET_STS_ERROR;
11053 end;
11054 elsif p_cons_inv_flag = 'Y' then
11055 begin
11056 SELECT 'Y'
11057 into l_dummy
11058 from ra_terms_b t
11059 where t.term_id = p_column_value
11060 and t.billing_cycle_id is not null
11061 and trunc(sysdate) between
11062 t.start_date_active and nvl(t.end_date_active,trunc(sysdate));
11063
11064 EXCEPTION
11065 WHEN NO_DATA_FOUND THEN
11066 -- Balance forward billing has been enabled.
11067 -- Pass a late charge payment term that has a balance forward billing cycle.
11068 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LC_PAY_TERM_ENABLED' );
11069 FND_MSG_PUB.ADD;
11070 x_return_status := FND_API.G_RET_STS_ERROR;
11071 end;
11072 end if;
11073
11074 END check_late_charge_term_id_fk;
11075
11076 PROCEDURE check_message_text_id_fk (
11077 p_column IN VARCHAR2,
11078 p_column_value IN NUMBER,
11079 x_return_status IN OUT NOCOPY VARCHAR2
11080 ) IS
11081 l_dummy VARCHAR2(1);
11082 BEGIN
11083
11084 -- Validate that the message_text_id passed should be a valid
11085 -- value in AR_STANDARD_TEXT.STANDARD_TEXT_ID. bug # 5065436
11086 SELECT 'Y'
11087 into l_dummy
11088 from AR_STANDARD_TEXT
11089 where STANDARD_TEXT_ID = p_column_value
11090 and trunc(sysdate) between
11091 start_date and nvl(end_date,trunc(sysdate));
11092 EXCEPTION
11093 WHEN NO_DATA_FOUND THEN
11094 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11095 FND_MESSAGE.SET_TOKEN( 'FK', 'standard_text_id' );
11096 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11097 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_standard_text' );
11098 FND_MSG_PUB.ADD;
11099 x_return_status := FND_API.G_RET_STS_ERROR;
11100 END check_message_text_id_fk;
11101
11102 PROCEDURE check_exchange_rate_type_fk (
11103 p_column IN VARCHAR2,
11104 p_column_value IN VARCHAR2,
11105 x_return_status IN OUT NOCOPY VARCHAR2
11106 ) IS
11107 l_dummy VARCHAR2(1);
11108 BEGIN
11109
11110 -- Validate that the exchange_rate_type passed should be a valid
11111 -- value in GL_DAILY_CONVERSION_TYPES. where type is not USER. bug # 5065436
11112 SELECT 'Y'
11113 into l_dummy
11114 from gl_daily_conversion_types
11115 where conversion_type <> 'USER'
11116 and conversion_type = p_column_value;
11117
11118 EXCEPTION
11119 WHEN NO_DATA_FOUND THEN
11120 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11121 FND_MESSAGE.SET_TOKEN( 'FK', 'conversion_type' );
11122 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11123 FND_MESSAGE.SET_TOKEN( 'TABLE', 'gl_daily_conversion_types' );
11124 FND_MSG_PUB.ADD;
11125 x_return_status := FND_API.G_RET_STS_ERROR;
11126 END check_exchange_rate_type_fk;
11127
11128 PROCEDURE check_charge_schedule_id_fk (
11129 p_column IN VARCHAR2,
11130 p_column_value IN NUMBER,
11131 x_return_status IN OUT NOCOPY VARCHAR2
11132 ) IS
11133 l_dummy VARCHAR2(1);
11134 BEGIN
11135
11136 -- Validate that the schedule_id passed should be a valid
11137 -- value in ar_charge_schedules. bug # 5065436
11138 SELECT 'Y'
11139 into l_dummy
11140 from ar_charge_schedules
11141 where schedule_id = p_column_value;
11142
11143 EXCEPTION
11144 WHEN NO_DATA_FOUND THEN
11145 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11146 FND_MESSAGE.SET_TOKEN( 'FK', 'schedule_id' );
11147 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11148 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_charge_schedules' );
11149 FND_MSG_PUB.ADD;
11150 x_return_status := FND_API.G_RET_STS_ERROR;
11151 END check_charge_schedule_id_fk;
11152
11153 PROCEDURE check_finchrg_trx_fk (
11154 p_column IN VARCHAR2,
11155 p_column_value IN VARCHAR2,
11156 p_org_id IN NUMBER, -- Bug 3456489
11157 x_return_status IN OUT NOCOPY VARCHAR2
11158 ) IS
11159 l_dummy VARCHAR2(1);
11160 BEGIN
11161 SELECT 'Y' INTO l_dummy
11162 FROM AR_RECEIVABLES_TRX_ALL art
11163 WHERE art.receivables_trx_id = p_column_value
11164 AND status = 'A'
11165 AND art.org_id = p_org_id; -- Bug 3456489
11166 EXCEPTION
11167 WHEN NO_DATA_FOUND THEN
11168 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11169 FND_MESSAGE.SET_TOKEN( 'FK', 'finchrg_receivables_trx_id' );
11170 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11171 FND_MESSAGE.SET_TOKEN( 'TABLE', 'AR_RECEIVABLES_TRX' );
11172 FND_MSG_PUB.ADD;
11173 x_return_status := FND_API.G_RET_STS_ERROR;
11174 END check_finchrg_trx_fk;
11175
11176 PROCEDURE check_price_list_fk (
11177 p_column IN VARCHAR2,
11178 p_column_value IN VARCHAR2,
11179 x_return_status IN OUT NOCOPY VARCHAR2
11180 ) IS
11181 l_dummy VARCHAR2(1);
11182 BEGIN
11183 --Bug Fix 2262616, changed the query, which was lookong at SO_PRICE_LISTS
11184 --to query qp_list_headers_b with active_flag
11185 /**************************************************************************
11186 SELECT 'Y' INTO l_dummy
11187 FROM SO_PRICE_LISTS pl
11188 WHERE pl.price_list_id = p_column_value
11189 AND sysdate between nvl(pl.start_date_active,sysdate) and nvl(pl.end_date_active,sysdate);
11190 ***************************************************************************/
11191 SELECT 'Y'
11192 INTO l_dummy
11193 FROM qp_list_headers_b lh
11194 WHERE list_header_id = p_column_value
11195 AND list_type_code = 'PRL'
11196 AND (sysdate between nvl(lh.start_date_active,sysdate) and nvl(lh.end_date_active,sysdate)
11197 AND nvl(active_flag, 'N') = 'Y');
11198 EXCEPTION
11199 WHEN NO_DATA_FOUND THEN
11200 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11201 FND_MESSAGE.SET_TOKEN( 'FK', 'price_list_id' );
11202 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11203 -- Bug 3591694 FND_MESSAGE.SET_TOKEN( 'TABLE', 'SO_PRICE_LISTS' );
11204 FND_MESSAGE.SET_TOKEN( 'TABLE', 'QP_LIST_HEADERS_B' );
11205
11206 FND_MSG_PUB.ADD;
11207 x_return_status := FND_API.G_RET_STS_ERROR;
11208 END check_price_list_fk;
11209
11210 PROCEDURE check_item_cross_ref(
11211 p_column IN VARCHAR2,
11212 p_column_value IN VARCHAR2,
11213 x_return_status IN OUT NOCOPY VARCHAR2
11214 ) IS
11215 l_dummy VARCHAR2(1);
11216 BEGIN
11217 SELECT 'Y' INTO l_dummy
11218 FROM MTL_CROSS_REFERENCE_TYPES mtl
11219 WHERE mtl.cross_reference_type = p_column_value;
11220 EXCEPTION
11221 WHEN NO_DATA_FOUND THEN
11222 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11223 FND_MESSAGE.SET_TOKEN( 'FK', 'item_cross_ref_pref' );
11224 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11225 FND_MESSAGE.SET_TOKEN( 'TABLE', 'mtl_cross_reference_types' );
11226 FND_MSG_PUB.ADD;
11227 x_return_status := FND_API.G_RET_STS_ERROR;
11228 END check_item_cross_ref;
11229
11230 PROCEDURE check_tax_code(
11231 p_column IN VARCHAR2,
11232 p_column_value IN VARCHAR2,
11233 -- Bug 4713150
11234 -- p_org_id IN NUMBER, -- Bug 3456489
11235 -- Bug 5136396: to indicate from where this procedure is called from
11236 p_called_from IN VARCHAR2,
11237 x_return_status IN OUT NOCOPY VARCHAR2
11238 ) IS
11239
11240 l_dummy varchar2(1);
11241 l_org_id number;
11242 -- l_sob_id NUMBER;
11243 BEGIN
11244 -- Bug 5136396
11245 IF p_called_from = 'validate_cust_account' THEN
11246 l_org_id := nvl(mo_global.get_current_org_id, mo_utils.get_default_org_id);
11247 ELSE
11248 -- if from validate_cust_site_use
11249 l_org_id := mo_global.get_current_org_id;
11250 END IF;
11251
11252 -- Bug 4713150
11253 SELECT 'Y' INTO l_dummy
11254 FROM zx_output_classifications_v
11255 WHERE lookup_type = 'ZX_OUTPUT_CLASSIFICATIONS'
11256 AND lookup_code = p_column_value
11257 AND trunc(sysdate) BETWEEN trunc(start_date_active) AND nvl(trunc(end_date_active),trunc(sysdate))
11258 AND enabled_flag = 'Y'
11259 -- Bug 5136396
11260 AND org_id IN (l_org_id, -99)
11261 AND ROWNUM = 1;
11262
11263 /*
11264 -- Bug 3456489
11265 l_sob_id := HZ_MO_GLOBAL_CACHE.get_set_of_books_id(p_org_id);
11266
11267 SELECT 'Y' INTO l_dummy
11268 FROM AR_VAT_TAX_ALL avt
11269 WHERE avt.tax_code = p_column_value
11270 AND trunc(SYSDATE) BETWEEN START_DATE AND NVL(END_DATE,trunc(sysdate))
11271 AND avt.enabled_flag = 'Y'
11272 AND avt.tax_class = 'O'
11273 AND avt.displayed_flag = 'Y'
11274 AND avt.set_of_books_id = l_sob_id
11275 AND avt.org_id = p_org_id;
11276 */
11277 EXCEPTION
11278 WHEN NO_DATA_FOUND THEN
11279 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11280 FND_MESSAGE.SET_TOKEN( 'FK', 'tax_code' );
11281 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11282 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ZX_OUTPUT_CLASSIFICATIONS_V' );
11283 FND_MSG_PUB.ADD;
11284 x_return_status := FND_API.G_RET_STS_ERROR;
11285 END check_tax_code;
11286
11287 PROCEDURE check_warehouse(
11288 p_column IN VARCHAR2,
11289 p_column_value IN VARCHAR2,
11290 x_return_status IN OUT NOCOPY VARCHAR2
11291 ) IS
11292 l_dummy VARCHAR2(1);
11293 BEGIN
11294 SELECT 'Y' INTO l_dummy
11295 FROM ORG_ORGANIZATION_DEFINITIONS org
11296 WHERE org.organization_id = p_column_value
11297 AND trunc(sysdate) <= nvl(trunc(org.disable_date),trunc(sysdate));
11298 EXCEPTION
11299 WHEN NO_DATA_FOUND THEN
11300 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11301 FND_MESSAGE.SET_TOKEN( 'FK', 'warehouse_id' );
11302 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11303 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ORG_ORGANIZATION_DEFINITIONS' );
11304 FND_MSG_PUB.ADD;
11305 x_return_status := FND_API.G_RET_STS_ERROR;
11306 END check_warehouse;
11307
11308 PROCEDURE check_prim_salesrep(
11309 p_column IN VARCHAR2,
11310 p_column_value IN VARCHAR2,
11311 p_org_id IN NUMBER, -- Bug 3456489
11312 x_return_status IN OUT NOCOPY VARCHAR2
11313 ) IS
11314
11315 l_dummy varchar2(1);
11316 BEGIN
11317
11318 /*
11319 show err;
11320 SELECT 'Y' INTO l_dummy
11321 -- FROM RA_SALESREPS ras -- Bug 3456489
11322 FROM JTF_RS_SALESREP ras
11323 WHERE ras.salesrep_id = p_column_value
11324 AND ras.org_id = p_org_id
11325 AND sysdate between nvl(start_date_active,sysdate) and nvl(end_date_active,sysdate)
11326 AND nvl(status, 'A') = 'A'
11327 AND salesrep_id NOT IN( -1,-2);
11328 EXCEPTION
11329 WHEN NO_DATA_FOUND THEN
11330 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11331 FND_MESSAGE.SET_TOKEN( 'FK', 'primary_salesrep_id' );
11332 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11333 FND_MESSAGE.SET_TOKEN( 'TABLE', 'JTF_RS_SALESREPS' );
11334 FND_MSG_PUB.ADD;
11335 x_return_status := FND_API.G_RET_STS_ERROR;
11336 */
11337 x_return_status := FND_API.G_RET_STS_SUCCESS;
11338 END check_prim_salesrep;
11339
11340 PROCEDURE check_ord_type(
11341 p_column IN VARCHAR2,
11342 p_column_value IN VARCHAR2,
11343 p_org_id IN NUMBER, -- Bug 3456489
11344 x_return_status IN OUT NOCOPY VARCHAR2
11345 ) IS
11346
11347 l_dummy varchar2(1);
11348 BEGIN
11349
11350 /* Bug 3456489
11351 SELECT 'Y' INTO l_dummy
11352 FROM OE_ORDER_TYPES_V ot
11353 WHERE ot.order_type_id = p_column_value
11354 AND sysdate between nvl(ot.start_date_active,sysdate) and nvl(ot.end_date_active,sysdate);
11355 */
11356 /*
11357 show err;
11358 temporarily commenting this out as this table has not been created
11359 SELECT 'Y' INTO l_dummy
11360 FROM OE_TRANSACTION_TYPES_ALL ot
11361 WHERE ot.order_type_id = p_column_value
11362 AND ot.transaction_type_code = 'ORDER'
11363 AND ot.org_id = p_org_id
11364 AND sysdate between nvl(ot.start_date_active,sysdate)
11365 and nvl(ot.end_date_active,sysdate);
11366
11367 EXCEPTION
11368 WHEN NO_DATA_FOUND THEN
11369 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11370 FND_MESSAGE.SET_TOKEN( 'FK', 'order_type_id' );
11371 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11372 FND_MESSAGE.SET_TOKEN( 'TABLE', 'OE_TRANSACTIONS_TYPES_VL' );
11373 FND_MSG_PUB.ADD;
11374 x_return_status := FND_API.G_RET_STS_ERROR;
11375 */
11376 x_return_status := FND_API.G_RET_STS_SUCCESS;
11377 END check_ord_type;
11378
11379 PROCEDURE check_partial_mandatory_column (
11380 p_column IN VARCHAR2,
11381 p_column_value IN NUMBER,
11382 x_return_status IN OUT NOCOPY VARCHAR2
11383 ) IS
11384
11385 BEGIN
11386
11387 IF p_column_value = FND_API.G_MISS_NUM THEN
11388 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
11389 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11390 FND_MSG_PUB.ADD;
11391 x_return_status := FND_API.G_RET_STS_ERROR;
11392 END IF;
11393
11394 END check_partial_mandatory_column;
11395
11396 PROCEDURE check_partial_mandatory_column (
11397 p_column IN VARCHAR2,
11398 p_column_value IN VARCHAR2,
11399 x_return_status IN OUT NOCOPY VARCHAR2
11400 ) IS
11401
11402 BEGIN
11403
11404 IF p_column_value = FND_API.G_MISS_CHAR THEN
11405 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
11406 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11407 FND_MSG_PUB.ADD;
11408 x_return_status := FND_API.G_RET_STS_ERROR;
11409 END IF;
11410
11411 END check_partial_mandatory_column;
11412
11413 PROCEDURE validate_gl_id (
11414 p_gl_name IN VARCHAR2,
11415 p_column_value IN NUMBER,
11416 p_coa_id IN NUMBER, -- Bug 3456489
11417 x_return_status IN OUT NOCOPY VARCHAR2
11418 ) IS
11419
11420 BEGIN
11421
11422 IF p_column_value IS NOT NULL AND
11423 p_column_value <> FND_API.G_MISS_NUM
11424 THEN
11425 IF NOT FND_FLEX_KEYVAL.validate_ccid (
11426 appl_short_name => 'SQLGL',
11427 key_flex_code => 'GL#',
11428 -- Bug 3456489
11429 -- structure_number => ARP_GLOBAL.chart_of_accounts_id,
11430 structure_number => p_coa_id,
11431 combination_id => p_column_value )
11432 THEN
11433 FND_MESSAGE.SET_NAME( 'AR', 'AR_AUTO_' ||
11434 UPPER( p_gl_name ) || '_CCID_INVALID' );
11435 FND_MSG_PUB.ADD;
11436 x_return_status := FND_API.G_RET_STS_ERROR;
11437 END IF;
11438 END IF;
11439
11440 END validate_gl_id;
11441
11442 PROCEDURE check_auto_hierid_fk (
11443 p_column IN VARCHAR2,
11444 p_column_value IN NUMBER,
11445 x_return_status IN OUT NOCOPY VARCHAR2
11446 ) IS
11447
11448 l_dummy VARCHAR2(1);
11449
11450 BEGIN
11451
11452 SELECT 'Y' into l_dummy
11453 FROM ar_autocash_hierarchies h
11454 WHERE h.status = 'A'
11455 AND h.autocash_hierarchy_id =
11456 p_column_value;
11457 EXCEPTION
11458 WHEN NO_DATA_FOUND THEN
11459 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11460 FND_MESSAGE.SET_TOKEN( 'FK', p_column );
11461 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11462 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_autocash_hierarchies');
11463 FND_MSG_PUB.ADD;
11464 x_return_status := FND_API.G_RET_STS_ERROR;
11465
11466 END check_auto_hierid_fk;
11467
11468 PROCEDURE check_stat_cycid_fk (
11469 p_column IN VARCHAR2,
11470 p_column_value IN NUMBER,
11471 x_return_status IN OUT NOCOPY VARCHAR2
11472 ) IS
11473
11474 l_dummy VARCHAR2(1);
11475
11476 BEGIN
11477 SELECT 'Y' into l_dummy
11478 FROM ar_statement_cycles sc
11479 WHERE sc.status = 'A'
11480 AND sc.statement_cycle_id =
11481 p_column_value;
11482 EXCEPTION
11483 WHEN NO_DATA_FOUND THEN
11484 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11485 FND_MESSAGE.SET_TOKEN( 'FK', 'statement_cycle_id' );
11486 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11487 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_statement_cycles');
11488 FND_MSG_PUB.ADD;
11489 x_return_status := FND_API.G_RET_STS_ERROR;
11490
11491 END check_stat_cycid_fk;
11492
11493 PROCEDURE check_dunning_letid_fk (
11494 p_column IN VARCHAR2,
11495 p_column_value IN NUMBER,
11496 x_return_status IN OUT NOCOPY VARCHAR2
11497 ) IS
11498
11499 l_dummy VARCHAR2(1);
11500
11501 BEGIN
11502 SELECT 'Y' into l_dummy
11503 FROM ar_dunning_letter_sets dls
11504 WHERE dls.status = 'A'
11505 AND dls.dunning_letter_set_id =
11506 p_column_value;
11507 EXCEPTION
11508 WHEN NO_DATA_FOUND THEN
11509 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11510 FND_MESSAGE.SET_TOKEN( 'FK', 'dunning_letter_set_id' );
11511 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11512 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ar_dunning_letter_sets');
11513 FND_MSG_PUB.ADD;
11514 x_return_status := FND_API.G_RET_STS_ERROR;
11515
11516 END check_dunning_letid_fk;
11517
11518 PROCEDURE check_standard_terms_fk (
11519 p_column IN VARCHAR2,
11520 p_column_value IN NUMBER,
11521 p_cons_inv_flag IN VARCHAR2,
11522 p_ckeck_acc_bfb_enabled IN VARCHAR2,
11523 x_return_status IN OUT NOCOPY VARCHAR2
11524 ) IS
11525
11526 l_dummy VARCHAR2(1);
11527
11528 BEGIN
11529
11530 -- Modified the below validation for Balance Forwarded Billing
11531 -- if cons_inv_flag = 'N' validate that the payment term is a non Balanace
11532 -- Forward billing payment term. If cons_inv_flag = 'Y' then,
11533 -- Validate that the payment term is a Balance Forward billing payment term.
11534 if p_cons_inv_flag = 'N' then
11535 begin
11536 SELECT 'Y'
11537 into l_dummy
11538 from ra_terms_b
11539 where term_id = p_column_value
11540 -- and billing_cycle_id is null
11541 and trunc(sysdate) between
11542 start_date_active and nvl(end_date_active,trunc(sysdate));
11543
11544 EXCEPTION
11545 WHEN NO_DATA_FOUND THEN
11546 /* Modified the below error message setting for bug # 5529044
11547 Now we will look for any valid term_id if BFB is not enabled.
11548 -- If Balance Forward Billing is enabled for the site but disabled for the
11549 -- account. Pass a payment term without a balance forward billing cycle associated.
11550 if p_ckeck_acc_bfb_enabled = 'Y' then
11551 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_ACCT_BAL_FWD_DISABLED' );
11552 -- Balance forward billing has not been enabled.
11553 -- Pass a payment term without a balance forward billing cycle associated.
11554 else
11555 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BAL_FWD_BILL_DISABLED' );
11556 end if;
11557 */
11558 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11559 FND_MESSAGE.SET_TOKEN( 'FK', 'standard_terms' );
11560 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11561 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_terms_b');
11562 FND_MSG_PUB.ADD;
11563 x_return_status := FND_API.G_RET_STS_ERROR;
11564 end;
11565 elsif p_cons_inv_flag = 'Y' then
11566 begin
11567 SELECT 'Y'
11568 into l_dummy
11569 from ra_terms_b t
11570 where t.term_id = p_column_value
11571 and t.billing_cycle_id is not null
11572 and trunc(sysdate) between
11573 t.start_date_active and nvl(t.end_date_active,trunc(sysdate));
11574
11575 EXCEPTION
11576 WHEN NO_DATA_FOUND THEN
11577 -- Balance forward billing has been enabled. Pass a payment term
11578 -- with a balance forward billing cycle associated.
11579 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_BAL_FWD_BILL_ENABLED' );
11580 FND_MSG_PUB.ADD;
11581 x_return_status := FND_API.G_RET_STS_ERROR;
11582 end;
11583 end if;
11584
11585 /*
11586 SELECT 'Y' into l_dummy
11587 FROM ra_terms t
11588 WHERE trunc(sysdate)
11589 BETWEEN t.start_date_active AND
11590 nvl(t.end_date_active,trunc(sysdate))
11591 AND t.term_id =
11592 p_column_value;
11593 EXCEPTION
11594 WHEN NO_DATA_FOUND THEN
11595 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11596 FND_MESSAGE.SET_TOKEN( 'FK', 'standard_terms' );
11597 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11598 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_terms');
11599 FND_MSG_PUB.ADD;
11600 x_return_status := FND_API.G_RET_STS_ERROR;
11601 */
11602 END check_standard_terms_fk;
11603
11604 PROCEDURE check_grouping_ruleid_fk (
11605 p_column IN VARCHAR2,
11606 p_column_value IN NUMBER,
11607 x_return_status IN OUT NOCOPY VARCHAR2
11608 ) IS
11609
11610 l_dummy VARCHAR2(1);
11611
11612 BEGIN
11613 SELECT 'Y' into l_dummy
11614 FROM ra_grouping_rules gr
11615 WHERE trunc(sysdate)
11616 BETWEEN gr.start_date AND
11617 nvl(gr.end_date,trunc(sysdate))
11618 AND gr.grouping_rule_id =
11619 p_column_value;
11620 EXCEPTION
11621 WHEN NO_DATA_FOUND THEN
11622 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_FK' );
11623 FND_MESSAGE.SET_TOKEN( 'FK', 'grouping_rule_id' );
11624 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11625 FND_MESSAGE.SET_TOKEN( 'TABLE', 'ra_grouping_rules');
11626 FND_MSG_PUB.ADD;
11627 x_return_status := FND_API.G_RET_STS_ERROR;
11628
11629 END check_grouping_ruleid_fk;
11630
11631 PROCEDURE check_positive_value (
11632 p_column IN VARCHAR2,
11633 p_column_value IN NUMBER,
11634 x_return_status IN OUT NOCOPY VARCHAR2
11635 ) IS
11636
11637 BEGIN
11638 IF p_column_value < 0 THEN
11639 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_LESS_THAN_ZERO' );
11640 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11641 FND_MSG_PUB.ADD;
11642 x_return_status := FND_API.G_RET_STS_ERROR;
11643 END IF;
11644
11645 END check_positive_value;
11646
11647 PROCEDURE check_greater_than_zero (
11648 p_column IN VARCHAR2,
11649 p_column_value IN NUMBER,
11650 x_return_status IN OUT NOCOPY VARCHAR2
11651 ) IS
11652
11653 BEGIN
11654 IF p_column_value <= 0 THEN
11655 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_GREATER_THAN_ZERO' );
11656 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11657 FND_MSG_PUB.ADD;
11658 x_return_status := FND_API.G_RET_STS_ERROR;
11659 END IF;
11660
11661 END check_greater_than_zero;
11662
11663 PROCEDURE check_less_than_100 (
11664 p_column IN VARCHAR2,
11665 p_column_value IN NUMBER,
11666 x_return_status IN OUT NOCOPY VARCHAR2
11667 ) IS
11668
11669 BEGIN
11670 IF p_column_value > 100 THEN
11671 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_GREATER_THAN_100' );
11672 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
11673 FND_MSG_PUB.ADD;
11674 x_return_status := FND_API.G_RET_STS_ERROR;
11675 END IF;
11676
11677 END check_less_than_100;
11678
11679 /**
11680 * PRIVATE PROCEDURE enable_debug
11681 *
11682 * DESCRIPTION
11683 * Turn on debug mode.
11684 *
11685 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11686 * HZ_UTILITY_V2PUB.enable_debug
11687 *
11688 * MODIFICATION HISTORY
11689 *
11690 * 07-23-2001 Jianying Huang o Created.
11691 *
11692 */
11693
11694 /*PROCEDURE enable_debug IS
11695
11696 BEGIN
11697
11698 G_DEBUG_COUNT := G_DEBUG_COUNT + 1;
11699
11700 IF G_DEBUG_COUNT = 1 THEN
11701 IF FND_PROFILE.value( 'HZ_API_FILE_DEBUG_ON' ) = 'Y' OR
11702 FND_PROFILE.value( 'HZ_API_DBMS_DEBUG_ON' ) = 'Y'
11703 THEN
11704 HZ_UTILITY_V2PUB.enable_debug;
11705 G_DEBUG := TRUE;
11706 END IF;
11707 END IF;
11708
11709 END enable_debug;
11710 */
11711
11712
11713 /**
11714 * PRIVATE PROCEDURE disable_debug
11715 *
11716 * DESCRIPTION
11717 * Turn off debug mode.
11718 *
11719 * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11720 * HZ_UTILITY_V2PUB.disable_debug
11721 *
11722 * MODIFICATION HISTORY
11723 *
11724 * 07-23-2001 Jianying Huang o Created.
11725 *
11726 */
11727
11728 /*PROCEDURE disable_debug IS
11729
11730 BEGIN
11731
11732 IF G_DEBUG THEN
11733 G_DEBUG_COUNT := G_DEBUG_COUNT - 1;
11734
11735 IF G_DEBUG_COUNT = 0 THEN
11736 HZ_UTILITY_V2PUB.disable_debug;
11737 G_DEBUG := FALSE;
11738 END IF;
11739 END IF;
11740
11741 END disable_debug;
11742 */
11743
11744
11745 FUNCTION get_index (
11746 p_val IN VARCHAR2
11747 ) RETURN BINARY_INTEGER IS
11748
11749 l_table_index BINARY_INTEGER;
11750 l_found BOOLEAN := FALSE;
11751 l_hash_value NUMBER;
11752
11753 BEGIN
11754
11755 l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
11756
11757 IF VAL_TAB.EXISTS(l_table_index) THEN
11758 IF VAL_TAB(l_table_index) = p_val THEN
11759 RETURN l_table_index;
11760 ELSE
11761 l_hash_value := l_table_index;
11762 l_table_index := l_table_index + 1;
11763 l_found := FALSE;
11764
11765 WHILE ( l_table_index < TABLE_SIZE ) AND ( NOT l_found ) LOOP
11766 IF VAL_TAB.EXISTS(l_table_index) THEN
11767 IF VAL_TAB(l_table_index) = p_val THEN
11768 l_found := TRUE;
11769 ELSE
11770 l_table_index := l_table_index + 1;
11771 END IF;
11772 ELSE
11773 RETURN TABLE_SIZE + 1;
11774 END IF;
11775 END LOOP;
11776
11777 IF NOT l_found THEN -- Didn't find any till the end
11778 l_table_index := 1; -- Start from the beginning
11779
11780 WHILE ( l_table_index < l_hash_value ) AND ( NOT l_found ) LOOP
11781 IF VAL_TAB.EXISTS(l_table_index) THEN
11782 IF VAL_TAB(l_table_index) = p_val THEN
11783 l_found := TRUE;
11784 ELSE
11785 l_table_index := l_table_index + 1;
11786 END IF;
11787 ELSE
11788 RETURN TABLE_SIZE + 1;
11789 END IF;
11790 END LOOP;
11791 END IF;
11792
11793 IF NOT l_found THEN
11794 RETURN TABLE_SIZE + 1; -- Return a higher value
11795 END IF;
11796 END IF;
11797 ELSE
11798 RETURN TABLE_SIZE + 1;
11799 END IF;
11800
11801 RETURN l_table_index;
11802
11803 EXCEPTION
11804 WHEN OTHERS THEN -- The entry doesn't exists
11805 RETURN TABLE_SIZE + 1;
11806
11807 END get_index;
11808
11809 PROCEDURE put (
11810 p_val IN VARCHAR2
11811 ) IS
11812
11813 l_table_index BINARY_INTEGER;
11814 l_stored BOOLEAN := FALSE;
11815 l_hash_value NUMBER;
11816
11817 BEGIN
11818
11819 l_table_index := DBMS_UTILITY.get_hash_value( p_val, 1, TABLE_SIZE );
11820
11821 IF VAL_TAB.EXISTS(l_table_index) THEN
11822 IF VAL_TAB(l_table_index) <> p_val THEN --Collision
11823 l_hash_value := l_table_index;
11824 l_table_index := l_table_index + 1;
11825
11826 WHILE (l_table_index < TABLE_SIZE) AND (NOT l_stored) LOOP
11827 IF VAL_TAB.EXISTS(l_table_index) THEN
11828 IF VAL_TAB(l_table_index) <> p_val THEN
11829 l_table_index := l_table_index + 1;
11830 END IF;
11831 ELSE
11832 VAL_TAB(l_table_index) := p_val;
11833 l_stored := TRUE;
11834 END IF;
11835 END LOOP;
11836
11837 IF NOT l_stored THEN --Didn't find any free bucket till the end
11838 l_table_index := 1;
11839
11840 WHILE (l_table_index < l_hash_value) AND (NOT l_stored) LOOP
11841 IF VAL_TAB.EXISTS(l_table_index) THEN
11842 IF VAL_TAB(l_table_index) <> p_val THEN
11843 l_table_index := l_table_index + 1;
11844 END IF;
11845 ELSE
11846 VAL_TAB(l_table_index) := p_val;
11847 l_stored := TRUE;
11848 END IF;
11849 END LOOP;
11850 END IF;
11851
11852 END IF;
11853 ELSE
11854 VAL_TAB(l_table_index) := p_val;
11855 END IF;
11856
11857 EXCEPTION
11858 WHEN OTHERS THEN
11859 NULL;
11860
11861 END put;
11862
11863 FUNCTION search (
11864 p_val IN VARCHAR2,
11865 p_category IN VARCHAR2
11866 ) RETURN BOOLEAN IS
11867
11868 l_table_index BINARY_INTEGER;
11869 l_return BOOLEAN;
11870
11871 l_dummy VARCHAR2(1);
11872 l_position1 NUMBER;
11873 l_position2 NUMBER;
11874
11875 l_lookup_table VARCHAR2(30);
11876 l_lookup_type AR_LOOKUPS.lookup_type%TYPE;
11877 l_lookup_code AR_LOOKUPS.lookup_code%TYPE;
11878
11879 BEGIN
11880
11881 -- search for the value
11882 l_table_index := get_index( p_val || G_SPECIAL_STRING || p_category );
11883
11884 IF l_table_index < table_size THEN
11885 l_return := TRUE;
11886 ELSE
11887 --Can't find the value in the table; look in the database
11888 IF p_category = 'LOOKUP' THEN
11889
11890 l_position1 := INSTRB( p_val, G_SPECIAL_STRING, 1, 1 );
11891 l_lookup_table := SUBSTRB( p_val, 1, l_position1 - 1 );
11892 l_position2 := INSTRB( p_val, G_SPECIAL_STRING, 1, 2 );
11893 l_lookup_type := SUBSTRB( p_val, l_position1 + G_LENGTH,
11894 l_position2 - l_position1 - G_LENGTH );
11895 l_lookup_code := SUBSTRB( p_val, l_position2 + G_LENGTH );
11896
11897 IF UPPER( l_lookup_table ) = 'AR_LOOKUPS' THEN
11898 BEGIN
11899 SELECT 'Y' INTO l_dummy
11900 FROM AR_LOOKUPS
11901 WHERE LOOKUP_TYPE = l_lookup_type
11902 AND LOOKUP_CODE = l_lookup_code
11903 AND ( ENABLED_FLAG = 'Y' AND
11904 TRUNC( SYSDATE ) BETWEEN
11905 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11906 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
11907
11908 l_return := TRUE;
11909 EXCEPTION
11910 WHEN NO_DATA_FOUND THEN
11911 l_return := FALSE;
11912 END;
11913 ELSIF UPPER( l_lookup_table ) = 'SO_LOOKUPS' THEN
11914 BEGIN
11915 SELECT 'Y' INTO l_dummy
11916 FROM SO_LOOKUPS
11917 WHERE LOOKUP_TYPE = l_lookup_type
11918 AND LOOKUP_CODE = l_lookup_code
11919 AND ( ENABLED_FLAG = 'Y' AND
11920 TRUNC( SYSDATE ) BETWEEN
11921 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11922 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) );
11923
11924 l_return := TRUE;
11925 EXCEPTION
11926 WHEN NO_DATA_FOUND THEN
11927 l_return := FALSE;
11928 END;
11929 ELSIF UPPER( l_lookup_table ) = 'OE_SHIP_METHODS_V' THEN
11930 BEGIN
11931 SELECT 'Y' INTO l_dummy
11932 FROM OE_SHIP_METHODS_V
11933 WHERE LOOKUP_TYPE = l_lookup_type
11934 AND LOOKUP_CODE = l_lookup_code
11935 AND ( ENABLED_FLAG = 'Y' AND
11936 TRUNC( SYSDATE ) BETWEEN
11937 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11938 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
11939 AND ROWNUM = 1;
11940
11941 l_return := TRUE;
11942 EXCEPTION
11943 WHEN NO_DATA_FOUND THEN
11944 l_return := FALSE;
11945 END;
11946 ELSIF UPPER( l_lookup_table ) = 'OE_LOOKUPS' THEN
11947 BEGIN
11948 SELECT 'Y' INTO l_dummy
11949 FROM OE_LOOKUPS
11950 WHERE LOOKUP_TYPE = l_lookup_type
11951 AND LOOKUP_CODE = l_lookup_code
11952 AND ( ENABLED_FLAG = 'Y' AND
11953 TRUNC( SYSDATE ) BETWEEN
11954 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11955 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
11956 AND ROWNUM = 1;
11957
11958 l_return := TRUE;
11959 EXCEPTION
11960 WHEN NO_DATA_FOUND THEN
11961 l_return := FALSE;
11962 END;
11963 ELSIF UPPER( l_lookup_table ) = 'FND_COMMON_LOOKUPS' THEN
11964 BEGIN
11965 SELECT 'Y' INTO l_dummy
11966 FROM FND_COMMON_LOOKUPS
11967 WHERE LOOKUP_TYPE = l_lookup_type
11968 AND LOOKUP_CODE = l_lookup_code
11969 AND ( ENABLED_FLAG = 'Y' AND
11970 TRUNC( SYSDATE ) BETWEEN
11971 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11972 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
11973 AND ROWNUM = 1;
11974
11975 l_return := TRUE;
11976 EXCEPTION
11977 WHEN NO_DATA_FOUND THEN
11978 l_return := FALSE;
11979 END;
11980 ELSIF UPPER( l_lookup_table ) = 'FND_LOOKUP_VALUES' THEN
11981 BEGIN
11982 SELECT 'Y' INTO l_dummy
11983 FROM FND_LOOKUP_VALUES
11984 WHERE LOOKUP_TYPE = l_lookup_type
11985 AND LOOKUP_CODE = l_lookup_code
11986 AND ( ENABLED_FLAG = 'Y' AND
11987 TRUNC( SYSDATE ) BETWEEN
11988 TRUNC(NVL( START_DATE_ACTIVE,SYSDATE ) ) AND
11989 TRUNC(NVL( END_DATE_ACTIVE,SYSDATE ) ) )
11990 AND ROWNUM = 1;
11991
11992 l_return := TRUE;
11993 EXCEPTION
11994 WHEN NO_DATA_FOUND THEN
11995 l_return := FALSE;
11996 END;
11997 ELSE
11998 l_return := FALSE;
11999 END IF;
12000 END IF;
12001
12002 --Cache the value
12003 IF l_return THEN
12004 put( p_val || G_SPECIAL_STRING || p_category );
12005 END IF;
12006 END IF;
12007
12008 RETURN l_return;
12009
12010 END search;
12011
12012 PROCEDURE validate_mandatory (
12013 p_create_update_flag IN VARCHAR2,
12014 p_column IN VARCHAR2,
12015 p_column_value IN VARCHAR2,
12016 p_restricted IN VARCHAR2 DEFAULT 'N',
12017 x_return_status IN OUT NOCOPY VARCHAR2
12018 ) IS
12019
12020 l_error BOOLEAN := FALSE;
12021
12022 BEGIN
12023
12024 IF p_restricted = 'N' THEN
12025 IF ( p_create_update_flag = 'C' AND
12026 ( p_column_value IS NULL OR
12027 p_column_value = FND_API.G_MISS_CHAR ) ) OR
12028 ( p_create_update_flag = 'U' AND
12029 p_column_value = FND_API.G_MISS_CHAR )
12030 THEN
12031 l_error := TRUE;
12032 END IF;
12033 ELSE
12034 IF ( p_column_value IS NULL OR
12035 p_column_value = FND_API.G_MISS_CHAR )
12036 THEN
12037 l_error := TRUE;
12038 END IF;
12039 END IF;
12040
12041 IF l_error THEN
12042 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12043 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12044 FND_MSG_PUB.ADD;
12045 x_return_status := FND_API.G_RET_STS_ERROR;
12046 END IF;
12047
12048 END validate_mandatory;
12049
12050 PROCEDURE validate_mandatory (
12051 p_create_update_flag IN VARCHAR2,
12052 p_column IN VARCHAR2,
12053 p_column_value IN NUMBER,
12054 p_restricted IN VARCHAR2 DEFAULT 'N',
12055 x_return_status IN OUT NOCOPY VARCHAR2
12056 ) IS
12057
12058 l_error BOOLEAN := FALSE;
12059
12060 BEGIN
12061
12062 IF p_restricted = 'N' THEN
12063 IF ( p_create_update_flag = 'C' AND
12064 ( p_column_value IS NULL OR
12065 p_column_value = FND_API.G_MISS_NUM ) ) OR
12066 ( p_create_update_flag = 'U' AND
12067 p_column_value = FND_API.G_MISS_NUM )
12068 THEN
12069 l_error := TRUE;
12070 END IF;
12071 ELSE
12072 IF ( p_column_value IS NULL OR
12073 p_column_value = FND_API.G_MISS_NUM )
12074 THEN
12075 l_error := TRUE;
12076 END IF;
12077 END IF;
12078
12079 IF l_error THEN
12080 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12081 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12082 FND_MSG_PUB.ADD;
12083 x_return_status := FND_API.G_RET_STS_ERROR;
12084 END IF;
12085
12086 END validate_mandatory;
12087
12088 PROCEDURE validate_mandatory (
12089 p_create_update_flag IN VARCHAR2,
12090 p_column IN VARCHAR2,
12091 p_column_value IN DATE,
12092 p_restricted IN VARCHAR2 DEFAULT 'N',
12093 x_return_status IN OUT NOCOPY VARCHAR2
12094 ) IS
12095
12096 l_error BOOLEAN := FALSE;
12097
12098 BEGIN
12099
12100 IF p_restricted = 'N' THEN
12101 IF ( p_create_update_flag = 'C' AND
12102 ( p_column_value IS NULL OR
12103 p_column_value = FND_API.G_MISS_DATE ) ) OR
12104 ( p_create_update_flag = 'U' AND
12105 p_column_value = FND_API.G_MISS_DATE )
12106 THEN
12107 l_error := TRUE;
12108 END IF;
12109 ELSE
12110 IF ( p_column_value IS NULL OR
12111 p_column_value = FND_API.G_MISS_DATE )
12112 THEN
12113 l_error := TRUE;
12114 END IF;
12115 END IF;
12116
12117 IF l_error THEN
12118 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MISSING_COLUMN' );
12119 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12120 FND_MSG_PUB.ADD;
12121 x_return_status := FND_API.G_RET_STS_ERROR;
12122 END IF;
12123
12124 END validate_mandatory;
12125
12126 PROCEDURE validate_nonupdateable (
12127 p_column IN VARCHAR2,
12128 p_column_value IN VARCHAR2,
12129 p_old_column_value IN VARCHAR2,
12130 p_restricted IN VARCHAR2 DEFAULT 'Y',
12131 x_return_status IN OUT NOCOPY VARCHAR2
12132 ) IS
12133
12134 l_error BOOLEAN := FALSE;
12135
12136 BEGIN
12137
12138 IF p_column_value IS NOT NULL THEN
12139 IF p_restricted = 'Y' THEN
12140 IF ( p_column_value <> FND_API.G_MISS_CHAR OR
12141 p_old_column_value IS NOT NULL ) AND
12142 ( p_old_column_value IS NULL OR
12143 p_column_value <> p_old_column_value )
12144 THEN
12145 l_error := TRUE;
12146 END IF;
12147 ELSE
12148 IF (p_old_column_value IS NOT NULL AND -- Bug 3439053.
12149 p_old_column_value <> FND_API.G_MISS_CHAR)
12150 AND
12151 ( p_column_value = FND_API.G_MISS_CHAR OR
12152 p_column_value <> p_old_column_value )
12153 THEN
12154 l_error := TRUE;
12155 END IF;
12156 END IF;
12157 END IF;
12158
12159 IF l_error THEN
12160 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12161 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12162 FND_MSG_PUB.ADD;
12163 x_return_status := FND_API.G_RET_STS_ERROR;
12164 END IF;
12165
12166 END validate_nonupdateable;
12167
12168 PROCEDURE validate_nonupdateable (
12169 p_column IN VARCHAR2,
12170 p_column_value IN NUMBER,
12171 p_old_column_value IN NUMBER,
12172 p_restricted IN VARCHAR2 DEFAULT 'Y',
12173 x_return_status IN OUT NOCOPY VARCHAR2
12174 ) IS
12175
12176 l_error BOOLEAN := FALSE;
12177
12178 BEGIN
12179
12180 IF p_column_value IS NOT NULL THEN
12181 IF p_restricted = 'Y' THEN
12182 IF ( p_column_value <> FND_API.G_MISS_NUM OR
12183 p_old_column_value IS NOT NULL ) AND
12184 ( p_old_column_value IS NULL OR
12185 p_column_value <> p_old_column_value )
12186 THEN
12187 l_error := TRUE;
12188 END IF;
12189 ELSE
12190 IF (p_old_column_value IS NOT NULL AND -- Bug 3439053
12191 p_old_column_value <> FND_API.G_MISS_NUM)
12192 AND
12193 ( p_column_value = FND_API.G_MISS_NUM OR
12194 p_column_value <> p_old_column_value )
12195 THEN
12196 l_error := TRUE;
12197 END IF;
12198 END IF;
12199 END IF;
12200
12201 IF l_error THEN
12202 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12203 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12204 FND_MSG_PUB.ADD;
12205 x_return_status := FND_API.G_RET_STS_ERROR;
12206 END IF;
12207
12208 END validate_nonupdateable;
12209
12210 PROCEDURE validate_nonupdateable (
12211 p_column IN VARCHAR2,
12212 p_column_value IN DATE,
12213 p_old_column_value IN DATE,
12214 p_restricted IN VARCHAR2 DEFAULT 'Y',
12215 x_return_status IN OUT NOCOPY VARCHAR2
12216 ) IS
12217
12218 l_error BOOLEAN := FALSE;
12219
12220 BEGIN
12221
12222 IF p_column_value IS NOT NULL THEN
12223 IF p_restricted = 'Y' THEN
12224 IF ( p_column_value <> FND_API.G_MISS_DATE OR
12225 p_old_column_value IS NOT NULL ) AND
12226 ( p_old_column_value IS NULL OR
12227 p_column_value <> p_old_column_value )
12228 THEN
12229 l_error := TRUE;
12230 END IF;
12231 ELSE
12232 IF (p_old_column_value IS NOT NULL AND -- Bug 3439053
12233 p_old_column_value <> FND_API.G_MISS_DATE)
12234 AND
12235 ( p_column_value = FND_API.G_MISS_DATE OR
12236 p_column_value <> p_old_column_value )
12237 THEN
12238 l_error := TRUE;
12239 END IF;
12240 END IF;
12241 END IF;
12242
12243 IF l_error THEN
12244 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_COLUMN' );
12245 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12246 FND_MSG_PUB.ADD;
12247 x_return_status := FND_API.G_RET_STS_ERROR;
12248 END IF;
12249
12250 END validate_nonupdateable;
12251
12252 PROCEDURE validate_start_end_date (
12253 p_create_update_flag IN VARCHAR2,
12254 p_start_date_column_name IN VARCHAR2,
12255 p_start_date IN DATE,
12256 p_old_start_date IN DATE,
12257 p_end_date_column_name IN VARCHAR2,
12258 p_end_date IN DATE,
12259 p_old_end_date IN DATE,
12260 x_return_status IN OUT NOCOPY VARCHAR2
12261 ) IS
12262
12263 l_start_date DATE := p_old_start_date;
12264 l_end_date DATE := p_old_end_date;
12265
12266 BEGIN
12267
12268 IF p_create_update_flag = 'C' THEN
12269 l_start_date := p_start_date;
12270 l_end_date := p_end_date;
12271 ELSIF p_create_update_flag = 'U' THEN
12272 IF p_start_date IS NOT NULL
12273 THEN
12274 IF p_start_date = FND_API.G_MISS_DATE THEN
12275 l_start_date := NULL;
12276 ELSE
12277 l_start_date := p_start_date;
12278 END IF;
12279 END IF;
12280
12281 IF p_end_date IS NOT NULL
12282 THEN
12283 IF p_end_date = FND_API.G_MISS_DATE THEN
12284 l_end_date := NULL;
12285 ELSE
12286 l_end_date := p_end_date;
12287 END IF;
12288 END IF;
12289 END IF;
12290
12291 IF l_end_date IS NOT NULL AND
12292 l_end_date <> FND_API.G_MISS_DATE AND
12293 ( l_start_date IS NULL OR
12294 l_start_date = FND_API.G_MISS_DATE OR
12295 l_start_date > l_end_date )
12296 THEN
12297 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_DATE_GREATER' );
12298 FND_MESSAGE.SET_TOKEN( 'DATE2', p_end_date_column_name );
12299 FND_MESSAGE.SET_TOKEN( 'DATE1', p_start_date_column_name );
12300 FND_MSG_PUB.ADD;
12301 x_return_status := FND_API.G_RET_STS_ERROR;
12302 END IF;
12303
12304 END validate_start_end_date;
12305
12306 PROCEDURE validate_cannot_update_to_null (
12307 p_column IN VARCHAR2,
12308 p_column_value IN VARCHAR2,
12309 x_return_status IN OUT NOCOPY VARCHAR2
12310 ) IS
12311
12312 BEGIN
12313
12314 IF p_column_value = FND_API.G_MISS_CHAR THEN
12315 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12316 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12317 FND_MSG_PUB.ADD;
12318 x_return_status := FND_API.G_RET_STS_ERROR;
12319 END IF;
12320
12321 END validate_cannot_update_to_null;
12322
12323 PROCEDURE validate_cannot_update_to_null (
12324 p_column IN VARCHAR2,
12325 p_column_value IN NUMBER,
12326 x_return_status IN OUT NOCOPY VARCHAR2
12327 ) IS
12328
12329 BEGIN
12330
12331 IF p_column_value = FND_API.G_MISS_NUM THEN
12332 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12333 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12334 FND_MSG_PUB.ADD;
12335 x_return_status := FND_API.G_RET_STS_ERROR;
12336 END IF;
12337
12338 END validate_cannot_update_to_null;
12339
12340 PROCEDURE validate_cannot_update_to_null (
12341 p_column IN VARCHAR2,
12342 p_column_value IN DATE,
12343 x_return_status IN OUT NOCOPY VARCHAR2
12344 ) IS
12345
12346 BEGIN
12347
12348 IF p_column_value = FND_API.G_MISS_DATE THEN
12349 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_NONUPDATEABLE_TO_NULL' );
12350 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12351 FND_MSG_PUB.ADD;
12352 x_return_status := FND_API.G_RET_STS_ERROR;
12353 END IF;
12354
12355 END validate_cannot_update_to_null;
12356
12357 PROCEDURE validate_lookup (
12358 p_column IN VARCHAR2,
12359 p_lookup_table IN VARCHAR2 DEFAULT 'AR_LOOKUPS',
12360 p_lookup_type IN VARCHAR2,
12361 p_column_value IN VARCHAR2,
12362 x_return_status IN OUT NOCOPY VARCHAR2
12363 ) IS
12364
12365 l_error BOOLEAN := FALSE;
12366
12367 BEGIN
12368
12369 IF p_column_value IS NOT NULL AND
12370 p_column_value <> FND_API.G_MISS_CHAR THEN
12371
12372 IF p_lookup_type = 'YES/NO' THEN
12373 IF p_column_value NOT IN ('Y', 'N') THEN
12374 l_error := TRUE;
12375 END IF;
12376 ELSE
12377 IF NOT search(p_lookup_table || G_SPECIAL_STRING ||
12378 p_lookup_type || G_SPECIAL_STRING || p_column_value,
12379 'LOOKUP' )
12380 THEN
12381 l_error := TRUE;
12382 END IF;
12383 END IF;
12384
12385 IF l_error THEN
12386 FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_INVALID_LOOKUP' );
12387 FND_MESSAGE.SET_TOKEN( 'COLUMN', p_column );
12388 FND_MESSAGE.SET_TOKEN( 'LOOKUP_TYPE', p_lookup_type );
12389 FND_MSG_PUB.ADD;
12390 x_return_status := FND_API.G_RET_STS_ERROR;
12391 END IF;
12392 END IF;
12393
12394 END validate_lookup;
12395
12396
12397 /**
12398 * PROCEDURE validate_created_by_module
12399 *
12400 * DESCRIPTION
12401 * validate created by module
12402 * ARGUMENTS
12403 * IN:
12404 * p_create_update_flag create update flag
12405 * p_created_by_module created by module
12406 * p_old_created_by_module old value of created by module
12407 * x_return_status return status
12408 */
12409
12410 PROCEDURE validate_created_by_module (
12411 p_create_update_flag IN VARCHAR2,
12412 p_created_by_module IN VARCHAR2,
12413 p_old_created_by_module IN VARCHAR2,
12414 x_return_status IN OUT NOCOPY VARCHAR2
12415 ) IS
12416
12417 l_column CONSTANT VARCHAR2(30) := 'created_by_module';
12418
12419 BEGIN
12420
12421 -- skip mandatory and non-updateable check from logical API
12422 IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
12423 -- created_by_module is mandatory field
12424 -- Since created_by_module is non-updateable, we only need to check mandatory
12425 -- during creation.
12426
12427 IF p_create_update_flag = 'C' THEN
12428 validate_mandatory (
12429 p_create_update_flag => p_create_update_flag,
12433
12430 p_column => l_column,
12431 p_column_value => p_created_by_module,
12432 x_return_status => x_return_status);
12434 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12435 hz_utility_v2pub.debug(
12436 p_prefix => '',
12437 p_message => l_column || ' is mandatory. ' ||
12438 'x_return_status = ' || x_return_status,
12439 p_msg_level => fnd_log.level_statement);
12440 END IF;
12441 END IF;
12442
12443 -- created_by_module is non-updateable field. But it can be updated from
12444 -- NULL to some value.
12445
12446 IF p_create_update_flag = 'U' AND
12447 p_created_by_module IS NOT NULL
12448 THEN
12449 validate_nonupdateable (
12450 p_column => l_column,
12451 p_column_value => p_created_by_module,
12452 p_old_column_value => p_old_created_by_module,
12453 p_restricted => 'N',
12454 x_return_status => x_return_status);
12455
12456 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12457 hz_utility_v2pub.debug(
12458 p_prefix => '',
12459 p_message => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
12460 'x_return_status = ' || x_return_status,
12461 p_msg_level => fnd_log.level_statement);
12462 END IF;
12463 END IF;
12464 END IF;
12465
12466 -- created_by_module is lookup code in lookup type HZ_CREATED_BY_MODULES
12467 IF p_created_by_module IS NOT NULL AND
12468 p_created_by_module <> fnd_api.g_miss_char AND
12469 (p_create_update_flag = 'C' OR
12470 (p_create_update_flag = 'U' AND
12471 (p_old_created_by_module IS NULL OR
12472 p_created_by_module <> p_old_created_by_module)))
12473 THEN
12474 validate_lookup (
12475 p_column => l_column,
12476 p_lookup_type => 'HZ_CREATED_BY_MODULES',
12477 p_column_value => p_created_by_module,
12478 x_return_status => x_return_status);
12479
12480 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12481 hz_utility_v2pub.debug(
12482 p_prefix => '',
12483 p_message => l_column || ' is lookup code in lookup type HZ_CREATED_BY_MODULES. ' ||
12484 'x_return_status = ' || x_return_status,
12485 p_msg_level => fnd_log.level_statement);
12486 END IF;
12487 END IF;
12488
12489 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12490 hz_utility_v2pub.debug(
12491 p_prefix => '',
12492 p_message => 'after validate ' || l_column || ' ... ' ||
12493 'x_return_status = ' || x_return_status,
12494 p_msg_level => fnd_log.level_statement);
12495 END IF;
12496
12497 END validate_created_by_module;
12498
12499
12500 /**
12501 * PROCEDURE validate_application_id
12502 *
12503 * DESCRIPTION
12504 * validate application id
12505 * ARGUMENTS
12506 * IN:
12507 * p_create_update_flag create update flag
12508 * p_application_id application id
12509 * p_old_application_id old value of application id
12510 * x_return_status return status
12511 */
12512
12513 PROCEDURE validate_application_id (
12514 p_create_update_flag IN VARCHAR2,
12515 p_application_id IN NUMBER,
12516 p_old_application_id IN NUMBER,
12517 x_return_status IN OUT NOCOPY VARCHAR2
12518 ) IS
12519
12520 l_column CONSTANT VARCHAR2(30) := 'application_id';
12521
12522 BEGIN
12523
12524 -- skip non-updateable check from logical API
12525 IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
12526 -- application_id is non-updateable field. But it can be updated from NULL
12527 -- to some value.
12528
12529 IF p_create_update_flag = 'U' AND
12530 p_application_id IS NOT NULL
12531 THEN
12532 validate_nonupdateable (
12533 p_column => l_column,
12534 p_column_value => p_application_id,
12535 p_old_column_value => p_old_application_id,
12536 p_restricted => 'N',
12537 x_return_status => x_return_status);
12538
12539 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12540 hz_utility_v2pub.debug(
12541 p_prefix => '',
12542 p_message => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
12543 'x_return_status = ' || x_return_status,
12544 p_msg_level => fnd_log.level_statement);
12545 END IF;
12546 END IF;
12547 END IF;
12548
12549 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
12550 hz_utility_v2pub.debug(
12551 p_prefix => '',
12552 p_message => 'after validate ' || l_column || ' ... ' ||
12553 'x_return_status = ' || x_return_status,
12554 p_msg_level => fnd_log.level_statement);
12555 END IF;
12556
12557 END validate_application_id;
12558
12559 PROCEDURE validate_bill_level (
12560 p_create_update_flag IN VARCHAR2,
12561 p_customer_profile_rec IN HZ_CUSTOMER_PROFILE_V2PUB.CUSTOMER_PROFILE_REC_TYPE,
12562 x_return_status IN OUT NOCOPY VARCHAR2
12563 ) IS
12564
12565 l_profile_class_rec HZ_CUST_PROFILE_CLASSES%ROWTYPE;
12566 l_error BOOLEAN := FALSE;
12567
12568 l_bill_level_count number;
12569 l_bill_type_count number;
12570
12571 BEGIN
12572
12573 -- if cons_inv_flag is 'Y', do all validations
12574 if p_customer_profile_rec.cons_inv_flag = 'Y' then
12575 -- If Balance Forward billing is enabled,
12576 -- Bill Level and Type should have valid not null values
12577 if (p_customer_profile_rec.cons_bill_level IS NULL
12578 OR p_customer_profile_rec.cons_inv_type IS NULL) then
12579 FND_MESSAGE.SET_NAME('AR', 'HZ_API_BILL_LVL_TYPE_INVALID');
12580 FND_MSG_PUB.ADD;
12581 x_return_status := FND_API.G_RET_STS_ERROR;
12582 else
12583 if p_customer_profile_rec.cons_bill_level IS NOT NULL then
12584 SELECT COUNT(*)
12585 INTO l_bill_level_count
12586 FROM ar_lookups
12587 WHERE lookup_type = 'HZ_CONS_BILL_LEVEL'
12588 AND lookup_code = p_customer_profile_rec.cons_bill_level
12589 AND TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12590 AND enabled_flag = 'Y';
12591
12592 IF (l_bill_level_count = 0) THEN
12593 FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_BILL_LEVEL');
12594 FND_MSG_PUB.ADD;
12595 x_return_status := FND_API.G_RET_STS_ERROR;
12596 END IF;
12597 end if;
12598 end if;
12599
12600 -- For Account use bill level, use Summary or Detail as bill type.
12601 if p_customer_profile_rec.cons_bill_level = 'ACCOUNT' THEN
12602 SELECT COUNT(*)
12603 INTO l_bill_type_count
12604 FROM ar_lookups
12605 WHERE lookup_type = 'HZ_CONS_INV_TYPE'
12606 AND lookup_code = p_customer_profile_rec.cons_inv_type
12607 AND TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12608 AND enabled_flag = 'Y'
12609 AND lookup_code <> 'IMPORTED';
12610
12611 IF (l_bill_TYPE_count = 0) THEN
12612 FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ACCT_BILL_TYPE');
12613 FND_MSG_PUB.ADD;
12614 x_return_status := FND_API.G_RET_STS_ERROR;
12615 END IF;
12616 -- For Site use bill level, use Summary, Detail, or Imported as bill type.
12617 else
12618 SELECT COUNT(*)
12619 INTO l_bill_type_count
12620 FROM ar_lookups
12621 WHERE lookup_type = 'HZ_CONS_INV_TYPE'
12622 AND lookup_code = p_customer_profile_rec.cons_inv_type
12623 AND TRUNC(SYSDATE) BETWEEN NVL(start_date_active,SYSDATE) AND NVL(end_date_active, SYSDATE+1)
12624 AND enabled_flag = 'Y';
12625
12626 IF (l_bill_TYPE_count = 0) THEN
12627 FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ACCT_BILL_TYPE');
12628 FND_MSG_PUB.ADD;
12629 x_return_status := FND_API.G_RET_STS_ERROR;
12630 END IF;
12631 end if;
12632 end if;
12633 END validate_bill_level;
12634
12635 END HZ_ACCOUNT_VALIDATE_V2PUB;