[Home] [Help]
PACKAGE BODY: APPS.IGC_CC_SYSTEM_OPTIONS_PKG
Source
1 PACKAGE BODY IGC_CC_SYSTEM_OPTIONS_PKG AS
2 /*$Header: IGCSYSPB.pls 120.0.12000000.1 2007/10/25 04:56:08 mbremkum noship $*/
3
4 G_PKG_NAME CONSTANT VARCHAR2(30):= 'IGC_CC_SYSTEM_OPTIONS_PKG';
5
6 -- The flag determines whether to print debug information or not.
7 g_debug_flag VARCHAR2(1) := 'N' ;
8
9 -- Variables for ATG Central Logging
10
11 l_debug_level number := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
12 l_state_level number := FND_LOG.LEVEL_STATEMENT;
13 l_proc_level number := FND_LOG.LEVEL_PROCEDURE;
14 l_event_level number := FND_LOG.LEVEL_EVENT;
15 l_excep_level number := FND_LOG.LEVEL_EXCEPTION;
16 l_error_level number := FND_LOG.LEVEL_ERROR;
17 l_unexp_level number := FND_LOG.LEVEL_UNEXPECTED;
18 l_path VARCHAR2(255) := 'IGC.PLSQL.IGCSYSPB.IGC_CC_SYSTEM_OPTIONS_PKG';
19
20 /*=======================================================================+
21 | PROCEDURE Insert_Row |
22 +=======================================================================*/
23 PROCEDURE Insert_Row
24 (
25 p_api_version IN NUMBER,
26 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
27 p_commit IN VARCHAR2 := FND_API.G_FALSE,
28 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
29 x_return_status OUT NOCOPY VARCHAR2,
30 x_msg_count OUT NOCOPY NUMBER,
31 x_msg_data OUT NOCOPY VARCHAR2,
32 p_row_id IN OUT NOCOPY VARCHAR2,
33 p_org_id NUMBER,
34 p_cc_num_method VARCHAR2,
35 p_cc_num_datatype VARCHAR2,
36 p_cc_next_num NUMBER,
37 p_cc_prefix VARCHAR2,
38 p_default_rate_type VARCHAR2,
39 p_enforce_vendor_hold_flag VARCHAR2,
40 p_last_update_date DATE,
41 p_last_updated_by NUMBER,
42 p_last_update_login NUMBER,
43 p_created_by NUMBER,
44 p_creation_date DATE
45 )
46 IS
47
48 l_api_name CONSTANT VARCHAR2(30) := 'Insert_Row';
49 l_api_version CONSTANT NUMBER := 1.0;
50
51 CURSOR cur_sys_options IS
52 SELECT ROWID
53 FROM IGC_CC_SYSTEM_OPTIONS_ALL
54 WHERE org_id = p_org_id;
55
56 BEGIN
57
58 SAVEPOINT Insert_Row_Pvt;
59
60 IF NOT FND_API.Compatible_API_Call ( l_api_version,
61 p_api_version,
62 l_api_name,
63 G_PKG_NAME )
64 THEN
65 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
66 END IF;
67
68
69 IF FND_API.to_Boolean ( p_init_msg_list ) THEN
70 FND_MSG_PUB.initialize ;
71 END IF;
72
73 x_return_status := FND_API.G_RET_STS_SUCCESS;
74
75 INSERT INTO IGC_CC_SYSTEM_OPTIONS_ALL
76 (
77 org_id,
78 cc_num_method,
79 cc_num_datatype,
80 cc_next_num,
81 cc_prefix,
82 default_rate_type,
83 enforce_vendor_hold_flag,
84 last_update_date,
85 last_updated_by,
86 last_update_login,
87 creation_date,
88 created_by
89 )
90 VALUES
91 (
92 p_org_id,
93 p_cc_num_method,
94 p_cc_num_datatype,
95 p_cc_next_num,
96 p_cc_prefix,
97 p_default_rate_type,
98 p_enforce_vendor_hold_flag,
99 p_last_update_date,
100 p_last_updated_by,
101 p_last_update_login,
102 p_creation_date,
103 p_created_by
104 );
105
106 OPEN cur_sys_options;
107 FETCH cur_sys_options INTO p_row_id;
108 IF (cur_sys_options%NOTFOUND) THEN
109 CLOSE cur_sys_options;
110 RAISE FND_API.G_EXC_ERROR;
111 END IF;
112 CLOSE cur_sys_options;
113
114
115 IF FND_API.To_Boolean ( p_commit ) THEN
116 COMMIT WORK;
117 END iF;
118
119 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
120 p_data => x_msg_data );
121
122 EXCEPTION
123
124 WHEN FND_API.G_EXC_ERROR THEN
125
126 ROLLBACK TO Insert_Row_Pvt ;
127 x_return_status := FND_API.G_RET_STS_ERROR;
128 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
129 p_data => x_msg_data );
130
131 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
132
133 ROLLBACK TO Insert_Row_Pvt ;
134 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
135 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
136 p_data => x_msg_data );
137
138 WHEN OTHERS THEN
139
140 ROLLBACK TO Insert_Row_Pvt ;
141 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
142
143 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
144 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
145 l_api_name);
146 END if;
147
148 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
149 p_data => x_msg_data );
150
151 END Insert_Row;
152
153
154 /*==========================================================================+
155 | PROCEDURE Lock_Row |
156 +==========================================================================*/
157 PROCEDURE Lock_Row
158 (
159 p_api_version IN NUMBER,
160 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
161 p_commit IN VARCHAR2 := FND_API.G_FALSE,
162 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
163 x_return_status OUT NOCOPY VARCHAR2,
164 x_msg_count OUT NOCOPY NUMBER,
165 x_msg_data OUT NOCOPY VARCHAR2,
166 p_row_id IN OUT NOCOPY VARCHAR2,
167 p_org_id NUMBER,
168 p_cc_num_method VARCHAR2,
169 p_cc_num_datatype VARCHAR2,
170 p_cc_next_num NUMBER,
171 p_cc_prefix VARCHAR2,
172 p_default_rate_type VARCHAR2,
173 p_enforce_vendor_hold_flag VARCHAR2,
174 p_row_locked OUT NOCOPY VARCHAR2
175 )
176 IS
177
178 l_api_name CONSTANT VARCHAR2(30) := 'Lock_Row';
179 l_api_version CONSTANT NUMBER := 1.0;
180
181 Counter NUMBER;
182
183 CURSOR cur_sys_options IS
184 SELECT *
185 FROM IGC_CC_SYSTEM_OPTIONS_ALL
186 WHERE ROWID = p_row_id
187 FOR UPDATE NOWAIT;
188
189 Recinfo cur_sys_options%ROWTYPE;
190
191 BEGIN
192
193 SAVEPOINT Lock_Row_Pvt;
194
195 IF NOT FND_API.Compatible_API_Call ( l_api_version,
196 p_api_version,
197 l_api_name,
198 G_PKG_NAME )
199 THEN
200 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
201 END IF;
202
203
204 IF FND_API.to_Boolean ( p_init_msg_list ) THEN
205 FND_MSG_PUB.initialize;
206 END IF;
207
208 x_return_status := FND_API.G_RET_STS_SUCCESS;
209 p_row_locked := FND_API.G_TRUE;
210
211 OPEN cur_sys_options;
212
213 FETCH cur_sys_options INTO Recinfo;
214 IF (cur_sys_options%NOTFOUND) THEN
215 CLOSE cur_sys_options;
216 FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_DELETED');
217 FND_MSG_PUB.Add;
218 RAISE FND_API.G_EXC_ERROR;
219 END IF;
220
221 CLOSE cur_sys_options;
222
223 IF ( ( (Recinfo.org_id = p_org_id)
224 OR ( (Recinfo.org_id IS NULL)
225 AND (p_org_id IS NULL)))
226 AND ( (Recinfo.cc_num_method = p_cc_num_method)
227 OR ( (Recinfo.cc_num_method IS NULL)
228 AND (p_cc_num_method IS NULL)))
229 AND ( (Recinfo.cc_num_datatype = p_cc_num_datatype)
230 OR ( (Recinfo.cc_num_datatype IS NULL)
231 AND (p_cc_num_datatype IS NULL)))
232 AND ( (Recinfo.cc_next_num = p_cc_next_num)
233 OR ( (Recinfo.cc_next_num IS NULL)
234 AND (p_cc_next_num IS NULL)))
235 AND ( (Recinfo.cc_prefix = p_cc_prefix)
236 OR ( (Recinfo.cc_prefix IS NULL)
237 AND (p_cc_prefix IS NULL)))
238 AND ( (Recinfo.default_rate_type = p_default_rate_type)
239 OR ( (Recinfo.default_rate_type IS NULL)
240 AND (p_default_rate_type IS NULL)))
241 AND ( (Recinfo.enforce_vendor_hold_flag = p_enforce_vendor_hold_flag)
242 OR ( (Recinfo.enforce_vendor_hold_flag IS NULL)
243 AND (p_enforce_vendor_hold_flag IS NULL)))
244 ) THEN
245 Null;
246 ELSE
247 FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_CHANGED');
248 FND_MSG_PUB.Add;
249 RAISE FND_API.G_EXC_ERROR;
250 END IF;
251
252 IF FND_API.To_Boolean ( p_commit ) THEN
253 COMMIT WORK;
254 END iF;
255
256 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
257 p_data => x_msg_data );
258
259 EXCEPTION
260
261 WHEN APP_EXCEPTION.RECORD_LOCK_EXCEPTION THEN
262
263 ROLLBACK TO Lock_Row_Pvt;
264 p_row_locked := FND_API.G_FALSE;
265 x_return_status := FND_API.G_RET_STS_ERROR;
266 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
267 p_data => x_msg_data );
268
269 WHEN FND_API.G_EXC_ERROR THEN
270
271 ROLLBACK TO Lock_Row_Pvt;
272 x_return_status := FND_API.G_RET_STS_ERROR;
273 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
274 p_data => x_msg_data );
275
276 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
277
278 ROLLBACK TO Lock_Row_Pvt;
279 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
280 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
281 p_data => x_msg_data );
282
283 WHEN OTHERS THEN
284
285 ROLLBACK TO Lock_Row_Pvt ;
286 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
287
288 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
289 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
290 l_api_name);
291 END if;
292
293 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
294 p_data => x_msg_data );
295
296 END Lock_Row;
297
298
299 /*==========================================================================+
300 | PROCEDURE Update_Row |
301 +==========================================================================*/
302 PROCEDURE Update_Row
303 (
304 p_api_version IN NUMBER,
305 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
306 p_commit IN VARCHAR2 := FND_API.G_FALSE,
307 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
308 x_return_status OUT NOCOPY VARCHAR2,
309 x_msg_count OUT NOCOPY NUMBER,
310 x_msg_data OUT NOCOPY VARCHAR2,
311 p_row_id IN OUT NOCOPY VARCHAR2,
312 p_org_id NUMBER,
313 p_cc_num_method VARCHAR2,
314 p_cc_num_datatype VARCHAR2,
315 p_cc_next_num NUMBER,
316 p_cc_prefix VARCHAR2,
317 p_default_rate_type VARCHAR2,
318 p_enforce_vendor_hold_flag VARCHAR2,
319 p_last_update_date DATE,
320 p_last_updated_by NUMBER,
321 p_last_update_login NUMBER
322 )
323 IS
324
325 l_api_name CONSTANT VARCHAR2(30) := 'Update_Row';
326 l_api_version CONSTANT NUMBER := 1.0;
327
328 BEGIN
329
330 SAVEPOINT Update_Row_Pvt;
331
332 IF NOT FND_API.Compatible_API_Call ( l_api_version,
333 p_api_version,
334 l_api_name,
335 G_PKG_NAME )
336 THEN
337 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
338 END IF;
339
340
341 IF FND_API.to_Boolean ( p_init_msg_list ) THEN
342 FND_MSG_PUB.initialize;
343 END IF;
344
345 x_return_status := FND_API.G_RET_STS_SUCCESS;
346
347 UPDATE IGC_CC_SYSTEM_OPTIONS_ALL
348 SET
349 org_id = p_org_id,
350 cc_num_method = p_cc_num_method,
351 cc_num_datatype = p_cc_num_datatype,
355 enforce_vendor_hold_flag = p_enforce_vendor_hold_flag,
352 cc_next_num = p_cc_next_num,
353 cc_prefix = p_cc_prefix,
354 default_rate_type = p_default_rate_type,
356 last_update_date = p_last_update_date,
357 last_updated_by = p_last_updated_by,
358 last_update_login = p_last_update_login
359 WHERE ROWID = p_row_id;
360
361 IF (SQL%NOTFOUND) THEN
362 RAISE NO_DATA_FOUND;
363 END IF;
364
365 IF FND_API.To_Boolean ( p_commit ) THEN
366 COMMIT WORK;
367 END iF;
368
369 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
370 p_data => x_msg_data );
371
372 EXCEPTION
373
374 WHEN FND_API.G_EXC_ERROR THEN
375
376 ROLLBACK TO Update_Row_Pvt ;
377 x_return_status := FND_API.G_RET_STS_ERROR;
378 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
379 p_data => x_msg_data );
380
381 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
382
383 ROLLBACK TO Update_Row_Pvt ;
384 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
385 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
386 p_data => x_msg_data );
387
388 WHEN OTHERS THEN
389
390 ROLLBACK TO Update_Row_Pvt ;
391 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
392
393 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
394 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
395 l_api_name);
396 END if;
397
398 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
399 p_data => x_msg_data );
400
401 END Update_Row;
402 /* ----------------------------------------------------------------------- */
403
404 /*==========================================================================+
405 | PROCEDURE Delete_Row |
406 +==========================================================================*/
407 PROCEDURE Delete_Row
408 (
409 p_api_version IN NUMBER,
410 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
411 p_commit IN VARCHAR2 := FND_API.G_FALSE,
412 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
413 x_return_status OUT NOCOPY VARCHAR2,
414 x_msg_count OUT NOCOPY NUMBER,
415 x_msg_data OUT NOCOPY VARCHAR2,
416 p_row_id IN VARCHAR2
417 )
418 IS
419
420 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Row';
421 l_api_version CONSTANT NUMBER := 1.0;
422
423 BEGIN
424
425 SAVEPOINT Delete_Row_Pvt;
426
427 IF NOT FND_API.Compatible_API_Call ( l_api_version,
428 p_api_version,
429 l_api_name,
430 G_PKG_NAME )
431 THEN
432 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
433 END IF;
434
435 IF FND_API.to_Boolean ( p_init_msg_list ) THEN
436 FND_MSG_PUB.initialize;
437 END IF;
438
439 x_return_status := FND_API.G_RET_STS_SUCCESS;
440
441 -- Deleting the record in igc_cc_system_options_all.
442
443 DELETE FROM IGC_CC_SYSTEM_OPTIONS_ALL
444 WHERE ROWID = p_row_id;
445
446 IF (SQL%NOTFOUND) THEN
447 RAISE NO_DATA_FOUND;
448 END IF;
449
450 IF FND_API.To_Boolean ( p_commit ) THEN
451 COMMIT WORK;
452 END IF;
453
454 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
455 p_data => x_msg_data );
456
457 EXCEPTION
458
459 WHEN FND_API.G_EXC_ERROR THEN
460
461 ROLLBACK TO Delete_Row_Pvt;
462 x_return_status := FND_API.G_RET_STS_ERROR;
463 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
464 p_data => x_msg_data );
465
466 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
467
468 ROLLBACK TO Delete_Row_Pvt;
469 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
470 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
471 p_data => x_msg_data );
472
473 WHEN OTHERS THEN
477
474
475 ROLLBACK TO Delete_Row_Pvt;
476 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
478 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
479 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
480 l_api_name);
481 END if;
482
483 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
484 p_data => x_msg_data );
485
486 END Delete_Row;
487 /* ----------------------------------------------------------------------- */
488
489 /*==========================================================================+
490 | PROCEDURE Check_Unique |
491 +==========================================================================*/
492 PROCEDURE Check_Unique
493 (
494 p_api_version IN NUMBER,
495 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
496 p_commit IN VARCHAR2 := FND_API.G_FALSE,
497 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
498 x_return_status OUT NOCOPY VARCHAR2,
499 x_msg_count OUT NOCOPY NUMBER,
500 x_msg_data OUT NOCOPY VARCHAR2,
501 p_row_id IN OUT NOCOPY VARCHAR2,
502 p_org_id NUMBER,
503 p_return_value IN OUT NOCOPY VARCHAR2
504 )
505 IS
506
507 l_api_name CONSTANT VARCHAR2(30) := 'Check_Unique';
508 l_api_version CONSTANT NUMBER := 1.0;
509
510 l_tmp VARCHAR2(1);
511
512 CURSOR c IS
513 SELECT '1'
514 FROM igc_cc_system_options_all
515 WHERE org_id = p_org_id
516 AND (
517 p_row_id IS NULL
518 OR
519 rowid <> p_row_id
520 );
521
522 BEGIN
523
524 SAVEPOINT Check_Unique_Pvt ;
525
526 IF NOT FND_API.Compatible_API_Call ( l_api_version,
527 p_api_version,
528 l_api_name,
529 G_PKG_NAME )
530 THEN
531 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
532 END IF;
533
534
535 IF FND_API.to_Boolean ( p_init_msg_list ) THEN
536 FND_MSG_PUB.initialize ;
537 END IF;
538
539 x_return_status := FND_API.G_RET_STS_SUCCESS ;
540
541 -- Checking the igc_cc_number_methods table for uniqueness.
542 OPEN c;
543 FETCH c INTO l_tmp;
544
545 -- p_Return_Value specifies whether unique value exists or not.
546 IF l_tmp IS NULL THEN
547 p_Return_Value := 'FALSE';
548 ELSE
549 p_Return_Value := 'TRUE';
550 END IF;
551
552 CLOSE c;
553
554 IF FND_API.To_Boolean ( p_commit ) THEN
555 COMMIT WORK;
556 END iF;
557
558 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
559 p_data => x_msg_data );
560
561 EXCEPTION
562
563 WHEN FND_API.G_EXC_ERROR THEN
564
565 ROLLBACK TO Check_Unique_Pvt ;
566 x_return_status := FND_API.G_RET_STS_ERROR;
567 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
568 p_data => x_msg_data );
569
570 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
571
572 ROLLBACK TO Check_Unique_Pvt ;
573 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
574 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
575 p_data => x_msg_data );
576
577 WHEN OTHERS THEN
578
579 ROLLBACK TO Check_Unique_Pvt ;
580 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
581
582 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
583 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
584 l_api_name);
585 END if;
586
587 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
588 p_data => x_msg_data );
589
590 END Check_Unique;
591
592
593
594 /*==========================================================================+
595 | PROCEDURE Create_Auto_CC_Num |
596 +==========================================================================*/
597
598 PROCEDURE Create_Auto_CC_Num
599 (
600 p_api_version IN NUMBER,
601 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
602 p_commit IN VARCHAR2 := FND_API.G_FALSE,
603 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
604 x_return_status OUT NOCOPY VARCHAR2,
605 x_msg_count OUT NOCOPY NUMBER,
606 x_msg_data OUT NOCOPY VARCHAR2,
607 p_org_id IN igc_cc_headers.org_id%TYPE,
608 p_sob_id IN igc_cc_headers.set_of_books_id%TYPE,
609 x_cc_num OUT NOCOPY igc_cc_headers.cc_num%TYPE
610 ) IS
611 PRAGMA AUTONOMOUS_TRANSACTION; -- Added for bug 3329666
612
613 l_api_name CONSTANT VARCHAR2(30) := 'Create_Auto_CC_Num';
614 l_api_version CONSTANT NUMBER := 1.0;
615
616 -- mh: define variables
617 x_cc_prefix igc_cc_system_options_all.cc_prefix%TYPE;
618 x_cc_num_exists NUMBER;
619 x_po_num_exists NUMBER;
620 -- sb: x_cc_next_num should be a number
621 -- x_cc_next_num igc_cc_headers.cc_num%TYPE;
622 x_cc_next_num igc_cc_system_options_all.cc_next_num%TYPE;
623 -- sb: end
624
628 FROM igc_cc_system_options_all
625 -- mh: define cursor to get cc_prefix and cc_num from igc_cc_number_methods
626 CURSOR c_cc_num(l_org_id NUMBER) IS
627 SELECT cc_prefix, cc_next_num
629 WHERE org_id = l_org_id
630 FOR UPDATE NOWAIT; -- Added for bug 3329666
631
632 -- sb: define exceptions
633 e_no_number_setup EXCEPTION;
634 e_no_prefix_setup EXCEPTION;
635 -- sb: end
636
637 l_cbc_po_enable VARCHAR2(1);
638 e_row_locked EXCEPTION;
639 PRAGMA EXCEPTION_INIT (e_row_locked, -54);
640
641 BEGIN
642
643 -- SAVEPOINT Create_Auto_CC_Num_Pvt;
644
645 IF NOT FND_API.Compatible_API_Call ( l_api_version,
646 p_api_version,
647 l_api_name,
648 G_PKG_NAME )
649 THEN
650 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
651 END IF;
652
653
654 IF FND_API.to_Boolean ( p_init_msg_list ) THEN
655 FND_MSG_PUB.initialize;
656 END IF;
657
658 x_return_status := FND_API.G_RET_STS_SUCCESS;
659 -- sb: x_cc_num is not a number, so set to null not 0
660 -- x_cc_num := 0;
661 x_cc_num := '';
662 -- sb: end
663 x_cc_num_exists := 0;
664 x_po_num_exists := 0;
665
666 -- ---------------------------------------------------------------
667 -- mh start 1: get cc_prefix and cc_num from numbering table
668 -- loop
669 -- concatenate to get the new cc number
670 -- check if this number already exists in CC or PO
671 -- if yes increase cc_num by 1, check again
672 -- if no, update igc_cc_number_methods.cc_num to cc_num+1
673 -- end loop
674 -- return the new cc number
675 -- ---------------------------------------------------------------
676 BEGIN
677 OPEN c_cc_num(p_org_id);
678 FETCH c_cc_num INTO x_cc_prefix, x_cc_next_num;
679
680 IF (c_cc_num%NOTFOUND) THEN
681 CLOSE c_cc_num;
682 RAISE e_no_number_setup;
683 END IF;
684 EXCEPTION -- Added for bug 3329666
685 WHEN e_row_locked
686 THEN
687 fnd_message.set_name('IGC','IGC_CC_NUM_LOCK');
688 fnd_msg_pub.add;
689 IF( FND_LOG.TEST(FND_LOG.LEVEL_ERROR,
690 'IGC.PLSQL.Igc_Cc_Numbers_Pkg.Create_Auto_CC_Num.Lock1'))
691 THEN
692 if (l_error_level >= l_debug_level) then
693 FND_LOG.MESSAGE(l_error_level,
694 'IGC.PLSQL.Igc_Cc_Numbers_Pkg.Create_Auto_CC_Num.Lock1'
695 , FALSE);
696 end if;
697 END IF;
698 ROLLBACK;
699 fnd_msg_pub.count_and_get(p_count => x_msg_count,
700 p_data => x_msg_data);
701 RETURN;
702 END ;
703
704 -- sb: need to close the cursor
705 IF (c_cc_num%ISOPEN) THEN
706 CLOSE c_cc_num;
707 END IF;
708
709 /* Commented we are no longer using cc_prefix. But left it in
710 here just in case we change our minds again.
711 Bidisha S, 16 Sept 2002
712 -- sb: need to add check to ensure prefix exists
713 IF (x_cc_prefix is null) THEN
714 -- Bidisha S, raise the exception only if cbc po is enabled
715 SELECT Nvl(cbc_po_enable, 'N')
716 INTO l_cbc_po_enable
717 FROM igc_cc_bc_enable
718 WHERE set_of_books_id = p_sob_id;
719
720 IF l_cbc_po_enable = 'Y'
721 THEN
722 RAISE e_no_prefix_setup;
723 END IF;
724 END IF;
725 -- sb: end
726
727 */
728
729 -- keep looping until a number that is unique across both CC and
730 -- PO is generated
731
732 LOOP
733
734 -- create the cc number
735 -- also, need to do a to_char on x_cc_next_num
736
737 IF (x_cc_prefix IS NOT NULL) THEN
738 x_cc_num := x_cc_prefix||to_char(x_cc_next_num);
739 ELSE
740 x_cc_num := x_cc_next_num;
741 END IF;
742
743
744 -- validate number is unique across both CC and PO
745 SELECT count(*)
746 INTO x_cc_num_exists
747 FROM igc_cc_headers
748 WHERE cc_num = x_cc_num;
749
750 SELECT count(*)
751 INTO x_po_num_exists
752 FROM po_headers
753 WHERE segment1 = x_cc_num;
754
755 IF ((x_cc_num_exists > 0) OR (x_po_num_exists > 0)) THEN
756 -- sb: logic is wrong here. It should be
757 -- incrementing x_cc_next_num NOT x_cc_num
758
759 --x_cc_num := x_cc_num + 1;
760 x_cc_next_num := x_cc_next_num + 1;
761 -- sb: end
762
763 ELSE
764 -- ---------------------------------------------------------------
765 -- Update the numbering scheme first for the org_id given
766 -- ---------------------------------------------------------------
767 UPDATE igc_cc_system_options_all
768 SET cc_next_num = x_cc_next_num + 1
769 WHERE org_id = p_org_id;
770 -- ---------------------------------------------------------------
771 -- Make sure that ONLY one row has been updated.
772 -- ---------------------------------------------------------------
773 IF (SQL%ROWCOUNT <> 1) THEN
774
775 ROLLBACK;
776 -- sb: x_cc_num is not a number, so set to null not 0
777 --x_cc_num := 0;
778 x_cc_num := '';
779 -- sb: end
780
781 END IF;
782 -- exit from loop
783 EXIT;
787 -- ---------------------------------------------------------------
784 END IF;
785 END LOOP;
786
788 -- mh end 1
789 -- ---------------------------------------------------------------
790 -- ----------------------------------------------------------------
791 -- If the CC Number was generated successfully then commit if
792 -- the caller has indicated to do so.
793 -- ----------------------------------------------------------------
794
795 COMMIT;
796
797 RETURN;
798
799 EXCEPTION
800
801 -- sb: define the exceptions
802 WHEN e_no_number_setup THEN
803 x_return_status := FND_API.G_RET_STS_ERROR;
804 fnd_message.set_name('IGC','IGC_NO_NUMBERING_SETUP');
805 fnd_msg_pub.add;
806 fnd_msg_pub.count_and_get(p_count => x_msg_count,
807 p_data => x_msg_data);
808 ROLLBACK; -- Added for bug 3329666
809
810 WHEN e_no_prefix_setup THEN
811 x_return_status := FND_API.G_RET_STS_ERROR;
812 fnd_message.set_name('IGC','IGC_CC_PREFIX_REQD');
813 fnd_msg_pub.add;
814 fnd_msg_pub.count_and_get(p_count => x_msg_count,
815 p_data => x_msg_data);
816 -- sb: end
817 ROLLBACK; -- Added for bug 3329666
818
819 WHEN FND_API.G_EXC_ERROR THEN
820
821 x_return_status := FND_API.G_RET_STS_ERROR;
822 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
823 p_data => x_msg_data );
824 ROLLBACK; -- Added for bug 3329666
825
826 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
827
828 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
829 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
830 p_data => x_msg_data );
831
832 ROLLBACK; -- Added for bug 3329666
833
834 WHEN OTHERS THEN
835
836 ROLLBACK ;
837 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
838
839 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
840 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
841 l_api_name);
842 END if;
843
844 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
845 p_data => x_msg_data );
846
847 END Create_Auto_CC_Num;
848
849
850 /*==========================================================================+
851 | PROCEDURE Validate_Numeric_CC_Num |
852 +==========================================================================*/
853 PROCEDURE Validate_Numeric_CC_Num
854 (
855 p_api_version IN NUMBER,
856 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
857 p_commit IN VARCHAR2 := FND_API.G_FALSE,
858 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
859 x_return_status OUT NOCOPY VARCHAR2,
860 x_msg_count OUT NOCOPY NUMBER,
861 x_msg_data OUT NOCOPY VARCHAR2,
862 p_cc_num IN igc_cc_headers.cc_num%TYPE
863 )
864 IS
865
866 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Numeric_CC_Num';
867 l_api_version CONSTANT NUMBER := 1.0;
868 l_temp_num NUMBER;
869
870 BEGIN
871
872 SAVEPOINT Validate_Numeric_CC_Num_Pvt;
873
874 IF NOT FND_API.Compatible_API_Call ( l_api_version,
875 p_api_version,
876 l_api_name,
877 G_PKG_NAME )
878 THEN
879 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
880 END IF;
881
882 IF FND_API.to_Boolean ( p_init_msg_list ) THEN
883 FND_MSG_PUB.initialize;
884 END IF;
885
886 x_return_status := FND_API.G_RET_STS_SUCCESS;
887
888 -- --------------------------------------------------------------------
889 -- Create seperate block for exception to be caught seperately
890 -- --------------------------------------------------------------------
891 BEGIN
892 l_temp_num := TO_NUMBER (p_cc_num);
893
894 EXCEPTION
895
896 WHEN OTHERS THEN
897 x_return_status := FND_API.G_RET_STS_ERROR;
898 END;
899
900 IF FND_API.To_Boolean ( p_commit ) THEN
901 COMMIT WORK;
902 END IF;
903
904 RETURN;
905
906 EXCEPTION
907 WHEN OTHERS THEN
908 ROLLBACK TO Validate_Numeric_CC_Num_Pvt;
909 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
910
911 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
912 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
913 l_api_name);
914 END if;
915
916 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
917 p_data => x_msg_data );
918
919 END Validate_Numeric_CC_Num;
920 /* ----------------------------------------------------------------------- */
921
922 END IGC_CC_SYSTEM_OPTIONS_PKG;