DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMS_POR_API

Source


1 PACKAGE BODY GMS_POR_API  as
2 --$Header: gmspor1b.pls 120.4 2011/08/29 09:53:39 mokukuma ship $
3 
4 	--Added debug messages for the bug 12901042
5 	 --Global Variables initialized in GMS_POR_API2:
6 
7 	g_debug                  Varchar2(1); -- To check on, whether to print debug messages in log file or not
8 	g_error_procedure_name   Varchar2 (30);
9 	--End for the bug 12901042
10 
11 	-- =============================================================
12 	-- Following API returns award number based on the award_id,
13 	-- award set id or req_distribution_id.
14 	-- This is used to display award number in Billing Region.
15 	-- =============================================================
16 	FUNCTION get_award_number ( X_award_set_id  		IN NUMBER,
17 				    X_award_id			IN NUMBER,
18 				    X_req_distribution_id 	IN NUMBER)
19 	return VARCHAR2 IS
20 
21 	cursor c_award_number is
22 		select award_number
23 		  from gms_awards_all
24 		 where award_id = X_award_id ;
25 
26 	cursor c_adl_award is
27 		select a.award_number
28 		  from gms_awards_all a,
29 		       gms_award_distributions adl
30 		 where adl.award_set_id	= X_award_set_id
31 		   and adl_status	= 'A'
32 		   and adl_line_num	= 1
33 		   and adl.award_id	= a.award_id ;
34 
35 	cursor c_req_award is
36 		select a.award_number
37 		  from gms_awards_all a,
38 		       gms_award_distributions adl ,
39 		       po_req_distributions_all req
40 		 where adl.award_set_id	= req.award_id
41 		   and req.distribution_id = X_req_distribution_id
42 		   and adl_status	= 'A'
43 		   and adl_line_num	= 1
44 		   and adl.award_id	= a.award_id ;
45 
46        CURSOR  c_check_award IS
47                SELECT default_dist_award_number
48                FROM   gms_implementations
49                WHERE  enabled ='Y'
50 		 and award_distribution_option = 'Y'
51                  and default_dist_award_id = X_award_id ;
52 
53 	l_award_number	varchar2(15) ;
54 	BEGIN
55 
56 	 g_error_procedure_name := 'get_award_number';
57 
58 	--Added debug messages for the bug 12901042
59 	 IF g_debug = 'Y' THEN
60                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.get_award_number','C');
61 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
62 	 END IF;
63 
64 	--End for the bug 12901042
65 		-- ==============================================================
66 		-- Do not proceed if grants is not enabled for an implementation
67 		-- Org.
68 		-- ==============================================================
69 		IF not gms_install.enabled then
70 			return l_award_number;
71 		END IF ;
72 
73 	--Added debug messages for the bug 12901042
74 	 IF g_debug = 'Y' THEN
75 		gms_error_pkg.gms_debug (g_error_procedure_name||' Finding Award_number based on award_id','C');
76 	 END IF;
77 	--End for the bug 12901042
78 
79 		IF X_award_id is not NULL  THEN
80 
81 			open c_award_number ;
82 			fetch c_award_number into l_award_number ;
83 
84 			IF c_award_number%NOTFOUND THEN
85 
86 				open c_check_award ;
87 				fetch c_check_award into l_award_number ;
88 
89 				IF c_check_award%NOTFOUND THEN
90 					close c_check_award ;
91 					raise no_data_found ;
92 				END IF ;
93 
94 				CLOSE c_check_award ;
95 			END IF ;
96 			close c_award_number ;
97 
98 		ELSIF X_award_set_id is not NULL THEN
99 
100 			open c_adl_award ;
101 			fetch c_adl_award into l_award_number ;
102 
103 			IF c_adl_award%NOTFOUND THEN
104 				close c_adl_award ;
105 				raise no_data_found ;
106 			END IF ;
107 			close c_adl_award ;
108 
109 		ELSIF X_req_distribution_id is not NULL  THEN
110 
111 			open c_req_award ;
112 			fetch c_req_award into l_award_number ;
113 
114 			IF c_req_award%NOTFOUND THEN
115 				close c_req_award ;
116 				raise no_data_found ;
117 			END IF ;
118 			close c_req_award ;
119 
120 		END IF ;
121 
122 	 IF g_debug = 'Y' THEN
123                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
124 	 END IF;
125 
126 		return(l_award_number) ;
127 	END get_award_number ;
128 
129 	-- =============================================================
130 	-- Following API returns award ID based on the award_number,
131 	-- award set id or req_distribution_id.
132 	-- This is used to determine award_id .
133 	-- =============================================================
134 
135 	FUNCTION get_award_ID ( X_award_set_id  	IN NUMBER,
136 			    	X_award_number		IN VARCHAR2,
137 			    	X_req_distribution_id 	IN NUMBER)
138 	return NUMBER IS
139 
140 	cursor c_award_id is
141 		select award_id
142 		  from gms_awards_all
143 		 where award_number = X_award_number ;
144 
145 	cursor c_adl_award is
146 		select adl.award_id
147 		  from gms_award_distributions adl
148 		 where adl.award_set_id	= X_award_set_id
149 		   and adl_status	= 'A'
150 		   and adl_line_num	= 1 ;
151 
152 	cursor c_req_award is
153 		select adl.award_id
154 		  from gms_award_distributions adl ,
155 		       po_req_distributions_all req
156 		 where adl.award_set_id	= req.award_id
157 		   and req.distribution_id = X_req_distribution_id
158 		   and adl_status	= 'A'
159 		   and adl.adl_line_num	= 1 ;
160 
161        CURSOR  c_check_award IS
162                SELECT default_dist_award_id
163                FROM   gms_implementations
164                WHERE  enabled ='Y'
165 		 and award_distribution_option = 'Y'
166                  and default_dist_award_number = X_award_number ;
167 
168 	l_award_id number ;
169 	begin
170 
171 	 g_error_procedure_name := 'get_award_ID';
172 
173 	--Added debug messages for the bug 12901042
174 	 IF g_debug = 'Y' THEN
175                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.get_award_ID','C');
176 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
177 	 END IF;
178 	--End for the bug 12901042
179 
180 		-- ==============================================================
181 		-- Do not proceed if grants is not enabled for an implementation
182 		-- Org.
183 		-- ==============================================================
184 		IF not gms_install.enabled then
185 			return l_award_id;
186 		END IF ;
187 
188 	--Added debug messages for the bug 12901042
189 	 IF g_debug = 'Y' THEN
190 		gms_error_pkg.gms_debug (g_error_procedure_name||' Finding award_id based on Award_number','C');
191 	 END IF;
192 	--End for the bug 12901042
193 
194 		IF X_award_number is not NULL  THEN
195 
196 			open c_award_id ;
197 			fetch c_award_id into l_award_id ;
198 
199 			IF c_award_id%NOTFOUND THEN
200 				-- Check is default award is entered.
201 				-- return default award id in this case.
202 				-- BUG identified by IP.
203 				-- ---------------------------------------
204 				open c_check_award ;
205 				fetch c_check_award into l_award_id ;
206 
207 				IF c_check_award%NOTFOUND THEN
208 					close c_check_award ;
209 					raise no_data_found ;
210 				END IF ;
211 
212 				CLOSE c_check_award ;
213 
214 			END IF ;
215 			close c_award_id ;
216 
217 		ELSIF X_award_set_id is not NULL  THEN
218 
219 			open c_adl_award ;
220 			fetch c_adl_award into l_award_id ;
221 
222 			IF c_adl_award%NOTFOUND THEN
223 				close c_adl_award ;
224 				raise no_data_found ;
225 			END IF ;
226 			close c_adl_award ;
227 
228 		ELSIF X_req_distribution_id is not NULL THEN
229 
230 			open c_req_award ;
231 			fetch c_req_award into l_award_id ;
232 
233 			IF c_req_award%NOTFOUND THEN
234 				close c_req_award ;
235 				raise no_data_found ;
236 			END IF ;
237 			close c_req_award ;
238 
239 		END IF ;
240 
241 	 IF g_debug = 'Y' THEN
242                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
243 	 END IF;
244 
245 		return (l_award_id) ;
246 	end get_award_ID ;
247 
248 	-- ===================================================================
249 	-- Following program unit is used to determine sponsored project.
250 	-- ===================================================================
251 	FUNCTION  IS_SPONSORED_PROJECT( x_project_id in NUMBER ) return BOOLEAN
252 	is
253 		cursor C_spon_project is
254 			select pt.sponsored_flag
255 			  from pa_projects_all b,
256 			       gms_project_types pt
257 			 where b.project_id 	= X_project_id
258 			   and b.project_type	= pt.project_type
259 			   and pt.sponsored_flag = 'Y' ;
260 
261 		x_return  BOOLEAN ;
262 		x_flag	  varchar2(1) ;
263 	BEGIN
264 
265 	 g_error_procedure_name := 'IS_SPONSORED_PROJECT';
266 
267 	--Added debug messages for the bug 12901042
268 	 IF g_debug = 'Y' THEN
269                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.IS_SPONSORED_PROJECT','C');
270 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
271 	 END IF;
272 	--End for the bug 12901042
273 
274 		x_return := FALSE ;
275 
276 		open C_spon_project ;
277 		fetch C_spon_project into x_flag ;
278 		close C_spon_project ;
279 
280 		IF nvl(x_flag, 'N') = 'Y' THEN
281 		   x_return := TRUE ;
282 		END IF ;
283 
284 	 IF g_debug = 'Y' THEN
285                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
286 	 END IF;
287 
288 		return x_return ;
289 
290 	END IS_SPONSORED_PROJECT ;
291 
292 	-- =========================================================
293 	-- Validate award does the standard grants validations
294 	-- program unit make sure that award is entered for
295 	-- sponsored projects and expenditure item date
296 	-- validations are done.
297 	-- Grants common routine for standard validations is
298 	-- called here.
299 	-- =========================================================
300 	PROCEDURE validate_award ( X_project_id		IN NUMBER,
301 				   X_task_id		IN NUMBER,
302 				   X_award_id		IN NUMBER,
303 				   X_award_number	IN VARCHAR2,
304 				   X_expenditure_type	IN VARCHAR2,
305 				   X_expenditure_item_date IN DATE,
306 				   X_calling_module	IN VARCHAR2,
307                                    X_source_type_code   IN VARCHAR2,--Bug-2557041
308 				   X_status		IN OUT NOCOPY VARCHAR2,
309 				   X_err_msg		OUT NOCOPY VARCHAR2 ) is
310 
311 	l_project_type_class_code 	varchar2(30);
312 	l_row_found		 	varchar2(1);
313 	l_award_id			NUMBER ;
314 	l_dummy				NUMBER ;
315 	l_award_dist_option		varchar2(1) ;
316 	l_award_number			varchar2(15) ;
317 	l_status			varchar2(1) ;
318 
319        CURSOR  c_check_award IS
320                SELECT default_dist_award_id,
321 		      award_distribution_option,
322 		      default_dist_award_number
323                FROM   gms_implementations
324                WHERE  enabled ='Y' ;
325 
326 	cursor valid_award_csr is
327 	select 	'Y'
328 	from 	dual
329 	where exists
330 		(select 1
331 		from gms_awards
332 		where award_number = X_award_number
333 		and   nvl(award_id,0) = nvl(l_award_id,0));
334         --Bug 2579915
335         Cursor  valid_project_type_class is
336                 select project_type_class_code
337                 from pa_project_types a,
338                      pa_projects_all b
339                 where a.project_type = b.project_type
340                 and   b.project_id = X_project_id;
341 
342 
343 	BEGIN
344 
345 	 g_error_procedure_name := 'validate_award';
346 
347 	--Added debug messages for the bug 12901042
348 	 IF g_debug = 'Y' THEN
349                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.validate_award','C');
350 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
351 	 END IF;
352 	--End for the bug 12901042
353 
354 		l_status := X_status ;
355 		-- ==============================================================
356 		-- Do not proceed if grants is not enabled for an implementation
357 		-- Org.
358 		-- ==============================================================
359 		IF not gms_install.enabled then
360 			return ;
361 		END IF ;
362 
363 		open c_check_award ;
364 		fetch c_check_award into l_dummy ,
365 		      l_award_dist_option , l_award_number ;
366 		close c_check_award ;
367 
368 		IF NVL(l_award_number, '-X')    = x_award_number and
369 		   NVL(l_award_dist_option,'N') = 'Y' then
370 		   RETURN ;
371 		END IF ;
372 
373 
374 		-- We don't need to continue .
375 		-- entered award is dummy award.
376 		--IF X_award_id < 0 and THEN
377 		 --  RETURN ;
378 		--end if ;
379 
380 
381 		-- ============================================
382 		-- No need to proceed if project/award details
383 		-- are null.
384 		-- ============================================
385 		IF x_project_id	is NULL AND
386 		   x_award_id	is NULL AND
387 		   x_award_number is NULL THEN
388 
389 		   return ;
390 		END IF ;
391 
392 
393 		-- =======================================================
394 		-- List of validations done here
395 		-- 1. Check for contract project. contract project shouldn't
396 		--    entered if grants is enabled.
397 		-- 2. Nonsponsored project having award should fail.
398 		-- 3. Invalid award should stop here.
399 		-- 4. Populate award id if required.
400 		--    Award id passed null and award_number is not null.
401 		-- 5. Sponsored project missing award should error out.
402 		-- 6. Check expenditure type belongs to allowable exp's.
403 		-- 7. Call gms standard validations defined in
404 		--    gms_transaction_pub.
405 		-- ================================================================
406 
407 		l_award_id := X_award_id ;
408 
409 		-- 1. Check for contract project. contract project shouldn't
410 		--    entered if grants is enabled.
411 
412 		IF X_project_id is not NULL THEN
413                     OPEN  valid_project_type_class;
414                     FETCH valid_project_type_class INTO l_project_type_class_code;
415                     CLOSE valid_project_type_class;
416 		END IF ;
417 
418 		if l_project_type_class_code = 'CONTRACT' then
419 
420 			fnd_message.set_name('GMS','GMS_IP_INVALID_PROJ_TYPE');
421 
422 			l_status :=  'E';
423 			X_err_msg :=  fnd_message.get;
424 			X_status :=  'E';
425 
426 			return;
427 		end if;
428 
429 		IF is_sponsored_project (X_project_id) THEN
430 
431                    --==============================================================
432                    -- Bug-2557041
433                    -- Do not proceed if grants is  enabled and Requisition type is
434                    -- internal
435                    --==============================================================
436                    -- 4555829 support internal requisitions.
437 
438                    IF nvl(x_source_type_code,'INVENTORY') = 'INVENTORY'  and
439                       gms_client_extn_po.allow_internal_req = 'N' THEN
440 			fnd_message.set_name('GMS','GMS_IP_INVALID_REQ_TYPE');
441 			l_status :=  'E';
442 			X_err_msg :=  fnd_message.get;
443 			x_status :=  'E';
444 			return;
445                    END IF;
446 
447 		   -- 5. Sponsored project missing award should error out.
448 		   IF X_award_number is NULL then
449 			fnd_message.set_name('GMS','GMS_AWARD_REQUIRED');
450 			X_err_msg :=  fnd_message.get;
451 			l_status :=  'E';
452 			x_status :=  'E';
453 			return;
454 		   END IF ;
455 
456 		ELSE
457 
458 		   -- 2. Nonsponsored project having award should fail.
459 		   IF X_award_number is NOT NULL then
460 			fnd_message.set_name('GMS','GMS_AWARD_NOT_ALLOWED');
461 			X_err_msg :=  fnd_message.get;
462 			X_status :=  'E';
463 			L_status :=  'E';
464 			return;
465                    ELSE --Added to fix bug 2579915
466                        return;
467 		   END IF ;
468 
469 		END IF ;
470 
471 
472 		-- 3. Populate award id if required.
473 		--    Award id passed null and award_number is not null.
474 
475 		l_award_id 	:= X_award_id ;
476 
477 		if X_award_id is NULL and
478 		   X_award_number is not NULL then
479 		   -- ===============================================================
480 		   -- BUG : 2714080 ( FPISTIP: IP57: ERROR MESSAGE IS NOT PROPER )
481 		   -- ===============================================================
482 
483 		   BEGIN
484 			select 	award_id
485 			into	l_award_id
486 			from 	gms_awards
487 			where 	award_number = X_award_number;
488 		   EXCEPTION
489 			When no_data_found then
490 				l_award_id := 0 ;
491 
492 		   END ;
493 
494 
495 		end if;
496 
497 		-- 4. Invalid award should stop here.
498 
499 		open valid_award_csr;
500 		fetch valid_award_csr into l_row_found;
501 		close valid_award_csr;
502 
503 		if NVL(l_row_found,'N') <> 'Y' then
504 
505 			fnd_message.set_name('GMS','GMS_INVALID_AWARD');
506 
507 			X_err_msg :=  fnd_message.get;
508 			X_status :=  'E';
509 			L_status :=  'E';
510 
511 			return;
512 
513 		end if;
514 
515 		-- 7. Call gms standard validations defined in
516 		--    gms_transaction_pub.
517 
518 	--Added debug messages for the bug 12901042
519 	 IF g_debug = 'Y' THEN
520 		gms_error_pkg.gms_debug (g_error_procedure_name||' Before calling gms_transactions_pub.validate_transaction','C');
521 	 END IF;
522 	--End for the bug 12901042
523 
524 		gms_transactions_pub.validate_transaction(p_project_id => X_project_id,
525 							  p_task_id => X_task_id,
526 							  p_award_id => l_award_id,
527 							  p_expenditure_type => X_expenditure_type,
528 							  p_expenditure_item_date => X_expenditure_item_date,
529 							  p_calling_module => 'GMS-IP',
530 							  p_outcome => X_err_msg );
531 
532 	--Added debug messages for the bug 12901042
533 	 IF g_debug = 'Y' THEN
534                 gms_error_pkg.gms_debug (g_error_procedure_name||' After calling gms_transactions_pub.validate_transaction','C');
535 	 END IF;
536 	--End for the bug 12901042
537 
538 		if X_err_msg is NOT NULL then
539 
540 			X_status := 'E';
541 			L_status := 'E';
542 
543 		end if;
544 
545 		x_status := l_status ;
546 
547 	 IF g_debug = 'Y' THEN
548                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
549 	 END IF;
550 		return ;
551 
552 	END validate_award ;
553         --BUG 3295360  add Procedure to provide  backward compatibility through overloading
554 	PROCEDURE validate_award ( X_project_id		IN NUMBER,
555 				   X_task_id		IN NUMBER,
556 				   X_award_id		IN NUMBER,
557 				   X_award_number	IN VARCHAR2,
558 				   X_expenditure_type	IN VARCHAR2,
559 				   X_expenditure_item_date IN DATE,
560 				   X_calling_module	IN VARCHAR2,
561 				   X_status		IN OUT NOCOPY VARCHAR2,
562        				   X_err_msg		OUT NOCOPY VARCHAR2 ) IS
563         BEGIN
564 	       gms_por_api.validate_award( X_project_id            => x_project_id,
565                   X_task_id               => x_task_id,
566                   X_award_id              => x_award_id,
567                   X_award_number          => x_award_number,
568                   X_expenditure_type      => X_expenditure_type,
569                   X_expenditure_item_date => X_expenditure_item_date,
570                   X_calling_module        => x_calling_module,
571                   X_source_type_code      => 'GMS-IP',
572                   X_status                => X_status,
573                   X_err_msg               => X_err_msg );
574         END Validate_award ;
575 
576 	-- ==============================================================
577 	-- ADL must be present for account generator. Event based
578 	-- processing is done to create or remove adls.
579 	-- ==============================================================
580 
581 	PROCEDURE account_generator_ADL ( X_project_id		IN NUMBER,
582 					  X_task_id		IN NUMBER,
583 					  X_award_id		IN NUMBER,
584 					  X_event		IN VARCHAR2,
585 					  X_award_set_id	IN OUT NOCOPY NUMBER,
586 					  X_status		IN OUT NOCOPY varchar2 ) is
587 
588 		x_adl_rec    		gms_award_distributions%ROWTYPE;
589 		l_sponsored_flag	varchar2(1) ;
590 		l_award_set_id		number ;
591 		l_status		varchar2(1) ;
592 
593 		cursor C_spon_project is
594 			select pt.sponsored_flag
595 			  from pa_projects_all b,
596 			       gms_project_types pt
597 			 where b.project_id 	= X_project_id
598 			   and b.project_type	= pt.project_type
599 			   and pt.sponsored_flag = 'Y' ;
600 
601 	BEGIN
602 
603 	 g_error_procedure_name := 'account_generator_ADL';
604 
605 	--Added debug messages for the bug 12901042
606 	 IF g_debug = 'Y' THEN
607                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.account_generator_ADL','C');
608 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
609 	 END IF;
610 	--End for the bug 12901042
611 
612 		l_status	:= X_status ;
613 		l_award_set_id  := X_award_set_id ;
614 
615 		--db_pack_message('Account Gen :'||X_event||' asid :'||NVL(X_award_set_id,0)) ;
616 		-- ==============================================================
617 		-- Do not proceed if grants is not enabled for an implementation
618 		-- Org.
619 		-- ==============================================================
620 
621 		IF not gms_install.enabled then
622 			return ;
623 		END IF ;
624 
625 		IF X_event = 'REMOVE' THEN
626 
627 			delete from gms_award_distributions
628 			 where award_set_id	= X_award_set_id ;
629 
630 			RETURN ;
631 		END IF ;
632 
633 		IF NVL(X_event,'NULL')  <> 'CREATE' THEN
634 			return ;
635 		END IF ;
636 
637 		open C_spon_project ;
638 		fetch C_spon_project into l_sponsored_flag ;
639 		close C_spon_project ;
640 
641 		IF NVL(l_sponsored_flag,'N') <> 'Y' THEN
642 		   return ;
643 		END IF ;
644 
645 		x_adl_rec.expenditure_item_id	 := NULL ;
646 		x_adl_rec.project_id 		 := X_project_id;
647 		x_adl_rec.task_id   		 := X_task_id;
648 		x_adl_rec.cost_distributed_flag	 := 'N';
649 		x_adl_rec.cdl_line_num           := NULL;
650 		x_adl_rec.adl_line_num           := 1;
651 		x_adl_rec.distribution_value     := 100 ;
652 		x_adl_rec.line_type              := 'R';
653 		x_adl_rec.adl_status             := 'A';
654 		x_adl_rec.document_type          := 'REQ';
655 		x_adl_rec.billed_flag            := 'N';
656 		x_adl_rec.bill_hold_flag         := NULL ;
657 		x_adl_rec.award_set_id           := gms_awards_dist_pkg.get_award_set_id;
658 		x_adl_rec.award_id               := X_award_id;
659 		x_adl_rec.raw_cost		 := 0;
660 		x_adl_rec.last_update_date    	 := SYSDATE;
661 		x_adl_rec.creation_date      	 := SYSDATE;
662 		x_adl_rec.last_updated_by     	 := 0;
663 		x_adl_rec.created_by         	 := 0;
664 		x_adl_rec.last_update_login   	 := 0;
665 
666 		gms_awards_dist_pkg.create_adls(X_adl_rec);
667 
668 		X_award_set_id 			 := x_adl_rec.award_set_id ;
669 		l_award_set_id 			 := x_adl_rec.award_set_id ;
670 		--db_pack_message('Account Gen : awsid '||X_event||' asid :'||NVL(X_award_set_id,0)) ;
671 
672 	 IF g_debug = 'Y' THEN
673                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
674 	 END IF;
675 
676 	EXCEPTION
677 		When others then
678 
679 	--Added debug messages for the bug 12901042
680 		IF g_debug = 'Y' THEN
681 	            gms_error_pkg.gms_debug ('In When OTHERS Exception of account_generator_ADL'|| ' SQLCODE:'|| SQLCODE|| ' SQLERRM:'|| SQLERRM,'C');
682 		END IF;
683 	--End for the bug 12901042
684 
685 			X_status	:= SQLCODE ;
686 			raise ;
687 	END account_generator_ADL ;
688 
689         -- Start
690 	-- 3068454 ( CHANGE REQUIRED IN GMS_POR_API.WHEN_UPDATE/INSERT_LINE TO WORK
691 	-- WITH OA GUIDELINE )
692 	--
693         PROCEDURE get_req_dist_AwardSetID ( X_distribution_id   IN NUMBER,
694 					    X_award_set_id      OUT NOCOPY NUMBER,
695 					    X_status            IN OUT NOCOPY varchar2 ) is
696 		l_award_set_id	NUMBER ;
697 
698 		Cursor c_award_set_id is
699 		select award_id
700 		  from po_req_distributions_all
701 		 where distribution_id	= X_distribution_id ;
702 
703         BEGIN
704 
705 	 g_error_procedure_name := 'get_req_dist_AwardSetID';
706 
707 	--Added debug messages for the bug 12901042
708 	 IF g_debug = 'Y' THEN
709                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.get_req_dist_AwardSetID','C');
710 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
711 	 END IF;
712 	--End for the bug 12901042
713 
714 		-- ==============================================================
715 		-- Do not proceed if grants is not enabled for an implementation
716 		-- Org.
717 		-- ==============================================================
718 		IF not gms_install.enabled then
719 		   return ;
720 		END IF ;
721 
722 		open c_award_set_id ;
723 		fetch c_award_set_id into l_award_set_id ;
724 		close c_award_set_id ;
725 
726 		X_award_set_id := l_award_set_id ;
727 		X_status       := 'S' ;
728 
729 	 IF g_debug = 'Y' THEN
730                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
731 	 END IF;
732 
733 	EXCEPTION
734 	   When Others THEN
735 
736 	--Added debug messages for the bug 12901042
737 		IF g_debug = 'Y' THEN
738 	            gms_error_pkg.gms_debug ('In When OTHERS Exception of get_req_dist_AwardSetID'|| ' SQLCODE:'|| SQLCODE|| ' SQLERRM:'|| SQLERRM,'C');
739 		END IF;
740 	--End for the bug 12901042
741 
742 		X_status := SQLCODE ;
743 		RAISE ;
744 	END get_req_dist_AwardSetID;
745         --
746 	-- 3068454 ( CHANGE REQUIRED IN GMS_POR_API.WHEN_UPDATE/INSERT_LINE TO WORK
747 	-- WITH OA GUIDELINE )
748 	-- END.
749 
750 	-- =============================================================
751 	-- Create award distribution lines when REQ DISTRIBUTION LINE
752 	-- is created for a sponsored projects. This also tieback
753 	-- ADL with REQ.
754 	-- =============================================================
755 	PROCEDURE when_insert_line (	X_distribution_id	IN NUMBER,
756 					X_project_id		IN NUMBER,
757 				   	X_task_id		IN NUMBER,
758 				   	X_award_id		IN NUMBER,
759 				   	X_expenditure_type	IN VARCHAR2,
760 				   	X_expenditure_item_date IN DATE,
761 					--X_raw_cost		IN NUMBER,
762 					X_award_set_id		OUT NOCOPY NUMBER,
763 					X_status		IN OUT NOCOPY varchar2 ) is
764 
765 		x_adl_rec    gms_award_distributions%ROWTYPE;
766 	BEGIN
767 
768 	 g_error_procedure_name := 'when_insert_line';
769 
770 	--Added debug messages for the bug 12901042
771 	 IF g_debug = 'Y' THEN
772                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.when_insert_line','C');
773 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
774 	 END IF;
775 	--End for the bug 12901042
776 
777 		-- ==============================================================
778 		-- Do not proceed if grants is not enabled for an implementation
779 		-- Org.
780 		-- ==============================================================
781 		IF not gms_install.enabled then
782 			return ;
783 		END IF ;
784 
785 		IF NOT IS_SPONSORED_PROJECT( X_project_id ) THEN
786 			return ;
787 		END IF ;
788 
789 		x_adl_rec.expenditure_item_id	 := NULL ;
790 		x_adl_rec.project_id 		 := X_project_id;
791 		x_adl_rec.task_id   		 := X_task_id;
792 		x_adl_rec.cost_distributed_flag	 := 'N';
793 		x_adl_rec.cdl_line_num           := NULL;
794 		x_adl_rec.adl_line_num           := 1;
795 		x_adl_rec.distribution_value     := 100 ;
796 		x_adl_rec.line_type              := 'R';
797 		x_adl_rec.adl_status             := 'A';
798 		x_adl_rec.document_type          := 'REQ';
799 		x_adl_rec.billed_flag            := 'N';
800 		x_adl_rec.bill_hold_flag         := NULL ;
801 		x_adl_rec.award_set_id           := gms_awards_dist_pkg.get_award_set_id;
802 		x_adl_rec.award_id               := X_award_id;
803 		x_adl_rec.raw_cost		 := NULL;
804 		x_adl_rec.last_update_date    	 := SYSDATE;
805 		x_adl_rec.creation_date      	 := SYSDATE;
806 		x_adl_rec.last_updated_by     	 := 0;
807 		x_adl_rec.created_by         	 := 0;
808 		x_adl_rec.last_update_login   	 := 0;
809 		X_adl_rec.distribution_id	 := X_distribution_id ;
810 		--db_pack_message('When Insert Line Test :'||X_distribution_id) ;
811 
812 	--Added debug messages for the bug 12901042
813 	 IF g_debug = 'Y' THEN
814 		gms_error_pkg.gms_debug (g_error_procedure_name||' Calling gms_awards_dist_pkg.create_adls','C');
815 	 END IF;
816 	--End for the bug 12901042
817 
818 		gms_awards_dist_pkg.create_adls(X_adl_rec);
819 
820 	--Added debug messages for the bug 12901042
821 	 IF g_debug = 'Y' THEN
822 		gms_error_pkg.gms_debug (g_error_procedure_name||' Updating PO_REQ_DISTRIBUTIONS_ALL table','C');
823 	 END IF;
824 	--End for the bug 12901042
825 
826 		UPDATE PO_REQ_DISTRIBUTIONS_ALL
827 		   SET award_id  = x_adl_rec.award_set_id
828 		 where distribution_id	= X_distribution_id ;
829 
830                 x_award_set_id := x_adl_rec.award_set_id ;
831 
832 	 IF g_debug = 'Y' THEN
833                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
834 	 END IF;
835 
836 		return ;
837 	END when_insert_line ;
838 
839         --  Start...
840 	-- 3068454 ( CHANGE REQUIRED IN GMS_POR_API.WHEN_UPDATE/INSERT_LINE TO WORK
841 	-- WITH OA GUIDELINE )
842 	--
843 	-- When_update_line overloading
844 	-- x_award_set_id was added.
845 	--
846 	PROCEDURE when_update_line (	X_distribution_id	IN NUMBER,
847 					X_project_id		IN NUMBER,
848 				   	X_task_id		IN NUMBER,
849 				   	X_award_id		IN NUMBER,
850 				   	X_expenditure_type	IN VARCHAR2,
851 				   	X_expenditure_item_date IN DATE,
852 					X_award_set_id          OUT NOCOPY NUMBER,
853 					X_status		IN OUT NOCOPY varchar2 ) is
854 	   l_award_set_id NUMBER ;
855 
856 	   Cursor c_award_set_id is
857 	    select award_id
858 	      from po_req_distributions_all
859 	     where distribution_id	= X_distribution_id ;
860 
861         BEGIN
862 
863 	--Added debug messages for the bug 12901042
864 		IF g_debug = 'Y' THEN
865 	            gms_error_pkg.gms_debug ('Inside parent GMS_POR_API.when_update_line','C');
866 		END IF;
867 	--End for the bug 12901042
868 
869 	     when_update_line ( X_distribution_id,
870 				X_project_id,
871 				X_task_id,
872 				X_award_id,
873 				X_expenditure_type,
874 				X_expenditure_item_date,
875 				X_status ) ;
876 
877 		open c_award_set_id ;
878 		fetch c_award_set_id into l_award_set_id ;
879 		close c_award_set_id ;
880 
881 		X_award_set_id := l_award_set_id ;
882 
883 	EXCEPTION
884 		WHEN OTHERS THEN
885 
886 	--Added debug messages for the bug 12901042
887 		IF g_debug = 'Y' THEN
888 	            gms_error_pkg.gms_debug ('In When OTHERS Exception of parent when_update_line'|| ' SQLCODE:'|| SQLCODE|| ' SQLERRM:'|| SQLERRM,'C');
889 		END IF;
890 	--End for the bug 12901042
891 
892 			X_status := SQLCODE ;
893 			RAISE ;
894 	END when_update_line ;
895 
896         --
897 	-- 3068454 ( CHANGE REQUIRED IN GMS_POR_API.WHEN_UPDATE/INSERT_LINE TO WORK
898 	-- WITH OA GUIDELINE )
899 	-- END.............
900 
901 	-- ================================================================
902 	-- following program unit control DML operations or Poject/task
903 	-- and award. ADLS are updated for change in project/task or award.
904 	-- Adls are also removed for project changed from sponsored to
905 	-- non sponsored.
906 	-- ================================================================
907 
908 	PROCEDURE when_update_line (	X_distribution_id	IN NUMBER,
909 					X_project_id		IN NUMBER,
910 				   	X_task_id		IN NUMBER,
911 				   	X_award_id		IN NUMBER,
912 				   	X_expenditure_type	IN VARCHAR2,
913 				   	X_expenditure_item_date IN DATE,
914 					--X_raw_cost		IN NUMBER,
915 					X_status		IN OUT NOCOPY varchar2 ) is
916 
917 		x_award_set_id	NUMBER ;
918 
919 		Cursor c_award_set_id is
920 			select award_id
921 			  from po_req_distributions_all
922 			 where distribution_id	= X_distribution_id ;
923 
924 	BEGIN
925 
926 	--Added debug messages for the bug 12901042
927 		IF g_debug = 'Y' THEN
928 	            gms_error_pkg.gms_debug ('Inside GMS_POR_API.when_update_line','C');
929 		END IF;
930 	--End for the bug 12901042
931 
932 		-- ==============================================================
933 		-- Do not proceed if grants is not enabled for an implementation
934 		-- Org.
935 		-- ==============================================================
936 		IF not gms_install.enabled then
937 			return ;
938 		END IF ;
939 
940 		open c_award_set_id ;
941 		fetch c_award_set_id into x_award_set_id ;
942 		close c_award_set_id ;
943 
944 		--db_pack_message('When Update Line :'||NVL(X_award_set_id,0)) ;
945 
946 		IF NVL(x_award_set_id, 0) = 0 THEN
947 	   		when_insert_line (	X_distribution_id,
948 						X_project_id		,
949 				   		X_task_id		,
950 				   		X_award_id		,
951 				   		X_expenditure_type	,
952 				   		X_expenditure_item_date ,
953 						--X_raw_cost		,
954 						X_award_set_id		,
955 						X_status		) ;
956 			RETURN ;
957 
958 		ELSE
959 			IF NOT IS_SPONSORED_PROJECT( X_project_id ) THEN
960 
961 				delete from gms_award_distributions
962 				 where award_set_id = x_award_set_id
963 				   and adl_status   = 'A' ;
964 
965 				UPDATE PO_REQ_DISTRIBUTIONS_ALL
966 				   SET award_id  = NULL
967 				 where distribution_id	= X_distribution_id ;
968 
969 				RETURN ;
970 			END IF ;
971 
972 			update gms_award_distributions
973 			   set project_id	= X_project_id,
974 			       task_id		= X_task_id,
975 			       award_id		= X_award_id
976 			 where award_set_id = x_award_set_id
977 			   and adl_line_num = 1
978 			   and document_type= 'REQ'
979 			   and adl_status   = 'A' ;
980 
981 			IF SQL%NOTFOUND THEN
982 				raise no_data_found ;
983 			END IF ;
984 
985 
986 		END IF ;
987 		return ;
988 	EXCEPTION
989 		WHEN OTHERS THEN
990 
991 	--Added debug messages for the bug 12901042
992 		IF g_debug = 'Y' THEN
993 	            gms_error_pkg.gms_debug ('In When OTHERS Exception of when_update_line'|| ' SQLCODE:'|| SQLCODE|| ' SQLERRM:'|| SQLERRM,'C');
994 		END IF;
995 	--End for the bug 12901042
996 			X_status := SQLCODE ;
997 			RAISE ;
998 	END when_update_line ;
999 
1000 	-- =================================================================
1001 	-- Delete unwanted award distribution lines here.
1002 	-- =================================================================
1003 
1004 	PROCEDURE when_delete_line (	X_distribution_id	IN NUMBER,
1005 					X_status		IN OUT NOCOPY varchar2 ) is
1006 
1007 		x_award_set_id	NUMBER ;
1008 
1009 		Cursor c_award_set_id is
1010 			select award_id
1011 			  from po_req_distributions_all
1012 			 where distribution_id	= X_distribution_id ;
1013 
1014 	BEGIN
1015 
1016 	--Added debug messages for the bug 12901042
1017 		IF g_debug = 'Y' THEN
1018 	            gms_error_pkg.gms_debug ('Inside GMS_POR_API.when_delete_line','C');
1019 		END IF;
1020 	--End for the bug 12901042
1021 
1022 		-- ==============================================================
1023 		-- Do not proceed if grants is not enabled for an implementation
1024 		-- Org.
1025 		-- ==============================================================
1026 		IF not gms_install.enabled then
1027 			return ;
1028 		END IF ;
1029 
1030 		open c_award_set_id ;
1031 		fetch c_award_set_id into x_award_set_id ;
1032 		close c_award_set_id ;
1033 
1034 		IF NVL(x_award_set_id, 0) > 0 THEN
1035 
1036 			delete from gms_award_distributions
1037 			 where award_set_id = x_award_set_id
1038 			   and adl_status   = 'A' ;
1039 
1040 		END IF ;
1041 		return ;
1042 	END when_delete_line ;
1043 
1044        --
1045        -- Start : 3103564
1046        --         NEW DELETE API NEEDED FOR DELETING AN AWARD DISTRIBUTION LINE
1047        --
1048        -- Start of comments
1049        --	API name 	: delete_adl
1050        --	Type		: Public
1051        --	Pre-reqs	: None.
1052        --	Function	: Deletes a record from gms_award_distributions
1053        --			  table.
1054        --	Parameters	:
1055        --	IN		: p_award_set_id          IN NUMBER	Required
1056        --			  .
1057        --			  .
1058        --       OUT             : x_status               OUT Varchar2
1059        --                         values are 'S', 'E', 'U'
1060        --                         fnd_api.G_RET_STS_SUCCESS
1061        --                         fnd_api.G_RET_STS_ERROR
1062        --                         fnd_api.G_RET_STS_UNEXP_ERROR
1063        -- End of comments
1064 
1065        PROCEDURE delete_adl ( p_award_set_id 	IN NUMBER,
1066                               x_status          OUT NOCOPY varchar2,
1067                               x_err_msg         OUT NOCOPY varchar2 ) is
1068          l_status  varchar2(1) ;
1069 	 l_err_msg varchar2(4000) ;
1070        BEGIN
1071 
1072 	--Added debug messages for the bug 12901042
1073 		IF g_debug = 'Y' THEN
1074 	            gms_error_pkg.gms_debug ('Inside GMS_POR_API.delete_adl','C');
1075 		END IF;
1076 	--End for the bug 12901042
1077 
1078 	   -- ==============================================================
1079 	   -- Do not proceed if grants is not enabled for an implementation
1080 	   -- Org.
1081 	   -- ==============================================================
1082 	   l_status := FND_API.G_RET_STS_SUCCESS ;
1083 	   l_err_msg:= NULL ;
1084 	   x_status := l_status ;
1085 
1086 	   IF not gms_install.enabled then
1087 	      return ;
1088 	   END IF ;
1089 
1090 	   IF NVL(p_award_set_id, 0) > 0 THEN
1091 
1092 	      delete from gms_award_distributions
1093 	       where award_set_id = p_award_set_id
1094 	         and adl_status   = 'A' ;
1095 
1096 	      IF SQL%NOTFOUND then
1097 		 fnd_message.set_name('GMS','GMS_INVALID_AWARD');
1098 
1099 		 l_err_msg :=  fnd_message.get;
1100 		 l_status  := FND_API.G_RET_STS_ERROR ;
1101 	      END IF ;
1102 	   END IF ;
1103 
1104 	   x_err_msg:= l_err_msg ;
1105 	   x_status := l_status ;
1106        EXCEPTION
1107 	   When Others THEN
1108 
1109 	--Added debug messages for the bug 12901042
1110 		IF g_debug = 'Y' THEN
1111 	            gms_error_pkg.gms_debug ('In When OTHERS Exception of delete_adl'|| ' SQLCODE:'|| SQLCODE|| ' SQLERRM:'|| SQLERRM,'C');
1112 		END IF;
1113 	--End for the bug 12901042
1114 
1115                 l_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1116 		l_err_msg:= SQLERRM ;
1117 
1118 		x_err_msg:= l_err_msg ;
1119 		x_status := l_status ;
1120        END delete_adl ;
1121        --
1122        -- NEW DELETE API NEEDED FOR DELETING AN AWARD DISTRIBUTION LINE
1123        -- End : 3103564
1124        --
1125 
1126         --=================================================================
1127         -- Bug-2557041
1128         -- This API used by IP to determine award distribution information
1129         --=================================================================
1130         PROCEDURE get_award_dist_param (p_award_dist_option     OUT NOCOPY VARCHAR2,
1131                                         p_dist_award_number     OUT NOCOPY VARCHAR2,
1132                                         p_dist_award_id         OUT NOCOPY NUMBER )
1133         IS
1134         l_award_dist_option             gms_implementations_all.award_distribution_option%TYPE;
1135         l_dist_award_number             gms_implementations_all.default_dist_award_number%TYPE;
1136         l_dist_award_id                 gms_implementations_all.default_dist_award_id%TYPE;
1137         CURSOR c_default_award IS
1138              SELECT award_distribution_option,
1139                     default_dist_award_number,
1140                     default_dist_award_id
1141              FROM   gms_implementations
1142              WHERE  enabled ='Y';
1143 
1144         BEGIN
1145 
1146 	--Added debug messages for the bug 12901042
1147 		IF g_debug = 'Y' THEN
1148 	            gms_error_pkg.gms_debug ('Inside GMS_POR_API.get_award_dist_param','C');
1149 		END IF;
1150 	--End for the bug 12901042
1151 
1152 	     OPEN  c_default_award;
1153              FETCH c_default_award
1154              INTO  l_award_dist_option,
1155                    l_dist_award_number,
1156                    l_dist_award_id;
1157              CLOSE c_default_award;
1158 
1159              p_award_dist_option := l_award_dist_option;
1160              p_dist_award_number := l_dist_award_number;
1161              p_dist_award_id     := l_dist_award_id;
1162 
1163              IF NVL(l_award_dist_option,'N') ='N' THEN
1164                 p_award_dist_option :='N';
1165                 p_dist_award_number :=NULL;
1166                 p_dist_award_id     :=NULL;
1167              END IF;
1168 
1169         END get_award_dist_param;
1170 
1171         --=======================================================================
1172         -- Bug-2557041
1173         -- following API used to validate dummy award specific validations
1174         --=======================================================================
1175         PROCEDURE validate_dist_award(  p_project_id            IN NUMBER,
1176                                         p_task_id               IN NUMBER,
1177                                         p_award_id              IN NUMBER,
1178                                         p_expenditure_type      IN VARCHAR2,
1179                                         p_status                IN OUT NOCOPY VARCHAR2,
1180                                         p_err_msg_label         OUT NOCOPY VARCHAR2 )
1181         AS
1182         l_award_id      gms_awards_all.award_id%TYPE:=p_award_id;
1183         l_dummy         NUMBER;
1184         l_exp_type      gms_allowable_expenditures.expenditure_type%TYPE;
1185         l_msg_label     VARCHAR2(50);
1186         l_status        VARCHAR2(1);
1187         l_err_msg       VARCHAR2(2000);
1188 
1189        CURSOR  c_check_award IS
1190                SELECT default_dist_award_id
1191                FROM   gms_implementations
1192                WHERE  enabled ='Y'
1193                AND    award_distribution_option ='Y';
1194 
1195       CURSOR check_fund_pattern is
1196           SELECT fph.project_id
1197             from gms_funding_patterns_all FPH,
1198                  gms_fp_distributions     FPD,
1199                  pa_tasks t -- bug 9883567 Added
1200            where FPH.project_id        = p_project_id
1201              and t.task_id = p_task_id
1202              and NVL(FPH.task_id,t.top_task_id) = t.top_task_id
1203              and FPH.funding_pattern_id= FPD.funding_pattern_id
1204              and FPH.status            = 'A'
1205              and NVL(FPH.retroactive_flag,'N')  = 'N' ;
1206 
1207        CURSOR c_exp_type IS
1208               SELECT gae.expenditure_type
1209               FROM   gms_funding_patterns gfp,
1210                      gms_fp_distributions gfd,
1211                      gms_allowable_expenditures gae,
1212                      pa_tasks t,
1213                      gms_awards ga
1214               WHERE  t.task_id                       =p_task_id
1215               AND    t.project_id                    =p_project_id
1216               AND    gfp.project_id                  =p_project_id
1217               AND    nvl(gfp.task_id,t.top_task_id ) =t.top_task_id
1218               AND    gfp.status                      ='A'
1219               AND    gfp.retroactive_flag            ='N'
1220               AND    gae.expenditure_type            =p_expenditure_type
1221               AND    gfp.funding_pattern_id          =gfd.funding_pattern_id
1222               AND    ga.award_id                     =gfd.award_id
1223               AND    ga.allowable_schedule_id        =gae.allowability_schedule_id;
1224         BEGIN
1225 
1226 	 g_error_procedure_name := 'validate_dist_award';
1227 
1228 	--Added debug messages for the bug 12901042
1229 	 IF g_debug = 'Y' THEN
1230                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.validate_dist_award','C');
1231 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
1232 	 END IF;
1233 	--End for the bug 12901042
1234 
1235 	 l_status               := 'S';
1236          l_exp_type		:= p_expenditure_type;
1237          l_award_id		:= p_award_id;
1238 
1239          --===============================
1240          --1  Validate Dummy award is okay
1241          --===============================
1242          OPEN c_check_award;
1243          FETCH c_check_award INTO l_dummy;
1244 
1245          IF c_check_award%NOTFOUND THEN
1246             l_status := 'E';
1247             l_msg_label :='GMS_AWD_DIST_NOT_ENABLED';
1248          END IF;
1249 
1250          IF l_dummy<>l_award_id AND l_status <>'E' THEN
1251             l_status := 'E';
1252             l_msg_label:='GMS_DIST_AWD_INVALID';
1253          END IF;
1254 
1255          CLOSE c_check_award;
1256 
1257 	 -- ====================================================
1258 	 -- Bug : 2725486 ( Validate Funding pattern exists ) .
1259 	 -- =====================================================
1260 	 IF l_status <> 'E' THEN
1261 		OPEN check_fund_pattern ;
1262 		fetch check_fund_pattern into l_dummy ;
1263 		IF check_fund_pattern%NOTFOUND then
1264 			l_status :='E';
1265 			l_msg_label :='GMS_INVALID_FUNDING_PATTERN' ;
1266 		END IF ;
1267 		CLOSE check_fund_pattern ;
1268 	 END IF ;
1269 
1270 
1271          --===================================
1272          --2 Validate Expenditure Type Is Okay
1273          --===================================
1274 
1275         IF l_status <> 'E' THEN
1276            OPEN c_exp_type;
1277            FETCH c_exp_type INTO l_exp_type;
1278            IF c_exp_type%NOTFOUND THEN
1279                l_status :='E';
1280                l_msg_label :='GMS_EXP_TYPE_NO_PATTERN';
1281            END IF;
1282            CLOSE c_exp_type;
1283         END IF;
1284 
1285         p_status        :=l_status;
1286 
1287          IF l_msg_label IS NOT  NULL THEN
1288             P_err_msg_label :=l_msg_label;
1289          END IF;
1290 
1291       	 IF g_debug = 'Y' THEN
1292                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
1293 	 END IF;
1294 
1295         EXCEPTION
1296              WHEN OTHERS THEN
1297 
1298 	--Added debug messages for the bug 12901042
1299 		IF g_debug = 'Y' THEN
1300 	            gms_error_pkg.gms_debug (g_error_procedure_name||' SQLCODE:'|| SQLCODE|| ' SQLERRM:'|| SQLERRM,'C');
1301 		END IF;
1302 	--End for the bug 12901042
1303 
1304                p_status :='U';
1305                p_err_msg_label :='GMS_UNDEFINED_EXCEPTION';
1306                raise;
1307         END validate_dist_award;
1308 
1309         --=============================================================
1310         -- Bug-2557041
1311         -- The purpose of this API is to prepare for award distributions
1312         -- and kicks off award distribution engine
1313         --=============================================================
1314         PROCEDURE   distribute_award(p_doc_header_id               IN NUMBER,
1315                                      p_distribution_id             IN NUMBER,
1316                                      p_document_source             IN VARCHAR2,
1317                                      p_gl_encumbered_date          IN DATE,
1318                                      p_project_id                  IN NUMBER,
1319                                      p_task_id                     IN NUMBER,
1320                                      p_dummy_award_id              IN NUMBER,
1321                                      p_expenditure_type            IN VARCHAR2,
1322                                      p_expenditure_organization_id IN NUMBER,
1323                                      p_expenditure_item_date       IN DATE,
1324                                      p_quantity                    IN NUMBER,
1325                                      p_unit_price                  IN NUMBER,
1326                                      p_func_amount                 IN NUMBER,
1327                                      p_vendor_id                   IN NUMBER,
1328                                      p_source_type_code            IN VARCHAR2,
1329                                      p_award_qty_obj               OUT NOCOPY gms_obj_award,
1330                                      p_status                      OUT NOCOPY VARCHAR2,
1331                                      p_error_msg_label             OUT NOCOPY VARCHAR2 )
1332          AS
1333          l_doc_header_id    NUMBER;
1334          l_distribution_id  NUMBER;
1335          l_document_source  VARCHAR2(4);
1336          l_index            INTEGER;
1337 
1338          l_award_qty_obj    gms_obj_award;
1339          l_dist_status      VARCHAR2(5);
1340          l_status           VARCHAR2(1);
1341          l_msg_label        VARCHAR2(2000);
1342          l_recs_processed   NUMBER;
1343          l_recs_rejected    NUMBER;
1344          l_source_type_code po_requisition_lines_all.source_type_code%type;
1345 
1346 	 CURSOR c_next_header_id IS
1347               SELECT gms_packet_header_id_s.NEXTVAL
1348               FROM   DUAL;
1349 
1350 	 CURSOR c_next_dist_id IS
1351                 SELECT gms_packet_dist_id_s.NEXTVAL
1352                 FROM   DUAL;
1353 
1354          CURSOR c_awd_dist_status IS
1355             SELECT awd.dist_status
1356             FROM   gms_distributions awd
1357             WHERE  awd.document_distribution_id  = l_distribution_id
1358             AND    awd.document_header_id        = l_doc_header_id
1359             AND    awd.document_type             = l_document_source
1360             AND    awd.dist_status               <>'FABA';
1361          BEGIN
1362 
1363   	 g_error_procedure_name := 'distribute_award';
1364 
1365 	--Added debug messages for the bug 12901042
1366 	 IF g_debug = 'Y' THEN
1367                 gms_error_pkg.gms_debug ('Inside GMS_POR_API.distribute_award','C');
1368 		gms_error_pkg.gms_debug (g_error_procedure_name||': START','C');
1369 	 END IF;
1370 	--End for the bug 12901042
1371 
1372 	  -- Initilaize the Object
1373          l_award_qty_obj :=GMS_OBJ_AWARD(GMS_TYPE_VARCHAR20(),GMS_TYPE_NUMBER(),GMS_TYPE_NUMBER());
1374 
1375          l_doc_header_id	:=p_doc_header_id ;
1376 	 l_distribution_id	:=p_distribution_id ;
1377          l_document_source	:=p_document_source ;
1378          l_status		:='S';
1379          p_status		:=l_status ;
1380          l_source_type_code     := p_source_type_code;
1381 
1382 
1383          IF not gms_install.enabled then
1384 		return ;
1385 	 END IF ;
1386 
1387          IF NVL(p_dummy_award_id,0) >= 0 THEN
1388 		p_status	:='S';
1389 		Return ;
1390    	 END IF ;
1391 
1392          --==============================================================
1393          -- Do not proceed if grants is  enabled and Requisition type is
1394          -- Internal
1395          --==============================================================
1396          IF is_sponsored_project (p_project_id) THEN
1397             IF  nvl(l_source_type_code,'INVENTORY') = 'INVENTORY' THEN
1398                p_error_msg_label := 'GMS_IP_INVALID_REQ_TYPE';
1399                p_status :=  'E';
1400                return;
1401             END IF;
1402          ELSE
1403 	  -- 2. Nonsponsored project having award should fail.
1404                p_error_msg_label := 'GMS_AWARD_NOT_ALLOWED';
1405                p_status :=  'E';
1406                return;
1407          END IF;
1408 
1409 	-- Added below condition for the bug 12426747
1410 	IF p_gl_encumbered_date IS NULL THEN
1411                p_error_msg_label := 'GMS_GL_DATE_IS_NULL';
1412                p_status :=  'E';
1413                return;
1414 	END IF;
1415 	-- End for the bug 12426747
1416 
1417 	--Added debug messages for the bug 12901042
1418 	 IF g_debug = 'Y' THEN
1419                 gms_error_pkg.gms_debug (g_error_procedure_name||' Before Calling GMS_POR_API.validate_dist_award','C');
1420 	 END IF;
1421 	--End for the bug 12901042
1422 
1423         GMS_POR_API.validate_dist_award(P_project_id,
1424          			P_task_id,
1425 	          		P_dummy_award_id,
1426 			        P_expenditure_type,
1427 			        l_status,
1428 		                l_msg_label ) ;
1429 
1430 	--Added debug messages for the bug 12901042
1431 	 IF g_debug = 'Y' THEN
1432                 gms_error_pkg.gms_debug (g_error_procedure_name||' After Calling GMS_POR_API.validate_dist_award','C');
1433 		gms_error_pkg.gms_debug (g_error_procedure_name||' l_status='||l_status,'C');
1434 		gms_error_pkg.gms_debug (g_error_procedure_name||' l_msg_label='||l_msg_label,'C');
1435 	 END IF;
1436 	--End for the bug 12901042
1437 
1438         IF l_status <> 'S' THEN
1439           p_error_msg_label:= l_msg_label ;
1440           p_status	  := l_status ;
1441           return ;
1442         END IF ;
1443 
1444 	IF l_doc_header_id is NULL THEN
1445               OPEN  c_next_header_id;
1446               FETCH c_next_header_id
1447               INTO  l_doc_header_id;
1448               CLOSE c_next_header_id;
1449 	END IF ;
1450 
1451 	IF l_distribution_id is NULL THEN
1452               OPEN  c_next_dist_id;
1453               FETCH c_next_dist_id
1454               INTO  l_distribution_id;
1455               CLOSE c_next_dist_id;
1456 	END IF ;
1457 
1458 	IF l_Document_source = 'IREQ' THEN
1459 		l_document_source:= 'REQ' ;
1460 	END IF ;
1461 
1462 	--Added debug messages for the bug 12901042
1463 	 IF g_debug = 'Y' THEN
1464                 gms_error_pkg.gms_debug (g_error_procedure_name||' Inserting records in gms_distributions','C');
1465 	 END IF;
1466 	--End for the bug 12901042
1467 
1468 	 --===========================================
1469          -- Insert Records into gms_distribution table
1470          --===========================================
1471          INSERT INTO gms_distributions
1472                        ( document_header_id ,
1473                          document_distribution_id,
1474                          document_type,
1475                          gl_date,
1476                          project_id,
1477                          task_id,
1478                          expenditure_type,
1479                          expenditure_organization_id,
1480                          expenditure_item_date,
1481                          quantity,
1482                          unit_price,
1483                          amount,
1484                          dist_status,
1485                          creation_date)
1486             VALUES     ( l_doc_header_id,
1487                          l_distribution_id,
1488                          l_document_source,
1489                          p_gl_encumbered_date,
1490                          p_project_id,
1491                          p_task_id,
1492                          p_expenditure_type,
1493                          p_expenditure_organization_id,
1494                          p_expenditure_item_date,
1495                          p_quantity,
1496                          p_unit_price,
1497                          p_func_amount,
1498                          NULL,
1499                          SYSDATE );
1500 
1501 	--Added debug messages for the bug 12901042
1502 	 IF g_debug = 'Y' THEN
1503                 gms_error_pkg.gms_debug (g_error_procedure_name||' Before calling GMS_AWARD_DIST_ENG.PROC_DISTRIBUTE_RECORDS','C');
1504 	 END IF;
1505 	--End for the bug 12901042
1506 
1507        GMS_AWARD_DIST_ENG.PROC_DISTRIBUTE_RECORDS(l_doc_header_id, 'REQ',l_recs_processed,l_recs_rejected);
1508         --process the results of PROC_DISTRIBUTE_RECORDS
1509 
1510 	--Added debug messages for the bug 12901042
1511 	 IF g_debug = 'Y' THEN
1512                 gms_error_pkg.gms_debug (g_error_procedure_name||' After calling GMS_AWARD_DIST_ENG.PROC_DISTRIBUTE_RECORDS','C');
1513 		gms_error_pkg.gms_debug (g_error_procedure_name||' l_recs_processed='||l_recs_processed,'C');
1514 		gms_error_pkg.gms_debug (g_error_procedure_name||' l_recs_rejected='||l_recs_rejected,'C');
1515 	 END IF;
1516 	--End for the bug 12901042
1517 
1518         IF NVL(l_recs_processed,0) > 0 THEN
1519             --populate the return variables.
1520            SELECT            a.award_number ,
1521                              awdd.award_id ,
1522                              awdd.quantity_distributed
1523            BULK COLLECT INTO l_award_qty_obj.award_num,
1524                              l_award_qty_obj.award_id,
1525                              l_award_qty_obj.quantity
1526            FROM              gms_distribution_details awdd,
1527                              gms_distributions        awd,
1528                              gms_awards_all           a
1529            WHERE             awd.document_distribution_id  = awdd.document_distribution_id
1530            AND               awd.document_header_id        = awdd.document_header_id
1531            AND               awd.document_distribution_id  = l_distribution_id
1532            AND               awd.document_header_id        = l_doc_header_id
1533            AND               awd.document_type             = l_document_source
1534            AND               awd. dist_status              = 'FABA'
1535            AND               awdd.award_id                 = a.Award_id;
1536         END IF;
1537 
1538          IF NVL(l_recs_rejected,0) > 0 THEN
1539 
1540             l_status :='E';--failed status
1541             OPEN   c_awd_dist_status;
1542             FETCH  c_awd_dist_status INTO l_dist_status;
1543             CLOSE  c_awd_dist_status;
1544 
1545            IF l_dist_status ='ERR01' THEN
1546               l_msg_label := 'GMS_FP_VALIDATION_FAILED';
1547               --Unable to distribute because funding pattern didn't pass validations
1548            ELSIF  l_dist_status ='ERR02' THEN
1549               l_msg_label := 'GMS_FP_NOT_FOUND';
1550               --Unable to distribute because funding pattern not found
1551            ELSIF  l_dist_status ='ERR03' THEN
1552               l_msg_label := 'GMS_FP_CHECK_FUNDS_FAILED';
1553               -- Unable to distribute because funding pattern doesn't have enough funds
1554 
1555            END IF;
1556 
1557          END IF;
1558 
1559          p_status        := l_status;
1560          p_award_qty_obj := l_award_qty_obj;
1561 
1562          IF l_msg_label IS NOT  NULL THEN
1563             P_error_msg_label :=l_msg_label;
1564          END IF;
1565 
1566 	 IF g_debug = 'Y' THEN
1567                 gms_error_pkg.gms_debug (g_error_procedure_name||': END','C');
1568 	 END IF;
1569 
1570          EXCEPTION
1571            WHEN OTHERS THEN
1572 
1573 	--Added debug messages for the bug 12901042
1574 		IF g_debug = 'Y' THEN
1575 	            gms_error_pkg.gms_debug ('In When OTHERS Exception distribute_award'|| ' SQLCODE:'|| SQLCODE|| ' SQLERRM:'|| SQLERRM,'C');
1576 		END IF;
1577 	--End for the bug 12901042
1578 
1579 	      p_status :='U';
1580               p_error_msg_label :='GMS_UNDEFINED_EXCEPTION';
1581          END distribute_award;
1582 
1583 
1584 	FUNCTION enabled return varchar2 is
1585 	begin
1586 		-- ==============================================================
1587 		-- Do not proceed if grants is not enabled for an implementation
1588 		-- Org.
1589 		-- ==============================================================
1590 		IF gms_install.enabled then
1591 			return 'Y' ;
1592 		END IF ;
1593 
1594 		return 'N' ;
1595 	END ;
1596 
1597 END GMS_POR_API;