DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_XPRT_INT_GRP

Source


1 PACKAGE BODY OKC_XPRT_INT_GRP AS
2 /* $Header: OKCVXIBEEXPB.pls 120.18 2006/06/22 09:23:45 asingam noship $ */
3 
4 ------------------------------------------------------------------------------
5 -- GLOBAL CONSTANTS
6 ------------------------------------------------------------------------------
7   G_PKG_NAME                   CONSTANT   VARCHAR2(200) := 'OKC_XPRT_INT_GRP';
8   G_APP_NAME                   CONSTANT   VARCHAR2(3)   :=  OKC_API.G_APP_NAME;
9 
10   G_LEVEL_PROCEDURE            CONSTANT   NUMBER := FND_LOG.LEVEL_PROCEDURE;
11   G_MODULE                     CONSTANT   VARCHAR2(250) := 'okc.plsql.' || g_pkg_name || '.';
12   G_APPLICATION_ID             CONSTANT   NUMBER :=510; -- OKC Application
13 
14   G_FALSE                      CONSTANT   VARCHAR2(1) := FND_API.G_FALSE;
15   G_TRUE                       CONSTANT   VARCHAR2(1) := FND_API.G_TRUE;
16 
17   G_RET_STS_SUCCESS            CONSTANT   VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
18   G_RET_STS_ERROR              CONSTANT   VARCHAR2(1) := FND_API.G_RET_STS_ERROR;
19   G_RET_STS_UNEXP_ERROR        CONSTANT   VARCHAR2(1) := FND_API.G_RET_STS_UNEXP_ERROR;
20 
21   G_UNEXPECTED_ERROR           CONSTANT   VARCHAR2(200) := 'OKC_UNEXPECTED_ERROR';
22   G_SQLERRM_TOKEN              CONSTANT   VARCHAR2(200) := 'ERROR_MESSAGE';
23   G_SQLCODE_TOKEN              CONSTANT   VARCHAR2(200) := 'ERROR_CODE';
24   G_UNABLE_TO_RESERVE_REC      CONSTANT   VARCHAR2(200) := OKC_API.G_UNABLE_TO_RESERVE_REC;
25 
26   --For Bug 4685428
27 
28   G_OKC_XPRT_SALESREP_ASSIST   CONSTANT   VARCHAR2(30)  := 'OKC_XPRT_SALESREP_ASSIST';
29 
30  -------------------------------------------------------------------
31  --  Procedure: This procedure is to delete the empty sections
32  --             and re-number the terms if one or more empty
33  --             section is deleted.
34  -------------------------------------------------------------------
35  PROCEDURE delete_empty_sections (
36          p_api_version               IN            NUMBER,
37          p_init_msg_list             IN            VARCHAR2,
38          p_document_type             IN            VARCHAR2,
39          p_document_id               IN            NUMBER,
40          p_template_id               IN            NUMBER,
41          p_document_number           IN            VARCHAR2,
42          x_return_status             OUT  NOCOPY   VARCHAR2,
43          x_msg_count                 OUT  NOCOPY   NUMBER,
44          x_msg_data                  OUT  NOCOPY   VARCHAR2
45   ) IS
46 
47   l_api_name          	VARCHAR2(30) := 'delete_empty_sections';
48   l_module            	VARCHAR2(250) := G_MODULE || l_api_name;
49   l_section_deleted		VARCHAR2(1) := 'N';
50   l_num_scheme_id		NUMBER:=0;
51 
52   Cursor c_doc_sections Is
53     SELECT id,scn_id,level,object_version_number, 0
54     FROM okc_sections_b
55     CONNECT BY prior id = scn_id
56     START WITH DOCUMENT_ID = p_document_id and document_type = p_document_type
57     ORDER BY level DESC;
58 
59   Cursor c_art_sections Is
60     select distinct scn_id
61     from okc_k_articles_b
62     where DOCUMENT_TYPE = p_document_type and DOCUMENT_ID = p_document_id;
63 
64   Cursor c_clauses(p_scn_id NUMBER) Is
65     select count(*)
66     from okc_k_articles_b
67     where scn_id = p_scn_id;
68 
69   CURSOR l_get_num_scheme_id(p_doc_type VARCHAR2, p_doc_id NUMBER) IS
70     SELECT doc_numbering_scheme
71     FROM okc_template_usages
72     WHERE document_type = p_document_type
73       AND document_id = p_document_id;
74 
75   TYPE IdList IS TABLE OF okc_sections_b.id%TYPE INDEX BY BINARY_INTEGER;
76 
77   -- define table list for the above cursor with a processed flag (deletable or not)
78   -- if a section cannot be deleted, that section along with all its parent will be marked
79   -- as not deletable
80   Id_tbl IdList;
81   Scn_Id_tbl IdList;
82   Level_tbl IdList;
83   OVN_Tbl IdList;
84   Delete_Flag_tbl IdList; -- 0 = can delete; 1 = cannot delete
85 
86   i NUMBER;
87   l_clause_count number;
88   l_level number;
89   l_parent_scn_id number;
90   l_grand_parent_id number;
91 
92 BEGIN
93   x_return_status := FND_API.G_RET_STS_SUCCESS;
94 
95   IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
96         FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
97                        G_MODULE || l_api_name,
98                        '100: Entered ' || G_PKG_NAME  || '.' || l_api_name);
99         FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
100 	               G_MODULE || l_api_name,
101 	                    'Parameters : ');
102 	   FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
103 	               G_MODULE || l_api_name,
104 	               'p_document_id : ' || p_document_id);
105 	   FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
106 	               G_MODULE || l_api_name,
107 	               'p_document_type : ' || p_document_type);
108 	   FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
109 	               G_MODULE || l_api_name,
110 	               'p_document_number : ' || p_document_number);
111         FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
112 	               G_MODULE || l_api_name,
113                        'p_template_id : ' || p_template_id);
114   END IF;
115 
116   --
117   -- read all sections from the document
118   --
119   Open c_doc_sections;
120   Fetch c_doc_sections bulk collect into Id_tbl,Scn_Id_tbl,Level_tbl,OVN_tbl,Delete_Flag_tbl;
121   Close c_doc_sections;
122 
123   --
124   -- get all sections that have clauses from articles table and set the delete flag not to be deleted
125   -- delete_flag is set to 1 if the section has clauses
126   -- if a section cannot be deletable, all its parents and grand parents also no deletable
127   --
128   For clause_sec IN c_art_sections
129   Loop
130       For l_sec_index In 1..Id_tbl.count
131       Loop
132           if Id_tbl(l_sec_index) = clause_sec.scn_id then
133              Delete_Flag_tbl(l_sec_index) := 1;
134              l_parent_scn_id := Scn_Id_tbl(l_sec_index);
135 		   if nvl(l_level,1) <= 1 then
136 		      l_level := Level_tbl(l_sec_index);
137 			 l_parent_scn_id := Scn_Id_tbl(l_sec_index);
138 		   end if;
139           end if;
140       End Loop;
141 
142 		  -- mark all parents of this section as not deletable
143 		  while l_level > 1
144 		  Loop
145                For i In 1..Id_tbl.count
146 			Loop
147 			    if (Id_tbl(i) = l_parent_scn_id and Delete_Flag_tbl(i) <> 1) then
148 			       Delete_Flag_tbl(i) := 1; -- do not delete parent section
149 				  l_grand_parent_id := Scn_Id_tbl(i);
150                    end if;
151 			End Loop;
152                l_level := l_level - 1;
153 			l_parent_scn_id := l_grand_parent_id;
154 		  End Loop;
155   End Loop;
156 
157   --
158   -- now check the sections for which the delete flags are not set to 1
159   -- if these sections has clauses, set the flag to 1
160   -- if a section is no deletable, all its parents and grand parents are also not deletable
161   --
162   For l_sec_index In 1..Id_tbl.count
163   Loop
164       if Delete_Flag_tbl(l_sec_index) = 0  then
165          Open c_clauses(Id_tbl(l_sec_index));
166          Fetch c_clauses into l_clause_count;
167 	    Close c_clauses;
168 	    if l_clause_count > 0 then
169 		  For i In 1..Id_tbl.count
170 		  Loop
171 			 if Id_tbl(i) = Id_tbl(l_sec_index) then
172                    Delete_Flag_tbl(i) := 1; -- do not delete this section
173 		      end if;
174 		  End Loop;
175 		  -- mark all parents of this section as not deletable
176 		  l_level := Level_tbl(l_sec_index);
177 		  l_parent_scn_id := Scn_Id_tbl(l_sec_index);
178 		  while l_level > 1
179 		  Loop
180                For i In 1..Id_tbl.count
181 			Loop
182 			    if (Id_tbl(i) = l_parent_scn_id and Delete_Flag_tbl(i) <> 1) then
183 			       Delete_Flag_tbl(i) := 1; -- do not delete parent section
184 				  l_grand_parent_id := Scn_Id_tbl(i);
185                    end if;
186 			End Loop;
187                l_level := l_level - 1;
188 			l_parent_scn_id := l_grand_parent_id;
189 		  End Loop;
190 	    end if;
191 	 end if;
192   End Loop;
193 
194   --
195   -- remove duplicate sections that to be deleted
196   -- if not removed, the delete API will throw error since the section is already deleted in some cases
197   --
198   For l_sec_index In 1..Id_tbl.count
199   Loop
200       if (Delete_Flag_tbl(l_sec_index) = 0) then
201          For i In l_sec_index+1..Id_tbl.count
202 	    Loop
203 	        if Id_tbl(i) = Id_tbl(l_sec_index) then
204 		      Delete_Flag_tbl(i) := 1;
205              end if;
206 	    End Loop;
207 	 end if;
208   End Loop;
209 
210   --
211   -- now the rest of the sections with delete flag is still set to zero are empty sections
212   -- delete all empty sections now
213   --
214 
215   For l_sec_index In 1..Id_tbl.count
216   Loop
217 
218        If (Delete_Flag_tbl(l_sec_index) = 0) then
219              OKC_TERMS_SECTIONS_GRP.delete_section(
220                                    p_api_version       => p_api_version,
221                                    p_init_msg_list     => p_init_msg_list,
222                                    p_commit            => FND_API.G_FALSE,
223                                    x_return_status     => x_return_status,
224                                    x_msg_count         => x_msg_count,
225                                    x_msg_data          => x_msg_data,
226                                    p_mode              => 'NORMAL',
227                                    p_id                => id_tbl(l_sec_index),
228                                    p_amendment_description => NULL,
229                                    p_object_version_number => OVN_tbl(l_sec_index)
230                                    );
231 
232               IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
233                       RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
234               ELSIF (x_return_status = G_RET_STS_ERROR) THEN
235                       RAISE FND_API.G_EXC_ERROR ;
236               END IF;
237 		    l_section_deleted := 'Y';
238 
239 	  End If;
240   End Loop;
241 
242    --
243    -- if at least one section got deleted, renumber the document
244    --
245    IF l_section_deleted = 'Y' THEN
246       OPEN l_get_num_scheme_id(p_doc_type => p_document_type, p_doc_id => p_document_id) ;
247       FETCH l_get_num_scheme_id INTO l_num_scheme_id;
248       CLOSE l_get_num_scheme_id;
249 
250       IF NVL(l_num_scheme_id,0) <> 0 THEN
251 
252          OKC_NUMBER_SCHEME_GRP.apply_numbering_scheme(
253            p_api_version        => p_api_version,
254            p_init_msg_list      => p_init_msg_list,
255            x_return_status      => x_return_status,
256            x_msg_count          => x_msg_count,
257            x_msg_data           => x_msg_data,
258            p_validate_commit    => FND_API.G_FALSE,
259            p_validation_string  => NULL,
260            p_commit             => FND_API.G_FALSE,
261            p_doc_type           => p_document_type,
262            p_doc_id             => p_document_id,
263            p_num_scheme_id      => l_num_scheme_id
264          );
265 
266          IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
267                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
268          ELSIF (x_return_status = G_RET_STS_ERROR) THEN
269                   RAISE FND_API.G_EXC_ERROR ;
270          END IF;
271       END IF; --l_num_scheme_id is not zero
272    END IF;
273 
274    -- end debug log
275    IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
276        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
277                       G_MODULE || l_api_name,
278                       '1000: Leaving ' || G_PKG_NAME  || '.' || l_api_name);
279    END IF;
280 
281   EXCEPTION
282 
283      WHEN FND_API.G_EXC_ERROR THEN
284            IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
285               FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
286                              G_MODULE || l_api_name,
287                              '2000: Leaving ' || G_PKG_NAME  || '.' || l_api_name);
288            END IF;
289 
290          		x_return_status := FND_API.G_RET_STS_ERROR ;
291          		FND_MSG_PUB.Count_And_Get(
292          		        p_count => x_msg_count,
293                  		p_data => x_msg_data
294          		);
295 
296      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
297            IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
298               FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
299                              G_MODULE || l_api_name,
300                              '3000: Leaving ' || G_PKG_NAME  || '.' || l_api_name);
301            END IF;
302 
303          		x_return_status := FND_API.G_RET_STS_ERROR ;
304          		FND_MSG_PUB.Count_And_Get(
305          		        p_count => x_msg_count,
306                  		p_data => x_msg_data
307          		);
308 
309      WHEN OTHERS THEN
310            IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
311               FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
312                              G_MODULE || l_api_name,
313                              '4000: Leaving ' || G_PKG_NAME  || '.' || l_api_name);
314            END IF;
315 
316          		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
317 
318            		IF FND_MSG_PUB.Check_Msg_Level
319          		   (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
320          		THEN
321              	    	FND_MSG_PUB.Add_Exc_Msg(
322              	    	     G_PKG_NAME  	    ,
323              	    	     l_api_name
324          	    	      );
325          		END IF;
326 
327          		FND_MSG_PUB.Count_And_Get(
328          		     p_count => x_msg_count,
329                  	     p_data => x_msg_data);
330 
331 
332 END delete_empty_sections;
333 -------------------------------------------------------------------
334 --  Procedure: This procedure will be called from the following two
335 --             places:
336 --             1. From preview t's and  c's in iStore
337 --             2. From iStore backend order creation
338 -------------------------------------------------------------------
339   PROCEDURE get_contract_terms (
340         p_api_version               IN            NUMBER,
341         p_init_msg_list             IN            VARCHAR2,
342         p_document_type             IN            VARCHAR2,
343         p_document_id               IN            NUMBER,
344         p_template_id               IN            NUMBER,
345         p_called_from_ui            IN            VARCHAR2,
346         p_document_number           IN            VARCHAR2,
347 	   p_run_xprt_flag             IN            VARCHAR2,
348         x_return_status             OUT  NOCOPY   VARCHAR2,
349         x_msg_count                 OUT  NOCOPY   NUMBER,
350         x_msg_data                  OUT  NOCOPY   VARCHAR2
351   ) IS
352 
353    l_api_name          VARCHAR2(30) := 'get_contract_terms';
354    l_module            VARCHAR2(250) := G_MODULE || l_api_name;
355    l_expert_enabled    VARCHAR2(1);
356    l_template_applied_yn VARCHAR2(1);
357 
358    l_expert_enabled_yn VARCHAR2(1);
359    l_ce_profile_option_enabled VARCHAR2(1);
360 
361    l_config_header_id  NUMBER;
362    l_config_rev_nbr    NUMBER;
363 
364    l_cz_xml_init_msg   VARCHAR2(2000);
365    l_xml_terminate_msg LONG;
366 
367    l_valid_config      VARCHAR2(10);
368    l_complete_config   VARCHAR2(10);
369    l_new_config_header_id NUMBER;
370    l_new_config_rev_nbr   NUMBER;
371 
372    l_count_articles_dropped NUMBER;
373    l_tmpl_id_on_doc NUMBER;
374 
375    --Added for Bug 4929199
376    l_tmpl_lang_on_doc VARCHAR2(4);
377    l_tmpl_lang_passed VARCHAR2(4);
378    l_quote_status    NUMBER;
379 
380    --Added for Bug 5344832
381    l_tmpl_id_for_bv NUMBER;
382 
383    CURSOR csr_expert_enabled IS
384    SELECT (nvl(contract_expert_enabled, 'N'))
385      FROM   okc_terms_templates_all
386      WHERE  template_id = p_template_id;
387 
388    --cursor added for Bug#5012622
389    CURSOR csr_tmpl_id_on_doc IS
390    SELECT template_id
391      FROM okc_template_usages
392      WHERE document_type = p_document_type
393      AND document_id = p_document_id;
394 
395    --cursor added for Bug#4929199
396    CURSOR csr_tmpl_lang (p_template_id NUMBER) IS
397    SELECT language
398      FROM okc_terms_templates_all
399      WHERE template_id = p_template_id;
400 
401    --cursor added for Bug#4929199
402    CURSOR csr_quote_status IS
403    SELECT quote_status_id
404     FROM  aso_quote_headers
405     WHERE quote_header_id = p_document_id;
406 
407 BEGIN
408   x_return_status := FND_API.G_RET_STS_SUCCESS;
409 
410 
411   IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
412         FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
413                        G_MODULE || l_api_name,
414                        '100: Entered ' || G_PKG_NAME  || '.' || l_api_name);
415         FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
416 	               G_MODULE || l_api_name,
417 	                    'Parameters : ');
418 	  FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
419 	               G_MODULE || l_api_name,
420 	               'p_document_id : ' || p_document_id);
421 	  FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
422 	               G_MODULE || l_api_name,
423 	               'p_document_type : ' || p_document_type);
424 	  FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
425 	               G_MODULE || l_api_name,
426 	               'p_called_from_ui : ' || p_called_from_ui);
427 	  FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
428 	               G_MODULE || l_api_name,
429 	               'p_document_number : ' || p_document_number);
430         FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
431 	               G_MODULE || l_api_name,
432                        'p_template_id : ' || p_template_id);
433         FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
434 	               G_MODULE || l_api_name,
435 	                  'p_run_xprt_flag : ' || p_run_xprt_flag);
436   END IF;
437 
438   -- Expert has to be run only when p_run_xprt_flag is Yes
439   IF p_run_xprt_flag = 'Y' THEN
440 
441   -- Is Contract Expert profile option enabled?
442   FND_PROFILE.GET(name=> 'OKC_K_EXPERT_ENABLED', val => l_ce_profile_option_enabled );
443 
444    -- Is Template enabled for Expert?
445    OPEN csr_expert_enabled;
446    FETCH csr_expert_enabled INTO l_expert_enabled;
447    CLOSE csr_expert_enabled;
448 
449    --get template id on doc.
450    --l_tmpl_id_on_doc will not be null if already terms are instantiated on the doc
451    OPEN csr_tmpl_id_on_doc ;
452    FETCH csr_tmpl_id_on_doc INTO l_tmpl_id_on_doc;
453    CLOSE csr_tmpl_id_on_doc ;
454 
455    --Added for Bug 4929199
456    OPEN csr_tmpl_lang (p_template_id) ;
457    FETCH csr_tmpl_lang INTO l_tmpl_lang_passed;
458    CLOSE csr_tmpl_lang ;
459 
460    --Added for Bug 4929199
461    OPEN csr_tmpl_lang (l_tmpl_id_on_doc) ;
462    FETCH csr_tmpl_lang INTO l_tmpl_lang_on_doc;
463    CLOSE csr_tmpl_lang ;
464 
465    --cursor added for Bug#4929199
466    OPEN csr_quote_status;
467    FETCH csr_quote_status INTO l_quote_status;
468    CLOSE csr_quote_status;
469 
470    --Logging local variables
471     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
472                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
473                             G_MODULE || l_api_name,
474                             '100: Is expert enabled : ' ||l_expert_enabled );
475                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
476                             G_MODULE || l_api_name,
477                             '100: template id on doc : ' ||l_tmpl_id_on_doc );
478 		    FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
479                             G_MODULE || l_api_name,
480                             '100: template id passed: ' ||p_template_id);
481                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
482                             G_MODULE || l_api_name,
483                             '100: l_tmpl_lang_on_doc : ' ||l_tmpl_lang_on_doc );
484                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
485                             G_MODULE || l_api_name,
486                             '100: l_tmpl_lang_passed : ' ||l_tmpl_lang_passed );
487                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
488                             G_MODULE || l_api_name,
489                             '100: document status : ' ||l_quote_status );
490                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
491                             G_MODULE || l_api_name,
492                             '100: l_ce_profile_option_enabled : ' ||l_ce_profile_option_enabled);
493     END IF;
494 
495     --Bug 5292348 whether template is expert enabled or not,if template id on doc is null
496     --then copy_terms should be called.
497     --Bug#5012622 Added new OR condition at below stmt
498     --Added additional check for Bug 4929199
499     IF ((l_tmpl_id_on_doc is null) or
500         (l_tmpl_id_on_doc <> p_template_id and
501          l_tmpl_lang_on_doc <> l_tmpl_lang_passed and
502          l_quote_status = 28       -- 28 means quote status =  'STORE DRAFT'
503         )
504        ) THEN
505             IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
506                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
507                             G_MODULE || l_api_name,
508                             '120: Calling copy_terms' );
509             END IF;
510             OKC_TERMS_COPY_GRP.copy_terms(
511               p_api_version   		=> p_api_version,
512               x_return_status 		=> x_return_status,
513               x_msg_data      		=> x_msg_data,
514               x_msg_count     		=> x_msg_count,
515               p_commit        		=> FND_API.G_TRUE,
516               p_template_id             => p_template_id,
517               p_target_doc_type         => p_document_type,
518               p_target_doc_id           => p_document_id,
519               p_article_effective_date  => sysdate,
520               p_validation_string       => NULL
521             );
522 
523 
524             IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
525 	         RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
526 	       ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
527 	         RAISE FND_API.G_EXC_ERROR ;
528             END IF;
529     -- Begin: Added for bug 5344832
530           l_tmpl_id_for_bv := p_template_id;
531     ELSE
532           l_tmpl_id_for_bv := l_tmpl_id_on_doc;
533     -- End: Added for bug 5344832
534     END IF;
535 
536 
537   -- Begin Fix for bug 4919069. Added if Condition before running expert
538   -- if the template is expert enabled and Expert profile option is 'Y'
539   IF (upper(l_ce_profile_option_enabled) = 'Y') THEN
540 
541     IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
542                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
543                             G_MODULE || l_api_name,
544                             '130: Before calling get_current_config_dtls ' );
545 		    FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
546                             G_MODULE || l_api_name,
547                             '130: l_tmpl_id_for_bv '||l_tmpl_id_for_bv  );
548 
549     END IF;
550 
551     OKC_XPRT_UTIL_PVT.get_current_config_dtls (
552        p_api_version               => p_api_version,
553        p_init_msg_list             => p_init_msg_list,
554        p_document_type             => p_document_type,
555        p_document_id               => p_document_id,
556        p_template_id               => l_tmpl_id_for_bv, -- Changed from p_template_id for bug 5344832
557        x_expert_enabled_yn         => l_expert_enabled_yn,
558        x_config_header_id          => l_config_header_id,
559        x_config_rev_nbr            => l_config_rev_nbr,
560        x_return_status             => x_return_status,
561        x_msg_count                 => x_msg_count,
562        x_msg_data                  => x_msg_data
563       );
564 
565     IF( upper(l_expert_enabled) = 'Y' OR
566        (upper(l_expert_enabled) = 'N' and    -- Bug 5348970 run expert if already it is ran on doc
567         l_config_header_id IS NOT NULL and
568         l_config_rev_nbr IS NOT NULL
569        )
570       ) THEN
571 
572      IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
573                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
574                             G_MODULE || l_api_name,
575                             '140: Before running CE' );
576 		    FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
577                             G_MODULE || l_api_name,
578                             '140: l_config_header_id '||l_config_header_id );
579                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
580                             G_MODULE || l_api_name,
581                             '140: l_config_rev_nbr '||l_config_rev_nbr );
582      END IF;
583 
584      OKC_XPRT_UTIL_PVT.build_cz_xml_init_msg(
585                        p_api_version      => p_api_version,
586                        p_init_msg_list    => p_init_msg_list,
587                        p_document_id      => p_document_id,
588                        p_document_type    => p_document_type,
589                        p_config_header_id => l_config_header_id,
590                        p_config_rev_nbr   => l_config_rev_nbr,
591                        p_template_id      => l_tmpl_id_for_bv, -- Changed from p_template_id for bug 5344832
592                        x_cz_xml_init_msg  => l_cz_xml_init_msg,
593                        x_return_status    => x_return_status,
594                        x_msg_data         => x_msg_data,
595                        x_msg_count        => x_msg_count);
596 
597 
598      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS OR l_cz_xml_init_msg IS NULL)
599      THEN
600         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
601      END IF;
602 
603      IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
604                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
605                             G_MODULE || l_api_name,
606                             '150: before calling batch_validate' );
607      END IF;
608      OKC_XPRT_CZ_INT_PVT.batch_validate(
609                        p_api_version          => p_api_version,
610                        p_init_msg_list        => p_init_msg_list,
611                        p_cz_xml_init_msg      => l_cz_xml_init_msg,
612                        x_cz_xml_terminate_msg => l_xml_terminate_msg, -- this has been converted
613                                                                       -- internally from
614                                                                       -- HTML_PIECES to LONG.
615                        x_return_status        => x_return_status,
616                        x_msg_data             => x_msg_data,
617                        x_msg_count            => x_msg_count);
618 
619 
620      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS OR l_xml_terminate_msg IS NULL)
621      THEN
622          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
623      END IF;
624 
625      -- To parse x_cz_xml_terminate_msg and check if the CZ batch validate
626      -- was successful. If batch validate was successful, it would return
627      -- the new config_header_id and config_revision_number
628      IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
629                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
630                             G_MODULE || l_api_name,
631                             '160: before calling parse_cz_xml_terminate_msg');
632      END IF;
633 
634      OKC_XPRT_UTIL_PVT.parse_cz_xml_terminate_msg(
635                        p_api_version          => p_api_version,
636                        p_init_msg_list        => p_init_msg_list,
637                        p_cz_xml_terminate_msg => l_xml_terminate_msg,
638                        x_valid_config         => l_valid_config,
639                        x_complete_config      => l_complete_config,
640                        x_config_header_id     => l_new_config_header_id,
641                        x_config_rev_nbr       => l_new_config_rev_nbr,
642                        x_return_status        => x_return_status,
643                        x_msg_data             => x_msg_data,
644                        x_msg_count            => x_msg_count);
645 
646      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
647      THEN
648          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
649      END IF;
650 
651      IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
652                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
653                             G_MODULE || l_api_name,
654                             '170: before calling update_ce_config');
655      END IF;
656 
657      OKC_XPRT_UTIL_PVT.update_ce_config
658        (
659         p_api_version                  => p_api_version,
660         p_init_msg_list                => p_init_msg_list,
661         p_document_id                  => p_document_id,
662         p_document_type                => p_document_type,
663         p_config_header_id             => l_new_config_header_id,
664         p_config_rev_nbr               => l_new_config_rev_nbr,
665         p_doc_update_mode              => 'NORMAL',
666         x_count_articles_dropped       => l_count_articles_dropped,
667         x_return_status                => x_return_status,
668         x_msg_count                    => x_msg_count,
669         x_msg_data                     => x_msg_data
670        );
671 
672      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
673      THEN
674          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
675      END IF;
676 
677     END IF; -- if l_expert_enabled is Yes
678 
679    END IF; -- if l_ce_profile_option_enabled = 'Y'
680 
681   END IF; -- if p_run_exprt_flag
682 
683   IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
684                 FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
685                             G_MODULE || l_api_name,
686                             '200: deleting empty sections' );
687   END IF;
688 
689   delete_empty_sections (
690 	          p_api_version    	=> p_api_version,
691 	          p_init_msg_list       => p_init_msg_list,
692 	          p_document_type       => p_document_type,
693 	          p_document_id         => p_document_id,
694 	          p_template_id         => l_tmpl_id_for_bv, -- Changed from p_template_id for bug 5344832
695 	          p_document_number     => p_document_number,
696 	          x_return_status       => x_return_status,
697 	          x_msg_count           => x_msg_data,
698 	          x_msg_data            => x_msg_data
699       );
700 
701    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
702 	      RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
703    ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
704 	      RAISE FND_API.G_EXC_ERROR ;
705    END IF;
706 
707 
708   -- end debug log
709   IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
710        FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
711                       G_MODULE || l_api_name,
712                       '1000: Leaving ' || G_PKG_NAME  || '.' || l_api_name);
713   END IF;
714 
715   COMMIT WORK;
716 
717   EXCEPTION
718 
719      WHEN FND_API.G_EXC_ERROR THEN
720            IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
721               FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
722                              G_MODULE || l_api_name,
723                              '2000: Leaving ' || G_PKG_NAME  || '.' || l_api_name);
724            END IF;
725 
726          		x_return_status := FND_API.G_RET_STS_ERROR ;
727          		FND_MSG_PUB.Count_And_Get(
728          		        p_count => x_msg_count,
729                  		p_data => x_msg_data
730          		);
731 
732      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
733            IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
734               FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
735                              G_MODULE || l_api_name,
736                              '3000: Leaving ' || G_PKG_NAME  || '.' || l_api_name);
737            END IF;
738 
739          		x_return_status := FND_API.G_RET_STS_ERROR ;
740          		FND_MSG_PUB.Count_And_Get(
741          		        p_count => x_msg_count,
742                  		p_data => x_msg_data
743          		);
744 
745      WHEN OTHERS THEN
746            IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
747               FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE ,
748                              G_MODULE || l_api_name,
749                              '4000: Leaving ' || G_PKG_NAME  || '.' || l_api_name);
750            END IF;
751 
752          		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
753 
754            		IF FND_MSG_PUB.Check_Msg_Level
755          		   (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
756          		THEN
757              	    	FND_MSG_PUB.Add_Exc_Msg(
758              	    	     G_PKG_NAME  	    ,
759              	    	     l_api_name
760          	    	      );
761          		END IF;
762 
763          		FND_MSG_PUB.Count_And_Get(
764          		     p_count => x_msg_count,
765                  	     p_data => x_msg_data);
766 
767 
768 
769  END get_contract_terms;
770 
771 END OKC_XPRT_INT_GRP ;