DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_AM_CREATE_QUOTE_PVT

Source


1 PACKAGE BODY OKL_AM_CREATE_QUOTE_PVT AS
2 /* $Header: OKLRCQTB.pls 120.30 2008/05/08 20:50:17 rmunjulu noship $ */
3 
4 -- GLOBAL VARIABLES
5   G_LEVEL_PROCEDURE             CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
6   G_LEVEL_STATEMENT             CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
7   G_LEVEL_EXCEPTION		CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
8   G_MODULE_NAME                 CONSTANT VARCHAR2(500) := 'okl.am.plsql.okl_am_create_quote_pvt.';
9 
10   SUBTYPE rulv_rec_type  IS  OKL_RULE_PUB.rulv_rec_type;
11  -- SUBTYPE asset_tbl_type IS  OKL_AM_CALCULATE_QUOTE_PVT.asset_tbl_type;
12 
13   -- Start of comments
14   --
15   -- Procedure Name	: asset_number_exists
16   -- Desciption     : Returns via x_asset_exists if the asset_number exists in FA
17   -- Business Rules	:
18   -- Parameters	    :
19   -- Version	    : 1.0
20   -- History        : RMUNJULU 2757312  created
21   --                : RMUNJULU 3241502 Added p_control + major revamp of the processing
22   --                  IS NOW ALSO CALLED FROM OKL_AM_CNTRCT_LN_TRMNT_PVT
23   --                : RMUNJULU 3241502 Added UPPER to asset_number
24   --
25   -- End of comments
26   FUNCTION asset_number_exists(p_asset_number IN VARCHAR2,
27                                p_control      IN VARCHAR2 DEFAULT NULL,
28                                x_asset_exists OUT NOCOPY VARCHAR2 ) RETURN VARCHAR2 IS
29 
30         l_asset_exists VARCHAR2(1) DEFAULT 'N';
31         l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
32 
33         --chk for asset in FA
34 	--Updated the sql statement for performance issue #5484903
35 	-- by excluding UPPER function to do Index scan
36         CURSOR asset_chk_curs1 (p_asset_number IN VARCHAR2) IS
37 	SELECT 'Y' a
38         FROM   okx_assets_v okx
39         WHERE  UPPER(okx.asset_number) = p_asset_number
40         and
41 	    ( okx.asset_number like Initcap(substr(p_asset_number,1,2))||'%'
42                or
43                okx.asset_number like lower(substr(p_asset_number,1))||Upper(substr(p_asset_number,2,1))||'%'
44                or
45                okx.asset_number like Upper(substr(p_asset_number,1,2))||'%'
46                or
47                okx.asset_number like lower(substr(p_asset_number,1,2))||'%'
48              );
49 
50 
51 
52         --chk for asset on asset line
53 	--Updated the sql statement for performance issue #5484903
54 	-- by excluding UPPER function to do Index scan
55         CURSOR asset_chk_curs2 (p_asset_number IN VARCHAR2) IS
56         SELECT 'Y' a
57         FROM   okc_k_lines_v kle,
58                okc_line_styles_b  lse
59         WHERE  kle.lse_id = lse.id
60         AND    lse.lty_code = 'FREE_FORM1'
61         AND  UPPER(kle.NAME) = p_asset_number  -- RMUNJULU 3241502
62         AND ( kle.NAME like Initcap(substr(p_asset_number,1,2))||'%'
63                or
64                kle.NAME like lower(substr(p_asset_number,1))||Upper(substr(p_asset_number,2,1))||'%'
65                or
66                kle.NAME like Upper(substr(p_asset_number,1,2))||'%'
67               or
68                kle.NAME like lower(substr(p_asset_number,1,2))||'%'
69              ) ;
70 
71 
72 
73         --check for asset on an split asset transaction
74         CURSOR asset_chk_curs3 (p_asset_number IN VARCHAR2) is
75         SELECT 'Y' a
76         FROM   okl_txd_assets_b txd
77         WHERE  NVL(UPPER(txd.asset_number),'-999999999999999') = UPPER(p_asset_number) -- RMUNJULU 3241502
78         AND    EXISTS (SELECT NULL
79                        FROM   okl_trx_Assets   trx,
80                               okl_trx_types_tl ttyp,
81                               okl_txl_assets_b txl
82                        WHERE  trx.id        = txl.tas_id
83                        AND    trx.try_id    = ttyp.id
84                        AND    ttyp.name     = 'Split Asset'
85                        AND    ttyp.language = 'US'
86                        AND    txl.id        = txd.tal_id);
87 
88     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'asset_number_exists';
89     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
90     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
91     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
92 
93 
94   BEGIN
95 
96    IF (is_debug_procedure_on) THEN
97        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
98    END IF;
99 
100      FOR asset_chk_rec1 IN asset_chk_curs1 (p_asset_number) LOOP
101         l_asset_exists := asset_chk_rec1.a;
102      END LOOP;
103      IF l_asset_exists <> 'Y' THEN
104         FOR asset_chk_rec2 IN asset_chk_curs2 (p_asset_number) LOOP
105            l_asset_exists := asset_chk_rec2.a;
106         END LOOP;
107      END IF;
108      IF p_control = 'QUOTE' THEN
109         IF l_asset_exists <> 'Y' THEN
110            FOR asset_chk_rec3 IN asset_chk_curs3 (p_asset_number) LOOP
111               l_asset_exists := asset_chk_rec3.a;
112            END LOOP;
113         END IF;
114      END IF;
115      x_asset_exists := l_asset_exists;
116 
117 
118    IF (is_debug_procedure_on) THEN
119        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
120    END IF;
121 
122      RETURN(l_return_status);
123   EXCEPTION
124      WHEN OTHERS THEN
125         -- store SQL error message on message stack for caller
126         OKL_API.set_message(
127                          p_app_name      => g_app_name,
128                          p_msg_name      => g_unexpected_error,
129                          p_token1        => g_sqlcode_token,
130                          p_token1_value  => sqlcode,
131                          p_token2        => g_sqlerrm_token,
132                          p_token2_value  => sqlerrm);
133         l_return_status := OKL_API.G_RET_STS_ERROR;
134         RETURN(l_return_status);
135   END asset_number_exists;
136 
137 
138 
139   -------------------------------------------------------------------------------
140 -- Start of Commnets
141 -- Badrinath Kuchibholta
142 -- Procedure Name       : advance_contract_search
143 -- Description          : Procedure used for doing advance search on contract
144 --                        details
145 -- Business Rules       : The search critriea will be given thru achr_rec_type
146 --                        in the form either contract number,
147 --                        contract start date,contract end date,
148 --                        asset number,serial number or customer name.
149 --                        The output will PL/sql table of record of
150 --                        achr_rec_type and will contain contract number,
151 --                        chr_id, contract start date, contract end date,
152 --                        customer name,authoring org id of the contract
153 --                        or status of the contract.
154 --                        To avoid the performance problem we use
155 --                        this PKG instead of View.
156 -- Parameters           : IN record of achr_rec_type
157 --                        OUT PL/SQL Table of Record achr_tbl_type
158 --                        x_return_status OUT NOCOPY VARCHAR2
159 -- Version              : 1.0
160 -- History              : BAKUCHIB  28-DEC-2002 - 2699412 created
161 --                        SECHAWLA  02-JAN-03  - Moved this procedure from okl_am_util_pvt to this API
162 --                       GKADARKA  06-JAN-03  2736875 Added order by contract number asc  in advance_contract_search
163 --                                  porcedure cursor.
164 --                       BAKUCHIB 16-JAN-03 2748110
165 --                          Modified the Advance_contract_search procedure
166 --                          by checking for addtionaly Contract Status and
167 --                          Line Status. The Addional Contract Status and
168 --                          Line status are 'EVERGREEN','BANKRUPTCY_HOLD',
169 --                          'LITIGATION_HOLD','TERMINATION_HOLD' other than
170 --                          'BOOKED'.Also modified the queries by adding
171 --                           stripping by org_id.If the input org_id is null
172 --                           then we set the org_id with the client info
173 --                       BAKUCHIB 17-JAN-03 2748110
174 --                          Modified the Advance_contract_search procedure
175 --                          by removing Line Status checking.
176 --                       BAKUCHIB 04-FEB-03 2781134
177 --                          Modified the Advance_contract_search procedure
178 --                          by adding case insenstive search on columns contract
179 --                          number, asset number, start date, end date and party
180 --                          name.
181 --                       BAKUCHIB 19-Feb-2003 2807201
182 --                          Modified the advance serach by removing the upper
183 --                          in the where clause on start date and end date of all the cursors.
184 -- End of Commnets
185 
186   Procedure advance_contract_search(
187             p_api_version          IN  NUMBER,
188             p_init_msg_list        IN  VARCHAR2,
189             x_return_status        OUT NOCOPY VARCHAR2,
190             x_msg_count            OUT NOCOPY NUMBER,
191             x_msg_data             OUT NOCOPY VARCHAR2,
192             p_achr_rec             IN achr_rec_type,
193             x_achr_tbl             OUT NOCOPY achr_tbl_type) IS
194   l_api_version    CONSTANT NUMBER := 1;
195   l_api_name       CONSTANT VARCHAR2(30) := 'ADVANCE_CONTRACT_SEARCH';
196   i                         NUMBER := 0;
197   l_achr_rec                achr_rec_type := p_achr_rec;
198   l_achr_tbl                achr_tbl_type;
199 
200   -- Get the contract details
201   CURSOR get_chr_dtls_csr(p_achr_rec IN achr_rec_type)
202   IS
203   SELECT chr.id chr_id,
204          chr.contract_number contract_number,
205          chr.start_date from_start_date,
206          chr.end_date from_end_date,
207          stl.code sts_code,
208          stl.meaning sts_meaning,
209          chr.authoring_org_id org_id,
210          hp.party_name party_name
211   FROM okc_statuses_tl stl,
212        hz_parties hp,
213        okc_k_party_roles_b cpl,
214        okc_k_headers_b chr
215 -- BAKUCHIB 2781134 start
216   WHERE upper(chr.contract_number) LIKE upper(nvl(p_achr_rec.contract_number,chr.contract_number))
217 -- BAKUCHIB 2807201 start
218   AND nvl(chr.start_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_start_date,nvl(chr.start_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_start_date,nvl(chr.start_date,to_date('1111','yyyy')))
219   AND nvl(chr.end_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_end_date,nvl(chr.end_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_end_date,nvl(chr.end_date,to_date('1111','yyyy')))
220 -- BAKUCHIB 2807201 end
221 -- BAKUCHIB 2781134 end
222 -- BAKUCHIB 2748110 Start
223   AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
224   AND chr.scs_code IN ('LEASE', 'LOAN')
225   AND chr.authoring_org_id = p_achr_rec.org_id
226 -- BAKUCHIB 2748110 end
227   AND chr.id = cpl.dnz_chr_id
228   AND cpl.chr_id = cpl.dnz_chr_id
229   AND cpl.object1_id1 = hp.party_id
230   AND cpl.object1_id2 = '#'
231   AND cpl.jtot_object1_code = 'OKX_PARTY'
232   AND cpl.rle_code = 'LESSEE'
233   AND cpl.cle_id IS NULL
234 -- BAKUCHIB 2781134 start
235   AND upper(hp.party_name) LIKE upper(nvl(p_achr_rec.party_name,hp.party_name))
236 -- BAKUCHIB 2781134 end
237   AND hp.party_type IN ( 'PERSON','ORGANIZATION')
238   AND chr.sts_code = stl.code
239   AND stl.LANGUAGE = userenv('LANG')
240   ORDER BY contract_number ASC;
241 
242   -- Get the contract details for asset number
243   CURSOR get_for_asset_csr(p_achr_rec IN achr_rec_type)
244   IS
245   SELECT chr.id chr_id,
246          chr.contract_number contract_number,
247          chr.start_date from_start_date,
248          chr.end_date from_end_date,
249          stl.code sts_code,
250          stl.meaning sts_meaning,
251          chr.authoring_org_id org_id,
252          hp.party_name party_name
253   FROM okc_statuses_tl stl,
254        hz_parties hp,
255        okc_k_party_roles_b cpl,
256        okc_k_headers_b chr
257 -- BAKUCHIB 2781134 start
258   WHERE upper(chr.contract_number) LIKE upper(nvl(p_achr_rec.contract_number,chr.contract_number))
259 -- BAKUCHIB 2781134 end
260 -- BAKUCHIB 2748110 Start
261   AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
262   AND chr.scs_code IN ('LEASE', 'LOAN')
263   AND chr.authoring_org_id = p_achr_rec.org_id
264 -- BAKUCHIB 2748110 End
265 -- BAKUCHIB 2781134 start
266 -- BAKUCHIB 2807201 start
267   AND nvl(chr.start_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_start_date,nvl(chr.start_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_start_date,nvl(chr.start_date,to_date('1111','yyyy')))
268   AND nvl(chr.end_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_end_date,nvl(chr.end_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_end_date,nvl(chr.end_date,to_date('1111','yyyy')))
269 -- BAKUCHIB 2807201 end
270 -- BAKUCHIB 2781134 end
271   AND chr.id = cpl.dnz_chr_id
272   AND cpl.chr_id = cpl.dnz_chr_id
273   AND cpl.object1_id1 = hp.party_id
274   AND cpl.object1_id2 = '#'
275   AND cpl.jtot_object1_code = 'OKX_PARTY'
276   AND cpl.rle_code = 'LESSEE'
277   AND cpl.cle_id IS NULL
278 -- BAKUCHIB 2781134 start
279   AND upper(hp.party_name) LIKE upper(nvl(p_achr_rec.party_name,hp.party_name))
280 -- BAKUCHIB 2781134 end
281   AND hp.party_type IN ( 'PERSON','ORGANIZATION')
282   AND chr.sts_code = stl.code
283   AND stl.LANGUAGE = userenv('LANG')
284   AND chr.id IN (SELECT DISTINCT cle_fin.dnz_chr_id chr_id
285                  FROM okc_line_styles_b lse_fin,
286                       okc_k_lines_tl clet_fin,
287                       okc_k_lines_b cle_fin,
288                       okc_k_headers_b chr
289                  WHERE cle_fin.cle_id IS NULL
290                  AND cle_fin.chr_id = cle_fin.dnz_chr_id
291                  AND cle_fin.dnz_chr_id = chr.id
292                  AND cle_fin.id = clet_fin.id
293                  AND clet_fin.LANGUAGE = userenv('LANG')
294                  AND lse_fin.id = cle_fin.lse_id
295                  AND lse_fin.lty_code = 'FREE_FORM1'
296 -- BAKUCHIB 2748110 Start
297                  AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
298                  AND chr.scs_code IN ('LEASE', 'LOAN')
299                  AND chr.authoring_org_id = p_achr_rec.org_id
300 -- BAKUCHIB 2748110 End
301 -- BAKUCHIB 2781134 start
302                  AND upper(nvl(clet_fin.name,'x')) LIKE upper(nvl(p_achr_rec.asset_number,nvl(clet_fin.name,'x'))))
303 -- BAKUCHIB 2781134 end
304   ORDER BY contract_number ASC;
305 
306   -- Get the chr_id for serial number
307   CURSOR get_for_sno_csr(p_achr_rec IN achr_rec_type)
308   IS
309   SELECT chr.id chr_id,
310          chr.contract_number contract_number,
311          chr.start_date from_start_date,
312          chr.end_date from_end_date,
313          stl.code sts_code,
314          stl.meaning sts_meaning,
315          chr.authoring_org_id org_id,
316          hp.party_name party_name
317   FROM okc_statuses_tl stl,
318        hz_parties hp,
319        okc_k_party_roles_b cpl,
320        okc_k_headers_b chr
321 -- BAKUCHIB 2781134 start
322   WHERE upper(chr.contract_number) LIKE upper(nvl(p_achr_rec.contract_number,chr.contract_number))
323 -- BAKUCHIB 2781134 end
324 -- BAKUCHIB 2748110 Start
325   AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
326   AND chr.scs_code IN ('LEASE', 'LOAN')
327   AND chr.authoring_org_id = p_achr_rec.org_id
328 -- BAKUCHIB 2748110 End
329 -- BAKUCHIB 2781134 start
330 -- BAKUCHIB 2807201 start
331   AND nvl(chr.start_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_start_date,nvl(chr.start_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_start_date,nvl(chr.start_date,to_date('1111','yyyy')))
332   AND nvl(chr.end_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_end_date,nvl(chr.end_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_end_date,nvl(chr.end_date,to_date('1111','yyyy')))
333 -- BAKUCHIB 2807201 end
334 -- BAKUCHIB 2781134 end
335   AND chr.id = cpl.dnz_chr_id
336   AND cpl.chr_id = cpl.dnz_chr_id
337   AND cpl.object1_id1 = hp.party_id
338   AND cpl.object1_id2 = '#'
339   AND cpl.jtot_object1_code = 'OKX_PARTY'
340   AND cpl.rle_code = 'LESSEE'
341   AND cpl.cle_id IS NULL
342 -- BAKUCHIB 2781134 start
343   AND upper(hp.party_name) LIKE upper(nvl(p_achr_rec.party_name,hp.party_name))
344 -- BAKUCHIB 2781134 end
345   AND hp.party_type IN ( 'PERSON','ORGANIZATION')
346   AND chr.sts_code = stl.code
347   AND stl.LANGUAGE = userenv('LANG')
348   AND chr.id IN (SELECT DISTINCT cim_ib.dnz_chr_id chr_id
349                  FROM csi_item_instances csi,
350                       okc_k_items cim_ib,
351                       okc_line_styles_b lse_ib,
352                       okc_k_lines_b cle_ib,
353                       okc_k_headers_b chr
354                  WHERE cle_ib.lse_id = lse_ib.id
355                  AND lse_ib.lty_code = 'INST_ITEM'
356                  AND cim_ib.cle_id = cle_ib.id
357                  AND cim_ib.dnz_chr_id = cle_ib.dnz_chr_id
358                  AND cle_ib.dnz_chr_id = chr.id
359 -- BAKUCHIB 2748110 Start
360                  AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
361                  AND chr.scs_code IN ('LEASE', 'LOAN')
362                  AND chr.authoring_org_id = p_achr_rec.org_id
363 -- BAKUCHIB 2748110 End
364                  AND cim_ib.object1_id1 = csi.instance_id
365                  AND cim_ib.object1_id2 = '#'
366                  AND cim_ib.jtot_object1_code = 'OKX_IB_ITEM'
367 -- BAKUCHIB 2781134 start
368                  AND upper(nvl(csi.serial_number,'x')) LIKE upper(nvl(p_achr_rec.serial_number,nvl(csi.serial_number,'x'))))
369 -- BAKUCHIB 2781134 end
370   ORDER BY contract_number ASC;
371 
372   -- Get the chr_id for asset number and serial number
373   CURSOR get_for_asset_sno_csr(p_achr_rec IN achr_rec_type)
374   IS
375   SELECT chr.id chr_id,
376          chr.contract_number contract_number,
377          chr.start_date from_start_date,
378          chr.end_date from_end_date,
379          stl.code sts_code,
380          stl.meaning sts_meaning,
381          chr.authoring_org_id org_id,
382          hp.party_name party_name
383   FROM okc_statuses_tl stl,
384        hz_parties hp,
385        okc_k_party_roles_b cpl,
386        okc_k_headers_b chr
387 -- BAKUCHIB 2781134 start
388   WHERE upper(chr.contract_number) LIKE upper(nvl(p_achr_rec.contract_number,chr.contract_number))
389 -- BAKUCHIB 2781134 end
390 -- BAKUCHIB 2748110 Start
391   AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
392   AND chr.scs_code IN ('LEASE', 'LOAN')
393   AND chr.authoring_org_id = p_achr_rec.org_id
394 -- BAKUCHIB 2748110 End
395 -- BAKUCHIB 2781134 start
396 -- BAKUCHIB 2807201 start
397   AND nvl(chr.start_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_start_date,nvl(chr.start_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_start_date,nvl(chr.start_date,to_date('1111','yyyy')))
398   AND nvl(chr.end_date,to_date('1111','yyyy')) BETWEEN nvl(p_achr_rec.from_end_date,nvl(chr.end_date,to_date('1111','yyyy'))) AND nvl(p_achr_rec.to_end_date,nvl(chr.end_date,to_date('1111','yyyy')))
399 -- BAKUCHIB 2807201 end
400 -- BAKUCHIB 2781134 end
401   AND chr.id = cpl.dnz_chr_id
402   AND cpl.chr_id = cpl.dnz_chr_id
403   AND cpl.object1_id1 = hp.party_id
404   AND cpl.object1_id2 = '#'
405   AND cpl.jtot_object1_code = 'OKX_PARTY'
406   AND cpl.rle_code = 'LESSEE'
407   AND cpl.cle_id IS NULL
408 -- BAKUCHIB 2781134 start
409   AND upper(hp.party_name)LIKE upper(nvl(p_achr_rec.party_name,hp.party_name))
410 -- BAKUCHIB 2781134 end
411   AND hp.party_type IN ( 'PERSON','ORGANIZATION')
412   AND chr.sts_code = stl.code
413   AND stl.LANGUAGE = userenv('LANG')
414   AND chr.id IN (SELECT DISTINCT cle_fin.dnz_chr_id chr_id
415                  FROM csi_item_instances csi,
416                       okc_k_items cim_ib,
417                       okc_line_styles_b lse_ib,
418                       okc_k_lines_b cle_ib,
419                       okc_line_styles_b lse_inst,
420                       okc_k_lines_b cle_inst,
421                       okc_line_styles_b lse_fin,
422                       okc_k_lines_tl clet_fin,
423                       okc_k_lines_b cle_fin,
424                       okc_k_headers_b chr
425                  WHERE cle_fin.cle_id IS NULL
426                  AND cle_fin.chr_id = cle_fin.dnz_chr_id
427                  AND cle_fin.dnz_chr_id = chr.id
428 -- BAKUCHIB 2748110 Start
429                  AND chr.sts_code IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD','LITIGATION_HOLD','TERMINATION_HOLD')
430                  AND chr.scs_code IN ('LEASE', 'LOAN')
431                  AND chr.authoring_org_id = p_achr_rec.org_id
432 -- BAKUCHIB 2748110 End
433                  AND cle_fin.id = clet_fin.id
434                  AND clet_fin.LANGUAGE = userenv('LANG')
435                  AND lse_fin.id = cle_fin.lse_id
436                  AND lse_fin.lty_code = 'FREE_FORM1'
437                  AND cle_inst.cle_id = cle_fin.id
438                  AND cle_inst.dnz_chr_id = cle_fin.dnz_chr_id
439                  AND cle_inst.lse_id = lse_inst.id
440                  AND lse_inst.lty_code = 'FREE_FORM2'
441                  AND cle_ib.cle_id = cle_inst.id
442                  AND cle_ib.dnz_chr_id = cle_fin.dnz_chr_id
443                  AND cle_ib.lse_id = lse_ib.id
444                  AND lse_ib.lty_code = 'INST_ITEM'
445                  AND cim_ib.cle_id = cle_ib.id
446                  AND cim_ib.dnz_chr_id = cle_ib.dnz_chr_id
447                  AND cim_ib.object1_id1 = csi.instance_id
448                  AND cim_ib.object1_id2 = '#'
449                  AND cim_ib.jtot_object1_code = 'OKX_IB_ITEM'
450 -- BAKUCHIB 2781134 start
451                  AND upper(nvl(csi.serial_number,'x')) LIKE upper(nvl(p_achr_rec.serial_number,nvl(csi.serial_number,'x')))
452                  AND upper(nvl(clet_fin.name,'x')) LIKE upper(nvl(p_achr_rec.asset_number,nvl(clet_fin.name,'x'))))
453 -- BAKUCHIB 2781134 end
454   ORDER BY contract_number ASC;
455   -- For debug logging
456   L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'advance_contract_search';
457     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
458     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
459     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
460   BEGIN
461 
462    IF (is_debug_procedure_on) THEN
463         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
464    END IF;
465    IF (is_debug_statement_on) THEN
466         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.asset_number :'||p_achr_rec.asset_number);
467 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.serial_number :'||p_achr_rec.serial_number);
468 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.chr_id :'||p_achr_rec.chr_id);
469 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.contract_number:'||p_achr_rec.contract_number  );
470 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.from_start_date:'||p_achr_rec.from_start_date  );
471 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.to_start_date :'||p_achr_rec.to_start_date    );
472 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.from_end_date :'||p_achr_rec.from_end_date    );
473 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.to_end_date :'||p_achr_rec.to_end_date      );
474 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.sts_code :'||p_achr_rec.sts_code         );
475 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.sts_meaning :'||p_achr_rec.sts_meaning     );
476 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.org_id :'||p_achr_rec.org_id           );
477 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_achr_rec.party_name :'||p_achr_rec.party_name     );
478 
479    END IF;
480 
481 
482 
483     x_return_status := OKL_API.G_RET_STS_SUCCESS;
484     x_return_status := OKL_API.START_ACTIVITY(l_api_name,
485                                               G_PKG_NAME,
486                                               p_init_msg_list,
487                                               l_api_version,
488                                               p_api_version,
489                                               '_PVT',
490                                               x_return_status);
491     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
492       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
493     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
494       RAISE OKL_API.G_EXCEPTION_ERROR;
495     END IF;
496 -- BAKUCHIB 2748110 Start
497     -- Setting the org_id if the input org_id is null
498     IF (l_achr_rec.org_id IS NULL OR
499        l_achr_rec.org_id = OKL_API.G_MISS_NUM) THEN
500          l_achr_rec.org_id := MO_GLOBAL.GET_CURRENT_ORG_ID();
501     END IF;
502 -- BAKUCHIB 2748110 End
503     -- If the asset number and serial number when not given.
504     IF (l_achr_rec.asset_number = OKL_API.G_MISS_CHAR OR
505        l_achr_rec.asset_number IS NULL) AND
506        (l_achr_rec.serial_number = OKL_API.G_MISS_CHAR OR
507        l_achr_rec.serial_number IS NULL) THEN
508       -- Get the contract details
509       FOR r_get_chr_dtls_csr IN get_chr_dtls_csr(p_achr_rec => l_achr_rec) LOOP
510         IF get_chr_dtls_csr%NOTFOUND THEN
511           IF (l_achr_rec.contract_number IS NOT NULL OR
512              l_achr_rec.contract_number <> OKL_API.G_MISS_CHAR) THEN
513             OKL_API.set_message(p_app_name      => G_APP_NAME,
514                                 p_msg_name      => G_INVALID_VALUE1,
515                                 p_token1        => 'COL_NAME',
516                                 p_token1_value  => 'Contract Number');
517           END IF;
518           IF (l_achr_rec.from_start_date IS NOT NULL OR
519              l_achr_rec.from_start_date <> OKL_API.G_MISS_DATE) OR
520              (l_achr_rec.to_start_date IS NOT NULL OR
521              l_achr_rec.to_start_date <> OKL_API.G_MISS_DATE) THEN
522             OKL_API.set_message(p_app_name      => G_APP_NAME,
523                                 p_msg_name      => G_INVALID_VALUE1,
524                                 p_token1        => 'COL_NAME',
525                                 p_token1_value  => 'Start Date');
526           END IF;
527           IF (l_achr_rec.from_end_date IS NOT NULL OR
528              l_achr_rec.from_end_date <> OKL_API.G_MISS_DATE) OR
529              (l_achr_rec.to_end_date IS NOT NULL OR
530              l_achr_rec.to_end_date <> OKL_API.G_MISS_DATE) THEN
531             OKL_API.set_message(p_app_name      => G_APP_NAME,
532                                 p_msg_name      => G_INVALID_VALUE1,
533                                 p_token1        => 'COL_NAME',
534                                 p_token1_value  => 'End Date');
535           END IF;
536           IF (l_achr_rec.party_name IS NOT NULL OR
537              l_achr_rec.party_name <> OKL_API.G_MISS_CHAR) THEN
538             OKL_API.set_message(p_app_name      => G_APP_NAME,
539                                 p_msg_name      => G_INVALID_VALUE1,
540                                 p_token1        => 'COL_NAME',
541                                 p_token1_value  => 'Party Name');
542           END IF;
543           x_return_status := OKL_API.G_RET_STS_ERROR;
544           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
545         END IF;
546         x_achr_tbl(i).contract_number  := r_get_chr_dtls_csr.contract_number;
547         x_achr_tbl(i).chr_id           := r_get_chr_dtls_csr.chr_id;
548         x_achr_tbl(i).from_start_date  := r_get_chr_dtls_csr.from_start_date;
549         x_achr_tbl(i).from_end_date    := r_get_chr_dtls_csr.from_end_Date;
550         x_achr_tbl(i).sts_code         := r_get_chr_dtls_csr.sts_code;
551         x_achr_tbl(i).sts_meaning      := r_get_chr_dtls_csr.sts_meaning;
552         x_achr_tbl(i).org_id           := r_get_chr_dtls_csr.org_id;
553         x_achr_tbl(i).party_name       := r_get_chr_dtls_csr.party_name;
554         i := i + 1;
555       END LOOP;
556       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
557         RAISE OKL_API.G_EXCEPTION_ERROR;
558       END IF;
559     -- If the asset number given and serial number when not given.
560     ELSIF (l_achr_rec.asset_number <> OKL_API.G_MISS_CHAR OR
561           l_achr_rec.asset_number IS NOT NULL) AND
562           (l_achr_rec.serial_number = OKL_API.G_MISS_CHAR OR
563           l_achr_rec.serial_number IS NULL) THEN
564       -- Get the contract details for asset number
565       FOR r_get_for_asset_csr IN get_for_asset_csr(p_achr_rec => l_achr_rec) LOOP
566         IF get_for_asset_csr%NOTFOUND THEN
567           OKL_API.set_message(p_app_name      => G_APP_NAME,
568                               p_msg_name      => G_INVALID_VALUE1,
569                               p_token1        => 'COL_NAME',
570                               p_token1_value  => 'Asset Number');
571           x_return_status := OKL_API.G_RET_STS_ERROR;
572           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
573         END IF;
574         x_achr_tbl(i).contract_number  := r_get_for_asset_csr.contract_number;
575         x_achr_tbl(i).chr_id           := r_get_for_asset_csr.chr_id;
576         x_achr_tbl(i).from_start_date  := r_get_for_asset_csr.from_start_date;
577         x_achr_tbl(i).from_end_date    := r_get_for_asset_csr.from_end_Date;
578         x_achr_tbl(i).sts_code         := r_get_for_asset_csr.sts_code;
579         x_achr_tbl(i).sts_meaning      := r_get_for_asset_csr.sts_meaning;
580         x_achr_tbl(i).org_id           := r_get_for_asset_csr.org_id;
581         x_achr_tbl(i).party_name       := r_get_for_asset_csr.party_name;
582         i := i + 1;
583       END LOOP;
584       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
585         RAISE OKL_API.G_EXCEPTION_ERROR;
586       END IF;
587     -- If the asset number not given and serial number given.
588     ELSIF (l_achr_rec.asset_number = OKL_API.G_MISS_CHAR OR
589           l_achr_rec.asset_number IS NULL) AND
590           (l_achr_rec.serial_number <> OKL_API.G_MISS_CHAR OR
591           l_achr_rec.serial_number IS NOT NULL) THEN
592       -- Get the contract details for serial number
593       FOR r_get_for_sno_csr IN get_for_sno_csr(p_achr_rec => l_achr_rec) LOOP
594         IF get_for_sno_csr%NOTFOUND THEN
595           OKL_API.set_message(p_app_name      => G_APP_NAME,
596                               p_msg_name      => G_INVALID_VALUE1,
597                               p_token1        => 'COL_NAME',
598                               p_token1_value  => 'Serial Number');
599           x_return_status := OKL_API.G_RET_STS_ERROR;
600           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
601         END IF;
602         x_achr_tbl(i).contract_number  := r_get_for_sno_csr.contract_number;
603         x_achr_tbl(i).chr_id           := r_get_for_sno_csr.chr_id;
604         x_achr_tbl(i).from_start_date  := r_get_for_sno_csr.from_start_date;
605         x_achr_tbl(i).from_end_date    := r_get_for_sno_csr.from_end_Date;
606         x_achr_tbl(i).sts_code         := r_get_for_sno_csr.sts_code;
607         x_achr_tbl(i).sts_meaning      := r_get_for_sno_csr.sts_meaning;
608         x_achr_tbl(i).org_id           := r_get_for_sno_csr.org_id;
609         x_achr_tbl(i).party_name       := r_get_for_sno_csr.party_name;
610         i := i + 1;
611       END LOOP;
612       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
613         RAISE OKL_API.G_EXCEPTION_ERROR;
614       END IF;
615     -- If the asset number and serial number when given.
616     ELSIF (l_achr_rec.asset_number <> OKL_API.G_MISS_CHAR OR
617           l_achr_rec.asset_number IS NOT NULL) AND
618           (l_achr_rec.serial_number <> OKL_API.G_MISS_CHAR OR
619           l_achr_rec.serial_number IS NOT NULL) THEN
620       -- Get the contract details for asset number and serial number
621       FOR r_get_for_asset_sno_csr IN get_for_asset_sno_csr(p_achr_rec => l_achr_rec) LOOP
622         IF get_for_asset_sno_csr%NOTFOUND THEN
623           OKL_API.set_message(p_app_name      => G_APP_NAME,
624                               p_msg_name      => G_INVALID_VALUE1,
625                               p_token1        => 'COL_NAME',
626                               p_token1_value  => 'Asset Number or Serial Number');
627           x_return_status := OKL_API.G_RET_STS_ERROR;
628           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
629         END IF;
630         x_achr_tbl(i).contract_number  := r_get_for_asset_sno_csr.contract_number;
631         x_achr_tbl(i).chr_id           := r_get_for_asset_sno_csr.chr_id;
632         x_achr_tbl(i).from_start_date  := r_get_for_asset_sno_csr.from_start_date;
633         x_achr_tbl(i).from_end_date    := r_get_for_asset_sno_csr.from_end_Date;
634         x_achr_tbl(i).sts_code         := r_get_for_asset_sno_csr.sts_code;
635         x_achr_tbl(i).sts_meaning      := r_get_for_asset_sno_csr.sts_meaning;
636         x_achr_tbl(i).org_id           := r_get_for_asset_sno_csr.org_id;
637         x_achr_tbl(i).party_name       := r_get_for_asset_sno_csr.party_name;
638         i := i + 1;
639       END LOOP;
640       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
641         RAISE OKL_API.G_EXCEPTION_ERROR;
642       END IF;
643     END IF;
644     OKL_API.END_ACTIVITY (x_msg_count,
645                           x_msg_data );
646 
647    IF (is_debug_procedure_on) THEN
648        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,G_MODULE_NAME||'advance_contract_search','End(-)');
649    END IF;
650 
651   EXCEPTION
652     WHEN OKL_API.G_EXCEPTION_ERROR THEN
653       IF get_chr_dtls_csr%ISOPEN THEN
654         CLOSE get_chr_dtls_csr;
655       END IF;
656       IF get_for_sno_csr%ISOPEN THEN
657         CLOSE get_for_sno_csr;
658       END IF;
659       IF get_for_asset_csr%ISOPEN THEN
660         CLOSE get_for_asset_csr;
661       END IF;
662       IF get_for_asset_sno_csr%ISOPEN THEN
663         CLOSE get_for_asset_sno_csr;
664       END IF;
665 
666      x_return_status := OKL_API.HANDLE_EXCEPTIONS(
667                                  l_api_name,
668                                  G_PKG_NAME,
669                                  'OKL_API.G_RET_STS_ERROR',
670                                  x_msg_count,
671                                  x_msg_data,
672                                  '_PVT');
673 
674 
675     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
676       IF get_chr_dtls_csr%ISOPEN THEN
677         CLOSE get_chr_dtls_csr;
678       END IF;
679       IF get_for_sno_csr%ISOPEN THEN
680         CLOSE get_for_sno_csr;
681       END IF;
682       IF get_for_asset_csr%ISOPEN THEN
683         CLOSE get_for_asset_csr;
684       END IF;
685       IF get_for_asset_sno_csr%ISOPEN THEN
686         CLOSE get_for_asset_sno_csr;
687       END IF;
688       IF (is_debug_exception_on) THEN
689             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
690                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
691       END IF;
692       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
693                                 l_api_name,
694                                 G_PKG_NAME,
695                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
696                                 x_msg_count,
697                                 x_msg_data,
698                                 '_PVT');
699     WHEN OTHERS THEN
700       IF get_chr_dtls_csr%ISOPEN THEN
701         CLOSE get_chr_dtls_csr;
702       END IF;
703       IF get_for_sno_csr%ISOPEN THEN
704         CLOSE get_for_sno_csr;
705       END IF;
706       IF get_for_asset_csr%ISOPEN THEN
707         CLOSE get_for_asset_csr;
708       END IF;
709       IF get_for_asset_sno_csr%ISOPEN THEN
710         CLOSE get_for_asset_sno_csr;
711       END IF;
712       IF (is_debug_exception_on) THEN
713             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
714                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
715       END IF;
716       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
717                                 l_api_name,
718                                 G_PKG_NAME,
719                                 'OTHERS',
720                                 x_msg_count,
721                                 x_msg_data,
722                                 '_PVT');
723   END advance_contract_search;
724 
725   ------------------------------------------------------------------------
726   -- PROCEDURE set_quote_defaults
727   -- Default the values of parameters if the values are not passed to this API
728   -- This assumption is necessary because this API can either be called from
729   -- a screen or from some other process api
730   -- rmunjulu EDT 3797384 made changes so that Quote Effective To Date is
731   -- properly defaulted
732   ------------------------------------------------------------------------
733   PROCEDURE set_quote_defaults(
734                px_quot_rec              IN OUT NOCOPY quot_rec_type,
735                p_rule_chr_id            IN NUMBER,
736                p_sys_date               IN DATE,
737                x_return_status          OUT NOCOPY VARCHAR2)  IS
738 
739     l_quote_eff_days         NUMBER;
740     l_quote_eff_max_days     NUMBER;
741     l_quote_status           VARCHAR2(200) := 'DRAFTED';
742     l_quote_reason           VARCHAR2(200) := 'EOT';
743     l_sys_date               DATE;
744     l_return_status          VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
745         L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_quote_defaults';
746     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
747     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
748     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
749   BEGIN
750    IF (is_debug_procedure_on) THEN
751        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
752    END IF;
753 
754     -- Get the sysdate
755     l_sys_date := p_sys_date;
756 
757     -- Set the date_effective_from if null
758     IF ((px_quot_rec.date_effective_from IS NULL) OR
759         (px_quot_rec.date_effective_from = OKL_API.G_MISS_DATE)) THEN
760       px_quot_rec.date_effective_from :=  l_sys_date ;
761     END IF;
762 
763     -- Set the date_effective_to if null
764     IF ((px_quot_rec.date_effective_to IS NULL) OR
765         (px_quot_rec.date_effective_to = OKL_API.G_MISS_DATE)) THEN
766 
767       IF (is_debug_statement_on) THEN
768        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
769        'before call to quote_effectivity :'||l_return_status);
770       END IF;
771       -- set the date eff to using rules
772       quote_effectivity(
773            p_quot_rec             => px_quot_rec,
774            p_rule_chr_id          => p_rule_chr_id,
775            x_quote_eff_days       => l_quote_eff_days,
776            x_quote_eff_max_days   => l_quote_eff_max_days,
777            x_return_status        => l_return_status);
778 
779       IF (is_debug_statement_on) THEN
780        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
781        'after call to quote_effectivity :'||l_return_status);
782       END IF;
783 
784     --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
785         --rmunjulu EDT 3797384 removed and replaced with below logic
786 --      px_quot_rec.date_effective_to   :=  px_quot_rec.date_effective_from + l_quote_eff_days;
787 
788       -- rmunjulu EDT 3797384 logic for date_effective_to varies for pre and post
789       IF trunc(l_sys_date) > trunc(px_quot_rec.date_effective_from) THEN -- pre dated
790          -- PRE DATED QUOTE: effective_to = date_created + quote_eff_days
791          px_quot_rec.date_effective_to   :=  l_sys_date + l_quote_eff_days;
792       ELSIF trunc(l_sys_date) < trunc(px_quot_rec.date_effective_from) THEN -- post dated
793          -- POST DATED QUOTE: effective_to = eff_from + quote_eff_days
794          px_quot_rec.date_effective_to   :=  px_quot_rec.date_effective_from + l_quote_eff_days;
795       ELSE -- current
796          -- CURRENT DATED QUOTE: effective_to = eff_from + quote_eff_days
797          px_quot_rec.date_effective_to   :=  px_quot_rec.date_effective_from + l_quote_eff_days;
798       END IF;
799 
800     --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End ++++++++++++++++
801 
802     END IF;
803 
804     -- Set the qst_code if null
805     IF ((px_quot_rec.qst_code IS NULL) OR
806         (px_quot_rec.qst_code = OKL_API.G_MISS_CHAR)) THEN
807       px_quot_rec.qst_code            :=  l_quote_status;
808     END IF;
809 
810     -- Set the qrs_code if null
811     IF ((px_quot_rec.qrs_code IS NULL) OR
812         (px_quot_rec.qrs_code = OKL_API.G_MISS_CHAR)) THEN
813       px_quot_rec.qrs_code            :=  l_quote_reason;
814     END IF;
815 
816     -- Set the preproceeds_yn if null
817     IF ((px_quot_rec.preproceeds_yn IS NULL) OR
818         (px_quot_rec.preproceeds_yn = OKL_API.G_MISS_CHAR)) THEN
819       px_quot_rec.preproceeds_yn      :=  G_NO;
820     END IF;
821 
822     -- Set the summary_format_yn if null
823     IF ((px_quot_rec.summary_format_yn IS NULL) OR
824         (px_quot_rec.summary_format_yn = OKL_API.G_MISS_CHAR)) THEN
825       px_quot_rec.summary_format_yn   :=  G_NO;
826     END IF;
827 
828     -- Set the consolidated_yn if null
829     IF ((px_quot_rec.consolidated_yn IS NULL) OR
830         (px_quot_rec.consolidated_yn = OKL_API.G_MISS_CHAR)) THEN
831       px_quot_rec.consolidated_yn     :=  G_NO;
832     END IF;
833 
834     -- Set the approved_yn if null
835     IF ((px_quot_rec.approved_yn IS NULL) OR
836         (px_quot_rec.approved_yn = OKL_API.G_MISS_CHAR)) THEN
837       px_quot_rec.approved_yn         :=  G_NO;
838     END IF;
839 
840     -- Set the payment_received_yn if null
841     IF ((px_quot_rec.payment_received_yn IS NULL) OR
842         (px_quot_rec.payment_received_yn = OKL_API.G_MISS_CHAR)) THEN
843       px_quot_rec.payment_received_yn :=  G_NO;
844     END IF;
845 
846     -- Set the date_requested if null
847     IF ((px_quot_rec.date_requested IS NULL) OR
848         (px_quot_rec.date_requested = OKL_API.G_MISS_DATE)) THEN
849       px_quot_rec.date_requested      :=  l_sys_date;
850     END IF;
851 
852     -- Set the date_proposal if null
853     IF ((px_quot_rec.date_proposal IS NULL) OR
854         (px_quot_rec.date_proposal = OKL_API.G_MISS_DATE)) THEN
855       px_quot_rec.date_proposal       :=  l_sys_date;
856     END IF;
857 
858     -- Set the requested_by if null
859     IF ((px_quot_rec.requested_by IS NULL) OR
860         (px_quot_rec.requested_by = OKL_API.G_MISS_NUM)) THEN
861       px_quot_rec.requested_by        :=  1;
862     END IF;
863 
864 -- Set the legal_entity_id if null ssiruvol(Nov 17th, 2006)
865     IF ((px_quot_rec.legal_entity_id IS NULL) OR
866         (px_quot_rec.legal_entity_id = OKL_API.G_MISS_NUM)) THEN
867       px_quot_rec.legal_entity_id     :=  OKL_LEGAL_ENTITY_UTIL.get_khr_le_id (px_quot_rec.khr_id);
868     END IF;
869 
870     -- Always NO during quote creation
871     px_quot_rec.accepted_yn           :=  G_NO;
872 
873     -- For now *** -- OKL_QTE_PVT.Validate_Trn_Code() expects a value for trn_code
874     px_quot_rec.trn_code              :=  'EXP';
875     x_return_status                   :=   l_return_status;
876 
877    IF (is_debug_procedure_on) THEN
878        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
879    END IF;
880 
881   EXCEPTION
882     WHEN OTHERS THEN
883 
884         IF (is_debug_exception_on) THEN
885             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
886                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
887         END IF;
888 
889       OKL_API.set_message(p_app_name      => g_app_name,
890                           p_msg_name      => g_unexpected_error,
891                           p_token1        => g_sqlcode_token,
892                           p_token1_value  => sqlcode,
893                           p_token2        => g_sqlerrm_token,
894                           p_token2_value  => sqlerrm);
895       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
896   END set_quote_defaults;
897 
898 
899 
900 
901   -- Start of comments
902   --
903   -- Procedure Name : early_termination_allowed
904   -- Description    : Gets early termination of contract rule
905   -- Business Rules :
906   -- Parameters     : quote rec, contract id, return status, rule found
907   -- Version        : 1.0
908   -- History        : RDRAGUIL 11-MAR-01 - changed from AMTQPR to AMTPAR rule group
909   --                  RMUNJULU 11-DEC-02 - Bug # 2484327 Send FALSE to rule api
910   --                  for p_message_yn
911   -- End of comments
912   PROCEDURE early_termination_allowed(
913 	p_quot_rec		IN quot_rec_type,
914 	p_rule_chr_id		IN NUMBER,
915 	x_return_status		OUT NOCOPY VARCHAR2,
916 	x_rule_found		OUT NOCOPY BOOLEAN)  IS
917 
918 	l_return_status		VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
919 	l_rule_found		BOOLEAN := FALSE;
920 	l_rulv_rec		rulv_rec_type;
921 	l_rule_code		CONSTANT VARCHAR2(30) := 'AMCTTA';
922 	l_rgd_code		VARCHAR2(30);
923 
924   L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'early_termination_allowed';
925     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
926     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
927     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
928   BEGIN
929 
930      IF (is_debug_procedure_on) THEN
931         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
932    END IF;
933 
934    IF (is_debug_statement_on) THEN
935         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_rule_chr_id : '||p_rule_chr_id     );
936         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.id : '||p_quot_rec.id     );
937 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qrs_code : '||p_quot_rec.qrs_code    );
938 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qst_code : '||p_quot_rec.qst_code               );
939 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_qte_id : '||p_quot_rec.consolidated_qte_id     );
940 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.khr_id : '||p_quot_rec.khr_id                 );
941 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.art_id : '||p_quot_rec.art_id                 );
942 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qtp_code : '||p_quot_rec.qtp_code               );
943 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.trn_code : '||p_quot_rec.trn_code                 );
944 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.pdt_id : '||p_quot_rec.pdt_id                  );
945 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_from : '||p_quot_rec.date_effective_from     );
946 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.quote_number : '||p_quot_rec.quote_number            );
947 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.early_termination_yn : '||p_quot_rec.early_termination_yn       );
948 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.approved_yn : '||p_quot_rec.approved_yn                  );
949 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.accepted_yn : '||p_quot_rec.accepted_yn                   );
950 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.org_id : '||p_quot_rec.org_id                        );
951 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.legal_entity_id : '||p_quot_rec.legal_entity_id               );
952 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.repo_quote_indicator_yn : '||p_quot_rec.repo_quote_indicator_yn       );
953 
954    END IF;
955 
956 	IF p_quot_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
957 		l_rgd_code := 'AVTQPR';
958 	ELSE
959 		l_rgd_code := 'AMTQPR';
960 	END IF;
961 
962       IF (is_debug_statement_on) THEN
963        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
964        'before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
965       END IF;
966 
967 
968 	OKL_AM_UTIL_PVT.get_rule_record(
969 		p_rgd_code	=> l_rgd_code,
970 		p_rdf_code	=> l_rule_code,
971 		p_chr_id	=> p_rule_chr_id,
972 		p_cle_id	=> NULL,
973 		x_rulv_rec	=> l_rulv_rec,
974  		x_return_status	=> l_return_status,
975 		p_message_yn	=> FALSE); -- RMUNJULU 11-DEC-02 2484327 Send FALSE to rule api
976 
977       IF (is_debug_statement_on) THEN
978        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
979        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
980       END IF;
981 
982 
983 	IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
984 		IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
985 			l_rule_found := TRUE;
986 		END IF;
987 	END IF;
988 
989 	x_return_status  := OKL_API.G_RET_STS_SUCCESS; -- Rule is optional
990 	x_rule_found     := l_rule_found;
991 
992    IF (is_debug_procedure_on) THEN
993        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
994    END IF;
995 
996   EXCEPTION
997     WHEN OKL_API.G_EXCEPTION_ERROR THEN
998      x_return_status := OKL_API.G_RET_STS_ERROR;
999     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1000      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1001     WHEN OTHERS THEN
1002      IF (is_debug_exception_on) THEN
1003             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1004                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1005      END IF;
1006 
1007      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1008      OKL_API.set_message(p_app_name      => g_app_name,
1009                          p_msg_name      => g_unexpected_error,
1010                          p_token1        => g_sqlcode_token,
1011                          p_token1_value  => sqlcode,
1012                          p_token2        => g_sqlerrm_token,
1013                          p_token2_value  => sqlerrm);
1014   END early_termination_allowed;
1015 
1016 
1017 
1018 
1019 
1020   -- Start of comments
1021   --
1022   -- Procedure Name : partial_termination_allowed
1023   -- Description    : Gets partial termination of contract rule
1024   -- Business Rules :
1025   -- Parameters     : quote rec, contract id, return status, rule found
1026   -- Version        : 1.0
1027   -- History        : RDRAGUIL 11-MAR-01 - changed from AMTQPR to AMTPAR rule group
1028   --                  RMUNJULU 11-DEC-02 - Bug # 2484327 Send FALSE to rule api
1029   --                  for p_message_yn
1030   -- End of comments
1031   PROCEDURE partial_termination_allowed(
1032 	p_quot_rec		IN quot_rec_type,
1033 	p_rule_chr_id		IN NUMBER,
1034 	x_return_status		OUT NOCOPY VARCHAR2,
1035 	x_rule_found		OUT NOCOPY BOOLEAN)  IS
1036 
1037 	l_return_status		VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1038 	l_rule_found		BOOLEAN := FALSE;
1039 	l_rulv_rec		rulv_rec_type;
1040 	l_rule_code		CONSTANT VARCHAR2(30) := 'AMPTQA';
1041 	l_rgd_code		VARCHAR2(30);
1042 	  L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'partial_termination_allowed';
1043     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1044     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1045     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1046   BEGIN
1047 
1048      IF (is_debug_procedure_on) THEN
1049         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1050 
1051    END IF;
1052 
1053    IF (is_debug_statement_on) THEN
1054         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_rule_chr_id : '||p_rule_chr_id     );
1055         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.id : '||p_quot_rec.id     );
1056 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qrs_code : '||p_quot_rec.qrs_code    );
1057 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qst_code : '||p_quot_rec.qst_code               );
1058 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_qte_id : '||p_quot_rec.consolidated_qte_id     );
1059 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.khr_id : '||p_quot_rec.khr_id                 );
1060 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.art_id : '||p_quot_rec.art_id                 );
1061 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qtp_code : '||p_quot_rec.qtp_code               );
1062 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.trn_code : '||p_quot_rec.trn_code                 );
1063 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.pdt_id : '||p_quot_rec.pdt_id                  );
1064 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_from : '||p_quot_rec.date_effective_from     );
1065 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.quote_number : '||p_quot_rec.quote_number            );
1066         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.partial_yn : '||p_quot_rec.partial_yn            );
1067 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.approved_yn : '||p_quot_rec.approved_yn                  );
1068 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.accepted_yn : '||p_quot_rec.accepted_yn                   );
1069 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.org_id : '||p_quot_rec.org_id                        );
1070 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.legal_entity_id : '||p_quot_rec.legal_entity_id               );
1071 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.repo_quote_indicator_yn : '||p_quot_rec.repo_quote_indicator_yn       );
1072 
1073    END IF;
1074 
1075 	IF p_quot_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
1076 		l_rgd_code := 'AVTPAR';
1077 	ELSE
1078 		l_rgd_code := 'AMTPAR';
1079 	END IF;
1080 
1081       IF (is_debug_statement_on) THEN
1082        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1083        'before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1084       END IF;
1085 
1086 	OKL_AM_UTIL_PVT.get_rule_record(
1087 		p_rgd_code	=> l_rgd_code,
1088 		p_rdf_code	=> l_rule_code,
1089 		p_chr_id	=> p_rule_chr_id,
1090 		p_cle_id	=> NULL,
1091 		x_rulv_rec	=> l_rulv_rec,
1092  		x_return_status	=> l_return_status,
1093 		p_message_yn	=> FALSE); -- RMUNJULU 11-DEC-02 2484327 Send FALSE to rule api
1094 
1095       IF (is_debug_statement_on) THEN
1096        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1097        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1098       END IF;
1099 
1100 	IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
1101 		IF NVL (l_rulv_rec.rule_information1, '*') = 'Y' THEN
1102 			l_rule_found := TRUE;
1103 		END IF;
1104 	END IF;
1105 
1106 	x_return_status  := OKL_API.G_RET_STS_SUCCESS; -- Rule is optional
1107 	x_rule_found     := l_rule_found;
1108 
1109    IF (is_debug_procedure_on) THEN
1110        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End (-)');
1111    END IF;
1112 
1113   EXCEPTION
1114     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1115      x_return_status := OKL_API.G_RET_STS_ERROR;
1116     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1117      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1118     WHEN OTHERS THEN
1119         IF (is_debug_exception_on) THEN
1120             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1121                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1122         END IF;
1123 
1124      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1125      OKL_API.set_message(p_app_name      => g_app_name,
1126                          p_msg_name      => g_unexpected_error,
1127                          p_token1        => g_sqlcode_token,
1128                          p_token1_value  => sqlcode,
1129                          p_token2        => g_sqlerrm_token,
1130                          p_token2_value  => sqlerrm);
1131   END partial_termination_allowed;
1132 
1133   ------------------------------------------------------------------------
1134   -- PROCEDURE term_status
1135   -- gets the days before contract expiration
1136   ------------------------------------------------------------------------
1137   PROCEDURE term_status(
1138 	p_quot_rec		IN quot_rec_type,
1139 	p_rule_chr_id		IN NUMBER,
1140 	x_days_before_k_exp	OUT NOCOPY NUMBER,
1141 	x_return_status		OUT NOCOPY VARCHAR2)  IS
1142 
1143 	l_return_status		VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1144 	l_rule_found		BOOLEAN := FALSE;
1145 	l_rulv_rec		rulv_rec_type;
1146 	l_rule_code		CONSTANT VARCHAR2(30) := 'AMTSET';
1147 	l_rgd_code		VARCHAR2(30);
1148     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'term_status.';
1149     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1150     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1151     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1152   BEGIN
1153    IF (is_debug_procedure_on) THEN
1154        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1155    END IF;
1156 
1157 	IF p_quot_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
1158 		l_rgd_code := 'AVTQPR';
1159 	ELSE
1160 		l_rgd_code := 'AMTQPR';
1161 	END IF;
1162 
1163       IF (is_debug_statement_on) THEN
1164        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1165        'before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1166       END IF;
1167 
1168 	OKL_AM_UTIL_PVT.get_rule_record(
1169 		p_rgd_code	=> l_rgd_code,
1170 		p_rdf_code	=> l_rule_code,
1171 		p_chr_id	=> p_rule_chr_id,
1172 		p_cle_id	=> NULL,
1173 		x_rulv_rec	=> l_rulv_rec,
1174  		x_return_status	=> l_return_status,
1175 		p_message_yn	=> TRUE);
1176 
1177       IF (is_debug_statement_on) THEN
1178        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1179        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1180       END IF;
1181 
1182 	IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
1183 		IF NVL (l_rulv_rec.rule_information1, '-1') >= 0 THEN
1184 			l_rule_found := TRUE;
1185 		END IF;
1186 	END IF;
1187 
1188 	IF l_rule_found THEN
1189 		x_days_before_k_exp   := l_rulv_rec.RULE_INFORMATION1;
1190 	END IF;
1191 
1192 	x_return_status := l_return_status;
1193 
1194    IF (is_debug_procedure_on) THEN
1195        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1196    END IF;
1197 
1198   EXCEPTION
1199     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1200      x_return_status := OKL_API.G_RET_STS_ERROR;
1201     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1202      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1203     WHEN OTHERS THEN
1204 
1205     IF (is_debug_exception_on) THEN
1206             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1207                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1208     END IF;
1209      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1210      OKL_API.set_message(p_app_name      => g_app_name,
1211                          p_msg_name      => g_unexpected_error,
1212                          p_token1        => g_sqlcode_token,
1213                          p_token1_value  => sqlcode,
1214                          p_token2        => g_sqlerrm_token,
1215                          p_token2_value  => sqlerrm);
1216   END term_status;
1217 
1218 
1219 
1220     -- Start of comments
1221     --
1222     -- Procedure Name : quote_effectivity
1223     -- Description    : gets the quote effective dates
1224     -- Business Rules :
1225     -- Parameters     : quote header, contract id
1226     -- Version        : 1.0
1227     -- History        : SECHAWLA 25-NOV-02 - Bug 2680542 : Removed DEFAULT
1228     --                  from procedure parameters.
1229     -- End of comments
1230   PROCEDURE quote_effectivity(
1231 	p_quot_rec		  IN quot_rec_type,
1232 	p_rule_chr_id		  IN NUMBER,
1233 	x_quote_eff_days	  OUT NOCOPY NUMBER,
1234 	x_quote_eff_max_days      OUT NOCOPY NUMBER,
1235 	x_return_status		  OUT NOCOPY VARCHAR2)  IS
1236 
1237 	l_return_status		VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1238 	l_rule_found		BOOLEAN := FALSE;
1239 	l_rulv_rec		rulv_rec_type;
1240 	l_rule_code		CONSTANT VARCHAR2(30) := 'AMQTEF';
1241 	l_rgd_code		VARCHAR2(30);
1242 	l_rule_chr_id		NUMBER;
1243     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'quote_effectivity';
1244     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1245     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1246     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1247   BEGIN
1248    IF (is_debug_procedure_on) THEN
1249        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1250    END IF;
1251 
1252 	IF p_quot_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
1253 		l_rgd_code := 'AVTQPR';
1254 	ELSE
1255 		l_rgd_code := 'AMTQPR';
1256 	END IF;
1257 
1258 	IF p_rule_chr_id IS NOT NULL
1259 	OR p_rule_chr_id <> OKL_API.G_MISS_NUM THEN
1260 		l_rule_chr_id := p_rule_chr_id;
1261 	ELSE
1262 		l_rule_chr_id := okl_am_util_pvt.get_rule_chr_id (p_quot_rec);
1263 	END IF;
1264 
1265      IF (is_debug_statement_on) THEN
1266        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1267        'Before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1268       END IF;
1269 	OKL_AM_UTIL_PVT.get_rule_record(
1270 		p_rgd_code	=> l_rgd_code,
1271 		p_rdf_code	=> l_rule_code,
1272 		p_chr_id	=> l_rule_chr_id,
1273 		p_cle_id	=> NULL,
1274 		x_rulv_rec	=> l_rulv_rec,
1275  		x_return_status	=> l_return_status,
1276 		p_message_yn	=> TRUE);
1277 
1278       IF (is_debug_statement_on) THEN
1279        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1280        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
1281       END IF;
1282 
1283 	IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
1284 		IF NVL (l_rulv_rec.rule_information1, '-1') >= 0 THEN
1285  			l_rule_found := TRUE;
1286 		END IF;
1287 	END IF;
1288 
1289 	IF l_rule_found THEN
1290 		x_quote_eff_days      := l_rulv_rec.RULE_INFORMATION1;
1291 		x_quote_eff_max_days  := l_rulv_rec.RULE_INFORMATION2;
1292 	END IF;
1293 
1294 	x_return_status := l_return_status;
1295 
1296    IF (is_debug_procedure_on) THEN
1297        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
1298    END IF;
1299 
1300   EXCEPTION
1301     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1302      x_return_status := OKL_API.G_RET_STS_ERROR;
1303     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1304      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1305     WHEN OTHERS THEN
1306 
1307         IF (is_debug_exception_on) THEN
1308             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1309                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
1310         END IF;
1311      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1312      OKL_API.set_message(p_app_name      => g_app_name,
1313                          p_msg_name      => g_unexpected_error,
1314                          p_token1        => g_sqlcode_token,
1315                          p_token1_value  => sqlcode,
1316                          p_token2        => g_sqlerrm_token,
1317                          p_token2_value  => sqlerrm);
1318   END quote_effectivity;
1319 
1320 
1321 
1322   -- Start of comments
1323   --
1324   -- Procedure Name : quote_type_check
1325   -- Description    : checks the quote type
1326   -- Business Rules :
1327   -- Parameters     : quote type code (input), flag indicating whether the
1328   --                  quote type changed from auto to manual
1329   -- Version        : 1.0
1330   -- History        : SECHAWLA 06-DEC-02 - Bug 2699412
1331   --                    Added logic to change the quote type from Auto to Manual,
1332   --                    if the request was to create an Auto Quote,
1333   --                    but Auto quotes are not allowed
1334   --                  SECHAWLA 02-JAN-03 - Bug 2699412
1335   --                    Added code to evaluate new rule to check if auto quotes are allowed
1336   -- End of comments
1337   PROCEDURE quote_type_check(
1338            p_qtp_code                    IN OUT NOCOPY VARCHAR2,  --SECHAWLA 2699412 changed from IN to IN OUT
1339            p_khr_id                      IN NUMBER,
1340            x_auto_to_manual              OUT NOCOPY BOOLEAN, -- SECHAWLA 2699412 added
1341            x_return_status               OUT NOCOPY VARCHAR2)  IS
1342 
1343      l_return_status               VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1344 
1345      l_new_quote_type              VARCHAR2(30); --SECHAWLA 2699412 added
1346      l_auto_to_manual              BOOLEAN := FALSE; --SECHAWLA 2699412 added
1347 
1348      -- SECHAWLA 02-JAN-03 2699412 new declarations
1349      l_auto_quotes_allowed         VARCHAR2(1);
1350      l_rulv_rec                    okl_rule_pub.rulv_rec_type;
1351      l_msg_count		           NUMBER		:= OKL_API.G_MISS_NUM;
1352 	 l_msg_data	                   VARCHAR2(2000);
1353     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'quote_type_check';
1354     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1355     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1356     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1357   BEGIN
1358    IF (is_debug_procedure_on) THEN
1359        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1360    END IF;
1361 
1362     IF (p_qtp_code IS NOT NULL) AND (p_qtp_code LIKE 'TER%') THEN
1363 
1364      IF p_qtp_code NOT LIKE 'TER_MAN%' THEN  -- auto quotes
1365 
1366        --SECHAWLA Bug # 2699412 : Added the following code to change the quote
1367        -- type from Auto to Manual, if Auto quotes are not allowed
1368 
1369        --SECHAWLA Bug # 2699412 02-JAN-03 Added the following code to check if auto quoets are allowed
1370 
1371    IF (is_debug_statement_on) THEN
1372        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1373        'before call to okl_am_util_pvt.get_rule_record :'||l_return_status);
1374    END IF;
1375        --Check if auto quotes are allowed
1376        okl_am_util_pvt.get_rule_record( p_rgd_code         => 'AMTQPR'
1377                                      ,p_rdf_code         => 'AMCMTQ'
1378                                      ,p_chr_id           => p_khr_id
1379                                      ,p_cle_id           => NULL
1380                                      ,p_message_yn       => FALSE
1381                                      ,x_rulv_rec         => l_rulv_rec  -- hold a rule instance from okc_rules_b
1382                                      ,x_return_status    => l_return_status
1383                                      ,x_msg_count        => l_msg_count
1384                                      ,x_msg_data         => l_msg_data);
1385 
1386    IF (is_debug_statement_on) THEN
1387        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1388        'after call to okl_am_util_pvt.get_rule_record :'||l_return_status);
1389    END IF;
1390 
1391       IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
1392           -- Rule instance is found
1393           IF l_rulv_rec.rule_information1 IS NOT NULL AND l_rulv_rec.rule_information1 <> OKL_API.G_MISS_CHAR THEN
1394               IF l_rulv_rec.rule_information1 = 'Y' THEN
1395                  l_auto_quotes_allowed := 'N';
1396               ELSE
1397                  l_auto_quotes_allowed := 'Y';
1398               END IF;
1399           ELSE
1400               l_auto_quotes_allowed := 'Y';
1401           END IF;
1402       ELSE
1403           l_auto_quotes_allowed := 'Y';
1404       END IF;
1405 
1406 
1407       IF l_auto_quotes_allowed = 'N' THEN
1408          IF p_qtp_code IN ('TER_PURCHASE', 'TER_RECOURSE','TER_ROLL_PURCHASE') THEN
1409             l_new_quote_type := 'TER_MAN_PURCHASE';
1410          ELSE
1411             l_new_quote_type := 'TER_MAN_WO_PURCHASE';
1412          END IF;
1413          l_auto_to_manual := TRUE;
1414          p_qtp_code := l_new_quote_type;
1415       END IF;
1416 
1417      END IF;
1418      l_return_status       := OKL_API.G_RET_STS_SUCCESS;
1419    END IF;
1420     -- SECHAWLA 2699412 : Added a flag to indicate whether quote type changed
1421     -- from Auto to Manual
1422     x_auto_to_manual := l_auto_to_manual;
1423     x_return_status := l_return_status;
1424 
1425      IF (is_debug_procedure_on) THEN
1426        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(+)');
1427    END IF;
1428 
1429   END quote_type_check;
1430 
1431 
1432 
1433 
1434   -- PROCEDURE validate_quote
1435   -- checks the validity of the quote
1436   -- History: RDRAGUIL 11-MAR-01 - added No Assets validation
1437   --          RMUNJULU 11-APR-02 - Added call to Validate_Contract, removed
1438   --                               check_contract_active_yn call
1439   --          SECHAWLA 25-NOV-02 - Bug # 2680542
1440   --                    1) Changed p_assn_tbl parameter type from IN to IN OUT
1441   --                    2) Added an out parameter x_partial_asset_line
1442   --                    to the procedure to indicate to the calling
1443   --                    procedure if the quote includes a partial asset line.
1444   --                    3) Moved all the line level validations towards the
1445   --                    end of the procedure, after contarct level validations.
1446   --                    4) Added cursor l_clines_csr to validate the asset id
1447   --                    and check if asset asset belongs to the passed contract.
1448   --                    5) Added cursor l_linesfull_csr to populate asset number
1449   --                    if it is null
1450   --                    6) Added validations for asset quantity and quote quantity
1451 
1452   --          SECHAWLA 06-DEC-02 - Bug # 2699412
1453   --                    1) Removed validation to check that already accepetd
1454   --                    quote exists for contract
1455   --                    2) Added a new validation to check if an already
1456   --                    accepted quote exists for contract line
1457   --                    3) Modified logic to check the quote type
1458   --                    4) Check for early and partial terminations only for
1459   --                    Auto quotes
1460   --                    5) Added a new parameter p_days_before_k_exp,
1461   --                    used to check if it is early termination
1462   --          RMUNJULU 11-DEC-02 - Bug # 2484327 --
1463   --                    Added code to check for accepted quote based
1464   --                    on asset level termination changes
1465   --          RMUNJULU 06-JAN-03 2736865 Date Eff From is now enterable changes
1466   --          SECHAWLA 17-FEB-03 Bug 2804703 : Added a validation to restrict the
1467   --                    creation of quote with partial asset line(s)
1468   --                    for an evergreen contract
1469   --          SECHAWLA 18-FEB-03 Bug # 2807201 : Moved the quote_type_check procedure call from this
1470   --                    procedure to create_termination_quote procedure. Removed x_new_quote_type and
1471   --                    x_auto_to_manual parameters
1472   --          SECHAWLA 28-FEB-03 Bug # 2757175 : Moved the validate contract validation from this procedure
1473   --                    to create_termination_quote procedure
1474   --          RMUNJULU 14-MAR-03 2854796 Error if quote qty less than equal to 0
1475   --          RMUNJULU 09-APR-03 2897523 Added code to check if OKS line exists for the asset
1476   --          RMUNJULU 10-APR-03 2900178 Changed cursor l_oks_lines_csr
1477   --          RMUNJULU 02-OCT-03 2757312 Added code to check for New Asset Number uniqueness
1478   --          RMUNJULU 3241502 Changed token value
1479   --          rmunjulu EDT 3797384 changed the check for early termination, check using eff_from_date
1480   --          rmunjulu EDAT Added code to check for prior dated qte not before k start date and for
1481   --                   evergreen contract not before k end date
1482   --                   Removed check for only sysdated and future dated quotes, as prior are now allowed
1483   --          rmunjulu EDAT Added code to check for FA transactions and fiscal year for prior dated terms
1484   --          rmunjulu PPD Added code to check for PPD transaction after quote eff date for prior dated quotes
1485   --          rmunjulu EDAT 17-Jan-2005 Raise proper exception
1486   --          rmunjulu Bug 4143251 Modified Check for PPD -- check for all quotes
1487   --                   Added check for BOOKED contract and Partial Quote with Quote Eff From Date after contract end date
1488   --                   Modified check for FA checks to check for PIOR and CURRENT quotes
1489   --          PAGARG   Bug 4299668 Move the cursor execution (to check whether
1490   --                   there is any OKS line attached to asset) inside
1491   --                   l_partial_asset_line check as OKS line needs to be checked
1492   --                   only in case of partial line termination
1493   --          rmunjulu LOANS_ENHANCEMENTS Termination with purchase not allowed for loans
1494   --                   Partial Line Termination not allowed for loans with actual/estimated actual
1495   --          rmunjulu LOANS_ENHANCEMENTS -- Check interest calculation done
1496   --          SECHAWLA 04-JAN-06 4915133 - partial quote (full and partial line) should not be allowed
1497   --                   for a loan contract with rev rec method 'ESTIMATED_AND_BILLED' or 'ACTUAL'
1498   PROCEDURE validate_quote(
1499   	p_api_version       	IN NUMBER,
1500   	p_init_msg_list     	IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1501   	x_return_status     	OUT NOCOPY VARCHAR2,
1502   	x_msg_count         	OUT NOCOPY NUMBER,
1503   	x_msg_data	          OUT NOCOPY VARCHAR2,
1504   	p_quot_rec	          IN quot_rec_type,
1505   	p_assn_tbl	          IN OUT NOCOPY assn_tbl_type,  -- SECHAWLA 2680542 Changed from IN to IN OUT
1506   	p_k_end_date	        IN DATE,
1507   	p_no_of_assets      	IN NUMBER,
1508   	p_sys_date	          IN DATE,
1509   	p_rule_chr_id       	IN NUMBER,
1510     p_days_before_k_exp   IN NUMBER,  --SECHAWLA Bug # 2699412  -added
1511     x_partial_asset_line  OUT NOCOPY BOOLEAN
1512 
1513 )  IS
1514 
1515     -- SECHAWLA 17-FEB-03 Bug 2804703 : replaced the usage of okl_k_headers_full_v
1516     -- with okc_k_keaders_b, added sts_code.
1517     -- Cursor to get the khr details for the k passed
1518     CURSOR k_details_for_qte_csr (p_khr_id IN NUMBER) IS
1519        SELECT K.contract_number, K.sts_code, K.start_date, K.end_date -- rmunjulu EDAT
1520        FROM   OKC_K_HEADERS_B  K
1521        WHERE  K.id     = p_khr_id;
1522 
1523 
1524     -- Cursor to get the quote details of a quote that is already accepted for
1525     -- the same contract for which this quote is being generated.
1526     CURSOR get_accepted_qte_details_csr( p_khr_id IN NUMBER) IS
1527        SELECT Q.quote_number, Q.qtp_code
1528        FROM   OKL_TRX_QUOTES_B Q
1529        WHERE  Q.khr_id  = p_khr_id
1530        AND    Q.accepted_yn = 'Y';
1531 
1532     -- This cursor is used to check if a particular asset belongs to a particular contract.
1533     -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Changed cursor to also check for
1534     -- sts_code of line match with sts_code of contract
1535     CURSOR l_clines_csr (p_kle_id NUMBER ) IS
1536       SELECT  KLE.chr_id, KLE.start_date -- rmunjulu EDAT
1537       FROM    OKC_K_LINES_B   KLE,
1538               OKC_K_HEADERS_B KHR
1539       WHERE   KLE.id = p_kle_id
1540       AND     KLE.chr_id = KHR.id
1541       AND     KLE.sts_code = KHR.sts_code;
1542 
1543 
1544     -- This cursor is used to get the asset number
1545     CURSOR l_linesfull_csr(p_id NUMBER) IS
1546     SELECT name
1547     FROM   okl_k_lines_full_v
1548     WHERE  id = p_id;
1549 
1550 
1551     -- RMUNJULU 09-APR-03 2897523 Get the OKS lines if any linked to this covered asset
1552     -- RMUNJULU 10-APR-03 2900178 Changed the query from SELECT 1 to SELECT '1',
1553     -- and removed TO_CHAR conversion to krel.object1_id1
1554     CURSOR l_oks_lines_csr ( p_kle_id IN NUMBER) IS
1555     SELECT '1'
1556     FROM dual WHERE EXISTS (
1557                SELECT '1'
1558                FROM   okc_k_headers_b   oks_chrb,
1559                       okc_line_styles_b oks_cov_pd_lse,
1560                       okc_k_lines_b     oks_cov_pd_cleb,
1561                       okc_k_rel_objs    krel,
1562                       okc_line_styles_b lnk_srv_lse,
1563                       okc_statuses_b    lnk_srv_sts,
1564                       okc_k_lines_b     lnk_srv_cleb,
1565                       okc_k_items       lnk_srv_cim
1566                WHERE  oks_chrb.scs_code            = 'SERVICE'
1567                AND    oks_chrb.id                  = oks_cov_pd_cleb.dnz_chr_id
1568                AND    oks_cov_pd_cleb.lse_id       = oks_cov_pd_lse.id
1569                AND    oks_cov_pd_lse.lty_code      = 'COVER_PROD'
1570                AND    '#'                          = krel.object1_id2
1571                AND    oks_cov_pd_cleb.id           = krel.object1_id1
1572                AND    krel.rty_code                = 'OKLSRV'
1573                AND    krel.chr_id                  = lnk_srv_cleb.dnz_chr_id
1574                AND    krel.cle_id                  = lnk_srv_cleb.id
1575                AND    lnk_srv_cleb.lse_id          = lnk_srv_lse.id
1576                AND    lnk_srv_lse.lty_code         = 'LINK_SERV_ASSET'
1577                AND    lnk_srv_cleb.sts_code        = lnk_srv_sts.code
1578                AND    lnk_srv_sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
1579                AND    lnk_srv_cleb.dnz_chr_id       = lnk_srv_cim.dnz_chr_id
1580                AND    lnk_srv_cleb.id               = lnk_srv_cim.cle_id
1581                AND    lnk_srv_cim.jtot_object1_code = 'OKX_COVASST'
1582                AND    lnk_srv_cim.object1_id2       = '#'
1583                AND    lnk_srv_cim.object1_id1       = TO_CHAR(p_kle_id));
1584 
1585     -- Bug# 5998969 -- Start
1586     -- This cursor is used to get the asset auto range
1587     CURSOR l_asset_autorange_csr IS
1588     SELECT INITIAL_ASSET_ID
1589     FROM   FA_SYSTEM_CONTROLS;
1590 
1591     l_asset_init_number NUMBER :=0;
1592     l_temp_asset_number NUMBER :=0;
1593     is_number           NUMBER :=1;
1594     -- Bug# 5998969 -- End
1595 
1596     -- RMUNJULU 09-APR-03 2897523 Added variables
1597     l_oks_line_exists BOOLEAN := FALSE;
1598 
1599     -- RMUNJULU 10-APR-03 2900178 changed to VARCHAR2
1600     l_number VARCHAR2(3);
1601 
1602 
1603     l_no_of_assets             NUMBER := 0;
1604     l_k_end_date               DATE;
1605     l_rule_found               BOOLEAN := FALSE;
1606     l_return_status            VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
1607     l_contract_status          OKC_STATUSES_V.MEANING%TYPE;
1608     l_contract_number          OKC_K_HEADERS_V.CONTRACT_NUMBER%TYPE;
1609     l_missing_lines            BOOLEAN := FALSE;
1610     l_missing_asset_qty        BOOLEAN := FALSE;
1611     l_partial_asset_line       BOOLEAN := FALSE;
1612     l_invalid_lines            BOOLEAN := FALSE;
1613     l_contract_mismatch        BOOLEAN := FALSE;
1614     i                          NUMBER := 0;
1615 
1616     l_accepted_quote_number    NUMBER := -999;
1617     l_qtp_code                 VARCHAR2(30);
1618     l_quote_type               VARCHAR2(200);
1619     l_asset_qty                NUMBER;
1620     l_chr_id                   NUMBER;
1621     l_name                     VARCHAR2(150);
1622 
1623     -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Added parameters for checking
1624     -- related to asset level termination
1625     lx_quote_tbl  OKL_AM_UTIL_PVT.quote_tbl_type;
1626 
1627     -- SECHAWLA 17-FEB-03 Bug 2804703 : new declarations
1628     l_sts_code                 okc_k_headers_b.sts_code%TYPE;
1629 
1630     -- RMUNJULU 2757312
1631     l_asset_exists VARCHAR2(1);
1632 
1633     -- rmunjulu EDAT
1634     l_k_start_date DATE;
1635     l_l_start_date DATE;
1636 
1637     -- rmunjulu PPD
1638     l_pdd_exists VARCHAR2(3);
1639 
1640     -- LOAN_ENHANCEMENTS
1641     l_deal_type VARCHAR2(300);
1642     l_rev_rec_method VARCHAR2(300);
1643 	l_int_cal_basis VARCHAR2(300);
1644 	l_tax_owner VARCHAR2(300);
1645 	l_int_calc_done VARCHAR2(3);
1646 
1647   L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'validate_quote';
1648     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1649     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1650     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1651   BEGIN
1652 
1653      IF (is_debug_procedure_on) THEN
1654        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
1655    END IF;
1656 
1657    --Print Input Variables
1658    IF (is_debug_statement_on) THEN
1659        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1660               'p_api_version :'||p_api_version);
1661       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1662               'p_init_msg_list :'||p_init_msg_list);
1663       OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1664               'p_k_end_date :'||p_k_end_date);
1665        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1666               'p_no_of_assets :'||p_no_of_assets);
1667        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1668               'p_sys_date :'||p_sys_date);
1669        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1670               'p_rule_chr_id :'||p_rule_chr_id);
1671        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1672               'p_days_before_k_exp :'||p_days_before_k_exp);
1673 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.id : '||p_quot_rec.id     );
1674 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qrs_code : '||p_quot_rec.qrs_code    );
1675 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qst_code : '||p_quot_rec.qst_code               );
1676 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_qte_id : '||p_quot_rec.consolidated_qte_id     );
1677 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.khr_id : '||p_quot_rec.khr_id                 );
1678 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.art_id : '||p_quot_rec.art_id                 );
1679 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qtp_code : '||p_quot_rec.qtp_code               );
1680 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.trn_code : '||p_quot_rec.trn_code                 );
1681 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.pdt_id : '||p_quot_rec.pdt_id                  );
1682 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_from : '||p_quot_rec.date_effective_from     );
1683 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.quote_number : '||p_quot_rec.quote_number            );
1684 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.early_termination_yn : '||p_quot_rec.early_termination_yn       );
1685 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.partial_yn : '||p_quot_rec.partial_yn            );
1686 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.preproceeds_yn : '||p_quot_rec.preproceeds_yn   );
1687 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.summary_format_yn : '||p_quot_rec.summary_format_yn     );
1688 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_yn : '||p_quot_rec.consolidated_yn     );
1689 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_requested : '||p_quot_rec.date_requested   );
1690 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_proposal : '||p_quot_rec.date_proposal   );
1691 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_to : '||p_quot_rec.date_effective_to    );
1692 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_accepted : '||p_quot_rec.date_accepted          );
1693 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.payment_received_yn : '||p_quot_rec.payment_received_yn      );
1694 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.requested_by : '||p_quot_rec.requested_by               );
1695 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.approved_yn : '||p_quot_rec.approved_yn                  );
1696 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.accepted_yn : '||p_quot_rec.accepted_yn                   );
1697 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.org_id : '||p_quot_rec.org_id                        );
1698 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.purchase_amount : '||p_quot_rec.purchase_amount               );
1699 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.purchase_formula : '||p_quot_rec.purchase_formula              );
1700 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.asset_value : '||p_quot_rec.asset_value                   );
1701 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.residual_value : '||p_quot_rec.residual_value                );
1702 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.unbilled_receivables : '||p_quot_rec.unbilled_receivables          );
1703 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.gain_loss : '||p_quot_rec.gain_loss                     );
1704 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.PERDIEM_AMOUNT : '||p_quot_rec.PERDIEM_AMOUNT                );
1705 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.currency_code : '||p_quot_rec.currency_code                 );
1706 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.currency_conversion_code : '||p_quot_rec.currency_conversion_code      );
1707 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.legal_entity_id : '||p_quot_rec.legal_entity_id               );
1708 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.repo_quote_indicator_yn : '||p_quot_rec.repo_quote_indicator_yn       );
1709    END IF;
1710 
1711     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1712 
1713     -- SECHAWLA Bug #2680542 : moved all contract level validations
1714     -- to the beginning of the procedure,  before line level validations.
1715 
1716     OPEN  k_details_for_qte_csr(p_quot_rec.khr_id);
1717     -- rmunjulu EDAT Added l_k_start_date, l_k_end_date
1718     FETCH k_details_for_qte_csr INTO l_contract_number, l_sts_code, l_k_start_date, l_k_end_date; -- SECHAWLA 17-FEB-03 Bug 2804703 : added l_sts_code
1719     CLOSE k_details_for_qte_csr;
1720 
1721     --SECHAWLA 28-FEB-03 Bug # 2757175 : Moved the following validation to the beginning of create_termination_quote procedure
1722    /*
1723      -- Call the validate contract to check contract status
1724     OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract(
1725            p_api_version                 =>   p_api_version,
1726            p_init_msg_list               =>   p_init_msg_list,
1727            x_return_status               =>   l_return_status,
1728            x_msg_count                   =>   x_msg_count,
1729            x_msg_data                    =>   x_msg_data,
1730            p_contract_id                 =>   p_quot_rec.khr_id,
1731            p_control_flag                =>   'TRMNT_QUOTE_CREATE',
1732            x_contract_status             =>   lx_contract_status);
1733 
1734     -- If error then above api will set the message, so exit now
1735     IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1736       x_return_status := OKL_API.G_RET_STS_ERROR;
1737       RAISE G_EXCEPTION_HALT_VALIDATION;
1738     END IF;
1739 */  --SECHAWLA 28-FEB-03 Bug # 2757175 : end code move
1740 
1741 
1742     ---SECHAWLA Bug # 2699412--------Check the following for the contract line--
1743 
1744     -- rmunjulu +++++++++ Effective Dated Terminations -- start  +++++++++++++++
1745 
1746     -- RMUNJULU EDAT Date Eff From can be future or past date so remove this check
1747 /*
1748     -- RMUNJULU 06-JAN-03 2736865 Date Eff From is now enterable
1749     -- Check date_eff_from should be >= sysdate
1750     IF  p_quot_rec.date_effective_from IS NOT NULL
1751     AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
1752     AND TRUNC(p_quot_rec.date_effective_from) < TRUNC(p_sys_date) THEN
1753 
1754        x_return_status := OKL_API.G_RET_STS_ERROR;
1755 
1756        -- Please enter the current or future date for the Effective From date.
1757        OKL_API.SET_MESSAGE(
1758                     p_app_name     => 'OKL',
1759  	                  p_msg_name	   => 'OKL_AM_DATE_EFF_FROM_PAST');
1760 
1761        RAISE G_EXCEPTION_HALT_VALIDATION;
1762 
1763     END IF;
1764 */
1765 
1766     -- rmunjulu EDAT Add check so that quote effective date which is a prior date
1767     -- is not before the contract start date
1768     IF  p_quot_rec.date_effective_from IS NOT NULL
1769     AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
1770     AND TRUNC(p_quot_rec.date_effective_from) < TRUNC(l_k_start_date) THEN
1771 
1772        x_return_status := OKL_API.G_RET_STS_ERROR;
1773 
1774        -- Quote Effectivity Date cannot be before contract start date.
1775        OKL_API.SET_MESSAGE(
1776                     p_app_name   => 'OKL',
1777  	                p_msg_name   => 'OKL_AM_EDT_QTE_DATE_K');
1778 
1779        RAISE G_EXCEPTION_HALT_VALIDATION;
1780 
1781     END IF;
1782 
1783     -- rmunjulu EDAT check if contract EVERGREEN then quote effective date cannot
1784     -- be before contract end date
1785     IF  p_quot_rec.date_effective_from IS NOT NULL
1786     AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
1787     AND l_sts_code = 'EVERGREEN'
1788     AND TRUNC(p_quot_rec.date_effective_from) <= TRUNC(l_k_end_date) THEN -- rmunjulu bug 6978124 For Evergreen K quote should not be allowed as of K end Date.
1789 
1790        x_return_status := OKL_API.G_RET_STS_ERROR;
1791 
1792        -- Quote Effectivity Date for an Evergreen contract cannot be before contract end date.
1793        OKL_API.SET_MESSAGE(
1794                     p_app_name   => 'OKL',
1795  	                p_msg_name   => 'OKL_AM_EDT_EVERGREEN_QTE_DATE');
1796 
1797        RAISE G_EXCEPTION_HALT_VALIDATION;
1798 
1799     END IF;
1800 
1801     -- Code for PPD check will come here
1802 
1803     -- rmunjulu +++++++++ Effective Dated Termination -- end    ++++++++++++++++
1804 
1805     -- Check date_eff_to >= date_eff_from
1806     IF  (p_quot_rec.date_effective_from IS NOT NULL)
1807     AND (p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE)
1808     AND (p_quot_rec.date_effective_to IS NOT NULL)
1809     AND (p_quot_rec.date_effective_to <> OKL_API.G_MISS_DATE) THEN
1810        IF (TRUNC(p_quot_rec.date_effective_to) <= TRUNC(p_quot_rec.date_effective_from)) THEN
1811          x_return_status := OKL_API.G_RET_STS_ERROR;
1812          -- Message : Date Effective To DATE_EFFECTIVE_TO cannot be before
1813          -- Date Effective From DATE_EFFECTIVE_FROM.
1814          OKL_API.SET_MESSAGE(p_app_name    	 => 'OKL',
1815       			                 p_msg_name		   => 'OKL_AM_DATE_EFF_FROM_LESS_TO',
1816       			                 p_token1		     => 'DATE_EFFECTIVE_TO',
1817       			                 p_token1_value	 => p_quot_rec.date_effective_to,
1818       			                 p_token2		     => 'DATE_EFFECTIVE_FROM',
1819       			                 p_token2_value	 => p_quot_rec.date_effective_from);
1820          RAISE G_EXCEPTION_HALT_VALIDATION;
1821        END IF;
1822     END IF;
1823 
1824 
1825     --SECHAWLA 18-FEB-03 Bug # 2807201 : Moved the quote_type_check procedure call from here to Create_termination quote procedure
1826 
1827    --IF l_new_quote_type NOT LIKE 'TER_MAN%' THEN ---SECHAWLA 18-FEB-03 Bug # 2807201
1828    IF p_quot_rec.qtp_code NOT LIKE 'TER_MAN%' THEN ---SECHAWLA 18-FEB-03 Bug # 2807201 : quote type passed to validate_quote is now the new quote type from create_termination_quote
1829         -- check if early termination
1830     --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
1831 
1832 --        IF TRUNC(p_k_end_date) - p_days_before_k_exp > TRUNC(p_sys_date) THEN
1833         -- rmunjulu EDT 3797384 check with date effective instead of sysdate
1834         IF TRUNC(p_k_end_date) - p_days_before_k_exp > TRUNC(p_quot_rec.date_effective_from) THEN
1835 
1836     --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End   ++++++++++++++++
1837 
1838     IF (is_debug_statement_on) THEN
1839                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1840               'before call to early_termination_allowed  :'||l_return_status);
1841     END IF;
1842 
1843             -- check if early termination allowed
1844             early_termination_allowed(
1845                 p_quot_rec        => p_quot_rec,
1846                 p_rule_chr_id     => p_rule_chr_id,
1847                 x_return_status   => l_return_status,
1848                 x_rule_found      => l_rule_found);
1849 
1850            IF (is_debug_statement_on) THEN
1851                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1852               'After call to early_termination_allowed  :'||l_return_status);
1853            END IF;
1854 
1855             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
1856                 x_return_status := OKL_API.G_RET_STS_ERROR;
1857                 RAISE G_EXCEPTION_HALT_VALIDATION;
1858             ELSIF (l_rule_found = FALSE) THEN
1859                 x_return_status := OKL_API.G_RET_STS_ERROR;
1860                 -- Early Termination of Contract CONTRACT_NUMBER is not allowed.
1861                 OKL_API.set_message( p_app_name      => 'OKL',
1862                              p_msg_name      => 'OKL_AM_CONTRACT_EARLY_TERM_NA',
1863                              p_token1        => 'CONTRACT_NUMBER',
1864                              p_token1_value  => l_contract_number);
1865                 RAISE G_EXCEPTION_HALT_VALIDATION;
1866             END IF;
1867         END IF;
1868    END IF;
1869 
1870    -- rmunjulu PPD
1871    -- do not allow creation of prior dated term quote before the principal paydown date.
1872    IF  p_quot_rec.date_effective_from IS NOT NULL
1873    AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE THEN
1874    --AND trunc(p_quot_rec.date_effective_from) < trunc(p_sys_date) THEN
1875    -- rmunjulu Bug 4143251 Removed above condition for PRIOR Dated Quotes, NOW check for all Quotes
1876 
1877 
1878     IF (is_debug_statement_on) THEN
1879                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1880               'before call to OKL_CS_PRINCIPAL_PAYDOWN_PVT.check_for_ppd  :'||l_return_status);
1881     END IF;
1882 
1883       -- Added code to check for PPD transaction after quote eff date
1884       l_pdd_exists := OKL_CS_PRINCIPAL_PAYDOWN_PVT.check_for_ppd(
1885                             p_khr_id         => p_quot_rec.khr_id,
1886                             p_effective_date => p_quot_rec.date_effective_from);
1887 
1888     IF (is_debug_statement_on) THEN
1889            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
1890            'After call to OKL_CS_PRINCIPAL_PAYDOWN_PVT.check_for_ppd  :'||l_return_status);
1891     END IF;
1892 
1893 	  IF l_pdd_exists = 'Y' THEN
1894 
1895          -- A principal paydown transaction exists for contract CONTRACT_NUMBER,
1896     	 -- can not create a quote with Effective From date before the principal
1897 	     -- paydown transaction date.
1898          OKL_API.set_message(
1899 	             p_app_name      => 'OKL',
1900                  p_msg_name      => 'OKL_AM_PPD_ERR',
1901                  p_token1        => 'CONTRACT_NUMBER',
1902                  p_token1_value  => l_contract_number);
1903 
1904          RAISE G_EXCEPTION_HALT_VALIDATION;
1905 	  END IF;
1906    END IF;
1907 
1908    -- SECHAWLA Bug #2680542 : moved all line level validations towards the end,
1909    -- after contract level validations.
1910 
1911    -- Check that there are contract lines passed as parameters.
1912     IF (p_assn_tbl.COUNT > 0) THEN
1913       i := p_assn_tbl.FIRST;
1914       -- validate contract lines
1915       LOOP
1916 
1917       IF (is_debug_statement_on) THEN
1918 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_id   :'|| p_assn_tbl(i).p_asset_id   );
1919 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_number   :'|| p_assn_tbl(i).p_asset_number      );
1920 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_qty   :'|| p_assn_tbl(i).p_asset_qty         );
1921 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_quote_qty   :'|| p_assn_tbl(i).p_quote_qty         );
1922 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_split_asset_number   :'|| p_assn_tbl(i).p_split_asset_number);
1923       END IF;
1924         IF ((p_assn_tbl(i).p_asset_id IS NULL) OR
1925             (p_assn_tbl(i).p_asset_id = OKC_API.G_MISS_NUM)) THEN
1926                 x_return_status := OKL_API.G_RET_STS_ERROR;
1927                 --Quotes are not allowed for contracts without assets.
1928                 OKC_API.SET_MESSAGE (
1929 			      p_app_name	=> 'OKL'
1930 			     ,p_msg_name	=> 'OKL_AM_NO_ASSETS_FOR_QUOTE');
1931                 RAISE G_EXCEPTION_HALT_VALIDATION;
1932         END IF;
1933 
1934         -- SECHAWLA Bug #2680542 : Added validations to check if asset id is
1935         -- valid and belongs to the passed contract.
1936         l_chr_id := 1;
1937 
1938         OPEN l_clines_csr (p_assn_tbl(i).p_asset_id);
1939         FETCH l_clines_csr INTO l_chr_id, l_l_start_date; -- rmunjulu EDAT
1940         IF l_clines_csr%NOTFOUND THEN
1941            x_return_status := OKL_API.G_RET_STS_ERROR;
1942            -- invalid asset id
1943            OKC_API.SET_MESSAGE (
1944 			     p_app_name	=> 'OKC'
1945      			,p_msg_name	=> G_INVALID_VALUE
1946     			,p_token1	=> G_COL_NAME_TOKEN
1947     			,p_token1_value	=> 'asset_id');
1948            RAISE G_EXCEPTION_HALT_VALIDATION;
1949         ELSIF (l_chr_id <> p_quot_rec.khr_id) OR (l_chr_id = 1) THEN
1950            x_return_status := OKL_API.G_RET_STS_ERROR;
1951            --Asset ASSET_NUMBER does not belong to the contract CONTRACT_NUMBER.
1952            OKC_API.SET_MESSAGE (
1953 			     p_app_name  	=> 'OKL'
1954      			,p_msg_name 	=> 'OKL_AM_CONTRACT_MISMATCH'
1955     			,p_token1	    => 'ASSET_NUMBER'
1956     			,p_token1_value	=> p_assn_tbl(i).p_asset_number,
1957                  p_token2       => 'CONTRACT_NUMBER',
1958                  p_token2_value => l_contract_number);
1959            RAISE G_EXCEPTION_HALT_VALIDATION;
1960         END IF;
1961         CLOSE l_clines_csr;
1962 
1963         -- SECHAWLA Bug #2680542 : Added code to populate asset number if it is null
1964         IF p_assn_tbl(i).p_asset_number IS NULL
1965         OR p_assn_tbl(i).p_asset_number = OKC_API.G_MISS_CHAR THEN
1966            OPEN  l_linesfull_csr(p_assn_tbl(i).p_asset_id);
1967            FETCH l_linesfull_csr INTO l_name;
1968            CLOSE l_linesfull_csr;
1969 
1970            p_assn_tbl(i).p_asset_number := l_name;
1971         END IF;
1972 
1973         -- SECHAWLA Bug #2680542 : Added code to populate asset qty and quote qty, if null
1974         IF ((p_assn_tbl(i).p_asset_qty IS NULL) OR
1975             (p_assn_tbl(i).p_asset_qty = OKC_API.G_MISS_NUM)) THEN
1976             l_asset_qty :=  okl_am_util_pvt.get_asset_quantity(p_assn_tbl(i).p_asset_id);
1977             IF l_asset_qty IS NULL THEN
1978                 x_return_status := OKL_API.G_RET_STS_ERROR;
1979                 -- Can not create quote because the asset quantity is missing.
1980                 OKC_API.SET_MESSAGE (
1981 			      p_app_name	=> 'OKL'
1982 			     ,p_msg_name	=> 'OKL_AM_NO_ASSET_QTY',
1983                   p_token1      => 'ASSET_NUMBER',
1984                   p_token1_value => p_assn_tbl(i).p_asset_number);
1985                 RAISE G_EXCEPTION_HALT_VALIDATION;
1986             ELSE
1987                p_assn_tbl(i).p_asset_qty := l_asset_qty;
1988             END IF;
1989         END IF;
1990 
1991 
1992         IF ((p_assn_tbl(i).p_quote_qty IS NULL) OR
1993             (p_assn_tbl(i).p_quote_qty = OKC_API.G_MISS_NUM)) THEN
1994                 p_assn_tbl(i).p_quote_qty := p_assn_tbl(i).p_asset_qty;
1995         END IF;
1996 
1997 
1998         -- RMUNJULU 14-MAR-03 2854796 Error if quote qty less than equal to 0
1999         IF p_assn_tbl(i).p_quote_qty <= 0 THEN
2000 
2001             -- Please enter a value greater than zero for Units to Terminate of asset ASSET_NUMBER.
2002             OKL_API.SET_MESSAGE (
2003 			              p_app_name  	 => 'OKL',
2004 			              p_msg_name  	 => 'OKL_AM_QTE_QTY_LESS_THAN_ZERO',
2005                           p_token1       => 'ASSET_NUMBER',
2006                           p_token1_value => p_assn_tbl(i).p_asset_number);
2007 
2008 
2009             RAISE G_EXCEPTION_HALT_VALIDATION;
2010 
2011         END IF;
2012 
2013 
2014         -- SECHAWLA Bug #2680542 : Added code to validate quote quantity
2015         IF p_assn_tbl(i).p_quote_qty > p_assn_tbl(i).p_asset_qty THEN
2016             x_return_status := OKL_API.G_RET_STS_ERROR;
2017             -- Asset ASSET_NUMBER quantity is less than the specified quote quantity.
2018             OKC_API.SET_MESSAGE (
2019 			 p_app_name  	=> 'OKL'
2020 			,p_msg_name  	=> 'OKL_AM_INVALID_QUOTE_QTY',
2021              p_token1       => 'ASSET_NUMBER',
2022              p_token1_value => p_assn_tbl(i).p_asset_number);
2023             RAISE G_EXCEPTION_HALT_VALIDATION;
2024         END IF;
2025 
2026         -- SECHAWLA Bug #2680542 : Check if quote invloves a partial asset line.
2027         IF p_assn_tbl(i).p_quote_qty < p_assn_tbl(i).p_asset_qty THEN
2028            l_partial_asset_line := TRUE;
2029         END IF;
2030 
2031 
2032 
2033         -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Added code to check for accepted
2034         -- quote based on asset level termination changes
2035 
2036     IF (is_debug_statement_on) THEN
2037                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2038               'before call to OKL_AM_UTIL_PVT.get_line_quotes  :'||l_return_status);
2039     END IF;
2040 
2041         -- Check if accepted quote exists for the asset
2042         OKL_AM_UTIL_PVT.get_line_quotes (
2043            p_kle_id        => p_assn_tbl(i).p_asset_id,
2044            x_quote_tbl     => lx_quote_tbl,
2045            x_return_status => x_return_status);
2046 
2047     IF (is_debug_statement_on) THEN
2048                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2049               'After call to OKL_AM_UTIL_PVT.get_line_quotes  :'||l_return_status);
2050     END IF;
2051 
2052         -- Check the return status
2053         IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2054 
2055             -- Error occured in util proc, message set by util proc raise exp
2056             RAISE G_EXCEPTION_HALT_VALIDATION;
2057 
2058         END IF;
2059 
2060         -- Check if accepted quote exists for the asset
2061         IF lx_quote_tbl.COUNT > 0 THEN
2062 
2063           IF (is_debug_statement_on) THEN
2064                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2065               'before call to OKL_AM_UTIL_PVT.get_lookup_meaning  :'||l_return_status);
2066            END IF;
2067 
2068             l_quote_type := OKL_AM_UTIL_PVT.get_lookup_meaning(
2069                                       'OKL_QUOTE_TYPE',
2070                                       lx_quote_tbl(lx_quote_tbl.FIRST).qtp_code,
2071                                       'Y');
2072 
2073            IF (is_debug_statement_on) THEN
2074                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2075               'after call to OKL_AM_UTIL_PVT.get_lookup_meaning  :'||l_return_status);
2076            END IF;
2077             -- Accepted quote QUOTE_NUMBER of quote type QUOTE_TYPE exists for
2078             -- asset ASSET_NUMBER. Cannot create another quote for the same asset.
2079             OKL_API.set_message (
2080          			 p_app_name  	  => 'OKL',
2081          			 p_msg_name  	  => 'OKL_AM_ASSET_QTE_EXISTS_ERR',
2082                p_token1       => 'QUOTE_NUMBER',
2083                p_token1_value => lx_quote_tbl(lx_quote_tbl.FIRST).quote_number,
2084                p_token2       => 'QUOTE_TYPE',
2085                p_token2_value => l_quote_type,
2086                p_token3       => 'ASSET_NUMBER',
2087                p_token3_value => p_assn_tbl(i).p_asset_number);
2088 
2089             RAISE G_EXCEPTION_HALT_VALIDATION;
2090 
2091         END IF;
2092 
2093 	      -- AKP:REPO-QUOTE-START Get the contract product details 6599890
2094               OKL_AM_UTIL_PVT.get_contract_product_details(
2095                       p_khr_id           => p_quot_rec.khr_id,
2096                       x_deal_type        => l_deal_type,
2097                       x_rev_rec_method   => l_rev_rec_method,
2098 				      x_int_cal_basis    => l_int_cal_basis,
2099 				      x_tax_owner        => l_tax_owner,
2100 				      x_return_status    => l_return_status);
2101 
2102 
2103 		   IF (is_debug_statement_on) THEN
2104                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2105               'After call to OKL_AM_UTIL_PVT.get_contract_product_details  :'||l_return_status);
2106            END IF;
2107 
2108 
2109               -- If error then throw exception
2110               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2111 
2112                  RAISE G_EXCEPTION_HALT_VALIDATION;
2113 
2114               END IF;
2115 	      -- AKP:REPO-QUOTE-END Get the contract product details
2116 
2117         -- rmunjulu LOANS_ENHANCEMENTS Termination with purchase not allowed for loans
2118         IF  p_quot_rec.qtp_code IN (    'TER_PURCHASE',     -- Termination - With Purchase
2119 		                                'TER_MAN_PURCHASE', -- Termination - Manual With Purchase
2120 		   					            'TER_RECOURSE',     -- Termination - Recourse With Purchase
2121 		 					        	'TER_ROLL_PURCHASE' -- Termination - Rollover To New Contract With Purchase
2122 							          ) THEN
2123 
2124           IF (is_debug_statement_on) THEN
2125                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2126               'before call to OKL_AM_UTIL_PVT.get_contract_product_details  :'||l_return_status);
2127            END IF;
2128 
2129 	      -- AKP:REPO-QUOTE-START  6599890
2130 	/*		  -- Get the contract product details
2131               OKL_AM_UTIL_PVT.get_contract_product_details(
2132                       p_khr_id           => p_quot_rec.khr_id,
2133                       x_deal_type        => l_deal_type,
2134                       x_rev_rec_method   => l_rev_rec_method,
2135 				      x_int_cal_basis    => l_int_cal_basis,
2136 				      x_tax_owner        => l_tax_owner,
2137 				      x_return_status    => l_return_status);
2138 
2139 
2140 		   IF (is_debug_statement_on) THEN
2141                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2142               'After call to OKL_AM_UTIL_PVT.get_contract_product_details  :'||l_return_status);
2143            END IF;
2144 
2145 
2146               -- If error then throw exception
2147               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2148 
2149                  RAISE G_EXCEPTION_HALT_VALIDATION;
2150 
2151               END IF; */
2152 	      -- AKP:REPO-QUOTE-END
2153 
2154               IF  l_deal_type LIKE 'LOAN%' THEN
2155 
2156                  -- Termination with purchase quote is not allowed for loan contract.
2157                  OKL_API.SET_MESSAGE(
2158                      p_app_name     => 'OKL',
2159  	                 p_msg_name     => 'OKL_AM_LOAN_PAR_ERR');
2160 
2161                  RAISE G_EXCEPTION_HALT_VALIDATION;
2162 
2163               END IF;
2164         END IF;
2165 
2166     -- AKP:REPO-QUOTE-START 6599890
2167     -- asahoo Changed the message, no token will be passed.
2168     IF (p_quot_rec.repo_quote_indicator_yn IS NOT NULL AND
2169         p_quot_rec.repo_quote_indicator_yn <> OKL_API.G_MISS_CHAR) THEN
2170       IF p_quot_rec.repo_quote_indicator_yn ='Y' AND l_deal_type NOT LIKE 'LOAN%'  THEN
2171          OKL_API.SET_MESSAGE(
2172                      p_app_name      => 'OKL',
2173       		     p_msg_name      => 'OKL_AM_REPO_LOAN_VALID');
2174          RAISE G_EXCEPTION_HALT_VALIDATION;
2175       END IF;
2176     END IF;
2177     -- AKP:REPO-QUOTE-END
2178 
2179         IF  l_partial_asset_line = TRUE
2180         THEN
2181           -- Bug 4299668 PAGARG Moved the logic (to check whether there is any OKS
2182           -- line attached to asset) inside l_partial_asset_line condition as OKS
2183           -- line needs to be verified only in case of partial termination quote.
2184           -- RMUNJULU 09-APR-03 2897523 Added code to check if OKS line exists linked to covered
2185           -- asset and trying to create a partial line termination quote on that asset.
2186           OPEN l_oks_lines_csr ( p_assn_tbl(i).p_asset_id );
2187           FETCH l_oks_lines_csr INTO l_number;
2188           IF l_oks_lines_csr%FOUND THEN
2189              l_oks_line_exists := TRUE;
2190           END IF;
2191           CLOSE l_oks_lines_csr;
2192 
2193           IF l_oks_line_exists = TRUE THEN
2194 
2195             -- This asset is linked to a service contract. Assets linked to service contract can not be split.
2196             OKL_API.set_message (
2197          			 p_app_name     => 'OKL',
2198          			 p_msg_name     => 'OKL_LLA_SPA_SERVICE_LINKED');
2199 /*
2200             -- Service line LINE_NUMBER linked to asset ASSET_NUMBER exists.
2201             -- Can not create partial asset termination quote for this asset.
2202             OKL_API.set_message (
2203          			 p_app_name     => 'OKL',
2204          			 p_msg_name     => 'OKL_AM_SERVICE_LINE_EXISTS',
2205                      p_token1       => 'LINE_NUMBER',
2206                      p_token1_value => l_number,
2207                      p_token2       => 'ASSET_NUMBER',
2208                      p_token2_value => p_assn_tbl(i).p_asset_number);
2209 */
2210 
2211             RAISE G_EXCEPTION_HALT_VALIDATION;
2212           END IF; -- Bug 4299668
2213 
2214 
2215           /* SECHAWLA 04-JAN-06 4915133 ; Moved this piece later in the code : move begin
2216           -- rmunjulu LOANS_ENHANCEMENTS 13-oct-05 moved this logic here.
2217           -- rmunjulu LOANS_ENHANCEMENTS Partial line termination for loans with Actual/Estimated Actual not allowed
2218    	      -- Get the contract product details
2219           OKL_AM_UTIL_PVT.get_contract_product_details(
2220                       p_khr_id           => p_quot_rec.khr_id,
2221                       x_deal_type        => l_deal_type,
2222                       x_rev_rec_method   => l_rev_rec_method,
2223 				      x_int_cal_basis    => l_int_cal_basis,
2224 				      x_tax_owner        => l_tax_owner,
2225 				      x_return_status    => l_return_status);
2226 
2227            -- If error then throw exception
2228            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2229 
2230               RAISE G_EXCEPTION_HALT_VALIDATION;
2231 
2232            END IF;
2233 
2234            IF  l_deal_type LIKE 'LOAN%'
2235            AND l_rev_rec_method IN ('ESTIMATED_AND_BILLED','ACTUAL') THEN
2236 
2237                  -- Termination of part of units of asset ASSET_NUMBER is not allowed for contract CONTRACT_NUMBER.
2238                  OKL_API.SET_MESSAGE(
2239                      p_app_name     => 'OKL',
2240  	                 p_msg_name     => 'OKL_AM_LOAN_PAR_LN_TRMNT',
2241                      p_token1       => 'ASSET_NUMBER',
2242                      p_token1_value => p_assn_tbl(i).p_asset_number,
2243                      p_token2       => 'CONTRACT_NUMBER',
2244                      p_token2_value => l_contract_number);
2245 
2246                  RAISE G_EXCEPTION_HALT_VALIDATION;
2247 
2248            END IF;
2249            */ -- SECHAWLA 04-JAN-06 4915133 : move end
2250 
2251         END IF;
2252 
2253         --SECHAWLA 04-JAN-06 4915133 : Partial termination quotes (full or partial line)
2254 		--should not be permitted for contracts with revenue recognition method
2255 		--'Estimated and Billed' or 'Actual'
2256         IF (p_assn_tbl.COUNT < p_no_of_assets) OR (l_partial_asset_line) THEN
2257 
2258            IF (is_debug_statement_on) THEN
2259                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2260               'before call to OKL_AM_UTIL_PVT.get_contract_product_details  :'||l_return_status);
2261            END IF;
2262 
2263            -- Moved the above valdation here under this IF condition
2264            -- Get the contract product details
2265            OKL_AM_UTIL_PVT.get_contract_product_details(
2266                       p_khr_id           => p_quot_rec.khr_id,
2267                       x_deal_type        => l_deal_type,
2268                       x_rev_rec_method   => l_rev_rec_method,
2269 				      x_int_cal_basis    => l_int_cal_basis,
2270 				      x_tax_owner        => l_tax_owner,
2271 				      x_return_status    => l_return_status);
2272 
2273             IF (is_debug_statement_on) THEN
2274                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2275               'After call to OKL_AM_UTIL_PVT.get_contract_product_details  :'||l_return_status);
2276            END IF;
2277 
2278            -- If error then throw exception
2279            IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2280 
2281               RAISE G_EXCEPTION_HALT_VALIDATION;
2282 
2283            END IF;
2284 
2285            IF  l_deal_type LIKE 'LOAN%'
2286            AND l_rev_rec_method IN ('ESTIMATED_AND_BILLED','ACTUAL') THEN
2287 
2288                  -- Termination of part of units of asset ASSET_NUMBER is not allowed for contract CONTRACT_NUMBER.
2289                  OKL_API.SET_MESSAGE(
2290                      p_app_name     => 'OKL',
2291  	                 p_msg_name     => 'OKL_AM_LOAN_PAR_LN_TRMNT');
2292 
2293                  RAISE G_EXCEPTION_HALT_VALIDATION;
2294 
2295            END IF;
2296 
2297         END IF;
2298         -- SECHAWLA 04-JAN-06 4915133 : end
2299 
2300         -- RMUNJULU 2757312 Added code to validate the new asset number -- START
2301         IF  p_assn_tbl(i).p_split_asset_number IS NOT NULL
2302         AND p_assn_tbl(i).p_split_asset_number <> OKL_API.G_MISS_CHAR THEN
2303 
2304             -- If partial Line
2305             IF  p_assn_tbl(i).p_asset_qty > p_assn_tbl(i).p_quote_qty THEN
2306 
2307            IF (is_debug_statement_on) THEN
2308                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2309               'before call to asset_number_exists  :'||l_return_status);
2310            END IF;
2311 
2312                 -- Check if Asset Number Unique --
2313                 -- RMUNJULU 3241502 Added p_control
2314                 l_return_status := asset_number_exists(
2315                                            p_asset_number => p_assn_tbl(i).p_split_asset_number,
2316                                            p_control      => 'QUOTE',
2317                                            x_asset_exists => l_asset_exists);
2318 
2319             IF (is_debug_statement_on) THEN
2320                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2321               'After call to asset_number_exists  :'||l_return_status);
2322             END IF;
2323 
2324                 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2325                     -- Message set in called proc
2326                     RAISE G_EXCEPTION_HALT_VALIDATION;
2327                 END IF;
2328 
2329                 -- If Asset Number Entered is not unique raise error
2330                 IF l_asset_exists = 'Y' THEN
2331 
2332                     -- Asset number ASSET_NUMBER already exists.
2333                     OKL_API.set_message (
2334              			 p_app_name     => 'OKL',
2335          			     p_msg_name     => 'OKL_AM_NEW_ASSET_EXISTS',
2336                          p_token1       => 'ASSET_NUMBER',
2337                          p_token1_value => p_assn_tbl(i).p_split_asset_number); -- RMUNJULU 3241502 Changed token value
2338                     RAISE G_EXCEPTION_HALT_VALIDATION;
2339                 END IF;
2340 
2341                 -- Bug# 5998969 -- start
2342                 OPEN l_asset_autorange_csr;
2343                 FETCH  l_asset_autorange_csr INTO l_asset_init_number;
2344                 CLOSE l_asset_autorange_csr;
2345 
2346                  BEGIN
2347                     l_temp_asset_number := TO_NUMBER(p_assn_tbl(i).p_split_asset_number);
2348                     is_number :=1;
2349                  EXCEPTION
2350                  WHEN OTHERS THEN
2351                   is_number :=0;
2352                  END;
2353                  IF (is_number = 1) THEN
2354 
2355                    IF (p_assn_tbl(i).p_split_asset_number > l_asset_init_number) THEN
2356                    -- The New Asset Number ASSET_NUMBER is reserved for automatic asset numbering.
2357                    -- Asset number beyond AUTO_RANGE  is reserved for automatic asset numbering.
2358                    --Please modify the New Asset Number.
2359                    OKL_API.set_message (
2360              			 p_app_name     => 'OKL',
2361          			     p_msg_name     => 'OKL_AM_NEW_ASSET_IN_AUOT_RANGE',
2362                          p_token1       => 'ASSET_NUMBER',
2363                          p_token1_value => p_assn_tbl(i).p_split_asset_number,
2364                          p_token2       => 'AUTO_RANGE',
2365                          p_token2_value => l_asset_init_number);
2366 
2367                     RAISE G_EXCEPTION_HALT_VALIDATION;
2368                   END IF;
2369                 END IF;
2370                 -- Bug# 5998969 -- end
2371 
2372             END IF;
2373         END IF;
2374         -- RMUNJULU 2757312 Added code to validate the new asset number -- END
2375 
2376     -- rmunjulu +++++++++ Effective Dated Termination -- start  ++++++++++++++++
2377 
2378         -- rmunjulu EDAT Check if any asset transactions exists in FA for the asset after quote effective date
2379         IF  p_quot_rec.date_effective_from IS NOT NULL
2380         AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE THEN
2381 
2382 		   -- ++++++++++++ Same as in Accept Quote API ++++++++++++++++++++++---
2383            -- rmunjulu EDAT Add code for FA checks, do this only for prior dated terminations
2384            -- and termination with purchase (which is when we do asset disposal)
2385            -- rmunjulu Bug 4143251 Changed condition to check for FA Checks for PRE and CURRENT dated quotes
2386            IF  trunc(p_quot_rec.date_effective_from) <= trunc(p_sys_date)
2387     	   AND p_quot_rec.qtp_code IN ( 'TER_PURCHASE',     -- Termination - With Purchase
2388 		                                'TER_MAN_PURCHASE', -- Termination - Manual With Purchase
2389 		   					            'TER_RECOURSE',     -- Termination - Recourse With Purchase
2390 		 					        	'TER_ROLL_PURCHASE' -- Termination - Rollover To New Contract With Purchase
2391 							          ) THEN
2392 
2393               IF (is_debug_statement_on) THEN
2394                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2395               'before call to OKL_AM_TERMNT_QUOTE_PVT.check_asset_validity_in_fa  :'||l_return_status);
2396               END IF;
2397 
2398                  OKL_AM_TERMNT_QUOTE_PVT.check_asset_validity_in_fa(
2399                       p_kle_id          => p_assn_tbl(i).p_asset_id,
2400                       p_trn_date        => p_quot_rec.date_effective_from, -- quote eff from date will be passed
2401                       p_check_fa_year   => 'Y', -- do we need to check fiscal year
2402 				      p_check_fa_trn    => 'Y', -- do we need to check fa transactions
2403 				      p_contract_number => l_contract_number,
2404 				      x_return_status   => l_return_status);
2405 
2406 			  IF (is_debug_statement_on) THEN
2407                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2408                'After call to OKL_AM_TERMNT_QUOTE_PVT.check_asset_validity_in_fa  :'||l_return_status);
2409               END IF;
2410 
2411               -- If error in FA checks the throw exception, message set in above routine
2412               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2413 
2414                  RAISE G_EXCEPTION_HALT_VALIDATION; -- rmunjulu EDAT 17-Jan-2005
2415               END IF;
2416            END IF;
2417 		   -- ++++++++++++ Same as in Accept Quote API ++++++++++++++++++++++---
2418         END IF;
2419 
2420         -- rmunjulu EDAT Check if quote effectivity date before the asset start date for the quoted asset
2421         IF  p_quot_rec.date_effective_from IS NOT NULL
2422         AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
2423         AND TRUNC(p_quot_rec.date_effective_from) < TRUNC(l_l_start_date) THEN
2424 
2425            x_return_status := OKL_API.G_RET_STS_ERROR;
2426 
2427            -- Quote Effectivity Date cannot be before asset start date.
2428            OKL_API.SET_MESSAGE(
2429                     p_app_name   => 'OKL',
2430  	                p_msg_name   => 'OKL_AM_EDT_QTE_DATE_ASSET');
2431 
2432            RAISE G_EXCEPTION_HALT_VALIDATION;
2433 
2434         END IF;
2435 
2436     -- rmunjulu +++++++++ Effective Dated Termination -- end    ++++++++++++++++
2437 
2438 
2439         EXIT WHEN (i = p_assn_tbl.LAST);
2440         i := p_assn_tbl.NEXT(i);
2441       END LOOP;
2442     ELSE
2443       x_return_status := OKL_API.G_RET_STS_ERROR;
2444       --Quotes are not allowed for contracts without assets.
2445       OKC_API.SET_MESSAGE (
2446 			 p_app_name	=> 'OKL'
2447 			,p_msg_name	=> 'OKL_AM_NO_ASSETS_FOR_QUOTE');
2448       RAISE G_EXCEPTION_HALT_VALIDATION;
2449     END IF;
2450 
2451     --Bug# 5946411: Removed validation that prevents partial line
2452     --              termination quote creation for evergreen contracts
2453     /*
2454     --SECHAWLA 17-FEB-03 Bug 2804703 : Added the following validation
2455     IF l_sts_code = 'EVERGREEN' AND (l_partial_asset_line) THEN
2456        x_return_status := OKL_API.G_RET_STS_ERROR;
2457        -- Unable to create quote with partial asset quantities for Evergreen contract CONTRACT_NUMBER.
2458        OKC_API.SET_MESSAGE (
2459 			 p_app_name	=> 'OKL'
2460 			,p_msg_name	=> 'OKL_AM_PARTIAL_LINE_EVERGREEN',
2461              p_token1   => 'CONTRACT_NUMBER',
2462              p_token1_value => l_contract_number);
2463        RAISE G_EXCEPTION_HALT_VALIDATION;
2464     END IF;
2465     */
2466 
2467     -- rmunjulu 4143251 Added condition, if contract BOOKED and Partial Quote with
2468     -- Quote Effective From Date after contract end date then error
2469     IF  l_sts_code IN ('BOOKED')
2470 	AND ((l_partial_asset_line) OR (p_assn_tbl.COUNT < p_no_of_assets))
2471 	AND (p_quot_rec.date_effective_from IS NOT NULL
2472          AND p_quot_rec.date_effective_from <> OKL_API.G_MISS_DATE
2473          AND TRUNC(p_quot_rec.date_effective_from) > TRUNC(l_k_end_date)) THEN
2474 
2475        x_return_status := OKL_API.G_RET_STS_ERROR;
2476 
2477 
2478        -- Unable to create partial quote for contract CONTRACT_NUMBER with quote Effective From Date QUOTE_EFF_DATE
2479 	   -- after contract End Date END_DATE.
2480        OKL_API.SET_MESSAGE (
2481 			 p_app_name	    => 'OKL',
2482 			 p_msg_name	    => 'OKL_AM_PARTIAL_BOOKED_K_ERR',
2483              p_token1       => 'CONTRACT_NUMBER',
2484              p_token1_value => l_contract_number,
2485              p_token2       => 'QUOTE_EFF_DATE',
2486              p_token2_value => TRUNC(p_quot_rec.date_effective_from),
2487              p_token3       => 'END_DATE',
2488              p_token3_value => TRUNC(l_k_end_date));
2489 
2490        RAISE G_EXCEPTION_HALT_VALIDATION;
2491     END IF;
2492 
2493 
2494             IF (is_debug_statement_on) THEN
2495                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2496               'before call to OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done  :'||l_return_status);
2497             END IF;
2498     -- rmunjulu LOANS_ENHANCEMENTS -- Check interest calculation done
2499 
2500     --SECHAWLA 20-JAN-06 4970009 : The following interest calculation check
2501     --will also be done for lease contracts, with interest calculation basis 'FLOAT_FACTORS','REAMORT'
2502     --modifying OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done
2503     --no code changes done in this file for bug 4970009
2504     l_int_calc_done :=  OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done(
2505                                    p_contract_id      => p_quot_rec.khr_id,
2506                                    p_contract_number  => l_contract_number,
2507                                    p_source           => 'CREATE',
2508                                    p_trn_date         => TRUNC(p_quot_rec.date_effective_from));
2509     IF (is_debug_statement_on) THEN
2510             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2511            'After call to OKL_AM_LEASE_LOAN_TRMNT_PVT.check_int_calc_done  :'||l_return_status);
2512      END IF;
2513 
2514     IF l_int_calc_done IS NULL OR l_int_calc_done = 'N' THEN
2515 
2516         -- Message will be set in called procedure
2517         RAISE G_EXCEPTION_HALT_VALIDATION;
2518     END IF;
2519 
2520     --IF l_new_quote_type NOT LIKE 'TER_MAN%' THEN -- SECHAWLA 18-FEB-03 Bug # 2807201
2521     IF p_quot_rec.qtp_code NOT LIKE 'TER_MAN%' THEN --SECHAWLA 18-FEB-03 Bug # 2807201 : quote_type passed to validate quote is now the new quote type from create_tyermination_quote
2522 
2523         -- SECHAWLA Bug #2680542 : Added the second condition to the following
2524         -- IF statement, to check if the quote is partial. A quote is partial
2525         -- if it has less than the total number of assets on the contract or
2526         -- has units less than the total number of units for one or more assets
2527         -- on the contract
2528 
2529         -- check if partial quote
2530         IF (p_assn_tbl.COUNT < p_no_of_assets)
2531         OR (l_partial_asset_line) THEN  -- added second condition
2532 
2533           IF (is_debug_statement_on) THEN
2534               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2535              'before call to partial_termination_allowed  :'||l_return_status);
2536           END IF;
2537             -- check partial termination allowed
2538             partial_termination_allowed(
2539                 p_quot_rec        => p_quot_rec,
2540                 p_rule_chr_id     => p_rule_chr_id,
2541                 x_return_status   => l_return_status,
2542                 x_rule_found      => l_rule_found);
2543 
2544           IF (is_debug_statement_on) THEN
2545               OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2546              'After call to partial_termination_allowed  :'||l_return_status);
2547           END IF;
2548 
2549 
2550             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2551                 x_return_status := OKL_API.G_RET_STS_ERROR;
2552                 RAISE G_EXCEPTION_HALT_VALIDATION;
2553             ELSIF (l_rule_found = FALSE) THEN
2554                 x_return_status := OKL_API.G_RET_STS_ERROR;
2555                 --Partial quote for contract CONTRACT_NUMBER is not allowed.
2556                 OKL_API.set_message( p_app_name      => 'OKL',
2557                              p_msg_name      => 'OKL_AM_PARTIAL_QUOTE_NA',
2558                              p_token1        => 'CONTRACT_NUMBER',
2559                              p_token1_value  => l_contract_number);
2560                 RAISE G_EXCEPTION_HALT_VALIDATION;
2561             END IF;
2562         END IF;
2563     END IF;
2564 
2565    -- SECHAWLA Bug #2680542 : set the out parameter x_partial_asset_line to
2566    -- indicate if quote involves a partial
2567    --   asset line.
2568    x_partial_asset_line := l_partial_asset_line; -- added
2569 
2570   IF (is_debug_statement_on) THEN
2571                -- OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2572                --       'x_partial_asset_line..'||x_partial_asset_line);
2573 
2574                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2575                       'x_msg_data..'||x_msg_data);
2576 
2577                 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2578                       'x_msg_count..'||x_msg_count);
2579 
2580                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2581                       'ret status at the end.. '||x_return_status);
2582 
2583    END IF;
2584 
2585    IF (is_debug_procedure_on) THEN
2586        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,G_MODULE_NAME||'validate_quote ','End(-)');
2587    END IF;
2588 
2589 
2590   EXCEPTION
2591     WHEN G_EXCEPTION_HALT_VALIDATION THEN
2592       IF k_details_for_qte_csr%ISOPEN THEN
2593          CLOSE k_details_for_qte_csr;
2594       END IF;
2595 
2596       IF get_accepted_qte_details_csr%ISOPEN THEN
2597          CLOSE get_accepted_qte_details_csr;
2598       END IF;
2599 
2600       IF l_clines_csr%ISOPEN THEN
2601          CLOSE l_clines_csr;
2602       END IF;
2603 
2604       IF l_linesfull_csr%ISOPEN THEN
2605          CLOSE l_linesfull_csr;
2606       END IF;
2607 
2608       -- RMUNJULU 09-APR-03 2897523
2609       IF l_oks_lines_csr%ISOPEN THEN
2610          CLOSE l_oks_lines_csr;
2611       END IF;
2612 
2613       x_return_status := OKL_API.G_RET_STS_ERROR;
2614 
2615     WHEN OTHERS THEN
2616       IF k_details_for_qte_csr%ISOPEN THEN
2617          CLOSE k_details_for_qte_csr;
2618       END IF;
2619 
2620       IF get_accepted_qte_details_csr%ISOPEN THEN
2621          CLOSE get_accepted_qte_details_csr;
2622       END IF;
2623 
2624       IF l_clines_csr%ISOPEN THEN
2625          CLOSE l_clines_csr;
2626       END IF;
2627 
2628       IF l_linesfull_csr%ISOPEN THEN
2629          CLOSE l_linesfull_csr;
2630       END IF;
2631 
2632       -- RMUNJULU 09-APR-03 2897523
2633       IF l_oks_lines_csr%ISOPEN THEN
2634          CLOSE l_oks_lines_csr;
2635       END IF;
2636 
2637       IF (is_debug_exception_on) THEN
2638             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2639                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
2640       END IF;
2641 
2642       -- unexpected error
2643       OKL_API.set_message(p_app_name     => g_app_name,
2644                           p_msg_name      => g_unexpected_error,
2645                           p_token1        => g_sqlcode_token,
2646                           p_token1_value  => sqlcode,
2647                           p_token2        => g_sqlerrm_token,
2648                           p_token2_value  => sqlerrm);
2649 
2650       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2651   END validate_quote;
2652 
2653 
2654 
2655   -- Start of comments
2656   --
2657   -- Function  Name  : set_currency_defaults
2658   -- Description     : This procedure Defaults the Multi-Currency Columns
2659   -- Business Rules  :
2660   -- Parameters      : Input parameters : px_quot_rec, p_sys_date
2661   -- Version         : 1.0
2662   -- History         : 23-DEC-02 RMUNJULU 2726739 Created
2663   -- End of comments
2664   PROCEDURE set_currency_defaults(
2665             px_quot_rec       IN OUT NOCOPY quot_rec_type,
2666             p_sys_date        IN DATE,
2667             x_return_status   OUT NOCOPY VARCHAR2) IS
2668 
2669        l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2670        l_functional_currency_code VARCHAR2(15);
2671        l_contract_currency_code VARCHAR2(15);
2672        l_currency_conversion_type VARCHAR2(30);
2673        l_currency_conversion_rate NUMBER;
2674        l_currency_conversion_date DATE;
2675 
2676        l_org_id  NUMBER;
2677        l_converted_amount NUMBER;
2678 
2679        -- Since we do not use the amount or converted amount in TRX_Quotes table
2680        -- set a hardcoded value for the amount (and pass to to
2681        -- OKL_ACCOUNTING_UTIL.convert_to_functional_currency and get back
2682        -- conversion values )
2683        l_hard_coded_amount NUMBER := 100;
2684 
2685 
2686     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'set_currency_defaults';
2687     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2688     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2689     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2690   BEGIN
2691 
2692     IF (is_debug_procedure_on) THEN
2693        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begins(+)');
2694     END IF;
2695 
2696      -- Get the functional currency from AM_Util
2697      OKL_AM_UTIL_PVT.get_func_currency_org(
2698                                  x_org_id        => l_org_id,
2699                                  x_currency_code => l_functional_currency_code);
2700 
2701      IF (is_debug_statement_on) THEN
2702        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2703        'after call to OKL_AM_UTIL_PVT.get_func_currency_org :l_org_id :'||l_org_id);
2704         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2705        'after call to OKL_AM_UTIL_PVT.get_func_currency_org :l_functional_currency_code :'||l_functional_currency_code);
2706      END IF;
2707 
2708 
2709      -- Get the currency conversion details from ACCOUNTING_Util
2710      OKL_ACCOUNTING_UTIL.convert_to_functional_currency(
2711                      p_khr_id  		  	=> px_quot_rec.khr_id,
2712                      p_to_currency   		=> l_functional_currency_code,
2713                      p_transaction_date 	=> p_sys_date,
2714                      p_amount 			=> l_hard_coded_amount,
2715                      x_return_status            => l_return_status,
2716                      x_contract_currency	=> l_contract_currency_code,
2717                      x_currency_conversion_type	=> l_currency_conversion_type,
2718                      x_currency_conversion_rate	=> l_currency_conversion_rate,
2719                      x_currency_conversion_date	=> l_currency_conversion_date,
2720                      x_converted_amount 	=> l_converted_amount);
2721 
2722      IF (is_debug_statement_on) THEN
2723        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2724        'after call to OKL_ACCOUNTING_UTIL.convert_to_functional_currency :'||l_return_status);
2725      END IF;
2726 
2727      -- raise exception if error
2728      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2729        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2730      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2731        RAISE OKL_API.G_EXCEPTION_ERROR;
2732      END IF;
2733 
2734      px_quot_rec.currency_code := l_contract_currency_code;
2735      px_quot_rec.currency_conversion_code := l_functional_currency_code;
2736 
2737      -- If the functional currency is different from contract currency then set
2738      -- currency conversion columns
2739      IF l_functional_currency_code <> l_contract_currency_code THEN
2740 
2741         -- Set the currency conversion columns
2742         px_quot_rec.currency_conversion_type := l_currency_conversion_type;
2743         px_quot_rec.currency_conversion_rate := l_currency_conversion_rate;
2744         px_quot_rec.currency_conversion_date := l_currency_conversion_date;
2745 
2746      END IF;
2747 
2748    -- Set the return status
2749    x_return_status := l_return_status;
2750 
2751    IF (is_debug_procedure_on) THEN
2752        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2753    END IF;
2754 
2755   EXCEPTION
2756 
2757      WHEN OKL_API.G_EXCEPTION_ERROR THEN
2758 
2759          x_return_status := OKL_API.G_RET_STS_ERROR;
2760 
2761      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2762 
2763          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2764 
2765      WHEN OTHERS THEN
2766 
2767          -- unexpected error
2768          OKL_API.set_message(
2769                          p_app_name      => 'OKC',
2770                          p_msg_name      => g_unexpected_error,
2771                          p_token1        => g_sqlcode_token,
2772                          p_token1_value  => sqlcode,
2773                          p_token2        => g_sqlerrm_token,
2774                          p_token2_value  => sqlerrm);
2775 
2776           x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2777 
2778   END set_currency_defaults;
2779 
2780 
2781  -- Start of comments
2782   --
2783   -- Procedure Name : get_net_gain_loss
2784   -- Description    : returns the net gain loss on a termination quote
2785   -- Business Rules :
2786   -- Parameters     :  IN  parameters  -  quote header, contract id
2787   --                :  OUT parameters  -  net gain loss, return status
2788   -- Version        : 1.0
2789   -- History        : rkuttiya created 15-SEP-2003  Bug: 2794685
2790   --                : RMUNJULU 2794685 Added comments
2791   --                : rmunjulu 3797384 Added code for passing quote_eff_from date
2792   --                  and quote_id to formula engine
2793   -- rmunjulu EDAT 29-Dec-04 did to_char to convert to right format
2794 
2795  PROCEDURE Get_Net_Gain_Loss(
2796 	p_quote_rec	    IN quot_rec_type,
2797 	p_chr_id	    IN NUMBER,
2798 	x_return_status	    OUT NOCOPY VARCHAR2,
2799 	x_net_gain_loss	    OUT NOCOPY NUMBER)   IS
2800 
2801     l_return_status	   VARCHAR2(1) := OKL_API.G_RET_STS_ERROR;
2802     l_rule_code		   CONSTANT VARCHAR2(30) := 'AMGALO';
2803     l_rgd_code		   VARCHAR2(30);
2804     l_qtev_rec             okl_trx_quotes_pub.qtev_rec_type;
2805     l_rule_khr_id          NUMBER;
2806 
2807 
2808     l_calc_option	   VARCHAR2(150);
2809     l_fixed_value	   NUMBER;
2810     l_formula_name	   VARCHAR2(150);
2811 
2812     l_rulv_rec	       OKL_RULE_PUB.rulv_rec_type;
2813     l_params	       OKL_EXECUTE_FORMULA_PUB.ctxt_val_tbl_type;
2814     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'Get_Net_Gain_Loss';
2815     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2816     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2817     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2818 BEGIN
2819 
2820   IF (is_debug_procedure_on) THEN
2821        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
2822   END IF;
2823 
2824   l_qtev_rec.khr_id    := p_quote_rec.khr_id;
2825   l_qtev_rec.qtp_code  := p_quote_rec.qtp_code;
2826 
2827   IF l_qtev_rec.qtp_code LIKE 'TER_RECOURSE%' THEN
2828     l_rgd_code := 'AVTGAL';
2829   ELSE
2830     l_rgd_code := 'AMTGAL';
2831   END IF;
2832 
2833 --get the rule attributes
2834   l_rule_khr_id := okl_am_util_pvt.get_rule_chr_id (l_qtev_rec);
2835 
2836    IF (is_debug_statement_on) THEN
2837        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2838        'Before call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
2839   END IF;
2840 
2841   OKL_AM_UTIL_PVT.get_rule_record(
2842 		p_rgd_code	=> l_rgd_code,
2843 		p_rdf_code	=> l_rule_code,
2844 		p_chr_id	=> l_rule_khr_id,
2845 		p_cle_id	=> NULL,
2846 		x_rulv_rec	=> l_rulv_rec,
2847  		x_return_status	=> l_return_status,
2848 		p_message_yn	=> FALSE);
2849 
2850   IF (is_debug_statement_on) THEN
2851        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2852        'after call to OKL_AM_UTIL_PVT.get_rule_record :'||l_return_status);
2853        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2854        'l_rgd_code :'||l_rgd_code);
2855        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2856        'l_rule_code :'||l_rule_code);
2857        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2858        'l_rule_khr_id :'||l_rule_khr_id);
2859   END IF;
2860 
2861   IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
2862     l_calc_option	  := l_rulv_rec.rule_information1;
2863     l_fixed_value	  := NVL (To_Number (l_rulv_rec.rule_information2), 0);
2864     l_formula_name    := l_rulv_rec.rule_information3;
2865   END IF;
2866 
2867   IF l_calc_option = 'NOT_APPLICABLE' THEN -- Net Gain/Loss Option is NOT APPLICABLE
2868 
2869     x_net_gain_loss := 0;
2870 
2871   ELSIF l_calc_option = 'USE_FIXED_AMOUNT' THEN -- Net Gain/Loss Option is FIXED AMOUNT
2872 
2873     x_net_gain_loss := l_fixed_value;
2874 
2875   ELSIF l_calc_option = 'USE_FORMULA' THEN -- Net Gain/Loss Option is FORMULA
2876 
2877       l_params(1).name   := 'QUOTE_ID';
2878       l_params(1).value  := p_quote_rec.id;
2879 
2880       --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
2881 
2882       -- set the operands for formula engine with quote_effective_from date
2883       l_params(2).name := 'quote_effective_from_date';
2884       l_params(2).value := to_char(p_quote_rec.date_effective_from, 'MM/DD/YYYY'); -- rmunjulu EDAT 29-Dec-04 did to_char to convert to right format
2885 
2886       -- set the operands for formula engine with quote_id
2887       l_params(3).name := 'quote_id';
2888       l_params(3).value := to_char(p_quote_rec.id);
2889 
2890       --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End   ++++++++++++++++
2891   IF (is_debug_statement_on) THEN
2892        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2893        'Before call to OKL_AM_UTIL_PVT.get_formula_value :'||l_return_status);
2894    END IF;
2895       -- Get the formula value for the formula for Net Gain/Loss Formula
2896       OKL_AM_UTIL_PVT.get_formula_value (
2897 				p_formula_name	          => l_formula_name,
2898 				p_chr_id	          => l_rule_khr_id,
2899 				p_cle_id                  => NULL,
2900     				p_additional_parameters   => l_params,
2901 				x_formula_value           => x_net_gain_loss,
2902 				x_return_status	          => l_return_status);
2903   IF (is_debug_statement_on) THEN
2904        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2905        'after call to OKL_AM_UTIL_PVT.get_formula_value :'||l_return_status);
2906         OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2907        'l_formula_name :'||l_formula_name);
2908        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
2909        'l_rule_khr_id :'||l_rule_khr_id);
2910   END IF;
2911 
2912       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2913         x_net_gain_loss := 0;
2914 	--RAISE OKL_API.G_EXCEPTION_ERROR;
2915       END IF;
2916   ELSE
2917     x_net_gain_loss := 0;
2918   END IF;
2919 
2920 IF (is_debug_procedure_on) THEN
2921        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'End(-)');
2922 END IF;
2923 
2924 EXCEPTION
2925    WHEN OKL_API.G_EXCEPTION_ERROR THEN
2926      x_return_status := OKL_API.G_RET_STS_ERROR;
2927     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2928      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2929     WHEN OTHERS THEN
2930             IF (is_debug_exception_on) THEN
2931             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,L_MODULE_NAME, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2932                    || sqlcode || ' , SQLERRM : ' || sqlerrm);
2933         END IF;
2934 
2935      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2936      OKL_API.set_message(p_app_name      => g_app_name,
2937                          p_msg_name      => g_unexpected_error,
2938                          p_token1        => g_sqlcode_token,
2939                          p_token1_value  => sqlcode,
2940                          p_token2        => g_sqlerrm_token,
2941                          p_token2_value  => sqlerrm);
2942 END Get_Net_Gain_Loss;
2943 
2944 
2945   -- Start of comments
2946   --
2947   -- Procedure Name : create_terminate_quote
2948   -- Description    : create the terminate quote
2949   -- Business Rules :
2950   -- Parameters     : quote header, quote lines
2951   -- Version        : 1.0
2952   -- History     : SECHAWLA 25-NOV-02 - Bug #2680542 :
2953   --               1) Added x_partial_asset_line out parameter to validate_quote
2954   --                  procedure call
2955   --               2) used x_partial_asset_line parameter later in the procedure
2956   --                  to check if quote includes partial asset line.
2957   --               3) removed the code to populate l_asset_tbl as it is no longer
2958   --                  required to be passed to calculate quote api.
2959   --               4) passed lp_assn_tbl instead of l_asset_tbl to calculate quote
2960   --                  api as the calculate quote api now uses the same asset
2961   --                  record structure as the create quote api.
2962   --               5) Removed DEFAULT from procedure parameters.
2963   --
2964   --             : SECHAWLA 06-DEC-02 - Bug # 2699412 :
2965   --               1) Change the quote type from Auto to Manual,
2966   --                  if Auto Quotes are not allowed
2967   --               2) Call send quote WF only for Auto Quotes
2968   --               3) If quote type changed from Auto to Manual, then
2969   --                  notify manual termination quotes REP
2970   --             : RMUNJULU 23-DEC-02 2726739 Multi-currency changes, default
2971   --               currency columns
2972   --             : SECHAWLA 02-JAN-03  2724951 : Changed the event name for
2973   --               Notify Manual Quote Rep WF
2974   --             : GKADARKA 06-JAN-03 2683876 Added code to check for non
2975   --               terminated assets in cursor
2976   --             : SECHAWLA 16-JAN-02 Bug # 2754280 : Changed the call to fn
2977   --               get_user_profile_option_name to refer it from am util
2978   --             : SECHAWLA 14-FEB-03 Bug 2749690 : Added code to update the
2979   --               quote header with total net investment,
2980   --               unbilled rec and residual value from all the quote lines
2981   --             : RMUNJULU 18-FEB-03 2804703 Chngd cursor to get active lines
2982   --             : SECHAWLA 18-FEB-03 2807201 Moved the check_quote_type procedure call from
2983   --               validate quote to the beginning if this procedure.
2984   --             : SECHAWLA 28-FEB-03 2757175 Modified the Manual Quote notification message to
2985   --               display the profile value and not the underlying ID.
2986   --             : SECHAWLA 14-APR-03 2902588 Changed the standard REQUIRED message to OKL_AM_NO_VENDOR_PROGRAM
2987   --               in the not null validation of l_rule_chr_id
2988   --             : SECHAWLA 15-APR-03 2902588 Changed the fetch order of columns in cur_k_end_date cursor.
2989   --             : SECHAWLA 03-OCT-03 ER 2777984 Calculate Quote Payments for a partial termination quote
2990   --             : RMUNJULU 3241502 Added code to set split_asset_number with UPPER CASE
2991   --             : rmunjulu 3842101 changed code so that gainloss is done after quote updated for net investment
2992   --             : RMUNJULU EDT 3797384 Added code to default eff_from_date and
2993   --               changed condition to check for early termination yn
2994   --             : RMUNJULU LOANS_ENHANCEMENTS Add code to evaluate and populate perdiem amount
2995   -- End of comments
2996   PROCEDURE create_terminate_quote(
2997     p_api_version               IN  NUMBER,
2998     p_init_msg_list             IN  VARCHAR2 ,
2999     x_return_status             OUT NOCOPY VARCHAR2,
3000     x_msg_count                 OUT NOCOPY NUMBER,
3001     x_msg_data                  OUT NOCOPY VARCHAR2,
3002     p_quot_rec                  IN  quot_rec_type,
3003     p_assn_tbl			        IN  assn_tbl_type,
3004     p_qpyv_tbl			        IN  qpyv_tbl_type ,
3005     x_quot_rec                  OUT NOCOPY quot_rec_type,
3006     x_tqlv_tbl			        OUT NOCOPY tqlv_tbl_type,
3007     x_assn_tbl			        OUT NOCOPY assn_tbl_type) AS
3008 
3009     -- SECHAWLA 14-APR-03 2902588 : Added contract_number in the SELECT clause. Changed FROM claue to use
3010     -- okc_k_headers_b instead of okc_k_headers_v
3011     -- Cursor to get the end date of the contract
3012     CURSOR cur_k_end_date ( p_chr_id NUMBER) IS
3013       SELECT  contract_number, end_date
3014       FROM    OKC_K_HEADERS_B
3015       WHERE   id = p_chr_id;
3016 
3017     -- Cursor to get the number of financial assets for the contract
3018     -- Outer join with line styles in UV... but gives error here in calculate quote
3019     -- GKADARKA 06-JAN-03 2683876 Added code to check for non terminated assets
3020     -- RMUNJULU 18-FEB-03 2804703 Changed cursor to check for active lines only
3021     CURSOR cur_k_assets ( p_chr_id NUMBER ) IS
3022       SELECT COUNT(OKLV.id )
3023       FROM   OKC_K_LINES_V       OKLV,
3024              OKC_LINE_STYLES_V   OLSV,
3025              OKC_K_HEADERS_V     KHR
3026       WHERE  OKLV.lse_id = OLSV.id
3027       AND    OLSV.lty_code = 'FREE_FORM1'
3028       AND    OKLV.chr_id = p_chr_id
3029       AND    OKLV.sts_code = KHR.sts_code
3030       AND    OKLV.chr_id = KHR.id;
3031       --AND    OKLV.date_terminated IS NULL; -- RMUNJULU 18-FEB-03 2804703 removed
3032 
3033     --SECHAWLA 28-FEB-03 Bug # 2757175 : Added the following cursor
3034     -- This cursor isused to get the display name for a role
3035     CURSOR l_wfroles_csr(p_name wf_roles.name%TYPE) IS
3036     SELECT display_name
3037     FROM   wf_roles
3038     WHERE  name = p_name;
3039 
3040     l_display_name           wf_roles.display_name%TYPE;
3041     lx_contract_status       VARCHAR2(200);
3042     --SECHAWLA 28-FEB-03 Bug # 2757175 : end new declarations
3043 
3044     lp_quot_rec              quot_rec_type := p_quot_rec;
3045     lx_quot_rec              quot_rec_type;
3046     lp_assn_tbl              assn_tbl_type := p_assn_tbl;
3047     lx_assn_tbl              assn_tbl_type := p_assn_tbl;
3048     lx_tqlv_tbl              tqlv_tbl_type;
3049     l_qpyv_tbl               qpyv_tbl_type;
3050     l_quote_eff_days         NUMBER;
3051     l_quote_eff_max_days     NUMBER;
3052     l_days_before_k_exp      NUMBER;
3053     l_api_version            CONSTANT NUMBER := 1;
3054     l_api_name               CONSTANT VARCHAR2(30) := 'create_terminate_quote';
3055     l_return_status          VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3056     l_no_of_assets           NUMBER := -1;
3057     l_k_end_date             DATE;
3058     l_sys_date               DATE;
3059     i                        NUMBER := 0;
3060     l_rule_chr_id            NUMBER;
3061     l_event_name             VARCHAR2(2000);
3062     lx_partial_asset_line    BOOLEAN;
3063 
3064     lx_auto_to_manual        BOOLEAN := FALSE; --added
3065     lx_new_quote_type        VARCHAR2(30); --added
3066     l_user_profile_name      VARCHAR2(240); --added
3067     l_manual_quote_rep       VARCHAR2(320); --added
3068 
3069     --SECHAWLA 14-FEB-03 Bug 2749690 : new declarations
3070     l_total_net_investment   NUMBER := 0;
3071     l_total_unbilled_rec     NUMBER := 0;
3072     l_total_residual_value   NUMBER := 0;
3073     lp_empty_quot_rec        quot_rec_type;
3074 
3075     -- SECHAWLA 14-APR-03 2902588 : New Declarations
3076     l_contract_number        okc_k_headers_b.contract_number%TYPE;
3077 
3078     --rkuttiya 15-SEP-2003 for bug: 2794685
3079     lx_net_gain_loss    NUMBER;
3080 
3081     -- rmunjulu LOANS_ENHANCEMENTS
3082     l_per_diem_amt NUMBER;
3083     l_params OKL_EXECUTE_FORMULA_PUB.ctxt_val_tbl_type;
3084 
3085     L_MODULE_NAME VARCHAR2(500) := G_MODULE_NAME||'create_terminate_quote';
3086     is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3087     is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3088     is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3089   BEGIN
3090 
3091    IF (is_debug_procedure_on) THEN
3092        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'Begin(+)');
3093    END IF;
3094 
3095    --Print Input Variables
3096    IF (is_debug_statement_on) THEN
3097        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3098               'p_api_version :'||p_api_version);
3099        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3100               'p_init_msg_list :'||p_init_msg_list);
3101 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.id : '||p_quot_rec.id     );
3102 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qrs_code : '||p_quot_rec.qrs_code    );
3103 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qst_code : '||p_quot_rec.qst_code               );
3104 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_qte_id : '||p_quot_rec.consolidated_qte_id     );
3105 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.khr_id : '||p_quot_rec.khr_id                 );
3106 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.art_id : '||p_quot_rec.art_id                 );
3107 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.qtp_code : '||p_quot_rec.qtp_code               );
3108 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.trn_code : '||p_quot_rec.trn_code                 );
3109 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.pdt_id : '||p_quot_rec.pdt_id                  );
3110 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_from : '||p_quot_rec.date_effective_from     );
3111 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.quote_number : '||p_quot_rec.quote_number            );
3112 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.early_termination_yn : '||p_quot_rec.early_termination_yn       );
3113 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.partial_yn : '||p_quot_rec.partial_yn            );
3114 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.preproceeds_yn : '||p_quot_rec.preproceeds_yn   );
3115 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.summary_format_yn : '||p_quot_rec.summary_format_yn     );
3116 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.consolidated_yn : '||p_quot_rec.consolidated_yn     );
3117 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_requested : '||p_quot_rec.date_requested   );
3118 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_proposal : '||p_quot_rec.date_proposal   );
3119 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_effective_to : '||p_quot_rec.date_effective_to    );
3120 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.date_accepted : '||p_quot_rec.date_accepted          );
3121 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.payment_received_yn : '||p_quot_rec.payment_received_yn      );
3122 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.requested_by : '||p_quot_rec.requested_by               );
3123 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.approved_yn : '||p_quot_rec.approved_yn                  );
3124 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.accepted_yn : '||p_quot_rec.accepted_yn                   );
3125 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.org_id : '||p_quot_rec.org_id                        );
3126 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.purchase_amount : '||p_quot_rec.purchase_amount               );
3127 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.purchase_formula : '||p_quot_rec.purchase_formula              );
3128 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.asset_value : '||p_quot_rec.asset_value                   );
3129 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.residual_value : '||p_quot_rec.residual_value                );
3130 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.unbilled_receivables : '||p_quot_rec.unbilled_receivables          );
3131 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.gain_loss : '||p_quot_rec.gain_loss                     );
3132 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.PERDIEM_AMOUNT : '||p_quot_rec.PERDIEM_AMOUNT                );
3133 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.currency_code : '||p_quot_rec.currency_code                 );
3134 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.currency_conversion_code : '||p_quot_rec.currency_conversion_code      );
3135 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.legal_entity_id : '||p_quot_rec.legal_entity_id               );
3136 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_quot_rec.repo_quote_indicator_yn : '||p_quot_rec.repo_quote_indicator_yn       );
3137 
3138       IF (p_assn_tbl.COUNT > 0) THEN
3139       FOR i IN p_assn_tbl.FIRST..p_assn_tbl.LAST LOOP
3140 
3141 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_id   :'|| p_assn_tbl(i).p_asset_id   );
3142 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_number   :'|| p_assn_tbl(i).p_asset_number      );
3143 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_asset_qty   :'|| p_assn_tbl(i).p_asset_qty         );
3144 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_quote_qty   :'|| p_assn_tbl(i).p_quote_qty         );
3145 	OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,L_MODULE_NAME,'p_assn_tbl('||i||').'||'p_split_asset_number   :'|| p_assn_tbl(i).p_split_asset_number);
3146       End loop;
3147       END IF;
3148 
3149    END IF;
3150 
3151 
3152    IF (is_debug_statement_on) THEN
3153        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3154               'before call to OKL_API.START_ACTIVITY :'||l_return_status);
3155    END IF;
3156 
3157 
3158 
3159 
3160 
3161     --Check API version, initialize message list and create savepoint.
3162     l_return_status := OKL_API.START_ACTIVITY(l_api_name,
3163                                               G_PKG_NAME,
3164                                               p_init_msg_list,
3165                                               l_api_version,
3166                                               p_api_version,
3167                                               '_PVT',
3168                                               x_return_status);
3169 
3170    IF (is_debug_statement_on) THEN
3171        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3172        'after call to OKL_API.START_ACTIVITY :'||l_return_status);
3173    END IF;
3174 
3175     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3176       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3177     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3178       RAISE OKL_API.G_EXCEPTION_ERROR;
3179     END IF;
3180 
3181     SELECT SYSDATE INTO l_sys_date FROM DUAL;
3182 
3183     --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
3184     -- RMUNJULU EDT 3797384 default the date effective from in the beginning
3185     IF lp_quot_rec.date_effective_from IS NULL
3186     OR lp_quot_rec.date_effective_from = OKL_API.G_MISS_DATE THEN
3187 
3188        lp_quot_rec.date_effective_from := l_sys_date;
3189 
3190     END IF;
3191     --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End   ++++++++++++++++
3192 
3193     -- SECHAWLA 28-FEB-03 Bug # 2757175 : Moved the following validation from validate_contract procedure
3194 
3195     -- Call the validate contract to check contract status
3196 
3197    IF (is_debug_statement_on) THEN
3198        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3199        'before call to OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract :'||l_return_status);
3200    END IF;
3201 
3202 
3203     OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract(
3204            p_api_version                 =>   p_api_version,
3205            p_init_msg_list               =>   OKL_API.G_FALSE,
3206            x_return_status               =>   l_return_status,
3207            x_msg_count                   =>   x_msg_count,
3208            x_msg_data                    =>   x_msg_data,
3209            p_contract_id                 =>   lp_quot_rec.khr_id,
3210            p_control_flag                =>   'TRMNT_QUOTE_CREATE',
3211            x_contract_status             =>   lx_contract_status);
3212 
3213    IF (is_debug_statement_on) THEN
3214        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3215        'after call to OKL_AM_LEASE_LOAN_TRMNT_PUB.validate_contract :'||l_return_status);
3216    END IF;
3217 
3218     -- If error then above api will set the message, so exit now
3219     IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3220       x_return_status := OKL_API.G_RET_STS_ERROR;
3221       RAISE OKL_API.G_EXCEPTION_ERROR;
3222     END IF;
3223     -- SECHAWLA 28-FEB-03 Bug # 2757175 :end moved code
3224 
3225     OPEN cur_k_end_date(lp_quot_rec.khr_id);
3226     -- SECHAWLA 14-APR-03 2902588 : fetched the new column : contract_number
3227     FETCH cur_k_end_date INTO  l_contract_number, l_k_end_date ;  -- SECHAWLA 15-APR-03 2902588 : Changed the fetch order of columns
3228     IF cur_k_end_date%NOTFOUND THEN
3229       l_k_end_date := OKL_API.G_MISS_DATE;
3230     END IF;
3231     CLOSE cur_k_end_date;
3232 
3233     OPEN cur_k_assets (lp_quot_rec.khr_id);
3234     FETCH cur_k_assets INTO  l_no_of_assets;
3235     IF cur_k_assets%NOTFOUND THEN
3236       l_no_of_assets := -1;
3237     END IF;
3238     CLOSE cur_k_assets;
3239 
3240     -- SECHAWLA 18-FEB-03 Bug # 2807201 : Moved the quote_type_check procedure call here from vaidate_quote
3241     -- as we want to validate and change the quote type (if required) in the beginning, before any other processing
3242     -- check if quote type is valid
3243     lx_new_quote_type := lp_quot_rec.qtp_code; ---SECHAWLA 2699412 added
3244 
3245     -- rmunjulu 4923976 : added if check so that quote type check should not be done for TER_RELEASE_WO_PURCHASE quote
3246     IF lp_quot_rec.qtp_code <> 'TER_RELEASE_WO_PURCHASE' THEN
3247 
3248        IF (is_debug_statement_on) THEN
3249            OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3250            'before call to quote_type_check :'||l_return_status);
3251        END IF;
3252     quote_type_check(
3253           -- p_qtp_code        =>  p_quot_rec.qtp_code, -- SECHAWLA 2699412
3254            p_qtp_code        =>  lx_new_quote_type, -- SECHAWLA 2699412 changed
3255            p_khr_id          =>  lp_quot_rec.khr_id, -- SECHAWLA 02-JAN-03 Added
3256            x_auto_to_manual  =>  lx_auto_to_manual, -- -SECHAWLA 2699412 added
3257            x_return_status   =>  l_return_status);
3258 
3259         IF (is_debug_statement_on) THEN
3260             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3261             'after call to quote_type_check :'||l_return_status);
3262         END IF;
3263 
3264     END IF;     -- rmunjulu 4923976
3265 
3266     IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3267       x_return_status := OKL_API.G_RET_STS_ERROR;
3268       --Please select a valid Quote Type.
3269       OKL_API.set_message( p_app_name      => 'OKL',
3270                            p_msg_name      =>'OKL_AM_QTP_CODE_INVALID');
3271       RAISE OKL_API.G_EXCEPTION_ERROR; -- SECHAWLA 28-FEB-03 Bug 2757175 : Changed the exception name as a result
3272                                        -- of moving this procedure from validate_quote on 18-FEB-03 Bug # 2807201
3273     END IF;
3274 
3275        --SECHAWLA 06-DEC-02 - Bug # 2699412 -- Added
3276     IF (lx_auto_to_manual) THEN
3277       lp_quot_rec.qtp_code := lx_new_quote_type;
3278     END IF;
3279 
3280 -- SECHAWLA 18-FEB-03 Bug # 2807201 : end moved code
3281 
3282     l_rule_chr_id := okl_am_util_pvt.get_rule_chr_id (lp_quot_rec);
3283 
3284     -- SECHAWLA 28-FEB-03 Bug # 2757175 : Added a not null validation for l_rule_chr_id
3285     IF l_rule_chr_id IS NULL THEN
3286        x_return_status := OKL_API.G_RET_STS_ERROR;
3287        -- SECHAWLA 14-APR-03 2902588 : Use the following message instead of the standard REQUIRED message
3288 
3289        --Unable to create quote because the contract CONTRACT_NUMBER does not have an associated vendor program.
3290        OKC_API.set_message( p_app_name      => 'OKL',
3291                             p_msg_name      => 'OKL_AM_NO_VENDOR_PROGRAM',
3292                             p_token1        => 'CONTRACT_NUMBER',
3293                             p_token1_value  => l_contract_number);
3294        RAISE OKL_API.G_EXCEPTION_ERROR;
3295     END IF;
3296 
3297     -- SECHAWLA  Bug # 2699412 : Moved the following code here so that
3298     -- l_days_before_k_exp can be passed to validate_quote
3299     -- to check for early terminations
3300 
3301 
3302         IF (is_debug_statement_on) THEN
3303             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3304             'before call to term_status :'||l_return_status);
3305         END IF;
3306    -- set term status from rules
3307     term_status(
3308            p_quot_rec             => lp_quot_rec,
3309            p_rule_chr_id          => l_rule_chr_id,
3310            x_days_before_k_exp    => l_days_before_k_exp,
3311            x_return_status        => l_return_status);
3312 
3313         IF (is_debug_statement_on) THEN
3314              OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3315              'after call to term_status :'||l_return_status);
3316         END IF;
3317 
3318     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3319       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3320     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3321       RAISE OKL_API.G_EXCEPTION_ERROR;
3322     END IF;
3323     -- end moved code
3324 
3325     -- SECHAWLA Bug #2680542 : Added x_partial_asset_line parameter to
3326     -- validate_quote procedure call
3327     -- check if quote valid
3328      IF (is_debug_statement_on) THEN
3329             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3330             'before call to validate_quote :'||l_return_status);
3331      END IF;
3332 
3333     validate_quote(
3334     	p_api_version	       => p_api_version,
3335     	p_init_msg_list	     => OKL_API.G_FALSE,
3336     	x_return_status	     => l_return_status,
3337     	x_msg_count          => x_msg_count,
3338     	x_msg_data	         => x_msg_data,
3339     	p_quot_rec	         => lp_quot_rec,
3340     	p_assn_tbl	         => lp_assn_tbl,
3341     	p_k_end_date	       => l_k_end_date,
3342     	p_no_of_assets	     => l_no_of_assets,
3343     	p_sys_date	         => l_sys_date,
3344     	p_rule_chr_id        => l_rule_chr_id,
3345         p_days_before_k_exp  => l_days_before_k_exp,  --SECHAWLA 06-DEC-02 2699412 added
3346         x_partial_asset_line => lx_partial_asset_line);
3347 
3348      IF (is_debug_statement_on) THEN
3349             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3350             'after call to validate_quote :'||l_return_status);
3351      END IF;
3352 
3353     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3354       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3355     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3356       RAISE OKL_API.G_EXCEPTION_ERROR;
3357     END IF;
3358 
3359     -- RMUNJULU 3241502 Added code to set split_asset_number with UPPER CASE
3360     IF (lp_assn_tbl.COUNT > 0) THEN
3361       FOR i IN lp_assn_tbl.FIRST..lp_assn_tbl.LAST LOOP
3362 
3363         IF  lp_assn_tbl(i).p_split_asset_number IS NOT NULL
3364         AND lp_assn_tbl(i).p_split_asset_number <> OKL_API.G_MISS_CHAR THEN
3365            lp_assn_tbl(i).p_split_asset_number := UPPER(lp_assn_tbl(i).p_split_asset_number);
3366         END IF;
3367       END LOOP;
3368     END IF;
3369 
3370     IF (is_debug_statement_on) THEN
3371             OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3372             'before call to quote_effectivity :'||l_return_status);
3373      END IF;
3374     -- set the date eff to from rules
3375     quote_effectivity(
3376            p_quot_rec             => lp_quot_rec,
3377            p_rule_chr_id          => l_rule_chr_id,
3378            x_quote_eff_days       => l_quote_eff_days,
3379            x_quote_eff_max_days   => l_quote_eff_max_days,
3380            x_return_status        => l_return_status);
3381 
3382       IF (is_debug_statement_on) THEN
3383           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3384           'after call to quote_effectivity :'||l_return_status);
3385      END IF;
3386 
3387     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3388       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3389     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3390       RAISE OKL_API.G_EXCEPTION_ERROR;
3391     END IF;
3392 
3393     -- check if early termination
3394     IF (lp_quot_rec.early_termination_yn IS NULL)
3395     OR (lp_quot_rec.early_termination_yn = OKL_API.G_MISS_CHAR) THEN
3396     --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- Start ++++++++++++++++
3397 --      IF (TRUNC(l_sys_date) < TRUNC(l_k_end_date) - l_days_before_k_exp) THEN
3398       -- rmunjulu EDT 3797384 changed check to check based on effective date
3399       IF (TRUNC(lp_quot_rec.date_effective_from) < TRUNC(l_k_end_date) - l_days_before_k_exp) THEN
3400         lp_quot_rec.early_termination_yn := 'Y';
3401       ELSE
3402         lp_quot_rec.early_termination_yn := 'N';
3403       END IF;
3404     --+++++++++ rmunjulu 3797384 Future Dated Term Qte -- End   ++++++++++++++++
3405     END IF;
3406 
3407     -- check if partial quote
3408     IF (lp_quot_rec.partial_yn IS NULL)
3409     OR (lp_quot_rec.partial_yn = OKL_API.G_MISS_CHAR) THEN
3410     -- SECHAWLA Bug #2680542 : Added (lx_partial_asset_line) condition to
3411     -- the following IF to check if the
3412     -- quote is a partial quote
3413       IF (p_assn_tbl.COUNT < l_no_of_assets)
3414       OR (lx_partial_asset_line) THEN -- added second condition
3415         lp_quot_rec.partial_yn :=  'Y';
3416       ELSE
3417         lp_quot_rec.partial_yn :=  'N';
3418       END IF;
3419     END IF;
3420 
3421 
3422      IF (is_debug_statement_on) THEN
3423           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3424           'before call to set_quote_defaults :'||l_return_status);
3425      END IF;
3426 
3427     -- Set the quote defaults
3428     set_quote_defaults(
3429          px_quot_rec              => lp_quot_rec,
3430          p_rule_chr_id            => l_rule_chr_id,
3431          p_sys_date               => l_sys_date,
3432          x_return_status          => l_return_status);
3433 
3434      IF (is_debug_statement_on) THEN
3435           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3436           'after call to set_quote_defaults :'||l_return_status);
3437      END IF;
3438 
3439     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3440       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3441     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3442       RAISE OKL_API.G_EXCEPTION_ERROR;
3443     END IF;
3444 
3445 
3446 
3447      IF (is_debug_statement_on) THEN
3448           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3449           'before call to set_currency_defaults :'||l_return_status);
3450      END IF;
3451 
3452     -- RMUNJULU 23-DEC-02 2726739 Multi-currency changes
3453     -- Default the Multi-Currency Columns
3454     set_currency_defaults(
3455          px_quot_rec              => lp_quot_rec,
3456          p_sys_date               => l_sys_date,
3457          x_return_status          => l_return_status);
3458 
3459      IF (is_debug_statement_on) THEN
3460           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3461           'after call to set_currency_defaults :'||l_return_status);
3462      END IF;
3463 
3464     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3465       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3466     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3467       RAISE OKL_API.G_EXCEPTION_ERROR;
3468     END IF;
3469 
3470     IF (is_debug_statement_on) THEN
3471           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3472           'before call to OKL_TRX_QUOTES_PUB.insert_trx_quotes :'||l_return_status);
3473      END IF;
3474 
3475     -- call the pub tapi insert
3476     OKL_TRX_QUOTES_PUB.insert_trx_quotes (
3477          p_api_version      =>   p_api_version,
3478          p_init_msg_list    =>   OKL_API.G_FALSE,
3479          x_msg_count        =>   x_msg_count,
3480          x_msg_data         =>   x_msg_data,
3481          p_qtev_rec         =>   lp_quot_rec,
3482          x_qtev_rec         =>   lx_quot_rec,
3483          x_return_status    =>   l_return_status);
3484 
3485      IF (is_debug_statement_on) THEN
3486           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3487           'after call to OKL_TRX_QUOTES_PUB.insert_trx_quotes :'||l_return_status);
3488      END IF;
3489 
3490     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3491       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3492     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3493       RAISE OKL_API.G_EXCEPTION_ERROR;
3494     END IF;
3495 
3496 
3497      IF (is_debug_statement_on) THEN
3498           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3499           'before call to OKL_AM_PARTIES_PVT.create_quote_parties :'||l_return_status);
3500      END IF;
3501 
3502     -- Create quote parties
3503     OKL_AM_PARTIES_PVT.create_quote_parties (
3504          p_qtev_rec         =>   lx_quot_rec,
3505          p_qpyv_tbl         =>   p_qpyv_tbl,
3506          x_qpyv_tbl         =>   l_qpyv_tbl,
3507          x_return_status    =>   l_return_status);
3508 
3509      IF (is_debug_statement_on) THEN
3510           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3511           'after call to OKL_AM_PARTIES_PVT.create_quote_parties :'||l_return_status);
3512      END IF;
3513 
3514 
3515     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3516       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3517     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3518       RAISE OKL_API.G_EXCEPTION_ERROR;
3519     END IF;
3520 
3521     -- call quote calculation api (pass assets tbl)
3522     -- this will insert quote lines
3523 
3524      IF (is_debug_statement_on) THEN
3525           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3526           'before call to OKL_AM_CALCULATE_QUOTE_PVT.generate :'||l_return_status);
3527      END IF;
3528 
3529     OKL_AM_CALCULATE_QUOTE_PVT.generate(
3530          p_api_version      =>   p_api_version,
3531          p_init_msg_list    =>   OKL_API.G_FALSE,
3532          x_msg_count        =>   x_msg_count,
3533          x_msg_data         =>   x_msg_data,
3534          p_qtev_rec         =>   lx_quot_rec,
3535        --p_asset_tbl        =>   l_asset_tbl, -- SECHAWLA Bug #2680542 : calculate quote api now uses the same asset
3536          p_asset_tbl        =>   lp_assn_tbl,   -- record structure as the create quote api
3537          x_tqlv_tbl         =>   lx_tqlv_tbl,
3538          x_return_status    =>   l_return_status);
3539 
3540      IF (is_debug_statement_on) THEN
3541           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3542           'After call to OKL_AM_CALCULATE_QUOTE_PVT.generate :'||l_return_status);
3543      END IF;
3544 
3545     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3546       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3547     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3548       RAISE OKL_API.G_EXCEPTION_ERROR;
3549     END IF;
3550 
3551     -- SECHAWLA 14-FEB-03 2749690 : sum up the net investment, unbilled receivable and residual value amounts for
3552     -- the quote lines and store the total amounts at the quote header level
3553     IF lx_tqlv_tbl.COUNT > 0 THEN
3554        i := lx_tqlv_tbl.FIRST;
3555        LOOP
3556            IF lx_tqlv_tbl(i).qlt_code = 'AMCFIA' THEN
3557               l_total_net_investment := l_total_net_investment + lx_tqlv_tbl(i).asset_value;
3558               l_total_unbilled_rec := l_total_unbilled_rec + lx_tqlv_tbl(i).unbilled_receivables;
3559               l_total_residual_value := l_total_residual_value + lx_tqlv_tbl(i).residual_value;
3560            END IF;
3561 
3562            EXIT WHEN (i = lx_tqlv_tbl.LAST);
3563            i := lx_tqlv_tbl.NEXT(i);
3564        END LOOP;
3565     END IF;
3566 
3567     -- call the pub tapi update to update the above totals at the header level
3568     lp_quot_rec := lp_empty_quot_rec;
3569     lp_quot_rec.id := lx_quot_rec.id ;
3570     lp_quot_rec.asset_value := l_total_net_investment;
3571     lp_quot_rec.unbilled_receivables := l_total_unbilled_rec;
3572     lp_quot_rec.residual_value := l_total_residual_value;
3573 
3574     IF (is_debug_statement_on) THEN
3575           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3576           'before call to OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3577      END IF;
3578 
3579     OKL_TRX_QUOTES_PUB.update_trx_quotes (
3580          p_api_version      =>   p_api_version,
3581          p_init_msg_list    =>   OKL_API.G_FALSE,
3582          x_msg_count        =>   x_msg_count,
3583          x_msg_data         =>   x_msg_data,
3584          p_qtev_rec         =>   lp_quot_rec,
3585          x_qtev_rec         =>   lx_quot_rec,
3586          x_return_status    =>   l_return_status);
3587 
3588      IF (is_debug_statement_on) THEN
3589           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3590           'After call to OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3591      END IF;
3592 
3593     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3594       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3595     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3596       RAISE OKL_API.G_EXCEPTION_ERROR;
3597     END IF;
3598     -- end new code
3599 
3600 
3601     IF (is_debug_statement_on) THEN
3602           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3603           'before call to get_net_gain_loss :'||l_return_status);
3604      END IF;
3605 
3606    -- rmunjulu 3842101 moved net gain loss calculation here
3607      get_net_gain_loss(
3608                  p_quote_rec		    =>lx_quot_rec,
3609 	             p_chr_id		        =>lx_quot_rec.khr_id,
3610 	             x_return_status	    =>l_return_status,
3611 	             x_net_gain_loss	    =>lx_net_gain_loss)  ;
3612 
3613 
3614 	  IF (is_debug_statement_on) THEN
3615           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3616           'After call to get_net_gain_loss :'||l_return_status);
3617       END IF;
3618 
3619     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3620       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3621     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3622       RAISE OKL_API.G_EXCEPTION_ERROR;
3623     END IF;
3624 
3625     -- rmunjulu 3842101    added this code here so that formula uses calculation from quote
3626     lp_quot_rec := lp_empty_quot_rec;
3627     lp_quot_rec.id := lx_quot_rec.id ;
3628     lp_quot_rec.gain_loss := lx_net_gain_loss;
3629 
3630     l_params(1).name   := 'QUOTE_ID';
3631     l_params(1).value  := lp_quot_rec.id;
3632 
3633     IF (is_debug_statement_on) THEN
3634           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3635           'before call to OKL_AM_UTIL_PVT.get_formula_value :'||l_return_status);
3636      END IF;
3637 
3638     -- rmunjulu LOANS_ENHANCEMENTS Evaluate Quote perdiem amount formula and set quote perdiem value
3639     OKL_AM_UTIL_PVT.get_formula_value(
3640 				p_formula_name	          => 'QUOTE_PERDIEM_AMOUNT',
3641 				p_chr_id	              => lx_quot_rec.khr_id,
3642                 p_cle_id                  => NULL,
3643     	        p_additional_parameters   => l_params,
3644 				x_formula_value           => l_per_diem_amt,
3645 				x_return_status	          => l_return_status);
3646 
3647      IF (is_debug_statement_on) THEN
3648           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3649           'After call to OKL_AM_UTIL_PVT.get_formula_value :'||l_return_status);
3650      END IF;
3651 
3652     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3653       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3654     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3655       RAISE OKL_API.G_EXCEPTION_ERROR;
3656     END IF;
3657 
3658     lp_quot_rec.perdiem_amount := l_per_diem_amt;
3659 
3660 
3661      IF (is_debug_statement_on) THEN
3662           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3663           'Before call to OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3664      END IF;
3665 
3666     -- rmunjulu 3842101 update the quote header again with GAIN LOSS + PERDIEM
3667     OKL_TRX_QUOTES_PUB.update_trx_quotes (
3668          p_api_version      =>   p_api_version,
3669          p_init_msg_list    =>   OKL_API.G_FALSE,
3670          x_msg_count        =>   x_msg_count,
3671          x_msg_data         =>   x_msg_data,
3672          p_qtev_rec         =>   lp_quot_rec,
3673          x_qtev_rec         =>   lx_quot_rec,
3674          x_return_status    =>   l_return_status);
3675 
3676      IF (is_debug_statement_on) THEN
3677          OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3678          'After call to OKL_TRX_QUOTES_PUB.update_trx_quotes :'||l_return_status);
3679      END IF;
3680 
3681     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3682       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3683     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3684       RAISE OKL_API.G_EXCEPTION_ERROR;
3685     END IF;
3686 
3687     -- rmunjulu TNA 4059175 Brought this up above the workflow processing.
3688     -- SECHAWLA 03-OCT-2003 11i10 ER 2777984:Calculate Quote Payments for a partial termination quote
3689     IF lx_quot_rec.partial_yn = 'Y' THEN
3690 
3691      IF (is_debug_statement_on) THEN
3692           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3693           'Before call to OKL_AM_CALC_QUOTE_PYMNT_PVT.calc_quote_payments :'||l_return_status);
3694      END IF;
3695 
3696        OKL_AM_CALC_QUOTE_PYMNT_PVT.calc_quote_payments(
3697             p_api_version		=>   p_api_version,
3698             p_init_msg_list		=>   OKL_API.G_FALSE,
3699             x_return_status		=>   l_return_status,
3700             x_msg_count			=>   x_msg_count,
3701             x_msg_data			=>   x_msg_data,
3702             p_quote_id          =>   lx_quot_rec.id);
3703 
3704       IF (is_debug_statement_on) THEN
3705           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3706           'After call to OKL_AM_CALC_QUOTE_PYMNT_PVT.calc_quote_payments :'||l_return_status);
3707       END IF;
3708 
3709        IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3710             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3711        ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3712             RAISE OKL_API.G_EXCEPTION_ERROR;
3713        END IF;
3714 
3715     END IF;
3716     -- SECHAWLA 03-OCT-2003 11i10 ER : 2777984 end
3717 
3718 /* -- rmunjulu messages come twice so this fix
3719     -- rmunjulu TNA 4059175 Added process message here to get the messages
3720     -- Save messages in database
3721     OKL_AM_UTIL_PVT.process_messages (
3722 	      p_trx_source_table	=> 'OKL_TRX_QUOTES_V',
3723 	      p_trx_id		=> lx_quot_rec.id,
3724 	      x_return_status	=> l_return_status);
3725 
3726     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3727         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3728     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3729        RAISE OKL_API.G_EXCEPTION_ERROR;
3730     END IF;
3731 */
3732 
3733     -- rmunjulu TNA 4059175 Added new IF to check for non Release quotes and DO send quote only for those
3734     IF lx_new_quote_type <> 'TER_RELEASE_WO_PURCHASE' THEN
3735 
3736        -- rmunjulu TNA By this time the quote is already switched to manual if needed so will not go into this if
3737        IF lx_new_quote_type NOT LIKE 'TER_MAN%' THEN -- SECHAWLA 06-DEC-02 - Bug # 2699412 -- added
3738             -- Request quote approval and notification
3739 
3740       IF (is_debug_statement_on) THEN
3741           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3742           'Before call to OKL_AM_WF.raise_business_event :'||l_return_status);
3743        END IF;
3744 
3745             OKL_AM_WF.raise_business_event (
3746                         p_transaction_id => lx_quot_rec.id,
3747                         p_event_name	   => 'oracle.apps.okl.am.sendquote');
3748 
3749        IF (is_debug_statement_on) THEN
3750           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3751           'After call to OKL_AM_WF.raise_business_event :'||l_return_status);
3752        END IF;
3753 
3754        END IF;
3755 
3756        -- SECHAWLA 06-DEC-02 - Bug # 2699412 -- Added the following program logic
3757        -- to send notification to the manual
3758        -- quote representative, if the quote type was changed from Auto to Manual
3759        IF (lx_auto_to_manual) THEN
3760 
3761           -- rmunjulu messages come twice so this fix
3762           -- rmunjulu TNA 4059175 Added process message here to get the messages
3763           -- Save messages in database
3764 
3765          IF (is_debug_statement_on) THEN
3766           OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3767           'Before call to OKL_AM_UTIL_PVT.process_messages  :'||l_return_status);
3768          END IF;
3769 
3770           OKL_AM_UTIL_PVT.process_messages (
3771 	        p_trx_source_table	=> 'OKL_TRX_QUOTES_V',
3772 	        p_trx_id		=> lx_quot_rec.id,
3773 	        x_return_status	=> l_return_status);
3774 
3775           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3776             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3777           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3778             RAISE OKL_API.G_EXCEPTION_ERROR;
3779           END IF;
3780 
3781           -- clear the stack
3782           okl_api.init_msg_list ( p_init_msg_list  => OKL_API.G_TRUE);
3783 
3784           l_manual_quote_rep := fnd_profile.value('OKL_MANUAL_TERMINATION_QUOTE_REP');
3785 
3786           IF l_manual_quote_rep IS NULL THEN
3787 
3788 
3789             IF (is_debug_statement_on) THEN
3790                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3791                 'Before call to okl_am_util_pvt.get_user_profile_option_name  :'||l_return_status);
3792             END IF;
3793 
3794               l_user_profile_name := okl_am_util_pvt.get_user_profile_option_name(
3795                                        p_profile_option_name  => 'OKL_MANUAL_TERMINATION_QUOTE_REP',
3796                                        x_return_status        => l_return_status);
3797 
3798               IF l_return_status = OKL_API.G_RET_STS_ERROR THEN
3799                   --Manual Quote Representative profile is missing.
3800                   OKL_API.set_message( p_app_name      => 'OKL',
3801                                        p_msg_name      => 'OKL_AM_NO_MQ_REP_PROFILE');
3802 
3803                   RAISE okl_api.G_EXCEPTION_ERROR;
3804               ELSIF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3805                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3806               END IF;
3807 
3808               x_return_status := OKL_API.G_RET_STS_ERROR;
3809 
3810               --Profile value not defined
3811               OKL_API.set_message(
3812                                p_app_name      => 'OKL',
3813                                p_msg_name      => 'OKL_AM_RMK_NO_PROFILE_VALUE',
3814                                p_token1        => 'PROFILE',
3815                                p_token1_value  => l_user_profile_name);
3816 
3817               RAISE OKL_API.G_EXCEPTION_ERROR;
3818           END IF;
3819 
3820           --SECHAWLA 28-FEB-03 Bug # 2757175 : get the display name for a role
3821           OPEN   l_wfroles_csr(l_manual_quote_rep);
3822           FETCH  l_wfroles_csr INTO l_display_name;
3823           CLOSE  l_wfroles_csr;
3824 
3825           IF  l_display_name IS NULL THEN
3826               l_display_name := l_manual_quote_rep;
3827           END IF;
3828 
3829           -- Contract only allows for manual quotes. Manual quote request
3830           -- has been sent to MAN_QUOTE_REP.
3831           OKL_API.set_message(
3832 		        p_app_name     => 'OKL',
3833                         p_msg_name     => 'OKL_AM_MAN_QUOTE_ALLOWED',
3834                         p_token1       => 'MAN_QUOTE_REP',
3835                         p_token1_value => l_display_name); --SECHAWLA 28-FEB-03 Bug # 2757175 : Changed to show display_name
3836                                                            -- instead of name
3837 
3838             IF (is_debug_statement_on) THEN
3839                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3840                 'Before call to OKL_AM_WF.raise_business_event p_event_name oracle.apps.okl.am.manualquote  :'||l_return_status);
3841             END IF;
3842 
3843 
3844           --SECHAWLA 28-FEB-03 Bug # 2757175 :  end modifications
3845           -- notify manual quote representative
3846           OKL_AM_WF.raise_business_event (
3847                    p_transaction_id => lx_quot_rec.id,
3848                    p_event_name	   => 'oracle.apps.okl.am.manualquote'); -- SECHAWLA 02-JAN-03  2724951  Changed the event name
3849 
3850           -- Save messages in database
3851           OKL_AM_UTIL_PVT.process_messages (
3852 	        p_trx_source_table	=> 'OKL_TRX_QUOTES_V',
3853 	        p_trx_id		=> lx_quot_rec.id,
3854 	        x_return_status	=> l_return_status);
3855 
3856        ELSE -- if not auto to manual -- rmunjulu TNA 4059175 Added this if
3857 
3858           -- Save messages in database
3859           OKL_AM_UTIL_PVT.process_messages (
3860 	         p_trx_source_table	=> 'OKL_TRX_QUOTES_V',
3861 	         p_trx_id		=> lx_quot_rec.id,
3862 	         x_return_status	=> l_return_status);
3863 
3864           --SECHAWLA 06-DEC-02 - Bug # 2699412 -- added the exception handling
3865           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3866              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3867           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3868              RAISE OKL_API.G_EXCEPTION_ERROR;
3869           END IF;
3870        END IF;
3871        -- SECHAWLA 06-DEC-02 - Bug # 2699412 -- end new code
3872     ELSE -- Quote is Termination Release Without Purchase -- rmunjulu TNA 4059175
3873 
3874        -- Update the quote to approved directly
3875        lp_quot_rec := lp_empty_quot_rec;
3876        lp_quot_rec.id := lx_quot_rec.id ;
3877        lp_quot_rec.qst_code := 'APPROVED';
3878        lp_quot_rec.date_approved := sysdate;
3879 
3880 	    IF (is_debug_statement_on) THEN
3881                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3882                 'Before call to OKL_TRX_QUOTES_PUB.update_trx_quotes'||l_return_status);
3883         END IF;
3884 
3885        -- rmunjulu TNA 4059175 update the quote header with status as APPROVED
3886        OKL_TRX_QUOTES_PUB.update_trx_quotes (
3887          p_api_version      =>   p_api_version,
3888          p_init_msg_list    =>   OKL_API.G_FALSE,
3889          x_msg_count        =>   x_msg_count,
3890          x_msg_data         =>   x_msg_data,
3891          p_qtev_rec         =>   lp_quot_rec,
3892          x_qtev_rec         =>   lx_quot_rec,
3893          x_return_status    =>   l_return_status);
3894 
3895         IF (is_debug_statement_on) THEN
3896                  OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3897                 'After call to OKL_TRX_QUOTES_PUB.update_trx_quotes'||l_return_status);
3898         END IF;
3899 
3900        IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3901          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3902        ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3903          RAISE OKL_API.G_EXCEPTION_ERROR;
3904        END IF;
3905 
3906        -- Save messages in database
3907        OKL_AM_UTIL_PVT.process_messages (
3908 	      p_trx_source_table	=> 'OKL_TRX_QUOTES_V',
3909 	      p_trx_id		=> lx_quot_rec.id,
3910 	      x_return_status	=> l_return_status);
3911 
3912        --SECHAWLA 06-DEC-02 - Bug # 2699412 -- added the exception handling
3913        IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3914           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3915        ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3916           RAISE OKL_API.G_EXCEPTION_ERROR;
3917        END IF;
3918     END IF;
3919 
3920     -- set the return status and out variables
3921     x_return_status := l_return_status;
3922     x_quot_rec      := lx_quot_rec;
3923     x_assn_tbl      := lx_assn_tbl;
3924     x_tqlv_tbl      := lx_tqlv_tbl;
3925 
3926     -- end the transaction
3927     OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3928 
3929 
3930    IF (is_debug_statement_on) THEN
3931                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3932                       'x_return_status..'||x_return_status);
3933    END IF;
3934 
3935    IF (is_debug_procedure_on) THEN
3936        OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,G_MODULE_NAME||'create_terminate_quote. ','End(-)');
3937    END IF;
3938 
3939   EXCEPTION
3940     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3941       IF cur_k_assets%ISOPEN THEN
3942          CLOSE cur_k_assets;
3943       END IF;
3944       IF cur_k_end_date%ISOPEN THEN
3945          CLOSE cur_k_end_date;
3946       END IF;
3947       --SECHAWLA 28-FEB-03 Bug # 2757175 : Close the new cursor
3948       IF l_wfroles_csr%ISOPEN THEN
3949          CLOSE l_wfroles_csr;
3950       END IF;
3951       IF (is_debug_statement_on) THEN
3952                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3953                       'EXCEPTION ERROR');
3954       END IF;
3955       x_return_status := OKL_API.HANDLE_EXCEPTIONS
3956      (
3957         l_api_name,
3958         G_PKG_NAME,
3959         'OKL_API.G_RET_STS_ERROR',
3960         x_msg_count,
3961         x_msg_data,
3962         '_PVT'
3963       );
3964     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3965       IF cur_k_assets%ISOPEN THEN
3966          CLOSE cur_k_assets;
3967       END IF;
3968       IF cur_k_end_date%ISOPEN THEN
3969          CLOSE cur_k_end_date;
3970       END IF;
3971       --SECHAWLA 28-FEB-03 Bug # 2757175 : Close the new cursor
3972       IF l_wfroles_csr%ISOPEN THEN
3973          CLOSE l_wfroles_csr;
3974       END IF;
3975       IF (is_debug_statement_on) THEN
3976                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
3977                       'UNEXPECTED EXCEPTION ERROR');
3978       END IF;
3979       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3980          (
3981         l_api_name,
3982         G_PKG_NAME,
3983         'OKL_API.G_RET_STS_UNEXP_ERROR',
3984         x_msg_count,
3985         x_msg_data,
3986         '_PVT'
3987       );
3988     WHEN OTHERS THEN
3989       IF cur_k_assets%ISOPEN THEN
3990          CLOSE cur_k_assets;
3991       END IF;
3992       IF cur_k_end_date%ISOPEN THEN
3993          CLOSE cur_k_end_date;
3994       END IF;
3995       --SECHAWLA 28-FEB-03 Bug # 2757175 : Close the new cursor
3996       IF l_wfroles_csr%ISOPEN THEN
3997          CLOSE l_wfroles_csr;
3998       END IF;
3999       IF (is_debug_statement_on) THEN
4000                OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,L_MODULE_NAME,
4001                       'OTHER EXCEPTION ERROR');
4002       END IF;
4003       x_return_status :=OKL_API.HANDLE_EXCEPTIONS
4004       (
4005         l_api_name,
4006         G_PKG_NAME,
4007         'OTHERS',
4008         x_msg_count,
4009         x_msg_data,
4010         '_PVT'
4011       );
4012   END create_terminate_quote;
4013 
4014    FUNCTION check_repo_quote(p_quote_id     IN VARCHAR2,
4015                              x_return_status OUT NOCOPY VARCHAR2)
4016                               RETURN VARCHAR2 IS
4017    l_repo_yn   VARCHAR2(1);
4018 
4019    CURSOR check_repo_csr(p_quote_id IN NUMBER) IS
4020    SELECT NVL(repo_quote_indicator_yn,'N')
4021    FROM OKL_TRX_QUOTES_B
4022    WHERE id = p_quote_id;
4023 
4024    BEGIN
4025      -- Check whether the quote is for Repossession
4026      OPEN check_repo_csr(p_quote_id);
4027      FETCH check_repo_csr INTO l_repo_yn;
4028      CLOSE check_repo_csr;
4029 
4030      x_return_status := OKL_API.G_RET_STS_SUCCESS;
4031      RETURN l_repo_yn;
4032    EXCEPTION
4033     WHEN OTHERS THEN
4034 
4035       IF check_repo_csr%ISOPEN THEN
4036         CLOSE check_repo_csr;
4037       END IF;
4038       x_return_status := OKL_API.G_RET_STS_ERROR;
4039    END;
4040 
4041 
4042 
4043 END OKL_AM_CREATE_QUOTE_PVT;