DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_OC_INT_SALESCDT_PVT

Source


1 Package body OKC_OC_INT_SALESCDT_PVT AS
2 /*  $Header: OKCRSCTB.pls 120.2 2006/03/01 13:46:28 smallya noship $   */
3 
4 	l_debug VARCHAR2(1) := NVL(FND_PROFILE.VALUE('AFLOG_ENABLED'),'N');
5 /**************************************************************
6    Processing:
7 
8 
9    For order to contract:
10    ...
11    Details for order to contract as follows:
12 
13    For quote to contract:
14    OKC_OC_INT_QTK_PVT.create_k_from_quote calls this package through
15    a single call to OKC_OC_INT_SALESCDT_PVT.create_k_sales_credit passing
16    as parameters the contract header id, quote header id and
17    PL/SQL table p_rel_tab which has contract lines along
18    with related order lines.
19 
20    Details for quote to contract as follows:
21 
22     --<<GET SALES CREDIT INFORMATION>>
23       --call get_sales_credit() with header level parameters
24       --this does the following:-
25       --get sales credit information from ASO or ONT at the HEADER level
26       --and store it in global PL/SQL table g_sales_credit_tab
27 
28       --call get_sales_credit () with line level parameters this time
29       --this does the following:-
30       --get sales credit information from ASO or ONT at the LINE level
31       --and append it to global PL/SQL table g_sales_credit_tab which will then
32       --contain BOTH header AND line level information
33 
34       --call OKC_SALES_CREDIT_PVT.create_sales_credit()
35       --this puts sales credits information in OKC
36     --<<END OF GETTING SALES CREDIT INFORMATION>>
37 
38 
39 
40    The OKX related quote pricing views concerned are:
41    okx_qte_sls_credits_v
42 
43 
44 Flow:
45 |---OKC_OC_INT_SALESCDT_PVT.create_k_sales_credit()
46     |    |---get_sales_credit() called twice at header level AND line level
47     |    |    |---get_sales_credit_tab() at header level OR line level
48     |    |        (as called)
49     |    |---OKC_SALES_CREDIT_PVT.create_sales_credit
50 
51  **************************************************************/
52   --sales credits
53   g_sales_credit_tab   OKC_SALES_CREDIT_PVT.scrv_tbl_type;
54   lx_sales_credit_tab  OKC_SALES_CREDIT_PVT.scrv_tbl_type;
55 
56 
57   -- cursor to retrieve the contract number against a given contract id
58   -- this cursor is used to include the contract number in error messages
59   CURSOR c_knumber (c_k_id NUMBER) IS
60   SELECT contract_number
61   FROM   okc_k_headers_b
62   WHERE  id = c_k_id;
63 
64   -- cursor to retrieve the order number against a given order id
65   -- this cursor is used to include the order number in error messages
66   CURSOR c_onumber (c_o_id NUMBER) IS
67   SELECT TO_CHAR(order_number)
68   FROM   okx_order_headers_v
69   WHERE  id1 = c_o_id;
70 
71   -- cursor to retrieve the quote number against a given quote id
72   -- this cursor is used to include the quote number in error messages
73   CURSOR c_qnumber (c_q_id NUMBER) IS
74   SELECT TO_CHAR(quote_number)
75   FROM   okx_quote_headers_v
76   WHERE  id1 = c_q_id;
77 
78   -- used for including in error messages
79   l_order_number                 VARCHAR2(120) := OKC_API.G_MISS_CHAR;
80   l_quote_number                 VARCHAR2(120) := OKC_API.G_MISS_CHAR;
81 
82   -----------------------------------------------------------------------------
83   -- Procedure:           print_error
84   -- Returns:
85   -- Purpose:             Print the last error which occured
86   -- In Parameters:       pos    position on the line to print the message
87   -- Out Parameters:
88 
89   PROCEDURE print_error(pos IN NUMBER) IS
90        x_msg_count NUMBER;
91        x_msg_data  VARCHAR2(1000);
92   BEGIN
93      IF okc_util.l_trace_flag OR okc_util.l_log_flag THEN
94            FND_MSG_PUB.Count_And_Get ( p_count       =>      x_msg_count,
95 				       p_data          =>         x_msg_data
96                                       );
97            IF (l_debug = 'Y') THEN
98               okc_util.print_trace(pos, '==EXCEPTION=================');
99            END IF;
100            x_msg_data := fnd_msg_pub.get( p_msg_index => x_msg_count,
101                                           p_encoded   => 'F'
102 				        );
103            IF (l_debug = 'Y') THEN
104               okc_util.print_trace(pos, 'Message      : '||x_msg_data);
105               okc_util.print_trace(pos, '============================');
106            END IF;
107       END IF;
108    END print_error;
109 
110 
111 
112    ----------------------------------------------------------------------------
113    -- Procedure:           Cleanup()
114    -- Returns:
115    -- Purpose:             Delete pl/sql tables, so that they are not reused
116    --                      when a connection is used by another client
117    -- In Parameters:       No Parameters
118    -- Out Parameters:      x_return_status     Varchar2
119    -----------------------------------------------------------------------------
120    PROCEDURE cleanup(x_return_status OUT NOCOPY varchar2 ) IS
121    BEGIN
122      IF (l_debug = 'Y') THEN
123         okc_util.print_trace(1, '>START - OKC_OC_INT_SALESCDT_PVT.CLEANUP - Initialize global PL/SQL Tables');
124         okc_util.print_trace(1, ' ');
125      END IF;
126 
127      x_return_status := OKC_API.G_RET_STS_SUCCESS;
128 
129      IF (l_debug = 'Y') THEN
130         okc_util.print_trace(2, 'Cleaning up plsql tables');
131      END IF;
132 
133      --sales credits
134      g_sales_credit_tab.DELETE;
135      lx_sales_credit_tab.DELETE;
136 
137      IF (l_debug = 'Y') THEN
138         okc_util.print_trace(2, 'Done Cleaning up');
139         okc_util.print_trace(1, '<END - OKC_OC_INT_SALESCDT_PVT.CLEANUP - Initialize global PL/SQL Tables');
140      END IF;
141    EXCEPTION
142    WHEN OTHERS THEN
143       OKC_API.set_message(G_APP_NAME,
144                         G_UNEXPECTED_ERROR,
145                         G_SQLCODE_TOKEN,
146                         SQLCODE,
147                         G_SQLERRM_TOKEN,
148                         SQLERRM);
149     x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
150    END cleanup;
151 
152 
153 
154   ---------------------------------------------------------------------------
155   --Procedure to create contract sales credit information at the header and line levels
156   ----------------------------------------------------------------------------
157 -- Bug : 1686001 Changed references to ASO_QUOTE_HEADERS_ALL.QUOTE_HEADER_ID to OKX_QUOTE_HEADERS_V.ID1
158   PROCEDURE create_k_sales_credit (
159     x_return_status               OUT NOCOPY VARCHAR2,
160 
161     p_chr_id                      IN  OKC_K_HEADERS_B.ID%TYPE,
162     p_o_flag                      IN  VARCHAR2 ,
163     p_ohr_id                      IN  NUMBER ,
164     p_q_flag                      IN  VARCHAR2 ,
165     p_qhr_id                      IN  OKX_QUOTE_HEADERS_V.ID1%TYPE
166                                       ,
167     p_line_inf_tab                IN  OKC_OC_INT_CONFIG_PVT.line_inf_tbl_type
168 
169     -- this PL/SQL table has quote (or order) lines against contract lines
170 
171   ) IS
172 
173     i      BINARY_INTEGER := 0;
174 
175     l_api_version         NUMBER := 1;
176     lx_msg_count          NUMBER;
177     lx_msg_data           VARCHAR2(2000);
178 
179     l_return_status	  VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
180 
181   BEGIN
182     x_return_status := l_return_status;
183 
184 
185     IF (l_debug = 'Y') THEN
186        OKC_UTIL.print_trace(1, ' ');
187        OKC_UTIL.print_trace(1, '================================================');
188        OKC_UTIL.print_trace(1, 'INITIALIZE GLOBAL PLSQL TABLES                  ');
189        OKC_UTIL.print_trace(1, '================================================');
190        OKC_UTIL.print_trace(1, ' ');
191        OKC_UTIL.print_trace(1, ' ');
192     END IF;
193 
194     cleanup(x_return_status => l_return_status);
195     IF l_return_status  <> OKC_API.G_RET_STS_SUCCESS THEN
196        RAISE G_EXCEPTION_HALT_VALIDATION;
197     ELSE
198        x_return_status := l_return_status;
199     END IF;
200 
201 
202     IF (l_debug = 'Y') THEN
203        OKC_UTIL.print_trace(1, ' ');
204        OKC_UTIL.print_trace(1, 'Create Contract Sales Credit');
205        OKC_UTIL.print_trace(1, '-----------------------------------------------');
206        OKC_UTIL.print_trace(1, '>START - ******* OKC_OC_INT_SALESCDT_PVT.create_k_sales_credit  -');
207     END IF;
208 
209 
210     --<<begin getting sales credit information>>
211 
212     --get sales credit information from ASO or ONT at the HEADER level
213     --and store it in global PL/SQL table g_sales_credit_tab
214     IF (l_debug = 'Y') THEN
215        OKC_UTIL.print_trace(2, 'Calling get_sales_credit at HEADER level-');
216        OKC_UTIL.print_trace(2, 'Contract Id- '|| p_chr_id);
217        OKC_UTIL.print_trace(2, 'Quote Id - '|| p_qhr_id);
218        OKC_UTIL.print_trace(2, 'Order Id - '|| p_ohr_id);
219     END IF;
220     get_sales_credit (
221            p_chr_id         =>  p_chr_id,
222            p_q_flag         =>  p_q_flag,
223            p_qhr_id         =>  p_qhr_id,
224            p_o_flag         =>  p_o_flag,
225            p_ohr_id         =>  p_ohr_id
226      );
227     IF (l_debug = 'Y') THEN
228        OKC_UTIL.print_trace(2, 'Header level call to get_sales_credit finished successfully');
229        OKC_UTIL.print_trace(2, 'Output in global PL/SQL table g_sales_credit_tab');
230     END IF;
231 
232 
233     --get sales credit information from ASO or ONT at the LINE level
234     --and append it to global PL/SQL table g_sales_credit_tab which will then
235     --contain BOTH header AND line level information
236     IF (l_debug = 'Y') THEN
237        OKC_UTIL.print_trace(2, 'Calling get_sales_credit at LINE level-');
238        OKC_UTIL.print_trace(2, 'Contract Id- '|| p_chr_id);
239        OKC_UTIL.print_trace(2, 'Quote Id - '|| p_qhr_id);
240        OKC_UTIL.print_trace(2, 'Order Id - '|| p_ohr_id);
241        OKC_UTIL.print_trace(2, 'PL/SQL table p_line_inf_tab- related quote or order lines and contract lines');
242     END IF;
243     get_sales_credit (
244            p_chr_id         =>  p_chr_id,
245            p_q_flag         =>  p_q_flag,
246            p_qhr_id         =>  p_qhr_id,
247            p_o_flag         =>  p_o_flag,
248            p_ohr_id         =>  p_ohr_id,
249            p_line_inf_tab   =>  p_line_inf_tab
250      );
251     IF (l_debug = 'Y') THEN
252        OKC_UTIL.print_trace(2, 'Line level call to get_sales_credit finished successfully');
253        OKC_UTIL.print_trace(2, 'Output in global PL/SQL table g_sale_credits_tab');
254     END IF;
255 
256     --now put this sales credits information in OKC
257     IF (l_debug = 'Y') THEN
258        OKC_UTIL.print_trace(2, ' >Calling OKC_SALES_CREDIT_PVT.create_sales_credit');
259        OKC_UTIL.print_trace(2, 'input p_scrv_tbl  => g_sales_credit_tab');
260     END IF;
261     IF g_sales_credit_tab.FIRST IS NOT NULL THEN
262 
263         OKC_SALES_CREDIT_PVT.create_sales_credit(
264 	   p_api_version	=> l_api_version,
265            p_init_msg_list	=> OKC_API.G_FALSE,
266            x_return_status 	=> l_return_status,
267            x_msg_count     	=> lx_msg_count,
268            x_msg_data      	=> lx_msg_data,
269            p_scrv_tbl           => g_sales_credit_tab,     --IN:   ASO or ONT
270            x_scrv_tbl           => lx_sales_credit_tab); --OUT:  OKC
271 
272 
273         IF (l_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
274             -- get quote or order number to display in error message
275             IF p_qhr_id IS NOT NULL THEN
276                  BEGIN
277                     OPEN c_qnumber(p_qhr_id);
278                     FETCH c_qnumber INTO l_quote_number;
279                     CLOSE c_qnumber;
280                  EXCEPTION
281 	         WHEN OTHERS THEN
282 	             NULL;
283                  END;
284             ELSIF p_ohr_id IS NOT NULL THEN
285                  BEGIN
286                     OPEN c_onumber(p_ohr_id);
287                     FETCH c_onumber INTO l_order_number;
288                     CLOSE c_onumber;
289                  EXCEPTION
290 	         WHEN OTHERS THEN
291 	             NULL;
292                  END;
293             END IF;
294 
295             -- put error message on stack
296             --Sales Credit information from ASO or ONT table was not
297             --                                                created in OKC.
298             IF p_q_flag = OKC_API.G_TRUE THEN
299                OKC_API.set_message(p_app_name      => G_APP_NAME,
300                    p_msg_name      => 'OKC_Q2K_NOSALESCDT',
301                    p_token1        => 'QNUMBER',
302                    p_token1_value  => l_quote_number);
303             ELSIF p_o_flag = OKC_API.G_TRUE THEN
304                OKC_API.set_message(p_app_name      => G_APP_NAME,
305                    p_msg_name      => 'OKC_Q2K_NOSALESCDT_ORD',
306                    p_token1        => 'ONUMBER',
307                    p_token1_value  => l_order_number);
308             END IF;
309             print_error(2);
310 
311 
312             IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
313                 ----x_return_status := l_return_status;
314                 ----RAISE G_EXCEPTION_HALT_VALIDATION;
315                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
316             ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
317                 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
318             ELSE
319                 x_return_status := l_return_status;
320             END IF;
321         END IF;
322     END IF;
323 
324     IF (l_debug = 'Y') THEN
325        OKC_UTIL.print_trace(2, ' >Call to OKC_SALES_CREDIT_PVT.create_sales_credit finished successfully');
326     END IF;
327     --<<end of getting sales credit information>>
328     -----------------------------------------------
329 
330 
331     IF (l_debug = 'Y') THEN
332        OKC_UTIL.print_trace(1, '>END - ******* OKC_OC_INT_SALESCDT_PVT.create_k_sales_credit  -');
333     END IF;
334 
335 
336   EXCEPTION
337     WHEN OKC_API.G_EXCEPTION_ERROR THEN
338       -- store SQL error message on message stack for caller
339       OKC_API.set_message(G_APP_NAME, G_ERROR,G_SQLCODE_TOKEN,SQLCODE,G_SQLERRM_TOKEN,SQLERRM);
340       print_error(1);
341 
342       -- notify caller of an error
343       x_return_status := OKC_API.G_RET_STS_ERROR;
344 
345 
346     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
347       -- store SQL error message on message stack for caller
348       OKC_API.set_message(G_APP_NAME, G_UNEXPECTED_ERROR,G_SQLCODE_TOKEN,SQLCODE,G_SQLERRM_TOKEN,SQLERRM);
349       print_error(1);
350 
351       -- notify caller of an UNEXPECTED error
352       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
353 
354 
355     WHEN OTHERS THEN
356       -- store SQL error message on message stack for caller
357       OKC_API.set_message(G_APP_NAME, G_UNEXPECTED_ERROR,G_SQLCODE_TOKEN,SQLCODE,G_SQLERRM_TOKEN,SQLERRM);
358       print_error(1);
359 
360       -- notify caller of an UNEXPECTED error
361       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
362 
363   END create_k_sales_credit;
364 
365 
366 
367   ----------------------------------------------------------------------------
368   -- Procedure creates sales credit information in OKC from
369   -- ASO or ONT sales credit
370   ----------------------------------------------------------------------------
371 -- Bug : 1686001 Changed references to ASO_QUOTE_HEADERS_ALL.QUOTE_HEADER_ID to OKX_QUOTE_HEADERS_V.ID1
372   PROCEDURE get_sales_credit(
373     p_chr_id                    IN  NUMBER,
374     p_q_flag                    IN  VARCHAR2 ,
375     p_qhr_id                    IN  OKX_QUOTE_HEADERS_V.ID1%TYPE
376                                     ,
377     p_o_flag                    IN  VARCHAR2 ,
378     p_ohr_id                    IN  NUMBER ,
379     p_line_inf_tab              IN  OKC_OC_INT_CONFIG_PVT.line_inf_tbl_type
380 
381     ) IS
382 
383     i                           BINARY_INTEGER := 0;
384 
385   BEGIN
386     IF (l_debug = 'Y') THEN
387        OKC_UTIL.print_trace(3, 'START --> get_sales_credit- ');
388        OKC_UTIL.print_trace(3, 'Contract Id - '|| p_chr_id);
389        OKC_UTIL.print_trace(3, 'Quote Id - '|| p_qhr_id);
390        OKC_UTIL.print_trace(3, 'Order Id - '|| p_ohr_id);
391     END IF;
392 
393     --get all the sales credit for the quote header (or order header)
394     --for processing at the header level
395     --and store them in global PL/SQL table g_sales_credit_tab
396     IF p_q_flag = OKC_API.G_TRUE AND p_qhr_id IS NOT NULL AND p_qhr_id <> OKC_API.G_MISS_NUM AND
397        p_line_inf_tab.FIRST IS NULL
398     THEN
399        IF (l_debug = 'Y') THEN
400           OKC_UTIL.print_trace(3, 'Calling get_sales_credit_tab with p_chr_id and p_qhr_id/p_ohr_id for processing at header level');
401        END IF;
402        -- get_sales_credit_tab stores it's output in g_sales_credit_tab
403        get_sales_credit_tab(p_chr_id    =>  p_chr_id,
404                     p_q_flag    =>  p_q_flag,
405                     p_qhr_id    =>  p_qhr_id
406                    );
407        IF (l_debug = 'Y') THEN
408           OKC_UTIL.print_trace(3, 'Call to get_sales_credit_tab finished successfully');
409        END IF;
410 
411     ELSIF p_o_flag = OKC_API.G_TRUE AND p_ohr_id IS NOT NULL AND p_ohr_id <> OKC_API.G_MISS_NUM AND
412           p_line_inf_tab.FIRST IS NULL
413     THEN
414          IF (l_debug = 'Y') THEN
415             OKC_UTIL.print_trace(3, 'Calling get_sales_credit_tab with p_chr_id and p_qhr_id/p_ohr_id for processing at header level');
416          END IF;
417           -- get_sales_credit_tab stores it's output in g_sales_credit_tab
418           get_sales_credit_tab(p_chr_id    =>  p_chr_id,
419                        p_o_flag    =>  p_o_flag,
420                        p_ohr_id    =>  p_ohr_id
421 		      );
422          IF (l_debug = 'Y') THEN
423             OKC_UTIL.print_trace(3, 'Call to get_sales_credit_tab finished successfully');
424          END IF;
425     END IF;
426 
427 
428 
429     --get all the sales credits for each quote line (or order line)
430     --and store them all in global PL/SQL table g_sales_credit_tab
431     --keeping intact the header level information that g_sales_credit_tab may
432     --already contain.
433     IF p_line_inf_tab.FIRST IS NOT NULL THEN
434        IF (l_debug = 'Y') THEN
435           OKC_UTIL.print_trace(3, 'Calling get_sales_credit_tab with p_chr_id and p_qhr_id/p_ohr_id    and p_line_inf_tab for processing at line level');
436        END IF;
437 
438        i := p_line_inf_tab.FIRST;
439        WHILE i IS NOT NULL LOOP
440 	  IF p_q_flag = OKC_API.G_TRUE AND p_qhr_id IS NOT NULL AND p_qhr_id <> OKC_API.G_MISS_NUM AND
441              p_line_inf_tab(i).line_type <> OKC_OC_INT_CONFIG_PVT.G_BASE_LINE THEN
442           -- get SALES CREDITS information from ASO tables
443                 -- get_sales_credit_tab stores it's output in g_sales_credit_tab
444                 get_sales_credit_tab(p_chr_id    =>  p_chr_id,
445                              p_q_flag    => p_q_flag,
446                              p_qhr_id    => p_qhr_id,
447                              p_cle_id    => p_line_inf_tab(i).cle_id,
448                              p_qle_id    => p_line_inf_tab(i).object1_id1
449 			     );
450           ELSIF p_o_flag = OKC_API.G_TRUE AND p_ohr_id IS NOT NULL AND p_ohr_id <> OKC_API.G_MISS_NUM AND
451                 p_line_inf_tab(i).line_type <> OKC_OC_INT_CONFIG_PVT.G_BASE_LINE THEN
452           -- get SALES CREDITS information from ONT tables
453                 -- get_sales_credit_tab stores it's output in g_sales_credit_tab
454                 get_sales_credit_tab(p_chr_id    =>  p_chr_id,
455                              p_o_flag    => p_o_flag,
456                              p_ohr_id    => p_ohr_id,
457                              p_cle_id    => p_line_inf_tab(i).cle_id,
458                              p_ole_id    => p_line_inf_tab(i).object1_id1
459 		             );
460           END IF;
461 
462           i := p_line_inf_tab.NEXT(i);
463        END LOOP;
464     END IF;
465 
466     IF (l_debug = 'Y') THEN
467        OKC_UTIL.print_trace(3, 'Call to get_sales_credit_tab finished successfully');
468        OKC_UTIL.print_trace(3, 'END --> get_sales_credit ');
469     END IF;
470   EXCEPTION
471     WHEN OTHERS THEN
472          RAISE OKC_API.G_EXCEPTION_ERROR;
473   END get_sales_credit;
474 
475 
476 
477     ----------------------------------------------------------------------
478     -- PROCEDURE to get SALES CREDITS information from ASO or ONT tables
479     -- get_sales_credit_tab stores it's output in global PL/SQL table g_sales_credit_tab
480     ----------------------------------------------------------------------
481 -- Bug : 1686001 Changed references to ASO_QUOTE_HEADERS_ALL.QUOTE_HEADER_ID to OKX_QUOTE_HEADERS_V.ID1
482 --                                     ASO_QUOTE_LINES_ALL.LINE_HEADER_ID to OKX_QUOTE_LINES_V.ID1
483     PROCEDURE get_sales_credit_tab(
484                 p_chr_id  IN OKC_K_HEADERS_B.ID%TYPE,
485                 p_cle_id  IN OKC_K_LINES_B.ID%TYPE ,
486 
487                 p_o_flag  IN VARCHAR2 ,
488                 p_ohr_id  IN NUMBER ,
489                 p_ole_id  IN NUMBER ,
490 
491                 p_q_flag  IN VARCHAR2 ,
492                 p_qhr_id  IN OKX_QUOTE_HEADERS_V.ID1%TYPE ,
493                 p_qle_id  IN OKX_QUOTE_LINES_V.ID1%TYPE ) IS
494 
495       l_no_data_found BOOLEAN := TRUE;
496 
497       i               BINARY_INTEGER := 0;
498 
499       -- cursor to get okx_qte_sls_credits_v   or
500       --               okx_ord_sls_credits_v information
501 -- Bug : 1686001 Changed references to ASO_QUOTE_HEADERS_ALL.QUOTE_HEADER_ID to OKX_QUOTE_HEADERS_V.ID1
502 --                                     ASO_QUOTE_LINES_ALL.LINE_HEADER_ID to OKX_QUOTE_LINES_V.ID1
503       CURSOR c_source_sales_credit_rec (cp_q_flag IN VARCHAR2,
504                         cp_qhr_id IN OKX_QUOTE_HEADERS_V.ID1%TYPE,
505                         cp_qle_id IN OKX_QUOTE_LINES_V.ID1%TYPE,
506                         cp_o_flag IN VARCHAR2,
507                         cp_ohr_id IN NUMBER,
508                         cp_ole_id IN NUMBER) IS
509       --could be either ASO or ONT
510       --only ONE of the following two queries in the union will be executed in
511       --a call depending on which flag (p_q_flag or p_o_flag) is true
512 
513       -- first query to get okx_qte_sls_credits_v information
514       SELECT a.quote_header_id source_header_id,
515        a.quote_line_id source_line_id,
516        a.percent,
517        b.id1 salesrep_id,
518        a.resource_group_id,        --no matching column in OKC
519        -----employee_person_id,  --obsolete column in ASO replace by resource id
520        a.sales_credit_type_id,
521        a.attribute_category_code,   --new column needed in OKC
522        a.object_version_number
523       FROM   okx_qte_sls_credits_v a
524             ,okx_salesreps_v       b
525       WHERE  cp_q_flag = OKC_API.G_TRUE
526         AND  a.quote_header_id = cp_qhr_id
527         AND   ((cp_qle_id = OKC_API.G_MISS_NUM AND a.quote_line_id IS NULL) OR
528                (cp_qle_id <> OKC_API.G_MISS_NUM AND a.quote_line_id = cp_qle_id))
529         AND  a.resource_id = b.resource_id
530         AND  b.org_id = SYS_CONTEXT('OKC_CONTEXT', 'ORG_ID')
531 
532       UNION ALL
533 
534       -- second query to get okx_ord_sls_credits_v information
535       SELECT header_id source_header_id,
536        line_id source_line_id,
537        percent,
538        salesrep_id,
539        -------sales_credit_type_id,
540        TO_NUMBER(NULL),
541        sales_credit_type_id,
542        TO_CHAR(NULL),
543        TO_NUMBER(NULL)    --object_version_number not present in order table
544       FROM   okx_ord_sls_credits_v
545       WHERE  cp_o_flag = OKC_API.G_TRUE
546         AND  header_id = cp_ohr_id
547         AND   ((cp_ole_id = OKC_API.G_MISS_NUM AND line_id IS NULL) OR
548                (cp_ole_id <> OKC_API.G_MISS_NUM AND line_id = cp_ole_id));
549 
550 
551       CURSOR c_get_contact_id(b_chr_id NUMBER,b_salesrep_ctrol VARCHAR2,b_object_id VARCHAR2) is
552       SELECT id
553       FROM   okc_contacts
554       WHERE  dnz_chr_id = b_chr_id
555         AND  cro_code = b_salesrep_ctrol
556         AND  object1_id1=b_object_id
557         AND  rownum = 1;
558 
559       l_supplier_role_id         OKC_K_PARTY_ROLES_B.ID%TYPE;
560       l_source_sales_credit_rec  c_source_sales_credit_rec%ROWTYPE;
561       l_return_status	         VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
562 
563     BEGIN
564 
565       IF (l_debug = 'Y') THEN
566          OKC_UTIL.print_trace(4, 'START --> get_sales_credit_tab- ');
567          OKC_UTIL.print_trace(4, 'Contract Id - '|| p_chr_id);
568          OKC_UTIL.print_trace(4, 'Contract Line Id - '|| p_cle_id);
569          OKC_UTIL.print_trace(4, 'Quote Id - '|| p_qhr_id);
570          OKC_UTIL.print_trace(4, 'Quote Line Id - '|| p_qle_id);
571          OKC_UTIL.print_trace(4, 'Order Id - '|| p_ohr_id);
572          OKC_UTIL.print_trace(4, 'Order Line Id - '|| p_ole_id);
573       END IF;
574 
575 
576       IF (p_q_flag = OKC_API.G_TRUE AND
577           p_qhr_id IS NOT NULL AND
578           p_qhr_id <> OKC_API.G_MISS_NUM) THEN
579           IF (l_debug = 'Y') THEN
580              OKC_UTIL.print_trace(4, 'Processing sales credit information for Quote Id - '|| p_qhr_id);
581           END IF;
582       ELSIF (p_o_flag = OKC_API.G_TRUE AND
583             p_ohr_id IS NOT NULL AND
584             p_ohr_id <> OKC_API.G_MISS_NUM) THEN
585             IF (l_debug = 'Y') THEN
586                OKC_UTIL.print_trace(4, 'Processing sales credit information for Order Id - '|| p_ohr_id);
587             END IF;
588       END IF;
589 
590 
591       OPEN c_source_sales_credit_rec (cp_q_flag => p_q_flag,
592                               cp_qhr_id => p_qhr_id,
593                               cp_qle_id => p_qle_id,
594                               cp_o_flag => p_o_flag,
595                               cp_ohr_id => p_ohr_id,
596                               cp_ole_id => p_ole_id); --ASO or ONT
597       LOOP
598           --use COUNT to keep adding to existing records, if any, in g_sales_credit_tab
599           --otherwise if table empty, COUNT returns 0
600           i := g_sales_credit_tab.COUNT + 1;
601           FETCH c_source_sales_credit_rec INTO l_source_sales_credit_rec;
602           EXIT WHEN c_source_sales_credit_rec%NOTFOUND;
603 
604           -- map okx_qte_sls_credits_v or
605           --     okx_ord_sls_credits_v     to OKC_K_SALES_CREDITS
606 
607 	  -- we don't need to enter the ID because it is automatically generated
608 
609           IF l_source_sales_credit_rec.source_header_id IS NOT NULL THEN
610           --quote or order
611 	      g_sales_credit_tab(i).CHR_ID := p_chr_id;
612 	      g_sales_credit_tab(i).DNZ_CHR_ID := p_chr_id;
613           END IF;
614           IF l_source_sales_credit_rec.source_line_id IS NOT NULL THEN
615           --quote or order
616 	      g_sales_credit_tab(i).CLE_ID := p_cle_id;
617 	  END IF;
618 
619           g_sales_credit_tab(i).percent := l_source_sales_credit_rec.percent;
620           IF (l_debug = 'Y') THEN
621              OKC_UTIL.print_trace(4, 'percent: '|| l_source_sales_credit_rec.percent);
622           END IF;
623 
624           /*********** contact creation no longer needed   ***********
625           --each SALESREP_ID from the quote (or order) is created as a contact
626           --in OKC_CONTACTS
627           --OKC_K_SALES_CREDITS.CTC_ID is a foreign key pointing to
628           --OKC_CONTACTS.ID
629           OPEN c_get_contact_id(p_chr_id,G_SALESREP_CTROL,l_source_sales_credit_rec.salesrep_id);
630              FETCH c_get_contact_id into g_sales_credit_tab(i).ctc_id;
631              IF c_get_contact_id%NOTFOUND then
632                  SELECT id into  l_supplier_role_id FROM OKC_K_PARTY_ROLES_B
633                                                     WHERE dnz_chr_id = p_chr_id
634                                                     AND   rle_code = 'SUPPLIER';
635 
636                  OKO_OM_INT_OTK_PVT.create_contact_for_contract(
637                        p_cro_code       => G_SALESREP_CTROL
638                       ,p_rle_code       => 'SUPPLIER'
639                       ,p_buy_or_sell    => 'S'
640                       ,p_chr_id         => p_chr_id
641                       ,p_object_id1     => l_source_sales_credit_rec.salesrep_id
642                       ,p_object_id2     => '#'
643                       ,p_contact_seq    => NULL
644                       ,p_cpl_id         => l_supplier_role_id
645                       ,x_return_status  => l_return_status
646                  );
647 
648                 --IF l_return_status <> OKC_API.G_RET_STS_SUCCESS THEN
649                 --    x_return_status := l_return_status;
650                 --END IF;
651                 IF (l_debug = 'Y') THEN
652                    okc_util.print_trace(4, 'OUTPUT RECORD - OKO_OM_INT_OTK_PVT.create_contact_for_contract :');
653                    okc_util.print_trace(4, '===============================================');
654                 END IF;
655                 --okc_util.print_trace(4, 'Status               = '||x_return_status);
656                 IF (l_debug = 'Y') THEN
657                    okc_util.print_trace(4, 'Status               = '||l_return_status);
658                 END IF;
659                 IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
660                     IF (l_debug = 'Y') THEN
661                        OKC_UTIL.print_trace(4,SQLERRM);
662                     END IF;
663                     RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
664                 ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
665                     IF (l_debug = 'Y') THEN
666                        OKC_UTIL.print_trace(4,SQLERRM);
667                     END IF;
668                     RAISE OKC_API.G_EXCEPTION_ERROR;
669                 END IF;
670 
671                 IF c_get_contact_id%ISOPEN then
672                    CLOSE c_get_contact_id;
673                    OPEN c_get_contact_id(p_chr_id,G_SALESREP_CTROL, l_source_sales_credit_rec.salesrep_id);
674                    FETCH c_get_contact_id into g_sales_credit_tab(i).ctc_id;
675                 END IF;
676 
677              END IF;
678            CLOSE c_get_contact_id;
679            **************************************************************************/
680 
681           ---obsolete column g_sales_credit_tab(i).ctc_id := l_source_sales_credit_rec.salesrep_id;
682           g_sales_credit_tab(i).salesrep_id1 := l_source_sales_credit_rec.salesrep_id;
683           g_sales_credit_tab(i).salesrep_id2 := '#';
684           IF (l_debug = 'Y') THEN
685              OKC_UTIL.print_trace(4, 'salesrep_id1: '|| l_source_sales_credit_rec.salesrep_id);
686              OKC_UTIL.print_trace(4, 'salesrep_id2: #');
687           END IF;
688 
689 
690           ----g_sales_credit_tab(i). := l_source_sales_credit_rec.resource_group_id;
691           --no matching column in OKC
692 
693           g_sales_credit_tab(i).sales_credit_type_id1 := l_source_sales_credit_rec.sales_credit_type_id;
694           g_sales_credit_tab(i).sales_credit_type_id2 := '#';
695           -----g_sales_credit. := l_source_sales_credit_rec.attribute_category_code
696           --new column needed in OKC
697           IF (l_debug = 'Y') THEN
698              OKC_UTIL.print_trace(4, 'sales_credit_type_id1: '|| l_source_sales_credit_rec.sales_credit_type_id);
699              OKC_UTIL.print_trace(4, 'sales_credit_type_id2: #');
700           END IF;
701 
702           g_sales_credit_tab(i).object_version_number := l_source_sales_credit_rec.object_version_number;
703           IF (l_debug = 'Y') THEN
704              OKC_UTIL.print_trace(4, 'object_version_number: '|| l_source_sales_credit_rec.object_version_number);
705           END IF;
706 
707       END LOOP;
708       --IF c_source_sales_credit_rec%ROWCOUNT > 0 THEN
709       --   l_no_data_found := FALSE;
710       --END IF;
711       CLOSE c_source_sales_credit_rec;
712 
713 
714 
715      --IF l_no_data_found THEN
716      --   OKC_UTIL.print_trace(4, 'END --> get_sales_credit_tab: returned error- ');
717      --   RAISE OKC_API.G_EXCEPTION_ERROR;
718      --ELSE
719         IF (l_debug = 'Y') THEN
720            OKC_UTIL.print_trace(4, 'Output: PL/SQL global table- g_sale_credits_tab');
721            OKC_UTIL.print_trace(4, 'END --> get_sales_credit_tab- ');
722         END IF;
723      --END IF;
724 
725     EXCEPTION
726     WHEN OTHERS THEN
727         IF (l_debug = 'Y') THEN
728            OKC_UTIL.print_trace(4,SQLERRM);
729         END IF;
730         IF c_source_sales_credit_rec%ISOPEN THEN
731            CLOSE c_source_sales_credit_rec;
732         END IF;
733         RAISE OKC_API.G_EXCEPTION_ERROR;
734     END get_sales_credit_tab;
735 
736 
737 
738 --  ========================================================================
739 --              START OF KTQ or KTO SALES CREDIT INFORMATION CREATION
740 --                                   or UPDATE
741 --  ========================================================================
742 
743    PROCEDURE get_sales_credit(p_chr_id     IN NUMBER,
744                         p_cle_id        IN NUMBER,
745                 --
746                         p_qhr_id        IN NUMBER,
747                         p_qle_id        IN NUMBER,
748                         p_q_flag        IN VARCHAR2,
749                 --
750                         p_ohr_id        IN NUMBER,
751                         p_ole_id        IN NUMBER,
752                         p_o_flag        IN VARCHAR2,
753                 --
754                         p_level         IN VARCHAR2,
755                 --
756                         p_nqhr_id       IN NUMBER,
757                         p_nqle_idx      IN NUMBER,
758                 --
759                         x_k_sales_credit_tab OUT NOCOPY k_sales_credit_tab_type,
760                         x_sales_credit_tab   OUT NOCOPY ASO_QUOTE_PUB.sales_credit_tbl_type) IS
761 
762 --
763 -- CURSOR to identify the sales credits which have to be deleted taking
764 -- into account those marked as to be updated or created: any quote sales
765 -- credit not yet referenced in l_sales_credit_tab will be added as to be deleted.
766 --
767 
768 CURSOR c_sales_credit (b_q_flag VARCHAR, b_qh_id NUMBER, b_ql_id NUMBER,
769 			b_o_flag VARCHAR, b_oh_id NUMBER, b_ol_id NUMBER)  IS
770 SELECT
771 	qscdt.sales_credit_id SALES_CREDIT_ID  -- quote (header or line) sales credit ID
772 FROM
773 	OKX_QTE_SLS_CREDITS_V    qscdt
774 WHERE 	b_q_flag = OKC_API.g_true
775 AND 	qscdt.quote_header_id = b_qh_id
776 AND 	((b_ql_id IS NULL AND qscdt.quote_line_id IS NULL)
777 		OR (b_ql_id IS NOT NULL AND qscdt.quote_line_id = b_ql_id))
778 UNION
779 
780 SELECT
781 	oscdt.sales_credit_id SALES_CREDIT_ID  -- order (header or line) sales credit ID
782 FROM
783 	OKX_ORD_SLS_CREDITS_V    oscdt
784 WHERE 	b_o_flag = OKC_API.g_true
785 AND 	oscdt.header_id = b_oh_id
786 AND 	((b_ol_id IS NULL AND oscdt.line_id IS NULL)
787 		OR (b_ol_id IS NOT NULL AND oscdt.line_id = b_ql_id));
788 --
789 --
790   CURSOR c_k_sales_credit( b_kh_id NUMBER,b_kl_id NUMBER,
791                         b_q_flag VARCHAR,b_qh_id NUMBER,b_ql_id NUMBER,
792                         b_o_flag VARCHAR,b_oh_id NUMBER,b_ol_id NUMBER) IS
793     SELECT
794         DECODE(qscdt.resource_id,NULL,g_aso_op_code_create,
795                 DECODE(qscdt.sales_credit_type_id,NULL,g_aso_op_code_create,
796                         DECODE(qscdt.percent,NULL,g_aso_op_code_create,g_aso_op_code_update)
797                        )
798                ) OPERATION_CODE,
799 	qscdt.sales_credit_id   sales_credit_id,  -- quote(Header or line) sales credit ID
800 --	kscdt.ctc_id,
801 	sr.resource_id,
802 	kscdt.sales_credit_type_id1,
803 	kscdt.percent,
804 	kscdt.id,				  -- contract (Header or line) sales credit ID
805 	kscdt.creation_date,
806 	kscdt.chr_id,
807 	kscdt.cle_id,
808         kscdt.last_update_date
809 --	kscdt.object_version_number
810      FROM
811 	OKC_K_SALES_CREDITS          kscdt,
812 	OKX_QTE_SLS_CREDITS_V        qscdt,
813 	OKX_SALESREPS_V		     sr
814      WHERE
815 	    b_q_flag = OKC_API.G_TRUE
816 	AND kscdt.chr_id = b_kh_id
817 	AND  ((b_kl_id IS NULL AND kscdt.cle_id IS NULL)
818 			OR (b_kl_id IS NOT NULL AND kscdt.cle_id = b_kl_id))
819 	AND qscdt.quote_header_id(+)  = b_qh_id
820 	AND NVL(qscdt. Quote_line_id(+), 0) = NVL(b_ql_id, 0)
821 --	AND qscdt.resource_id(+)= kscdt.ctc_id
822 	AND qscdt.sales_credit_type_id (+)= kscdt.sales_credit_type_id1
823 	AND qscdt.percent(+)= kscdt.percent
824 	AND sr.id1 = kscdt.salesrep_id1
825 	AND sr.id2 = kscdt.salesrep_id2
826 
827     UNION
828 
829     SELECT
830         DECODE(oscdt.salesrep_id,NULL,g_aso_op_code_create,
831                 DECODE(oscdt.sales_credit_type_id,NULL,g_aso_op_code_create,
832                         DECODE(oscdt.percent,NULL,g_aso_op_code_create,g_aso_op_code_update)
833                        )
834                ) OPERATION_CODE,
835 	oscdt.sales_credit_id   sales_credit_id,  -- order(Header or line) sales credit ID
836 --	kscdt.ctc_id,
837 --	sr.resource_id,
838 	to_number(kscdt.salesrep_id1) resource_id,
839 	kscdt.sales_credit_type_id1,
840 	kscdt.percent,
841 	kscdt.id,				  -- contract (Header or line) sales credit ID
842 	kscdt.creation_date,
843 	kscdt.chr_id,
844 	kscdt.cle_id,
845 	kscdt.last_update_date
846 --	kscdt.object_version_number
847      FROM
848 	OKC_K_SALES_CREDITS          kscdt,
849 	OKX_ORD_SLS_CREDITS_V        oscdt
850 --	OKX_SALESREPS_V		     sr
851      WHERE
852 	    b_o_flag = OKC_API.G_TRUE
853 	AND kscdt.chr_id = b_kh_id
854 	AND  ((b_kl_id IS NULL AND kscdt.cle_id IS NULL)
855 			OR (b_kl_id IS NOT NULL AND kscdt.cle_id = b_kl_id))
856 	AND oscdt.header_id(+)  = b_oh_id
857 	AND NVL(oscdt.line_id(+), 0) = NVL(b_ol_id, 0)
858 --	AND oscdt.salesrep_id(+)= kscdt.ctc_id
859 	AND oscdt.sales_credit_type_id (+)= kscdt.sales_credit_type_id1
860 	AND oscdt.percent(+)= kscdt.percent
861 --	AND sr.id1 = kscdt.salesrep_id1
862 --	AND sr.id2 = kscdt.salesrep_id2
863 ORDER BY
864 	1,
865 	3,
866 	4,
867 	5,
868 	6,
869 	7 ;
870 
871 l_prec_sls_crdt_id		NUMBER := NULL;
872 l_prec_sls_crdt_procsd 		VARCHAR2(1) := OKC_API.G_FALSE;
873 g_miss_sls_crdt_rec		c_k_sales_credit%ROWTYPE;
874 l_prec_sls_crdt_rec		c_k_sales_credit%ROWTYPE := g_miss_sls_crdt_rec;
875 l_sales_credit_insert		VARCHAR2(1) := OKC_API.G_TRUE;
876 
877 l_sales_credit_rec		ASO_QUOTE_PUB.sales_credit_rec_type;
878 l_sales_credit_tab		ASO_QUOTE_PUB.sales_credit_tbl_type;
879 l_k_sales_credit_tab		k_sales_credit_tab_type;
880 
881  x BINARY_INTEGER;
882  y BINARY_INTEGER;
883 
884 BEGIN
885 
886         IF (l_debug = 'Y') THEN
887            okc_util.print_trace(1,'---------------------------------');
888            okc_util.print_trace(1,'>> start : Get sales credit ');
889            okc_util.print_trace(1,'---------------------------------');
890         END IF;
891 
892 --
893 -- housekeeping
894 --
895  l_sales_credit_tab.DELETE;
896  l_k_sales_credit_tab.DELETE;
897 
898  x_sales_credit_tab.DELETE;
899  x_k_sales_credit_tab.DELETE;
900 
901 x := l_sales_credit_tab.COUNT;
902 y := l_k_sales_credit_tab.COUNT;
903 
904 IF x = 0 THEN
905    x:=x+1;
906 END IF;
907 
908 IF y = 0 THEN
909    y:=y+1;
910 END IF;
911 
912 --
913 -- Fill in the l_sales_credit_tab variable with sales credit to be created or updated
914 --
915 
916 FOR sales_credit_rec IN c_k_sales_credit (p_chr_id, p_cle_id,
917 				p_q_flag, p_qhr_id, p_qle_id,
918 				p_o_flag, p_ohr_id, p_ole_id ) LOOP
919 
920 l_sales_credit_insert := OKC_API.G_TRUE;
921 
922 
923 	IF sales_credit_rec.operation_code = g_aso_op_code_create THEN
924 
925 		IF (l_debug = 'Y') THEN
926    		okc_util.print_trace(1,'step 1-1 operation code = '||sales_credit_rec.operation_code);
927 		END IF;
928 
929 --	  Populate l_sales_credit_rec with infomation from sales_credit_rec;
930 
931 	l_sales_credit_rec.quote_header_id := p_qhr_id;
932 	l_sales_credit_rec.quote_line_id := p_qle_id;
933 
934 	l_sales_credit_rec.operation_code 		:= sales_credit_rec.operation_code;
935 
936 	l_sales_credit_rec.sales_credit_id 		:= sales_credit_rec.sales_credit_id;
937 	l_sales_credit_rec.percent  			:= sales_credit_rec.percent;
938 --	l_sales_credit_rec.resource_id			:= sales_credit_rec.ctc_id;
939 	l_sales_credit_rec.resource_id			:= sales_credit_rec.resource_id;
940         l_sales_credit_rec.sales_credit_type_id 	:= sales_credit_rec.sales_credit_type_id1;
941 --	l_sales_credit_rec.object_version_number	:= sales_credit_rec.object_version_number;
942 	l_sales_credit_rec.last_update_date		:= sales_credit_rec.last_update_date;
943 
944 
945 		IF p_level = 'L' AND p_qhr_id IS NULL AND p_qle_id IS NULL THEN
946 						 -- related quote line has to be created
947 			l_sales_credit_rec.quote_header_id := p_nqhr_id;
948 			l_sales_credit_rec.qte_line_index := p_nqle_idx;
949 		END IF;
950 		l_sales_credit_rec.sales_credit_id := OKC_API.G_MISS_NUM;
951 	END IF;
952 
953 
954 
955 	IF sales_credit_rec.operation_code = g_aso_op_code_update THEN
956 		IF (l_debug = 'Y') THEN
957    		okc_util.print_trace(1,'step 1-2 operation code = '||sales_credit_rec.operation_code);
958 		END IF;
959 	   IF NVL(l_prec_sls_crdt_id,0) <> sales_credit_rec.id  THEN
960 
961 	--
962 	-- Need to check if the related quote sales credit is not already planned to be
963 	-- updated in the l_sales_credit_tab variable
964 	--
965 	   IF l_sales_credit_tab.first IS NOT NULL THEN
966 		FOR i IN l_sales_credit_tab.first..l_sales_credit_tab.last LOOP
967 		   IF l_sales_credit_tab(i).sales_credit_id = sales_credit_rec.sales_credit_id THEN
968 
969 			IF (l_debug = 'Y') THEN
970    			okc_util.print_trace(1,'step 1-3 related sales credit adjustment is already planned to be updated');
971 			END IF;
972 
973 			l_sales_credit_insert := OKC_API.G_FALSE;
974 			exit;
975 		   END IF;
976 		END LOOP;
977 	    END IF;
978 	ELSE
979 	--
980 	-- current contract sales credit matches with multiple quote sales credits
981 	-- and will be disregarded if already processed or if related quote sales credit is
982 	-- not already planned to be updated in the l_sales_credit_tab variable.
983 	--
984 	   IF l_prec_sls_crdt_procsd = OKC_API.G_TRUE THEN
985 		l_sales_credit_insert  := OKC_API.G_FALSE;
986       		l_prec_sls_crdt_procsd := OKC_API.G_FALSE;
987 	   ELSE
988 		IF l_sales_credit_tab.first IS NOT NULL THEN
989                 FOR i IN l_sales_credit_tab.first..l_sales_credit_tab.last LOOP
990 		     IF l_sales_credit_tab(i).sales_credit_id = sales_credit_rec.sales_credit_id THEN
991 			 l_sales_credit_insert := OKC_API.G_FALSE;
992 			IF (l_debug = 'Y') THEN
993    			okc_util.print_trace(1,'step 1-4 checking ctrct sls crdt with multiple qte sls crdt');
994 			END IF;
995 			 exit;
996 		     END IF;
997 		END LOOP;
998 	    END IF;
999 	END IF;	-- IF l_prec_sls_crdt_procsd := okc_api.g_true then..
1000    END IF;  -- IF l_prec_sls_crdt_id <> sales_credit_rec.id and ..
1001 
1002 
1003    IF NVL(l_prec_sls_crdt_id,0) <> sales_credit_rec.id THEN
1004       IF l_prec_sls_crdt_id IS NOT NULL AND l_prec_sls_crdt_procsd = OKC_API.G_FALSE THEN
1005 	-- Populate l_sales_credit_rec with information from l_prec_sls_crdt_rec;
1006 
1007 
1008 	l_sales_credit_rec.sales_credit_id 		:= l_prec_sls_crdt_rec.sales_credit_id;
1009 	l_sales_credit_rec.percent  			:= l_prec_sls_crdt_rec.percent;
1010 --	l_sales_credit_rec.resource_id			:= l_prec_sls_crdt_rec.ctc_id;
1011 	l_sales_credit_rec.resource_id			:= l_prec_sls_crdt_rec.resource_id;
1012         l_sales_credit_rec.sales_credit_type_id 	:= l_prec_sls_crdt_rec.sales_credit_type_id1;
1013 --	l_sales_credit_rec.object_version_number	:= l_prec_sls_crdt_rec.object_version_number;
1014 	l_sales_credit_rec.last_update_date		:= l_prec_sls_crdt_rec.last_update_date;
1015 
1016 	   l_sales_credit_rec.operation_code := g_aso_op_code_create;
1017 	   l_sales_credit_rec.quote_header_id := p_qhr_id;
1018 	   l_sales_credit_rec.quote_line_id := p_qle_id;
1019 	   l_sales_credit_rec.sales_credit_id := OKC_API.G_MISS_NUM;
1020 
1021 	   l_sales_credit_tab(x) := l_sales_credit_rec;
1022 	   x := x + 1;
1023 --
1024 	   l_k_sales_credit_tab(y).id := l_prec_sls_crdt_rec.id;
1025 	   l_k_sales_credit_tab(y).level := p_level;
1026 	   y := y + 1;
1027 
1028 	   l_prec_sls_crdt_procsd := okc_api.g_true;
1029 
1030       END IF;
1031 
1032       l_prec_sls_crdt_id := sales_credit_rec.id;
1033       l_prec_sls_crdt_procsd := OKC_API.G_FALSE;
1034    END IF;
1035 
1036    IF l_sales_credit_insert = OKC_API.G_TRUE THEN
1037 
1038 	l_sales_credit_rec.quote_header_id := p_qhr_id;
1039 	l_sales_credit_rec.quote_line_id := p_qle_id;
1040 
1041 	l_sales_credit_rec.sales_credit_id 		:= sales_credit_rec.sales_credit_id;
1042 	l_sales_credit_rec.percent  			:= sales_credit_rec.percent;
1043 --	l_sales_credit_rec.resource_id			:= sales_credit_rec.ctc_id;
1044 	l_sales_credit_rec.resource_id			:= sales_credit_rec.resource_id;
1045         l_sales_credit_rec.sales_credit_type_id 	:= sales_credit_rec.sales_credit_type_id1;
1046 --	l_sales_credit_rec.object_version_number	:= sales_credit_rec.object_version_number;
1047 	l_sales_credit_rec.last_update_date		:= sales_credit_rec.last_update_date;
1048 
1049 	l_sales_credit_rec.operation_code 		:= sales_credit_rec.operation_code;
1050 
1051    END IF;
1052  END IF; -- IF sales_credit_rec.operation_code = 'UPADTE' then...
1053 
1054 
1055    IF l_sales_credit_insert = OKC_API.G_TRUE THEN
1056 
1057 	l_sales_credit_tab(x) := l_sales_credit_rec;
1058 
1059 IF (l_debug = 'Y') THEN
1060    okc_util.print_trace(1,'INDEX VALUE x = '||x);
1061    okc_util.print_trace(1,'=========================================================');
1062    okc_util.print_trace(1,'  ');
1063 END IF;
1064 
1065 IF (l_debug = 'Y') THEN
1066    okc_util.print_trace(1,'operation code  = '||l_sales_credit_tab(x).operation_code);
1067    okc_util.print_trace(1,'qte hdr id      = '||l_sales_credit_tab(x).quote_header_id);
1068    okc_util.print_trace(1,'qte line id     = '||l_sales_credit_tab(x).quote_line_id);
1069    okc_util.print_trace(1,'sales credit id = '||l_sales_credit_tab(x).sales_credit_id);
1070    okc_util.print_trace(1,'percent         = '||l_sales_credit_tab(x).percent);
1071    okc_util.print_trace(1,'resource(ctc)id = '||l_sales_credit_tab(x).resource_id);
1072    okc_util.print_trace(1,'sls crdt typ id = '||l_sales_credit_tab(x).sales_credit_type_id);
1073 END IF;
1074 -- okc_util.print_trace(1,'obj ver #       = '||l_sales_credit_tab(x).object_version_number);
1075 IF (l_debug = 'Y') THEN
1076    okc_util.print_trace(1,'last updt date  = '||l_sales_credit_tab(x).last_update_date);
1077 END IF;
1078 
1079 
1080 IF (l_debug = 'Y') THEN
1081    okc_util.print_trace(1,'  ');
1082 END IF;
1083 
1084 	x := x + 1;
1085 --
1086 	l_k_sales_credit_tab(y).id := sales_credit_rec.id;
1087 	l_k_sales_credit_tab(y).level := p_level;
1088 	y := y + 1;
1089 --
1090 	l_prec_sls_crdt_procsd := OKC_API.G_TRUE;
1091    END IF;
1092 
1093        l_prec_sls_crdt_rec := sales_credit_rec;
1094 
1095 END LOOP;   --- FOR sales_credit_rec IN c_k_sales_credit
1096 
1097 
1098 --
1099 --	Case of a new occurance of an existing sales credit, not processed before because
1100 --	the related quote sales credits have already been marked to be processed.
1101 
1102 IF  l_prec_sls_crdt_rec.operation_code = g_aso_op_code_update AND
1103 	l_prec_sls_crdt_id IS NOT NULL AND l_prec_sls_crdt_procsd = OKC_API.G_FALSE THEN
1104 -- populate l_sales_credit_rec with infomation from l_prec_sls_crdt_rec;
1105 
1106 	l_sales_credit_rec.sales_credit_id 		:= l_prec_sls_crdt_rec.sales_credit_id;
1107 	l_sales_credit_rec.percent  			:= l_prec_sls_crdt_rec.percent;
1108 --	l_sales_credit_rec.resource_id			:= l_prec_sls_crdt_rec.ctc_id;
1109 	l_sales_credit_rec.resource_id			:= l_prec_sls_crdt_rec.resource_id;
1110         l_sales_credit_rec.sales_credit_type_id 	:= l_prec_sls_crdt_rec.sales_credit_type_id1;
1111 --	l_sales_credit_rec.object_version_number	:= l_prec_sls_crdt_rec.object_version_number;
1112 	l_sales_credit_rec.last_update_date		:= l_prec_sls_crdt_rec.last_update_date;
1113 
1114 	l_sales_credit_rec.operation_code := g_aso_op_code_create;
1115 	l_sales_credit_rec.quote_header_id := p_qhr_id;
1116 	l_sales_credit_rec.quote_line_id := p_qle_id;
1117 	l_sales_credit_rec.sales_credit_id := OKC_API.G_MISS_NUM;
1118 --
1119 	l_sales_credit_tab(x) := l_sales_credit_rec;
1120 	x:= x+1;
1121 --
1122 	l_k_sales_credit_tab(y).id := l_prec_sls_crdt_rec.id;
1123 	l_k_sales_credit_tab(y).level := p_level;
1124 	y:=y+1;
1125 
1126 	l_prec_sls_crdt_procsd := OKC_API.G_TRUE;
1127 END IF;
1128 --
1129 --
1130 -- Fill in the l_sales_credit_tab variable with sales credit to be deleted.
1131 --
1132 
1133 FOR l_sales_credit IN c_sales_credit(p_q_flag,p_qhr_id, p_qle_id,
1134 				p_o_flag,p_ohr_id,p_ole_id) LOOP
1135 
1136  l_sales_credit_insert := OKC_API.G_TRUE;
1137 
1138 --
1139 -- Need to check if the related quote sales credit is not already planned to be updated
1140 -- in the l_sales_credit_tab_variable
1141 --
1142 	IF l_sales_credit_tab.FIRST IS NOT NULL THEN
1143 	  FOR i IN l_sales_credit_tab.first..l_sales_credit_tab.last LOOP
1144 		IF l_sales_credit_tab(i).sales_credit_id = l_sales_credit.sales_credit_id THEN
1145 			l_sales_credit_insert := OKC_API.G_FALSE;
1146 			exit;
1147 		END IF;
1148 	  END LOOP;
1149 	END IF;
1150 
1151 	IF l_sales_credit_insert = OKC_API.G_TRUE THEN
1152 -- populate l_sales_credit_rec with information from l_sales_credit
1153 
1154 		l_sales_credit_rec.operation_code := g_aso_op_code_delete;
1155 		l_sales_credit_rec.quote_header_id := p_qhr_id;
1156 		l_sales_credit_rec.quote_line_id := p_qle_id;
1157 
1158 		l_sales_credit_rec.sales_credit_id := l_sales_credit.sales_credit_id;
1159 --
1160 		l_sales_credit_tab(x) := l_sales_credit_rec;
1161 		x:=x+1;
1162 	END IF;
1163 END LOOP;
1164 
1165 
1166 IF (l_debug = 'Y') THEN
1167    okc_util.print_trace(1,'  ');
1168    okc_util.print_trace(1,'-----------------------------------------');
1169    okc_util.print_trace(1,' values contained in the l_sales_credit_tab ');
1170    okc_util.print_trace(1,'-----------------------------------------');
1171    okc_util.print_trace(1,'  ');
1172 END IF;
1173 
1174  IF l_sales_credit_tab.first IS NOT NULL THEN
1175     FOR i IN l_sales_credit_tab.first..l_sales_credit_tab.last LOOP
1176 	IF l_sales_credit_tab.EXISTS(i) THEN
1177 
1178 IF (l_debug = 'Y') THEN
1179    okc_util.print_trace(1,'  ');
1180 END IF;
1181 
1182 IF (l_debug = 'Y') THEN
1183    okc_util.print_trace(1,'index value     = '||i);
1184    okc_util.print_trace(1,'operation code  = '||l_sales_credit_tab(i).operation_code);
1185    okc_util.print_trace(1,'qte hdr id      = '||l_sales_credit_tab(i).quote_header_id);
1186    okc_util.print_trace(1,'qte line id     = '||l_sales_credit_tab(i).quote_line_id);
1187    okc_util.print_trace(1,'sales credit id = '||l_sales_credit_tab(i).sales_credit_id);
1188    okc_util.print_trace(1,'percent         = '||l_sales_credit_tab(i).percent);
1189    okc_util.print_trace(1,'resource(ctc)id = '||l_sales_credit_tab(i).resource_id);
1190    okc_util.print_trace(1,'sls crdt typ id = '||l_sales_credit_tab(i).sales_credit_type_id);
1191 END IF;
1192 -- okc_util.print_trace(1,'obj ver #       = '||l_sales_credit_tab(i).object_version_number);
1193 IF (l_debug = 'Y') THEN
1194    okc_util.print_trace(1,'last updt date  = '||l_sales_credit_tab(i).last_update_date);
1195 END IF;
1196 
1197 IF (l_debug = 'Y') THEN
1198    okc_util.print_trace(1,'  ');
1199 END IF;
1200 	END IF;
1201     END LOOP;
1202  END IF;
1203 
1204 
1205 
1206 IF l_k_sales_credit_tab.count > 0 THEN
1207 	FOR i IN l_k_sales_credit_tab.FIRST..l_k_sales_credit_tab.LAST LOOP
1208     		x_k_sales_credit_tab(x_k_sales_credit_tab.COUNT+1) := l_k_sales_credit_tab(i);
1209 	END LOOP;
1210 END IF;
1211 
1212 IF l_sales_credit_tab.COUNT > 0 THEN
1213 	FOR i IN l_sales_credit_tab.FIRST..l_sales_credit_tab.LAST LOOP
1214 		x_sales_credit_tab(x_sales_credit_tab.COUNT+1) := l_sales_credit_tab(i);
1215 	END LOOP;
1216 END IF;
1217 
1218 
1219 IF (l_debug = 'Y') THEN
1220    okc_util.print_trace(1,'  ');
1221    okc_util.print_trace(1,'====================================================');
1222    okc_util.print_trace(1,' FINAL VALUES CONTAINED IN THE X_SALES_CREDIT_TAB ');
1223    okc_util.print_trace(1,'====================================================');
1224    okc_util.print_trace(1,'  ');
1225 END IF;
1226 
1227  IF x_sales_credit_tab.first IS NOT NULL THEN
1228     FOR i IN x_sales_credit_tab.first..x_sales_credit_tab.last LOOP
1229 	IF x_sales_credit_tab.EXISTS(i) THEN
1230 
1231 IF (l_debug = 'Y') THEN
1232    okc_util.print_trace(1,'  ');
1233    okc_util.print_trace(1,'index value     = '||i);
1234    okc_util.print_trace(1,'operation code  = '||l_sales_credit_tab(i).operation_code);
1235    okc_util.print_trace(1,'qte hdr id      = '||l_sales_credit_tab(i).quote_header_id);
1236    okc_util.print_trace(1,'qte line id     = '||l_sales_credit_tab(i).quote_line_id);
1237    okc_util.print_trace(1,'sales credit id = '||l_sales_credit_tab(i).sales_credit_id);
1238    okc_util.print_trace(1,'percent         = '||l_sales_credit_tab(i).percent);
1239    okc_util.print_trace(1,'resource(ctc)id = '||l_sales_credit_tab(i).resource_id);
1240    okc_util.print_trace(1,'sls crdt typ id = '||l_sales_credit_tab(i).sales_credit_type_id);
1241 END IF;
1242 -- okc_util.print_trace(1,'obj ver #       = '||l_sales_credit_tab(i).object_version_number);
1243 IF (l_debug = 'Y') THEN
1244    okc_util.print_trace(1,'last updt date  = '||l_sales_credit_tab(i).last_update_date);
1245    okc_util.print_trace(1,'  ');
1246 END IF;
1247 
1248 	END IF;
1249     END LOOP;
1250  END IF;
1251 
1252 --	x_k_sales_credit_tab := l_k_sales_credit_tab;
1253 --	x_sales_credit_tab := l_sales_credit_tab;
1254 
1255 IF (l_debug = 'Y') THEN
1256    okc_util.print_trace(1,'  ');
1257    okc_util.print_trace(1,'====================================================');
1258    okc_util.print_trace(1,' FINAL VALUES CONTAINED IN THE X_K_SALES_CREDIT_TAB ');
1259    okc_util.print_trace(1,'====================================================');
1260    okc_util.print_trace(1,'  ');
1261 END IF;
1262 
1263  IF x_k_sales_credit_tab.first IS NOT NULL THEN
1264     FOR i IN x_k_sales_credit_tab.first..x_k_sales_credit_tab.last LOOP
1265 	IF x_k_sales_credit_tab.EXISTS(i) THEN
1266 
1267      	IF (l_debug = 'Y') THEN
1268         	okc_util.print_trace(1,'INDEX VALUE =  '||i);
1269         	okc_util.print_trace(1,'okc_k_sales_credits - id = '||x_k_sales_credit_tab(i).id);
1270         	okc_util.print_trace(1,'Level        = '||x_k_sales_credit_tab(i).level);
1271      	END IF;
1272 
1273 	END IF;
1274 
1275    END LOOP;
1276 END IF;
1277 
1278 	IF (l_debug = 'Y') THEN
1279    	okc_util.print_trace(1,'------------------------------');
1280    	okc_util.print_trace(1,'>>END : Get sales credits ');
1281    	okc_util.print_trace(1,'------------------------------');
1282 	END IF;
1283 
1284 EXCEPTION
1285  WHEN OTHERS THEN
1286 IF (l_debug = 'Y') THEN
1287    okc_util.print_trace(1,'inside get sales credit : others exception');
1288 END IF;
1289 
1290   IF c_k_sales_credit%ISOPEN THEN
1291 	CLOSE c_k_sales_credit;
1292   END IF;
1293   IF c_sales_credit%ISOPEN THEN
1294 	CLOSE c_sales_credit;
1295   END IF;
1296 
1297 RAISE;
1298 
1299 END;	-- get_sales_credit
1300 
1301 
1302 -- ========================================
1303 --
1304 -- procedure build_sales_credit_from_k
1305 --
1306 -- ========================================
1307 
1308 PROCEDURE build_sales_credit_from_k(
1309         p_chr_id           IN  OKC_K_HEADERS_B.id%TYPE,
1310         p_kl_rel_tab       IN  okc_oc_int_config_pvt.line_rel_tab_type
1311 ,
1312      --
1313         p_q_flag           IN  VARCHAR2                             ,
1314         p_qhr_id           IN  OKX_QUOTE_HEADERS_V.id1%TYPE         ,
1315         p_qle_tab          IN  ASO_QUOTE_PUB.qte_line_tbl_type      ,
1316      --
1317         p_o_flag           IN  VARCHAR2                             ,
1318         p_ohr_id           IN  OKX_ORDER_HEADERS_V.id1%TYPE         ,
1319         p_ole_tab          IN  ASO_QUOTE_PUB.qte_line_tbl_type      ,
1320      --
1321         x_hd_sales_credit_tab           OUT NOCOPY ASO_QUOTE_PUB.sales_credit_tbl_type,
1322         x_ln_sales_credit_tab           OUT NOCOPY ASO_QUOTE_PUB.sales_credit_tbl_type,
1323      --
1324         x_return_status                 OUT NOCOPY  VARCHAR2 ) IS
1325 
1326 k	BINARY_INTEGER;
1327 x_ln_temp_sls_crdt_tab	ASO_QUOTE_PUB.sales_credit_tbl_type;
1328 l_cle_id	okc_k_lines_b.id%TYPE;
1329 
1330 BEGIN
1331 
1332 --
1333 -- housekeeping
1334 --
1335 
1336   x_hd_sales_credit_tab.DELETE;
1337   x_ln_sales_credit_tab.DELETE;
1338 
1339   x_ln_temp_sls_crdt_tab.DELETE;
1340   l_k_sales_credit_tab.DELETE;
1341   l_line_tab.DELETE;
1342 
1343 
1344   IF p_q_flag = OKC_API.g_true THEN
1345         l_line_tab:=p_qle_tab;
1346   ELSIF p_o_flag = OKC_API.g_true THEN
1347         l_line_tab:=p_ole_tab;
1348   END IF;
1349 
1350   x_return_status := OKC_API.G_RET_STS_SUCCESS;
1351 
1352 ---------------------------------------------------------------
1353 -- Select sales credit information at the contract header level
1354 ---------------------------------------------------------------
1355 
1356 --
1357 -- Get the sales credit information into the x_hd_sales_credit_tab variable
1358 --
1359   IF (l_debug = 'Y') THEN
1360      okc_util.print_trace(1,'=============================================');
1361      okc_util.print_trace(1,'START : GET SALES CREDITS AT HEADER LEVEL    ');
1362      okc_util.print_trace(1,'=============================================');
1363   END IF;
1364 
1365   get_sales_credit(p_chr_id => p_chr_id,
1366                         p_cle_id   => NULL,
1367                 --
1368                         p_qhr_id   => p_qhr_id,
1369                         p_qle_id   => NULL,
1370                         p_q_flag   => p_q_flag,
1371                 --
1372                         p_ohr_id   => p_ohr_id,
1373                         p_ole_id   => NULL,
1374                         p_o_flag   => p_o_flag,
1375                 --
1376                         p_level    => 'H',
1377                 --
1378                         p_nqhr_id  => NULL,
1379                         p_nqle_idx => NULL,
1380                 --
1381                         x_k_sales_credit_tab => l_k_sales_credit_tab,
1382                         x_sales_credit_tab   => x_hd_sales_credit_tab );
1383 
1384   IF (l_debug = 'Y') THEN
1385      okc_util.print_trace(1,'===========================================');
1386      okc_util.print_trace(1,'  END : GET SALES CREDITS AT HEADER LEVEL    ');
1387      okc_util.print_trace(1,'===========================================');
1388   END IF;
1389 
1390 
1391 --------------------------------------------------------------
1392 -- Select sales credit information at the contract Line level
1393 --------------------------------------------------------------
1394 
1395 --
1396 -- Select sales credit information into the x_ln_sales_credit_tab variable
1397 --
1398 
1399   IF (l_debug = 'Y') THEN
1400      okc_util.print_trace(1,'===========================================');
1401      okc_util.print_trace(1,'START : GET SALES CREDITS AT LINE LEVEL    ');
1402      okc_util.print_trace(1,'===========================================');
1403   END IF;
1404 
1405   IF l_line_tab.FIRST IS NOT NULL THEN
1406 
1407 	FOR i IN l_line_tab.FIRST..l_line_tab.LAST LOOP
1408 
1409 --
1410 -- Need to ensure that the Top model line is processed for the configuration item,
1411 -- since the sales credit information is stored at the Top model line level
1412 --
1413 -- Also the index value i is the same in l_line_tab and p_kl_rel_tab because
1414 -- when the quote line table was populated px_k2q_line_id(l_ql).q_line_idx := l_ql
1415 -- the value of l_ql,q_line_idx are the same
1416 --
1417 
1418 	IF p_kl_rel_tab(i).q_item_type_code = g_aso_model_item THEN  -- MDL
1419 		l_cle_id := p_kl_rel_tab(i).k_parent_line_id;
1420 	ELSE
1421 		l_cle_id := p_kl_rel_tab(i).k_line_id;
1422 	END IF;
1423 
1424 
1425 	  IF l_line_tab(i).operation_code= g_aso_op_code_create THEN
1426 
1427 --		okc_util.print_trace(1,'operation code '||l_line_tab(i).operation_code);
1428 
1429 		 get_sales_credit(p_chr_id => p_chr_id,
1430 				    p_cle_id => l_cle_id,
1431 				--
1432 				    p_qhr_id => NULL,
1433 				    p_qle_id => NULL,
1434 				    p_q_flag => p_q_flag,
1435 				--
1436 				    p_ohr_id => NULL,
1437 				    p_ole_id => NULL,
1438 			    	    p_o_flag => p_o_flag,
1439 				--
1440 				    p_level   =>'L',
1441 				--
1442 				    p_nqhr_id => p_qhr_id,
1443 				    p_nqle_idx => i,
1444 				--
1445 				    x_k_sales_credit_tab   => l_k_sales_credit_tab,
1446 				    x_sales_credit_tab     => x_ln_temp_sls_crdt_tab);
1447 
1448 	  ELSIF l_line_tab(i).operation_code= g_aso_op_code_update THEN
1449 
1450 --		okc_util.print_trace(1,'operation code '||l_line_tab(i).operation_code);
1451 
1452 		 get_sales_credit(p_chr_id => p_chr_id,
1453 				    p_cle_id => l_cle_id,
1454 				--
1455 				    p_qhr_id => p_qhr_id,
1456 				    p_qle_id => l_line_tab(i).quote_line_id,
1457 				    p_q_flag => p_q_flag,
1458 				--
1459 				    p_ohr_id => p_ohr_id,
1460 				    p_ole_id => l_line_tab(i).quote_line_id,
1461 						--Not valid now in case of an Order update  from a contract
1462 						--Will need to be modified when K -> O for update will be
1463 						--required to be developed
1464 
1465 			    	    p_o_flag => p_o_flag,
1466 				--
1467 				    p_level   =>'L',
1468 				--
1469 				    p_nqhr_id => NULL,
1470 				    p_nqle_idx => NULL,
1471 				--
1472 				    x_k_sales_credit_tab   => l_k_sales_credit_tab,
1473 				    x_sales_credit_tab     => x_ln_temp_sls_crdt_tab);
1474 
1475 	  ELSIF l_line_tab(i).operation_code= g_aso_op_code_delete THEN
1476 
1477 --		okc_util.print_trace(1,'operation code '||l_line_tab(i).operation_code);
1478 
1479 		 get_sales_credit(p_chr_id => NULL,
1480 				    p_cle_id => NULL,
1481 				--
1482 				    p_qhr_id => p_qhr_id,
1483 				    p_qle_id => l_line_tab(i).quote_line_id,
1484 				    p_q_flag => p_q_flag,
1485 				--
1486 				    p_ohr_id => p_ohr_id,
1487 				    p_ole_id => l_line_tab(i).quote_line_id,
1488 						--Not valid now in case of an Order update  from a contract
1489 						--Will need to be modified when K -> O for update will be
1490 						--required to be developed
1491 
1492 			    	    p_o_flag => p_o_flag,
1493 				--
1494 				    p_level   =>'L',
1495 				--
1496 				    p_nqhr_id => NULL,
1497 				    p_nqle_idx => NULL,
1498 				--
1499 				    x_k_sales_credit_tab   => l_k_sales_credit_tab,
1500 				    x_sales_credit_tab     => x_ln_temp_sls_crdt_tab);
1501 	  END IF;
1502 
1503 	  IF x_ln_temp_sls_crdt_tab.COUNT > 0 THEN
1504 	     FOR k in x_ln_temp_sls_crdt_tab.first..x_ln_temp_sls_crdt_tab.last LOOP
1505 		x_ln_sales_credit_tab(x_ln_sales_credit_tab.COUNT+1) := x_ln_temp_sls_crdt_tab(k);
1506 	     END LOOP;
1507 	  END IF;
1508 
1509 	END LOOP;
1510   END IF;
1511 
1512   IF (l_debug = 'Y') THEN
1513      okc_util.print_trace(1,'===========================================');
1514      okc_util.print_trace(1,'  END : GET SALES CREDITS AT LINE LEVEL    ');
1515      okc_util.print_trace(1,'===========================================');
1516   END IF;
1517 
1518 EXCEPTION
1519 
1520  WHEN OTHERS THEN
1521         OKC_API.set_message(G_APP_NAME,
1522                             G_UNEXPECTED_ERROR,
1523                             G_SQLCODE_TOKEN,
1524                             SQLCODE,
1525                             G_SQLERRM_TOKEN,
1526                             SQLERRM );
1527         print_error(2);
1528 
1529 -- notify caller of an unexpected error
1530 
1531 x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
1532 
1533 END build_sales_credit_from_k;
1534 
1535 --  ========================================================================
1536 --              END OF KTQ or KTO SALES CREDIT INFORMATION CREATION
1537 --                                   or UPDATE
1538 --  ========================================================================
1539 
1540 
1541 
1542 ----------------------------------------------------------------------
1543 --
1544 -- Function get_party_name to retrieve a party name against    -------
1545 -- the jtot_object1_code and object1_id1                       -------
1546 --
1547 -- This is a general function that can be used anywhere to retrieve
1548 -- the party name for eg. from the OKCSLCRD.fmb sales credit form
1549 FUNCTION get_party_name (p_object1_id1 varchar2,  p_jtot_object1_code varchar2) RETURN VARCHAR2 IS
1550    l_sql_stmt VARCHAR2(10000);
1551    l_from_clause varchar2(200);
1552    l_where_clause varchar2(2000);
1553    l_order_by_clause varchar2(200);
1554    l_party_name varchar2(500);
1555 
1556    l_cursor_id  INTEGER;
1557    l_dummy INTEGER;
1558 
1559 BEGIN
1560 
1561    l_cursor_id := DBMS_SQL.OPEN_CURSOR;
1562 
1563    l_sql_stmt := 'SELECT FROM_TABLE, WHERE_CLAUSE, ORDER_BY_CLAUSE ';
1564    l_sql_stmt := l_sql_stmt ||  ' FROM jtf_objects_b';
1565    l_sql_stmt := l_sql_stmt ||  ' WHERE OBJECT_CODE = :jtot_object1_code';
1566 
1567    DBMS_SQL.PARSE(l_cursor_id,  l_sql_stmt, 2);
1568    DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':jtot_object1_code', p_jtot_object1_code);
1569 
1570    DBMS_SQL.DEFINE_COLUMN(l_cursor_id, 1, l_from_clause, 200);
1571    DBMS_SQL.DEFINE_COLUMN(l_cursor_id, 2, l_where_clause, 2000);
1572    DBMS_SQL.DEFINE_COLUMN(l_cursor_id, 3, l_order_by_clause, 200);
1573 
1574    l_dummy := DBMS_SQL.EXECUTE(l_cursor_id);
1575    IF DBMS_SQL.FETCH_ROWS(l_cursor_id) = 0 THEN
1576       RAISE OKC_API.G_EXCEPTION_ERROR;
1577    END IF;
1578 
1579    DBMS_SQL.COLUMN_VALUE(l_cursor_id, 1, l_from_clause);
1580    DBMS_SQL.COLUMN_VALUE(l_cursor_id, 2, l_where_clause);
1581    DBMS_SQL.COLUMN_VALUE(l_cursor_id, 3, l_order_by_clause);
1582 
1583    DBMS_SQL.CLOSE_CURSOR(l_cursor_id);
1584 
1585 
1586 
1587 
1588    l_cursor_id := DBMS_SQL.OPEN_CURSOR;
1589 
1590    l_sql_stmt := 'SELECT NAME FROM ' || l_from_clause;
1591    l_sql_stmt := l_sql_stmt ||  '  WHERE ' || l_where_clause;
1592    l_sql_stmt := l_sql_stmt ||  '  AND ID1 = :object1_id';
1593    l_sql_stmt := l_sql_stmt ||  '  ORDER BY ' || l_order_by_clause;
1594 
1595    DBMS_SQL.PARSE(l_cursor_id,  l_sql_stmt, 2);
1596    DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':object1_id', p_object1_id1);
1597 
1598    DBMS_SQL.DEFINE_COLUMN(l_cursor_id, 1, l_party_name, 500);
1599 
1600    l_dummy := DBMS_SQL.EXECUTE(l_cursor_id);
1601    IF DBMS_SQL.FETCH_ROWS(l_cursor_id) = 0 THEN
1602       RAISE OKC_API.G_EXCEPTION_ERROR;
1603    END IF;
1604 
1605    DBMS_SQL.COLUMN_VALUE(l_cursor_id, 1, l_party_name);
1606    DBMS_SQL.CLOSE_CURSOR(l_cursor_id);
1607 
1608 
1609    RETURN(l_party_name);
1610 EXCEPTION
1611    WHEN OTHERS THEN
1612         OKC_API.set_message(G_APP_NAME,
1613                             G_UNEXPECTED_ERROR,
1614                             G_SQLCODE_TOKEN,
1615                             SQLCODE,
1616                             G_SQLERRM_TOKEN,
1617                             SQLERRM );
1618         print_error(2);
1619 END;
1620 
1621 
1622 
1623 
1624 
1625 END OKC_OC_INT_SALESCDT_PVT ;